@@ -9,18 +9,26 @@ function querystr_to_array(querystr: string): string[] {
99 . map ( l => l + ';' ) ;
1010}
1111
12- interface QueryParams {
13- bid_window : string ;
14- bid_afk : string ;
15- bid_browsers ?: string [ ] ;
12+ interface BaseQueryParams {
1613 filter_afk : boolean ;
1714 include_audible ?: boolean ;
1815 classes : Record < string , any > ;
1916}
2017
18+ interface DesktopQueryParams extends BaseQueryParams {
19+ bid_window : string ;
20+ bid_afk : string ;
21+ bid_browsers ?: string [ ] ;
22+ }
23+
24+ interface AndroidQueryParams extends BaseQueryParams {
25+ bid_android : string ;
26+ bid_browsers ?: string [ ] ;
27+ }
28+
2129// Constructs a query that returns a fully-detailed list of events from the merging of several sources (window, afk, web).
2230// Puts it's results in `not_afk` and `events`.
23- function canonicalEvents ( params : QueryParams ) : string {
31+ function canonicalEvents ( params : DesktopQueryParams ) : string {
2432 return `
2533 events = flood(query_bucket("${ params . bid_window } "));
2634 not_afk = flood(query_bucket("${ params . bid_afk } "));
@@ -29,18 +37,18 @@ function canonicalEvents(params: QueryParams): string {
2937 ` ;
3038}
3139
40+ const default_limit = 100 ; // Hardcoded limit per group
41+
3242export function windowQuery (
3343 windowbucket ,
3444 afkbucket ,
35- appcount ,
36- titlecount ,
3745 filterAFK ,
3846 classes ,
3947 filterCategories : string [ ] [ ]
4048) : string [ ] {
4149 windowbucket = windowbucket . replace ( '"' , '\\"' ) ;
4250 afkbucket = afkbucket . replace ( '"' , '\\"' ) ;
43- const params : QueryParams = {
51+ const params : DesktopQueryParams = {
4452 bid_window : windowbucket ,
4553 bid_afk : afkbucket ,
4654 classes : classes ,
@@ -60,22 +68,34 @@ export function windowQuery(
6068 cat_events = sort_by_duration(merge_events_by_keys(events, ["$category"]));
6169
6270 events = sort_by_timestamp(events);
63- app_events = limit_events(app_events, ${ appcount } );
64- title_events = limit_events(title_events, ${ titlecount } );
71+ app_events = limit_events(app_events, ${ default_limit } );
72+ title_events = limit_events(title_events, ${ default_limit } );
6573 duration = sum_durations(events);
6674 RETURN = {"app_events": app_events, "title_events": title_events, "cat_events": cat_events, "duration": duration, "active_events": not_afk};` ;
6775 return querystr_to_array ( code ) ;
6876}
6977
70- export function appQuery ( appbucket : string , limit = 5 ) : string [ ] {
78+ export function appQuery ( appbucket : string , classes , filterAFK ) : string [ ] {
7179 appbucket = appbucket . replace ( '"' , '\\"' ) ;
80+ const params : AndroidQueryParams = {
81+ bid_android : appbucket ,
82+ classes : classes ,
83+ filter_afk : filterAFK ,
84+ } ;
7285 const code = `
73- events = query_bucket("${ appbucket } ");
74- events = merge_events_by_keys(events, ["app"]);
75- events = sort_by_duration(events);
76- events = limit_events(events, ${ limit } );
77- total_duration = sum_durations(events);
78- RETURN = {"events": events, "total_duration": total_duration};
86+ events = query_bucket("${ params . bid_android } ");
87+ events = merge_events_by_keys(events, ["app"]);
88+ events = categorize(events, ${ JSON . stringify ( params . classes ) } );
89+
90+ title_events = sort_by_duration(merge_events_by_keys(events, ["app", "classname"]));
91+ app_events = sort_by_duration(merge_events_by_keys(title_events, ["app"]));
92+ cat_events = sort_by_duration(merge_events_by_keys(events, ["$category"]));
93+
94+ events = sort_by_timestamp(events);
95+ app_events = limit_events(app_events, ${ default_limit } );
96+ title_events = limit_events(title_events, ${ default_limit } );
97+ duration = sum_durations(events);
98+ RETURN = {"app_events": app_events, "title_events": title_events, "cat_events": cat_events, "duration": duration, "active_events": app_events};
7999 ` ;
80100 return querystr_to_array ( code ) ;
81101}
@@ -122,7 +142,7 @@ function browsersWithBuckets(browserbuckets: string[]): [string, string][] {
122142}
123143
124144// Returns a list of active browser events (where the browser was the active window) from all browser buckets
125- function browserEvents ( params : QueryParams ) : string {
145+ function browserEvents ( params : DesktopQueryParams ) : string {
126146 // If multiple browser buckets were found
127147 // AFK filtered later in the process
128148 let code = `
@@ -151,7 +171,6 @@ export function browserSummaryQuery(
151171 browserbuckets : string [ ] ,
152172 windowbucket : string ,
153173 afkbucket : string ,
154- limit = 5 ,
155174 filterAFK = true
156175) : string [ ] {
157176 // Escape `"`
@@ -160,7 +179,7 @@ export function browserSummaryQuery(
160179 afkbucket = afkbucket . replace ( '"' , '\\"' ) ;
161180
162181 // TODO: Get classes
163- const params : QueryParams = {
182+ const params : DesktopQueryParams = {
164183 bid_window : windowbucket ,
165184 bid_afk : afkbucket ,
166185 bid_browsers : browserbuckets ,
@@ -172,29 +191,29 @@ export function browserSummaryQuery(
172191 `${ browserEvents ( params ) }
173192 urls = merge_events_by_keys(events, ["url"]);
174193 urls = sort_by_duration(urls);
175- urls = limit_events(urls, ${ limit } );
194+ urls = limit_events(urls, ${ default_limit } );
176195 domains = split_url_events(events);
177196 domains = merge_events_by_keys(domains, ["$domain"]);
178197 domains = sort_by_duration(domains);
179- domains = limit_events(domains, ${ limit } );
198+ domains = limit_events(domains, ${ default_limit } );
180199 duration = sum_durations(events);
181200 RETURN = {"domains": domains, "urls": urls, "duration": duration};`
182201 ) ;
183202}
184203
185- export function editorActivityQuery ( editorbuckets : string [ ] , limit ) : string [ ] {
204+ export function editorActivityQuery ( editorbuckets : string [ ] ) : string [ ] {
186205 let q = [ 'events = [];' ] ;
187206 for ( let editorbucket of editorbuckets ) {
188207 editorbucket = editorbucket . replace ( '"' , '\\"' ) ;
189208 q . push ( 'events = concat(events, flood(query_bucket("' + editorbucket + '")));' ) ;
190209 }
191210 q = q . concat ( [
192211 'files = sort_by_duration(merge_events_by_keys(events, ["file", "language"]));' ,
193- ' files = limit_events(files, ' + limit + ');' ,
212+ ` files = limit_events(files, ${ default_limit } );` ,
194213 'languages = sort_by_duration(merge_events_by_keys(events, ["language"]));' ,
195- ' languages = limit_events(languages, ' + limit + ');' ,
214+ ` languages = limit_events(languages, ${ default_limit } );` ,
196215 'projects = sort_by_duration(merge_events_by_keys(events, ["project"]));' ,
197- ' projects = limit_events(projects, ' + limit + ');' ,
216+ ` projects = limit_events(projects, ${ default_limit } );` ,
198217 'duration = sum_durations(events);' ,
199218 'RETURN = {"files": files, "languages": languages, "projects": projects, "duration": duration};' ,
200219 ] ) ;
0 commit comments