Mirror of https://github.com/roostorg/osprey
github.com/roostorg/osprey
1import { QueryRecord, QueryState, QueryRecordRequest, TopNTable } from '../types/QueryTypes';
2import HTTPUtils, { HTTPResponse } from '../utils/HTTPUtils';
3
4export function formatQueryForRequest({ executedQuery, sortOrder, topNTables }: QueryState): QueryRecordRequest {
5 return {
6 /* eslint-disable */
7 query_filter: executedQuery.queryFilter,
8 date_range: [executedQuery.start, executedQuery.end],
9 top_n: [...topNTables.values()].map((table) => table.asQueryParam()),
10 sort_order: sortOrder,
11 /* eslint-enable */
12 };
13}
14
15export async function validateQuery(queryFilter: string): Promise<boolean> {
16 const response: HTTPResponse = await HTTPUtils.post('queries/validate', {
17 query_filter: queryFilter /* eslint-disable-line */,
18 });
19 return response.ok;
20}
21
22export async function saveQueryToHistory({
23 executedQuery,
24 sortOrder,
25 topNTables,
26 charts,
27}: QueryState): Promise<QueryRecord | void> {
28 if (executedQuery == null) return;
29 const response: HTTPResponse = await HTTPUtils.post(
30 'queries/query',
31 formatQueryForRequest({ executedQuery, sortOrder, topNTables, charts })
32 );
33
34 if (!response.ok) {
35 return;
36 }
37
38 return response.data;
39}
40
41export async function getQueriesHistory(userEmail?: string, before?: string): Promise<QueryRecord[]> {
42 const response: HTTPResponse = await HTTPUtils.get('queries', {
43 params: { before, user_email: userEmail } /* eslint-disable-line */,
44 });
45
46 if (!response.ok) {
47 return [];
48 }
49
50 let data = response.data;
51
52 return data.map((d: any) => {
53 if (Array.isArray(d.top_n)) {
54 d.top_n = d.top_n.map(TopNTable.fromQueryParam);
55 }
56 return d;
57 });
58}
59
60export async function getQueryUserEmails(): Promise<string[]> {
61 const response: HTTPResponse = await HTTPUtils.get('queries/user-emails');
62
63 if (!response.ok) {
64 return [];
65 }
66
67 return response.data;
68}