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

Side by Side Diff: web/inc/logdog-stream/logdog.ts

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
« no previous file with comments | « web/inc/logdog-stream-view/viewer.ts ('k') | web/inc/logdog-stream/logdog-error.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 export module LogDog {
8 /** Locally-typed LogStreamDescriptor class. */
9 export interface LogStreamDescriptor {
10 readonly timestamp: Date;
11 }
12
13 export function makeLogStreamDescriptor(desc: any): LogStreamDescriptor {
14 desc.timestamp = new Date(desc.timestamp);
15 return desc;
16 }
17
18 export interface LogStreamState {
19 created: Date;
20 terminalIndex: number;
21 archive: {
22
23 };
24 }
25
26 export function makeLogStreamState(state: any): LogStreamState {
27 state.created = new Date(state.created);
28 state.terminalIndex = int64(state.terminalIndex);
29 return state;
30 }
31
32 /** Locally-typed LogEntry class. */
33 export type LogEntry = {
34 prefixIndex: number;
35 streamIndex: number;
36 timeOffset: number;
37
38 desc: LogStreamDescriptor | null;
39 timestamp: Date | null;
40
41 text?: {
42 lines?: {
43 value?: string;
44 delimiter?: string;
45 }[];
46 };
47 }
48
49 export function makeLogEntry(le: any, desc: LogStreamDescriptor): LogEntry {
50 le.timeOffset = durationProtoToMillis(le.timeOffset);
51 le.prefixIndex = int64(le.prefixIndex);
52 le.streamIndex = int64(le.streamIndex);
53
54 if (desc) {
55 le.desc = desc;
56 le.timestamp = addMillisecondsToDate(desc.timestamp, le.timeOffset);
57 }
58 return le;
59 }
60
61 /** A log stream project/path qualifier. */
62 export class Stream {
63 constructor(readonly project: string, readonly path: string) {}
64
65 fullName(): string {
66 return this.project + "/" + this.path;
67 }
68
69 get prefix(): string {
70 let sepIdx = this.path.indexOf("/+");
71 if (sepIdx > 0) {
72 return this.path.substring(0, sepIdx);
73 }
74 return this.path;
75 }
76
77 get name(): string {
78 const sep = "/+/";
79 let sepIdx = this.path.indexOf(sep);
80 if (sepIdx < 0) {
81 return "";
82 }
83 return this.path.substring(sepIdx + sep.length);
84 }
85
86 samePrefixAs(other: Stream): boolean {
87 return (
88 (this.project === other.project) &&
89 (this.prefix === other.prefix));
90 }
91
92 static splitProject(v: string): Stream {
93 let parts = Stream.split(v, 2);
94 if (parts.length === 1) {
95 return new Stream(v, "");
96 }
97 return new Stream(parts[0], parts[1]);
98 }
99
100 static split = function(v: string, count: number): string[] {
101 let parts = v.split("/");
102 if (!count) {
103 return parts;
104 }
105 let result = parts.splice(0, count-1);
106 if (parts.length) {
107 result.push(parts.join("/"));
108 }
109 return result;
110 };
111
112 static cmp(a: Stream, b: Stream): number {
113 if (a.project < b.project) {
114 return -1;
115 }
116 if (a.project > b.project) {
117 return 1;
118 }
119 return (a.path < b.path) ? -1 : ((a.path > b.path) ? 1 : 0);
120 };
121 }
122
123 /**
124 * Converts a string int64 into a Javascript number.
125 *
126 * Note that Javascript cannot hold a value larger than 2^53-1. If log streams
127 * ever approach this length, we will need to rework this value as an integer-
128 * string with helper functions.
129 */
130 function int64(s: string): number {
131 if (!s) {
132 return 0;
133 }
134
135 let value = parseInt(s, 10);
136 if (isNaN(value)) {
137 throw new Error("Value is not a number: " + s);
138 }
139 return value;
140 }
141
142 /**
143 * Adds a specified duration protobuf to the supplied Date.
144 *
145 * Duration protos are expressed as a string referencing a floating point
146 * number of seconds followed by the letter "s":
147 * - "1337s"
148 * - "3.141592s"
149 */
150 function durationProtoToMillis(value: string): number {
151 if ((!value) || value.charAt(value.length - 1) !== "s") {
152 throw new Error("Seconds string does not end in 's': " + value);
153 }
154 return (parseFloat(value) * 1000.0);
155 }
156
157 /**
158 * Returns a new Date object whose value is the initial date object with the
159 * specified number of milliseconds added to it.
160 *
161 * @param d {Date} The base Date object.
162 * @param ms {Number} The number of milliseconds to add.
163 */
164 function addMillisecondsToDate(d: Date, ms: number) {
165 d = new Date(d);
166 d.setMilliseconds(d.getMilliseconds() + ms);
167 return d;
168 }
169 }
OLDNEW
« no previous file with comments | « web/inc/logdog-stream-view/viewer.ts ('k') | web/inc/logdog-stream/logdog-error.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698