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

Side by Side Diff: web/inc/logdog-stream-view/logdog-stream-query.html

Issue 2570963003: Revert of Rewrite LogDog log viewer app. (Closed)
Patch Set: Created 4 years 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 unified diff | Download patch
OLDNEW
(Empty)
1 <!--
2 Copyright 2016 The LUCI Authors. All rights reserved.
3 Use of this source code is governed under the Apache License, Version 2.0
4 that can be found in the LICENSE file.
5 -->
6
7 <link rel="import" href="../bower_components/polymer/polymer.html">
8 <link rel="import" href="../rpc/rpc-client.html">
9 <link rel="import" href="../logdog-stream/logdog-stream.html">
10 <link rel="import" href="../logdog-stream/logdog-error.html">
11
12 <!--
13 A class for issuing a LogDog query.
14 -->
15 <script>
16 "use strict";
17
18 function LogDogQueryParams(project) {
19 this.project = project;
20
21 this._getMeta = false;
22 this._path = null;
23 this._contentType = null;
24 this._streamType = null;
25 this._purged = null;
26 this._newer = null;
27 this._older = null;
28 this._protoVersion = null;
29 this._tags = {};
30 }
31
32 /** Enables fetching of stream metadata. */
33 LogDogQueryParams.prototype.getMeta = function() {
34 this._getMeta = true;
35 return this;
36 };
37
38 /** Set the log stream path glob to fetch. */
39 LogDogQueryParams.prototype.path = function(v) {
40 this._path = v;
41 return this;
42 };
43
44 /** The content type to filter on. */
45 LogDogQueryParams.prototype.contentType = function(v) {
46 this._contentType = v;
47 return this;
48 };
49
50 /**
51 * The stream type. Can be "text", "binary", "datagram", or null for any.
52 */
53 LogDogQueryParams.prototype.streamType = function(v) {
54 this._streamType = v;
55 return this;
56 };
57
58 /** Filter purged streams? true, false, or null for no filter. */
59 LogDogQueryParams.prototype.purged = function(v) {
60 this._purged = v;
61 return this;
62 };
63
64 /** Filter streams newer than this value? Null for no lower bound. */
65 LogDogQueryParams.prototype.newer = function(v) {
66 this._newer = v.toISOString();
67 return this;
68 };
69
70 /** Filter streams older than this value? Null for no lower bound. */
71 LogDogQueryParams.prototype.older = function(v) {
72 this._older = v.toISOString();
73 return this;
74 };
75
76 /** Filter on protocol version (null for no filter). */
77 LogDogQueryParams.prototype.protoVersion = function(v) {
78 this._protoVersion = v;
79 return this;
80 };
81
82 /** Filter on protocol version (null for no filter). */
83 LogDogQueryParams.prototype.addTag = function(key, value) {
84 this._tags[key] = value;
85 return this;
86 };
87
88 function LogDogQuery(client, params) {
89 this.client = client;
90 this.params = params;
91 }
92
93 /** Returns true if "s" has glob characters in it. */
94 LogDogQuery.isQuery = function(s) {
95 return (s.indexOf("*") >= 0);
96 };
97
98 LogDogQuery.prototype.get = function(cursor, limit) {
99 var project = this.params.project;
100 var body = {
101 project: project,
102 path: this.params._path,
103 content_type: this.params._contentType,
104 proto_version: this.params._protoVersion,
105 tags: this.params._tags,
106 next: cursor,
107 max_results: limit,
108 };
109
110 var trinary = function(field, v) {
111 if (v != null) {
112 body[field] = ((v) ? "YES" : "NO");
113 }
114 }
115 trinary("purged", this.params._purged);
116
117 if (this.params._streamType) {
118 var filter = {};
119 switch (this.params._streamType) {
120 case "text":
121 filter.value = "TEXT";
122 break;
123 case "binary":
124 filter.value = "BINARY";
125 break;
126 case "datagram":
127 filter.value = "DATAGRAM";
128 break;
129 default:
130 throw ("Invalid stream type: " + this.params._streamType);
131 }
132 body.stream_type = filter;
133 }
134 if (this.params._newer) {
135 body.newer = this.params._newer;
136 }
137 if (this.params._older) {
138 body.older = this.params._older;
139 }
140
141 this.client.service = "logdog.Logs";
142 this.client.method = "Query";
143 this.client.request = body;
144
145 return this.client.call().completes.then(function(resp) {
146 resp = resp.response;
147
148 // Normalize the JSON values in "desc".
149 //
150 // JSONPB timestamps are in the form of RFC3339 strings.
151 resp.streams = (resp.streams || []);
152 resp.streams.forEach(function(s) {
153 s.stream = new LogDogStream(project, s.path);
154 if (s.state) {
155 patchState(s.state);
156 }
157 if (s.desc) {
158 patchDescriptor(s.desc);
159 }
160 });
161 return resp;
162 }).catch(function(error) {
163 throw LogDogError.wrapGrpc(error);
164 });
165 };
166
167 /**
168 * Issues a query and iteratively pulls up to "this.limit" results.
169 */
170 LogDogQuery.prototype.getAll = function(limit) {
171 var streams = [];
172 var cursor = null;
173 limit = (limit || 100);
174
175 var fetchRound = function(inStreams) {
176 if (inStreams) {
177 streams.push.apply(streams, inStreams);
178 }
179
180 var remaining = (limit - streams.length);
181 if (remaining <= 0 || (inStreams && !cursor)) {
182 return streams;
183 }
184
185 return this.get(cursor, remaining).then(function(resp) {
186 cursor = resp.next;
187 return fetchRound(resp.streams);
188 });
189 }.bind(this);
190
191 return fetchRound(null);
192 };
193 </script>
OLDNEW
« no previous file with comments | « web/inc/logdog-stream-view/logdog-stream-fetcher.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