Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(407)

Unified Diff: web/inc/logdog-query-view/view.ts

Issue 2991253003: [logdog] Replace list view with query view. (Closed)
Patch Set: handle enter for submit Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: web/inc/logdog-query-view/view.ts
diff --git a/web/inc/logdog-query-view/view.ts b/web/inc/logdog-query-view/view.ts
new file mode 100644
index 0000000000000000000000000000000000000000..60665d186ec62e15dc0269432e3ca3e67472a6af
--- /dev/null
+++ b/web/inc/logdog-query-view/view.ts
@@ -0,0 +1,127 @@
+/*
+ Copyright 2017 The LUCI Authors. All rights reserved.
+ Use of this source code is governed under the Apache License, Version 2.0
+ that can be found in the LICENSE file.
+*/
+
+///<reference path="../logdog-stream/logdog.ts" />
+///<reference path="../logdog-stream/client.ts" />
+///<reference path="../luci-operation/operation.ts" />
+///<reference path="../luci-sleep-promise/promise.ts" />
+///<reference path="../rpc/client.ts" />
+
+namespace LogDog {
+
+ /** UI element used for rendering an individual query result. */
+ type QueryEntry = {fullPath: string; title: string;};
+
+ /**
+ * Represents the fields of a "logdog-query-view" Polymer element used by
+ * QueryView.
+ */
+ type QueryComponent = {
+ $: {
+ client: luci.PolymerClient;
+ queryPanel: {project: string; path: string; streamType: string;},
+ }
+
+ _setSharedPrefix(prefix: string|null): void;
+ _setQueryResults(results: QueryEntry[]): void;
+ };
+
+ const QUERY_LIMIT = 50;
+
+ /** QueryView manages a "logdog-query-view" Polymer element. */
+ export class QueryView {
+ private currentQuery: luci.Operation|null;
+ private client: LogDog.Client;
+
+ constructor(readonly comp: QueryComponent) {}
+
+ /**
+ * Cancels any ongoing queries and clears all elements to return this to an
+ * initializsed state.
+ */
+ reset() {
+ this._cancelCurrentQuery();
+ this.client = new LogDog.Client(new luci.Client(this.comp.$.client));
+
+ this.comp._setSharedPrefix(null);
+ this.comp._setQueryResults([]);
+ }
+
+ /**
+ * Called to execute a new query.
+ *
+ * If a query is currently executing, it will be cancelled.
+ *
+ * When the query is complete, the UI will be updated with the results.
+ */
+ doQuery() {
+ this._cancelCurrentQuery();
+
+ let qp = this.comp.$.queryPanel;
+ let project = qp.project;
+ let params: LogDog.QueryRequest = {
+ project: project,
+ path: qp.path,
+ };
+
+ /**
+ * Map the "Stream Type" text values in "logdog-query-panel" to their
+ * streamType constants.
+ */
+ switch (qp.streamType) {
+ case 'Text':
+ params.streamType = LogDog.StreamType.TEXT;
+ break;
+
+ case 'Binary':
+ params.streamType = LogDog.StreamType.BINARY;
+ break;
+
+ case 'Datagram':
+ params.streamType = LogDog.StreamType.DATAGRAM;
+ break;
+
+ case 'Any':
+ default:
+ break;
+ }
+
+ let op = new luci.Operation();
+ this.client.query(op, params, '', QUERY_LIMIT).then((result) => {
+ // Do all of the results have the same prefix?
+ let streams = result[0] || [];
+ let sharedPrefix: string|null = null;
+ if (streams.length > 0) {
+ sharedPrefix = streams[0].stream.prefix;
+ for (let i = 1; i < streams.length; i++) {
+ if (streams[i].stream.prefix !== sharedPrefix) {
+ sharedPrefix = null;
+ break;
+ }
+ }
+ }
+ this.comp._setSharedPrefix(sharedPrefix);
+
+ let queryResults = result[0].map((v): QueryEntry => {
+ return {
+ fullPath: v.stream.fullName(),
+ title:
+ ((sharedPrefix) ? ('.../+/' + v.stream.name) : v.stream.path),
+ };
+ });
+ this.comp._setQueryResults(queryResults);
+ });
+ this.currentQuery = op;
+ }
+
+ private _cancelCurrentQuery() {
+ if (this.currentQuery) {
+ this.currentQuery.cancel();
+ this.currentQuery = null;
+ }
+ }
+ }
+}
« no previous file with comments | « web/inc/logdog-query-view/logdog-query-view.html ('k') | web/inc/logdog-stream-view/logdog-stream-view.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698