forked from parseablehq/console
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquery.ts
104 lines (86 loc) · 3.85 KB
/
query.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import { Axios } from './axios';
import { GRAPH_DATA_URL, LOG_QUERY_URL } from './constants';
import { GraphQueryOpts, Log, LogsQuery, LogsResponseWithHeaders } from '@/@types/parseable/api/query';
import timeRangeUtils from '@/utils/timeRangeUtils';
import { CorrelationQueryBuilder, QueryBuilder } from '@/utils/queryBuilder';
const { formatDateAsCastType } = timeRangeUtils;
type QueryLogs = {
streamName: string;
startTime: Date;
endTime: Date;
limit: number;
pageOffset: number;
};
type CorrelationLogs = {
streamNames: string[];
startTime: Date;
endTime: Date;
limit: number;
pageOffset: number;
correlationCondition?: string;
selectedFields?: string[];
};
// to optimize query performace, it has been decided to round off the time at the given level
const optimizeTime = (date: Date) => {
const tempDate = new Date(date);
tempDate.setSeconds(0);
tempDate.setMilliseconds(0);
return tempDate;
};
// ------ Default sql query
type FormQueryOptsType = Omit<QueryLogs, 'pageOffset'> & {
pageOffset?: number;
timePartitionColumn?: string;
};
export const timeRangeSQLCondition = (timePartitionColumn: string, startTime: Date, endTime: Date) => {
return `${timePartitionColumn} >= CAST('${formatDateAsCastType(
optimizeTime(startTime),
)}' AS TIMESTAMP) and ${timePartitionColumn} < CAST('${formatDateAsCastType(optimizeTime(endTime))}' AS TIMESTAMP)`;
};
export const formQueryOpts = (logsQuery: FormQueryOptsType) => {
const queryBuilder = new QueryBuilder(logsQuery);
const query = queryBuilder.getQuery();
const startTime = queryBuilder.getStartTime();
const endTime = queryBuilder.getEndTime();
return { query, startTime, endTime };
};
export const getQueryLogs = (logsQuery: QueryLogs) => {
return Axios().post<Log[]>(LOG_QUERY_URL(), formQueryOpts(logsQuery), {});
};
export const getQueryLogsWithHeaders = (logsQuery: QueryLogs) => {
const queryBuilder = new QueryBuilder(logsQuery);
const endPoint = LOG_QUERY_URL({ fields: true }, queryBuilder.getResourcePath());
return Axios().post<LogsResponseWithHeaders>(endPoint, formQueryOpts(logsQuery), {});
};
export const getCorrelationQueryLogsWithHeaders = (logsQuery: CorrelationLogs) => {
const queryBuilder = new CorrelationQueryBuilder(logsQuery);
const endPoint = LOG_QUERY_URL({ fields: true }, queryBuilder.getResourcePath());
return Axios().post<LogsResponseWithHeaders>(endPoint, queryBuilder.getCorrelationQuery(), {});
};
export const getCorrelationQueryCount = (logsQuery: CorrelationLogs) => {
const queryBuilder = new CorrelationQueryBuilder(logsQuery);
const endPoint = LOG_QUERY_URL();
return Axios().post<Log[]>(endPoint, makeCustomQueryRequestData(logsQuery, queryBuilder.getCountQuery()), {});
};
export const getStreamDataWithHeaders = (logsQuery: CorrelationLogs) => {
const queryBuilder = new CorrelationQueryBuilder(logsQuery);
const endPoint = LOG_QUERY_URL({ fields: true }, queryBuilder.getResourcePath());
return Axios().post<LogsResponseWithHeaders>(endPoint, queryBuilder.getQuery(), {});
};
// ------ Custom sql query
const makeCustomQueryRequestData = (logsQuery: LogsQuery | CorrelationLogs, query: string) => {
const { startTime, endTime } = logsQuery;
return { query, startTime: optimizeTime(startTime), endTime: optimizeTime(endTime) };
};
export const getQueryResult = (logsQuery: LogsQuery, query = '') => {
const endPoint = LOG_QUERY_URL();
return Axios().post<Log[]>(endPoint, makeCustomQueryRequestData(logsQuery, query), {});
};
export const getQueryResultWithHeaders = (logsQuery: LogsQuery, query = '') => {
const queryBuilder = new QueryBuilder(logsQuery);
const endPoint = LOG_QUERY_URL({ fields: true }, queryBuilder.getResourcePath());
return Axios().post<LogsResponseWithHeaders>(endPoint, makeCustomQueryRequestData(logsQuery, query), {});
};
export const getGraphData = (data: GraphQueryOpts) => {
return Axios().post<LogsResponseWithHeaders>(GRAPH_DATA_URL, data);
};