Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Structured metadata: Refactor into new variable #826

Merged
merged 73 commits into from
Oct 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
2157dff
chore: wip
gtk-grafana Sep 23, 2024
9005ea7
chore: fix types
gtk-grafana Sep 23, 2024
6e6171a
chore: wip
gtk-grafana Sep 23, 2024
b248887
chore: update primary label in url
gtk-grafana Sep 23, 2024
f12ed7d
chore: wip, stuff is broken
gtk-grafana Sep 24, 2024
0443387
Merge remote-tracking branch 'origin/main' into gtk-grafana/service-n…
gtk-grafana Sep 25, 2024
d63c05f
chore: remove service_name everywhere besides service selection, fiel…
gtk-grafana Sep 25, 2024
0c8e41f
Merge remote-tracking branch 'origin/main' into gtk-grafana/service-n…
gtk-grafana Sep 25, 2024
e546ed3
chore: todos
gtk-grafana Sep 25, 2024
606c4df
chore: fix fields queries with metadata, clean up, fix fields count w…
gtk-grafana Sep 26, 2024
57ac417
chore: remove flag placeholder
gtk-grafana Sep 26, 2024
85a7266
chore: update unit test
gtk-grafana Sep 26, 2024
406bd21
Merge remote-tracking branch 'origin/main' into gtk-grafana/service-n…
gtk-grafana Sep 26, 2024
ffbe1c2
Merge remote-tracking branch 'origin/main' into gtk-grafana/service-n…
gtk-grafana Sep 26, 2024
9020084
chore: clean up, document
gtk-grafana Sep 26, 2024
7fd1ca0
chore: clean up
gtk-grafana Sep 26, 2024
195f4d2
Merge branch 'main' into gtk-grafana/service-not-required-poc
gtk-grafana Sep 30, 2024
7c056dc
Merge remote-tracking branch 'origin/main' into gtk-grafana/service-n…
gtk-grafana Sep 30, 2024
976b6ca
chore: add back in change that was overwritten by merge
gtk-grafana Sep 30, 2024
f462fda
chore: wip
gtk-grafana Oct 2, 2024
3226cc7
chore: assert url contains primary label name and value when calling …
gtk-grafana Oct 2, 2024
48798c8
chore: add more verbose logging for unexpected urls, remove bad error…
gtk-grafana Oct 2, 2024
525db5f
Merge branch 'gtk-grafana/service-not-required-poc' into gtk-grafana/…
gtk-grafana Oct 2, 2024
718a7e6
chore: wip, mostly functional
gtk-grafana Oct 2, 2024
debec32
chore: clean up
gtk-grafana Oct 3, 2024
932884b
Merge remote-tracking branch 'origin/main' into gtk-grafana/service-s…
gtk-grafana Oct 3, 2024
b7ee755
chore: refactor tabs out into new scene
gtk-grafana Oct 3, 2024
f07952b
chore: clean up, refactor
gtk-grafana Oct 3, 2024
d61b594
chore: clean up
gtk-grafana Oct 3, 2024
67c2ad1
chore: remove redundant state
gtk-grafana Oct 3, 2024
31ffdf9
feat: switch to detected_labels and display cardinality in tabs and d…
gtk-grafana Oct 3, 2024
3502ad2
chore: add browser history
gtk-grafana Oct 3, 2024
378182c
test: add test for new url params
gtk-grafana Oct 3, 2024
0a29feb
fix: fix browser history when changing labels, datasource
gtk-grafana Oct 8, 2024
207f6a2
Merge remote-tracking branch 'origin/main' into gtk-grafana/service-s…
gtk-grafana Oct 8, 2024
9a0bb0b
chore: fix e2e tests
gtk-grafana Oct 8, 2024
de6a3c4
feat: add favorites which work with new tabs
gtk-grafana Oct 8, 2024
43d1162
feat: add favorites which work with new tabs
gtk-grafana Oct 8, 2024
6cf5f4e
chore: ui clean up, fix bad browser history bug on redirect back to i…
gtk-grafana Oct 9, 2024
0ee54f4
chore: ui review, update favorite icon
gtk-grafana Oct 9, 2024
909b74c
chore: truncate long tab names, add tooltip
gtk-grafana Oct 9, 2024
875eace
chore: spelling
gtk-grafana Oct 9, 2024
13174b9
chore: fix e2e tests, update tooltip copy
gtk-grafana Oct 9, 2024
66aaeef
chore: add e2e coverage
gtk-grafana Oct 10, 2024
5c518eb
chore: clean up
gtk-grafana Oct 10, 2024
001a038
Merge remote-tracking branch 'origin/main' into gtk-grafana/service-s…
gtk-grafana Oct 10, 2024
bbac060
chore: fix urls, remove uncessary test
gtk-grafana Oct 10, 2024
01e1c9b
chore: remove cryptic comment
gtk-grafana Oct 10, 2024
a682175
fix: prevent runtime error if primary label is defined in url but empty
gtk-grafana Oct 10, 2024
a31d9c4
chore: remove capitalization, change input copy
gtk-grafana Oct 15, 2024
d7df5dd
chore: remove loading indicator that pushes content
gtk-grafana Oct 15, 2024
4209473
chore: design tweaks and review with UX
gtk-grafana Oct 15, 2024
bcb107b
chore: sort tabs by order added
gtk-grafana Oct 15, 2024
058f1b0
chore: update playwright, update testids
gtk-grafana Oct 15, 2024
5e20744
feat: move structured metadata to new variable
gtk-grafana Oct 15, 2024
127d476
chore: remove console.log
gtk-grafana Oct 15, 2024
4607a65
chore: clean up, ellipsis
gtk-grafana Oct 16, 2024
65bb7cf
Merge branch 'gtk-grafana/service-selection-any-label-tabs' into gtk-…
gtk-grafana Oct 16, 2024
7ad9a64
Merge remote-tracking branch 'origin/main' into gtk-grafana/structure…
gtk-grafana Oct 16, 2024
d1a78f7
chore: revert unintended changes from previous merge
gtk-grafana Oct 16, 2024
64b376f
test: fix e2e
gtk-grafana Oct 16, 2024
025a188
test: fix pod count assertion
gtk-grafana Oct 16, 2024
c5ade9c
chore: facepalm
gtk-grafana Oct 16, 2024
a4d1609
Merge branch 'main' into gtk-grafana/structured-metadata-refactor
gtk-grafana Oct 16, 2024
adb1443
Merge branch 'main' into gtk-grafana/structured-metadata-refactor
gtk-grafana Oct 17, 2024
a912c5f
Merge remote-tracking branch 'origin/main' into gtk-grafana/structure…
gtk-grafana Oct 17, 2024
43709b3
chore: poll instead of wait
gtk-grafana Oct 17, 2024
086d0fa
Merge branch 'main' into gtk-grafana/structured-metadata-refactor
gtk-grafana Oct 17, 2024
87de60b
Merge branch 'main' into gtk-grafana/structured-metadata-refactor
gtk-grafana Oct 17, 2024
b643f48
fix: parse field values before comparing values, refactor getFilterTy…
gtk-grafana Oct 21, 2024
8aa8464
test: flakey number of pods in ci
gtk-grafana Oct 21, 2024
2063a0b
chore: rename
gtk-grafana Oct 21, 2024
50e3ba6
chore: throw error if LabelType is invalid
gtk-grafana Oct 21, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion src/Components/IndexScene/IndexScene.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import {
VAR_LEVELS,
VAR_LINE_FILTER,
VAR_LOGS_FORMAT,
VAR_METADATA,
VAR_PATTERNS,
} from 'services/variables';

