Dashboard: Fix dashboard slug for api V1 and V2 (#108475)

This commit is contained in:
Bogdan Matei
2025-08-05 16:04:48 +02:00
committed by GitHub
parent 23b8014708
commit 8015c32663
4 changed files with 22 additions and 5 deletions
@@ -144,6 +144,7 @@ describe('v1 dashboard API', () => {
const api = new K8sDashboardAPI();
const result = await api.getDashboardDTO('test');
expect(result.meta.slug).toBe('test');
expect(result.meta.isFolder).toBe(false);
expect(result.meta.folderId).toBe(1);
expect(result.meta.folderTitle).toBe('New Folder');
@@ -204,6 +205,7 @@ describe('v1 dashboard API', () => {
});
expect(result.uid).toBe('adh59cn');
expect(result.slug).toBe('new-dashboard-saved');
expect(result.version).toBe(1);
expect(result.url).toBe('/d/adh59cn/new-dashboard-saved');
});
@@ -229,6 +231,7 @@ describe('v1 dashboard API', () => {
folderUid: 'test',
});
expect(result.slug).toBe('new-dashboard-saved');
expect(result.uid).toBe('adh59cn');
expect(result.version).toBe(1);
expect(result.url).toBe('/grafana/d/adh59cn/new-dashboard-saved');
@@ -248,6 +251,7 @@ describe('v1 dashboard API', () => {
});
expect(result.uid).toBe('adh59cn');
expect(result.slug).toBe('new-dashboard-saved');
expect(result.version).toBe(1);
expect(result.url).toBe('/d/adh59cn/new-dashboard-saved');
});
@@ -274,6 +278,7 @@ describe('v1 dashboard API', () => {
});
expect(result.uid).toBe('adh59cn');
expect(result.slug).toBe('new-dashboard-saved');
expect(result.version).toBe(1);
expect(result.url).toBe('/grafana/d/adh59cn/new-dashboard-saved');
});
+5 -2
View File
@@ -86,11 +86,13 @@ export class K8sDashboardAPI implements DashboardAPI<DashboardDTO, Dashboard> {
}
asSaveDashboardResponseDTO(v: Resource<DashboardDataDTO>): SaveDashboardResponseDTO {
const slug = kbn.slugifyForUrl(v.spec.title.trim());
const url = locationUtil.assureBaseUrl(
getDashboardUrl({
uid: v.metadata.name,
currentQueryParams: '',
slug: kbn.slugifyForUrl(v.spec.title.trim()),
slug,
})
);
@@ -100,7 +102,7 @@ export class K8sDashboardAPI implements DashboardAPI<DashboardDTO, Dashboard> {
id: v.spec.id ?? 0,
status: 'success',
url,
slug: '',
slug,
};
}
@@ -124,6 +126,7 @@ export class K8sDashboardAPI implements DashboardAPI<DashboardDTO, Dashboard> {
const result: DashboardDTO = {
meta: {
...dash.access,
slug: kbn.slugifyForUrl(dash.spec.title.trim()),
isNew: false,
isFolder: false,
uid: dash.metadata.name,
+2 -1
View File
@@ -178,7 +178,7 @@ describe('v2 dashboard API', () => {
id: 123,
uid: 'test-dash',
url: '/d/test-dash/testdashboard',
slug: '',
slug: 'testdashboard',
status: 'success',
version: 2,
});
@@ -198,6 +198,7 @@ describe('v2 dashboard API', () => {
name: 'existing-dash',
},
});
expect(result.slug).toBe('chaingtitledashboard');
expect(result.version).toBe(2);
});
+10 -2
View File
@@ -73,6 +73,12 @@ export class K8sDashboardV2API
dashboard.metadata.annotations[AnnoKeyFolder] = '';
}
// Ensure a consistent dashboard slug
if (!dashboard.access?.slug) {
dashboard.access = dashboard.access ?? {};
dashboard.access.slug = kbn.slugifyForUrl(dashboard.spec.title.trim());
}
return dashboard;
} catch (e) {
const status = getStatusFromError(e);
@@ -145,11 +151,13 @@ export class K8sDashboardV2API
}
asSaveDashboardResponseDTO(v: Resource<DashboardV2Spec>): SaveDashboardResponseDTO {
const slug = kbn.slugifyForUrl(v.spec.title.trim());
const url = locationUtil.assureBaseUrl(
getDashboardUrl({
uid: v.metadata.name,
currentQueryParams: '',
slug: kbn.slugifyForUrl(v.spec.title.trim()),
slug,
})
);
@@ -164,7 +172,7 @@ export class K8sDashboardV2API
id: dashId,
status: 'success',
url,
slug: '',
slug,
};
}