mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* Refactor: Removes replaceUrl from actions * Refactor: Moves saveState thunk to epic * Refactor: Moves thunks to epics * Wip: removes resulttype and queries once * Refactor: LiveTailing uses observer in query * Refactor: Creates epics folder for epics and move back actioncreators * Tests: Adds tests for epics and reducer * Fix: Checks for undefined as well * Refactor: Cleans up previous live tailing implementation * Chore: merge with master * Fix: Fixes url issuses and prom graph in Panels * Refactor: Removes supportsStreaming and adds sockets to DataSourcePluginMeta instead * Refactor: Changes the way we create TimeSeries * Refactor: Renames sockets to streaming * Refactor: Changes the way Explore does incremental updates * Refactor: Removes unused method * Refactor: Adds back Loading indication
40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
import { Epic } from 'redux-observable';
|
|
import { NEVER } from 'rxjs';
|
|
import { mergeMap } from 'rxjs/operators';
|
|
|
|
import { ActionOf } from 'app/core/redux/actionCreatorFactory';
|
|
import { StoreState } from 'app/types/store';
|
|
import { hasNonEmptyQuery } from 'app/core/utils/explore';
|
|
import {
|
|
clearQueriesAction,
|
|
runQueriesAction,
|
|
RunQueriesPayload,
|
|
runQueriesBatchAction,
|
|
stateSaveAction,
|
|
} from '../actionTypes';
|
|
|
|
export const runQueriesEpic: Epic<ActionOf<any>, ActionOf<any>, StoreState> = (action$, state$) => {
|
|
return action$.ofType(runQueriesAction.type).pipe(
|
|
mergeMap((action: ActionOf<RunQueriesPayload>) => {
|
|
const { exploreId } = action.payload;
|
|
const { datasourceInstance, queries, datasourceError, containerWidth, isLive } = state$.value.explore[exploreId];
|
|
|
|
if (datasourceError) {
|
|
// let's not run any queries if data source is in a faulty state
|
|
return NEVER;
|
|
}
|
|
|
|
if (!hasNonEmptyQuery(queries)) {
|
|
return [clearQueriesAction({ exploreId }), stateSaveAction()]; // Remember to save to state and update location
|
|
}
|
|
|
|
// Some datasource's query builders allow per-query interval limits,
|
|
// but we're using the datasource interval limit for now
|
|
const interval = datasourceInstance.interval;
|
|
const live = isLive;
|
|
|
|
return [runQueriesBatchAction({ exploreId, queryOptions: { interval, maxDataPoints: containerWidth, live } })];
|
|
})
|
|
);
|
|
};
|