Skip to content

Commit

Permalink
Display titles from within dashboard saved objects
Browse files Browse the repository at this point in the history
  • Loading branch information
skh committed May 5, 2020
1 parent 4fa4012 commit 745707b
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,6 @@ export interface DataStream {
size_in_bytes: number;
dashboards: Array<{
id: string;
type: string;
title: string;
}>;
}
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ export const DataStreamRowActions = memo<{ datastream: DataStream }>(({ datastre
return {
icon: 'dashboardApp',
href: useKibanaLink(`/dashboard/${dashboard.id || ''}`),
name: dashboard.id,
name: dashboard.title,
};
}),
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import { RequestHandler } from 'src/core/server';
import { RequestHandler, SavedObjectsClientContract } from 'src/core/server';
import { DataStream } from '../../types';
import { GetDataStreamsResponse } from '../../../common';
import { getPackageSavedObjects } from '../../services/epm/packages/get';
import { GetDataStreamsResponse, KibanaAssetType } from '../../../common';
import { getPackageSavedObjects, getKibanaSavedObject } from '../../services/epm/packages/get';

const DATA_STREAM_INDEX_PATTERN = 'logs-*-*,metrics-*-*';

Expand Down Expand Up @@ -104,7 +104,7 @@ export const getListHandler: RequestHandler = async (context, request, response)
const packageSavedObjects = await getPackageSavedObjects(context.core.savedObjects.client);
const packageMetadata: any = {};

const dataStreams: DataStream[] = (indexResults as any[]).map(result => {
const dataStreamsPromises = (indexResults as any[]).map(async result => {
const {
key: indexName,
dataset: { buckets: datasetBuckets },
Expand All @@ -122,10 +122,20 @@ export const getListHandler: RequestHandler = async (context, request, response)
// - and the package has been installed through EPM
// - and we didn't pick the metadata in an earlier iteration of this map()
if (pkg !== '' && pkgSavedObject.length > 0 && !packageMetadata[pkg]) {
// then pick the dashboards from the package saved object
const dashboards =
pkgSavedObject[0].attributes?.installed?.filter(
o => o.type === KibanaAssetType.dashboard
) || [];
// and then pick the human-readable titles from the dashboard saved objects
const enhancedDashboards = await getEnhancedDashboards(
context.core.savedObjects.client,
dashboards
);

packageMetadata[pkg] = {
version: pkgSavedObject[0].attributes?.version || '',
dashboards:
pkgSavedObject[0].attributes?.installed?.filter(o => o.type === 'dashboard') || [],
dashboards: enhancedDashboards,
};
}
return {
Expand All @@ -141,6 +151,8 @@ export const getListHandler: RequestHandler = async (context, request, response)
};
});

const dataStreams: DataStream[] = await Promise.all(dataStreamsPromises);

body.data_streams = dataStreams;

return response.ok({
Expand All @@ -153,3 +165,21 @@ export const getListHandler: RequestHandler = async (context, request, response)
});
}
};

const getEnhancedDashboards = async (
savedObjectsClient: SavedObjectsClientContract,
dashboards: any[]
) => {
const dashboardsPromises = dashboards.map(async db => {
const dbSavedObject: any = await getKibanaSavedObject(
savedObjectsClient,
KibanaAssetType.dashboard,
db.id
);
return {
id: db.id,
title: dbSavedObject.attributes?.title || db.id,
};
});
return await Promise.all(dashboardsPromises);
};

0 comments on commit 745707b

Please sign in to comment.