@or-sdk/druid 1.1.0-beta.1311.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/README.md +15 -0
  2. package/dist/cjs/Druid.js +72 -0
  3. package/dist/cjs/Druid.js.map +1 -0
  4. package/dist/cjs/__tests__/Druid.spec.js +141 -0
  5. package/dist/cjs/__tests__/Druid.spec.js.map +1 -0
  6. package/dist/cjs/__tests__/fixtures/convert_response.json +105 -0
  7. package/dist/cjs/__tests__/fixtures/group_by_table_response.json +146 -0
  8. package/dist/cjs/__tests__/fixtures/metadata.json +716 -0
  9. package/dist/cjs/__tests__/fixtures/scan_lookup_response.json +31 -0
  10. package/dist/cjs/__tests__/fixtures/scan_table_response.json +131 -0
  11. package/dist/cjs/__tests__/fixtures/search_table_response.json +12 -0
  12. package/dist/cjs/__tests__/fixtures/time_series_table_response.json +32 -0
  13. package/dist/cjs/__tests__/result-converter.spec.js +296 -0
  14. package/dist/cjs/__tests__/result-converter.spec.js.map +1 -0
  15. package/dist/cjs/constants.js +6 -0
  16. package/dist/cjs/constants.js.map +1 -0
  17. package/dist/cjs/index.js +21 -0
  18. package/dist/cjs/index.js.map +1 -0
  19. package/dist/cjs/result-converter.js +108 -0
  20. package/dist/cjs/result-converter.js.map +1 -0
  21. package/dist/cjs/types.js +3 -0
  22. package/dist/cjs/types.js.map +1 -0
  23. package/dist/esm/Druid.js +49 -0
  24. package/dist/esm/Druid.js.map +1 -0
  25. package/dist/esm/__tests__/Druid.spec.js +62 -0
  26. package/dist/esm/__tests__/Druid.spec.js.map +1 -0
  27. package/dist/esm/__tests__/fixtures/convert_response.json +105 -0
  28. package/dist/esm/__tests__/fixtures/group_by_table_response.json +146 -0
  29. package/dist/esm/__tests__/fixtures/metadata.json +716 -0
  30. package/dist/esm/__tests__/fixtures/scan_lookup_response.json +31 -0
  31. package/dist/esm/__tests__/fixtures/scan_table_response.json +131 -0
  32. package/dist/esm/__tests__/fixtures/search_table_response.json +12 -0
  33. package/dist/esm/__tests__/fixtures/time_series_table_response.json +32 -0
  34. package/dist/esm/__tests__/result-converter.spec.js +291 -0
  35. package/dist/esm/__tests__/result-converter.spec.js.map +1 -0
  36. package/dist/esm/constants.js +3 -0
  37. package/dist/esm/constants.js.map +1 -0
  38. package/dist/esm/index.js +3 -0
  39. package/dist/esm/index.js.map +1 -0
  40. package/dist/esm/result-converter.js +97 -0
  41. package/dist/esm/result-converter.js.map +1 -0
  42. package/dist/esm/types.js +2 -0
  43. package/dist/esm/types.js.map +1 -0
  44. package/dist/types/Druid.d.ts +11 -0
  45. package/dist/types/Druid.d.ts.map +1 -0
  46. package/dist/types/__tests__/Druid.spec.d.ts +2 -0
  47. package/dist/types/__tests__/Druid.spec.d.ts.map +1 -0
  48. package/dist/types/__tests__/result-converter.spec.d.ts +2 -0
  49. package/dist/types/__tests__/result-converter.spec.d.ts.map +1 -0
  50. package/dist/types/constants.d.ts +3 -0
  51. package/dist/types/constants.d.ts.map +1 -0
  52. package/dist/types/index.d.ts +3 -0
  53. package/dist/types/index.d.ts.map +1 -0
  54. package/dist/types/result-converter.d.ts +3 -0
  55. package/dist/types/result-converter.d.ts.map +1 -0
  56. package/dist/types/types.d.ts +25 -0
  57. package/dist/types/types.d.ts.map +1 -0
  58. package/package.json +36 -0
  59. package/src/Druid.ts +102 -0
  60. package/src/__tests__/Druid.spec.ts +69 -0
  61. package/src/__tests__/fixtures/convert_response.json +105 -0
  62. package/src/__tests__/fixtures/group_by_table_response.json +146 -0
  63. package/src/__tests__/fixtures/metadata.json +716 -0
  64. package/src/__tests__/fixtures/scan_lookup_response.json +31 -0
  65. package/src/__tests__/fixtures/scan_table_response.json +131 -0
  66. package/src/__tests__/fixtures/search_table_response.json +12 -0
  67. package/src/__tests__/fixtures/time_series_table_response.json +32 -0
  68. package/src/__tests__/result-converter.spec.ts +304 -0
  69. package/src/constants.ts +2 -0
  70. package/src/index.ts +2 -0
  71. package/src/result-converter.ts +113 -0
  72. package/src/types.ts +37 -0
  73. package/tsconfig.dev.json +8 -0
  74. package/tsconfig.esm.json +12 -0
  75. package/tsconfig.json +7 -0
  76. package/tsconfig.types.json +10 -0
  77. package/vitest.config.js +22 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
