mirror of
https://github.com/grafana/grafana.git
synced 2025-02-13 00:55:47 -06:00
* Add integration with Jeager Add Jaeger datasource and modify derived fields in loki to allow for opening a trace in Jager in separate split. Modifies build so that this branch docker images are pushed to docker hub Add a traceui dir with docker-compose and provision files for demoing.:wq * Enable docker logger plugin to send logs to loki * Add placeholder zipkin datasource * Fixed rebase issues, added enhanceDataFrame to non-legacy code path * Trace selector for jaeger query field * Fix logs default mode for Loki * Fix loading jaeger query field services on split * Updated grafana image in traceui/compose file * Fix prettier error * Hide behind feature flag, clean up unused code. * Fix tests * Fix tests * Cleanup code and review feedback * Remove traceui directory * Remove circle build changes * Fix feature toggles object * Fix merge issues * Add trace ui in Explore * WIP * WIP * WIP * Make jaeger datasource return trace data instead of link * Allow js in jest tests * Return data from Jaeger datasource * Take yarn.lock from master * Fix missing component * Update yarn lock * Fix some ts and lint errors * Fix merge * Fix type errors * Make tests pass again * Add tests * Fix es5 compatibility * Add header with minimap * Fix sizing issue due to column resizer handle * Fix issues with sizing, search functionality, duplicate react, tests * Refactor TraceView component, fix tests * Fix type errors * Add dark theme styling * Add tests for hooks * More color changes * Fix tests to deal with additional theme wrappers. * Add memoization * Fix duplicate identifier Co-authored-by: David Kaltschmidt <david.kaltschmidt@gmail.com>
83 lines
2.7 KiB
TypeScript
83 lines
2.7 KiB
TypeScript
import { useCallback, useState } from 'react';
|
|
import { DetailState, Log } from '@jaegertracing/jaeger-ui-components';
|
|
|
|
/**
|
|
* Keeps state of the span detail. This means whether span details are open but also state of each detail subitem
|
|
* like logs or tags.
|
|
*/
|
|
export function useDetailState() {
|
|
const [detailStates, setDetailStates] = useState(new Map<string, DetailState>());
|
|
|
|
const toggleDetail = useCallback(
|
|
function toggleDetail(spanID: string) {
|
|
const newDetailStates = new Map(detailStates);
|
|
if (newDetailStates.has(spanID)) {
|
|
newDetailStates.delete(spanID);
|
|
} else {
|
|
newDetailStates.set(spanID, new DetailState());
|
|
}
|
|
setDetailStates(newDetailStates);
|
|
},
|
|
[detailStates]
|
|
);
|
|
|
|
const detailLogItemToggle = useCallback(
|
|
function detailLogItemToggle(spanID: string, log: Log) {
|
|
const old = detailStates.get(spanID);
|
|
if (!old) {
|
|
return;
|
|
}
|
|
const detailState = old.toggleLogItem(log);
|
|
const newDetailStates = new Map(detailStates);
|
|
newDetailStates.set(spanID, detailState);
|
|
return setDetailStates(newDetailStates);
|
|
},
|
|
[detailStates]
|
|
);
|
|
|
|
return {
|
|
detailStates,
|
|
toggleDetail,
|
|
detailLogItemToggle,
|
|
detailLogsToggle: useCallback(makeDetailSubsectionToggle('logs', detailStates, setDetailStates), [detailStates]),
|
|
detailWarningsToggle: useCallback(makeDetailSubsectionToggle('warnings', detailStates, setDetailStates), [
|
|
detailStates,
|
|
]),
|
|
detailReferencesToggle: useCallback(makeDetailSubsectionToggle('references', detailStates, setDetailStates), [
|
|
detailStates,
|
|
]),
|
|
detailProcessToggle: useCallback(makeDetailSubsectionToggle('process', detailStates, setDetailStates), [
|
|
detailStates,
|
|
]),
|
|
detailTagsToggle: useCallback(makeDetailSubsectionToggle('tags', detailStates, setDetailStates), [detailStates]),
|
|
};
|
|
}
|
|
|
|
function makeDetailSubsectionToggle(
|
|
subSection: 'tags' | 'process' | 'logs' | 'warnings' | 'references',
|
|
detailStates: Map<string, DetailState>,
|
|
setDetailStates: (detailStates: Map<string, DetailState>) => void
|
|
) {
|
|
return (spanID: string) => {
|
|
const old = detailStates.get(spanID);
|
|
if (!old) {
|
|
return;
|
|
}
|
|
let detailState;
|
|
if (subSection === 'tags') {
|
|
detailState = old.toggleTags();
|
|
} else if (subSection === 'process') {
|
|
detailState = old.toggleProcess();
|
|
} else if (subSection === 'warnings') {
|
|
detailState = old.toggleWarnings();
|
|
} else if (subSection === 'references') {
|
|
detailState = old.toggleReferences();
|
|
} else {
|
|
detailState = old.toggleLogs();
|
|
}
|
|
const newDetailStates = new Map(detailStates);
|
|
newDetailStates.set(spanID, detailState);
|
|
setDetailStates(newDetailStates);
|
|
};
|
|
}
|