|
@@ -35,6 +35,7 @@ function parseInitialState(initial) {
|
|
|
try {
|
|
try {
|
|
|
const parsed = JSON.parse(decodePathComponent(initial));
|
|
const parsed = JSON.parse(decodePathComponent(initial));
|
|
|
return {
|
|
return {
|
|
|
|
|
+ datasource: parsed.datasource,
|
|
|
queries: parsed.queries.map(q => q.query),
|
|
queries: parsed.queries.map(q => q.query),
|
|
|
range: parsed.range,
|
|
range: parsed.range,
|
|
|
};
|
|
};
|
|
@@ -50,6 +51,7 @@ interface IExploreState {
|
|
|
datasourceLoading: boolean | null;
|
|
datasourceLoading: boolean | null;
|
|
|
datasourceMissing: boolean;
|
|
datasourceMissing: boolean;
|
|
|
graphResult: any;
|
|
graphResult: any;
|
|
|
|
|
+ initialDatasource?: string;
|
|
|
latency: number;
|
|
latency: number;
|
|
|
loading: any;
|
|
loading: any;
|
|
|
queries: any;
|
|
queries: any;
|
|
@@ -65,13 +67,14 @@ interface IExploreState {
|
|
|
export class Explore extends React.Component<any, IExploreState> {
|
|
export class Explore extends React.Component<any, IExploreState> {
|
|
|
constructor(props) {
|
|
constructor(props) {
|
|
|
super(props);
|
|
super(props);
|
|
|
- const { range, queries } = parseInitialState(props.routeParams.initial);
|
|
|
|
|
|
|
+ const { datasource, queries, range } = parseInitialState(props.routeParams.initial);
|
|
|
this.state = {
|
|
this.state = {
|
|
|
datasource: null,
|
|
datasource: null,
|
|
|
datasourceError: null,
|
|
datasourceError: null,
|
|
|
datasourceLoading: null,
|
|
datasourceLoading: null,
|
|
|
datasourceMissing: false,
|
|
datasourceMissing: false,
|
|
|
graphResult: null,
|
|
graphResult: null,
|
|
|
|
|
+ initialDatasource: datasource,
|
|
|
latency: 0,
|
|
latency: 0,
|
|
|
loading: false,
|
|
loading: false,
|
|
|
queries: ensureQueries(queries),
|
|
queries: ensureQueries(queries),
|
|
@@ -87,14 +90,20 @@ export class Explore extends React.Component<any, IExploreState> {
|
|
|
|
|
|
|
|
async componentDidMount() {
|
|
async componentDidMount() {
|
|
|
const { datasourceSrv } = this.props;
|
|
const { datasourceSrv } = this.props;
|
|
|
|
|
+ const { initialDatasource } = this.state;
|
|
|
if (!datasourceSrv) {
|
|
if (!datasourceSrv) {
|
|
|
throw new Error('No datasource service passed as props.');
|
|
throw new Error('No datasource service passed as props.');
|
|
|
}
|
|
}
|
|
|
const datasources = datasourceSrv.getExploreSources();
|
|
const datasources = datasourceSrv.getExploreSources();
|
|
|
if (datasources.length > 0) {
|
|
if (datasources.length > 0) {
|
|
|
this.setState({ datasourceLoading: true });
|
|
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) {
|
|
if (!datasource.meta.explore) {
|
|
|
datasource = await datasourceSrv.get(datasources[0].name);
|
|
datasource = await datasourceSrv.get(datasources[0].name);
|
|
|
}
|
|
}
|