mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Explore: Make sure line graphs get different colors
- lines for graphs from different query rows end up in different transactions - within each transaction the color distribution resets leading to color overlap - this change takes existing transaction colors into account
This commit is contained in:
@@ -20,6 +20,7 @@ import {
|
||||
ResultType,
|
||||
QueryIntervals,
|
||||
QueryOptions,
|
||||
ResultGetter,
|
||||
} from 'app/types/explore';
|
||||
import { LogsDedupStrategy } from 'app/core/logs_model';
|
||||
|
||||
@@ -301,11 +302,24 @@ export function getIntervals(range: RawTimeRange, lowLimit: string, resolution:
|
||||
return kbn.calculateInterval(absoluteRange, resolution, lowLimit);
|
||||
}
|
||||
|
||||
export function makeTimeSeriesList(dataList) {
|
||||
return dataList.map((seriesData, index) => {
|
||||
export const makeTimeSeriesList: ResultGetter = (dataList, transaction, allTransactions) => {
|
||||
// Prevent multiple Graph transactions to have the same colors
|
||||
let colorIndexOffset = 0;
|
||||
for (const other of allTransactions) {
|
||||
// Only need to consider transactions that came before the current one
|
||||
if (other === transaction) {
|
||||
break;
|
||||
}
|
||||
// Count timeseries of previous query results
|
||||
if (other.resultType === 'Graph' && other.done) {
|
||||
colorIndexOffset += other.result.length;
|
||||
}
|
||||
}
|
||||
|
||||
return dataList.map((seriesData, index: number) => {
|
||||
const datapoints = seriesData.datapoints || [];
|
||||
const alias = seriesData.target;
|
||||
const colorIndex = index % colors.length;
|
||||
const colorIndex = (colorIndexOffset + index) % colors.length;
|
||||
const color = colors[colorIndex];
|
||||
|
||||
const series = new TimeSeries({
|
||||
@@ -317,7 +331,7 @@ export function makeTimeSeriesList(dataList) {
|
||||
|
||||
return series;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Update the query history. Side-effect: store history in local storage
|
||||
|
||||
@@ -597,7 +597,8 @@ function runQueriesForType(
|
||||
const res = await datasourceInstance.query(transaction.options);
|
||||
eventBridge.emit('data-received', res.data || []);
|
||||
const latency = Date.now() - now;
|
||||
const results = resultGetter ? resultGetter(res.data) : res.data;
|
||||
const { queryTransactions } = getState().explore[exploreId];
|
||||
const results = resultGetter ? resultGetter(res.data, transaction, queryTransactions) : res.data;
|
||||
dispatch(queryTransactionSuccess(exploreId, transaction.id, results, latency, queries, datasourceId));
|
||||
} catch (response) {
|
||||
eventBridge.emit('data-error', response);
|
||||
|
||||
@@ -322,6 +322,8 @@ export interface QueryTransaction {
|
||||
|
||||
export type RangeScanner = () => RawTimeRange;
|
||||
|
||||
export type ResultGetter = (result: any, transaction: QueryTransaction, allTransactions: QueryTransaction[]) => any;
|
||||
|
||||
export interface TextMatch {
|
||||
text: string;
|
||||
start: number;
|
||||
|
||||
Reference in New Issue
Block a user