1
+ import { Base } from '@or-sdk/base';
2
+ import { SERVICE_KEY, V3_ROUTE_PATH } from './constants';
3
+ import { convertQueryResultsToPreview } from './result-converter';
4
+ export class Druid extends Base {
5
+ constructor(params) {
6
+ super({
7
+ token: params.token,
8
+ serviceUrl: `${params.gatewayUrl}/${params.providersAccountId}`,
9
+ serviceKey: SERVICE_KEY,
10
+ });
11
+ }
12
+ fetchMetadata() {
13
+ return this.callApiV2({
14
+ method: 'GET',
15
+ route: V3_ROUTE_PATH,
16
+ params: {
17
+ includeLookups: true,
18
+ },
19
+ });
20
+ }
21
+ convertSQLQuery(query, isRaw = false) {
22
+ const data = {
23
+ query,
24
+ type: 'ExplainSQLPlan',
25
+ isRaw,
26
+ };
27
+ return this.callApiV2({
28
+ method: 'POST',
29
+ data,
30
+ route: V3_ROUTE_PATH,
31
+ });
32
+ }
33
+ runNativeQuery(query, options = {}) {
34
+ const data = {
35
+ query,
36
+ };
37
+ const promise = this.callApiV2({
38
+ method: 'POST',
39
+ data,
40
+ route: V3_ROUTE_PATH,
41
+ });
42
+ if (typeof options === 'boolean' && options) {
43
+ return promise;
44
+ }
45
+ const includeTimestamp = typeof options.includeTimestamp === 'boolean' ? options.includeTimestamp : false;
46
+ return promise.then((r) => convertQueryResultsToPreview(r, includeTimestamp));
47
+ }
48
+ }
49
+ //# sourceMappingURL=Druid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Druid.js","sourceRoot":"","sources":["../../src/Druid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAgBlE,MAAM,OAAO,KAAM,SAAQ,IAAI;IAU7B,YAAY,MAAmB;QAC7B,KAAK,CAAC;YACJ,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU,EAAE,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,kBAAkB,EAAE;YAC/D,UAAU,EAAE,WAAW;SACxB,CAAC,CAAC;IACL,CAAC;IASM,aAAa;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,aAAa;YACpB,MAAM,EAAE;gBACN,cAAc,EAAE,IAAI;aACrB;SACF,CAAC,CAAC;IACL,CAAC;IAaM,eAAe,CAAI,KAAa,EAAE,KAAK,GAAG,KAAK;QACpD,MAAM,IAAI,GAAG;YACX,KAAK;YACL,IAAI,EAAE,gBAAgB;YACtB,KAAK;SACN,CAAC;QAEF,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,KAAK,EAAE,aAAa;SACrB,CAAC,CAAC;IACL,CAAC;IAQM,cAAc,CAAC,KAA8B,EAAE,UAAiC,EAAG;QACxF,MAAM,IAAI,GAAG;YACX,KAAK;SACN,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,KAAK,EAAE,aAAa;SACrB,CAAC,CAAC;QACH,IAAI,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,EAAE;YAC3C,OAAO,OAAO,CAAC;SAChB;QACD,MAAM,gBAAgB,GAAG,OAAO,OAAO,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC;QAC1G,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,4BAA4B,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAChF,CAAC;CACF"}
@@ -0,0 +1,62 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { afterAll, afterEach, beforeAll, describe, expect, it } from 'vitest';
11
+ import { rest } from 'msw';
12
+ import { setupServer } from 'msw/node';
13
+ import { Druid } from '../';
14
+ import metadata from './fixtures/metadata.json';
15
+ import convertResponse from './fixtures/convert_response.json';
16
+ import runQueryResponse from './fixtures/scan_table_response.json';
17
+ const server = setupServer(rest.get('https://gateway.url/test-account-id/druid/query/v3', (req, res, ctx) => {
18
+ if (req.headers.get('authorization') !== 'valid-auth-token') {
19
+ return res(ctx.status(401));
20
+ }
21
+ if (req.url.searchParams.get('includeLookups') !== 'true') {
22
+ return res(ctx.status(500));
23
+ }
24
+ return res(ctx.json(metadata));
25
+ }), rest.post('https://gateway.url/test-account-id/druid/query/v3', (req, res, ctx) => __awaiter(void 0, void 0, void 0, function* () {
26
+ if (req.headers.get('authorization') !== 'valid-auth-token') {
27
+ return res(ctx.status(401));
28
+ }
29
+ const body = yield req.json();
30
+ if (body.type === 'ExplainSQLPlan') {
31
+ return res(ctx.json(convertResponse));
32
+ }
33
+ return res(ctx.json(runQueryResponse));
34
+ })));
35
+ const createDruidInstance = (opts = {}) => {
36
+ return new Druid(Object.assign({ gatewayUrl: 'https://gateway.url', providersAccountId: 'test-account-id', token: 'valid-auth-token' }, opts));
37
+ };
38
+ describe('Druid', () => {
39
+ beforeAll(() => server.listen());
40
+ afterEach(() => server.resetHandlers());
41
+ afterAll(() => server.close());
42
+ it('should create an instance successfully', () => {
43
+ const druid = createDruidInstance();
44
+ expect(druid).toBeInstanceOf(Druid);
45
+ });
46
+ it('should fetch metadata properly', () => __awaiter(void 0, void 0, void 0, function* () {
47
+ const druid = createDruidInstance();
48
+ const resp = yield druid.fetchMetadata();
49
+ expect(resp).toEqual(metadata);
50
+ }));
51
+ it('should convert sql query to native one properly', () => __awaiter(void 0, void 0, void 0, function* () {
52
+ const druid = createDruidInstance();
53
+ const resp = yield druid.convertSQLQuery('select "BotId" from _table');
54
+ expect(resp).toEqual(convertResponse);
55
+ }));
56
+ it('should run native query', () => __awaiter(void 0, void 0, void 0, function* () {
57
+ const druid = createDruidInstance();
58
+ const resp = yield druid.runNativeQuery({ queryType: 'scan' }, true);
59
+ expect(resp).toEqual(runQueryResponse);
60
+ }));
61
+ });
62
+ //# sourceMappingURL=Druid.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Druid.spec.js","sourceRoot":"","sources":["../../../src/__tests__/Druid.spec.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC;AAE5B,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAChD,OAAO,eAAe,MAAM,kCAAkC,CAAC;AAC/D,OAAO,gBAAgB,MAAM,qCAAqC,CAAC;AAEnE,MAAM,MAAM,GAAG,WAAW,CACxB,IAAI,CAAC,GAAG,CAAC,oDAAoD,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC/E,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,kBAAkB,EAAE;QAC3D,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;KAC7B;IACD,IAAI,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,MAAM,EAAE;QACzD,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;KAC7B;IACD,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjC,CAAC,CAAC,EACF,IAAI,CAAC,IAAI,CAAC,oDAAoD,EAAE,CAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACtF,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,kBAAkB,EAAE;QAC3D,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;KAC7B;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE;QAClC,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;KACvC;IACD,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACzC,CAAC,CAAA,CAAC,CACH,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,OAA6B,EAAE,EAAE,EAAE;IAC9D,OAAO,IAAI,KAAK,iBACd,UAAU,EAAE,qBAAqB,EACjC,kBAAkB,EAAE,iBAAiB,EACrC,KAAK,EAAE,kBAAkB,IACtB,IAAI,EACP,CAAC;AACL,CAAC,CAAC;AAEF,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACjC,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;IACxC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAE/B,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAS,EAAE;QAC9C,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAS,EAAE;QAC/D,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,4BAA4B,CAAC,CAAC;QACvE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAS,EAAE;QACvC,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACzC,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,105 @@
1
+ {
2
+ "query": {
3
+ "queryType": "scan",
4
+ "dataSource": {
5
+ "type": "table",
6
+ "name": "staging_re_rollup_provider_ExecutionTime"
7
+ },
8
+ "intervals": {
9
+ "type": "intervals",
10
+ "intervals": [
11
+ "-146136543-09-08T08:23:32.096Z/146140482-04-24T15:36:27.903Z"
12
+ ]
13
+ },
14
+ "resultFormat": "compactedList",
15
+ "limit": 1000,
16
+ "columns": [
17
+ "AccountId",
18
+ "BotId",
19
+ "FlowId",
20
+ "Type",
21
+ "__time",
22
+ "count",
23
+ "sum_AudioDuration15Sec",
24
+ "sum_AudioDurationMin",
25
+ "sum_AudioDurationSec",
26
+ "sum_CharacterCount",
27
+ "sum_ExecutionDurationMs",
28
+ "sum_MemoryMb",
29
+ "sum_Millisecond100Seg",
30
+ "sum_Millisecond200Seg",
31
+ "sum_MillisecondTotal"
32
+ ],
33
+ "legacy": false,
34
+ "context": {
35
+ "queryId": "3ab8c67f-b348-4d0f-9210-ad3ccfa74b22",
36
+ "sqlOuterLimit": 1000,
37
+ "sqlQueryId": "3ab8c67f-b348-4d0f-9210-ad3ccfa74b22"
38
+ },
39
+ "granularity": {
40
+ "type": "all"
41
+ }
42
+ },
43
+ "signature": [
44
+ {
45
+ "name": "__time",
46
+ "type": "LONG"
47
+ },
48
+ {
49
+ "name": "AccountId",
50
+ "type": "STRING"
51
+ },
52
+ {
53
+ "name": "BotId",
54
+ "type": "STRING"
55
+ },
56
+ {
57
+ "name": "FlowId",
58
+ "type": "STRING"
59
+ },
60
+ {
61
+ "name": "Type",
62
+ "type": "STRING"
63
+ },
64
+ {
65
+ "name": "count",
66
+ "type": "LONG"
67
+ },
68
+ {
69
+ "name": "sum_AudioDuration15Sec",
70
+ "type": "LONG"
71
+ },
72
+ {
73
+ "name": "sum_AudioDurationMin",
74
+ "type": "LONG"
75
+ },
76
+ {
77
+ "name": "sum_AudioDurationSec",
78
+ "type": "LONG"
79
+ },
80
+ {
81
+ "name": "sum_CharacterCount",
82
+ "type": "DOUBLE"
83
+ },
84
+ {
85
+ "name": "sum_ExecutionDurationMs",
86
+ "type": "LONG"
87
+ },
88
+ {
89
+ "name": "sum_MemoryMb",
90
+ "type": "LONG"
91
+ },
92
+ {
93
+ "name": "sum_Millisecond100Seg",
94
+ "type": "LONG"
95
+ },
96
+ {
97
+ "name": "sum_Millisecond200Seg",
98
+ "type": "LONG"
99
+ },
100
+ {
101
+ "name": "sum_MillisecondTotal",
102
+ "type": "LONG"
103
+ }
104
+ ]
105
+ }
@@ -0,0 +1,146 @@
1
+ [
2
+ {
3
+ "version": "v1",
4
+ "timestamp": "2023-05-15T12:00:00.000Z",
5
+ "event": {
6
+ "Type": "ProviderLambda",
7
+ "total_usage": 21
8
+ }
9
+ },
10
+ {
11
+ "version": "v1",
12
+ "timestamp": "2023-05-15T12:00:00.000Z",
13
+ "event": {
14
+ "Type": "Read Druid",
15
+ "total_usage": 21
16
+ }
17
+ },
18
+ {
19
+ "version": "v1",
20
+ "timestamp": "2023-05-15T13:00:00.000Z",
21
+ "event": {
22
+ "Type": "ProviderLambda",
23
+ "total_usage": 4
24
+ }
25
+ },
26
+ {
27
+ "version": "v1",
28
+ "timestamp": "2023-05-15T13:00:00.000Z",
29
+ "event": {
30
+ "Type": "Read Druid",
31
+ "total_usage": 4
32
+ }
33
+ },
34
+ {
35
+ "version": "v1",
36
+ "timestamp": "2023-05-15T14:00:00.000Z",
37
+ "event": {
38
+ "Type": "ProviderLambda",
39
+ "total_usage": 7
40
+ }
41
+ },
42
+ {
43
+ "version": "v1",
44
+ "timestamp": "2023-05-15T14:00:00.000Z",
45
+ "event": {
46
+ "Type": "Read Druid",
47
+ "total_usage": 7
48
+ }
49
+ },
50
+ {
51
+ "version": "v1",
52
+ "timestamp": "2023-05-16T05:00:00.000Z",
53
+ "event": {
54
+ "Type": "ProviderLambda",
55
+ "total_usage": 5
56
+ }
57
+ },
58
+ {
59
+ "version": "v1",
60
+ "timestamp": "2023-05-16T05:00:00.000Z",
61
+ "event": {
62
+ "Type": "Read Druid",
63
+ "total_usage": 5
64
+ }
65
+ },
66
+ {
67
+ "version": "v1",
68
+ "timestamp": "2023-05-16T07:00:00.000Z",
69
+ "event": {
70
+ "Type": "ProviderLambda",
71
+ "total_usage": 25
72
+ }
73
+ },
74
+ {
75
+ "version": "v1",
76
+ "timestamp": "2023-05-16T07:00:00.000Z",
77
+ "event": {
78
+ "Type": "Read Druid",
79
+ "total_usage": 25
80
+ }
81
+ },
82
+ {
83
+ "version": "v1",
84
+ "timestamp": "2023-05-16T08:00:00.000Z",
85
+ "event": {
86
+ "Type": "ProviderLambda",
87
+ "total_usage": 52
88
+ }
89
+ },
90
+ {
91
+ "version": "v1",
92
+ "timestamp": "2023-05-16T08:00:00.000Z",
93
+ "event": {
94
+ "Type": "Read Druid",
95
+ "total_usage": 52
96
+ }
97
+ },
98
+ {
99
+ "version": "v1",
100
+ "timestamp": "2023-05-16T09:00:00.000Z",
101
+ "event": {
102
+ "Type": "ProviderLambda",
103
+ "total_usage": 21
104
+ }
105
+ },
106
+ {
107
+ "version": "v1",
108
+ "timestamp": "2023-05-16T09:00:00.000Z",
109
+ "event": {
110
+ "Type": "Read Druid",
111
+ "total_usage": 20
112
+ }
113
+ },
114
+ {
115
+ "version": "v1",
116
+ "timestamp": "2023-05-16T10:00:00.000Z",
117
+ "event": {
118
+ "Type": "ProviderLambda",
119
+ "total_usage": 7
120
+ }
121
+ },
122
+ {
123
+ "version": "v1",
124
+ "timestamp": "2023-05-16T10:00:00.000Z",
125
+ "event": {
126
+ "Type": "Read Druid",
127
+ "total_usage": 7
128
+ }
129
+ },
130
+ {
131
+ "version": "v1",
132
+ "timestamp": "2023-05-16T11:00:00.000Z",
133
+ "event": {
134
+ "Type": "ProviderLambda",
135
+ "total_usage": 29
136
+ }
137
+ },
138
+ {
139
+ "version": "v1",
140
+ "timestamp": "2023-05-16T11:00:00.000Z",
141
+ "event": {
142
+ "Type": "Read Druid",
143
+ "total_usage": 29
144
+ }
145
+ }
146
+ ]