Skip to content

Commit 2cde3bc

Browse files
upcoming: [DI-27569] - Integrate endpoints dashboard for object-storage service in CloudPulse Metrics (#13133)
* upcoming: [DI-27569] - Integrate endpoints dashboard for object-storage service * upcoming: [DI-27569] - Update endpoints config for buckets dashboard * upcoming: [DI-27569] - add util for dashboard type identification, simplify props * upcoming: [DI-27569] - Add dimensionkey for endpoints filter in endpoints config * upcoming: [DI-27569] - Cleanup * upcoming: [DI-27569] - Simplify props * upcoming: [DI-27569] - Move computations outside * upcoming: [DI-27569] - Fix group_by bug * upcoming: [DI-27569] - Update imports * upcoming: [DI-27569] - Move test case * upcoming: [DI-27569] - Add changesets * upcoming: [DI-27569] - Simplify
1 parent 39025ad commit 2cde3bc

23 files changed

+450
-108
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@linode/api-v4": Upcoming Features
3+
---
4+
5+
CloudPulse-Metrics: Update `entity_ids` type in `CloudPulseMetricsRequest` for metrics api in endpoints dahsboard ([#13133](https://github.com/linode/manager/pull/13133))

packages/api-v4/src/cloudpulse/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ export interface Metric {
159159
export interface CloudPulseMetricsRequest {
160160
absolute_time_duration: DateTimeWithPreset | undefined;
161161
associated_entity_region?: string;
162-
entity_ids: number[] | string[];
162+
entity_ids: number[] | string[] | undefined;
163163
entity_region?: string;
164164
filters?: Filters[];
165165
group_by?: string[];
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@linode/manager": Upcoming Features
3+
---
4+
5+
CloudPulse-Metrics: Update `FilterConfig.ts` to handle integration of endpoints dashboard for object-storage service in metrics page([#13133](https://github.com/linode/manager/pull/13133))

packages/manager/src/features/CloudPulse/Dashboard/CloudPulseDashboard.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ export const CloudPulseDashboard = (props: DashboardProperties) => {
150150
} = useCloudPulseJWEtokenQuery(
151151
dashboard?.service_type,
152152
getJweTokenPayload(),
153-
Boolean(resources) && !isDashboardLoading && !isDashboardApiError
153+
!isDashboardLoading && !isDashboardApiError
154154
);
155155

156156
if (isDashboardApiError) {

packages/manager/src/features/CloudPulse/GroupBy/utils.test.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ describe('useGlobalDimensions method test', () => {
8787

8888
it('should return non-empty options and defaultValue if no common dimensions', () => {
8989
queryMocks.useCloudPulseDashboardByIdQuery.mockReturnValue({
90-
data: dashboardFactory.build(),
90+
data: dashboardFactory.build({ id: 1 }),
9191
isLoading: false,
9292
});
9393
queryMocks.useGetCloudPulseMetricDefinitionsByServiceType.mockReturnValue({
@@ -106,7 +106,7 @@ describe('useGlobalDimensions method test', () => {
106106

107107
it('should return non-empty options and defaultValue from preferences', () => {
108108
queryMocks.useCloudPulseDashboardByIdQuery.mockReturnValue({
109-
data: dashboardFactory.build(),
109+
data: dashboardFactory.build({ id: 1 }),
110110
isLoading: false,
111111
});
112112
queryMocks.useGetCloudPulseMetricDefinitionsByServiceType.mockReturnValue({
@@ -123,6 +123,22 @@ describe('useGlobalDimensions method test', () => {
123123
isLoading: false,
124124
});
125125
});
126+
127+
it('should not return default option in case of endpoints-only dashboard', () => {
128+
queryMocks.useCloudPulseDashboardByIdQuery.mockReturnValue({
129+
data: dashboardFactory.build({ id: 10 }),
130+
isLoading: false,
131+
});
132+
queryMocks.useGetCloudPulseMetricDefinitionsByServiceType.mockReturnValue({
133+
data: {
134+
data: metricDefinitions,
135+
},
136+
isLoading: false,
137+
});
138+
const result = useGlobalDimensions(10, 'objectstorage');
139+
// Verify if options contain the default option - 'entityId' or not
140+
expect(result.options).toEqual([{ label: 'Dim 2', value: 'Dim 2' }]);
141+
});
126142
});
127143

128144
describe('useWidgetDimension method test', () => {

packages/manager/src/features/CloudPulse/GroupBy/utils.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ import { useCloudPulseDashboardByIdQuery } from 'src/queries/cloudpulse/dashboar
22
import { useGetCloudPulseMetricDefinitionsByServiceType } from 'src/queries/cloudpulse/services';
33

44
import { ASSOCIATED_ENTITY_METRIC_MAP } from '../Utils/constants';
5-
import { getAssociatedEntityType } from '../Utils/FilterConfig';
5+
import {
6+
getAssociatedEntityType,
7+
isEndpointsOnlyDashboard,
8+
} from '../Utils/FilterConfig';
69

710
import type { GroupByOption } from './CloudPulseGroupByDrawer';
811
import type {
@@ -62,10 +65,12 @@ export const useGlobalDimensions = (
6265
metricDefinition?.data ?? [],
6366
dashboard
6467
);
65-
const commonDimensions = [
66-
defaultOption,
67-
...getCommonDimensions(metricDimensions),
68-
];
68+
const baseDimensions = getCommonDimensions(metricDimensions);
69+
const shouldIncludeDefault = !isEndpointsOnlyDashboard(dashboardId ?? 0);
70+
71+
const commonDimensions = shouldIncludeDefault
72+
? [defaultOption, ...baseDimensions]
73+
: baseDimensions;
6974

7075
const commonGroups = getCommonGroups(
7176
preference ? preference : (dashboard?.group_by ?? []),

packages/manager/src/features/CloudPulse/Utils/CloudPulseWidgetUtils.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ describe('getTimeDurationFromPreset method', () => {
328328
expect(result).toEqual([123]);
329329
});
330330

331-
it('should return entity ids for objectstorage service type', () => {
331+
it('should return entity ids for objectstorage buckets dashboard', () => {
332332
const result = getEntityIds(
333333
[{ id: 'bucket-1', label: 'bucket-name-1' }],
334334
['bucket-1'],

packages/manager/src/features/CloudPulse/Utils/CloudPulseWidgetUtils.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,9 @@ export const getCloudPulseMetricRequest = (
354354
presetDuration === undefined
355355
? { end: duration.end, start: duration.start }
356356
: undefined,
357-
entity_ids: getEntityIds(resources, entityIds, widget, serviceType),
357+
entity_ids: !entityIds.length
358+
? undefined
359+
: getEntityIds(resources, entityIds, widget, serviceType),
358360
filters: undefined,
359361
group_by: !groupBy?.length ? undefined : groupBy,
360362
relative_time_duration: presetDuration,

packages/manager/src/features/CloudPulse/Utils/FilterBuilder.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ import { FILTER_CONFIG } from './FilterConfig';
3434
import { CloudPulseAvailableViews, CloudPulseSelectTypes } from './models';
3535
import { deepEqual } from './utils';
3636

37-
import type { CloudPulseEndpoints } from '../shared/CloudPulseEndpointsSelect';
3837
import type { CloudPulseResources } from '../shared/CloudPulseResourcesSelect';
3938
import type { CloudPulseServiceTypeFilters } from './models';
4039

@@ -686,13 +685,15 @@ describe('filterUsingDependentFilters', () => {
686685
});
687686

688687
describe('filterEndpointsUsingRegion', () => {
689-
const mockData: CloudPulseEndpoints[] = [
688+
const mockData: CloudPulseResources[] = [
690689
{
691690
...objectStorageEndpointsFactory.build({ region: 'us-east' }),
691+
id: 'us-east-1.linodeobjects.com',
692692
label: 'us-east-1.linodeobjects.com',
693693
},
694694
{
695695
...objectStorageEndpointsFactory.build({ region: 'us-west' }),
696+
id: 'us-west-1.linodeobjects.com',
696697
label: 'us-west-1.linodeobjects.com',
697698
},
698699
];

packages/manager/src/features/CloudPulse/Utils/FilterBuilder.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import type {
1515
} from '../Dashboard/CloudPulseDashboardLanding';
1616
import type { CloudPulseCustomSelectProps } from '../shared/CloudPulseCustomSelect';
1717
import type { CloudPulseEndpointsSelectProps } from '../shared/CloudPulseEndpointsSelect';
18-
import type { CloudPulseEndpoints } from '../shared/CloudPulseEndpointsSelect';
1918
import type {
2019
CloudPulseFirewallNodebalancersSelectProps,
2120
CloudPulseNodebalancers,
@@ -404,12 +403,14 @@ export const getEndpointsProperties = (
404403
preferences
405404
),
406405
handleEndpointsSelection: handleEndpointsChange,
406+
dashboardId: dashboard.id,
407407
label,
408408
placeholder,
409409
serviceType: dashboard.service_type,
410410
region: dependentFilters?.[REGION],
411411
savePreferences: !isServiceAnalyticsIntegration,
412412
xFilter: filterBasedOnConfig(config, dependentFilters ?? {}),
413+
hasRestrictedSelections: config.configuration.hasRestrictedSelections,
413414
};
414415
};
415416

@@ -733,9 +734,9 @@ export const filterUsingDependentFilters = (
733734
* @returns The filtered endpoints
734735
*/
735736
export const filterEndpointsUsingRegion = (
736-
data?: CloudPulseEndpoints[],
737+
data?: CloudPulseResources[],
737738
regionFilter?: CloudPulseMetricsFilter
738-
): CloudPulseEndpoints[] | undefined => {
739+
): CloudPulseResources[] | undefined => {
739740
if (!data) {
740741
return data;
741742
}

0 commit comments

Comments
 (0)