From 390090da0534b88bcc3972f6f62ced7a7994b13a Mon Sep 17 00:00:00 2001 From: David Kaltschmidt Date: Fri, 13 Jul 2018 09:45:56 +0200 Subject: [PATCH] Set datasource in deep links to Explore --- public/app/containers/Explore/Explore.tsx | 15 ++++++++++++--- .../plugins/datasource/prometheus/datasource.ts | 1 + public/sass/pages/_explore.scss | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/public/app/containers/Explore/Explore.tsx b/public/app/containers/Explore/Explore.tsx index 90bf0941572..81e1922d2cd 100644 --- a/public/app/containers/Explore/Explore.tsx +++ b/public/app/containers/Explore/Explore.tsx @@ -35,6 +35,7 @@ function parseInitialState(initial) { try { const parsed = JSON.parse(decodePathComponent(initial)); return { + datasource: parsed.datasource, queries: parsed.queries.map(q => q.query), range: parsed.range, }; @@ -50,6 +51,7 @@ interface IExploreState { datasourceLoading: boolean | null; datasourceMissing: boolean; graphResult: any; + initialDatasource?: string; latency: number; loading: any; queries: any; @@ -65,13 +67,14 @@ interface IExploreState { export class Explore extends React.Component { constructor(props) { super(props); - const { range, queries } = parseInitialState(props.routeParams.initial); + const { datasource, queries, range } = parseInitialState(props.routeParams.initial); this.state = { datasource: null, datasourceError: null, datasourceLoading: null, datasourceMissing: false, graphResult: null, + initialDatasource: datasource, latency: 0, loading: false, queries: ensureQueries(queries), @@ -87,14 +90,20 @@ export class Explore extends React.Component { async componentDidMount() { const { datasourceSrv } = this.props; + const { initialDatasource } = this.state; if (!datasourceSrv) { throw new Error('No datasource service passed as props.'); } const datasources = datasourceSrv.getExploreSources(); if (datasources.length > 0) { this.setState({ datasourceLoading: true }); - // Try default datasource, otherwise get first - let datasource = await datasourceSrv.get(); + // Priority: datasource in url, default datasource, first explore datasource + let datasource; + if (initialDatasource) { + datasource = await datasourceSrv.get(initialDatasource); + } else { + datasource = await datasourceSrv.get(); + } if (!datasource.meta.explore) { datasource = await datasourceSrv.get(datasources[0].name); } diff --git a/public/app/plugins/datasource/prometheus/datasource.ts b/public/app/plugins/datasource/prometheus/datasource.ts index 88d6141696d..9ccda65a145 100644 --- a/public/app/plugins/datasource/prometheus/datasource.ts +++ b/public/app/plugins/datasource/prometheus/datasource.ts @@ -357,6 +357,7 @@ export class PrometheusDatasource { state = { ...state, queries, + datasource: this.name, }; } return state; diff --git a/public/sass/pages/_explore.scss b/public/sass/pages/_explore.scss index 9ef549e022c..e1b170c636d 100644 --- a/public/sass/pages/_explore.scss +++ b/public/sass/pages/_explore.scss @@ -61,7 +61,7 @@ } .datasource-picker { - min-width: 6rem; + min-width: 10rem; } .timepicker {