From 98277f1dcbca14e6edcd4a39a6a962ac2510c5de Mon Sep 17 00:00:00 2001 From: rmilea Date: Tue, 1 Oct 2024 14:33:13 +0300 Subject: [PATCH 01/12] init --- .../AssetCalibrationDataSource.ts | 26 ++++++++++++++++++- src/datasources/asset-calibration/types.ts | 8 ++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts index 1d2d11f..6c2441e 100644 --- a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts +++ b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts @@ -8,12 +8,14 @@ import { import { BackendSrv, getBackendSrv, getTemplateSrv, TemplateSrv } from '@grafana/runtime'; import { DataSourceBase } from 'core/DataSourceBase'; import { + AssetCalibrationDataSourceState, AssetCalibrationForecastKey, AssetCalibrationQuery, AssetCalibrationTimeBasedGroupByType, AssetModel, AssetsResponse, CalibrationForecastResponse, + ColumnDescriptorType, FieldDTOWithDescriptor, } from './types'; import { SystemMetadata } from "../system/types"; @@ -26,6 +28,15 @@ export class AssetCalibrationDataSource extends DataSourceBase { + this.state.systems = { + loading: false, + value: systems + } + } + ) } defaultQuery = { @@ -34,6 +45,13 @@ export class AssetCalibrationDataSource extends DataSourceBase { return await this.processCalibrationForecastQuery(query as AssetCalibrationQuery, options); } @@ -95,7 +113,13 @@ export class AssetCalibrationDataSource extends DataSourceBase descriptor.value).join(' - '); + return field.columnDescriptors.map(descriptor => { + if (descriptor.type === ColumnDescriptorType.MinionId && !this.state.systems.loading) { + const system = this.state.systems.value!.find( system => system.id === descriptor.value); + return system?.alias || descriptor.value + } + return descriptor.value + }).join(' - '); } formatDateForDay(date: string): string { diff --git a/src/datasources/asset-calibration/types.ts b/src/datasources/asset-calibration/types.ts index 7e07760..d9fc433 100644 --- a/src/datasources/asset-calibration/types.ts +++ b/src/datasources/asset-calibration/types.ts @@ -1,5 +1,6 @@ import { FieldDTO } from '@grafana/data'; import { DataQuery } from '@grafana/schema' +import { SystemMetadata } from 'datasources/system/types'; export interface AssetCalibrationQuery extends DataQuery { groupBy: string[]; @@ -140,6 +141,13 @@ export enum AssetFilterProperties { IsSystemController = 'IsSystemController' } +export interface AssetCalibrationDataSourceState { + systems: { + loading: boolean, + value: SystemMetadata[] | null + } +}; + export interface CalibrationForecastModel { columns: FieldDTOWithDescriptor[], } From 1465a0ea9ed0844c1ad8e1121a8644b35bad56cf Mon Sep 17 00:00:00 2001 From: rmilea Date: Tue, 1 Oct 2024 14:40:42 +0300 Subject: [PATCH 02/12] remove the loading --- .../AssetCalibrationDataSource.ts | 14 ++++---------- src/datasources/asset-calibration/types.ts | 5 +---- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts index 6c2441e..23f1248 100644 --- a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts +++ b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts @@ -31,10 +31,7 @@ export class AssetCalibrationDataSource extends DataSourceBase { - this.state.systems = { - loading: false, - value: systems - } + this.state.systems = systems } ) } @@ -46,10 +43,7 @@ export class AssetCalibrationDataSource extends DataSourceBase { @@ -114,8 +108,8 @@ export class AssetCalibrationDataSource extends DataSourceBase { - if (descriptor.type === ColumnDescriptorType.MinionId && !this.state.systems.loading) { - const system = this.state.systems.value!.find( system => system.id === descriptor.value); + if (descriptor.type === ColumnDescriptorType.MinionId && this.state.systems) { + const system = this.state.systems.find(system => system.id === descriptor.value); return system?.alias || descriptor.value } return descriptor.value diff --git a/src/datasources/asset-calibration/types.ts b/src/datasources/asset-calibration/types.ts index d9fc433..2fcee11 100644 --- a/src/datasources/asset-calibration/types.ts +++ b/src/datasources/asset-calibration/types.ts @@ -142,10 +142,7 @@ export enum AssetFilterProperties { } export interface AssetCalibrationDataSourceState { - systems: { - loading: boolean, - value: SystemMetadata[] | null - } + systems: SystemMetadata[] | null }; export interface CalibrationForecastModel { From 5e876982d0691f1a93750744e824532b2c7d4405 Mon Sep 17 00:00:00 2001 From: rmilea Date: Tue, 1 Oct 2024 15:42:46 +0300 Subject: [PATCH 03/12] add tests --- .../asset-calibration/AssetCalibrationDataSource.ts | 8 ++++---- .../__snapshots__/AssetCalibrationDataSource.test.ts.snap | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts index 23f1248..7af7a47 100644 --- a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts +++ b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts @@ -30,10 +30,8 @@ export class AssetCalibrationDataSource extends DataSourceBase { - this.state.systems = systems - } - ) + systems => this.state.systems = systems + ).catch( _ => { return;}); } defaultQuery = { @@ -108,8 +106,10 @@ export class AssetCalibrationDataSource extends DataSourceBase { + console.log(this.state.systems) if (descriptor.type === ColumnDescriptorType.MinionId && this.state.systems) { const system = this.state.systems.find(system => system.id === descriptor.value); + console.log(system) return system?.alias || descriptor.value } return descriptor.value diff --git a/src/datasources/asset-calibration/__snapshots__/AssetCalibrationDataSource.test.ts.snap b/src/datasources/asset-calibration/__snapshots__/AssetCalibrationDataSource.test.ts.snap index cb730c4..50f2545 100644 --- a/src/datasources/asset-calibration/__snapshots__/AssetCalibrationDataSource.test.ts.snap +++ b/src/datasources/asset-calibration/__snapshots__/AssetCalibrationDataSource.test.ts.snap @@ -121,8 +121,8 @@ exports[`queries calibration forecast with location groupBy 1`] = ` { "name": "Group", "values": [ - "Location1", - "Location2", + "my system", + "Cool system 😎", "Location3", ], }, From acefd9507bde81013afe9a5cc37b38a75a393633 Mon Sep 17 00:00:00 2001 From: rmilea Date: Tue, 1 Oct 2024 15:45:21 +0300 Subject: [PATCH 04/12] add test 2 --- .../AssetCalibrationDataSource.test.ts | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts b/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts index f86a1d1..7a3a80f 100644 --- a/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts +++ b/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts @@ -15,11 +15,13 @@ import { CalibrationForecastResponse, ColumnDescriptorType, } from "./types"; +import { SystemMetadata } from "datasources/system/types"; let datastore: AssetCalibrationDataSource, backendServer: MockProxy beforeEach(() => { [datastore, backendServer] = setupDataSource(AssetCalibrationDataSource); + datastore.state.systems = fakeSystems as SystemMetadata[]; }); const monthGroupCalibrationForecastResponseMock: CalibrationForecastResponse = @@ -56,9 +58,9 @@ const locationGroupCalibrationForecastResponseMock: CalibrationForecastResponse { calibrationForecast: { columns: [ - { name: "", values: [1], columnDescriptors: [{ value: "Location1", type: ColumnDescriptorType.StringValue }] }, - { name: "", values: [2], columnDescriptors: [{ value: "Location2", type: ColumnDescriptorType.StringValue }] }, - { name: "", values: [3], columnDescriptors: [{ value: "Location3", type: ColumnDescriptorType.StringValue }] } + { name: "", values: [1], columnDescriptors: [{ value: "Location1", type: ColumnDescriptorType.MinionId }] }, + { name: "", values: [2], columnDescriptors: [{ value: "Location2", type: ColumnDescriptorType.MinionId }] }, + { name: "", values: [3], columnDescriptors: [{ value: "Location3", type: ColumnDescriptorType.MinionId }] } ] } } @@ -143,6 +145,21 @@ const buildCalibrationForecastQuery = getQueryBuilder()({ groupBy: [] }); +const fakeSystems: SystemMetadata[] = [ + { + id: 'Location1', + alias: 'my system', + state: 'CONNECTED', + workspace: '1', + }, + { + id: 'Location2', + alias: 'Cool system 😎', + state: 'DISCONNECTED', + workspace: '2', + }, +]; + describe('testDatasource', () => { test('returns success', async () => { backendServer.fetch @@ -200,7 +217,6 @@ describe('queries', () => { .mockReturnValue(createFetchResponse(locationGroupCalibrationForecastResponseMock as CalibrationForecastResponse)) const result = await datastore.query(buildCalibrationForecastQuery(locationBasedCalibrationForecastQueryMock)) - expect(result.data).toMatchSnapshot() }) From 40756ca6a9f7fe5e8d882032e706992070a02b72 Mon Sep 17 00:00:00 2001 From: rmilea Date: Tue, 1 Oct 2024 15:50:48 +0300 Subject: [PATCH 05/12] check undefined alias --- .../asset-calibration/AssetCalibrationDataSource.test.ts | 2 +- src/datasources/asset-calibration/AssetCalibrationDataSource.ts | 1 - .../__snapshots__/AssetCalibrationDataSource.test.ts.snap | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts b/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts index 7a3a80f..1548e63 100644 --- a/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts +++ b/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts @@ -154,7 +154,7 @@ const fakeSystems: SystemMetadata[] = [ }, { id: 'Location2', - alias: 'Cool system 😎', + alias: undefined, state: 'DISCONNECTED', workspace: '2', }, diff --git a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts index 7af7a47..c3b733e 100644 --- a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts +++ b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts @@ -106,7 +106,6 @@ export class AssetCalibrationDataSource extends DataSourceBase { - console.log(this.state.systems) if (descriptor.type === ColumnDescriptorType.MinionId && this.state.systems) { const system = this.state.systems.find(system => system.id === descriptor.value); console.log(system) diff --git a/src/datasources/asset-calibration/__snapshots__/AssetCalibrationDataSource.test.ts.snap b/src/datasources/asset-calibration/__snapshots__/AssetCalibrationDataSource.test.ts.snap index 50f2545..123ae4f 100644 --- a/src/datasources/asset-calibration/__snapshots__/AssetCalibrationDataSource.test.ts.snap +++ b/src/datasources/asset-calibration/__snapshots__/AssetCalibrationDataSource.test.ts.snap @@ -122,7 +122,7 @@ exports[`queries calibration forecast with location groupBy 1`] = ` "name": "Group", "values": [ "my system", - "Cool system 😎", + "Location2", "Location3", ], }, From e42ece0c4bb0cd53d1542ac10807635fc1c6603b Mon Sep 17 00:00:00 2001 From: rmilea Date: Tue, 1 Oct 2024 15:54:54 +0300 Subject: [PATCH 06/12] linting + remove debug statements --- .../asset-calibration/AssetCalibrationDataSource.test.ts | 1 + src/datasources/asset-calibration/AssetCalibrationDataSource.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts b/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts index 1548e63..dea874c 100644 --- a/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts +++ b/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts @@ -217,6 +217,7 @@ describe('queries', () => { .mockReturnValue(createFetchResponse(locationGroupCalibrationForecastResponseMock as CalibrationForecastResponse)) const result = await datastore.query(buildCalibrationForecastQuery(locationBasedCalibrationForecastQueryMock)) + expect(result.data).toMatchSnapshot() }) diff --git a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts index c3b733e..3c8576a 100644 --- a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts +++ b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts @@ -108,7 +108,7 @@ export class AssetCalibrationDataSource extends DataSourceBase { if (descriptor.type === ColumnDescriptorType.MinionId && this.state.systems) { const system = this.state.systems.find(system => system.id === descriptor.value); - console.log(system) + return system?.alias || descriptor.value } return descriptor.value From aefbf633eacdb7fd089ff0bbdbb22d979db89e6f Mon Sep 17 00:00:00 2001 From: rmilea Date: Tue, 1 Oct 2024 16:47:53 +0300 Subject: [PATCH 07/12] use a map --- .../asset-calibration/AssetCalibrationDataSource.test.ts | 2 +- .../asset-calibration/AssetCalibrationDataSource.ts | 8 ++++---- src/datasources/asset-calibration/types.ts | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts b/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts index dea874c..65174a1 100644 --- a/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts +++ b/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts @@ -21,7 +21,7 @@ let datastore: AssetCalibrationDataSource, backendServer: MockProxy beforeEach(() => { [datastore, backendServer] = setupDataSource(AssetCalibrationDataSource); - datastore.state.systems = fakeSystems as SystemMetadata[]; + datastore.state.systems = new Map(fakeSystems.map(system => [system.id, system])) }); const monthGroupCalibrationForecastResponseMock: CalibrationForecastResponse = diff --git a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts index 3c8576a..9c4dd28 100644 --- a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts +++ b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts @@ -30,8 +30,8 @@ export class AssetCalibrationDataSource extends DataSourceBase this.state.systems = systems - ).catch( _ => { return;}); + systems => this.state.systems = new Map(systems.map(system => [system.id, system])) + ).catch( _ => { return; }); } defaultQuery = { @@ -107,9 +107,9 @@ export class AssetCalibrationDataSource extends DataSourceBase { if (descriptor.type === ColumnDescriptorType.MinionId && this.state.systems) { - const system = this.state.systems.find(system => system.id === descriptor.value); + const system = this.state.systems.get(descriptor.value); - return system?.alias || descriptor.value + return system?.alias || descriptor.value } return descriptor.value }).join(' - '); diff --git a/src/datasources/asset-calibration/types.ts b/src/datasources/asset-calibration/types.ts index 2fcee11..bf59305 100644 --- a/src/datasources/asset-calibration/types.ts +++ b/src/datasources/asset-calibration/types.ts @@ -142,7 +142,7 @@ export enum AssetFilterProperties { } export interface AssetCalibrationDataSourceState { - systems: SystemMetadata[] | null + systems: Map | null }; export interface CalibrationForecastModel { From 729cdefafcc4d64398c1e1a5c14248e210cce12d Mon Sep 17 00:00:00 2001 From: rmilea Date: Tue, 1 Oct 2024 17:04:35 +0300 Subject: [PATCH 08/12] feedback --- .../AssetCalibrationDataSource.test.ts | 34 +++++++++--- .../AssetCalibrationDataSource.test.ts.snap | 54 ++++++++++++++++++- 2 files changed, 81 insertions(+), 7 deletions(-) diff --git a/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts b/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts index 65174a1..9ea4efd 100644 --- a/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts +++ b/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts @@ -58,13 +58,25 @@ const locationGroupCalibrationForecastResponseMock: CalibrationForecastResponse { calibrationForecast: { columns: [ - { name: "", values: [1], columnDescriptors: [{ value: "Location1", type: ColumnDescriptorType.MinionId }] }, - { name: "", values: [2], columnDescriptors: [{ value: "Location2", type: ColumnDescriptorType.MinionId }] }, - { name: "", values: [3], columnDescriptors: [{ value: "Location3", type: ColumnDescriptorType.MinionId }] } + { name: "", values: [1], columnDescriptors: [{ value: "Location1", type: ColumnDescriptorType.StringValue }] }, + { name: "", values: [2], columnDescriptors: [{ value: "Location2", type: ColumnDescriptorType.StringValue }] }, + { name: "", values: [3], columnDescriptors: [{ value: "Location3", type: ColumnDescriptorType.StringValue }] } ] } } +const minionIdLocationGroupCalibrationForecastResponseMock: CalibrationForecastResponse = +{ + calibrationForecast: { + columns: [ + { name: "", values: [1], columnDescriptors: [{ value: "Minion1", type: ColumnDescriptorType.MinionId }] }, + { name: "", values: [2], columnDescriptors: [{ value: "Minion2", type: ColumnDescriptorType.MinionId }] }, + { name: "", values: [3], columnDescriptors: [{ value: "Minion3", type: ColumnDescriptorType.MinionId }] } + ] + } +} + + const modelGroupCalibrationForecastResponseMock: CalibrationForecastResponse = { calibrationForecast: { @@ -147,13 +159,13 @@ const buildCalibrationForecastQuery = getQueryBuilder()({ const fakeSystems: SystemMetadata[] = [ { - id: 'Location1', - alias: 'my system', + id: 'Minion1', + alias: 'Minion1-alias', state: 'CONNECTED', workspace: '1', }, { - id: 'Location2', + id: 'Minion2', alias: undefined, state: 'DISCONNECTED', workspace: '2', @@ -221,6 +233,16 @@ describe('queries', () => { expect(result.data).toMatchSnapshot() }) + test('calibration forecast with minion ID location groupBy', async () => { + backendServer.fetch + .calledWith(requestMatching({ url: '/niapm/v1/assets/calibration-forecast' })) + .mockReturnValue(createFetchResponse(minionIdLocationGroupCalibrationForecastResponseMock as CalibrationForecastResponse)) + + const result = await datastore.query(buildCalibrationForecastQuery(locationBasedCalibrationForecastQueryMock)) + + expect(result.data).toMatchSnapshot() + }) + test('calibration forecast with model groupBy', async () => { backendServer.fetch .calledWith(requestMatching({ url: '/niapm/v1/assets/calibration-forecast' })) diff --git a/src/datasources/asset-calibration/__snapshots__/AssetCalibrationDataSource.test.ts.snap b/src/datasources/asset-calibration/__snapshots__/AssetCalibrationDataSource.test.ts.snap index 123ae4f..48e6d8d 100644 --- a/src/datasources/asset-calibration/__snapshots__/AssetCalibrationDataSource.test.ts.snap +++ b/src/datasources/asset-calibration/__snapshots__/AssetCalibrationDataSource.test.ts.snap @@ -121,7 +121,7 @@ exports[`queries calibration forecast with location groupBy 1`] = ` { "name": "Group", "values": [ - "my system", + "Location1", "Location2", "Location3", ], @@ -140,6 +140,58 @@ exports[`queries calibration forecast with location groupBy 1`] = ` ] `; +exports[`queries calibration forecast with location groupBy 2`] = ` +[ + { + "fields": [ + { + "name": "Group", + "values": [ + "Location1", + "Location2", + "Location3", + ], + }, + { + "name": "Assets", + "values": [ + 1, + 2, + 3, + ], + }, + ], + "refId": "A", + }, +] +`; + +exports[`queries calibration forecast with minion ID location groupBy 1`] = ` +[ + { + "fields": [ + { + "name": "Group", + "values": [ + "Minion1-alias", + "Minion2", + "Minion3", + ], + }, + { + "name": "Assets", + "values": [ + 1, + 2, + 3, + ], + }, + ], + "refId": "A", + }, +] +`; + exports[`queries calibration forecast with model and location groupBy 1`] = ` [ { From 52bd2003757d0a38eeb538781961e0ec5bb1ed3d Mon Sep 17 00:00:00 2001 From: rmilea Date: Tue, 1 Oct 2024 17:30:12 +0300 Subject: [PATCH 09/12] fix snapshot --- .../AssetCalibrationDataSource.ts | 1 + .../AssetCalibrationDataSource.test.ts.snap | 26 ------------------- 2 files changed, 1 insertion(+), 26 deletions(-) diff --git a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts index 9c4dd28..62ef549 100644 --- a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts +++ b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts @@ -47,6 +47,7 @@ export class AssetCalibrationDataSource extends DataSourceBase { return await this.processCalibrationForecastQuery(query as AssetCalibrationQuery, options); } + async processCalibrationForecastQuery(query: AssetCalibrationQuery, options: DataQueryRequest) { const result: DataFrameDTO = { refId: query.refId, fields: [] }; const from = options.range!.from.toISOString(); diff --git a/src/datasources/asset-calibration/__snapshots__/AssetCalibrationDataSource.test.ts.snap b/src/datasources/asset-calibration/__snapshots__/AssetCalibrationDataSource.test.ts.snap index 48e6d8d..f3dd0cc 100644 --- a/src/datasources/asset-calibration/__snapshots__/AssetCalibrationDataSource.test.ts.snap +++ b/src/datasources/asset-calibration/__snapshots__/AssetCalibrationDataSource.test.ts.snap @@ -140,32 +140,6 @@ exports[`queries calibration forecast with location groupBy 1`] = ` ] `; -exports[`queries calibration forecast with location groupBy 2`] = ` -[ - { - "fields": [ - { - "name": "Group", - "values": [ - "Location1", - "Location2", - "Location3", - ], - }, - { - "name": "Assets", - "values": [ - 1, - 2, - 3, - ], - }, - ], - "refId": "A", - }, -] -`; - exports[`queries calibration forecast with minion ID location groupBy 1`] = ` [ { From 7f7e81733915828d1f82642417cc78b3c0adcc0a Mon Sep 17 00:00:00 2001 From: rmilea Date: Wed, 2 Oct 2024 10:26:46 +0300 Subject: [PATCH 10/12] lazy load systems --- .../AssetCalibrationDataSource.test.ts | 5 ++++- .../AssetCalibrationDataSource.ts | 18 ++++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts b/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts index 9ea4efd..bb24e3b 100644 --- a/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts +++ b/src/datasources/asset-calibration/AssetCalibrationDataSource.test.ts @@ -21,7 +21,10 @@ let datastore: AssetCalibrationDataSource, backendServer: MockProxy beforeEach(() => { [datastore, backendServer] = setupDataSource(AssetCalibrationDataSource); - datastore.state.systems = new Map(fakeSystems.map(system => [system.id, system])) + + backendServer.fetch + .calledWith(requestMatching({ url: '/nisysmgmt/v1/query-systems' })) + .mockReturnValue(createFetchResponse({ data: fakeSystems })); }); const monthGroupCalibrationForecastResponseMock: CalibrationForecastResponse = diff --git a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts index 62ef549..1b03f62 100644 --- a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts +++ b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts @@ -28,10 +28,6 @@ export class AssetCalibrationDataSource extends DataSourceBase this.state.systems = new Map(systems.map(system => [system.id, system])) - ).catch( _ => { return; }); } defaultQuery = { @@ -45,6 +41,7 @@ export class AssetCalibrationDataSource extends DataSourceBase { + await this.loadSystems(); return await this.processCalibrationForecastQuery(query as AssetCalibrationQuery, options); } @@ -169,6 +166,19 @@ export class AssetCalibrationDataSource extends DataSourceBase { + if (this.state.systems) { + return; + } + + try { + const systems = await this.querySystems('', ['id', 'alias','connected.data.state', 'workspace']); + this.state.systems = new Map(systems.map(system => [system.id, system])) + } catch (error) { + throw new Error(`An error occurred while querying systems: ${error}`); + } + } + async testDatasource(): Promise { await this.get(this.baseUrl + '/assets?take=1'); return { status: 'success', message: 'Data source connected and authentication successful!' }; From ceddb3c781a51661833279aee541b72e396a2275 Mon Sep 17 00:00:00 2001 From: rmilea Date: Thu, 3 Oct 2024 10:19:39 +0300 Subject: [PATCH 11/12] feedback 2 --- .../AssetCalibrationDataSource.ts | 21 +++++++------------ src/datasources/asset-calibration/types.ts | 5 ----- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts index 1b03f62..d84d24d 100644 --- a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts +++ b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts @@ -8,7 +8,6 @@ import { import { BackendSrv, getBackendSrv, getTemplateSrv, TemplateSrv } from '@grafana/runtime'; import { DataSourceBase } from 'core/DataSourceBase'; import { - AssetCalibrationDataSourceState, AssetCalibrationForecastKey, AssetCalibrationQuery, AssetCalibrationTimeBasedGroupByType, @@ -20,6 +19,8 @@ import { } from './types'; import { SystemMetadata } from "../system/types"; import { defaultOrderBy, defaultProjection } from "../system/constants"; +import TTLCache from '@isaacs/ttlcache'; +import { metadataCacheTTL } from 'datasources/data-frame/constants'; export class AssetCalibrationDataSource extends DataSourceBase { constructor( @@ -36,9 +37,7 @@ export class AssetCalibrationDataSource extends DataSourceBase = new TTLCache({ ttl: metadataCacheTTL }); async runQuery(query: AssetCalibrationQuery, options: DataQueryRequest): Promise { await this.loadSystems(); @@ -104,8 +103,8 @@ export class AssetCalibrationDataSource extends DataSourceBase { - if (descriptor.type === ColumnDescriptorType.MinionId && this.state.systems) { - const system = this.state.systems.get(descriptor.value); + if (descriptor.type === ColumnDescriptorType.MinionId && this.systemAliasCache) { + const system = this.systemAliasCache.get(descriptor.value); return system?.alias || descriptor.value } @@ -167,16 +166,12 @@ export class AssetCalibrationDataSource extends DataSourceBase { - if (this.state.systems) { + if (this.systemAliasCache.size > 0) { return; } - try { - const systems = await this.querySystems('', ['id', 'alias','connected.data.state', 'workspace']); - this.state.systems = new Map(systems.map(system => [system.id, system])) - } catch (error) { - throw new Error(`An error occurred while querying systems: ${error}`); - } + const systems = await this.querySystems('', ['id', 'alias','connected.data.state', 'workspace']); + systems.forEach(system => this.systemAliasCache.set(system.id, system)); } async testDatasource(): Promise { diff --git a/src/datasources/asset-calibration/types.ts b/src/datasources/asset-calibration/types.ts index aaae45f..52409fa 100644 --- a/src/datasources/asset-calibration/types.ts +++ b/src/datasources/asset-calibration/types.ts @@ -1,6 +1,5 @@ import { FieldDTO } from '@grafana/data'; import { DataQuery } from '@grafana/schema' -import { SystemMetadata } from 'datasources/system/types'; export interface AssetCalibrationQuery extends DataQuery { groupBy: string[]; @@ -141,10 +140,6 @@ export enum AssetFilterProperties { IsSystemController = 'IsSystemController' } -export interface AssetCalibrationDataSourceState { - systems: Map | null -}; - export interface CalibrationForecastModel { columns: FieldDTOWithDescriptor[], } From 7714c4e2f2f75197362b7276ed4583e56af28859 Mon Sep 17 00:00:00 2001 From: rmilea Date: Thu, 3 Oct 2024 10:31:49 +0300 Subject: [PATCH 12/12] bring back querySystems --- .../AssetCalibrationDataSource.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts index 1042b09..1487436 100644 --- a/src/datasources/asset-calibration/AssetCalibrationDataSource.ts +++ b/src/datasources/asset-calibration/AssetCalibrationDataSource.ts @@ -20,6 +20,8 @@ import { AssetComputedDataFields } from './constants'; import { AssetModel, AssetsResponse } from 'datasources/asset-common/types'; import TTLCache from '@isaacs/ttlcache'; import { metadataCacheTTL } from 'datasources/data-frame/constants'; +import { SystemMetadata } from 'datasources/system/types'; +import { defaultOrderBy, defaultProjection } from 'datasources/system/constants'; export class AssetCalibrationDataSource extends DataSourceBase { public defaultQuery = { @@ -49,7 +51,6 @@ export class AssetCalibrationDataSource extends DataSourceBase { + try { + let response = await this.getSystems({ + filter: filter, + projection: `new(${projection.join()})`, + orderBy: defaultOrderBy, + }) + + return response.data; + } catch (error) { + throw new Error(`An error occurred while querying systems: ${error}`); + } + } + private async loadSystems(): Promise { if (this.systemAliasCache.size > 0) { return;