Expand Down Expand Up @@ -224,6 +225,21 @@ function getVariableSet(initialDatasourceUid: string, initialFilters?: AdHocVari
return operators;
};

const metadataVariable = new AdHocFiltersVariable({
name: VAR_METADATA,
label: 'Metadata',
applyMode: 'manual',
layout: 'vertical',
getTagKeysProvider: () => Promise.resolve({ replace: true, values: [] }),
getTagValuesProvider: () => Promise.resolve({ replace: true, values: [] }),
expressionBuilder: renderLogQLMetadataFilters,
hide: VariableHide.hideLabel,
});

metadataVariable._getOperators = () => {
return operators;
};

const levelsVariable = new AdHocFiltersVariable({
name: VAR_LEVELS,
label: 'Filters',
Expand Down Expand Up @@ -258,7 +274,7 @@ function getVariableSet(initialDatasourceUid: string, initialFilters?: AdHocVari
labelVariable,
fieldsVariable,
levelsVariable,
// @todo where is patterns being added to the url? Why do we have var-patterns and patterns?
metadataVariable,
new CustomVariable({
name: VAR_PATTERNS,
value: '',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { AdHocVariableFilter, BusEventBase, DataFrame } from '@grafana/data';
import { SceneComponentProps, SceneObject, SceneObjectBase, SceneObjectState } from '@grafana/scenes';
import { VariableHide } from '@grafana/schema';
import { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from 'services/analytics';
import { LEVEL_VARIABLE_VALUE, VAR_FIELDS, VAR_LABELS, VAR_LEVELS } from 'services/variables';
import { LEVEL_VARIABLE_VALUE, VAR_FIELDS, VAR_LABELS, VAR_LEVELS, VAR_METADATA } from 'services/variables';
import { FilterButton } from 'Components/FilterButton';
import { FilterOp } from 'services/filters';
import { getDetectedLabelsFrame } from '../ServiceScene';
Expand Down Expand Up @@ -36,7 +36,7 @@ export function addAdHocFilter(filter: AdHocVariableFilter, scene: SceneObject,
addToFilters(filter.key, filter.value, type, scene, variableType);
}

export type VariableFilterType = typeof VAR_LABELS | typeof VAR_FIELDS | typeof VAR_LEVELS;
export type VariableFilterType = typeof VAR_LABELS | typeof VAR_FIELDS | typeof VAR_LEVELS | typeof VAR_METADATA;

export function addToFilters(
key: string,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ import { LayoutSwitcher } from './LayoutSwitcher';
import { getQueryRunner } from '../../../services/panel';
import { ByFrameRepeater } from './ByFrameRepeater';
import { Alert, DrawStyle, LoadingPlaceholder } from '@grafana/ui';
import { buildFieldsQueryString, getFilterBreakdownValueScene } from '../../../services/fields';
import { buildFieldsQueryString, getFilterBreakdownValueScene, getParserForField } from '../../../services/fields';
import { getLabelValue } from './SortByScene';
import { VAR_FIELDS } from '../../../services/variables';
import { VAR_FIELDS, VAR_METADATA } from '../../../services/variables';
import React from 'react';
import { FIELDS_BREAKDOWN_GRID_TEMPLATE_COLUMNS, FieldsBreakdownScene } from './FieldsBreakdownScene';
import { AddFilterEvent } from './AddToFiltersButton';
Expand Down Expand Up @@ -158,13 +158,15 @@ export class FieldValuesBreakdownScene extends SceneObjectBase<FieldValuesBreakd

private build(query: LokiQuery) {
const groupByVariable = getFieldGroupByVariable(this);
const tagKey = String(groupByVariable.state.value);
const optionValue = String(groupByVariable.state.value);

const { sortBy, direction } = getSortByPreference('fields', DEFAULT_SORT_BY, 'desc');

const fieldsBreakdownScene = sceneGraph.getAncestor(this, FieldsBreakdownScene);
const getFilter = () => fieldsBreakdownScene.state.search.state.filter ?? '';

const parserForThisField = getParserForField(optionValue, this);

return new LayoutSwitcher({
options: [
{ value: 'single', label: 'Single' },
Expand All @@ -178,7 +180,7 @@ export class FieldValuesBreakdownScene extends SceneObjectBase<FieldValuesBreakd
children: [
new SceneFlexItem({
minHeight: 300,
body: PanelBuilders.timeseries().setTitle(tagKey).build(),
body: PanelBuilders.timeseries().setTitle(optionValue).build(),
}),
],
}),
Expand All @@ -198,7 +200,7 @@ export class FieldValuesBreakdownScene extends SceneObjectBase<FieldValuesBreakd
getLayoutChild: getFilterBreakdownValueScene(
getLabelValue,
query?.expr.includes('count_over_time') ? DrawStyle.Bars : DrawStyle.Line,
VAR_FIELDS,
parserForThisField === 'structuredMetadata' ? VAR_METADATA : VAR_FIELDS,
sceneGraph.getAncestor(this, FieldsBreakdownScene).state.sort
),
sortBy,
Expand All @@ -221,7 +223,7 @@ export class FieldValuesBreakdownScene extends SceneObjectBase<FieldValuesBreakd
getLayoutChild: getFilterBreakdownValueScene(
getLabelValue,
query?.expr.includes('count_over_time') ? DrawStyle.Bars : DrawStyle.Line,
VAR_FIELDS,
parserForThisField === 'structuredMetadata' ? VAR_METADATA : VAR_FIELDS,
sceneGraph.getAncestor(this, FieldsBreakdownScene).state.sort
),
sortBy,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { AdHocFiltersVariable } from '@grafana/scenes';
import { VAR_FIELDS } from '../../../services/variables';
import { VAR_FIELDS, VAR_METADATA } from '../../../services/variables';
import { createDataFrame, DataFrame, Field, FieldType } from '@grafana/data';
import {
DETECTED_FIELDS_CARDINALITY_NAME,
Expand Down Expand Up @@ -47,7 +47,7 @@ describe('buildFieldsQueryString', () => {

const result = buildFieldsQueryString('caller', filterVariable, detectedFieldsFrame);
expect(result).toEqual(
`sum by (caller) (count_over_time({\${filters}} \${levels} \${patterns} \${lineFilter} | logfmt | caller!="" \${fields} [$__auto]))`
`sum by (caller) (count_over_time({\${filters}} \${metadata} \${levels} \${patterns} \${lineFilter} | logfmt | caller!="" \${fields} [$__auto]))`
);
});
test('should build json-parser query', () => {
Expand Down Expand Up @@ -87,7 +87,7 @@ describe('buildFieldsQueryString', () => {

const result = buildFieldsQueryString('caller', filterVariable, detectedFieldsFrame);
expect(result).toEqual(
`sum by (caller) (count_over_time({\${filters}} \${levels} \${patterns} \${lineFilter} | json | drop __error__, __error_details__ | caller!="" \${fields} [$__auto]))`
`sum by (caller) (count_over_time({\${filters}} \${metadata} \${levels} \${patterns} \${lineFilter} | json | drop __error__, __error_details__ | caller!="" \${fields} [$__auto]))`
);
});
test('should build mixed-parser query', () => {
Expand Down Expand Up @@ -127,7 +127,47 @@ describe('buildFieldsQueryString', () => {

const result = buildFieldsQueryString('caller', filterVariable, detectedFieldsFrame);
expect(result).toEqual(
`sum by (caller) (count_over_time({\${filters}} \${levels} \${patterns} \${lineFilter} | json | logfmt | drop __error__, __error_details__ | caller!="" \${fields} [$__auto]))`
`sum by (caller) (count_over_time({\${filters}} \${metadata} \${levels} \${patterns} \${lineFilter} | json | logfmt | drop __error__, __error_details__ | caller!="" \${fields} [$__auto]))`
);
});
test('should build metadata query', () => {
const metadataVariable = new AdHocFiltersVariable({
name: VAR_METADATA,
filters: [],
});

const nameField: Field = {
name: DETECTED_FIELDS_NAME_FIELD,
type: FieldType.string,
values: ['caller'],
config: {},
};
const cardinalityField: Field = {
name: DETECTED_FIELDS_CARDINALITY_NAME,
type: FieldType.number,
values: [5],
config: {},
};
const parserField: Field = {
name: DETECTED_FIELDS_PARSER_NAME,
type: FieldType.string,
values: [''],
config: {},
};
const typeField: Field = {
name: DETECTED_FIELDS_TYPE_NAME,
type: FieldType.string,
values: ['string'],
config: {},
};

const detectedFieldsFrame: DataFrame = createDataFrame({
fields: [nameField, cardinalityField, parserField, typeField],
});

const result = buildFieldsQueryString('caller', metadataVariable, detectedFieldsFrame);
expect(result).toEqual(
`sum by (caller) (count_over_time({\${filters}} | caller!="" \${metadata} \${levels} \${patterns} \${lineFilter} \${fields} [$__auto]))`
);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ describe('buildLabelsQuery', () => {

const result = buildLabelsQuery({} as SceneObject, VAR_LABEL_GROUP_BY_EXPR, 'cluster');
expect(result).toMatchObject({
expr: `sum(count_over_time({\${filters} ,cluster != ""} \${levels} \${patterns} \${lineFilter} \${fields} [$__auto])) by (${VAR_LABEL_GROUP_BY_EXPR})`,
expr: `sum(count_over_time({\${filters} ,cluster != ""} \${metadata} \${levels} \${patterns} \${lineFilter} \${fields} [$__auto])) by (${VAR_LABEL_GROUP_BY_EXPR})`,
});
});
test('should build no-parser query with structured metadata filters', () => {
Expand All @@ -35,7 +35,7 @@ describe('buildLabelsQuery', () => {

const result = buildLabelsQuery({} as SceneObject, VAR_LABEL_GROUP_BY_EXPR, 'cluster');
expect(result).toMatchObject({
expr: `sum(count_over_time({\${filters} ,cluster != ""} \${levels} \${patterns} \${lineFilter} \${fields} [$__auto])) by (${VAR_LABEL_GROUP_BY_EXPR})`,
expr: `sum(count_over_time({\${filters} ,cluster != ""} \${metadata} \${levels} \${patterns} \${lineFilter} \${fields} [$__auto])) by (${VAR_LABEL_GROUP_BY_EXPR})`,
});
});
test('should build logfmt-parser query with structured metadata filters', () => {
Expand All @@ -58,7 +58,7 @@ describe('buildLabelsQuery', () => {

const result = buildLabelsQuery({} as SceneObject, VAR_LABEL_GROUP_BY_EXPR, 'cluster');
expect(result).toMatchObject({
expr: `sum(count_over_time({\${filters} ,cluster != ""} \${levels} \${patterns} \${lineFilter} | logfmt \${fields} [$__auto])) by (${VAR_LABEL_GROUP_BY_EXPR})`,
expr: `sum(count_over_time({\${filters} ,cluster != ""} \${metadata} \${levels} \${patterns} \${lineFilter} | logfmt \${fields} [$__auto])) by (${VAR_LABEL_GROUP_BY_EXPR})`,
});
});
test('should build json-parser query with structured metadata filters', () => {
Expand All @@ -81,7 +81,7 @@ describe('buildLabelsQuery', () => {

const result = buildLabelsQuery({} as SceneObject, VAR_LABEL_GROUP_BY_EXPR, 'cluster');
expect(result).toMatchObject({
expr: `sum(count_over_time({\${filters} ,cluster != ""} \${levels} \${patterns} \${lineFilter} | json | drop __error__, __error_details__ \${fields} [$__auto])) by (${VAR_LABEL_GROUP_BY_EXPR})`,
expr: `sum(count_over_time({\${filters} ,cluster != ""} \${metadata} \${levels} \${patterns} \${lineFilter} | json | drop __error__, __error_details__ \${fields} [$__auto])) by (${VAR_LABEL_GROUP_BY_EXPR})`,
});
});
test('should build mixed-parser query with structured metadata filters', () => {
Expand Down Expand Up @@ -112,7 +112,7 @@ describe('buildLabelsQuery', () => {

const result = buildLabelsQuery({} as SceneObject, VAR_LABEL_GROUP_BY_EXPR, 'cluster');
expect(result).toMatchObject({
expr: `sum(count_over_time({\${filters} ,cluster != ""} \${levels} \${patterns} \${lineFilter} | json | logfmt | drop __error__, __error_details__ \${fields} [$__auto])) by (${VAR_LABEL_GROUP_BY_EXPR})`,
expr: `sum(count_over_time({\${filters} ,cluster != ""} \${metadata} \${levels} \${patterns} \${lineFilter} | json | logfmt | drop __error__, __error_details__ \${fields} [$__auto])) by (${VAR_LABEL_GROUP_BY_EXPR})`,
});
});
});
49 changes: 35 additions & 14 deletions src/Components/ServiceScene/LogsPanelScene.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,10 @@ import React from 'react';
import { LogsListScene } from './LogsListScene';
import { LoadingPlaceholder } from '@grafana/ui';
import { addToFilters, FilterType } from './Breakdowns/AddToFiltersButton';
import { getFilterTypeFromLabelType, getLabelTypeFromFrame } from '../../services/fields';
import { VAR_FIELDS, VAR_LABELS, VAR_LEVELS } from '../../services/variables';
import { getVariableForLabel } from '../../services/fields';
import { VAR_FIELDS, VAR_LABELS, VAR_LEVELS, VAR_METADATA } from '../../services/variables';
import { reportAppInteraction, USER_EVENTS_ACTIONS, USER_EVENTS_PAGES } from '../../services/analytics';
import { getAdHocFiltersVariable } from '../../services/variableGetters';
import { LabelType } from '../../services/fieldsTypes';
import { getAdHocFiltersVariable, getValueFromFieldsFilter } from '../../services/variableGetters';

interface LogsPanelSceneState extends SceneObjectState {
body?: VizPanel;
Expand Down Expand Up @@ -134,14 +133,36 @@ export class LogsPanelScene extends SceneObjectBase<LogsPanelSceneState> {
const labels = getAdHocFiltersVariable(VAR_LABELS, this);
const fields = getAdHocFiltersVariable(VAR_FIELDS, this);
const levels = getAdHocFiltersVariable(VAR_LEVELS, this);
const metadata = getAdHocFiltersVariable(VAR_METADATA, this);

const hasKeyValueFilter = (filter: AdHocFiltersVariable | null) => {
return (
filter &&
filter.state.filters.findIndex(
(filter) => filter.operator === '=' && filter.key === key && filter.value === value
) >= 0
);
};

const hasKeyValueFilter = (filter: AdHocFiltersVariable | null) =>
filter &&
filter.state.filters.findIndex(
(filter) => filter.operator === '=' && filter.key === key && filter.value === value
) >= 0;
// Fields have json encoded values unlike the other variables, get the value for the matching filter and parse it before comparing
const hasKeyValueFilterField = (filter: AdHocFiltersVariable | null) => {
if (filter) {
const fieldFilter = filter.state.filters.find((filter) => filter.operator === '=' && filter.key === key);

return hasKeyValueFilter(labels) || hasKeyValueFilter(fields) || hasKeyValueFilter(levels);
if (fieldFilter) {
const fieldValue = getValueFromFieldsFilter(fieldFilter, key);
return fieldValue.value === value;
}
}
return false;
};

return (
hasKeyValueFilter(labels) ||
hasKeyValueFilterField(fields) ||
hasKeyValueFilter(levels) ||
hasKeyValueFilter(metadata)
);
};

private handleFilterStringClick = (value: string) => {
Expand All @@ -160,15 +181,15 @@ export class LogsPanelScene extends SceneObjectBase<LogsPanelSceneState> {
};

private handleLabelFilter(key: string, value: string, frame: DataFrame | undefined, operator: FilterType) {
const labelType = frame ? getLabelTypeFromFrame(key, frame) : LabelType.Parsed;
const variableName = getFilterTypeFromLabelType(labelType, key, value);
addToFilters(key, value, operator, this, variableName);
const variableType = getVariableForLabel(frame, key, this);

addToFilters(key, value, operator, this, variableType);

reportAppInteraction(
USER_EVENTS_PAGES.service_details,
USER_EVENTS_ACTIONS.service_details.logs_detail_filter_applied,
{
filterType: variableName,
filterType: variableType,
key,
action: operator,
}
Expand Down
8 changes: 2 additions & 6 deletions src/Components/ServiceScene/LogsTableScene.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ import { css } from '@emotion/css';
import { addAdHocFilter } from './Breakdowns/AddToFiltersButton';
import { areArraysEqual } from '../../services/comparison';
import { getLogsPanelFrame } from './ServiceScene';
import { getFilterTypeFromLabelType, getLabelTypeFromFrame } from '../../services/fields';
import { LabelType } from '../../services/fieldsTypes';
import { getVariableForLabel } from '../../services/fields';

export class LogsTableScene extends SceneObjectBase {
public static Component = ({ model }: SceneComponentProps<LogsTableScene>) => {
Expand All @@ -28,10 +27,7 @@ export class LogsTableScene extends SceneObjectBase {

// Define callback function to update filters in react
const addFilter = (filter: AdHocVariableFilter) => {
const { key, value } = filter;

const labelType = dataFrame ? getLabelTypeFromFrame(key, dataFrame) : LabelType.Parsed;
const variableType = getFilterTypeFromLabelType(labelType, key, value);
const variableType = getVariableForLabel(dataFrame, filter.key, model);
addAdHocFilter(filter, parentModel, variableType);
};

Expand Down
9 changes: 5 additions & 4 deletions src/services/expressions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
VAR_FIELDS_EXPR,
VAR_LABELS_EXPR,
VAR_LINE_FILTER_EXPR,
VAR_METADATA_EXPR,
VAR_PATTERNS_EXPR,
} from './variables';
import { SceneObject } from '@grafana/scenes';
Expand Down Expand Up @@ -36,14 +37,14 @@ export function getTimeSeriesExpr(sceneRef: SceneObject, streamSelectorName: str
// if we have fields, we also need to add parsers
if (fieldFilters.length) {
if (parser === 'mixed') {
return `sum(count_over_time({${VAR_LABELS_EXPR}} ${metadataExpressionToAdd} ${VAR_LINE_FILTER_EXPR} ${VAR_PATTERNS_EXPR} ${MIXED_FORMAT_EXPR} ${VAR_FIELDS_EXPR} [$__auto])) by (${streamSelectorName})`;
return `sum(count_over_time({${VAR_LABELS_EXPR}} ${metadataExpressionToAdd} ${VAR_METADATA_EXPR} ${VAR_LINE_FILTER_EXPR} ${VAR_PATTERNS_EXPR} ${MIXED_FORMAT_EXPR} ${VAR_FIELDS_EXPR} [$__auto])) by (${streamSelectorName})`;
}
if (parser === 'json') {
return `sum(count_over_time({${VAR_LABELS_EXPR}} ${metadataExpressionToAdd} ${VAR_LINE_FILTER_EXPR} ${VAR_PATTERNS_EXPR} ${JSON_FORMAT_EXPR} ${VAR_FIELDS_EXPR} [$__auto])) by (${streamSelectorName})`;
return `sum(count_over_time({${VAR_LABELS_EXPR}} ${metadataExpressionToAdd} ${VAR_METADATA_EXPR} ${VAR_LINE_FILTER_EXPR} ${VAR_PATTERNS_EXPR} ${JSON_FORMAT_EXPR} ${VAR_FIELDS_EXPR} [$__auto])) by (${streamSelectorName})`;
}
if (parser === 'logfmt') {
return `sum(count_over_time({${VAR_LABELS_EXPR}} ${metadataExpressionToAdd} ${VAR_LINE_FILTER_EXPR} ${VAR_PATTERNS_EXPR} ${LOGS_FORMAT_EXPR} ${VAR_FIELDS_EXPR} [$__auto])) by (${streamSelectorName})`;
return `sum(count_over_time({${VAR_LABELS_EXPR}} ${metadataExpressionToAdd} ${VAR_METADATA_EXPR} ${VAR_LINE_FILTER_EXPR} ${VAR_PATTERNS_EXPR} ${LOGS_FORMAT_EXPR} ${VAR_FIELDS_EXPR} [$__auto])) by (${streamSelectorName})`;
}
}
return `sum(count_over_time({${VAR_LABELS_EXPR}} ${metadataExpressionToAdd} ${VAR_LINE_FILTER_EXPR} ${VAR_PATTERNS_EXPR} ${VAR_FIELDS_EXPR} [$__auto])) by (${streamSelectorName})`;
return `sum(count_over_time({${VAR_LABELS_EXPR}} ${metadataExpressionToAdd} ${VAR_METADATA_EXPR} ${VAR_LINE_FILTER_EXPR} ${VAR_PATTERNS_EXPR} ${VAR_FIELDS_EXPR} [$__auto])) by (${streamSelectorName})`;
}
Loading
Loading