diff --git a/.betterer.results b/.betterer.results index e3ff6cb8ab5..fd96ef7a3b8 100644 --- a/.betterer.results +++ b/.betterer.results @@ -1,18 +1,10 @@ // BETTERER RESULTS V2. -// +// // If this file contains merge conflicts, use `betterer merge` to automatically resolve them: // https://phenomnomnominal.github.io/betterer/docs/results-file/#merge // exports[`better eslint`] = { value: `{ - "e2e/benchmarks/live/4-20hz-panels.spec.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], - "e2e/panels-suite/panelEdit_queries.spec.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "packages/grafana-data/src/dataframe/ArrayDataFrame.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -113,15 +105,14 @@ exports[`better eslint`] = { ], "packages/grafana-data/src/datetime/moment_wrapper.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Do not use any type assertions.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], [0, 0, 0, "Do not use any type assertions.", "3"], [0, 0, 0, "Do not use any type assertions.", "4"], [0, 0, 0, "Do not use any type assertions.", "5"], [0, 0, 0, "Do not use any type assertions.", "6"], [0, 0, 0, "Do not use any type assertions.", "7"], - [0, 0, 0, "Do not use any type assertions.", "8"], - [0, 0, 0, "Do not use any type assertions.", "9"] + [0, 0, 0, "Do not use any type assertions.", "8"] ], "packages/grafana-data/src/datetime/parser.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -334,7 +325,8 @@ exports[`better eslint`] = { ], "packages/grafana-data/src/types/app.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] + [0, 0, 0, "Do not use any type assertions.", "1"], + [0, 0, 0, "Do not use any type assertions.", "2"] ], "packages/grafana-data/src/types/config.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -397,9 +389,6 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "28"], [0, 0, 0, "Unexpected any. Specify a different type.", "29"] ], - "packages/grafana-data/src/types/displayValue.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "packages/grafana-data/src/types/explore.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] @@ -597,26 +586,18 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "87"] ], "packages/grafana-data/src/utils/Registry.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "packages/grafana-data/src/utils/arrayUtils.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "packages/grafana-data/src/utils/csv.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Do not use any type assertions.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"] + [0, 0, 0, "Do not use any type assertions.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"] ], "packages/grafana-data/src/utils/dataLinks.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -629,16 +610,11 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "4"] ], "packages/grafana-data/src/utils/fieldParser.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "packages/grafana-data/src/utils/flotPairs.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "packages/grafana-data/src/utils/labels.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] - ], "packages/grafana-data/src/utils/location.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -647,24 +623,12 @@ exports[`better eslint`] = { ], "packages/grafana-data/src/utils/logs.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"] - ], - "packages/grafana-data/src/utils/makeClassES5Compatible.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] + [0, 0, 0, "Do not use any type assertions.", "1"] ], "packages/grafana-data/src/utils/testdata/testTheme.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] ], - "packages/grafana-data/src/utils/tests/mockTransformationsRegistry.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "packages/grafana-data/src/utils/url.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -690,16 +654,6 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "9"], [0, 0, 0, "Unexpected any. Specify a different type.", "10"] ], - "packages/grafana-data/src/valueFormats/arithmeticFormatters.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], - "packages/grafana-data/src/valueFormats/dateTimeFormatters.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], - "packages/grafana-data/src/valueFormats/valueFormats.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] - ], "packages/grafana-data/src/vector/AppendedVectors.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], @@ -725,8 +679,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "packages/grafana-data/test/__mocks__/pluginMocks.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "packages/grafana-e2e/cypress/plugins/benchmark/formatting.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -814,7 +767,8 @@ exports[`better eslint`] = { "packages/grafana-runtime/src/config.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Do not use any type assertions.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], "packages/grafana-runtime/src/services/AngularLoader.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -1064,8 +1018,7 @@ exports[`better eslint`] = { [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"] ], "packages/grafana-ui/src/components/Dropdown/ButtonSelect.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "packages/grafana-ui/src/components/Forms/FieldArray.story.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -1161,6 +1114,9 @@ exports[`better eslint`] = { "packages/grafana-ui/src/components/Logs/logParser.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], + "packages/grafana-ui/src/components/MatchersUI/FieldValueMatcher.tsx:5381": [ + [0, 0, 0, "Do not use any type assertions.", "0"] + ], "packages/grafana-ui/src/components/MatchersUI/fieldMatchersUI.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -2212,13 +2168,6 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "85"], [0, 0, 0, "Unexpected any. Specify a different type.", "86"] ], - "public/app/core/components/OptionsUI/string.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] - ], - "public/app/core/components/OptionsUI/strings.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/core/components/PageNew/SectionNavItem.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] ], @@ -2235,11 +2184,6 @@ exports[`better eslint`] = { "public/app/core/components/Select/FolderPicker.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] ], - "public/app/core/components/Select/ReadonlyFolderPicker/api.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "public/app/core/components/TagFilter/TagFilter.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -2251,23 +2195,10 @@ exports[`better eslint`] = { ], "public/app/core/components/TagFilter/TagOption.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/core/components/TimelineChart/TimelineChart.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], - "public/app/core/components/TimelineChart/timeline.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Do not use any type assertions.", "3"], - [0, 0, 0, "Do not use any type assertions.", "4"] - ], - "public/app/core/components/TimelineChart/utils.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/core/components/connectWithCleanUp.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -2276,13 +2207,6 @@ exports[`better eslint`] = { "public/app/core/components/modals/AngularModalProxy.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/core/history/richHistoryLocalStorageUtils.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/app/core/logsModel.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] - ], "public/app/core/navigation/GrafanaRoute.test.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] @@ -2293,37 +2217,18 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], - "public/app/core/navigation/patch/interceptLinkClicks.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"] - ], "public/app/core/navigation/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/core/profiler.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/core/reducers/root.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/core/services/FetchQueue.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], - "public/app/core/services/PreferencesService.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/core/services/ResponseQueue.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/core/services/__mocks__/search_srv.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/core/services/backend_srv.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -2352,9 +2257,7 @@ exports[`better eslint`] = { ], "public/app/core/services/echo/backends/analytics/ApplicationInsightsBackend.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] + [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/core/services/echo/backends/analytics/RudderstackBackend.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -2466,9 +2369,6 @@ exports[`better eslint`] = { "public/app/core/utils/richHistory.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/core/utils/richHistory.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/core/utils/ticks.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], @@ -2478,9 +2378,7 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "5"] ], "public/app/core/utils/tracing.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/admin/OrgRolePicker.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] @@ -2691,9 +2589,6 @@ exports[`better eslint`] = { "public/app/features/alerting/unified/components/rules/RuleDetailsDataSources.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/alerting/unified/components/rules/RulesFilter.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/features/alerting/unified/components/silences/SilencesEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -2848,16 +2743,10 @@ exports[`better eslint`] = { ], "public/app/features/dashboard/components/AddPanelWidget/AddPanelWidget.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "7"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "8"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "9"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "10"] + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"], + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"], + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "3"], + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "4"] ], "public/app/features/dashboard/components/AnnotationSettings/AnnotationSettingsEdit.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] @@ -2920,19 +2809,9 @@ exports[`better eslint`] = { "public/app/features/dashboard/components/HelpWizard/randomizer.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/dashboard/components/Inspector/PanelInspectActions.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "public/app/features/dashboard/components/Inspector/PanelInspector.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/dashboard/components/Inspector/hooks.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "public/app/features/dashboard/components/PanelEditor/OptionsPane.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] ], @@ -2942,19 +2821,16 @@ exports[`better eslint`] = { ], "public/app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"] ], "public/app/features/dashboard/components/PanelEditor/OverrideCategoryTitle.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/dashboard/components/PanelEditor/PanelEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"], [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "3"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"] + [0, 0, 0, "Do not use any type assertions.", "3"] ], "public/app/features/dashboard/components/PanelEditor/VisualizationButton.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], @@ -2964,21 +2840,17 @@ exports[`better eslint`] = { [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] ], "public/app/features/dashboard/components/PanelEditor/getFieldOverrideElements.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/dashboard/components/PanelEditor/getVisualizationOptions.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"] + [0, 0, 0, "Unexpected any. Specify a different type.", "4"] ], "public/app/features/dashboard/components/PanelEditor/types.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/dashboard/components/PanelEditor/utils.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -2988,9 +2860,6 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "4"], [0, 0, 0, "Unexpected any. Specify a different type.", "5"] ], - "public/app/features/dashboard/components/RepeatRowSelect/RepeatRowSelect.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/dashboard/components/SaveDashboard/SaveDashboardButton.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"] @@ -3023,21 +2892,9 @@ exports[`better eslint`] = { "public/app/features/dashboard/components/ShareModal/ShareExport.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/features/dashboard/components/ShareModal/ShareLink.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/app/features/dashboard/components/ShareModal/ShareModal.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/dashboard/components/ShareModal/ShareSnapshot.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/features/dashboard/components/ShareModal/utils.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] - ], "public/app/features/dashboard/components/TransformationsEditor/TransformationEditor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"], @@ -3068,8 +2925,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"] + [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], "public/app/features/dashboard/containers/DashboardPage.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], @@ -3348,9 +3204,8 @@ exports[`better eslint`] = { [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] ], "public/app/features/datasources/components/ButtonRow.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"], - [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"] + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"], + [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"] ], "public/app/features/datasources/components/DataSourceReadOnlyMessage.tsx:5381": [ [0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"] @@ -3385,55 +3240,26 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "1"] ], - "public/app/features/dimensions/color.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/app/features/dimensions/editors/ColorDimensionEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/features/dimensions/editors/FolderPickerTab.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/dimensions/editors/IconSelector.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/features/dimensions/editors/ResourceDimensionEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/features/dimensions/editors/ResourcePicker.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/app/features/dimensions/editors/ScalarDimensionEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/app/features/dimensions/editors/ScaleDimensionEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/dimensions/editors/TextDimensionEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"] + [0, 0, 0, "Unexpected any. Specify a different type.", "3"] ], "public/app/features/dimensions/editors/ThresholdsEditor/ThresholdsEditor.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/dimensions/editors/ValueMappingsEditor/ValueMappingsEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/features/dimensions/scale.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/features/dimensions/text.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], "public/app/features/dimensions/types.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] @@ -3454,17 +3280,12 @@ exports[`better eslint`] = { [0, 0, 0, "Do not use any type assertions.", "1"] ], "public/app/features/explore/LogsContainer.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/explore/LogsMetaRow.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/explore/QueryRows.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], - "public/app/features/explore/RichHistory/RichHistory.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/explore/TraceView/TraceView.tsx:5381": [ @@ -3475,34 +3296,12 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "4"], [0, 0, 0, "Do not use any type assertions.", "5"] ], - "public/app/features/explore/TraceView/components/ScrollManager.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Do not use any type assertions.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], - "public/app/features/explore/TraceView/components/TracePageHeader/SpanGraph/Scrubber.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], - "public/app/features/explore/TraceView/components/TracePageHeader/SpanGraph/render-into-canvas.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/features/explore/TraceView/components/TraceTimelineViewer/ListView/index.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanBar.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], - "public/app/features/explore/TraceView/components/TraceTimelineViewer/utils.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/explore/TraceView/components/common/BreakableText.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/features/explore/TraceView/components/constants/index.tsx:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"] - ], "public/app/features/explore/TraceView/components/demo/trace-generators.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -3678,9 +3477,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/features/live/index.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] + [0, 0, 0, "Do not use any type assertions.", "0"] ], "public/app/features/live/pages/AddNewRule.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -4044,11 +3841,6 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "10"], [0, 0, 0, "Unexpected any. Specify a different type.", "11"] ], - "public/app/features/runtime/init.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"] - ], "public/app/features/sandbox/TestStuffPage.tsx:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], @@ -4163,8 +3955,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "2"] ], "public/app/features/transformers/FilterByValueTransformer/ValueMatchers/NoopMatcherEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/transformers/FilterByValueTransformer/ValueMatchers/RangeMatcherEditor.tsx:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] @@ -4182,9 +3973,6 @@ exports[`better eslint`] = { "public/app/features/transformers/FilterByValueTransformer/ValueMatchers/valueMatchersUI.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/features/transformers/calculateHeatmap/editor/AxisEditor.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/features/transformers/calculateHeatmap/editor/helper.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -4768,11 +4556,6 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/plugins/datasource/cloudwatch/components/QueryEditor.test.tsx:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "public/app/plugins/datasource/cloudwatch/datasource.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -5226,19 +5009,19 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/plugins/datasource/influxdb/datasource.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], [0, 0, 0, "Unexpected any. Specify a different type.", "2"], [0, 0, 0, "Unexpected any. Specify a different type.", "3"], [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Do not use any type assertions.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], + [0, 0, 0, "Unexpected any. Specify a different type.", "5"], + [0, 0, 0, "Do not use any type assertions.", "6"], [0, 0, 0, "Unexpected any. Specify a different type.", "7"], [0, 0, 0, "Unexpected any. Specify a different type.", "8"], [0, 0, 0, "Unexpected any. Specify a different type.", "9"], [0, 0, 0, "Unexpected any. Specify a different type.", "10"], [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Do not use any type assertions.", "12"], + [0, 0, 0, "Unexpected any. Specify a different type.", "12"], [0, 0, 0, "Unexpected any. Specify a different type.", "13"], [0, 0, 0, "Unexpected any. Specify a different type.", "14"], [0, 0, 0, "Unexpected any. Specify a different type.", "15"], @@ -5248,13 +5031,18 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "19"], [0, 0, 0, "Unexpected any. Specify a different type.", "20"], [0, 0, 0, "Unexpected any. Specify a different type.", "21"], - [0, 0, 0, "Unexpected any. Specify a different type.", "22"], + [0, 0, 0, "Do not use any type assertions.", "22"], [0, 0, 0, "Unexpected any. Specify a different type.", "23"], [0, 0, 0, "Unexpected any. Specify a different type.", "24"], [0, 0, 0, "Unexpected any. Specify a different type.", "25"], [0, 0, 0, "Unexpected any. Specify a different type.", "26"], [0, 0, 0, "Unexpected any. Specify a different type.", "27"], - [0, 0, 0, "Unexpected any. Specify a different type.", "28"] + [0, 0, 0, "Unexpected any. Specify a different type.", "28"], + [0, 0, 0, "Unexpected any. Specify a different type.", "29"], + [0, 0, 0, "Unexpected any. Specify a different type.", "30"], + [0, 0, 0, "Unexpected any. Specify a different type.", "31"], + [0, 0, 0, "Unexpected any. Specify a different type.", "32"], + [0, 0, 0, "Unexpected any. Specify a different type.", "33"] ], "public/app/plugins/datasource/influxdb/influx_query_model.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], @@ -5279,6 +5067,27 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "19"], [0, 0, 0, "Unexpected any. Specify a different type.", "20"] ], + "public/app/plugins/datasource/influxdb/influx_series.ts:5381": [ + [0, 0, 0, "Unexpected any. Specify a different type.", "0"], + [0, 0, 0, "Unexpected any. Specify a different type.", "1"], + [0, 0, 0, "Unexpected any. Specify a different type.", "2"], + [0, 0, 0, "Unexpected any. Specify a different type.", "3"], + [0, 0, 0, "Unexpected any. Specify a different type.", "4"], + [0, 0, 0, "Unexpected any. Specify a different type.", "5"], + [0, 0, 0, "Unexpected any. Specify a different type.", "6"], + [0, 0, 0, "Unexpected any. Specify a different type.", "7"], + [0, 0, 0, "Unexpected any. Specify a different type.", "8"], + [0, 0, 0, "Unexpected any. Specify a different type.", "9"], + [0, 0, 0, "Unexpected any. Specify a different type.", "10"], + [0, 0, 0, "Unexpected any. Specify a different type.", "11"], + [0, 0, 0, "Unexpected any. Specify a different type.", "12"], + [0, 0, 0, "Unexpected any. Specify a different type.", "13"], + [0, 0, 0, "Unexpected any. Specify a different type.", "14"], + [0, 0, 0, "Unexpected any. Specify a different type.", "15"], + [0, 0, 0, "Unexpected any. Specify a different type.", "16"], + [0, 0, 0, "Unexpected any. Specify a different type.", "17"], + [0, 0, 0, "Unexpected any. Specify a different type.", "18"] + ], "public/app/plugins/datasource/influxdb/migrations.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -5412,12 +5221,6 @@ exports[`better eslint`] = { "public/app/plugins/datasource/loki/getDerivedFields.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/plugins/datasource/loki/querySplitting.ts:5381": [ - [0, 0, 0, "Do not use any type assertions.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Do not use any type assertions.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"] - ], "public/app/plugins/datasource/loki/querybuilder/binaryScalarOperations.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], @@ -7022,9 +6825,6 @@ exports[`no undocumented stories`] = { "packages/grafana-ui/src/components/PageLayout/PageToolbar.story.tsx:5381": [ [0, 0, 0, "No undocumented stories are allowed, please add an .mdx file with some documentation", "5381"] ], - "packages/grafana-ui/src/components/PanelChrome/PanelChrome.story.tsx:5381": [ - [0, 0, 0, "No undocumented stories are allowed, please add an .mdx file with some documentation", "5381"] - ], "packages/grafana-ui/src/components/QueryField/QueryField.story.tsx:5381": [ [0, 0, 0, "No undocumented stories are allowed, please add an .mdx file with some documentation", "5381"] ], diff --git a/.bingo/Variables.mk b/.bingo/Variables.mk index 8a5376ba771..2e45d61a756 100644 --- a/.bingo/Variables.mk +++ b/.bingo/Variables.mk @@ -47,12 +47,6 @@ $(JB): $(BINGO_DIR)/jb.mod @echo "(re)installing $(GOBIN)/jb-v0.5.1" @cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=jb.mod -o=$(GOBIN)/jb-v0.5.1 "github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb" -KIND := $(GOBIN)/kind-v0.17.0 -$(KIND): $(BINGO_DIR)/kind.mod - @# Install binary/ries using Go 1.14+ build command. This is using bwplotka/bingo-controlled, separate go module with pinned dependencies. - @echo "(re)installing $(GOBIN)/kind-v0.17.0" - @cd $(BINGO_DIR) && GOWORK=off $(GO) build -mod=mod -modfile=kind.mod -o=$(GOBIN)/kind-v0.17.0 "sigs.k8s.io/kind" - SWAGGER := $(GOBIN)/swagger-v0.30.2 $(SWAGGER): $(BINGO_DIR)/swagger.mod @# Install binary/ries using Go 1.14+ build command. This is using bwplotka/bingo-controlled, separate go module with pinned dependencies. diff --git a/.bingo/kind.mod b/.bingo/kind.mod deleted file mode 100644 index 74bb39e21b7..00000000000 --- a/.bingo/kind.mod +++ /dev/null @@ -1,5 +0,0 @@ -module _ // Auto generated by https://github.com/bwplotka/bingo. DO NOT EDIT - -go 1.20 - -require sigs.k8s.io/kind v0.17.0 diff --git a/.bingo/kind.sum b/.bingo/kind.sum deleted file mode 100644 index 5f579c0091c..00000000000 --- a/.bingo/kind.sum +++ /dev/null @@ -1,39 +0,0 @@ -github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU= -github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVKJUX0= -github.com/alessio/shellescape v1.4.1/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= -github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/google/safetext v0.0.0-20220905092116-b49f7bc46da2 h1:SJ+NtwL6QaZ21U+IrK7d0gGgpjGGvd2kz+FzTHVzdqI= -github.com/google/safetext v0.0.0-20220905092116-b49f7bc46da2/go.mod h1:Tv1PlzqC9t8wNnpPdctvtSUOPUUg4SHeE6vR1Ir2hmg= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= -github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -sigs.k8s.io/kind v0.17.0 h1:CScmGz/wX66puA06Gj8OZb76Wmk7JIjgWf5JDvY7msM= -sigs.k8s.io/kind v0.17.0/go.mod h1:Qqp8AiwOlMZmJWs37Hgs31xcbiYXjtXlRBSftcnZXQk= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/.bingo/variables.env b/.bingo/variables.env index 5bc16af229e..a1dde2f98e8 100644 --- a/.bingo/variables.env +++ b/.bingo/variables.env @@ -18,8 +18,6 @@ GOLANGCI_LINT="${GOBIN}/golangci-lint-v1.51.2" JB="${GOBIN}/jb-v0.5.1" -KIND="${GOBIN}/kind-v0.17.0" - SWAGGER="${GOBIN}/swagger-v0.30.2" WIRE="${GOBIN}/wire-v0.5.0" diff --git a/.drone.yml b/.drone.yml index 13024ac0f6b..e9689a86ffa 100644 --- a/.drone.yml +++ b/.drone.yml @@ -21,7 +21,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -77,7 +77,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -132,7 +132,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -481,7 +481,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -537,8 +537,6 @@ steps: - git tag $${TEST_TAG} && git push https://$${GITHUB_TOKEN}@github.com/grafana/grafana.git $${TEST_TAG} environment: - DOWNSTREAM_REPO: - from_secret: downstream GITHUB_TOKEN: from_secret: github_token_pr TEST_TAG: v0.0.0-test @@ -834,7 +832,7 @@ steps: name: clone-enterprise - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -951,7 +949,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -1068,7 +1066,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -1145,7 +1143,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -1395,7 +1393,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -1826,7 +1824,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -1942,7 +1940,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/windows/grabpl.exe -OutFile grabpl.exe image: grafana/ci-wix:0.1.1 name: windows-init @@ -2121,7 +2119,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2427,7 +2425,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2574,7 +2572,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2680,7 +2678,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/windows/grabpl.exe -OutFile grabpl.exe image: grafana/ci-wix:0.1.1 name: windows-init @@ -2737,7 +2735,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3063,7 +3061,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3128,7 +3126,7 @@ steps: name: clone-enterprise - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3253,7 +3251,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3408,7 +3406,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/windows/grabpl.exe -OutFile grabpl.exe - git clone "https://$$env:GITHUB_TOKEN@github.com/grafana/grafana-enterprise.git" - cd grafana-enterprise @@ -3485,7 +3483,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3735,7 +3733,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3986,7 +3984,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -4082,7 +4080,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -4161,7 +4159,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -4600,7 +4598,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -4697,7 +4695,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -4791,7 +4789,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -4869,7 +4867,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -5148,7 +5146,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -5289,7 +5287,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -5392,7 +5390,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/windows/grabpl.exe -OutFile grabpl.exe image: grafana/ci-wix:0.1.1 name: windows-init @@ -5442,7 +5440,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -5770,7 +5768,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -5832,7 +5830,7 @@ steps: name: clone-enterprise - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -5953,7 +5951,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -6104,7 +6102,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/windows/grabpl.exe -OutFile grabpl.exe - git clone "https://$$env:GITHUB_TOKEN@github.com/grafana/grafana-enterprise.git" - cd grafana-enterprise @@ -6174,7 +6172,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.21/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v3.0.30/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -6659,7 +6657,37 @@ get: kind: secret name: aws_secret_access_key --- +get: + name: bucket + path: infra/data/ci/grafana-release-eng/security-bucket +kind: secret +name: security_dest_bucket +--- +get: + name: static_asset_editions + path: infra/data/ci/grafana-release-eng/artifact-publishing +kind: secret +name: static_asset_editions +--- +get: + name: security_prefix + path: infra/data/ci/grafana-release-eng/enterprise2 +kind: secret +name: enterprise2_security_prefix +--- +get: + name: cdn_path + path: infra/data/ci/grafana-release-eng/enterprise2 +kind: secret +name: enterprise2-cdn-path +--- +get: + name: security_prefix + path: infra/data/ci/grafana-release-eng/enterprise2 +kind: secret +name: enterprise2_security_prefix +--- kind: signature -hmac: f7d8c2ffc5017c41f66d2cceda20bbfc94afc46a5669984a83a23419f58d3dee +hmac: c97e54e16b8399bef42b71fda9826579f274c537ced6124682cbd29a986332c9 ... diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index bf788f4a3c5..9b537f631e2 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -81,6 +81,7 @@ /pkg/infra/metrics/ @grafana/backend-platform /pkg/infra/network/ @grafana/backend-platform /pkg/infra/process/ @grafana/backend-platform +/pkg/infra/proxy/ @grafana/hosted-grafana-team /pkg/infra/remotecache/ @grafana/backend-platform /pkg/infra/serverlock/ @grafana/backend-platform /pkg/infra/slugify/ @grafana/backend-platform @@ -93,7 +94,6 @@ /pkg/services/annotations/ @grafana/backend-platform /pkg/services/apikey/ @grafana/backend-platform /pkg/services/cleanup/ @grafana/backend-platform -/pkg/services/comments/ @grafana/backend-platform /pkg/services/contexthandler/ @grafana/backend-platform /pkg/services/correlations/ @grafana/backend-platform /pkg/services/dashboardimport/ @grafana/backend-platform @@ -111,7 +111,6 @@ /pkg/services/org/ @grafana/backend-platform /pkg/services/playlist/ @grafana/backend-platform /pkg/services/plugindashboards/ @grafana/backend-platform -/pkg/services/pluginsettings/ @grafana/backend-platform /pkg/services/preference/ @grafana/backend-platform /pkg/services/provisioning/ @grafana/backend-platform /pkg/services/publicdashboards/ @grafana/dashboards-squad @@ -158,9 +157,6 @@ /devenv/docker/blocks/loki* @grafana/observability-logs /devenv/docker/blocks/elastic* @grafana/observability-logs -# Performance tests -/devenv/docker/loadtest-ts/ @grafana/grafana-app-platform-squad - /devenv/bulk-dashboards/ @grafana/dashboards-squad /devenv/bulk_alerting_dashboards/ @grafana/alerting-squad-backend /devenv/create_docker_compose.sh @grafana/backend-platform @@ -222,14 +218,14 @@ # Continuous Integration -.drone.yml @grafana/grafana-release-eng -.drone.star @grafana/grafana-release-eng -/scripts/drone/ @grafana/grafana-release-eng -/pkg/build/ @grafana/grafana-release-eng -/.dockerignore @grafana/grafana-release-eng -/Dockerfile @grafana/grafana-release-eng -/Makefile @grafana/grafana-release-eng -/scripts/build/ @grafana/grafana-release-eng +.drone.yml @grafana/grafana-delivery +.drone.star @grafana/grafana-delivery +/scripts/drone/ @grafana/grafana-delivery +/pkg/build/ @grafana/grafana-delivery +/.dockerignore @grafana/grafana-delivery +/Dockerfile @grafana/grafana-delivery +/Makefile @grafana/grafana-delivery +/scripts/build/ @grafana/grafana-delivery # OSS Plugin Partnerships backend code /pkg/tsdb/cloudwatch/ @grafana/aws-plugins @@ -263,6 +259,7 @@ /pkg/infra/filestorage/ @grafana/grafana-app-platform-squad /pkg/util/converter/ @grafana/grafana-app-platform-squad /pkg/modules/ @grafana/grafana-app-platform-squad +/pkg/kindsysreport/ @grafana/grafana-app-platform-squad # Alerting /pkg/services/ngalert/ @grafana/alerting-squad-backend @@ -284,6 +281,7 @@ /pkg/services/pluginsintegration/ @grafana/plugins-platform-backend /pkg/plugins/pfs/ @grafana/plugins-platform-backend @grafana/grafana-as-code /pkg/tsdb/testdatasource/ @grafana/plugins-platform-backend +/pkg/services/pluginsintegration/pluginsettings/ @grafana/plugins-platform-backend # Dashboard previews / crawler (behind feature flag) /pkg/services/thumbs/ @grafana/grafana-app-platform-squad @@ -350,11 +348,10 @@ lerna.json @grafana/frontend-ops /public/app/features/api-keys/ @grafana/user-essentials /public/app/features/canvas/ @grafana/dataviz-squad /public/app/features/commandPalette/ @grafana/user-essentials -/public/app/features/comments/ @grafana/dataviz-squad /public/app/features/connections/ @grafana/plugins-platform-frontend /public/app/features/correlations/ @grafana/explore-squad /public/app/features/dashboard/ @grafana/dashboards-squad -/public/app/features/datasources/ @grafana/user-essentials +/public/app/features/datasources/ @grafana/plugins-platform-frontend /public/app/features/dimensions/ @grafana/dataviz-squad /public/app/features/dataframe-import/ @grafana/grafana-bi-squad /public/app/features/datasource-drawer/ @grafana/grafana-bi-squad @@ -391,10 +388,10 @@ lerna.json @grafana/frontend-ops /public/app/plugins/panel/alertlist/ @grafana/alerting-squad-frontend /public/app/plugins/panel/annolist/ @grafana/user-essentials /public/app/plugins/panel/barchart/ @grafana/dataviz-squad -/public/app/plugins/panel/bargauge/ @grafana/dataviz-squad +/public/app/plugins/panel/bargauge/ @grafana/grafana-bi-squad /public/app/plugins/panel/dashlist/ @grafana/user-essentials /public/app/plugins/panel/debug/ @ryantxu -/public/app/plugins/panel/gauge/ @grafana/dataviz-squad +/public/app/plugins/panel/gauge/ @grafana/grafana-bi-squad /public/app/plugins/panel/gettingstarted/ @grafana/user-essentials /public/app/plugins/panel/graph/ @grafana/dataviz-squad /public/app/plugins/panel/heatmap/ @grafana/dataviz-squad @@ -403,7 +400,7 @@ lerna.json @grafana/frontend-ops /public/app/plugins/panel/nodeGraph/ @grafana/observability-traces-and-profiling /public/app/plugins/panel/traces/ @grafana/observability-traces-and-profiling /public/app/plugins/panel/flamegraph/ @grafana/observability-traces-and-profiling -/public/app/plugins/panel/piechart/ @grafana/dataviz-squad +/public/app/plugins/panel/piechart/ @grafana/grafana-bi-squad /public/app/plugins/panel/state-timeline/ @grafana/dataviz-squad /public/app/plugins/panel/status-history/ @grafana/dataviz-squad /public/app/plugins/panel/table/ @grafana/grafana-bi-squad @@ -415,7 +412,7 @@ lerna.json @grafana/frontend-ops /public/app/plugins/panel/icon/ @grafana/dataviz-squad /public/app/plugins/panel/live/ @grafana/grafana-app-platform-squad /public/app/plugins/panel/news/ @grafana/user-essentials -/public/app/plugins/panel/stat/ @grafana/dataviz-squad +/public/app/plugins/panel/stat/ @grafana/grafana-bi-squad /public/app/plugins/panel/text/ @grafana/user-essentials /public/app/plugins/panel/welcome/ @grafana/user-essentials /public/app/plugins/panel/xychart/ @grafana/dataviz-squad @@ -456,25 +453,25 @@ lerna.json @grafana/frontend-ops /scripts/benchmark-access-control.sh @grafana/grafana-authnz-team /scripts/check-breaking-changes.sh @grafana/plugins-platform-frontend -/scripts/ci-* @grafana/grafana-release-eng -/scripts/circle-* @grafana/grafana-release-eng +/scripts/ci-* @grafana/grafana-delivery +/scripts/circle-* @grafana/grafana-delivery /scripts/ci-frontend-metrics.sh @grafana/user-essentials @grafana/plugins-platform-frontend @grafana/grafana-bi-squad /scripts/cli/ @grafana/user-essentials /scripts/clean-git-or-error.sh @grafana/grafana-as-code /scripts/grafana-server/ @grafana/user-essentials -/scripts/helpers/ @grafana/grafana-release-eng +/scripts/helpers/ @grafana/grafana-delivery /scripts/import_many_dashboards.sh @torkelo /scripts/mixin-check.sh @bergquist /scripts/openapi3/ @grafana/grafana-partnerships-team /scripts/prepare-packagejson.js @grafana/frontend-ops /scripts/protobuf-check.sh @grafana/plugins-platform-backend /scripts/stripnulls.sh @grafana/grafana-as-code -/scripts/tag_release.sh @grafana/grafana-release-eng -/scripts/trigger_docker_build.sh @grafana/grafana-release-eng -/scripts/trigger_grafana_packer.sh @grafana/grafana-release-eng -/scripts/trigger_windows_build.sh @grafana/grafana-release-eng -/scripts/validate-devenv-dashboards.sh @grafana/grafana-release-eng -/scripts/verify-repo-update/ @grafana/grafana-release-eng +/scripts/tag_release.sh @grafana/grafana-delivery +/scripts/trigger_docker_build.sh @grafana/grafana-delivery +/scripts/trigger_grafana_packer.sh @grafana/grafana-delivery +/scripts/trigger_windows_build.sh @grafana/grafana-delivery +/scripts/validate-devenv-dashboards.sh @grafana/grafana-delivery +/scripts/verify-repo-update/ @grafana/grafana-delivery /scripts/webpack/ @grafana/frontend-ops /scripts/generate-a11y-report.sh @grafana/user-essentials @@ -553,8 +550,6 @@ embed.go @grafana/grafana-as-code /pkg/cuectx/ @grafana/grafana-as-code /pkg/registry/ @grafana/grafana-as-code /pkg/codegen/ @grafana/grafana-as-code -/pkg/kindsys/ @grafana/grafana-as-code -/pkg/kindsys/kindcat_custom.cue @grafana/cloud-app-platform-squad /pkg/kinds/*/*_gen.go @grafana/grafana-as-code /pkg/registry/corekind/ @grafana/grafana-as-code /public/app/plugins/*gen.go @grafana/grafana-as-code @@ -573,9 +568,9 @@ embed.go @grafana/grafana-as-code /.github/pr-commands.json @marefr /.github/renovate.json5 @grafana/frontend-ops /.github/teams.yml @armandgrillet -/.github/workflows/backport.yml @grafana/grafana-release-eng -/.github/workflows/bump-version.yml @grafana/grafana-release-eng -/.github/workflows/close-milestone.yml @grafana/grafana-release-eng +/.github/workflows/backport.yml @grafana/grafana-delivery +/.github/workflows/bump-version.yml @grafana/grafana-delivery +/.github/workflows/close-milestone.yml @grafana/grafana-delivery /.github/workflows/cloud-data-sources-code-coverage.yml @grafana/partner-plugins @grafana/aws-plugins /.github/workflows/codeowners-validator.yml @tolzhabayev /.github/workflows/codeql-analysis.yml @DanCech @@ -602,7 +597,7 @@ embed.go @grafana/grafana-as-code /.github/workflows/scripts/json-file-to-job-output.js @grafana/plugins-platform-frontend /.github/workflows/scripts/pr-get-job-link.js @grafana/plugins-platform-frontend /.github/workflows/stale.yml @grafana/user-essentials -/.github/workflows/update-changelog.yml @grafana/grafana-release-eng +/.github/workflows/update-changelog.yml @grafana/grafana-delivery /.github/workflows/snyk.yml @grafana/security-team diff --git a/.github/pr-commands.json b/.github/pr-commands.json index 81f055a99ce..1eb7b01a620 100644 --- a/.github/pr-commands.json +++ b/.github/pr-commands.json @@ -190,5 +190,13 @@ "ignoreList": ["renovate[bot]","dependabot[bot]"], "action": "updateLabel", "addLabel": "pr/external" + }, + { + "type":"label", + "name":"type/docs", + "action":"addToProject", + "addToProject":{ + "url":"https://github.com/orgs/grafana/projects/69" + } } ] diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 11a0b83de88..a652df0a8ad 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -83,7 +83,15 @@ "matchPackagePrefixes": [ "@visx/" ] - } + }, + { + "groupName": "uLibraries", + "matchPackageNames": [ + "@leeoniya/ufuzzy", + "uplot" + ], + "reviewers": ["leeoniya"], + }, ], "pin": { "enabled": false diff --git a/.github/workflows/detect-breaking-changes-build.yml b/.github/workflows/detect-breaking-changes-build.yml index 02a36d33d3e..0dc52a5a717 100644 --- a/.github/workflows/detect-breaking-changes-build.yml +++ b/.github/workflows/detect-breaking-changes-build.yml @@ -31,7 +31,7 @@ jobs: run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT - name: Restore yarn cache - uses: actions/cache@v3.0.11 + uses: actions/cache@v3.3.1 id: yarn-cache with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} @@ -79,7 +79,7 @@ jobs: run: echo "dir=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT - name: Restore yarn cache - uses: actions/cache@v3.0.11 + uses: actions/cache@v3.3.1 id: yarn-cache with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} diff --git a/.github/workflows/pr-commands.yml b/.github/workflows/pr-commands.yml index ecd7361c550..9a882dbf3d9 100644 --- a/.github/workflows/pr-commands.yml +++ b/.github/workflows/pr-commands.yml @@ -2,6 +2,7 @@ name: PR automation on: pull_request_target: types: + - labeled - opened - synchronize concurrency: diff --git a/.gitignore b/.gitignore index 9762833b380..39b7a1e2ae4 100644 --- a/.gitignore +++ b/.gitignore @@ -79,6 +79,8 @@ public/css/*.min.css /devenv/docker-compose.override.yaml /devenv/.env /devenv/docker/blocks/tempo/tempo-data/ +/devenv/docker/ha-test-unified-alerting/logs/webhook/dumps/ +/devenv/docker/ha-test-unified-alerting/logs/webhook/webhook-listener.log conf/custom.ini /conf/provisioning/**/custom.yaml diff --git a/Dockerfile b/Dockerfile index bfea9e8103e..29b1a319bc9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -53,6 +53,7 @@ RUN if [[ "$BINGO" = "true" ]]; then \ COPY embed.go Makefile build.go package.json ./ COPY cue.mod cue.mod COPY kinds kinds +COPY local local COPY packages/grafana-schema packages/grafana-schema COPY public/app/plugins public/app/plugins COPY public/api-merged.json public/api-merged.json diff --git a/Makefile b/Makefile index 43a7bfdf816..90feb7749b8 100644 --- a/Makefile +++ b/Makefile @@ -77,7 +77,7 @@ gen-cue: ## Do all CUE/Thema code generation gen-go: $(WIRE) gen-cue @echo "generate go files" - $(WIRE) gen -tags $(WIRE_TAGS) ./pkg/server ./pkg/cmd/grafana-cli/runner + $(WIRE) gen -tags $(WIRE_TAGS) ./pkg/server fix-cue: $(CUE) @echo "formatting cue files" @@ -203,12 +203,7 @@ ifeq ($(sources),) devenv: @printf 'You have to define sources for this command \nexample: make devenv sources=postgres,openldap\n' else -devenv: ${KIND} devenv-down ## Start optional services, e.g. postgres, prometheus, and elasticsearch. -ifneq (,$(findstring apiserver,$(targets))) - @${KIND} create cluster --name grafana-devenv - $(eval targets := $(filter-out apiserver,$(targets))) -endif - +devenv: devenv-down ## Start optional services, e.g. postgres, prometheus, and elasticsearch. @cd devenv; \ ./create_docker_compose.sh $(targets) || \ (rm -rf {docker-compose.yaml,conf.tmp,.env}; exit 1) @@ -218,7 +213,6 @@ endif endif devenv-down: ## Stop optional services. - @${KIND} delete cluster --name grafana @cd devenv; \ test -f docker-compose.yaml && \ docker-compose down || exit 0; diff --git a/conf/defaults.ini b/conf/defaults.ini index 66b694263f0..fcb74bc36e8 100644 --- a/conf/defaults.ini +++ b/conf/defaults.ini @@ -541,6 +541,7 @@ allowed_organizations = role_attribute_path = role_attribute_strict = false allow_assign_grafana_admin = false +tls_skip_verify_insecure = false #################################### GitLab Auth ######################### [auth.gitlab] @@ -561,6 +562,7 @@ role_attribute_path = role_attribute_strict = false allow_assign_grafana_admin = false skip_org_role_sync = false +tls_skip_verify_insecure = false #################################### Google Auth ######################### [auth.google] @@ -578,6 +580,7 @@ api_url = https://www.googleapis.com/oauth2/v1/userinfo allowed_domains = hosted_domain = skip_org_role_sync = false +tls_skip_verify_insecure = false #################################### Grafana.com Auth #################### # legacy key names (so they work in env variables) @@ -618,6 +621,7 @@ allowed_groups = role_attribute_strict = false allow_assign_grafana_admin = false force_use_graph_api = false +tls_skip_verify_insecure = false #################################### Okta OAuth ####################### [auth.okta] @@ -638,6 +642,7 @@ role_attribute_path = role_attribute_strict = false allow_assign_grafana_admin = false skip_org_role_sync = false +tls_skip_verify_insecure = false #################################### Generic OAuth ####################### [auth.generic_oauth] diff --git a/contribute/style-guides/frontend.md b/contribute/style-guides/frontend.md index dc0fc6e4427..c25b671a892 100644 --- a/contribute/style-guides/frontend.md +++ b/contribute/style-guides/frontend.md @@ -353,12 +353,26 @@ static defaultProps: Partial = { ... } ### How to declare functional components -We recommend using named regular functions when creating a new react functional component. +We prefer using function declarations over function expressions when creating a new react functional component. ```typescript +// bad +export const Component = (props: Props) => { ... } + +// bad +export const Component: React.FC = (props) => { ... } + +// good export function Component(props: Props) { ... } ``` +Some interesting readings on the topic: + +- [Create React App: Remove React.FC from typescript template](https://github.com/facebook/create-react-app/pull/8177) +- [Kent C. Dodds: How to write a React Component in Typescript](https://kentcdodds.com/blog/how-to-write-a-react-component-in-typescript) +- [Kent C. Dodds: Function forms](https://kentcdodds.com/blog/function-forms) +- [Sam Hendrickx: Why you probably shouldn't use React.FC?](https://medium.com/raccoons-group/why-you-probably-shouldnt-use-react-fc-to-type-your-react-components-37ca1243dd13) + ## State management - Don't mutate state in reducers or thunks. diff --git a/contribute/style-guides/styling.md b/contribute/style-guides/styling.md index e6c9ab63a57..caf1b137f41 100644 --- a/contribute/style-guides/styling.md +++ b/contribute/style-guides/styling.md @@ -13,12 +13,12 @@ To access the theme in your styles, use the `useStyles` hook. It provides basic > Please remember to put `getStyles` function at the end of the file! ```tsx -import React, { FC } from 'react'; +import React from 'react'; import { GrafanaTheme2 } from '@grafana/data'; import { useStyles2 } from '@grafana/ui'; import { css } from '@emotion/css'; -const Foo: FC = () => { +const Foo = (props: FooProps) => { const styles = useStyles2(getStyles); // Use styles with classNames @@ -48,7 +48,7 @@ interface ComponentAProps { isActive: boolean; } -const ComponentA: React.FC = ({ isActive }) => { +const ComponentA = ({ isActive }: ComponentAProps) => { const theme = useTheme(); const styles = useStyles2(theme); diff --git a/devenv/dev-dashboards-without-uid/panel_tests_graph.json b/devenv/dev-dashboards-without-uid/panel_tests_graph.json index 6612f9b80f3..2ddb8683484 100644 --- a/devenv/dev-dashboards-without-uid/panel_tests_graph.json +++ b/devenv/dev-dashboards-without-uid/panel_tests_graph.json @@ -1629,7 +1629,6 @@ } ], "refresh": false, - "revision": 8, "schemaVersion": 16, "style": "dark", "tags": ["gdev", "panel-tests"], diff --git a/devenv/dev-dashboards/panel-bargauge/panel_tests_bar_gauge.json b/devenv/dev-dashboards/panel-bargauge/panel_tests_bar_gauge.json index 6230bb6c305..9366c4dc238 100644 --- a/devenv/dev-dashboards/panel-bargauge/panel_tests_bar_gauge.json +++ b/devenv/dev-dashboards/panel-bargauge/panel_tests_bar_gauge.json @@ -3,24 +3,74 @@ "list": [ { "builtIn": 1, - "datasource": "-- Grafana --", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, "type": "dashboard" } ] }, "editable": true, - "gnetId": null, + "fiscalYearStartMonth": 0, "graphTooltip": 0, "links": [], + "liveNow": false, "panels": [ { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "index": 0 + }, + { + "color": "green", + "index": 1, + "value": 20 + }, + { + "color": "orange", + "index": 2, + "value": 40 + }, + { + "color": "red", + "index": 3, + "value": 80 + } + ] + }, + "unit": "celsius" + }, + "overrides": [] + }, "gridPos": { "h": 7, - "w": 6, + "w": 9, "x": 0, "y": 0 }, @@ -28,789 +78,1333 @@ "links": [], "options": { "displayMode": "gradient", - "fieldOptions": { - "calcs": ["mean"], - "defaults": { - "decimals": null, - "max": 100, - "min": 0, - "unit": "celsius" - }, - "mappings": [], - "override": {}, - "thresholds": [ - { - "color": "blue", - "index": 0, - "value": null - }, - { - "color": "green", - "index": 1, - "value": 20 - }, - { - "color": "orange", - "index": 2, - "value": 40 - }, - { - "color": "red", - "index": 3, - "value": 80 - } + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" ], + "fields": "", "values": false }, - "orientation": "horizontal" + "showUnfilled": true, + "valueMode": "color" }, - "pluginVersion": "6.2.0-pre", + "pluginVersion": "9.4.0-pre", "targets": [ { "alias": "Inside", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "H", "scenarioId": "csv_metric_values", "stringInput": "100,100,100" }, { "alias": "Outhouse", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "A", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "F", "scenarioId": "random_walk" } ], - "timeFrom": null, - "timeShift": null, "title": "Title above bar", "type": "bargauge" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "index": 0 + }, + { + "color": "green", + "index": 1, + "value": 20 + }, + { + "color": "orange", + "index": 2, + "value": 40 + }, + { + "color": "red", + "index": 3, + "value": 80 + } + ] + }, + "unit": "celsius" + }, + "overrides": [] + }, "gridPos": { "h": 7, - "w": 5, - "x": 6, + "w": 8, + "x": 9, "y": 0 }, "id": 12, "links": [], "options": { "displayMode": "gradient", - "fieldOptions": { - "calcs": ["mean"], - "defaults": { - "decimals": null, - "max": 100, - "min": 0, - "unit": "celsius" - }, - "mappings": [], - "override": {}, - "thresholds": [ - { - "color": "blue", - "index": 0, - "value": null - }, - { - "color": "green", - "index": 1, - "value": 20 - }, - { - "color": "orange", - "index": 2, - "value": 40 - }, - { - "color": "red", - "index": 3, - "value": 80 - } + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" ], + "fields": "", "values": false }, - "orientation": "horizontal" + "showUnfilled": true, + "valueMode": "color" }, - "pluginVersion": "6.2.0-pre", + "pluginVersion": "9.4.0-pre", "targets": [ { "alias": "Inside", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "H", "scenarioId": "csv_metric_values", "stringInput": "100,100,100" }, { "alias": "Outhouse", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "A", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "F", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "B", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "C", "scenarioId": "random_walk" } ], - "timeFrom": null, - "timeShift": null, "title": "Title to left of bar", "type": "bargauge" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "index": 0 + }, + { + "color": "green", + "index": 1, + "value": 20 + }, + { + "color": "orange", + "index": 2, + "value": 40 + }, + { + "color": "red", + "index": 3, + "value": 80 + } + ] + }, + "unit": "celsius" + }, + "overrides": [] + }, "gridPos": { "h": 7, "w": 7, - "x": 11, + "x": 17, "y": 0 }, - "id": 13, + "id": 23, "links": [], "options": { - "displayMode": "basic", - "fieldOptions": { - "calcs": ["mean"], - "defaults": { - "decimals": null, - "max": 100, - "min": 0, - "unit": "celsius" - }, - "mappings": [], - "override": {}, - "thresholds": [ - { - "color": "blue", - "index": 0, - "value": null - }, - { - "color": "green", - "index": 1, - "value": 20 - }, - { - "color": "orange", - "index": 2, - "value": 40 - }, - { - "color": "red", - "index": 3, - "value": 80 - } + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" ], + "fields": "", "values": false }, - "orientation": "horizontal" + "showUnfilled": true, + "valueMode": "hidden" }, - "pluginVersion": "6.2.0-pre", + "pluginVersion": "9.4.0-pre", "targets": [ { "alias": "Inside", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "H", "scenarioId": "csv_metric_values", "stringInput": "100,100,100" }, { "alias": "Outhouse", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "A", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "F", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "B", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "C", "scenarioId": "random_walk" } ], - "timeFrom": null, - "timeShift": null, - "title": "Basic mode", + "title": "Gradient hidden value", "type": "bargauge" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "index": 0 + }, + { + "color": "green", + "index": 1, + "value": 20 + }, + { + "color": "orange", + "index": 2, + "value": 40 + }, + { + "color": "red", + "index": 3, + "value": 80 + } + ] + }, + "unit": "celsius" + }, + "overrides": [] + }, "gridPos": { "h": 7, - "w": 6, - "x": 18, - "y": 0 + "w": 9, + "x": 0, + "y": 7 + }, + "id": 21, + "links": [], + "options": { + "displayMode": "basic", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "valueMode": "text" + }, + "pluginVersion": "9.4.0-pre", + "targets": [ + { + "alias": "Inside", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "H", + "scenarioId": "csv_metric_values", + "stringInput": "100,100,100" + }, + { + "alias": "Outhouse", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A", + "scenarioId": "random_walk" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "F", + "scenarioId": "random_walk" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "B", + "scenarioId": "random_walk" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "C", + "scenarioId": "random_walk" + } + ], + "title": "Basic mode + text color", + "type": "bargauge" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "index": 0 + }, + { + "color": "green", + "index": 1, + "value": 20 + }, + { + "color": "orange", + "index": 2, + "value": 40 + }, + { + "color": "red", + "index": 3, + "value": 80 + } + ] + }, + "unit": "celsius" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 9, + "y": 7 + }, + "id": 13, + "links": [], + "options": { + "displayMode": "gradient", + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "valueMode": "text" + }, + "pluginVersion": "9.4.0-pre", + "targets": [ + { + "alias": "Inside", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "H", + "scenarioId": "csv_metric_values", + "stringInput": "100,100,100" + }, + { + "alias": "Outhouse", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "A", + "scenarioId": "random_walk" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "F", + "scenarioId": "random_walk" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "B", + "scenarioId": "random_walk" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "C", + "scenarioId": "random_walk" + } + ], + "title": "gradient + text color", + "type": "bargauge" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "index": 0 + }, + { + "color": "green", + "index": 1, + "value": 20 + }, + { + "color": "orange", + "index": 2, + "value": 40 + }, + { + "color": "red", + "index": 3, + "value": 80 + } + ] + }, + "unit": "celsius" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 7, + "x": 17, + "y": 7 }, "id": 14, "links": [], "options": { "displayMode": "lcd", - "fieldOptions": { - "calcs": ["mean"], - "defaults": { - "decimals": null, - "max": 100, - "min": 0, - "unit": "celsius" - }, - "mappings": [], - "override": {}, - "thresholds": [ - { - "color": "blue", - "index": 0, - "value": null - }, - { - "color": "green", - "index": 1, - "value": 20 - }, - { - "color": "orange", - "index": 2, - "value": 40 - }, - { - "color": "red", - "index": 3, - "value": 80 - } + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" ], + "fields": "", "values": false }, - "orientation": "horizontal" + "showUnfilled": true, + "valueMode": "hidden" }, - "pluginVersion": "6.2.0-pre", + "pluginVersion": "9.4.0-pre", "targets": [ { "alias": "Inside", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "H", "scenarioId": "csv_metric_values", "stringInput": "100,100,100" }, { "alias": "Outhouse", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "A", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "F", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "B", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "C", "scenarioId": "random_walk" } ], - "timeFrom": null, - "timeShift": null, - "title": "LED", + "title": "LED + hidden value", "type": "bargauge" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "index": 0 + }, + { + "color": "orange", + "index": 1, + "value": 40 + }, + { + "color": "red", + "index": 2, + "value": 80 + } + ] + }, + "unit": "watt" + }, + "overrides": [] + }, "gridPos": { "h": 9, "w": 11, "x": 0, - "y": 7 + "y": 14 }, "id": 7, "links": [], "options": { "displayMode": "lcd", - "fieldOptions": { - "calcs": ["mean"], - "defaults": { - "decimals": null, - "max": 100, - "min": 0, - "unit": "watt" - }, - "mappings": [], - "override": {}, - "thresholds": [ - { - "color": "green", - "index": 0, - "value": null - }, - { - "color": "orange", - "index": 1, - "value": 40 - }, - { - "color": "red", - "index": 2, - "value": 80 - } + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "vertical", + "reduceOptions": { + "calcs": [ + "mean" ], + "fields": "", "values": false }, - "orientation": "vertical" + "showUnfilled": true, + "valueMode": "color" }, - "pluginVersion": "6.2.0-pre", + "pluginVersion": "9.4.0-pre", "targets": [ { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "E", "scenarioId": "csv_metric_values", "stringInput": "10003,33333" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "F", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "G", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "H", "scenarioId": "csv_metric_values", "stringInput": "100,100,100" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "I", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "J", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "K", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "L", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "M", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "N", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "O", "scenarioId": "random_walk" - }, - { - "refId": "P", - "scenarioId": "random_walk" - }, - { - "refId": "Q", - "scenarioId": "random_walk" } ], - "timeFrom": null, - "timeShift": null, "title": "LED Vertical", "type": "bargauge" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "index": 0 + }, + { + "color": "purple", + "index": 1, + "value": 50 + }, + { + "color": "blue", + "index": 2, + "value": 70 + } + ] + }, + "unit": "watt" + }, + "overrides": [] + }, "gridPos": { "h": 9, "w": 13, "x": 11, - "y": 7 + "y": 14 }, "id": 8, "links": [], "options": { "displayMode": "basic", - "fieldOptions": { - "calcs": ["mean"], - "defaults": { - "decimals": null, - "max": 100, - "min": 0, - "unit": "watt" - }, - "mappings": [], - "override": {}, - "thresholds": [ - { - "color": "green", - "index": 0, - "value": null - }, - { - "color": "purple", - "index": 1, - "value": 50 - }, - { - "color": "blue", - "index": 2, - "value": 70 - } + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "vertical", + "reduceOptions": { + "calcs": [ + "mean" ], + "fields": "", "values": false }, - "orientation": "vertical" + "showUnfilled": true, + "valueMode": "color" }, - "pluginVersion": "6.2.0-pre", + "pluginVersion": "9.4.0-pre", "targets": [ { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "H", "scenarioId": "csv_metric_values", "stringInput": "100,100,100" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "A", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "B", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "C", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "D", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "I", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "J", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "K", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "L", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "M", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "N", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "O", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "P", "scenarioId": "random_walk" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "Q", "scenarioId": "random_walk" } ], - "timeFrom": null, - "timeShift": null, "title": "Basic vertical ", "type": "bargauge" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "index": 0 + }, + { + "color": "blue", + "index": 1, + "value": 40 + }, + { + "color": "red", + "index": 2, + "value": 80 + } + ] + } + }, + "overrides": [] + }, "gridPos": { "h": 7, "w": 11, "x": 0, - "y": 16 + "y": 23 }, "id": 16, "links": [], "options": { "displayMode": "lcd", - "fieldOptions": { - "calcs": ["last"], - "defaults": { - "max": 100, - "min": 0 - }, - "mappings": [], - "override": {}, - "thresholds": [ - { - "color": "green", - "index": 0, - "value": null - }, - { - "color": "blue", - "index": 1, - "value": 40 - }, - { - "color": "red", - "index": 2, - "value": 80 - } + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "last" ], + "fields": "", "values": false }, - "orientation": "horizontal" + "showUnfilled": true, + "valueMode": "color" }, - "pluginVersion": "6.3.0-pre", + "pluginVersion": "9.4.0-pre", "targets": [ { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "A", "scenarioId": "csv_metric_values", "stringInput": "1,20,90,30,5,0,-100" } ], - "timeFrom": null, - "timeShift": null, "title": "Negative value below min", "type": "bargauge" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "index": 0 + }, + { + "color": "blue", + "index": 1, + "value": 40 + }, + { + "color": "red", + "index": 2, + "value": 80 + } + ] + } + }, + "overrides": [] + }, "gridPos": { "h": 7, "w": 3, "x": 11, - "y": 16 + "y": 23 }, "id": 17, "links": [], "options": { "displayMode": "lcd", - "fieldOptions": { - "calcs": ["last"], - "defaults": { - "max": 100, - "min": 0 - }, - "mappings": [], - "override": {}, - "thresholds": [ - { - "color": "green", - "index": 0, - "value": null - }, - { - "color": "blue", - "index": 1, - "value": 40 - }, - { - "color": "red", - "index": 2, - "value": 80 - } + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "vertical", + "reduceOptions": { + "calcs": [ + "last" ], + "fields": "", "values": false }, - "orientation": "vertical" + "showUnfilled": true, + "valueMode": "color" }, - "pluginVersion": "6.3.0-pre", + "pluginVersion": "9.4.0-pre", "targets": [ { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "A", "scenarioId": "csv_metric_values", "stringInput": "1,20,90,30,5,0,-100" } ], - "timeFrom": null, - "timeShift": null, "title": "Negative value below min", "type": "bargauge" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 100, + "min": -10, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "index": 0 + }, + { + "color": "blue", + "index": 1, + "value": 40 + }, + { + "color": "red", + "index": 2, + "value": 80 + } + ] + } + }, + "overrides": [] + }, "gridPos": { "h": 7, "w": 3, "x": 14, - "y": 16 + "y": 23 }, "id": 18, "links": [], "options": { "displayMode": "lcd", - "fieldOptions": { - "calcs": ["last"], - "defaults": { - "max": 100, - "min": -10 - }, - "mappings": [], - "override": {}, - "thresholds": [ - { - "color": "green", - "index": 0, - "value": null - }, - { - "color": "blue", - "index": 1, - "value": 40 - }, - { - "color": "red", - "index": 2, - "value": 80 - } + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "vertical", + "reduceOptions": { + "calcs": [ + "last" ], + "fields": "", "values": false }, - "orientation": "vertical" + "showUnfilled": true, + "valueMode": "color" }, - "pluginVersion": "6.3.0-pre", + "pluginVersion": "9.4.0-pre", "targets": [ { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "A", "scenarioId": "csv_metric_values", "stringInput": "1,20,90,30,5,6" } ], - "timeFrom": null, - "timeShift": null, "title": "Positive value above min", "type": "bargauge" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 35, + "min": -20, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "index": 0 + }, + { + "color": "green", + "index": 1, + "value": 5 + }, + { + "color": "#EAB839", + "index": 2, + "value": 25 + }, + { + "color": "red", + "index": 3, + "value": 30 + } + ] + } + }, + "overrides": [] + }, "gridPos": { "h": 7, "w": 3, "x": 17, - "y": 16 + "y": 23 }, "id": 19, "links": [], "options": { "displayMode": "lcd", - "fieldOptions": { - "calcs": ["last"], - "defaults": { - "max": 35, - "min": -20 - }, - "mappings": [], - "override": {}, - "thresholds": [ - { - "color": "blue", - "index": 0, - "value": null - }, - { - "color": "green", - "index": 1, - "value": 5 - }, - { - "color": "#EAB839", - "index": 2, - "value": 25 - }, - { - "color": "red", - "index": 3, - "value": 30 - } + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "vertical", + "reduceOptions": { + "calcs": [ + "last" ], + "fields": "", "values": false }, - "orientation": "vertical" + "showUnfilled": true, + "valueMode": "color" }, - "pluginVersion": "6.3.0-pre", + "pluginVersion": "9.4.0-pre", "targets": [ { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "A", "scenarioId": "csv_metric_values", "stringInput": "1,20,90,30,5,6" } ], - "timeFrom": null, - "timeShift": null, "title": "Negative min ", "type": "bargauge" }, { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 35, + "min": -20, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "index": 0 + }, + { + "color": "green", + "index": 1, + "value": 5 + }, + { + "color": "#EAB839", + "index": 2, + "value": 25 + }, + { + "color": "red", + "index": 3, + "value": 30 + } + ] + } + }, + "overrides": [] + }, "gridPos": { "h": 7, "w": 4, "x": 20, - "y": 16 + "y": 23 }, "id": 20, "links": [], "options": { "displayMode": "gradient", - "fieldOptions": { - "calcs": ["last"], - "defaults": { - "max": 35, - "min": -20 - }, - "mappings": [], - "override": {}, - "thresholds": [ - { - "color": "blue", - "index": 0, - "value": null - }, - { - "color": "green", - "index": 1, - "value": 5 - }, - { - "color": "#EAB839", - "index": 2, - "value": 25 - }, - { - "color": "red", - "index": 3, - "value": 30 - } + "minVizHeight": 10, + "minVizWidth": 0, + "orientation": "vertical", + "reduceOptions": { + "calcs": [ + "last" ], + "fields": "", "values": false }, - "orientation": "vertical" + "showUnfilled": true, + "valueMode": "color" }, - "pluginVersion": "6.3.0-pre", + "pluginVersion": "9.4.0-pre", "targets": [ { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "A", "scenarioId": "csv_metric_values", "stringInput": "30,30" } ], - "timeFrom": null, - "timeShift": null, "title": "Negative min", "type": "bargauge" } ], - "schemaVersion": 18, + "revision": 1, + "schemaVersion": 38, "style": "dark", - "tags": ["gdev", "panel-tests"], + "tags": [ + "gdev", + "panel-tests" + ], "templating": { "list": [] }, @@ -819,11 +1413,33 @@ "to": "now" }, "timepicker": { - "refresh_intervals": ["5s", "10s", "30s", "1m", "5m", "15m", "30m", "1h", "2h", "1d"], - "time_options": ["5m", "15m", "1h", "6h", "12h", "24h", "2d", "7d", "30d"] + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] }, "timezone": "", "title": "Panel Tests - Bar Gauge", "uid": "O6f11TZWk", - "version": 12 + "version": 1, + "weekStart": "" } diff --git a/devenv/dev-dashboards/panel-graph/graph_tests.json b/devenv/dev-dashboards/panel-graph/graph_tests.json index e0e31323052..68475600f11 100644 --- a/devenv/dev-dashboards/panel-graph/graph_tests.json +++ b/devenv/dev-dashboards/panel-graph/graph_tests.json @@ -1629,7 +1629,6 @@ } ], "refresh": false, - "revision": 8, "schemaVersion": 16, "style": "dark", "tags": ["gdev", "panel-tests", "graph"], diff --git a/devenv/dev-dashboards/panel-heatmap/heatmap-x.json b/devenv/dev-dashboards/panel-heatmap/heatmap-x.json index 7c9260f0017..95c413f0fa3 100644 --- a/devenv/dev-dashboards/panel-heatmap/heatmap-x.json +++ b/devenv/dev-dashboards/panel-heatmap/heatmap-x.json @@ -305,7 +305,6 @@ "type": "heatmap" } ], - "revision": 1, "schemaVersion": 37, "style": "dark", "tags": [], diff --git a/devenv/dev-dashboards/panel-histogram/histogram_tests.json b/devenv/dev-dashboards/panel-histogram/histogram_tests.json index 1bb343f7088..cb50285c29e 100644 --- a/devenv/dev-dashboards/panel-histogram/histogram_tests.json +++ b/devenv/dev-dashboards/panel-histogram/histogram_tests.json @@ -748,7 +748,6 @@ "type": "histogram" } ], - "revision": 1, "schemaVersion": 37, "style": "dark", "tags": [ diff --git a/devenv/dev-dashboards/panel-table/table_tests.json b/devenv/dev-dashboards/panel-table/table_tests.json index c301dd23b6a..8aee9afeda7 100644 --- a/devenv/dev-dashboards/panel-table/table_tests.json +++ b/devenv/dev-dashboards/panel-table/table_tests.json @@ -430,7 +430,6 @@ } ], "refresh": false, - "revision": 8, "schemaVersion": 16, "style": "dark", "tags": ["gdev", "panel-tests"], diff --git a/devenv/dev-dashboards/panel-table/table_tests_new.json b/devenv/dev-dashboards/panel-table/table_tests_new.json index 11c6c8c0eb8..92143922121 100644 --- a/devenv/dev-dashboards/panel-table/table_tests_new.json +++ b/devenv/dev-dashboards/panel-table/table_tests_new.json @@ -3,7 +3,10 @@ "list": [ { "builtIn": 1, - "datasource": "-- Grafana --", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", @@ -13,12 +16,16 @@ ] }, "editable": true, - "gnetId": null, + "fiscalYearStartMonth": 0, "graphTooltip": 0, "links": [], + "liveNow": false, "panels": [ { - "datasource": null, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, "gridPos": { "h": 1, "w": 24, @@ -26,11 +33,23 @@ "y": 0 }, "id": 7, + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "refId": "A" + } + ], "title": "Cell styles", "type": "row" }, { - "datasource": "gdev-testdata", + "datasource": { + "type": "testdata", + "uid": "gdev-testdata" + }, "fieldConfig": { "defaults": { "color": { @@ -38,16 +57,19 @@ }, "custom": { "align": "center", - "displayMode": "color-background", - "filterable": false + "cellOptions": { + "mode": "gradient", + "type": "color-background" + }, + "filterable": false, + "inspect": false }, "mappings": [], "thresholds": { "mode": "percentage", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "blue", @@ -124,7 +146,17 @@ }, "id": 4, "options": { + "cellHeight": "md", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, "showHeader": true, + "showRowNums": false, "sortBy": [ { "desc": true, @@ -132,17 +164,19 @@ } ] }, - "pluginVersion": "", + "pluginVersion": "9.5.0-pre", "targets": [ { + "datasource": { + "type": "testdata", + "uid": "gdev-testdata" + }, "refId": "A", "scenarioId": "random_walk", "seriesCount": 15, "stringInput": "" } ], - "timeFrom": null, - "timeShift": null, "title": "Colored background", "transformations": [ { @@ -159,23 +193,29 @@ "type": "table" }, { - "datasource": "gdev-testdata", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "custom": { - "align": null, - "filterable": false + "align": "center", + "cellOptions": { + "type": "auto" + }, + "filterable": false, + "inspect": false }, "mappings": [], "thresholds": { "mode": "percentage", "steps": [ { - "color": "orange", - "value": null + "color": "orange" }, { "color": "red", @@ -188,60 +228,51 @@ { "matcher": { "id": "byName", - "options": "A" + "options": "Basic " }, "properties": [ { - "id": "custom.displayMode", - "value": "gradient-gauge" + "id": "custom.cellOptions", + "value": { + "mode": "basic", + "type": "gauge" + } + }, + { + "id": "custom.inspect", + "value": false } ] }, { "matcher": { "id": "byName", - "options": "Info" + "options": "Gradient text color value" }, "properties": [ { - "id": "custom.width", - "value": 92 + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "gauge", + "valueMode": "text" + } } ] }, { "matcher": { "id": "byName", - "options": "Min" + "options": "LCD hidden value" }, "properties": [ { - "id": "custom.width", - "value": 76 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Max" - }, - "properties": [ - { - "id": "custom.width", - "value": 89 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Time" - }, - "properties": [ - { - "id": "custom.width", - "value": 165 + "id": "custom.cellOptions", + "value": { + "mode": "lcd", + "type": "gauge", + "valueMode": "hidden" + } } ] } @@ -249,13 +280,22 @@ }, "gridPos": { "h": 16, - "w": 8, + "w": 17, "x": 7, "y": 1 }, "id": 2, "options": { + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, "showHeader": true, + "showRowNums": false, "sortBy": [ { "desc": false, @@ -263,22 +303,25 @@ } ] }, - "pluginVersion": "", + "pluginVersion": "9.5.0-pre", "targets": [ { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "refId": "A", "scenarioId": "random_walk_table", "stringInput": "" } ], - "timeFrom": null, - "timeShift": null, "title": "Bar gauge cells", "transformations": [ { "id": "organize", "options": { "excludeByName": { + "Info": true, "Time": true }, "indexByName": { @@ -288,35 +331,43 @@ "Time": 0, "Value": 4 }, - "renameByName": {} + "renameByName": { + "A": "LCD hidden value", + "Max": "Gradient text color value", + "Min": "Basic " + } } } ], "type": "table" }, { - "datasource": "gdev-testdata", - "description": "", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "custom": { - "align": null, - "filterable": false + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { - "mode": "percentage", + "mode": "absolute", "steps": [ { - "color": "blue", - "value": null + "color": "green" }, { - "color": "green", - "value": 50 + "color": "red", + "value": 80 } ] } @@ -325,82 +376,329 @@ { "matcher": { "id": "byName", - "options": "A" + "options": "rate" }, "properties": [ { - "id": "custom.displayMode", - "value": "lcd-gauge" + "id": "custom.cellOptions", + "value": { + "fillOpacity": 29, + "gradientMode": "opacity", + "lineWidth": 1, + "type": "sparkline" + } }, { - "id": "custom.align", - "value": "center" + "id": "color", + "value": { + "mode": "continuous-GrYlRd" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "cluster" + }, + "properties": [ + { + "id": "custom.width", + "value": 120 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "service" + }, + "properties": [ + { + "id": "custom.width", + "value": 120 } ] } ] }, "gridPos": { - "h": 16, + "h": 7, "w": 9, - "x": 15, - "y": 1 + "x": 0, + "y": 17 }, - "id": 5, + "id": 14, + "maxDataPoints": 50, "options": { + "cellHeight": "md", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, "showHeader": true, + "showRowNums": false, "sortBy": [] }, - "pluginVersion": "", + "pluginVersion": "9.5.0-pre", "targets": [ { + "datasource": { + "type": "testdata", + "uid": "gdev-testdata" + }, + "labels": "cluster=eu,service=checkout", + "min": 0.1, "refId": "A", - "scenarioId": "random_walk_table", - "stringInput": "" + "scenarioId": "random_walk", + "seriesCount": 3 } ], - "timeFrom": null, - "timeShift": null, - "title": "Retro LCD cell", + "title": "Sparkline cell", "transformations": [ + { + "id": "timeSeriesTable", + "options": {} + }, { "id": "organize", "options": { - "excludeByName": { - "Info": false, - "Max": true, - "Min": true, - "Time": false - }, - "indexByName": { - "Info": 1, - "Max": 3, - "Min": 2, - "Time": 0, - "Value": 4 - }, - "renameByName": {} + "excludeByName": {}, + "indexByName": {}, + "renameByName": { + "Trend": "rate" + } } } ], "type": "table" }, { - "collapsed": false, - "datasource": "gdev-testdata", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "rate" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "drawStyle": "bars", + "fillOpacity": 100, + "gradientMode": "hue", + "lineWidth": 0, + "showPoints": "auto", + "type": "sparkline" + } + }, + { + "id": "color", + "value": { + "mode": "continuous-GrYlRd" + } + }, + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "latency" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "fillOpacity": 40, + "gradientMode": "opacity", + "lineInterpolation": "stepBefore", + "lineWidth": 1, + "type": "sparkline" + } + }, + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "service" + }, + "properties": [ + { + "id": "custom.width", + "value": 120 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "cluster" + }, + "properties": [ + { + "id": "custom.width", + "value": 120 + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 15, + "x": 9, + "y": 17 + }, + "id": 15, + "maxDataPoints": 30, + "options": { + "cellHeight": "md", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "showRowNums": false + }, + "pluginVersion": "9.5.0-pre", + "targets": [ + { + "datasource": { + "type": "testdata", + "uid": "gdev-testdata" + }, + "labels": "cluster=eu,service=checkout", + "min": 0.1, + "refId": "A", + "scenarioId": "random_walk", + "seriesCount": 3 + }, + { + "datasource": { + "type": "testdata", + "uid": "gdev-testdata" + }, + "hide": false, + "labels": "cluster=eu,service=checkout", + "min": 0.1, + "refId": "B", + "scenarioId": "random_walk", + "seriesCount": 3 + } + ], + "title": "Multiple sparkline cells per row", + "transformations": [ + { + "id": "timeSeriesTable", + "options": {} + }, + { + "id": "joinByField", + "options": { + "byField": "service", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "cluster 2": true + }, + "indexByName": {}, + "renameByName": { + "Trend": "rate", + "Trend #A": "rate", + "Trend #B": "latency", + "cluster 1": "cluster" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "testdata", + "uid": "gdev-testdata" + }, "gridPos": { "h": 1, "w": 24, "x": 0, - "y": 17 + "y": 24 }, "id": 9, - "panels": [], + "targets": [ + { + "datasource": { + "type": "testdata", + "uid": "gdev-testdata" + }, + "refId": "A" + } + ], "title": "Data links", "type": "row" }, { - "datasource": "gdev-testdata", + "datasource": { + "type": "testdata", + "uid": "gdev-testdata" + }, "fieldConfig": { "defaults": { "color": { @@ -408,8 +706,11 @@ }, "custom": { "align": "center", - "displayMode": "color-text", - "filterable": false + "cellOptions": { + "type": "color-text" + }, + "filterable": false, + "inspect": false }, "decimals": 2, "mappings": [], @@ -417,8 +718,7 @@ "mode": "percentage", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "blue", @@ -444,8 +744,7 @@ }, "properties": [ { - "id": "custom.align", - "value": null + "id": "custom.align" } ] }, @@ -472,17 +771,30 @@ "h": 8, "w": 12, "x": 0, - "y": 18 + "y": 25 }, "id": 3, - "maxDataPoints": "10", "options": { - "showHeader": true + "cellHeight": "md", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "showRowNums": false }, - "pluginVersion": "", + "pluginVersion": "9.5.0-pre", "targets": [ { "alias": "S1", + "datasource": { + "type": "testdata", + "uid": "gdev-testdata" + }, "labels": "server=A", "refId": "A", "scenarioId": "random_walk", @@ -491,6 +803,10 @@ }, { "alias": "S2", + "datasource": { + "type": "testdata", + "uid": "gdev-testdata" + }, "labels": "server=B", "refId": "B", "scenarioId": "random_walk", @@ -499,6 +815,10 @@ }, { "alias": "S3", + "datasource": { + "type": "testdata", + "uid": "gdev-testdata" + }, "labels": "server=C", "refId": "C", "scenarioId": "random_walk", @@ -506,8 +826,6 @@ "stringInput": "" } ], - "timeFrom": null, - "timeShift": null, "title": "Data link with labels and numeric value", "transformations": [ { @@ -518,7 +836,10 @@ "type": "table" }, { - "datasource": "gdev-testdata", + "datasource": { + "type": "testdata", + "uid": "gdev-testdata" + }, "fieldConfig": { "defaults": { "color": { @@ -526,16 +847,18 @@ }, "custom": { "align": "center", - "displayMode": "auto", - "filterable": false + "cellOptions": { + "type": "auto" + }, + "filterable": false, + "inspect": false }, "mappings": [], "thresholds": { "mode": "percentage", "steps": [ { - "color": "green", - "value": null + "color": "green" }, { "color": "blue", @@ -559,11 +882,21 @@ "h": 8, "w": 5, "x": 12, - "y": 18 + "y": 25 }, "id": 10, "options": { + "cellHeight": "md", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, "showHeader": false, + "showRowNums": false, "sortBy": [ { "desc": true, @@ -571,17 +904,19 @@ } ] }, - "pluginVersion": "", + "pluginVersion": "9.5.0-pre", "targets": [ { + "datasource": { + "type": "testdata", + "uid": "gdev-testdata" + }, "refId": "A", "scenarioId": "random_walk_table", "seriesCount": 5, "stringInput": "" } ], - "timeFrom": null, - "timeShift": null, "title": "No header", "transformations": [ { @@ -606,7 +941,10 @@ "type": "table" }, { - "datasource": "gdev-testdata", + "datasource": { + "type": "testdata", + "uid": "gdev-testdata" + }, "fieldConfig": { "defaults": { "color": { @@ -614,15 +952,17 @@ }, "custom": { "align": "auto", - "displayMode": "auto" + "cellOptions": { + "type": "auto" + }, + "inspect": false }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { - "color": "green", - "value": 0 + "color": "green" }, { "color": "red", @@ -637,25 +977,39 @@ "h": 8, "w": 12, "x": 0, - "y": 26 + "y": 33 }, "id": 12, "options": { + "cellHeight": "md", "footer": { - "show": true, + "countRows": false, "fields": "", "reducer": [ "sum" - ] + ], + "show": true }, - "showHeader": true + "showHeader": true, + "showRowNums": false }, - "pluginVersion": "", + "pluginVersion": "9.5.0-pre", + "targets": [ + { + "datasource": { + "type": "testdata", + "uid": "gdev-testdata" + }, + "refId": "A" + } + ], "title": "Footer", "type": "table" } ], - "schemaVersion": 27, + "refresh": "", + "revision": 1, + "schemaVersion": 38, "style": "dark", "tags": [ "gdev", @@ -684,5 +1038,6 @@ "timezone": "", "title": "Panel Tests - React Table", "uid": "U_bZIMRMk", - "version": 6 + "version": 7, + "weekStart": "" } \ No newline at end of file diff --git a/devenv/dev-dashboards/panel-timeline/timeline-thresholds-mappings.json b/devenv/dev-dashboards/panel-timeline/timeline-thresholds-mappings.json index be7a3567bfa..9d15ac1d64c 100644 --- a/devenv/dev-dashboards/panel-timeline/timeline-thresholds-mappings.json +++ b/devenv/dev-dashboards/panel-timeline/timeline-thresholds-mappings.json @@ -736,7 +736,6 @@ } ], "refresh": false, - "revision": 1, "schemaVersion": 38, "style": "dark", "tags": [ diff --git a/devenv/dev-dashboards/panel-timeseries/timeseries-yaxis-ticks.json b/devenv/dev-dashboards/panel-timeseries/timeseries-yaxis-ticks.json index 7650a8aab56..6de22c2b6ed 100644 --- a/devenv/dev-dashboards/panel-timeseries/timeseries-yaxis-ticks.json +++ b/devenv/dev-dashboards/panel-timeseries/timeseries-yaxis-ticks.json @@ -1343,7 +1343,6 @@ } ], "refresh": "", - "revision": 1, "schemaVersion": 38, "style": "dark", "tags": [ diff --git a/devenv/docker/blocks/auth/authentik/README.md b/devenv/docker/blocks/auth/authentik/README.md index a1fda99ef52..8de63f34bff 100644 --- a/devenv/docker/blocks/auth/authentik/README.md +++ b/devenv/docker/blocks/auth/authentik/README.md @@ -8,7 +8,7 @@ Useful for testing a second implementation - [x] LDAP - [x] SAML -- [ ] OAuth +- [x] OAuth ## Deployment @@ -71,6 +71,23 @@ allow_idp_initiated = true org_mapping = admin:1:Admin, editor:1:Editor, viewer:1:Viewer ``` +# OAuth Setup + +```ini +[auth.generic_oauth] +name = authentik +enabled = true +client_id = 43e8d2746fe2e508325a23cdf816d6ddd12e94f1 +client_secret = e50440f14a010fd69dfed85bc6c071653f22c73e2c6c8d7ba96a936937d92040936b7e5a4bcc1bf40d5cf1dc019b1db327a1a00e2183c53471fb7530d4a09d7e +scopes = openid email profile +auth_url = http://localhost:9000/application/o/authorize/ +token_url = http://localhost:9000/application/o/token/ +api_url = http://localhost:9000/application/o/userinfo/ +role_attribute_path = contains(groups[*], 'admin') && 'Admin' || contains(groups[*], 'editor') && 'Editor' || 'Viewer' + +[auth] +signout_redirect_url = http://localhost:9000/application/o/grafana-oidc/end-session/ +``` ## Available users and groups diff --git a/devenv/docker/blocks/auth/authentik/cloak.sql b/devenv/docker/blocks/auth/authentik/cloak.sql index ca0e30a0860..6669bf2bf6f 100644 --- a/devenv/docker/blocks/auth/authentik/cloak.sql +++ b/devenv/docker/blocks/auth/authentik/cloak.sql @@ -118,7 +118,8 @@ CREATE TABLE public.authentik_blueprints_blueprintinstance ( last_applied_hash text NOT NULL, status text NOT NULL, enabled boolean NOT NULL, - managed_models text[] NOT NULL + managed_models text[] NOT NULL, + content text NOT NULL ); @@ -258,7 +259,8 @@ CREATE TABLE public.authentik_core_source ( enrollment_flow_id uuid, managed text, user_matching_mode text NOT NULL, - user_path_template text NOT NULL + user_path_template text NOT NULL, + icon character varying(500) ); @@ -594,7 +596,8 @@ CREATE TABLE public.authentik_flows_flow ( background character varying(500), compatibility_mode boolean NOT NULL, layout text NOT NULL, - denied_action text NOT NULL + denied_action text NOT NULL, + authentication text NOT NULL ); @@ -663,7 +666,8 @@ ALTER TABLE public.authentik_outposts_dockerserviceconnection OWNER TO authentik CREATE TABLE public.authentik_outposts_kubernetesserviceconnection ( outpostserviceconnection_ptr_id uuid NOT NULL, - kubeconfig jsonb NOT NULL + kubeconfig jsonb NOT NULL, + verify_ssl boolean NOT NULL ); @@ -778,19 +782,6 @@ CREATE TABLE public.authentik_policies_expression_expressionpolicy ( ALTER TABLE public.authentik_policies_expression_expressionpolicy OWNER TO authentik; --- --- Name: authentik_policies_hibp_haveibeenpwendpolicy; Type: TABLE; Schema: public; Owner: authentik --- - -CREATE TABLE public.authentik_policies_hibp_haveibeenpwendpolicy ( - policy_ptr_id uuid NOT NULL, - allowed_count integer NOT NULL, - password_field text NOT NULL -); - - -ALTER TABLE public.authentik_policies_hibp_haveibeenpwendpolicy OWNER TO authentik; - -- -- Name: authentik_policies_password_passwordpolicy; Type: TABLE; Schema: public; Owner: authentik -- @@ -805,10 +796,17 @@ CREATE TABLE public.authentik_policies_password_passwordpolicy ( error_message text NOT NULL, password_field text NOT NULL, amount_digits integer NOT NULL, + check_have_i_been_pwned boolean NOT NULL, + check_static_rules boolean NOT NULL, + check_zxcvbn boolean NOT NULL, + hibp_allowed_count integer NOT NULL, + zxcvbn_score_threshold integer NOT NULL, CONSTRAINT authentik_policies_pass_amount_lowercase_9d79427e_check CHECK ((amount_lowercase >= 0)), CONSTRAINT authentik_policies_pass_amount_symbols_d57af249_check CHECK ((amount_symbols >= 0)), CONSTRAINT authentik_policies_pass_amount_uppercase_7c908a32_check CHECK ((amount_uppercase >= 0)), CONSTRAINT authentik_policies_pass_length_min_7acd2128_check CHECK ((length_min >= 0)), + CONSTRAINT authentik_policies_password_passwo_zxcvbn_score_threshold_check CHECK ((zxcvbn_score_threshold >= 0)), + CONSTRAINT authentik_policies_password_passwordpo_hibp_allowed_count_check CHECK ((hibp_allowed_count >= 0)), CONSTRAINT authentik_policies_password_passwordpolicy_amount_digits_check CHECK ((amount_digits >= 0)) ); @@ -823,7 +821,7 @@ CREATE TABLE public.authentik_policies_policy ( created timestamp with time zone NOT NULL, last_updated timestamp with time zone NOT NULL, policy_uuid uuid NOT NULL, - name text, + name text NOT NULL, execution_logging boolean NOT NULL ); @@ -910,6 +908,39 @@ CREATE TABLE public.authentik_providers_ldap_ldapprovider ( ALTER TABLE public.authentik_providers_ldap_ldapprovider OWNER TO authentik; +-- +-- Name: authentik_providers_oauth2_accesstoken; Type: TABLE; Schema: public; Owner: authentik +-- + +CREATE TABLE public.authentik_providers_oauth2_accesstoken ( + id integer NOT NULL, + expires timestamp with time zone NOT NULL, + expiring boolean NOT NULL, + revoked boolean NOT NULL, + _scope text NOT NULL, + token text NOT NULL, + _id_token text NOT NULL, + provider_id integer NOT NULL, + user_id integer NOT NULL +); + + +ALTER TABLE public.authentik_providers_oauth2_accesstoken OWNER TO authentik; + +-- +-- Name: authentik_providers_oauth2_accesstoken_id_seq; Type: SEQUENCE; Schema: public; Owner: authentik +-- + +ALTER TABLE public.authentik_providers_oauth2_accesstoken ALTER COLUMN id ADD GENERATED BY DEFAULT AS IDENTITY ( + SEQUENCE NAME public.authentik_providers_oauth2_accesstoken_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + -- -- Name: authentik_providers_oauth2_authorizationcode; Type: TABLE; Schema: public; Owner: authentik -- @@ -921,7 +952,6 @@ CREATE TABLE public.authentik_providers_oauth2_authorizationcode ( _scope text NOT NULL, code character varying(255) NOT NULL, nonce text, - is_open_id boolean NOT NULL, code_challenge character varying(255), code_challenge_method character varying(255), provider_id integer NOT NULL, @@ -989,11 +1019,12 @@ CREATE TABLE public.authentik_providers_oauth2_oauth2provider ( client_secret character varying(255) NOT NULL, redirect_uris text NOT NULL, include_claims_in_id_token boolean NOT NULL, - token_validity text NOT NULL, + refresh_token_validity text NOT NULL, signing_key_id uuid, sub_mode text NOT NULL, issuer_mode text NOT NULL, - access_code_validity text NOT NULL + access_code_validity text NOT NULL, + access_token_validity text NOT NULL ); @@ -1035,12 +1066,11 @@ CREATE TABLE public.authentik_providers_oauth2_refreshtoken ( expires timestamp with time zone NOT NULL, expiring boolean NOT NULL, _scope text NOT NULL, - access_token text NOT NULL, - refresh_token character varying(255) NOT NULL, _id_token text NOT NULL, provider_id integer NOT NULL, user_id integer NOT NULL, - revoked boolean NOT NULL + revoked boolean NOT NULL, + token text NOT NULL ); @@ -1089,7 +1119,8 @@ CREATE TABLE public.authentik_providers_proxy_proxyprovider ( basic_auth_password_attribute text NOT NULL, basic_auth_user_attribute text NOT NULL, cookie_domain text NOT NULL, - mode text NOT NULL + mode text NOT NULL, + intercept_header_auth boolean NOT NULL ); @@ -1456,7 +1487,8 @@ CREATE TABLE public.authentik_stages_authenticator_validate_authenticatorvalida4 stage_ptr_id uuid NOT NULL, not_configured_action text NOT NULL, device_classes text[] NOT NULL, - last_auth_threshold text NOT NULL + last_auth_threshold text NOT NULL, + webauthn_user_verification text NOT NULL ); @@ -1518,7 +1550,9 @@ ALTER TABLE public.authentik_stages_authenticator_webauthn_webauthndevice ALTER CREATE TABLE public.authentik_stages_captcha_captchastage ( stage_ptr_id uuid NOT NULL, public_key text NOT NULL, - private_key text NOT NULL + private_key text NOT NULL, + api_url text NOT NULL, + js_url text NOT NULL ); @@ -1583,7 +1617,8 @@ ALTER TABLE public.authentik_stages_deny_denystage OWNER TO authentik; -- CREATE TABLE public.authentik_stages_dummy_dummystage ( - stage_ptr_id uuid NOT NULL + stage_ptr_id uuid NOT NULL, + throw_error boolean NOT NULL ); @@ -1670,7 +1705,8 @@ CREATE TABLE public.authentik_stages_invitation_invitation ( created_by_id integer NOT NULL, single_use boolean NOT NULL, expiring boolean NOT NULL, - name character varying(50) NOT NULL + name character varying(50) NOT NULL, + flow_id uuid ); @@ -1715,7 +1751,8 @@ CREATE TABLE public.authentik_stages_prompt_prompt ( placeholder text NOT NULL, "order" integer NOT NULL, sub_text text NOT NULL, - placeholder_expression boolean NOT NULL + placeholder_expression boolean NOT NULL, + name text NOT NULL ); @@ -1828,7 +1865,8 @@ CREATE TABLE public.authentik_stages_user_write_userwritestage ( stage_ptr_id uuid NOT NULL, create_users_as_inactive boolean NOT NULL, create_users_group_id uuid, - user_path_template text NOT NULL + user_path_template text NOT NULL, + user_creation_mode text NOT NULL ); @@ -2461,6 +2499,10 @@ COPY public.auth_permission (id, name, content_type_id, codename) FROM stdin; 354 Can change Authenticated Session 87 change_authenticatedsession 355 Can delete Authenticated Session 87 delete_authenticatedsession 356 Can view Authenticated Session 87 view_authenticatedsession +357 Can add OAuth2 Access Token 88 add_accesstoken +358 Can change OAuth2 Access Token 88 change_accesstoken +359 Can delete OAuth2 Access Token 88 delete_accesstoken +360 Can view OAuth2 Access Token 88 view_accesstoken \. @@ -2468,26 +2510,26 @@ COPY public.auth_permission (id, name, content_type_id, codename) FROM stdin; -- Data for Name: authentik_blueprints_blueprintinstance; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_blueprints_blueprintinstance (created, last_updated, managed, instance_uuid, name, metadata, path, context, last_applied, last_applied_hash, status, enabled, managed_models) FROM stdin; -2022-10-25 09:00:53.397894+00 2022-10-25 09:10:14.895369+00 \N 213482b6-347a-4595-ad7d-0840332a7cce System - OAuth2 Provider - Scopes {"name": "System - OAuth2 Provider - Scopes", "labels": {"blueprints.goauthentik.io/system": "true"}} system/providers-oauth2.yaml {} 2022-10-25 09:10:14.895374+00 02f2a78e41e3dfd1961f58670180c4cbc363a817ad2374703c6c00cb13ac7bd6384b6f43068fdec3234bc0670c2fc648d99d3a6e6605a5dcbf40e518533abb41 successful t {} -2022-10-25 09:00:53.295041+00 2022-10-25 09:10:07.067373+00 \N 2cf52321-80c1-4c45-a598-ccdd61af26aa Default - Static MFA setup flow {"name": "Default - Static MFA setup flow", "labels": {}} default/20-flow-default-authenticator-static-setup.yaml {} 2022-10-25 09:10:07.067382+00 ec0d396bdf5decb4fb877fdb4c277ea95b49ea3d39239cc3b351847e4d8b02c3852632d28bec36c8f9f643d111cde51bb442f950e3192e14d4e9f365593a4d99 successful t {} -2022-10-25 09:00:53.319721+00 2022-10-25 09:10:12.597808+00 \N 29fc34e4-d6e5-47ed-97f0-2923728a9f81 Default - Source pre-authentication flow {"name": "Default - Source pre-authentication flow", "labels": {}} default/20-flow-default-source-pre-authentication.yaml {} 2022-10-25 09:10:12.597816+00 3be5c034e166ab42d0783b72f4e744810f19b59642d8fdce37d666c02eb04782325db234cfe56eaa92fd9a706b8c230080c900fee78f4f96b7cb1b26f23cf6a6 successful t {} -2022-10-25 09:00:53.297924+00 2022-10-25 09:10:09.048117+00 \N e47fd8ed-c357-4220-bb82-16931f998fe0 Default - TOTP MFA setup flow {"name": "Default - TOTP MFA setup flow", "labels": {}} default/20-flow-default-authenticator-totp-setup.yaml {} 2022-10-25 09:10:09.048126+00 0c20cc8f15e0aa1811f4074d467819c78d91db8d7cfb490821352c4dfb886f036a2b331192afe8b53cdc897bd3599796d2b58a5f46f00705f6f6d1e11c8a9103 successful t {} -2022-10-25 09:00:53.310947+00 2022-10-25 09:10:09.618136+00 \N 1b7a73a0-43a3-4f2a-a7ee-12b0d13f4f24 Default - Source authentication flow {"name": "Default - Source authentication flow", "labels": {}} default/20-flow-default-source-authentication.yaml {} 2022-10-25 09:10:09.618142+00 ca118ec7730cc3d4bc92ba1ae24f8a48d907334eec49ad42c4879fcb4be280ad71b4d382f695eb23dc58914fda64fe99b4fa2429859730495cd3bdaa9d9bb2e7 successful t {} -2022-10-25 09:00:53.350088+00 2022-10-25 09:10:16.645135+00 \N 92453927-91a0-4b15-8333-b2da469353d7 Default - Out-of-box-experience flow {"name": "Default - Out-of-box-experience flow", "labels": {}} default/91-flow-oobe.yaml {} 2022-10-25 09:10:16.64514+00 438cbcda03cf8ede7626243ae323c52122188a11cb36a4aa558aa75b28b74994577099c8884b7527c4ef97417e62e17e13edd6f7a1984c8f7306f9a4fe81f020 successful t {} -2022-10-25 09:00:53.340402+00 2022-10-25 09:10:17.999704+00 \N f08f67f4-fbd6-418d-bf24-e228ca2ae34e Default - Tenant {"name": "Default - Tenant", "labels": {}} default/90-default-tenant.yaml {} 2022-10-25 09:10:17.999712+00 e344cbc00fb28d259089011b56d7973851d04234d74b4c5d4dd2b84fcb9bb26c70142dafa927a768631810e2c08a65823fde450cc1e28c177be08e43f89ecf9f successful t {} -2022-10-25 09:00:53.303808+00 2022-10-25 09:10:10.30174+00 \N 8f64e59f-b41e-4c84-891b-492df2873c7b Default - Provider authorization flow (explicit consent) {"name": "Default - Provider authorization flow (explicit consent)", "labels": {}} default/20-flow-default-provider-authorization-explicit-consent.yaml {} 2022-10-25 09:10:10.301745+00 515b2493dce33295f2ed2a9c68a0b50815f086edee432fc6ae2c21f96b8606a740d2c256a80fc514a6c46105b7c3a102d40ce72c42b876e47ba524070a7b3ec2 successful t {} -2022-10-25 09:00:53.300852+00 2022-10-25 09:10:09.380141+00 \N 658a7307-9f70-4d89-93ea-b6160a092741 Default - WebAuthn MFA setup flow {"name": "Default - WebAuthn MFA setup flow", "labels": {}} default/20-flow-default-authenticator-webauthn-setup.yaml {} 2022-10-25 09:10:09.380148+00 724f3df60bc58369d62fb8437bd38560e1fb7478f36a643c8925cd121d0c089a6fedc150070bc53a73fa9a1d9e83cdb169ad4eec3a712f3d089ef53125f88b6b successful t {} -2022-10-25 09:00:53.306829+00 2022-10-25 09:10:11.692596+00 \N a463e186-ff86-4d2e-8c04-700e05a741af Default - Provider authorization flow (implicit consent) {"name": "Default - Provider authorization flow (implicit consent)", "labels": {}} default/20-flow-default-provider-authorization-implicit-consent.yaml {} 2022-10-25 09:10:11.692609+00 126a6e208444e72157a589302dbe7be1a2144e6e762d9c73baf07eb2f0a2bce45198235e42191964bcead4a962a7b223231acc303c5206aebcef3930dbe4656c successful t {} -2022-10-25 09:00:53.406863+00 2022-10-25 09:10:18.979063+00 \N c447f75b-a332-422c-a7dd-74bae02281ef System - SAML Provider - Mappings {"name": "System - SAML Provider - Mappings", "labels": {"blueprints.goauthentik.io/system": "true"}} system/providers-saml.yaml {} 2022-10-25 09:10:18.979067+00 15301d80ffa95fa0c37bc14fe3b5aaa74224a5998f82cdbd1a701ab96f05290b05dcee25df7053282c516383a6ba9890cbaac11aeca0fe1f9717f24e3d819ae3 successful t {} -2022-10-25 09:00:53.335974+00 2022-10-25 09:10:14.729439+00 \N 1217d36b-4f47-4ae1-9a5b-d65fdd507895 Default - Events Transport & Rules {"name": "Default - Events Transport & Rules", "labels": {}} default/40-events-default.yaml {} 2022-10-25 09:10:14.729446+00 2064655bcf32b92e6ca7cc8bc5c872c76937b708a25607f25586c55f2bbe1fe410ea5287f75d90dc6defaeaf0e3f9e2a933a34b8ef5a49b2abdadf1a8c92c9d7 successful t {} -2022-10-25 09:00:53.400474+00 2022-10-25 09:10:17.189551+00 \N de836c31-6248-4155-b6d2-94f8e81ba828 System - Proxy Provider - Scopes {"name": "System - Proxy Provider - Scopes", "labels": {"blueprints.goauthentik.io/system": "true"}} system/providers-proxy.yaml {} 2022-10-25 09:10:17.189557+00 c92fa491977a1a528005dd11953a6c524ae91cbb8f390938a8083211df02428168c883e75ce3b4a76484cad89310633ef34f2a8a6a272b27e1a53914ea53a8d5 successful t {} -2022-10-25 09:00:53.328036+00 2022-10-25 09:10:17.987802+00 \N 2cf975a1-1f35-4976-aaaa-b3a62d0b0c8d Default - User settings flow {"name": "Default - User settings flow", "labels": {}} default/30-flow-default-user-settings-flow.yaml {} 2022-10-25 09:10:17.987806+00 a5288e994e544ec8a37722ffd3484b893fc6c5ec689ef62450da8bab1c67af0d2a9c0b137387b43f2053d6b3f2c01c4e9f33d9f680416e1940f25323451b664a successful t {} -2022-10-25 09:00:53.413147+00 2022-10-25 09:10:19.535643+00 \N 6c91b3d1-2c5f-435e-b678-cb1b061cb9d8 System - LDAP Source - Mappings {"name": "System - LDAP Source - Mappings", "labels": {"blueprints.goauthentik.io/system": "true"}} system/sources-ldap.yaml {} 2022-10-25 09:10:19.535647+00 a764c21c655e7c65bc93ae1ddd839cea9b4726a41ad2b7ca70323d48b0676beda6a67a3b8274cfaa65ed0f4cc5c089a44aeead66ef4579c78c5761861577bbe2 successful t {} -2022-10-25 09:00:53.291824+00 2022-10-25 09:10:17.864408+00 \N f999866c-2729-44cd-aee3-53e3df227bd6 Default - Invalidation flow {"name": "Default - Invalidation flow", "labels": {}} default/10-flow-default-invalidation-flow.yaml {} 2022-10-25 09:10:17.864412+00 d9226b45bce626036c2fdbd22a0bf9619b1f9cf9c4ad455381627643a000586d8c5d5f605b82df1775336a758529595e70eb29531e28c0e20a9f6dba79c8bd6a successful t {} -2022-10-25 09:00:53.317415+00 2022-10-25 09:10:12.218147+00 \N 157ef54a-3fc7-4529-81c1-17fb0e83c451 Default - Source enrollment flow {"name": "Default - Source enrollment flow", "labels": {}} default/20-flow-default-source-enrollment.yaml {} 2022-10-25 09:10:12.218151+00 cb2f4f1bdc25e16c15cc4ec8d6eee0322867dd6cffa8ea3b92de716c737e4131e669692c47d86c7a4a8ec6b0e30eadf1b49d607863f49dcc2718815f20935ea3 successful t {} -2022-10-25 09:00:53.281978+00 2022-10-25 09:10:17.748151+00 \N 69074314-6974-4913-ba5d-48c1496c0f64 Default - Password change flow {"name": "Default - Password change flow", "labels": {}} default/0-flow-password-change.yaml {} 2022-10-25 09:10:17.748155+00 0be8cfcc5e9f619eab59f3eaf13c1ec94d1a73b2357cb7d62acb35d23cb4fc2dcbecc055c8df048a2f8d44a537e672936463d3dc02cc15e9a2f31de62ddc9a3c successful t {} -2022-10-25 09:00:53.288147+00 2022-10-25 09:10:17.817575+00 \N 714dc451-7831-4016-b8e8-4e2e050233e1 Default - Authentication flow {"name": "Default - Authentication flow", "labels": {}} default/10-flow-default-authentication-flow.yaml {} 2022-10-25 09:10:17.817579+00 eb9af60243f762b4288943af5d25f4be6633444b54be1e84a9d850ee0cf84c05c45abd0321b71587619593508b49dde279788517231bd114f10350cfcaefa272 successful t {} +COPY public.authentik_blueprints_blueprintinstance (created, last_updated, managed, instance_uuid, name, metadata, path, context, last_applied, last_applied_hash, status, enabled, managed_models, content) FROM stdin; +2022-10-25 09:00:53.397894+00 2022-10-25 09:10:14.895369+00 \N 213482b6-347a-4595-ad7d-0840332a7cce System - OAuth2 Provider - Scopes {"name": "System - OAuth2 Provider - Scopes", "labels": {"blueprints.goauthentik.io/system": "true"}} system/providers-oauth2.yaml {} 2022-10-25 09:10:14.895374+00 02f2a78e41e3dfd1961f58670180c4cbc363a817ad2374703c6c00cb13ac7bd6384b6f43068fdec3234bc0670c2fc648d99d3a6e6605a5dcbf40e518533abb41 successful t {} +2022-10-25 09:00:53.310947+00 2022-10-25 09:10:09.618136+00 \N 1b7a73a0-43a3-4f2a-a7ee-12b0d13f4f24 Default - Source authentication flow {"name": "Default - Source authentication flow", "labels": {}} default/20-flow-default-source-authentication.yaml {} 2022-10-25 09:10:09.618142+00 ca118ec7730cc3d4bc92ba1ae24f8a48d907334eec49ad42c4879fcb4be280ad71b4d382f695eb23dc58914fda64fe99b4fa2429859730495cd3bdaa9d9bb2e7 successful t {} +2022-10-25 09:00:53.350088+00 2022-10-25 09:10:16.645135+00 \N 92453927-91a0-4b15-8333-b2da469353d7 Default - Out-of-box-experience flow {"name": "Default - Out-of-box-experience flow", "labels": {}} default/91-flow-oobe.yaml {} 2022-10-25 09:10:16.64514+00 438cbcda03cf8ede7626243ae323c52122188a11cb36a4aa558aa75b28b74994577099c8884b7527c4ef97417e62e17e13edd6f7a1984c8f7306f9a4fe81f020 successful t {} +2022-10-25 09:00:53.340402+00 2022-10-25 09:10:17.999704+00 \N f08f67f4-fbd6-418d-bf24-e228ca2ae34e Default - Tenant {"name": "Default - Tenant", "labels": {}} default/90-default-tenant.yaml {} 2022-10-25 09:10:17.999712+00 e344cbc00fb28d259089011b56d7973851d04234d74b4c5d4dd2b84fcb9bb26c70142dafa927a768631810e2c08a65823fde450cc1e28c177be08e43f89ecf9f successful t {} +2022-10-25 09:00:53.406863+00 2022-10-25 09:10:18.979063+00 \N c447f75b-a332-422c-a7dd-74bae02281ef System - SAML Provider - Mappings {"name": "System - SAML Provider - Mappings", "labels": {"blueprints.goauthentik.io/system": "true"}} system/providers-saml.yaml {} 2022-10-25 09:10:18.979067+00 15301d80ffa95fa0c37bc14fe3b5aaa74224a5998f82cdbd1a701ab96f05290b05dcee25df7053282c516383a6ba9890cbaac11aeca0fe1f9717f24e3d819ae3 successful t {} +2022-10-25 09:00:53.335974+00 2022-10-25 09:10:14.729439+00 \N 1217d36b-4f47-4ae1-9a5b-d65fdd507895 Default - Events Transport & Rules {"name": "Default - Events Transport & Rules", "labels": {}} default/40-events-default.yaml {} 2022-10-25 09:10:14.729446+00 2064655bcf32b92e6ca7cc8bc5c872c76937b708a25607f25586c55f2bbe1fe410ea5287f75d90dc6defaeaf0e3f9e2a933a34b8ef5a49b2abdadf1a8c92c9d7 successful t {} +2022-10-25 09:00:53.400474+00 2022-10-25 09:10:17.189551+00 \N de836c31-6248-4155-b6d2-94f8e81ba828 System - Proxy Provider - Scopes {"name": "System - Proxy Provider - Scopes", "labels": {"blueprints.goauthentik.io/system": "true"}} system/providers-proxy.yaml {} 2022-10-25 09:10:17.189557+00 c92fa491977a1a528005dd11953a6c524ae91cbb8f390938a8083211df02428168c883e75ce3b4a76484cad89310633ef34f2a8a6a272b27e1a53914ea53a8d5 successful t {} +2022-10-25 09:00:53.328036+00 2022-10-25 09:10:17.987802+00 \N 2cf975a1-1f35-4976-aaaa-b3a62d0b0c8d Default - User settings flow {"name": "Default - User settings flow", "labels": {}} default/30-flow-default-user-settings-flow.yaml {} 2022-10-25 09:10:17.987806+00 a5288e994e544ec8a37722ffd3484b893fc6c5ec689ef62450da8bab1c67af0d2a9c0b137387b43f2053d6b3f2c01c4e9f33d9f680416e1940f25323451b664a successful t {} +2022-10-25 09:00:53.413147+00 2022-10-25 09:10:19.535643+00 \N 6c91b3d1-2c5f-435e-b678-cb1b061cb9d8 System - LDAP Source - Mappings {"name": "System - LDAP Source - Mappings", "labels": {"blueprints.goauthentik.io/system": "true"}} system/sources-ldap.yaml {} 2022-10-25 09:10:19.535647+00 a764c21c655e7c65bc93ae1ddd839cea9b4726a41ad2b7ca70323d48b0676beda6a67a3b8274cfaa65ed0f4cc5c089a44aeead66ef4579c78c5761861577bbe2 successful t {} +2022-10-25 09:00:53.317415+00 2022-10-25 09:10:12.218147+00 \N 157ef54a-3fc7-4529-81c1-17fb0e83c451 Default - Source enrollment flow {"name": "Default - Source enrollment flow", "labels": {}} default/20-flow-default-source-enrollment.yaml {} 2022-10-25 09:10:12.218151+00 cb2f4f1bdc25e16c15cc4ec8d6eee0322867dd6cffa8ea3b92de716c737e4131e669692c47d86c7a4a8ec6b0e30eadf1b49d607863f49dcc2718815f20935ea3 successful t {} +2022-10-25 09:00:53.281978+00 2022-10-25 09:10:17.748151+00 \N 69074314-6974-4913-ba5d-48c1496c0f64 Default - Password change flow {"name": "Default - Password change flow", "labels": {}} default/0-flow-password-change.yaml {} 2022-10-25 09:10:17.748155+00 0be8cfcc5e9f619eab59f3eaf13c1ec94d1a73b2357cb7d62acb35d23cb4fc2dcbecc055c8df048a2f8d44a537e672936463d3dc02cc15e9a2f31de62ddc9a3c successful t {} +2022-10-25 09:00:53.288147+00 2022-10-25 09:10:17.817575+00 \N 714dc451-7831-4016-b8e8-4e2e050233e1 Default - Authentication flow {"name": "Default - Authentication flow", "labels": {}} default/10-flow-default-authentication-flow.yaml {} 2022-10-25 09:10:17.817579+00 eb9af60243f762b4288943af5d25f4be6633444b54be1e84a9d850ee0cf84c05c45abd0321b71587619593508b49dde279788517231bd114f10350cfcaefa272 successful t {} +2022-10-25 09:00:53.297924+00 2023-03-13 09:19:05.28134+00 \N e47fd8ed-c357-4220-bb82-16931f998fe0 Default - TOTP MFA setup flow {"name": "Default - TOTP MFA setup flow", "labels": {}} default/20-flow-default-authenticator-totp-setup.yaml {} 2023-03-13 09:19:05.281345+00 43d2dcce568cbbe0f5409f52e2250ce4aa28ca34049cfc6f284070a2c28f81e85bb11fcf797f171beb1cb7aa15d70f26175ba9010b615563cac6057fc2563104 successful t {} +2022-10-25 09:00:53.300852+00 2023-03-13 09:19:06.955701+00 \N 658a7307-9f70-4d89-93ea-b6160a092741 Default - WebAuthn MFA setup flow {"name": "Default - WebAuthn MFA setup flow", "labels": {}} default/20-flow-default-authenticator-webauthn-setup.yaml {} 2023-03-13 09:19:06.955709+00 67ef724536f41c451b9a88edd01100bd9ba4460f41b88f86a1385f9df30617371d0ddb610526b0a93aa32b9918475a63db03dfcf57bf7d0b02e7b509f9d35870 successful t {} +2022-10-25 09:00:53.306829+00 2023-03-13 09:19:07.746788+00 \N a463e186-ff86-4d2e-8c04-700e05a741af Default - Provider authorization flow (implicit consent) {"name": "Default - Provider authorization flow (implicit consent)", "labels": {}} default/20-flow-default-provider-authorization-implicit-consent.yaml {} 2023-03-13 09:19:07.746797+00 2321088d922a57fdb741f6857eb48d3090210b552a6ecadf9b08de4832f574c5231f37943da3dfda3a4fa07c900d236ace3d237710e2e986a207c758859c1ecb successful t {} +2022-10-25 09:00:53.319721+00 2023-03-13 09:19:08.143754+00 \N 29fc34e4-d6e5-47ed-97f0-2923728a9f81 Default - Source pre-authentication flow {"name": "Default - Source pre-authentication flow", "labels": {}} default/20-flow-default-source-pre-authentication.yaml {} 2023-03-13 09:19:08.143761+00 51b6b65fb60f2f925d80b38cf173e7aa1bc00a074990e8d0b0dfaae088007ceb9051d0722f41500da309af5d0c78417dfa08a40c706203c3d6ee1eb613ad564c successful t {} +2022-10-25 09:00:53.295041+00 2023-03-13 09:19:05.301487+00 \N 2cf52321-80c1-4c45-a598-ccdd61af26aa Default - Static MFA setup flow {"name": "Default - Static MFA setup flow", "labels": {}} default/20-flow-default-authenticator-static-setup.yaml {} 2023-03-13 09:19:05.301492+00 552f08718b573593e1b643f47734a1c185d7bc9efbea9c8d3dc49e6fd5060cd979098637fa20d958f4c3c9ff375e0fde3b871c956b87ebfbb1fb9319ba073bcb successful t {} +2022-10-25 09:00:53.303808+00 2023-03-13 09:19:07.800567+00 \N 8f64e59f-b41e-4c84-891b-492df2873c7b Default - Provider authorization flow (explicit consent) {"name": "Default - Provider authorization flow (explicit consent)", "labels": {}} default/20-flow-default-provider-authorization-explicit-consent.yaml {} 2023-03-13 09:19:07.800573+00 598eee861d8814c0dc200542f59e5d8085c140f7131e87a9fc6baf688a3e9e7b0a32e865c439084f76b11992ce056be574e5aba2664375cee287206d66d345c9 successful t {} +2022-10-25 09:00:53.291824+00 2023-03-13 09:19:04.593543+00 \N f999866c-2729-44cd-aee3-53e3df227bd6 Default - Invalidation flow {"name": "Default - Invalidation flow", "labels": {}} default/10-flow-default-invalidation-flow.yaml {} 2023-03-13 09:19:04.593549+00 a143bf2b9a1d20e2078389f7c37d213e51c52ea6a8df8f8ae7a7e6a1bb129ec4b862803aa44b8b1dbfe727e98e45cedac7a1a03632065040c87f045dcabab86a successful t {} \. @@ -2498,6 +2540,7 @@ COPY public.authentik_blueprints_blueprintinstance (created, last_updated, manag COPY public.authentik_core_application (policybindingmodel_ptr_id, name, slug, meta_launch_url, meta_description, meta_publisher, provider_id, meta_icon, "group", open_in_new_tab) FROM stdin; 77d294b5-8a50-4d6d-8edd-5b15e5871826 Grafana grafana 1 t 506b1180-4069-4dda-9405-e185f355c34d Grafana SAML grafana-saml 2 t +d7dfa1d6-58cb-4bfc-94c5-38a2e507e290 Grafana OIDC grafana-oidc 3 f \. @@ -2506,8 +2549,29 @@ COPY public.authentik_core_application (policybindingmodel_ptr_id, name, slug, m -- COPY public.authentik_core_authenticatedsession (expires, expiring, uuid, session_key, last_ip, last_user_agent, last_used, user_id) FROM stdin; -2023-01-16 14:16:55.806987+00 t b7327320-c234-46b6-a1ee-05ca2d8e6871 zhvx6kegjga3td4qm1baw0nl6v6vidqd 172.24.0.1 Mozilla/5.0 (X11; Linux x86_64; rv:108.0) Gecko/20100101 Firefox/108.0 2023-01-02 14:16:55.807308+00 1 -2023-01-16 16:38:22.075322+00 t f785c0cb-0a2c-4b03-8f0d-5577684f3e8e av8uhyv2bz1v0g09wti608pzujwin3fh 172.24.0.1 Mozilla/5.0 (X11; Linux x86_64; rv:108.0) Gecko/20100101 Firefox/108.0 2023-01-02 16:38:22.07557+00 5 +2023-03-27 09:19:36.714022+00 t 33fe8ba2-6652-46bc-992f-97edf89c9024 pnrgpcmuzjc6jd2ae4z3242v4le8s4dq 172.21.0.1 Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/111.0 2023-03-13 09:19:36.714338+00 1 +2023-03-27 09:20:56.674782+00 t db2c32ff-209a-4d71-a3c0-0dee0e024878 xps84azhqco49sstac6uj8jsjm9djtky 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:20:56.675277+00 6 +2023-03-27 09:21:58.815582+00 t fb2c4db2-c31e-4381-ba85-67828f436acc mwee9onydg2kpu2bg3pth8al2zv6jlve 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:21:58.815791+00 6 +2023-03-27 09:22:06.761376+00 t b183a313-ee3f-4e6f-b40a-d895aecbba25 1hhujbpdfb5muhahlo90s8523scor7dy 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:22:06.761575+00 6 +2023-03-27 09:22:07.83058+00 t 23261a68-1274-45cf-84c8-57591f5f13d0 2usmu6zxqajue9y7gl40brm34zh8jyhu 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:22:07.830772+00 8 +2023-03-27 09:26:00.688+00 t a1ea049c-5a2a-444f-bb0f-46f0cc1b83c2 t7k0uvsutwv5j7belns84z00di5bax5b 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:26:00.688213+00 6 +2023-03-27 09:27:12.748587+00 t c91473b6-670e-471f-8fdd-342a912c26a3 twvhclnfbrpdro8g787rhchxsdw99vpy 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:27:12.748761+00 6 +2023-03-27 09:33:04.047499+00 t b7d2c069-b68c-4674-b542-49ee8bcab49c 7anpa8pum56ecu84q910ey1tdgqt0l7a 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:33:04.048038+00 6 +2023-03-27 09:36:00.677614+00 t 1b7369c6-423c-4619-a95a-554fea065bb9 asz3sdzh4l8jap3v5fwobm0p3ryb3m6z 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:36:00.677783+00 6 +2023-03-27 09:38:09.280265+00 t 1d06b319-18fe-40a8-88b9-09a0fad5e9e7 wgivmdoyjh4j3lk4o35lxe1rgr4mtiiz 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:38:09.280422+00 6 +2023-03-27 09:46:00.676548+00 t 21e81f59-9584-489a-ae72-1c9be3788b5f 4ssznhrdtmibayofismpmq9pi4ji1z8y 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:46:00.676691+00 6 +2023-03-27 09:56:00.696737+00 t 7fefc723-7eb0-49c2-91dd-1b1c761f6863 vservymrqbrg4iqtr3tq2u3770fi9m5w 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 09:56:00.696955+00 6 +2023-03-27 12:15:42.983641+00 t 20e56a62-42d9-4a85-9354-8ecd546adc82 4u7n2w39blisa36ljoltvi1mnvn6k7rt 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 12:15:42.983795+00 6 +2023-03-27 12:16:00.756786+00 t 543a5423-0540-4a97-bea8-dd1a2fc1ef20 tlhzjzc8dus5akchnm7e3ivh2t8a7z5o 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 12:16:00.756966+00 6 +2023-03-27 12:16:25.282349+00 t 79648ae0-368e-4b54-ab74-bf8508f99c3b izckm6qrlxf200ikhmp245gw1ud1jni2 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 12:16:25.282588+00 6 +2023-03-27 12:17:03.669358+00 t f743c44b-7c71-488c-a065-d5e217fa5307 fuywipgbmgx1wzyf8654z1dniyy6yl9y 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 12:17:03.669511+00 6 +2023-03-27 12:17:27.480927+00 t 0da81503-cba6-44f5-a1ea-b81a43c8cdac 7icfpl80xx04jmth4untnhgznjw1jjcp 172.21.0.1 Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/111.0 2023-03-13 12:17:27.481193+00 8 +2023-03-27 12:22:20.180659+00 t 5df911c2-797f-4b77-82d2-fa66bdb251d0 ledovmptzdsj60tfv4irprijdaycu19d 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 12:22:20.180803+00 6 +2023-03-27 12:22:37.470262+00 t 21fcd520-e1d7-45bc-9691-6c14e51b4a1b gznzvsfyrfjr6i8qt5oyggutd89mzi19 172.21.0.1 Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/111.0 2023-03-13 12:22:37.470585+00 8 +2023-03-27 12:35:42.672958+00 t 6674325a-4a57-4ae3-995f-c0769c7cb5c2 ookwxmfok1k9id4jediu5030pvrdnzoj 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 12:35:42.673195+00 6 +2023-03-27 12:36:00.775286+00 t bb8317b6-8aab-44bd-9762-bb0a5cdd6854 qg1f4o9q2yihtvuejx8rz0exgcoxgxcq 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 12:36:00.775486+00 6 +2023-03-27 12:36:31.723397+00 t 42645d7c-a570-44e0-a030-d3078b54d978 m7skhobmxdhmrk4c3ne1yq6xbvfzrp29 172.21.0.1 Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/111.0 2023-03-13 12:36:31.723588+00 8 +2023-03-27 12:40:53.868898+00 t 4ba1f1c1-b066-4c1f-b483-b6cd3484f634 h2zyqqyoe9kxch9blcb8e42xzagr3r02 172.21.0.1 goauthentik.io/outpost/2023.1.2 2023-03-13 12:40:53.869061+00 6 \. @@ -2559,6 +2623,7 @@ e8809202-4ff0-4086-b078-196e6152e826 authentik default OpenLDAP Mapping: cn retu COPY public.authentik_core_provider (id, authorization_flow_id, name) FROM stdin; 1 87ca9599-5323-451c-8603-2f5bee7a0c12 grafana-ldap 2 a7ef54bb-7959-4559-979d-9345c022e086 grafana-saml +3 a7ef54bb-7959-4559-979d-9345c022e086 grafana-oidc \. @@ -2574,6 +2639,9 @@ COPY public.authentik_core_provider_property_mappings (id, provider_id, property 5 2 c5d93ce6-8cda-42fa-9c19-3837ba67788a 6 2 765b25ee-0e8b-4394-a56c-e27abf68f5ce 7 2 b3fa1ee7-9507-4869-a29a-3c17c2482839 +8 3 a4825145-a8d1-4fbf-b88c-70d8cc801a4a +9 3 9c13a34a-6007-4846-8c28-11d6dbd235c7 +10 3 7446364c-faec-4cab-9191-beb2889d47b7 \. @@ -2581,8 +2649,8 @@ COPY public.authentik_core_provider_property_mappings (id, provider_id, property -- Data for Name: authentik_core_source; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_core_source (policybindingmodel_ptr_id, name, slug, enabled, authentication_flow_id, enrollment_flow_id, managed, user_matching_mode, user_path_template) FROM stdin; -0e32dc99-655c-42f4-aca4-f3f271e010fd authentik Built-in authentik-built-in t \N \N goauthentik.io/sources/inbuilt identifier goauthentik.io/sources/%(slug)s +COPY public.authentik_core_source (policybindingmodel_ptr_id, name, slug, enabled, authentication_flow_id, enrollment_flow_id, managed, user_matching_mode, user_path_template, icon) FROM stdin; +0e32dc99-655c-42f4-aca4-f3f271e010fd authentik Built-in authentik-built-in t \N \N goauthentik.io/sources/inbuilt identifier goauthentik.io/sources/%(slug)s \. @@ -2611,12 +2679,12 @@ COPY public.authentik_core_token (token_uuid, expires, expiring, description, us COPY public.authentik_core_user (id, password, last_login, username, first_name, last_name, email, is_active, date_joined, uuid, name, password_change_date, attributes, path) FROM stdin; 2 !n7aLj0jKk3WIaSvfbaqM1nyy6fWejHsM54lRFljX \N AnonymousUser t 2022-10-25 09:01:03.467789+00 fe23113c-e658-40b0-872b-d522b6d84e95 2022-10-25 09:01:03.468042+00 {} users 7 pbkdf2_sha256$390000$s67BmqSPGYWQPDnZ01phY4$ky7qvH0SBsnsqeEM19AB0B4Ki8zIcmfshf7/r7aiodE= \N authentik-viewer authentik-viewer@localhost t 2022-10-25 09:56:58.979268+00 ee7aa163-4303-4c2d-99c7-293ffd9d08dd authentik-viewer 2022-10-25 09:57:13.55852+00 {} users -8 pbkdf2_sha256$390000$g9w4rydmb2SLrzWYyInNZZ$W5G+Y2iayJp1KIp9wHuiozJ79Mdibo3zFx+Zxvofm5s= \N authentik-editor authentik-editor@localhost t 2022-10-25 09:57:43.64112+00 3678963f-023e-48b3-97a1-0910b4fbbfea authentik-editor 2022-10-25 09:57:54.40015+00 {} users -6 pbkdf2_sha256$390000$k0Ykknoutfj56D2AaJFxWJ$bmAmMoNISoYnUn+DQnepRd39Mp1pnY74yfAoiHwRYRc= 2022-10-25 09:54:00.207978+00 ldapservice ldapservice@localhost t 2022-10-25 09:49:18.218809+00 94fafa12-9abd-4567-9627-3c6998f38cca ldapservice 2022-10-25 09:49:50.76013+00 {} users -1 pbkdf2_sha256$390000$c4McOkDtg2Hps9uyXGdezW$8g7sh3praXa6Jo1AHfrng1dsf8dktric2hQYlUyAGyY= 2023-01-02 14:16:55.816269+00 akadmin admin@localhost t 2022-10-25 09:00:53.707692+00 d719cb26-008d-4bff-8f5c-13d1bf53de25 authentik Default Admin 2022-10-25 09:09:42.841946+00 {} users 5 pbkdf2_sha256$390000$GmvsVEytoLZGHoKB8LdomP$Xi06ESYoLZ/ijL0FZDT964KM9C9WoPhQtv6Rfl3b6Nc= 2023-01-02 16:38:22.084529+00 authentik-admin authentik-admin@localhost t 2022-10-25 09:37:30.689793+00 a7d3e4ed-8b75-456f-b3aa-f53f45afd3a4 authentik-admin 2022-10-25 09:37:49.480346+00 {} users -3 !8j4wiqLzHmjS9fUEU0e0DsXx4z8Cj8W6lXnOCbo3 \N ak-outpost-0c24aadcf97e4720a70f72a190b0cafc t 2022-10-25 09:01:07.984838+00 b9835bf9-2711-41ef-86d2-b07124b9fef9 Outpost authentik Embedded Outpost Service-Account 2022-10-25 09:01:07.98507+00 {"goauthentik.io/user/override-ips": true, "goauthentik.io/user/service-account": true} goauthentik.io/outposts 4 !yrI1uXKCdF0svOmz83ldwXJnWMOUY8oY52dzYNT1 \N ak-outpost-efe635b92ce74de4977f9f25b9f36d97 t 2022-10-25 09:13:37.843347+00 a7dc29a9-11b7-4d35-aec1-260ae1ea62f5 Outpost ldap-outpost Service-Account 2022-10-25 09:13:37.843557+00 {"goauthentik.io/user/override-ips": true, "goauthentik.io/user/service-account": true} goauthentik.io/outposts +6 pbkdf2_sha256$390000$k0Ykknoutfj56D2AaJFxWJ$bmAmMoNISoYnUn+DQnepRd39Mp1pnY74yfAoiHwRYRc= 2023-03-13 12:40:53.895342+00 ldapservice ldapservice@localhost t 2022-10-25 09:49:18.218809+00 94fafa12-9abd-4567-9627-3c6998f38cca ldapservice 2022-10-25 09:49:50.76013+00 {} users +1 pbkdf2_sha256$390000$c4McOkDtg2Hps9uyXGdezW$8g7sh3praXa6Jo1AHfrng1dsf8dktric2hQYlUyAGyY= 2023-03-13 09:19:36.730646+00 akadmin admin@localhost t 2022-10-25 09:00:53.707692+00 d719cb26-008d-4bff-8f5c-13d1bf53de25 authentik Default Admin 2022-10-25 09:09:42.841946+00 {} users +3 !8j4wiqLzHmjS9fUEU0e0DsXx4z8Cj8W6lXnOCbo3 \N ak-outpost-0c24aadcf97e4720a70f72a190b0cafc t 2022-10-25 09:01:07.984838+00 b9835bf9-2711-41ef-86d2-b07124b9fef9 Outpost authentik Embedded Outpost Service-Account 2022-10-25 09:01:07.98507+00 {"goauthentik.io/user/override-ips": true, "goauthentik.io/user/service-account": true} goauthentik.io/outposts +8 pbkdf2_sha256$390000$g9w4rydmb2SLrzWYyInNZZ$W5G+Y2iayJp1KIp9wHuiozJ79Mdibo3zFx+Zxvofm5s= 2023-03-13 12:36:31.74172+00 authentik-editor authentik-editor@localhost t 2022-10-25 09:57:43.64112+00 3678963f-023e-48b3-97a1-0910b4fbbfea authentik-editor 2022-10-25 09:57:54.40015+00 {} users \. @@ -2764,6 +2832,7 @@ c1d32b85-3711-44c1-bd8b-918eba2599e2 system_task_exception authentik.events.moni a2a95f65-9f92-496e-b577-55c844b90891 model_updated authentik.events.signals {"model": {"pk": 2, "app": "authentik_providers_saml", "name": "grafana-saml", "model_name": "samlprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/saml/2/", "method": "PUT"}} 172.24.0.1 2023-01-02 14:22:28.185263+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 14:22:28.184795+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} 95797e9f-e818-4f5d-9fdb-2d499833ae4c model_updated authentik.events.signals {"model": {"pk": 2, "app": "authentik_providers_saml", "name": "grafana-saml", "model_name": "samlprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/saml/2/", "method": "PUT"}} 172.24.0.1 2023-01-02 14:23:24.663957+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 14:23:24.663405+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} aa49c5e8-b508-4046-907e-cfdca67edf75 configuration_error authentik.providers.saml.views.sso {"message": "Failed to verify signature", "provider": {"pk": 2, "app": "authentik_providers_saml", "name": "grafana-saml", "model_name": "samlprovider"}} \N 2023-01-02 16:20:27.103437+00 {} 2024-01-02 16:20:27.102874+00 t {"pk": "69cc7a86348f4144973b0cbaaea44e3f", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +d0c607f5-b34e-4c87-bfe3-86b6af93bff8 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:32.449521+00 {} 2024-03-12 09:19:32.448974+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} 9aac6d1c-02e9-4e51-b705-85a86f1919df system_task_exception authentik.events.monitored_tasks {"message": "Task notification_transport encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n File \\"/usr/local/lib/python3.10/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.10/site-packages/sentry_sdk/_compat.py\\", line 56, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.10/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/autoretry.py\\", line 54, in run\\n ret = task.retry(exc=exc, **retry_kwargs)\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/task.py\\", line 717, in retry\\n raise_with_context(exc)\\n File \\"/usr/local/lib/python3.10/site-packages/celery/app/autoretry.py\\", line 34, in run\\n return task._orig_run(*args, **kwargs)\\n File \\"/authentik/events/tasks.py\\", line 130, in notification_transport\\n raise exc\\n File \\"/authentik/events/tasks.py\\", line 126, in notification_transport\\n transport.send(notification)\\n File \\"/authentik/events/models.py\\", line 341, in send\\n return self.send_email(notification)\\n File \\"/authentik/events/models.py\\", line 463, in send_email\\n raise NotificationTransportError from exc\\nauthentik.events.models.NotificationTransportError: "} \N 2023-01-02 16:20:32.525925+00 {} 2024-01-02 16:20:32.524994+00 t {"pk": "3fe5e3c1df6f42e1a4a934178957c3b6", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} d93d9f43-d318-4f57-8fc5-58859aafd0a6 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": ""}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.24.0.1 2023-01-02 16:20:39.35962+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:20:39.358773+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} 9a1859e1-089a-46c9-a2a9-5ca91e1a14da model_updated authentik.events.signals {"model": {"pk": 2, "app": "authentik_providers_saml", "name": "grafana-saml", "model_name": "samlprovider"}, "http_request": {"args": {}, "path": "/api/v3/providers/saml/2/", "method": "PUT"}} 172.24.0.1 2023-01-02 16:21:00.718418+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:21:00.717578+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} @@ -2780,6 +2849,157 @@ c5efd86a-6999-4a7b-8fd9-305b26d96bc6 login authentik.events.signals {"auth_metho 0ffd3d0e-31f3-4b55-bdf7-d00160afcfdc authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBb9swDIX%2FiqC7I1t2U0%2BoDWQNhgXotqDJdtiNlelGgCx5Ir2t%2F36ImwEZMPjQoyS%2B94mPvCMY%2FGg2E5%2FCI%2F6YkFj8Hnwgc35o5JSCiUCOTIABybA1h82nB6NXuQEiTOxikFeScVkzpsjRRi%2FFbttI12VY6luLsF5bjbaobxHqQvc3T1VVV7qsir4rboq%2BRim%2BYSIXQyP1KpdiRzThLhBD4EbqXJdZXmS5PhZrU9am0Kt19V2KLRK7ADwLT8yjUcpHC%2F4Uic27PM8VjKN3di5R5w7Uc4IeAmTzgSiqJxc6F55Vws4ltKyk2Pzt%2FT4GmgZMB0w%2FncWvjw%2F%2F4ZRnzmwHlqTYX0J4%2F%2Bq7nNgFTubj8bjP9l8OR9nOUzNzBEl8iGkAXjY537gu6%2BdSg4Edv8h24Z8DMnTAcKeuUO1lWz7DgLvtPnpnX96A5wSBHAaWYuN9%2FHWfEBgbyWlCqdpX5L872f4JAAD%2F%2Fw%3D%3D&RelayState=R3cwMXZJMU9xZUVaY1RZVmxVMDkwVk1DSEVkQzYzR2hBU3NNUHNkVlZxSEt1SDdrUDJ8Z2pPbHA5cFZ6&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=BX5F2GCFaeadEWb17AxG2mVisyVfBGrNRczpBwqe0TwTQZKySlVpaED8Vqak2hSyOC9HdKSkRmYGBJqrKPImbGzdeptgxXqlr8usnoBmxy1UF8GKrOM2ptPOqMsXargtigpS7mLatQN1spTkxyDUnfQfCknvH%2BgjQymkGDjtMtOQLEP2y3webPtuBiwv43Wl4YzojxSXALALITtANMgCqdsE8omJ%2FtuZZG2iu31j%2BJk3OTDWhZn6QBNNrV%2FMEPZOVD5CpnxagNhPC4J74rmWP2JA6Yu%2BcqFaCBTlty0do7D%2FQVvdzjHgrnAaosxltAtUkDWS47%2Fo1Ed9Jp2jTzsLzOh2%2F2EXZB7UrPIiQL28THjChuMv9ohoVrwHi6Z77SSJzJJYQmUKPC6IUg4PeoUY%2FpghlrtqxTDeghePUcLuMTusLu4wf%2BdMEvhwi20Eaz6ABr7F0TYAxnKfdEwsG%2FEIkBHa109%2Fv3YqDKKbKUuJKyUeu%2F%2Bo9YwbZG5eRDqKoBoNRbAyDOBVqXMgkTNUEhs5qtLDbOlgcim%2F5Tum5usf921zEn0Z01vGTO2bjrjdRbdJiAfAPhOj%2F69n7rJn%2FklU8NtXdiNHYZn0MLAdOKpBChjnfjehCp08n%2BG4ZcCXMe62gnD2Art0HJf30z2N76vJsoyrXMypc%2BN6WpUQSpsgb6w%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.24.0.1 2023-01-02 16:38:22.508665+00 {"pk": 5, "email": "authentik-admin@localhost", "username": "authentik-admin"} 2024-01-02 16:38:22.508022+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} 025e97e0-ee2c-4178-a410-2b832340a35a authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": ""}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.24.0.1 2023-01-02 16:40:38.094961+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:40:38.094424+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} 8cdc9b41-47bb-440b-9ce8-3fa9d7c81800 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBj9MwEIX%2FSuR7ajvpJsTaRCpbISotUG0LB25TZ7q15NjBMwH236Nmi1Qk1MMebc97n%2BfN3BMMfjSriU%2FhCX9MSJz9Hnwgc35oxZSCiUCOTIABybA1u9WnR1MslAEiTOxiEFeS8bZmTJGjjV5km3UrXJ%2Frpa5RN1Dp4nBodF%2FZEnVT9XWpbH1X3tW2Pmo8vBPZN0zkYmhFsVAi2xBNuAnEELgVhSrKXOlcFXtdmWVl1HJRNvq7yNZI7ALwrDwxj0ZKHy34UyQ2jVJKwjh6Z%2BcSeW5BPic4QoB8PhBFeXChd%2BFZJuxdQstSZKu%2FzT%2FEQNOAaYfpp7P49enxP5zyzJntwJLItpcU3r%2F63o7sAifzcb%2Ff5tsvu73o5rGZOYOUfYhpAL5tcr5xfX6cSw0Gdvwiuhv%2FHJChB4Z7eYXqLuvyGQbcrLfRO%2FvyBjwnCOQwsMhW3sdfDwmBsRWcJhSye0X%2Bu5TdnwAAAP%2F%2F&RelayState=VVk1bmU0UDk4clBnUnNOVk5PNFBzV3hQamFHUVgxdEszS094WUN3SEZtWnlLczg0VXV8U2F5SGhydFZ6&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=mW4CQva3Vem85Dq5yo%2BBclqHaloTreonGr4VCel4SvbiRfF5jgQDGEcxn7kcxDw8JZym8iquo7Ivx%2BM%2FuciSTWOMp2n%2FTzbkkR7QxSfYjBLUXTsoh0JBZvh2fVsJMr10rYaW%2Frig8mGmP697eEhRyma9t5HJnu6mkvE%2Biszr3qQmv85nX%2B9Ac6IBOQOsiSheeKqdZm3Yj3gb3IGZjJ5Y8xmGZSmQ%2BLbiB7AerHM8KNUqysRBoyDBcG5YTtTNao4ImNBkCxh0a45Geur3y0LwEmt0lQkY2YJzW4Uh%2B3dKCK2yRqnTZfEK7nvH37Ue0uc1Fx9zH6hjgijSqWfYAYEJWf%2B4sM%2BhMZ8tHV93bLzzaPXH%2FfhAYyo%2FMREW2AKlIYElK6dQA68wblp%2FxYXm%2BXgJoYs%2FHQqPrQLU%2BE2Bd5Me5xvUIfD2KBR3Lx9GsY8%2F0n21HTajAgxga3NuscTGlP9Is%2FLdOxfu9IY3d77ecSTTUWgkcR%2BRyEo1ApUGLWZrAp5WK1IWMbfBf0hhPmQCccjgjN%2B8kDgAE9ETst36804uotZH6VY4iuTJhdnX4EPcFl848E6BwnrnlP%2FyJ16Qb7nQGWn2zGVGFTncEtwH%2FaUb1LKp6yTuMSuSQRcqzNyFuvJDBvmWiGTbGzlt9VCbwtIVTInSI3NLin%2BMErSktt5AFVg%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.24.0.1 2023-01-02 16:46:04.805431+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-01-02 16:46:04.80479+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +efb6497b-cd83-4e42-a2da-9ea634020d29 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:18:52.857773+00 {} 2024-03-12 09:18:52.85257+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +f2345f3c-50f4-445f-b1f1-fd3cdfc1e548 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:18:55.67402+00 {} 2024-03-12 09:18:55.673476+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +1da692a0-5369-49b1-918d-397a8fb4f6c7 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:18:59.93416+00 {} 2024-03-12 09:18:59.933726+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +08827716-f997-48c3-8660-5429ee765f29 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:18:59.943075+00 {} 2024-03-12 09:18:59.942744+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +9df2624d-2696-4d62-be72-79943fa3c453 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:00.403041+00 {} 2024-03-12 09:19:00.402397+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +cc081dd6-04a1-41d3-86ce-94ab80260f39 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:02.271247+00 {} 2024-03-12 09:19:02.270741+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +2216842c-6a8d-405c-86c0-efdd56c02ed7 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:02.852389+00 {} 2024-03-12 09:19:02.851956+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +e446c461-318c-43dd-bb54-7332f31957f7 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:02.866594+00 {} 2024-03-12 09:19:02.866286+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +dacc361d-bc8e-4593-9c52-ba2a3203c8c4 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:09.271586+00 {} 2024-03-12 09:19:09.271126+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +cfd7c81e-6491-4300-9d79-7b08bfad23fc system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:10.067664+00 {} 2024-03-12 09:19:10.067136+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +bef8f80b-80d0-45a3-bb49-8e7c77512e3b system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:10.47359+00 {} 2024-03-12 09:19:10.473125+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +414d7650-07b8-45a3-8a60-b73eb18ffcf6 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:11.635958+00 {} 2024-03-12 09:19:11.635545+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +cde67ec8-645f-427b-98c9-4364cf4170b3 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:24.629477+00 {} 2024-03-12 09:19:24.628994+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +32dd6fc1-b943-41d3-87be-2824ea531c77 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:27.79875+00 {} 2024-03-12 09:19:27.797948+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +1892c61f-d5b3-438e-8c19-d9f423efff5f system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:29.355873+00 {} 2024-03-12 09:19:29.355389+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +1b4158d7-262b-406d-8160-5787d57ada28 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:31.836547+00 {} 2024-03-12 09:19:31.836116+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +56fced5b-c9ad-44b7-a809-6510b61bb563 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:34.246716+00 {} 2024-03-12 09:19:34.246051+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +7ef2a372-2a40-4864-a622-c692c7c4b43f login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "next=%2F"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 09:19:36.718109+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-03-12 09:19:36.717172+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +22db014b-be6d-4a3f-965a-0ace0464b794 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:36.72656+00 {} 2024-03-12 09:19:36.72612+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +c21cf203-828e-41d2-950d-53a9637461b3 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:37.136266+00 {} 2024-03-12 09:19:37.134873+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +b5d73ef4-1c7a-4900-8987-1087da3764c9 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:37.61176+00 {} 2024-03-12 09:19:37.611147+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +3489e920-1950-4568-bcbc-2589f668796f system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:40.033968+00 {} 2024-03-12 09:19:40.033581+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +273bb145-a3fa-4863-9b93-a89f5999f88f system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:41.303658+00 {} 2024-03-12 09:19:41.303232+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +7d46ee06-871a-4d5f-8889-467998876ba8 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:42.427351+00 {} 2024-03-12 09:19:42.426844+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +bbe5df98-293e-4f48-8c72-9dcf11358436 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:44.984313+00 {} 2024-03-12 09:19:44.983799+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +dd320df9-769b-4175-90d4-78a5b5b3092d system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:47.502574+00 {} 2024-03-12 09:19:47.502103+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +4d2d029b-ef81-4567-af17-a9244c4ca8d9 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:47.556538+00 {} 2024-03-12 09:19:47.55626+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +abae7a06-0d04-4296-b2d3-77050ce7cbb3 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:49.959876+00 {} 2024-03-12 09:19:49.959179+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +c15fb1d4-da26-45bf-872f-9475973f9729 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:50.207578+00 {} 2024-03-12 09:19:50.207071+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +d872d39a-e398-4511-b1bb-90bf346f7fd2 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:19:52.466447+00 {} 2024-03-12 09:19:52.465616+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +f5446f06-efbb-46d7-aee8-5da6e31907a8 update_available authentik.admin.tasks {"message": "Changelog: https://goauthentik.io/docs/releases/2023.2#fixed-in-202322", "new_version": "2023.2.2"} \N 2023-03-13 09:20:15.203522+00 {} 2024-03-12 09:20:15.203012+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +90454ab3-aa5b-49f9-bd63-80a337530bfe login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 09:20:56.688877+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 09:20:56.684176+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +b9164e93-692b-498f-9c4f-2f32becceb1f login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 09:21:58.829126+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 09:21:58.824794+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +2c78aaec-ee09-4d27-926f-9c19f0c8496c login_failed authentik.events.signals {"stage": {"pk": "f4abcb7d5f9248908760afb9effda665", "app": "authentik_stages_identification", "name": "ldap-identification-stage", "model_name": "identificationstage"}, "password": "********************", "username": "authentik-editor", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "POST"}} 172.21.0.1 2023-03-13 09:22:00.426329+00 {"pk": 2, "email": "", "username": "AnonymousUser"} 2024-03-12 09:22:00.421307+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +3af0dca3-49ff-4102-88cb-ed536fec2e8a login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 09:22:06.774895+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 09:22:06.770422+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +9b2984e5-842b-4f0c-9cb7-be158c42e7fe login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 09:22:07.842618+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 09:22:07.839264+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +32a8449f-472d-420d-a958-01a215aa9bb2 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 09:26:00.701171+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 09:26:00.696828+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +8dc5f642-fb3e-4047-9a44-4c1a1e1e1088 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 09:27:12.761049+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 09:27:12.757389+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +28231592-4af2-4e74-8634-52677957e9b0 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 09:33:04.054979+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 09:33:04.050877+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +21f073ff-bf93-41d5-894a-535b86dd19a8 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 09:36:00.691981+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 09:36:00.686928+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +705c750a-e2eb-4f51-b449-063145343de4 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 09:37:00.0425+00 {} 2024-03-12 09:37:00.042+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +d3f1298a-d0ce-48ed-b906-0f8a5ee76031 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 09:38:09.293105+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 09:38:09.289073+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +e67a1639-150c-4300-8d99-f74bb826f638 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 09:42:00.028249+00 {} 2024-03-12 09:42:00.027638+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +e1345c74-01d6-49df-8757-76a95ee2a5dc login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 09:46:00.690728+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 09:46:00.68571+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +9d9afdbb-3cb1-4977-ac34-60274bf02b4f system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 09:47:00.051941+00 {} 2024-03-12 09:47:00.051448+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +2aa9f466-6cad-43f9-b1ab-08eac21d7e99 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 09:52:00.033336+00 {} 2024-03-12 09:52:00.032795+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +684f702d-2611-41cd-b44e-a5ba30a33378 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:55:00.391649+00 {} 2024-03-12 09:55:00.391185+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +28f603a8-f023-4d47-ae35-bfae6786ac45 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:55:00.397507+00 {} 2024-03-12 09:55:00.397286+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +f60be89d-9fa0-436f-b0e0-f09fa4ef93b5 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:55:02.75746+00 {} 2024-03-12 09:55:02.756545+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +700c0df4-1498-4489-bfd5-00a3c06017bb system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:55:02.856166+00 {} 2024-03-12 09:55:02.855898+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +770927d2-df41-4617-a2e8-5be8e3bd5455 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:55:02.869143+00 {} 2024-03-12 09:55:02.868899+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +15489a5d-89f8-4678-89dc-3877381a3a07 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 09:55:05.083752+00 {} 2024-03-12 09:55:05.083113+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +c70a59e5-58b6-4a28-b1e8-ed6d4496c16c login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 09:56:00.710844+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 09:56:00.705685+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +9b22e42f-b3f2-43ba-9267-dd8d6ec8dbd9 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 09:57:00.04607+00 {} 2024-03-12 09:57:00.045313+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +0811b173-1a28-4ffc-8805-f25b7b32566e system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:02:00.03614+00 {} 2024-03-12 10:02:00.035596+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +2c333a98-104b-4069-99f8-3995f8e276fe system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:07:00.057378+00 {} 2024-03-12 10:07:00.056377+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +95d26a20-b12f-45c3-9ea6-937eefbf4c8a system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:12:00.043399+00 {} 2024-03-12 10:12:00.042488+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +509eaab6-93c5-402d-bcac-2236f3abed19 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:17:00.031189+00 {} 2024-03-12 10:17:00.030686+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +c00c8441-beb6-4486-94fb-1e908df60050 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:22:00.032774+00 {} 2024-03-12 10:22:00.032273+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +c3738939-74b3-46a0-9599-e5675a21fddf system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:27:00.033048+00 {} 2024-03-12 10:27:00.032527+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +3495130d-70b8-4500-9b7b-16f2622023a3 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:32:00.031199+00 {} 2024-03-12 10:32:00.030615+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +544be902-73aa-4eac-9ff1-44b6cfae46fd system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:37:00.038657+00 {} 2024-03-12 10:37:00.037794+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +6b326d49-2dab-457d-bed2-f616e3ef95df system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:42:00.03957+00 {} 2024-03-12 10:42:00.038846+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +00d0e1ea-d9bc-458c-8d5e-835b22c24bd9 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:47:00.031649+00 {} 2024-03-12 10:47:00.031068+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +3ae5d7f4-f8b6-4d2e-b5a2-1ce21fb49293 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:52:00.032997+00 {} 2024-03-12 10:52:00.032085+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +0ccd9976-642a-48fc-a197-4f2a334bb052 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 10:55:00.434556+00 {} 2024-03-12 10:55:00.433922+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +f581e71a-734f-4d1c-9632-e7de00452063 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 10:55:00.442387+00 {} 2024-03-12 10:55:00.442143+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +61dbfa49-f2ca-4abe-adce-cd71b628bf2c system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 10:55:02.899679+00 {} 2024-03-12 10:55:02.899191+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +9165db49-6dff-439e-934e-3b010311901f system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 10:55:02.915594+00 {} 2024-03-12 10:55:02.915338+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +b9f9a80a-54c0-4e99-b1b3-dbdb61a8a8e1 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 10:55:02.921301+00 {} 2024-03-12 10:55:02.920999+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +4306c39d-89fc-439d-afa7-92e599477417 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 10:55:10.307515+00 {} 2024-03-12 10:55:10.30681+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +843f8709-4e62-41b8-a98b-213645931ca1 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 10:57:00.032694+00 {} 2024-03-12 10:57:00.031958+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +62899e67-5886-49ee-88a7-8c664e2f746d system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:02:00.034669+00 {} 2024-03-12 11:02:00.034074+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +387c9985-3baf-4cd2-ad89-a64642510aaf system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:07:00.025306+00 {} 2024-03-12 11:07:00.024832+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +4f3a4faf-c73b-40ab-9d4c-27a91a60fd69 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:12:00.037904+00 {} 2024-03-12 11:12:00.037441+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +d1014f1d-f907-4ed8-bb64-50fece7cc94b authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBb9swDIX%2FiqC7I9lu40aoDWQNhgXotqDJdtiNkZhGgCx5Ir2t%2F36ImwEdMPiwoyS%2B94mPvCfow2DWI5%2FjE34fkVj86kMkc3lo5ZijSUCeTIQeybA1%2B%2FXHR1MttAEizOxTlG8kw7xmyImTTUGK7aaV3hUrfTy6m2bpdLVcVWWDDdjbu5uycqfG4hJq3cDtCWspvmImn2Irq4WWYks04jYSQ%2BRWVrqqC10XZX0oK1PeGV0uVk39TYoNEvsIPCnPzINRKiQL4ZyIzUprrWAYgrdTibq0oJ4znCBCMR2Ikjr66Hx8Vhmdz2hZSbH%2B0%2FxDijT2mPeYf3iLX54e%2F8GpL5zJDixJsbum8O7Vdz6yK5zMh8NhV%2Bw%2B7w%2Bym8ZmpgyyeJ9yDzxvcrnxrjhNpQYje36R3cw%2Fe2RwwHCv3qC667p8gh63m10K3r78B54zRPIYWYp1COnnQ0ZgbCXnEaXqXpF%2FL2X3OwAA%2F%2F8%3D&RelayState=YWRYcTJyV01iNlVkY2R2VWZnVFpHRkVJNlNlM0lIYzM3bmVqWjJwTVd6dWtab2QwYzd8Y2VlMzM1M2Mt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=lUlHgH7IwMv%2F04xulllUtloFIwLWu2r%2FuyoXy4FHZ68ofaEEWzof2L7vMBv8aI3QQ91jI6eeQUjIBLO0HqaSUpadpp8ap%2Bm4cOsilBImRjoOIqpLsukzdBm4S7u1tjO5OqmeQaJmdZuBfwAWemiBEKp0DW1VCHsEDV9th%2BK%2BrptQAhVb8gfVmqRsYY13NZav0ZQOEHu7thDoDfVwQ1l6e6htxcpUFMfQvIB%2BQfB1aA5AAocVylIW1f%2B%2BtMNArDGW4VFAUpBga6lafl6cdSNhxRjPvVEdwAkLK%2BlKvhirGCM44R7ayQBTTIlrdfDaFKl3BEY8XuAnV2eQT6xSERBDyVpunPrZObQqFIp93%2Bm8vovmq8A6xNBHzkmwG%2BWPR4SoVoxIygRogkLuSxi%2B3RtXvRna7vs89sLyZgcIzDLAe6xMt%2FYHphlCvpM3yv83VqmQtPVhFKqQmqaeeJEGtB7JE5P4HK0fPReRXY65zFUeDDYpPrRbUjerI6YJogJqasG9UdZC%2BJXTW%2BAx3eNIpteqehGRXJP9FAbXUVgACS2%2FEUUJy%2FmgxkVHpK%2FUotX0DL50oHCmt0XCFMpWCUZMCXwMFXHEuO%2F%2BpSUqPOkVhX%2Bz3iWKCnUpHgF73UAbjUtgfXpA%2FGo4N3MyoDX1sNbQqPLai5iCZTRwdObBgsgQn%2FXPegw%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:18:02.192895+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:18:02.192123+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +2bb35f8d-322c-4193-b09d-32aafac220b7 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:17:00.043594+00 {} 2024-03-12 11:17:00.043125+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +076a18d6-6d9b-4524-b619-cc4a0a6b5f94 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:22:00.029942+00 {} 2024-03-12 11:22:00.029491+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +93da91ee-16b7-4bd8-b05f-ed07b6f9e8b6 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:27:00.027139+00 {} 2024-03-12 11:27:00.026677+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +ad4eb94d-1d1b-4e70-b8dc-9f60371a3076 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:32:00.028541+00 {} 2024-03-12 11:32:00.028065+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +eb523ba5-1b16-45bb-8ae8-7a40eb463c30 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:37:00.048995+00 {} 2024-03-12 11:37:00.048385+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +beb1857e-f773-4ff2-a735-fb8c132543f1 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:42:00.02757+00 {} 2024-03-12 11:42:00.02711+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +2b9c49c0-df89-4b3d-8dba-d2033380645a system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:47:00.039745+00 {} 2024-03-12 11:47:00.03924+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +7ed7e8ea-6f1d-4632-805c-2c1b5097cd02 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:52:00.046914+00 {} 2024-03-12 11:52:00.046434+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +61c7403e-b176-481b-acb6-135f961da9de system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 11:55:00.348459+00 {} 2024-03-12 11:55:00.34801+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +350f90b1-8566-4acd-843e-9ee8545a559b system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 11:55:00.354408+00 {} 2024-03-12 11:55:00.354201+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +edf78c8c-de1a-4b2e-ba1d-686569e9db82 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 11:55:02.661045+00 {} 2024-03-12 11:55:02.660437+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +006941ff-49c6-4ce4-9ce1-908b6791978a system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 11:55:02.732599+00 {} 2024-03-12 11:55:02.732334+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +2f4b2d77-54b7-4677-815e-ae50f34adf7e system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 11:55:02.747185+00 {} 2024-03-12 11:55:02.746942+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +4e1057af-3785-46e2-b21b-07f85c38a61f system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 11:55:07.531247+00 {} 2024-03-12 11:55:07.530805+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +cef79b5a-c90c-4d64-b140-c9a302f31a8e system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 11:57:00.036941+00 {} 2024-03-12 11:57:00.036489+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +13fb035f-9f88-4a18-b588-9d68361667a5 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:02:00.040959+00 {} 2024-03-12 12:02:00.040479+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +39052e69-2537-41c7-9709-8170094bb2f0 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJPj9MwEMW%2FiuV7asdR%2F1mbSGUrRKUFqm3hwG3WmWwtOXbwTID99ijZIi0S6oGj7Xnv53kzdwR9GOxu5Et8xO8jEotffYhkp4dajjnaBOTJRuiRLDt72n18sGahLRBhZp%2BifCMZbmuGnDi5FKQ47Gvp26JbbzfVGio0K72BrTGlgW6jn1bGadDLzpW47tp2JcVXzORTrKVZaCkORCMeIjFErqXRpip0VZTVuTS23NjSLJbb5Tcp9kjsI%2FCsvDAPVqmQHIRLIrZbrbWCYQjezSVqakE9Z%2BggQjEfiJJ68rH18VllbH1Gx0qK3Z%2Fm71Okscd8wvzDO%2Fzy%2BPAPTjVxZjtwJMXxmsK7V9%2FbkV3hZD%2Bcz8fi%2BPl0ls08NjtnkMX7lHvg2ybTzZT2XGoxsucX2dz4Z48MLTDcqTeo5roun6DHw%2F6Ygncv%2F4HnDJE8RpZiF0L6eZ8RGGvJeUSpmlfk30vZ%2FA4AAP%2F%2F&RelayState=NzhJeXNnVnNZZDZKRDd3Q3BLVmFJa3hSaXRtOTlFdjJ2ZE8xaDQ0VlE4OVhlMGVjVE98YThlZWJkMDgt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=puFkhzy3Z5ac%2F1r3XdkaI0iEal2x1%2F0VLcr70BnL2IzjKUZifOxWx5laZoeWQnLdh1kKv1Nwnn32R53gOQkY4ofvAN81RaOB6vuJLTupOqA8XVkv2B%2Fs%2BwpfZrYgpUbxMVVJCzasr15e5%2FLd8uvDbdL6EBKJuVqhKfEP1T%2FH%2Bgnjc8WnW6yPJpAzQa3VuciZCBxkyq7SWfZabfADGwrF7PYzUniCOzXco%2FCHPuqgoPi5DNg32g4UxkgZmgCum%2B16Hf0hcT3eHUFuCkn5CA4PnnmWeDJeWiy%2B8yiYthZcfZAsZ1d0ngr58nmn9%2B3pbq5ICAC6ebpQci5NuY1nH4h%2FabMCJQsS1RDlkVpQdfWImyY3KcrgXavDKmqlWZ66dPGOP94LiFrB6hvGCrgPujvxnMUF3q54I9m2DGI9n5NA9Tx6rvClljP35bjMHV16H%2BzKsmPdInvmXtSJCf1OQC4GHAnGXsHTKLOCXqEQGFcb%2BwXVMGCCpXcguc4pWxd4wgMhc18bTANKN5%2FzlXGFWQyHLFMwC5iIuJFll4DKGC0gZTlixuGPjyiBEkCWtIIq8CZkSvKp6Dcx1CdC8gsZhJUxWxVws8IgfrL2TpL9AHlWOjZEWPYA8GiZF%2B9Cuyt%2F%2BZZCxoHl2ISx1CMR46pXirmSKWU3sAB3qDXHuv%2FaXxIt5tc%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:18:12.851482+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:18:12.85073+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +0f288bb0-3131-4b6b-bd13-781b1fc8f7f1 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:07:00.029026+00 {} 2024-03-12 12:07:00.028562+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +cea6cb21-9afe-4f32-9daa-5f5e65bc6d8c system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:12:00.033447+00 {} 2024-03-12 12:12:00.032956+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +cf434072-8f63-4112-acae-f8bb01a43709 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:15:42.997603+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 12:15:42.993087+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +05424407-2396-4a74-86e4-6b6833846bcf login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:16:00.769208+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 12:16:00.765898+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +51e69755-68bd-42de-817c-bd744ea221df login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:16:25.296145+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 12:16:25.291452+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +5c20ff33-9685-41f9-a1a2-db46d9e4f5d9 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBb9swDIX%2FiqC7K0V201ioDWQNhgXotqDJdtiNkZlGgCx5Ir2t%2F36wmwEdMOSwoyS%2B94mPvCfow2DXI5%2FjE34fkVj86kMkOz00cszRJiBPNkKPZNnZ%2FfrjozU32gIRZvYpyjeS4bpmyImTS0GK7aaRvitOZVXWxxpcZW67FTiHtTtWGmpcLQ3cGaPvXF2fllJ8xUw%2BxUaaGy3FlmjEbSSGyI002pSFLotFeVgYu1ja6vZmVa2%2BSbFBYh%2BBZ%2BWZebBKheQgnBOxrbXWCoYheDeXqKkF9ZzhBBGK%2BUCU1NHHzsdnlbHzGR0rKdZ%2Fmn9IkcYe8x7zD%2B%2Fwy9PjPzjlxJntwJEUu0sK7159r0d2gZP9cDjsit3n%2FUG289jsnEEW71Puga%2BbTDdT2nOpxcieX2R75Z89MnTAcK%2FeoNrLunyCHrebXQrevfwHnjNE8hhZinUI6edDRmBsJOcRpWpfkX8vZfs7AAD%2F%2Fw%3D%3D&RelayState=VElyVjNaN2pnbDRVd1RWM29FM2x5MVZuVlBkY2N0WXBoZ01ET2Z4d2RKU2dOUE10ZFF8YmFjMjQzNDIt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=b5zxgS%2FAfwENvPrKFQIwHF04kGrruQL8VG3I15mtw7IOTkKWg%2BBZ6MuhG7C%2Bc4XNQfqTNtYwHNCr8FFd3STN1%2BsLv7NaBdcHjA%2BPAOZWrZc%2BsqB%2FFBpH6rWmB667UNcC9sTtlX1XS9O5vAJ%2Fln3Hb3pgV5r%2FEXcyrC1KSTiLSz6Xt6fqqopH6P7b%2FBOcAiWqvpt4J10UxXsC3huufmdg0MSGJO4ROun5dyL2NjxgASre4q9B2ka4pN3QaFdv5LOV9ptCd6EU5WJkc8rGVkvpGm2OdlrdxJi0jJy951%2FomKNGzfuR%2Bv6gWONM7aUoYUJbTKBibdC65EFVoNX%2BFnZIli9%2FK2zr00IoLqsyWkVpqZi4ziSevs%2F7XK4Hx4bFQ39E94Cs79uc6Mv1xDYa3Vf4grFkK99UUGoPBPgVrHOCRDt7SGw66ugSMktBFr7XPzJiTz%2B9Ue%2Fv4spp9J%2BuyQc1bdVFcgXIfBXwfomYvr%2BtPvc8gsIZJq2DFABStFX7OuaJOe5nKqhQuvfGMUlpFEePSOlTv2FhkH2ANMX0W%2B30pZjiOA1B7wthS6FrGJ9S6DVxqzvmfCzHFtMYPzOkLnE2hTNTjVIv%2FF5%2Bcsh8a4KT9o7KRAhXHbnrbyKA%2F1CKKJS%2FJfml7dG8eUOnGLg5BlQfTr4OS8DxxyHtFLykHPvfSQI%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:16:46.200868+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-03-12 12:16:46.200309+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +bc3357f2-1df7-47bd-8fa2-e853e44df893 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBb9swDIX%2FiqC7I1v2mkaoDWQNhgXotqDJdtiNkZhGgCx5Ir2t%2F36ImwEdMPjQoyS%2B94mPvCPow2DWI5%2FjI%2F4YkVj87kMkc3lo5ZijSUCeTIQeybA1%2B%2FWnB6MXpQEizOxTlK8kw7xmyImTTUGK7aaV3hUNNEtcHt%2FBaalRQ31cVo11VVNXK32ra8TjyTl7C1J8w0w%2BxVbqRSnFlmjEbSSGyK3Upa6Lsi6q%2BlBpU92YZrW4KevvUmyQ2EfgSXlmHoxSIVkI50RsVmVZKhiG4O1Uoi4tqKcMJ4hQTAeipI4%2BOh%2BfVEbnM1pWUqz%2FNn%2BfIo095j3mn97i18eH%2F3DqC2eyA0tS7K4pvH%2FxnY%2FsCifz8XDYFbsv%2B4PsprGZKYMsPqTcA8%2BbXG68K05TqcHInp9lN%2FPPHhkcMNypV6juui6focftZpeCt89vwHOGSB4jS7EOIf26zwiMreQ8olTdC%2FLfpez%2BBAAA%2F%2F8%3D&RelayState=VDBZcDVuczVpbVhzTlFMaXg0Y2k5UUk1b1N0M05LQ1YwaHVhcXlrZVJHdDBITTluOUR8ZDMxZDgxNzIt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=wUqtpzGasm1xm0%2B21lZLUOer33uK6YPH6MphpRPlGp8veCavKzKyr%2Fk%2BC9%2Fy6YqUScqYLmFd8joiRTWq1l0rZ1o6olA8Hq1%2FTyTx6OzuzbVV9qPd6hCIqfNFgNhfSjFLXolj079hkVqzs43nILWLyUb%2FH7bfLDu6yGPqndwpuvnZiRR4R3gYtkkTKsDvA%2B2BqskaLiW%2B%2FbMVaunroA0feuPWYlS6sO9gEwN%2BmNd2y8Ny9YmTBh8D8kwUrjasqsj7VwUQvA%2FPBxHrVY1qE%2B%2Bc2a0X0JOm4eBOvrAbuUGC58vZykC%2Fo7ub%2B2iaEsuPZow9vvJdYKzXUZSrYbRIdDBNOmkBpmA4QllPjV1vEdgDCNrGWmUPU7fB4xtLyoc2X0%2Bx010L1t9Z2QuLm3lQm8pK11oBzsiMcfzXBEbdZg%2BkPTQFL2szutYG3f2V4QmSUjQhDuphAKs99%2FUunI57Qn5rrck5cBmM0J97xWzNPzceIO0uamESgaBiteqw2ywBYgxpD0vTfc7VonPXpymR6z%2BjA0UPgslrQgqZxjAdHdPACdYKdHLfFIsRLAtyzHY%2FFkh5z6lmEqT9%2BGENv%2FGph%2FRxshU3Fhj4VQaT%2FHbkz6BOug2HUAbt8WiCgp4bwd8qSYAQLKSxXButM%2BLMofSt7GHhgdW2xMGurtNGqUhjX2jDFUo%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:16:49.912109+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-03-12 12:16:49.911609+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +a6bcd075-2241-45f4-93c3-ba4b69af2918 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:17:00.03235+00 {} 2024-03-12 12:17:00.031758+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +85b9d791-85e5-4c24-8c4d-36583538b4fa login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:17:03.682721+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 12:17:03.67834+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +2597fa7f-1be7-4636-9165-04f0b2dd813b login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "next=%2Fapplication%2Fsaml%2Fgrafana-saml%2Fsso%2Fbinding%2Fredirect%2F%3FSAMLRequest%3DnJJBj9MwEIX%252FiuV7aidhCbE2kcpWiEoLVNvCgds0mWwtOePgmQD771GzRVok1MMebc97n%252BfN3DKMYXLrWU70gD9mZFG%252Fx0Dszg%252BNnhO5COzZEYzITjq3X3%252B6d8XKOmDGJD6SfiGZrmumFCV2MWi13TTa95mtclu%252BHfI%252BH4ayACxsVeRV%252FabEfKhtfQMW62N%252FBK2%252BYWIfqdHFymq1ZZ5xSyxA0ujCFmVmyywvD3nh8srZavWuvPmu1QZZPIEsypPI5IwJsYNwiiyuttYamKbgu6XEnFswjwkGIMiWA3M0R0%252B9p0eTsPcJOzFarf82fxeJ5xHTHtNP3%252BHXh%252Fv%252FcMozZ7GDjrXaXVJ4%252F%252Bx7PbILnN3Hw2GX7b7sD7pdxuaWDJL6ENMIct3kfOP7bFhKHZJ4edLtlX%252BOKNCDwK15gWov6%252FIZRtxudjH47ukVeElA7JFEq3UI8dddQhBstKQZtWmfkf8uZfsnAAD%252F%252Fw%253D%253D%26RelayState%3DM01VdDk4TzhnSWtVMjBDTnlWb2FZZ05GOWZjUmxSNU41Sk1UbXdVcUxHcmM1dmJac2t8YWI3YjFjYTYt%26SigAlg%3Dhttp%253A%252F%252Fwww.w3.org%252F2001%252F04%252Fxmldsig-more%2523rsa-sha256%26Signature%3DW1uiWN6vvpGfU5nA49tvVbhWp71UjMbe%252Bsao3uLOeCYRCdJAxe22GIdpdViY8iuKSWISmNRMIDp3oWlTmbg5leMgWtO1wJxdk4AxnH8dLcMBhpNhhr8VD3QvQsJZfEMPBeWDa4IeFhfn%252FCL7gBKFHi5%252BNfzZuFUESyGQ0ZhRezPyff9pSPaZacYe%252FlAB%252FFQcejoGxBBohsbeVd5OMwYy0UVPmcgIWvp72%252FYYdMY5NEpre5tbQ9KQY1TlzMHKZAbVqfdPODKxobEXYuZBtEjrRzTJJP9iEpj4XXNEezg8vYOsAeex8Iagke2pSOa%252Bg741XW6HmEWDYNF3lksMd7f7lOP8b6MbcVeVUgZcF7s5XcSPYLuTelEruz%252BJgBGbtquqmUMidbeWAfvF4oiYcPnjncwToTSRa0EE1c%252BLxJaVwBAfDOYTRkYXb7BAg19tHQ8eMpG6JaQqdWY0OSabb2%252FGObiY9SMCjqgHFVYesRm9hn5Sv5nofAjjSxnQf69WiPCNTENznRZ%252BCYezWfEkXeYvh2Qk830%252BA24FHHRUZ4mvjlWwd9fFGuxcIy88LVkFfo5MmR%252FzrXZuPOLY5hRsBo9bHTbxxmYIW9HV8Q3UxO%252BuWnvYzhF3luBdePoxi%252B%252FDy%252B%252BrVaG1VfVUx89qVwgNcksp8C8FtkXO88t%252F1sIp8Hu0I3w%253D"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:17:27.490802+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:17:27.490352+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +5d5b9b18-8d7e-453e-806a-b27c049bdd70 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBj9MwEIX%2FiuV7aidhCbE2kcpWiEoLVNvCgds0mWwtOePgmQD771GzRVok1MMebc97n%2BfN3DKMYXLrWU70gD9mZFG%2Fx0Dszg%2BNnhO5COzZEYzITjq3X3%2B6d8XKOmDGJD6SfiGZrmumFCV2MWi13TTa95mtclu%2BHfI%2BH4ayACxsVeRV%2FabEfKhtfQMW62N%2FBK2%2BYWIfqdHFymq1ZZ5xSyxA0ujCFmVmyywvD3nh8srZavWuvPmu1QZZPIEsypPI5IwJsYNwiiyuttYamKbgu6XEnFswjwkGIMiWA3M0R0%2B9p0eTsPcJOzFarf82fxeJ5xHTHtNP3%2BHXh%2Fv%2FcMozZ7GDjrXaXVJ4%2F%2Bx7PbILnN3Hw2GX7b7sD7pdxuaWDJL6ENMIct3kfOP7bFhKHZJ4edLtlX%2BOKNCDwK15gWov6%2FIZRtxudjH47ukVeElA7JFEq3UI8dddQhBstKQZtWmfkf8uZfsnAAD%2F%2Fw%3D%3D&RelayState=M01VdDk4TzhnSWtVMjBDTnlWb2FZZ05GOWZjUmxSNU41Sk1UbXdVcUxHcmM1dmJac2t8YWI3YjFjYTYt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=W1uiWN6vvpGfU5nA49tvVbhWp71UjMbe%2Bsao3uLOeCYRCdJAxe22GIdpdViY8iuKSWISmNRMIDp3oWlTmbg5leMgWtO1wJxdk4AxnH8dLcMBhpNhhr8VD3QvQsJZfEMPBeWDa4IeFhfn%2FCL7gBKFHi5%2BNfzZuFUESyGQ0ZhRezPyff9pSPaZacYe%2FlAB%2FFQcejoGxBBohsbeVd5OMwYy0UVPmcgIWvp72%2FYYdMY5NEpre5tbQ9KQY1TlzMHKZAbVqfdPODKxobEXYuZBtEjrRzTJJP9iEpj4XXNEezg8vYOsAeex8Iagke2pSOa%2Bg741XW6HmEWDYNF3lksMd7f7lOP8b6MbcVeVUgZcF7s5XcSPYLuTelEruz%2BJgBGbtquqmUMidbeWAfvF4oiYcPnjncwToTSRa0EE1c%2BLxJaVwBAfDOYTRkYXb7BAg19tHQ8eMpG6JaQqdWY0OSabb2%2FGObiY9SMCjqgHFVYesRm9hn5Sv5nofAjjSxnQf69WiPCNTENznRZ%2BCYezWfEkXeYvh2Qk830%2BA24FHHRUZ4mvjlWwd9fFGuxcIy88LVkFfo5MmR%2FzrXZuPOLY5hRsBo9bHTbxxmYIW9HV8Q3UxO%2BuWnvYzhF3luBdePoxi%2B%2FDy%2B%2BrVaG1VfVUx89qVwgNcksp8C8FtkXO88t%2F1sIp8Hu0I3w%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:17:27.717304+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:17:27.716795+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +f94eaece-3bc4-4092-9074-b696a717870e authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBb9swDIX%2FiqC7I9lq6lSoDWQNhgXotqDJdtiNk5lGgCx5Ir2t%2F36ImwEZMPjQoyS%2B94mPvCfow2DXI5%2FiE%2F4YkVj87kMke35o5JijTUCebIQeybKz%2B%2FXHR1sttAUizOxTlFeSYV4z5MTJpSDFdtNI3xV16cp6Cd2xOppbU6O%2Bwaq%2B1WWly5Vxq6Wp77putVxK8RUz%2BRQbWS20FFuiEbeRGCI3stKVKbQpSnMoK1vW9sYs6lX9TYoNEvsIPClPzINVKiQH4ZSI7Z3WWsEwBO%2BmEnVuQT1nOEKEYjoQJfXdx87HZ5Wx8xkdKynWf5t%2FSJHGHvMe80%2Fv8MvT43845syZ7MCRFLtLCu9efecju8DJfjgcdsXu8%2F4g22lsdsogi%2Fcp98DzJucb3xXHqdRiZM8vsp35Z48MHTDcqytUe1mXT9DjdrNLwbuXN%2BA5QySPkaVYh5B%2BPWQExkZyHlGq9hX571K2fwIAAP%2F%2F&RelayState=anhtSmtjckhYdjh5azJEOUZFV0Z0bUI4c3gyNlNZOUx2aEpkazROR2l5OTlzSjVtZWp8YTE5ODAxMTUt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=tXXSI3zMlSglsX2tlYVsXyQhtUmaGA%2BVNaRFol6F4QBJr3fsReatf05KZDVnaX2gjIrJ3Fu5cnspHnvPlGsrO%2BXe3dRBNz9dqSRj7rg3PSdJY8rffIKLyIUYGu%2F3hGOBja5Ekib4iKxrOwZxWUi%2BcND2VxlO%2BLT0Gs1QOVvIGOSmtl0O7KBOZLUDdJR58ithXjh6Cr1J7i1Hq2u552yuPwr3WRgk0Ux8E4%2FYgGbAf9%2BKFVfJoC0Cm0PuSA4OgAMFLGZiUuZiME4mWwHVRB%2FjOpfFZ5RmWK1l1P0%2B%2FYsMa4Kb8l5YfUe1puZVXqE2WEimDTWiVAFgT0CC5NvS3bdD7l42Y5iibhsnQwAfDDO7rnPQoMw3BULWEvDgFw4h5iMLz2W%2Fmb9pDAjqYsRfojAxJNcI07mApoect1bM34oWXNw5ikoYguCUb8u7ljBb4hz8MqY%2FlhGuq7uMes%2Fplx8uuDRh03txWneQqVA31m743YcVlCgrg8OZrGCtLmhFC5H5CxiuyYIOAn3bRzkH8uaXkG7xACS00paDIOwvwOzLCTipPzE3WdbSgIMlHwTdM6W3Fon6KJTU3BiiOlR8rUxhlUFt6IyCaUQPFyn85cj%2BWJ%2FkbD5Vv0FHjhjVTbICFWEkXlE8xv2fSvstdSd6xFkcPzHnn9tWCs3p5iXlYlhAuJ4%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:17:44.000325+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:17:43.99979+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +b9d9d3dc-b751-4ec6-bc68-a2cba475670d authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJPbxMxEMW%2FiuX7xvb%2BKcHqrhQaISIViJrAgdvUO20see3FMwv026NsgxQktAeOtue9n%2BfN3BIMYbSbiU%2FxAb9PSCx%2BDSGSPT%2B0csrRJiBPNsKAZNnZw%2BbjvS1X2gIRZvYpyivJuKwZc%2BLkUpBit22l7wtooG%2BaG42ux7XWjTZG1%2FVNb9YlVKZxda3fPJYVSvEVM%2FkUW1mutBQ7ogl3kRgit7LUZVXoqjDV0ZTWrG1tVmtTf5Nii8Q%2BAs%2FKE%2FNolQrJQTglYvtWa61gHIN3c4k6t6CeMzxBhGI%2BECX16GPv47PK2PuMjpUUmz%2FN36VI04D5gPmHd%2Fjl4f4fnOrMme3AkRT7SwrvXn2XI7vAyX44HvfF%2FvPhKLt5bHbOIIv3KQ%2FAyybnG98XT3OpxcieX2S38M8BGXpguFVXqO6yLp9gwN12n4J3L%2F%2BB5wyRPEaWYhNC%2BnmXERhbyXlCqbpX5N9L2f0OAAD%2F%2Fw%3D%3D&RelayState=dHgycWF6d0lpVDFhN3BxVDBMcWJkMEZBcXpGcnN0dEhGMG9MQkFwN015djJBSDNpQm18ZTMxMGNmZGUt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=r4FqnQj2PbxoRfujmEXTvU4g2w7xEjFyG3HTjpFoRmoR9SWmRlhTfGfPtf8UCzN5%2FuMTvTPeK9gF8SUumZsc%2BdojIgFJnXLTI6LkhLNtsuG%2BeyeXMQt08EJpUDOL67u3bvq5YX%2FELWyMtE4FuWdCBuS5zIjEjqK6zenMDcqagYSrwMBvJrfXBznRlKGb1eSp6yhBMUr0lHvnYQ0nhKcxUoOM%2BmdZH4kymhBe6O%2B1ptPWle6ndpS1fSM17QjUw%2FrLY5ueZKTq0U9surIsfhtToZQN0DGDRKBJUfdxB0SJRv6yA6FG%2Fh6h5lcaJIsnvqW1ilPiS96CFkQif%2FCYImS9IDaW8p3VnW25NxBFLJWWf5b8eM7CuHvdJ%2BcVt5sg8pudFAWQ5LfswYyuw3d2mD9qtiVcHTziFpMdVAWEQXXvFpv5VyHEJwpwMH8bpK8nH8B%2Bh4C%2Fh6eBojNZ7b%2B7kqlI8%2BT9YgV6lYL6uGxVnXvadPp2ILeMXZjAK5uDuO8tAK%2BWhEWZ3SaxjkoE%2Fjh3WF2nECsJvP7mzb0CpgbS6POzqlA0W%2Fg9ULkRvPoWbSYgOHk3Fa6US5UUyUrINBUtXWuRFTLFRmdDOsK78Wz%2F7EqegMvw9fbTnRrJR15t%2BTj3vbhj6kulOt36IDEHhKiHFlxzRL6zdMaOj5LsdPBggnzUmwM%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:18:42.050422+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:18:42.049694+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +1cc20cb4-d461-42ad-b005-2899cfcd53fb authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBb9QwEIX%2FiuV71k5SVluribR0hVipwKobOHCbOJOuJccOngnQf4%2BSLlKRUA49ejzvfZ7nuSMY%2FGj2E1%2FCI%2F6YkFj8HnwgM19UckrBRCBHJsCAZNia8%2F7Tgyk22gARJnYxyFeScV0zpsjRRi%2FF8VBJ12U5IO622Nud3dqi1Npi2XfbXdl2bX4zF1vb5u%2B0FN8wkYuhksVGS3EkmvAYiCFwJQtdlJkus7xs8sLkt%2BZGb3bFdykOSOwC8CK8MI9GKR8t%2BEskNrdaawXj6J1dWtQ8gXpK0EOAbDkQRdW60LnwpBJ2LqFlJcX%2B7%2Bz3MdA0YDpj%2Buksfn18%2BA%2BnnDmLHViS4nQN4f2L73piVziZj01zyk5fzo2sl18zSwRJfIhpAF43mSuuy%2Fql1WBgx8%2ByXnnngAwdMNypV6j6ui2fYcDj4RS9s89vwHOCQA4DS7H3Pv66TwiMleQ0oVT1C%2FLfnaz%2FBAAA%2F%2F8%3D&RelayState=blBLakNpaTBqMzhHbDdlWTdPSlh2WUtYMldsTml3TjJMQUxsa2JGY1JyT2tTZlQ0N2N8ZTI0NjUzMDQt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=FcXmAO6kLtB2iuQAPdqk4h8cN4IHwDVkBx3kyAxt4asU%2FYy9%2B8DYg0hWVbT777qRsyVOUuTwT8pNwmB5obC2Jw0VfDLuUh4Gd2XACA3KACmHKYJ3gsG%2FSvqONb2xvhTUK%2BPOT7RIRszNa6x5%2Fjw9U845LjlWXAKmkoCLv%2Bhhqhauz0mKLF%2F42Tv8TI8K9KriXRCZIGl34XhnW%2F10dKR2VjXOkaKLuUQyZjoJvpf872VlgB7VDR80RKMSwoe6FhI1GiPAgA%2BpB1ZokA940hpcPKFDG7tgSID5qcUaF4geC5TBjJnWBSaEp%2BgRdtfbqDU83K6jCAXiGDuTujy%2F84eIzjhGgixXLKutkLdrK7o%2Fw4w2aoXGL1aIYzlhY2TPYkbfmvq7XBRPyMUxXXgFM4l5D6wIesPhGgZ8kVQWm8OXEpabXovqJOdKH6vnQ8ZHLyH2aQKVfjYB7n%2BbGH1I%2FHHvXTgZWlhd4G4wtACVp%2BA0b2Crecmq%2FKNObH%2BUKmQ3Hveb9RJRCKLA%2BiPX9iQfn%2FDWapaG%2FjTWQoePyx0t09sVcg%2BW4zUnJ2JdqJH2Nd%2FRofrTcxnMH3grYL3i53wy4xdY7InpaJBq%2FIqku%2FH9Fg9Wi4bxJSmxvY5vxEKKb3C0%2FrVKAitf6ZDwYFfbHaPcgKEtMUGli766PN6LVD2F8lnMOD8%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:19:41.135323+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:19:41.134814+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +ec35d60f-97e1-4eed-b11c-12e5388aabb9 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:22:00.053251+00 {} 2024-03-12 12:22:00.052697+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +40f61b2a-99d1-45ce-8275-fdf436a18020 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:22:20.18532+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 12:22:20.182695+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +8bd6e2af-da1f-4b84-a036-6e7b04cbd66c login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "next=%2Fapplication%2Fsaml%2Fgrafana-saml%2Fsso%2Fbinding%2Fredirect%2F%3FSAMLRequest%3DnJJBj9MwEIX%252FiuV76tTepoq1iVS2QlRaoNoWDtymzmRrybGDZwLsv0fNFmmRUA8cbc97n%252BfN3BMMYbSbic%252FxCb9PSCx%252BDSGSvTw0csrRJiBPNsKAZNnZw%252Bbjo9WL0gIRZvYpyjeS8bZmzImTS0GK3baRvitW7gRQmWq9rhz0rnYG6%252F7U3%252BllpddV3dWmvuu63kjxFTP5FBupF6UUO6IJd5EYIjdSl9oUpSmW5rjUVmurV4tVab5JsUViH4Fn5Zl5tEqF5CCcE7Gty7JUMI7Bu7lEXVpQzxl6iFDMB6KkTj52Pj6rjJ3P6FhJsfnT%252FEOKNA2YD5h%252FeIdfnh7%252FwTEXzmwHjqTYX1N49%252Bp7O7IrnOyH43Ff7D8fjrKdx2bnDLJ4n%252FIAfNvkcuO7op9LLUb2%252FCLbG%252F8ckKEDhnv1BtVe1%252BUTDLjb7lPw7uU%252F8JwhksfIUmxCSD8fMgJjIzlPKFX7ivx7KdvfAQAA%252F%252F8%253D%26RelayState%3DMjBmNjVsNWdZYzZwRU1zRGtCcFR3Q0w5ZUtGR25yOVVKWURhMDRlVHVsdDk3MU9melB8ZGQzZmMwZmQt%26SigAlg%3Dhttp%253A%252F%252Fwww.w3.org%252F2001%252F04%252Fxmldsig-more%2523rsa-sha256%26Signature%3DB3BcE%252BDfKNr68aH3uXR%252F3TvCQvoni9ZtcGouK%252Fo9vxSwu%252BIc9EiPmnZImLaojWcaWfkKGRqaf%252BFlVIPMsPMLwnIqm5DMhM8MoBWOOc9zl7fCq6K7ojpiOZCA4nTIq281TICDjPG0lkVk%252BvVUQOgBAt%252Fm9OHgaBi%252FuIEXAiUKuI9WqlzJ9jmsyGSO4OUScXt%252B0uWh598Lhffjhc51lbK06Ih3t3iN%252ByGnnSZBbh%252Fg0tmrH%252BuyMCZUsFzgTK5k7%252BYKz9tMtb6nh6vUyzXihayOD5sX8S%252Fyen6NdSCM2EztBqahCpTBGKTeNBvJbsaHW%252Bxtm87%252FDddi2dOH71eKGa%252BPr66Bv0t9E6UI0GilGqEGKfe0SCyAdAwjIIy%252FfV3uJlZCuOk3MZa%252F4qgyMcC3PJEAxAiUsdPo9uLTi0pWuTr01qjFxkf28%252B3ERSAh9mlfcrAy9R%252FAF9Eq9KqBXPdqypGtcDkhihivtGpY7uS7xW9lrMiZzv3ffZrFHXfP1cMizvtVXkQiRf3st1KMxcrOXyIyHtaKWB1BQxUiE%252BBsS%252FlG9ZoVSpVXkIKmiMKWozFAzQNNJicWF7E5TEKhKVnB%252BT9Rc0e6qoaU7cgMSPSYPrjN2WEZPrTVMLn2QZ1kV7B8D0FXwthHpJQvDI66nXFW8kf1I7vM5TnWLJZLBYyO6PSMozM%253D"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:22:37.480856+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:22:37.480343+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +8f8501fb-9e27-42fd-88d8-329c594baa59 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBj9MwEIX%2FiuV76tTepoq1iVS2QlRaoNoWDtymzmRrybGDZwLsv0fNFmmRUA8cbc97n%2BfN3BMMYbSbic%2FxCb9PSCx%2BDSGSvTw0csrRJiBPNsKAZNnZw%2Bbjo9WL0gIRZvYpyjeS8bZmzImTS0GK3baRvitW7gRQmWq9rhz0rnYG6%2F7U3%2BllpddV3dWmvuu63kjxFTP5FBupF6UUO6IJd5EYIjdSl9oUpSmW5rjUVmurV4tVab5JsUViH4Fn5Zl5tEqF5CCcE7Gty7JUMI7Bu7lEXVpQzxl6iFDMB6KkTj52Pj6rjJ3P6FhJsfnT%2FEOKNA2YD5h%2FeIdfnh7%2FwTEXzmwHjqTYX1N49%2Bp7O7IrnOyH43Ff7D8fjrKdx2bnDLJ4n%2FIAfNvkcuO7op9LLUb2%2FCLbG%2F8ckKEDhnv1BtVe1%2BUTDLjb7lPw7uU%2F8JwhksfIUmxCSD8fMgJjIzlPKFX7ivx7KdvfAQAA%2F%2F8%3D&RelayState=MjBmNjVsNWdZYzZwRU1zRGtCcFR3Q0w5ZUtGR25yOVVKWURhMDRlVHVsdDk3MU9melB8ZGQzZmMwZmQt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=B3BcE%2BDfKNr68aH3uXR%2F3TvCQvoni9ZtcGouK%2Fo9vxSwu%2BIc9EiPmnZImLaojWcaWfkKGRqaf%2BFlVIPMsPMLwnIqm5DMhM8MoBWOOc9zl7fCq6K7ojpiOZCA4nTIq281TICDjPG0lkVk%2BvVUQOgBAt%2Fm9OHgaBi%2FuIEXAiUKuI9WqlzJ9jmsyGSO4OUScXt%2B0uWh598Lhffjhc51lbK06Ih3t3iN%2ByGnnSZBbh%2Fg0tmrH%2BuyMCZUsFzgTK5k7%2BYKz9tMtb6nh6vUyzXihayOD5sX8S%2Fyen6NdSCM2EztBqahCpTBGKTeNBvJbsaHW%2Bxtm87%2FDddi2dOH71eKGa%2BPr66Bv0t9E6UI0GilGqEGKfe0SCyAdAwjIIy%2FfV3uJlZCuOk3MZa%2F4qgyMcC3PJEAxAiUsdPo9uLTi0pWuTr01qjFxkf28%2B3ERSAh9mlfcrAy9R%2FAF9Eq9KqBXPdqypGtcDkhihivtGpY7uS7xW9lrMiZzv3ffZrFHXfP1cMizvtVXkQiRf3st1KMxcrOXyIyHtaKWB1BQxUiE%2BBsS%2FlG9ZoVSpVXkIKmiMKWozFAzQNNJicWF7E5TEKhKVnB%2BT9Rc0e6qoaU7cgMSPSYPrjN2WEZPrTVMLn2QZ1kV7B8D0FXwthHpJQvDI66nXFW8kf1I7vM5TnWLJZLBYyO6PSMozM%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:22:37.698123+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:22:37.697561+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +53020bf2-b2f1-4a00-8106-f068bfd43302 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBbxMxEIX%2FiuX7xo69AWp1VwqNEJEKRE3gwG3inTSWvPbimQX671G2QSoS2kOPtue9z%2FNmbgn6OLj1yOf0gD9GJBa%2F%2B5jIXR4aOZbkMlAgl6BHcuzdfv3p3pmFdkCEhUNO8oVkmNcMJXP2OUqx3TQydJXuTvZtZ9HbI5qVwdU7U4O2Gur6ja6N8X5p9MkfpfiGhUJOjTQLLcWWaMRtIobEjTTa2ErbamkPS%2BOMcfVysTI336XYIHFIwJPyzDw4pWL2EM%2BZ2N1orRUMQwx%2BKlGXFtRjgRMkqKYDUVbHkLqQHlXBLhT0rKRY%2F23%2BLicaeyx7LD%2BDx68P9%2F%2Fh2AtnsgNPUuyuKbx%2F9p2P7Aon9%2FFw2FW7L%2FuDbKexuSmDIj7k0gPPm1xuQledplKHiQM%2FyXbmnz0ydMBwq16g2uu6fIYet5tdjsE%2FvQLPBRIFTCzFOsb8664gMDaSy4hStc%2FIf5ey%2FRMAAP%2F%2F&RelayState=MUZpWUxjVUNYRUttcTdLaXRqVWhadTBkVzFmRUJhUWUwaWdkNHRRcmhsQWk2NXhzNnN8YjY3OGJlODMt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=iEae0yzkwmmEGk7goszwfJQvGB887jfnfszCokTmcnDBxT2FvWwYM%2FQ3chK3nvYHi%2BpmVVQmlFOFeq%2But0c8zbvSHz8oDkLy%2F1aIvQejRm%2B6HOJXxKfscKwYMOczyKD%2BBFTz6qEwiqBXeCmK8ab9jRwgt4NCz77aN%2Fx320cFZFOeK%2F8MQzUj%2FgAW1l1kzFe0eK4fQ2WQqRydvYtUcUMk%2FMfFQZZL%2BysvS8AnGVt15V13ZE6b%2BaM37F%2B726vOBqjyse99cLpZsY08P6PIKr7duElXND25x1jMyqC1hEEOBCzSj9Rd9be4elzUWMDRLPzEpPgLVD05cdvt64Dp%2FIP05HFW036Xt8A37azAfr5gulR%2B1ZDlsNXbnCHAHjVSfuAiS31%2B%2B%2BwPMwCk5hWInP5b8D7uCR989om153iD61cJgUrUHdBknhikTn6hhGahKNLVf6uDNcDiqdfcAEzgnaMB2Hy1MxTpz3Ge4nmXj6wK2%2F%2BgDhPTu6JayscchroBZPt7U4oN6ryuVcuSuOToqVJvhMilGUzMP4a9yeHqv6qk7T9egBBfwIrC%2FQ%2FsfNblceIDUTLomxw3gahf0Qb1JxmsuTqCYYHSJiddmBhMUzQ4iEMjz8tqEFWo6pJZFE1SrQATH7mXEB3Ki6%2FwkyBYPq6KHV36nDYhKJT34kWcrsaoRiA%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:22:41.756407+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:22:41.755874+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +33883ab6-55eb-40af-bd68-6f1b00a360c4 authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBb9s%2BDMW%2FiqG7I1VK%2F4mF2kD%2BDYYF6LagyXbYjZXoRoAseSK9rd9%2BiJsBHTDksKMkvvcTH3lHMMTRbiY%2BpUf8NiFx9XOIiez5oRVTSTYDBbIJBiTLzh42Hx6sXigLRFg45CTeSMbrmrFkzi5HUe22rQi%2BXprGm1vjV6s1%2BnWz7lWv%2FNo40zw12rhbpVbw37JfiuoLFgo5tUIvlKh2RBPuEjEkboVW2tTK1DfmeKOt1na5Whijv4pqi8QhAc%2FKE%2FNopYzZQTxlYtsopSSMYwxuLpHnFuRzgR4S1POBKMunkHxIz7KgDwUdS1Ftfjd%2FnxNNA5YDlu%2FB4efHh79wzJkz24EjUe0vKfz%2F6ns9sguc7PvjcV%2FvPx2OopvHZucMSvUulwH4usn5Jvi6n0stJg78Iror%2FxyQwQPDnXyD6i7r8hEG3G33OQb38g94LpAoYGJRbWLMP%2B4LAmMruEwoZPeK%2FHMpu18BAAD%2F%2Fw%3D%3D&RelayState=anIybTVpRXpNb1M1cTY1STZkbTg5MnFEQ2Q5eUhyS3RmMnlhWDZrMWhtRVNCV3dieTJ8ZTU1N2E0YzIt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=Hg4HrLcQEHmjmUoBFkreDfipeHYL03BpwjjG0oErIkjegN5cvJeK6vOKgMuecGSt07zBYnOZ7w4%2BFbztzlUA9Ck1Z4939R8cWdIHwwXWq4EBCIANuRo83ae7igPfWK%2BAa%2FRRcVRsoHwpJC0Mj5Icz4obi6JYrQDy3YdY0jwRa7d5NDiYdmi3zmF2O4gBZqZmrIdJPeDGmF%2F6Ut3%2Bbpkw8Hkc%2FVSXohyNRsedQXLT30Uc7KsNSrdfIqlhJlYFhtDLh3ZKGWXxeI3qsKDwwj%2BCmbuzk8ElQfokH1ZBievQCrZ%2FpJZnxDYWZ2ipmAZAm%2BojsE0gJCVLZT6PMMF%2FJeP98Q8Z35rVZ8fNgJ0F14OPaU%2FRad12rMTJdlnoAVAbxvIhO%2BezuftLg81VAeJmxmhqU0wPpxZjFv3c5jsC2w04QufYW6rGQ9Eqk9Aul%2BBM398CWXo2fdWqSdTK3R9k9Hu4OPMD%2BOE%2FY4TxF4aDDfoDnO2AjWz0aW0SgU4R8%2B1Mq03kZhz5WGJ%2BVV4rbvIZC3rmTU2Uu9PXSUXrFEKe%2Fh3hifwHiCfLiQd7%2FttY1syGI%2ByOjBTCpfEYc8Idbk%2BVZDuWwLHFKk6sJPZ3S65DWFY83uGSmYmhmci8NG9tpaFu47ZrTJ0XIf8uVrp7NbLuJpJQ428XqyWeyskr1QchFoA5gK0%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:22:47.615052+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:22:47.614547+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +a3a94a54-ad14-44e1-b3fa-82daeded38cc authorize_application authentik.providers.saml.views.flows {"flow": "a7ef54bb79594559979d9345c022e086", "http_request": {"args": {"query": "SAMLRequest=nJJBb9swDIX%2FiqC7I1lu6lqoDWQNhgXotqDJdtiNkZlGgCx5Ir2t%2F36ImwEdMOSwoyS%2B94mPvCcYwmhXE5%2FiE36fkFj8GkIke35o5ZSjTUCebIQBybKzu9XHR2sW2gIRZvYpyjeS8bpmzImTS0GKzbqVvi%2BwPkBVHg8llDfQGF0v4Q7uqmZZNb3Dm6o2eHtsbkGKr5jJp9hKs9BSbIgm3ERiiNxKo01V6Kooq31prDF2qRd1WX%2BTYo3EPgLPyhPzaJUKyUE4JWLbaK0VjGPwbi5R5xbUc4YjRCjmA1FSBx97H59Vxt5ndKykWP1p%2FiFFmgbMO8w%2FvMMvT4%2F%2F4FRnzmwHjqTYXlJ49%2Bp7PbILnOyH%2FX5bbD%2Fv9rKbx2bnDLJ4n%2FIAfN3kfOP74jiXWozs%2BUV2V%2F45IEMPDPfqDaq7rMsnGHCz3qbg3ct%2F4DlDJI%2BRpViFkH4%2BZATGVnKeUKruFfn3Una%2FAwAA%2F%2F8%3D&RelayState=M3pwWm9kRldFeml2eThQVHBQcGI1NGp6Y3VCdGE2QU4yY0Eyc05OVlZzS1hlZEpsVEx8ZmFkNjlmYzEt&SigAlg=http%3A%2F%2Fwww.w3.org%2F2001%2F04%2Fxmldsig-more%23rsa-sha256&Signature=AMKBlDIOTlPlZhLhBMQnT6S1%2FPH0luAJKcoJDqnljva%2Fc8y8ttw8hyj9%2FsZ66ghIVdelzLHGYf0zHhnQpjLTnOlss1XKigzxLfzcW4VpNzb87x%2Bo4XgtKVQg41XYUiidoaY7WhaMViAlXit93lAoSVxLSRf2bdVMKAUdze1W2PHZLzNFWb8le%2FkIc1RL9am%2FqKHPVkV7dgaZYzsGjID1buVA8nES5AbeFEa13ncP4BgqlUOhBeYnPO7uY7g6UDXOrGFpsVbg7NCy61ERbU1YZgUUcVB%2F%2Fzuyl%2Bx9oGwAnE%2FcGQ62NWS4MgcUSyC9fUhm%2Bdh1FvCPpLbmh3aAFHwJgfW1zrLZqosu2vgDWdPl%2FFy8GhrPQtxHpUsmminQqVWuB03J5RL5faXuV8KbMSyHEKBYrPL8TosM5AUC8Myc3ofAWmoSnBhHHPDjo%2FGuvjziRCyknuIgMwXASS0fOJonaYJyYGwHNOFYdRhMvP0h40y5sbZZEsDQOZI0x6PkGX41rHfsB2K6nUshcKwr7vxf8DpBblmCgby7ikD11ZQaM32MKv9Nuy91jQ2ukPBlXTOZy2fUKokK0EHs%2Fu7W1%2FB6ZlWSCyC2B0Vk7CsG2WILsRo6U%2Fhpzn9Stka1y0L59k4%2Bj6yErQsSWny06kEaCiaS%2B1Os6Epib00K8q8Mhkf8swk%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "506b118040694dda9405e185f355c34d", "app": "authentik_core", "name": "Grafana SAML", "model_name": "application"}} 172.21.0.1 2023-03-13 12:22:50.948601+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:22:50.94811+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +6e9edd91-9db5-4c23-9bcf-66a796709859 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:27:00.034068+00 {} 2024-03-12 12:27:00.033459+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +9cebce0e-a584-4b23-b496-b45994aa0097 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:32:00.030109+00 {} 2024-03-12 12:32:00.02958+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +6d9f7727-b1eb-4886-8bd1-8813397af8f2 model_created authentik.events.middleware {"model": {"pk": 3, "app": "authentik_providers_oauth2", "name": "grafana-oidc", "model_name": "oauth2provider"}, "http_request": {"args": {}, "path": "/api/v3/providers/oauth2/", "method": "POST"}} 172.21.0.1 2023-03-13 12:32:49.967325+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-03-12 12:32:49.966976+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +fa6cc07b-18e3-4f04-a1c7-8c235e696462 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 12:55:00.387054+00 {} 2024-03-12 12:55:00.386557+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +c319f061-18ad-4abe-a39d-8d952a64c49f model_created authentik.events.middleware {"model": {"pk": "d7dfa1d658cb4bfc94c538a2e507e290", "app": "authentik_core", "name": "Grafana OIDC", "model_name": "application"}, "http_request": {"args": {}, "path": "/api/v3/core/applications/", "method": "POST"}} 172.21.0.1 2023-03-13 12:33:04.824311+00 {"pk": 1, "email": "admin@localhost", "username": "akadmin"} 2024-03-12 12:33:04.823908+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +40fa3c92-e9ce-48ed-a80a-f49a5d93d347 login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:35:42.688944+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 12:35:42.682304+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +34fe3cf8-47fe-4a75-bf99-74885f47b69e login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:36:00.789499+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 12:36:00.784286+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +637bc09b-af2c-4e11-9e01-e131d553a69b login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "next=%2Fapplication%2Fo%2Fauthorize%2F%3Fclient_id%3D43e8d2746fe2e508325a23cdf816d6ddd12e94f1%26redirect_uri%3Dhttp%253A%252F%252Flocalhost%253A3000%252Flogin%252Fgeneric_oauth%26response_type%3Dcode%26scope%3Dopenid%2Bemail%2Bprofile%26state%3DKhwpxm9LZ-bo7yjuyBvGuTCM2Gi4pSXwJk8hCRWup-s%253D"}, "path": "/api/v3/flows/executor/default-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:36:31.733073+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:36:31.732702+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +530a91a4-929a-4d8e-b2ed-8f26d4e36b0e authorize_application authentik.providers.oauth2.views.authorize {"flow": "a7ef54bb79594559979d9345c022e086", "scopes": "openid email profile", "http_request": {"args": {"query": "client_id=43e8d2746fe2e508325a23cdf816d6ddd12e94f1&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Flogin%2Fgeneric_oauth&response_type=code&scope=openid+email+profile&state=Khwpxm9LZ-bo7yjuyBvGuTCM2Gi4pSXwJk8hCRWup-s%3D"}, "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/", "method": "GET"}, "authorized_application": {"pk": "d7dfa1d658cb4bfc94c538a2e507e290", "app": "authentik_core", "name": "Grafana OIDC", "model_name": "application"}} 172.21.0.1 2023-03-13 12:36:31.983378+00 {"pk": 8, "email": "authentik-editor@localhost", "username": "authentik-editor"} 2024-03-12 12:36:31.982723+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +993af708-fc75-4a06-864f-54fe56c6a753 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:37:00.030818+00 {} 2024-03-12 12:37:00.030297+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +61565f70-33eb-4563-a7a7-a31a963087ee login authentik.events.signals {"auth_method": "password", "http_request": {"args": {"query": "goauthentik.io%2Foutpost%2Fldap=true"}, "path": "/api/v3/flows/executor/ldap-authentication-flow/", "method": "GET"}, "auth_method_args": {}} 172.21.0.1 2023-03-13 12:40:53.885265+00 {"pk": 6, "email": "ldapservice@localhost", "username": "ldapservice"} 2024-03-12 12:40:53.878318+00 t {"pk": "1b45e4ae6c1b4ea89691df11c97baeef", "app": "authentik_tenants", "name": "Default tenant", "model_name": "tenant"} +fd92f349-4b74-4387-8f10-56a833ef3c44 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:42:00.041363+00 {} 2024-03-12 12:42:00.040909+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +f5706fbf-6732-4b32-85cd-e196dcf5b955 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:47:00.053771+00 {} 2024-03-12 12:47:00.053281+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +5c7b37ea-42a9-4cb3-be09-9c8dbb6b3585 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:52:00.051624+00 {} 2024-03-12 12:52:00.051085+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +68d2eb3a-2a41-48fb-9d2a-06522ceb6377 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 12:55:00.393913+00 {} 2024-03-12 12:55:00.393671+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +9de89835-a209-433c-a1bf-760c6397182f system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 12:55:02.705404+00 {} 2024-03-12 12:55:02.704791+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +77ec5291-700d-4885-8a0a-72816c0bf28a system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 12:55:02.789671+00 {} 2024-03-12 12:55:02.789415+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +36af14d1-5184-4bd2-aff9-6316e57f4ad3 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 12:55:02.803163+00 {} 2024-03-12 12:55:02.802919+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +89f008f4-c58b-4279-9127-cadeef4b1450 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 12:55:10.131144+00 {} 2024-03-12 12:55:10.130677+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +5f428888-6bf6-4f76-b5b2-6c23ad3085d6 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 12:57:00.044786+00 {} 2024-03-12 12:57:00.044281+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +5d02a037-9888-47a5-986f-9577deca828d system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 13:02:00.046989+00 {} 2024-03-12 13:02:00.046464+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +15c00b9e-f9aa-41ec-b74b-0cb6baa59718 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 13:07:00.032693+00 {} 2024-03-12 13:07:00.031989+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +50822949-ba35-463b-ae97-79240c11349e system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 13:12:00.04835+00 {} 2024-03-12 13:12:00.047877+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +63ab0149-463e-461f-9322-f5c6e4856152 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 13:17:00.057481+00 {} 2024-03-12 13:17:00.056991+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +27cdf678-0982-4dd4-b90c-3e355523126a system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 13:22:00.025999+00 {} 2024-03-12 13:22:00.025478+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +aeb6dbe0-af34-4d19-8fe3-6cb9d955df73 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 13:27:00.031645+00 {} 2024-03-12 13:27:00.031085+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +4d456d22-d212-48d1-92fd-02c7b83d122e system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 13:32:00.032695+00 {} 2024-03-12 13:32:00.032177+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +faa22bf9-18f1-4699-980a-0b11d33d9ab3 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 13:37:00.029121+00 {} 2024-03-12 13:37:00.028611+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +67dcf33f-287c-40d2-ab5b-33aa01a35451 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 13:42:00.030479+00 {} 2024-03-12 13:42:00.029833+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +1c044336-a476-432a-994c-eb63432f857a system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 13:47:00.028801+00 {} 2024-03-12 13:47:00.028225+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +97abca4d-ce75-4802-8084-fefc98c81a93 system_task_exception authentik.events.monitored_tasks {"message": "Task clean_expired_models encountered an error: Traceback (most recent call last):\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 451, in trace_task\\n R = retval = fun(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 207, in _inner\\n reraise(*exc_info)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/_compat.py\\", line 57, in reraise\\n raise value\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/celery.py\\", line 202, in _inner\\n return f(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/celery/app/trace.py\\", line 734, in __protected_call__\\n return self.run(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/authentik/core/tasks.py\\", line 38, in clean_expired_models\\n for obj in objects:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 394, in __iter__\\n self._fetch_all()\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 1867, in _fetch_all\\n self._result_cache = list(self._iterable_class(self))\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/query.py\\", line 87, in __iter__\\n results = compiler.execute_sql(\\n ^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/models/sql/compiler.py\\", line 1398, in execute_sql\\n cursor.execute(sql, params)\\n File \\"/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py\\", line 563, in execute\\n return real_execute(self, sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 67, in execute\\n return self._execute_with_wrappers(\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 80, in _execute_with_wrappers\\n return executor(sql, params, many, context)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 84, in _execute\\n with self.db.wrap_database_errors:\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/utils.py\\", line 91, in __exit__\\n raise dj_exc_value.with_traceback(traceback) from exc_value\\n File \\"/usr/local/lib/python3.11/site-packages/django/db/backends/utils.py\\", line 89, in _execute\\n return self.cursor.execute(sql, params)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\"/usr/local/lib/python3.11/site-packages/django_prometheus/db/common.py\\", line 71, in execute\\n return super().execute(*args, **kwargs)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\ndjango.db.utils.ProgrammingError: column authentik_providers_oauth2_authorizationcode.is_open_id does not exist\\nLINE 1: ...ntik_providers_oauth2_authorizationcode\\".\\"nonce\\", \\"authentik...\\n ^\\n"} \N 2023-03-13 13:52:00.028658+00 {} 2024-03-12 13:52:00.028156+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +f05f35f9-fbe7-4838-9728-284298dd4776 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 13:55:00.420374+00 {} 2024-03-12 13:55:00.419803+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +8d7de2bb-2dfd-419a-b87f-dfa0dd383608 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 13:55:00.429683+00 {} 2024-03-12 13:55:00.429333+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +7e57ae9e-48bd-428c-91d6-9127b5dff427 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 13:55:02.788144+00 {} 2024-03-12 13:55:02.787458+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +04362a89-dae5-4023-a99a-541668da1e9e system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 13:55:02.882399+00 {} 2024-03-12 13:55:02.882148+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +a934eccb-bc35-45d4-8e2a-87eaca050a30 system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 13:55:02.900363+00 {} 2024-03-12 13:55:02.900026+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} +7dc1bd11-f563-45a3-aa35-71e7699619cc system_exception authentik.root.celery {"message": "Traceback (most recent call last):\\ndjango.db.utils.InterfaceError: connection already closed"} \N 2023-03-13 13:55:05.125416+00 {} 2024-03-12 13:55:05.124542+00 t {"pk": "8ec6ecbff1624757a9c8360797195029", "app": "authentik_tenants", "name": "Tenant fallback", "model_name": "tenant"} \. @@ -2788,8 +3008,6 @@ c5efd86a-6999-4a7b-8fd9-305b26d96bc6 login authentik.events.signals {"auth_metho -- COPY public.authentik_events_notification (uuid, severity, body, created, seen, event_id, user_id) FROM stdin; -2e407e51-2f8e-4386-8f0e-44075f108506 alert Changelog: https://goauthentik.io/docs/releases/2022.12#fixed-in-2022121 2023-01-02 14:17:10.978208+00 f eeb1be95-4ade-4812-93b0-2c87db29716c 1 -b60edc8e-400f-4598-8985-b16194cd6fe1 alert Changelog: https://goauthentik.io/docs/releases/2022.12#fixed-in-2022121 2023-01-02 14:17:11.648064+00 f 12d75a37-20ee-44f4-9f1b-9f99d6dfdeea 1 b124e245-e4fc-457d-9171-329220ca358f alert Failed to verify signature 2023-01-02 16:20:28.230329+00 f aa49c5e8-b508-4046-907e-cfdca67edf75 1 \. @@ -2841,21 +3059,21 @@ COPY public.authentik_events_notificationwebhookmapping (propertymapping_ptr_id) -- Data for Name: authentik_flows_flow; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_flows_flow (flow_uuid, name, slug, designation, policybindingmodel_ptr_id, title, background, compatibility_mode, layout, denied_action) FROM stdin; -c6e83269-3b5e-4f2a-8014-f198578240c1 Welcome to authentik! Please select a username. default-source-enrollment enrollment 63e07f88-3fd7-4180-807f-470bb3209bac Welcome to authentik! Please select a username. f stacked message_continue -7bd42149-dc52-445a-bd1e-4513c50d01dd Pre-Authentication default-source-pre-authentication stage_configuration 081ce9e5-201f-48e9-af60-7c10076f0857 Pre-authentication f stacked message_continue -7c801f5d-8952-4b95-9f6c-385af22e798d default-oobe-setup initial-setup stage_configuration db71b00d-8d55-4ce6-a1a4-8fa8be93e810 Welcome to authentik! f stacked message_continue -0bcbad7c-01fc-4ed0-b3f1-a1671683d6b3 default-authenticator-static-setup default-authenticator-static-setup stage_configuration c4f758ad-0e74-4b1a-a1bc-32ae3a370b69 Setup Static OTP Tokens f stacked message_continue -35537410-5840-48ee-ba54-76f2a7d42617 default-authenticator-totp-setup default-authenticator-totp-setup stage_configuration 62e82cc0-d670-4f23-8d7b-14675757dd8c Setup Two-Factor authentication f stacked message_continue -611b3458-aadd-47c1-b37e-1940bc72ede7 default-authenticator-webauthn-setup default-authenticator-webauthn-setup stage_configuration 3d7a1eb4-72c2-44dd-bdf7-741750024ce2 Setup WebAuthn f stacked message_continue -4ca3e92c-7f33-4d2f-bb5e-1efa4c6c902a Welcome to authentik! default-source-authentication authentication 181928f0-b530-4858-bee9-376597ac63ed Welcome to authentik! f stacked message_continue -4b14409d-da92-4b6c-91e8-bad06d0966c2 Change Password default-password-change stage_configuration 65c208d9-e145-4259-bb87-deecf97c3643 Change password f stacked message_continue -3b01d5c4-0d46-4bfe-b37f-553a7b4d051c Authorize Application default-provider-authorization-explicit-consent authorization ab6b7aa3-82da-4972-9158-7b7fc70ab973 Redirecting to %(app)s f stacked message_continue -c4257191-cb7a-4120-9566-a38ba8a50248 Welcome to authentik! default-authentication-flow authentication 5be1e1aa-8051-417e-b03a-1a0e87cd8101 Welcome to authentik! f stacked message_continue -2287d235-72aa-4d23-80a2-44278d7c7839 Logout default-invalidation-flow invalidation 7c8e66c0-7a12-42bd-901f-a88fcd742a5e Default Invalidation Flow f stacked message_continue -a7ef54bb-7959-4559-979d-9345c022e086 Authorize Application default-provider-authorization-implicit-consent authorization cba52268-0d9a-40bd-ae7f-b723f5e05671 Redirecting to %(app)s f stacked message_continue -1d2dd494-c62d-438a-8d0b-f864084f883c User settings default-user-settings-flow stage_configuration 71205979-10a2-41db-9e08-c05f1644f732 Update your info f stacked message_continue -87ca9599-5323-451c-8603-2f5bee7a0c12 ldap-authentication-flow ldap-authentication-flow authentication 105415a2-7753-4a7f-bdf5-ed9841420289 ldap-authentication-flow f stacked message_continue +COPY public.authentik_flows_flow (flow_uuid, name, slug, designation, policybindingmodel_ptr_id, title, background, compatibility_mode, layout, denied_action, authentication) FROM stdin; +c6e83269-3b5e-4f2a-8014-f198578240c1 Welcome to authentik! Please select a username. default-source-enrollment enrollment 63e07f88-3fd7-4180-807f-470bb3209bac Welcome to authentik! Please select a username. f stacked message_continue none +7c801f5d-8952-4b95-9f6c-385af22e798d default-oobe-setup initial-setup stage_configuration db71b00d-8d55-4ce6-a1a4-8fa8be93e810 Welcome to authentik! f stacked message_continue none +4ca3e92c-7f33-4d2f-bb5e-1efa4c6c902a Welcome to authentik! default-source-authentication authentication 181928f0-b530-4858-bee9-376597ac63ed Welcome to authentik! f stacked message_continue none +4b14409d-da92-4b6c-91e8-bad06d0966c2 Change Password default-password-change stage_configuration 65c208d9-e145-4259-bb87-deecf97c3643 Change password f stacked message_continue none +c4257191-cb7a-4120-9566-a38ba8a50248 Welcome to authentik! default-authentication-flow authentication 5be1e1aa-8051-417e-b03a-1a0e87cd8101 Welcome to authentik! f stacked message_continue none +1d2dd494-c62d-438a-8d0b-f864084f883c User settings default-user-settings-flow stage_configuration 71205979-10a2-41db-9e08-c05f1644f732 Update your info f stacked message_continue none +87ca9599-5323-451c-8603-2f5bee7a0c12 ldap-authentication-flow ldap-authentication-flow authentication 105415a2-7753-4a7f-bdf5-ed9841420289 ldap-authentication-flow f stacked message_continue none +35537410-5840-48ee-ba54-76f2a7d42617 default-authenticator-totp-setup default-authenticator-totp-setup stage_configuration 62e82cc0-d670-4f23-8d7b-14675757dd8c Setup Two-Factor authentication f stacked message_continue require_authenticated +0bcbad7c-01fc-4ed0-b3f1-a1671683d6b3 default-authenticator-static-setup default-authenticator-static-setup stage_configuration c4f758ad-0e74-4b1a-a1bc-32ae3a370b69 Setup Static OTP Tokens f stacked message_continue require_authenticated +611b3458-aadd-47c1-b37e-1940bc72ede7 default-authenticator-webauthn-setup default-authenticator-webauthn-setup stage_configuration 3d7a1eb4-72c2-44dd-bdf7-741750024ce2 Setup WebAuthn f stacked message_continue require_authenticated +a7ef54bb-7959-4559-979d-9345c022e086 Authorize Application default-provider-authorization-implicit-consent authorization cba52268-0d9a-40bd-ae7f-b723f5e05671 Redirecting to %(app)s f stacked message_continue require_authenticated +3b01d5c4-0d46-4bfe-b37f-553a7b4d051c Authorize Application default-provider-authorization-explicit-consent authorization ab6b7aa3-82da-4972-9158-7b7fc70ab973 Redirecting to %(app)s f stacked message_continue require_authenticated +7bd42149-dc52-445a-bd1e-4513c50d01dd Pre-Authentication default-source-pre-authentication stage_configuration 081ce9e5-201f-48e9-af60-7c10076f0857 Pre-authentication f stacked message_continue none +2287d235-72aa-4d23-80a2-44278d7c7839 Logout default-invalidation-flow invalidation 7c8e66c0-7a12-42bd-901f-a88fcd742a5e Default Invalidation Flow f stacked message_continue none \. @@ -2864,9 +3082,7 @@ a7ef54bb-7959-4559-979d-9345c022e086 Authorize Application default-provider-auth -- COPY public.authentik_flows_flowstagebinding (policybindingmodel_ptr_id, fsb_uuid, re_evaluate_policies, "order", target_id, stage_id, evaluate_on_plan, invalid_response_action) FROM stdin; -3cb69a8b-fd96-415c-95e6-f094934905d0 f7804829-283b-4e98-adc2-186ef7f2fc09 f 0 611b3458-aadd-47c1-b37e-1940bc72ede7 7dac33d8-ebb1-421c-b9d4-13aba2c28a3c t retry 88ddedff-15ef-4b45-86cf-0aebf0e55b25 bae6a178-c8fc-4041-b2f0-a1e44f83259f f 0 4ca3e92c-7f33-4d2f-bb5e-1efa4c6c902a 2e18f37d-528d-4c12-b9ea-d7dbf67b56a7 t retry -65398796-09e1-494b-af85-8bed8b491c62 2bd6d69e-1b08-4c42-bf8c-adaa4ca284ce f 0 3b01d5c4-0d46-4bfe-b37f-553a7b4d051c d9149797-1c7d-4b62-b193-2e745f9dbb9c t retry 6f6c5b88-ae7e-44ae-bdae-432893a9e4b6 534d4ed8-ca6e-4140-8a2b-77c546c67d07 t 0 c6e83269-3b5e-4f2a-8014-f198578240c1 89176b0f-7a9c-41eb-8897-6c532db04b96 t retry 417e795d-6832-40b6-b083-4462357471cb 9735981f-6ff9-4207-8093-47b15ba0b678 f 1 c6e83269-3b5e-4f2a-8014-f198578240c1 dfc93c1c-c398-4e8f-aa34-fdc21b6accfb t retry c0792518-ed7b-4d0f-a373-5f20c253de11 aa44b8e7-908e-466f-9e5b-467c8b380ed6 f 0 4b14409d-da92-4b6c-91e8-bad06d0966c2 366481d2-b22d-4993-9502-d367fb8ae7f1 t retry @@ -2876,16 +3092,18 @@ dfabc06a-e2f8-401d-92c4-01e3185f7dc1 b695f5b6-73e4-4f4e-a25f-6eba4715ec1d f 1 4b b696e261-9362-4cbe-b864-eee1f3c04afe b4a7322f-e68d-4512-a10d-69b95bceefec f 20 c4257191-cb7a-4120-9566-a38ba8a50248 02b4a829-f9ab-45d0-adcc-11e3c165f1c4 t retry 07e871ad-dc36-48ea-abf8-397cd2a612b7 60731f11-952f-4c2f-bd4c-f35310d51e84 f 30 c4257191-cb7a-4120-9566-a38ba8a50248 b461e46b-7c2f-4188-b4a7-7a4df1c2c142 t retry cd0bdadb-3a40-458a-bced-d62f12dcb5aa 73c108f5-720c-46b6-922f-2aa1c9d6bf89 f 100 c4257191-cb7a-4120-9566-a38ba8a50248 58a4b17a-a21a-4c29-a3fd-6797bd7260cc t retry -a67caf05-5165-441b-8e62-6f37fa9c2a0d d8ab26bb-8bd3-4bc8-8e58-9179a5805d29 f 0 2287d235-72aa-4d23-80a2-44278d7c7839 6fce99da-2643-4784-928c-94c1b2a3ab16 t retry 1f1353d5-b69c-438e-822c-c13f75fdb18a 737c6465-10a1-4e8d-8fce-ab209f9b6d61 f 20 1d2dd494-c62d-438a-8d0b-f864084f883c fa87ed01-29a6-457d-936d-4667077bba44 t retry cd98a539-1b50-4d59-b4b9-4a66b98b20fe 5672aba5-f29a-412b-b0fe-15a7ab162ec8 f 100 1d2dd494-c62d-438a-8d0b-f864084f883c 9934f0fc-b4b4-44e0-a90d-7587844ac68b t retry bc36ea75-31be-4dd6-b2cf-11f2e7ca7a33 744e08bc-bb8e-42f6-875a-bdf583d6a5e8 f 10 7c801f5d-8952-4b95-9f6c-385af22e798d 4b3bfdf2-31ed-4b1f-8de4-1752ef0ece92 t retry 563837f0-8633-46c5-8cd2-f744cb5f3591 aaa3e596-6bd8-4326-9ece-81f586cac391 t 20 7c801f5d-8952-4b95-9f6c-385af22e798d e87982c6-2f31-4dc5-bdce-2f680601c023 f retry 49f5f048-9c0b-4d92-a103-e5eec6ab1ed2 dbd6f009-ee18-4461-8757-8bd99925792c f 100 7c801f5d-8952-4b95-9f6c-385af22e798d 58a4b17a-a21a-4c29-a3fd-6797bd7260cc t retry -303b1296-cc7f-4887-92fd-0ea0550fc6d4 6dbcdc89-8ac7-4159-8cda-529cabea5f58 f 0 0bcbad7c-01fc-4ed0-b3f1-a1671683d6b3 4c0a51c3-ed6a-40d6-8889-3a3e8ac13546 t retry -4f206f06-1d5e-4725-8206-c58d48f5be6c 21bf872d-1b1b-44ee-a737-727e072d5680 f 0 35537410-5840-48ee-ba54-76f2a7d42617 0d0f2722-298b-4212-9307-640a205253bd t retry e4c83e8e-69f4-4993-a0c2-f99552fd76d0 585626b6-72d8-4f0f-9b4e-085d6a3c2ee0 f 10 87ca9599-5323-451c-8603-2f5bee7a0c12 f4abcb7d-5f92-4890-8760-afb9effda665 t retry 9fdfd009-537e-4b36-8cc8-98f62620f410 1e25b2d4-d52b-4f19-8b9e-65960d3a64a8 f 30 87ca9599-5323-451c-8603-2f5bee7a0c12 8a432e54-5bb4-4199-add9-53e198eca1dc t retry +a67caf05-5165-441b-8e62-6f37fa9c2a0d d8ab26bb-8bd3-4bc8-8e58-9179a5805d29 f 0 2287d235-72aa-4d23-80a2-44278d7c7839 6fce99da-2643-4784-928c-94c1b2a3ab16 t retry +4f206f06-1d5e-4725-8206-c58d48f5be6c 21bf872d-1b1b-44ee-a737-727e072d5680 f 0 35537410-5840-48ee-ba54-76f2a7d42617 0d0f2722-298b-4212-9307-640a205253bd t retry +303b1296-cc7f-4887-92fd-0ea0550fc6d4 6dbcdc89-8ac7-4159-8cda-529cabea5f58 f 0 0bcbad7c-01fc-4ed0-b3f1-a1671683d6b3 4c0a51c3-ed6a-40d6-8889-3a3e8ac13546 t retry +3cb69a8b-fd96-415c-95e6-f094934905d0 f7804829-283b-4e98-adc2-186ef7f2fc09 f 0 611b3458-aadd-47c1-b37e-1940bc72ede7 7dac33d8-ebb1-421c-b9d4-13aba2c28a3c t retry +65398796-09e1-494b-af85-8bed8b491c62 2bd6d69e-1b08-4c42-bf8c-adaa4ca284ce f 0 3b01d5c4-0d46-4bfe-b37f-553a7b4d051c d9149797-1c7d-4b62-b193-2e745f9dbb9c t retry \. @@ -2903,26 +3121,26 @@ COPY public.authentik_flows_flowtoken (token_ptr_id, _plan, flow_id) FROM stdin; COPY public.authentik_flows_stage (stage_uuid, name) FROM stdin; 366481d2-b22d-4993-9502-d367fb8ae7f1 default-password-change-prompt -e87982c6-2f31-4dc5-bdce-2f680601c023 default-password-change-write 02b4a829-f9ab-45d0-adcc-11e3c165f1c4 default-authentication-password b461e46b-7c2f-4188-b4a7-7a4df1c2c142 default-authentication-mfa-validation 44b8d668-3efe-4e44-aa7f-74849414f977 default-authentication-identification 58a4b17a-a21a-4c29-a3fd-6797bd7260cc default-authentication-login -6fce99da-2643-4784-928c-94c1b2a3ab16 default-invalidation-logout -9934f0fc-b4b4-44e0-a90d-7587844ac68b default-user-settings-write fa87ed01-29a6-457d-936d-4667077bba44 default-user-settings -4c0a51c3-ed6a-40d6-8889-3a3e8ac13546 default-authenticator-static-setup -0d0f2722-298b-4212-9307-640a205253bd default-authenticator-totp-setup -7dac33d8-ebb1-421c-b9d4-13aba2c28a3c default-authenticator-webauthn-setup 2e18f37d-528d-4c12-b9ea-d7dbf67b56a7 default-source-authentication-login -d9149797-1c7d-4b62-b193-2e745f9dbb9c default-provider-authorization-consent 03fc4a51-f2e0-4844-b58b-b421ea235f34 default-source-enrollment-login 89176b0f-7a9c-41eb-8897-6c532db04b96 default-source-enrollment-prompt -dfc93c1c-c398-4e8f-aa34-fdc21b6accfb default-source-enrollment-write 4b3bfdf2-31ed-4b1f-8de4-1752ef0ece92 stage-default-oobe-password 95715d75-025b-4e5e-9d23-96826479906d ldap-authentication-password 8a432e54-5bb4-4199-add9-53e198eca1dc ldap-authentication-login f4abcb7d-5f92-4890-8760-afb9effda665 ldap-identification-stage +e87982c6-2f31-4dc5-bdce-2f680601c023 default-password-change-write +9934f0fc-b4b4-44e0-a90d-7587844ac68b default-user-settings-write +dfc93c1c-c398-4e8f-aa34-fdc21b6accfb default-source-enrollment-write +6fce99da-2643-4784-928c-94c1b2a3ab16 default-invalidation-logout +0d0f2722-298b-4212-9307-640a205253bd default-authenticator-totp-setup +4c0a51c3-ed6a-40d6-8889-3a3e8ac13546 default-authenticator-static-setup +7dac33d8-ebb1-421c-b9d4-13aba2c28a3c default-authenticator-webauthn-setup +d9149797-1c7d-4b62-b193-2e745f9dbb9c default-provider-authorization-consent \. @@ -2938,7 +3156,7 @@ COPY public.authentik_outposts_dockerserviceconnection (outpostserviceconnection -- Data for Name: authentik_outposts_kubernetesserviceconnection; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_outposts_kubernetesserviceconnection (outpostserviceconnection_ptr_id, kubeconfig) FROM stdin; +COPY public.authentik_outposts_kubernetesserviceconnection (outpostserviceconnection_ptr_id, kubeconfig, verify_ssl) FROM stdin; \. @@ -3011,19 +3229,11 @@ fd5bfceb-8270-41f7-abef-84a47841d0e8 # This policy ensures that the setup flow c \. --- --- Data for Name: authentik_policies_hibp_haveibeenpwendpolicy; Type: TABLE DATA; Schema: public; Owner: authentik --- - -COPY public.authentik_policies_hibp_haveibeenpwendpolicy (policy_ptr_id, allowed_count, password_field) FROM stdin; -\. - - -- -- Data for Name: authentik_policies_password_passwordpolicy; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_policies_password_passwordpolicy (policy_ptr_id, amount_uppercase, amount_lowercase, amount_symbols, length_min, symbol_charset, error_message, password_field, amount_digits) FROM stdin; +COPY public.authentik_policies_password_passwordpolicy (policy_ptr_id, amount_uppercase, amount_lowercase, amount_symbols, length_min, symbol_charset, error_message, password_field, amount_digits, check_have_i_been_pwned, check_static_rules, check_zxcvbn, hibp_allowed_count, zxcvbn_score_threshold) FROM stdin; \. @@ -3083,32 +3293,33 @@ dfabc06a-e2f8-401d-92c4-01e3185f7dc1 any b696e261-9362-4cbe-b864-eee1f3c04afe any 07e871ad-dc36-48ea-abf8-397cd2a612b7 any cd0bdadb-3a40-458a-bced-d62f12dcb5aa any -7c8e66c0-7a12-42bd-901f-a88fcd742a5e any -a67caf05-5165-441b-8e62-6f37fa9c2a0d any -c4f758ad-0e74-4b1a-a1bc-32ae3a370b69 any -303b1296-cc7f-4887-92fd-0ea0550fc6d4 any 71205979-10a2-41db-9e08-c05f1644f732 any 1f1353d5-b69c-438e-822c-c13f75fdb18a any -62e82cc0-d670-4f23-8d7b-14675757dd8c any -4f206f06-1d5e-4725-8206-c58d48f5be6c any cd98a539-1b50-4d59-b4b9-4a66b98b20fe any -3d7a1eb4-72c2-44dd-bdf7-741750024ce2 any -3cb69a8b-fd96-415c-95e6-f094934905d0 any 181928f0-b530-4858-bee9-376597ac63ed any 88ddedff-15ef-4b45-86cf-0aebf0e55b25 any -ab6b7aa3-82da-4972-9158-7b7fc70ab973 any -65398796-09e1-494b-af85-8bed8b491c62 any -cba52268-0d9a-40bd-ae7f-b723f5e05671 any 63e07f88-3fd7-4180-807f-470bb3209bac any 6f6c5b88-ae7e-44ae-bdae-432893a9e4b6 any 417e795d-6832-40b6-b083-4462357471cb any 0a3c97a9-ac46-45cb-8718-a2984fff154a any -081ce9e5-201f-48e9-af60-7c10076f0857 any 105415a2-7753-4a7f-bdf5-ed9841420289 any e4c83e8e-69f4-4993-a0c2-f99552fd76d0 any 9fdfd009-537e-4b36-8cc8-98f62620f410 any -0e32dc99-655c-42f4-aca4-f3f271e010fd any 506b1180-4069-4dda-9405-e185f355c34d any +0e32dc99-655c-42f4-aca4-f3f271e010fd any +7c8e66c0-7a12-42bd-901f-a88fcd742a5e any +a67caf05-5165-441b-8e62-6f37fa9c2a0d any +d7dfa1d6-58cb-4bfc-94c5-38a2e507e290 any +62e82cc0-d670-4f23-8d7b-14675757dd8c any +4f206f06-1d5e-4725-8206-c58d48f5be6c any +c4f758ad-0e74-4b1a-a1bc-32ae3a370b69 any +303b1296-cc7f-4887-92fd-0ea0550fc6d4 any +3d7a1eb4-72c2-44dd-bdf7-741750024ce2 any +3cb69a8b-fd96-415c-95e6-f094934905d0 any +cba52268-0d9a-40bd-ae7f-b723f5e05671 any +ab6b7aa3-82da-4972-9158-7b7fc70ab973 any +65398796-09e1-494b-af85-8bed8b491c62 any +081ce9e5-201f-48e9-af60-7c10076f0857 any \. @@ -3124,6 +3335,10 @@ f433dfcb-3aa4-4d93-8abc-6fe2c4a77f77 ldapservice 192.168.48.1 {} 5 2022-10-25 09 2f00817d-e5f1-4e9d-bc4e-8210b2ca2258 authentik-admin 192.168.48.1 {} 1 2022-10-25 09:54:01.492491+00 85999073-85b3-4f12-93b8-a98b770daa41 akadmin 172.24.0.1 {} 1 2023-01-02 14:16:56.149781+00 0eb5ae80-8ca7-4431-bac6-2032e2e5ef97 authentik-admin 172.24.0.1 {} 1 2023-01-02 16:38:23.763498+00 +774c5225-53f8-4c7e-81f5-0c604fc2a68b authentik-editor 172.21.0.1 {} 1 2023-03-13 09:22:01.579092+00 +11631826-9f70-42c7-91d1-dc7b9fee5522 ldapservice 172.21.0.1 {} 3 2023-03-13 09:21:07.539614+00 +706276b1-28cc-44db-8d47-e36acca22b2c admin 172.21.0.1 {} -1 2023-03-13 09:19:23.126928+00 +16d6956d-4d9c-429d-a135-91d5dca763e0 akadmin 172.21.0.1 {} 1 2023-03-13 09:20:07.469678+00 \. @@ -3144,11 +3359,20 @@ COPY public.authentik_providers_ldap_ldapprovider (provider_ptr_id, base_dn, sea \. +-- +-- Data for Name: authentik_providers_oauth2_accesstoken; Type: TABLE DATA; Schema: public; Owner: authentik +-- + +COPY public.authentik_providers_oauth2_accesstoken (id, expires, expiring, revoked, _scope, token, _id_token, provider_id, user_id) FROM stdin; +1 2023-03-13 12:41:32.048979+00 t f openid email profile eyJhbGciOiJSUzI1NiIsImtpZCI6ImE1NmE2NjVjMGJhMTQ1MDdmY2Q0ZGU3NmZhZDdlYmNlIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjkwMDAvYXBwbGljYXRpb24vby9ncmFmYW5hLW9pZGMvIiwic3ViIjoiN2YzODgwM2NmZDM4ODVkZDU3OGUxMDZiYTU4OTg1OWVlOTk3YjQyNjhlNjcyM2VlNWYwZDA1NWQxMTU2MzAwNSIsImF1ZCI6IjQzZThkMjc0NmZlMmU1MDgzMjVhMjNjZGY4MTZkNmRkZDEyZTk0ZjEiLCJleHAiOjE2Nzg3MTEyOTIsImlhdCI6MTY3ODcxMDk5MiwiYWNyIjoiZ29hdXRoZW50aWsuaW8vcHJvdmlkZXJzL29hdXRoMi9kZWZhdWx0IiwiZW1haWwiOiJhdXRoZW50aWstZWRpdG9yQGxvY2FsaG9zdCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoiYXV0aGVudGlrLWVkaXRvciIsImdpdmVuX25hbWUiOiJhdXRoZW50aWstZWRpdG9yIiwiZmFtaWx5X25hbWUiOiIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhdXRoZW50aWstZWRpdG9yIiwibmlja25hbWUiOiJhdXRoZW50aWstZWRpdG9yIiwiZ3JvdXBzIjpbImVkaXRvciIsImV4dHJhLWdyb3VwIl0sImF6cCI6IjQzZThkMjc0NmZlMmU1MDgzMjVhMjNjZGY4MTZkNmRkZDEyZTk0ZjEiLCJ1aWQiOiJXRkFwc1FpZ00wbGt1blZYazNCbVJTR3VhZXlPT0N5MjB6Q25ER3FBIn0.XMvIFaDw_xTJZYWiH76hZn-v9ClX9OU1zjRy7hCP6a3aPWcGkK7bVoLUvtG4EwZl5BlY7h2Ajut3mfWXbzGUJEwA0pXBb-cOgIEa9Mq_y9nQUH2kYs4Gfi9kyiU2CiCXQKtquIuoH5RjevPjaupICiZQ0PvLlT9mGR6QD6gAnVhK-PAObFOvy4_X6B0i8PM_nKTx8cr5KW4YwnORTc_VDcGia8iZICBb8ZzyBeHWUmXpDy5G4MoPDgyWWGQaURDEXZN_v-FH0sR3Iu2Mx_by4SkAIIYO-lFtlW51tbjPBItQdZQdXwzcsB_dKtrZXMFKwcyFSlvHStn5Hd3kyP7oR0EPlHCY1G3NA48i38IitpgokW8om8LLqtuYuv7HqbR0VsQOYNOSFw2y3SuUD4FYj966bYwiCF5HXWr6DDhpxYq1liRszwlM3DVfb1Mi5Cnopsqjn2vF2tCeEWJ3cTmiDQvV_MEovsBFerj89GxbnVbbWhNQ9qgr91tQNEFaSW61E7eXOKQfoU79JlCe6eMmNEEQ5YRK4gWfraeHwi_Fhmbtok_Lrhy-hv5hEq_mMN--3axi6_NVuL3JuRELuKBIpyU9y8LVSlcnvZnBhf_UfL1EQmv_u4-mROw06o96FxNNWaIBgUG3Qr9fVl01eI10Dgc8zVAlu-xLnvVwdVBuCpQ {"iss": "http://localhost:9000/application/o/grafana-oidc/", "sub": "7f38803cfd3885dd578e106ba589859ee997b4268e6723ee5f0d055d11563005", "aud": "43e8d2746fe2e508325a23cdf816d6ddd12e94f1", "exp": 1678711292, "iat": 1678710992, "acr": "goauthentik.io/providers/oauth2/default", "email": "authentik-editor@localhost", "email_verified": true, "name": "authentik-editor", "given_name": "authentik-editor", "family_name": "", "preferred_username": "authentik-editor", "nickname": "authentik-editor", "groups": ["editor", "extra-group"]} 3 8 +\. + + -- -- Data for Name: authentik_providers_oauth2_authorizationcode; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_providers_oauth2_authorizationcode (id, expires, expiring, _scope, code, nonce, is_open_id, code_challenge, code_challenge_method, provider_id, user_id, revoked) FROM stdin; +COPY public.authentik_providers_oauth2_authorizationcode (id, expires, expiring, _scope, code, nonce, code_challenge, code_challenge_method, provider_id, user_id, revoked) FROM stdin; \. @@ -3164,7 +3388,8 @@ COPY public.authentik_providers_oauth2_devicetoken (id, expires, expiring, devic -- Data for Name: authentik_providers_oauth2_oauth2provider; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_providers_oauth2_oauth2provider (provider_ptr_id, client_type, client_id, client_secret, redirect_uris, include_claims_in_id_token, token_validity, signing_key_id, sub_mode, issuer_mode, access_code_validity) FROM stdin; +COPY public.authentik_providers_oauth2_oauth2provider (provider_ptr_id, client_type, client_id, client_secret, redirect_uris, include_claims_in_id_token, refresh_token_validity, signing_key_id, sub_mode, issuer_mode, access_code_validity, access_token_validity) FROM stdin; +3 confidential 43e8d2746fe2e508325a23cdf816d6ddd12e94f1 e50440f14a010fd69dfed85bc6c071653f22c73e2c6c8d7ba96a936937d92040936b7e5a4bcc1bf40d5cf1dc019b1db327a1a00e2183c53471fb7530d4a09d7e .* t days=30 6304c995-9003-4fc4-9ba2-3d32016fb04e hashed_user_id per_provider minutes=1 minutes=5 \. @@ -3180,7 +3405,8 @@ COPY public.authentik_providers_oauth2_oauth2provider_jwks_sources (id, oauth2pr -- Data for Name: authentik_providers_oauth2_refreshtoken; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_providers_oauth2_refreshtoken (id, expires, expiring, _scope, access_token, refresh_token, _id_token, provider_id, user_id, revoked) FROM stdin; +COPY public.authentik_providers_oauth2_refreshtoken (id, expires, expiring, _scope, _id_token, provider_id, user_id, revoked, token) FROM stdin; +1 2023-04-12 12:36:32.048979+00 t openid email profile {"iss": "http://localhost:9000/application/o/grafana-oidc/", "sub": "7f38803cfd3885dd578e106ba589859ee997b4268e6723ee5f0d055d11563005", "aud": "43e8d2746fe2e508325a23cdf816d6ddd12e94f1", "exp": 1681302992, "iat": 1678710992, "acr": "goauthentik.io/providers/oauth2/default", "at_hash": "sbPtd6pSOzPd1Tryh_o9_w", "email": "authentik-editor@localhost", "email_verified": true, "name": "authentik-editor", "given_name": "authentik-editor", "family_name": "", "preferred_username": "authentik-editor", "nickname": "authentik-editor", "groups": ["editor", "extra-group"]} 3 8 f PyGk`BA`6ZVUI_]I/\\I`w&j@NyY~cP%>&a'TV1nz_^>2g[H1.d{f0+En=bVZ5I.y)YO9q{)^Fnf6KT09;5_s$oq="@Af/qi,/r0 \. @@ -3200,7 +3426,7 @@ d3406e7e-2c6d-4d72-acdd-dda5513b1396 ak_proxy authentik Proxy - User information -- Data for Name: authentik_providers_proxy_proxyprovider; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_providers_proxy_proxyprovider (oauth2provider_ptr_id, internal_host, external_host, cookie_secret, certificate_id, skip_path_regex, internal_host_ssl_validation, basic_auth_enabled, basic_auth_password_attribute, basic_auth_user_attribute, cookie_domain, mode) FROM stdin; +COPY public.authentik_providers_proxy_proxyprovider (oauth2provider_ptr_id, internal_host, external_host, cookie_secret, certificate_id, skip_path_regex, internal_host_ssl_validation, basic_auth_enabled, basic_auth_password_attribute, basic_auth_user_attribute, cookie_domain, mode, intercept_header_auth) FROM stdin; \. @@ -3370,8 +3596,8 @@ COPY public.authentik_stages_authenticator_validate_authenticatorvalida3e25 (id, -- Data for Name: authentik_stages_authenticator_validate_authenticatorvalida499c; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_stages_authenticator_validate_authenticatorvalida499c (stage_ptr_id, not_configured_action, device_classes, last_auth_threshold) FROM stdin; -b461e46b-7c2f-4188-b4a7-7a4df1c2c142 skip {static,totp,webauthn,duo,sms} seconds=0 +COPY public.authentik_stages_authenticator_validate_authenticatorvalida499c (stage_ptr_id, not_configured_action, device_classes, last_auth_threshold, webauthn_user_verification) FROM stdin; +b461e46b-7c2f-4188-b4a7-7a4df1c2c142 skip {static,totp,webauthn,duo,sms} seconds=0 preferred \. @@ -3396,7 +3622,7 @@ COPY public.authentik_stages_authenticator_webauthn_webauthndevice (id, name, cr -- Data for Name: authentik_stages_captcha_captchastage; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_stages_captcha_captchastage (stage_ptr_id, public_key, private_key) FROM stdin; +COPY public.authentik_stages_captcha_captchastage (stage_ptr_id, public_key, private_key, api_url, js_url) FROM stdin; \. @@ -3429,7 +3655,7 @@ COPY public.authentik_stages_deny_denystage (stage_ptr_id) FROM stdin; -- Data for Name: authentik_stages_dummy_dummystage; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_stages_dummy_dummystage (stage_ptr_id) FROM stdin; +COPY public.authentik_stages_dummy_dummystage (stage_ptr_id, throw_error) FROM stdin; \. @@ -3464,7 +3690,7 @@ COPY public.authentik_stages_identification_identificationstage_sources (id, ide -- Data for Name: authentik_stages_invitation_invitation; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_stages_invitation_invitation (invite_uuid, expires, fixed_data, created_by_id, single_use, expiring, name) FROM stdin; +COPY public.authentik_stages_invitation_invitation (invite_uuid, expires, fixed_data, created_by_id, single_use, expiring, name, flow_id) FROM stdin; \. @@ -3490,14 +3716,14 @@ COPY public.authentik_stages_password_passwordstage (stage_ptr_id, backends, con -- Data for Name: authentik_stages_prompt_prompt; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_stages_prompt_prompt (prompt_uuid, field_key, label, type, required, placeholder, "order", sub_text, placeholder_expression) FROM stdin; -8cbc609d-e3f5-43e6-9134-078ac015b0e6 oobe-header-text oobe-header-text static t Welcome to authentik! Please set a password for the default admin user, akadmin. 100 f -75430f27-c76f-4a41-863a-ca2603ed855d password Password password t Password 300 f -c75f2e96-7892-43c0-94b8-815962250d00 password_repeat Password (repeat) password t Password (repeat) 301 f -bb10dc15-c00c-4d51-9605-9f72be503eb3 username Username text t try:\n return user.username\nexcept:\n return '' 200 t -daf4b9e8-80df-4d6e-95be-bae1e4c6e9b9 name Name text t try:\n return user.name\nexcept:\n return '' 201 t -640c00a0-c1cf-437f-b3a0-4eaa689b11be email Email email t try:\n return user.email\nexcept:\n return '' 202 t -a576e417-3082-451a-8311-4149d8362889 attributes.settings.locale Locale ak-locale t try:\n return user.attributes.get("settings", {}).get("locale", "")\nexcept:\n return '' 203 t +COPY public.authentik_stages_prompt_prompt (prompt_uuid, field_key, label, type, required, placeholder, "order", sub_text, placeholder_expression, name) FROM stdin; +8cbc609d-e3f5-43e6-9134-078ac015b0e6 oobe-header-text oobe-header-text static t Welcome to authentik! Please set a password for the default admin user, akadmin. 100 f oobe-header-text_stage-default-oobe-password +75430f27-c76f-4a41-863a-ca2603ed855d password Password password t Password 300 f password_default-password-change-prompt +c75f2e96-7892-43c0-94b8-815962250d00 password_repeat Password (repeat) password t Password (repeat) 301 f password_repeat_default-password-change-prompt +bb10dc15-c00c-4d51-9605-9f72be503eb3 username Username text t try:\n return user.username\nexcept:\n return '' 200 t username_default-source-enrollment-prompt +daf4b9e8-80df-4d6e-95be-bae1e4c6e9b9 name Name text t try:\n return user.name\nexcept:\n return '' 201 t name_default-user-settings +640c00a0-c1cf-437f-b3a0-4eaa689b11be email Email email t try:\n return user.email\nexcept:\n return '' 202 t email_default-user-settings +a576e417-3082-451a-8311-4149d8362889 attributes.settings.locale Locale ak-locale t try:\n return user.attributes.get("settings", {}).get("locale", "")\nexcept:\n return '' 203 t attributes.settings.locale_default-user-settings \. @@ -3574,10 +3800,10 @@ COPY public.authentik_stages_user_logout_userlogoutstage (stage_ptr_id) FROM std -- Data for Name: authentik_stages_user_write_userwritestage; Type: TABLE DATA; Schema: public; Owner: authentik -- -COPY public.authentik_stages_user_write_userwritestage (stage_ptr_id, create_users_as_inactive, create_users_group_id, user_path_template) FROM stdin; -dfc93c1c-c398-4e8f-aa34-fdc21b6accfb f \N -e87982c6-2f31-4dc5-bdce-2f680601c023 f \N -9934f0fc-b4b4-44e0-a90d-7587844ac68b f \N +COPY public.authentik_stages_user_write_userwritestage (stage_ptr_id, create_users_as_inactive, create_users_group_id, user_path_template, user_creation_mode) FROM stdin; +e87982c6-2f31-4dc5-bdce-2f680601c023 f \N create_when_required +9934f0fc-b4b4-44e0-a90d-7587844ac68b f \N create_when_required +dfc93c1c-c398-4e8f-aa34-fdc21b6accfb f \N create_when_required \. @@ -3682,6 +3908,7 @@ COPY public.django_content_type (id, app_label, model) FROM stdin; 85 authentik_core group 86 authentik_core application 87 authentik_core authenticatedsession +88 authentik_providers_oauth2 accesstoken \. @@ -3851,9 +4078,6 @@ COPY public.django_migrations (id, app, name, applied) FROM stdin; 159 authentik_policies_expression 0002_auto_20200926_1156 2022-10-25 09:00:55.959666+00 160 authentik_policies_expression 0003_auto_20201203_1223 2022-10-25 09:00:55.979077+00 161 authentik_policies_expression 0004_expressionpolicy_authentik_p_policy__fb6feb_idx 2022-10-25 09:00:55.987705+00 -162 authentik_policies_hibp 0001_initial 2022-10-25 09:00:56.011974+00 -163 authentik_policies_hibp 0002_haveibeenpwendpolicy_password_field 2022-10-25 09:00:56.021012+00 -164 authentik_policies_hibp 0003_haveibeenpwendpolicy_authentik_p_policy__6957d7_idx 2022-10-25 09:00:56.030132+00 165 authentik_policies_password 0001_initial 2022-10-25 09:00:56.060365+00 166 authentik_policies_password 0002_passwordpolicy_password_field 2022-10-25 09:00:56.068603+00 167 authentik_policies_password 0003_passwordpolicy_amount_digits 2022-10-25 09:00:56.183019+00 @@ -4072,6 +4296,22 @@ COPY public.django_migrations (id, app, name, applied) FROM stdin; 380 authentik_core 0018_auto_20210330_1345_squashed_0028_alter_token_intent 2022-10-25 09:01:03.112894+00 381 authentik_core 0002_auto_20200523_1133_squashed_0011_provider_name_temp 2022-10-25 09:01:03.115341+00 382 authentik_core 0012_auto_20201003_1737_squashed_0016_auto_20201202_2234 2022-10-25 09:01:03.11781+00 +383 authentik_blueprints 0002_blueprintinstance_content 2023-03-13 09:18:48.7868+00 +384 authentik_core 0024_source_icon 2023-03-13 09:18:48.814008+00 +385 authentik_flows 0024_flow_authentication 2023-03-13 09:18:48.838784+00 +386 authentik_outposts 0018_kubernetesserviceconnection_verify_ssl 2023-03-13 09:18:48.853089+00 +387 authentik_policies 0009_alter_policy_name 2023-03-13 09:18:49.023655+00 +388 authentik_policies_event_matcher 0021_alter_eventmatcherpolicy_app 2023-03-13 09:18:49.034791+00 +389 authentik_policies_password 0005_passwordpolicy_check_have_i_been_pwned_and_more 2023-03-13 09:18:49.088719+00 +390 authentik_providers_oauth2 0014_alter_refreshtoken_options_and_more 2023-03-13 09:18:49.303899+00 +391 authentik_providers_proxy 0015_proxyprovider_receive_header_auth 2023-03-13 09:18:49.330403+00 +392 authentik_stages_authenticator_validate 0012_authenticatorvalidatestage_webauthn_user_verification 2023-03-13 09:18:49.346842+00 +393 authentik_stages_captcha 0002_captchastage_api_url_captchastage_js_url_and_more 2023-03-13 09:18:49.404272+00 +394 authentik_stages_dummy 0002_dummystage_throw_error 2023-03-13 09:18:49.420263+00 +395 authentik_stages_invitation 0007_invitation_flow 2023-03-13 09:18:49.472586+00 +396 authentik_stages_prompt 0009_prompt_name 2023-03-13 09:18:49.706828+00 +397 authentik_stages_user_write 0006_userwritestage_can_create_users 2023-03-13 09:18:49.730647+00 +398 authentik_stages_user_write 0007_remove_userwritestage_can_create_users_and_more 2023-03-13 09:18:49.820103+00 \. @@ -4144,21 +4384,21 @@ SELECT pg_catalog.setval('public.auth_group_permissions_id_seq', 1, false); -- Name: auth_permission_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik -- -SELECT pg_catalog.setval('public.auth_permission_id_seq', 356, true); +SELECT pg_catalog.setval('public.auth_permission_id_seq', 360, true); -- -- Name: authentik_core_provider_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik -- -SELECT pg_catalog.setval('public.authentik_core_provider_id_seq', 2, true); +SELECT pg_catalog.setval('public.authentik_core_provider_id_seq', 3, true); -- -- Name: authentik_core_provider_property_mappings_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik -- -SELECT pg_catalog.setval('public.authentik_core_provider_property_mappings_id_seq', 7, true); +SELECT pg_catalog.setval('public.authentik_core_provider_property_mappings_id_seq', 10, true); -- @@ -4217,11 +4457,18 @@ SELECT pg_catalog.setval('public.authentik_events_notificationrule_transports_id SELECT pg_catalog.setval('public.authentik_outposts_outpost_providers_id_seq', 1, true); +-- +-- Name: authentik_providers_oauth2_accesstoken_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik +-- + +SELECT pg_catalog.setval('public.authentik_providers_oauth2_accesstoken_id_seq', 1, true); + + -- -- Name: authentik_providers_oauth2_authorizationcode_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik -- -SELECT pg_catalog.setval('public.authentik_providers_oauth2_authorizationcode_id_seq', 1, false); +SELECT pg_catalog.setval('public.authentik_providers_oauth2_authorizationcode_id_seq', 1, true); -- @@ -4242,7 +4489,7 @@ SELECT pg_catalog.setval('public.authentik_providers_oauth2_oauth2provider_jwks_ -- Name: authentik_providers_oauth2_refreshtoken_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik -- -SELECT pg_catalog.setval('public.authentik_providers_oauth2_refreshtoken_id_seq', 1, false); +SELECT pg_catalog.setval('public.authentik_providers_oauth2_refreshtoken_id_seq', 1, true); -- @@ -4312,14 +4559,14 @@ SELECT pg_catalog.setval('public.authentik_stages_prompt_promptstage_validation_ -- Name: django_content_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik -- -SELECT pg_catalog.setval('public.django_content_type_id_seq', 87, true); +SELECT pg_catalog.setval('public.django_content_type_id_seq', 88, true); -- -- Name: django_migrations_id_seq; Type: SEQUENCE SET; Schema: public; Owner: authentik -- -SELECT pg_catalog.setval('public.django_migrations_id_seq', 382, true); +SELECT pg_catalog.setval('public.django_migrations_id_seq', 398, true); -- @@ -4909,14 +5156,6 @@ ALTER TABLE ONLY public.authentik_policies_expression_expressionpolicy ADD CONSTRAINT authentik_policies_expression_expressionpolicy_pkey PRIMARY KEY (policy_ptr_id); --- --- Name: authentik_policies_hibp_haveibeenpwendpolicy authentik_policies_hibp_haveibeenpwendpolicy_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik --- - -ALTER TABLE ONLY public.authentik_policies_hibp_haveibeenpwendpolicy - ADD CONSTRAINT authentik_policies_hibp_haveibeenpwendpolicy_pkey PRIMARY KEY (policy_ptr_id); - - -- -- Name: authentik_policies_password_passwordpolicy authentik_policies_password_passwordpolicy_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- @@ -4997,6 +5236,14 @@ ALTER TABLE ONLY public.authentik_providers_oauth2_oauth2provider_jwks_sources ADD CONSTRAINT authentik_providers_oaut_oauth2provider_id_oauths_5151c4b7_uniq UNIQUE (oauth2provider_id, oauthsource_id); +-- +-- Name: authentik_providers_oauth2_accesstoken authentik_providers_oauth2_accesstoken_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_oauth2_accesstoken + ADD CONSTRAINT authentik_providers_oauth2_accesstoken_pkey PRIMARY KEY (id); + + -- -- Name: authentik_providers_oauth2_authorizationcode authentik_providers_oauth2_authorizationcode_code_key; Type: CONSTRAINT; Schema: public; Owner: authentik -- @@ -5053,14 +5300,6 @@ ALTER TABLE ONLY public.authentik_providers_oauth2_refreshtoken ADD CONSTRAINT authentik_providers_oauth2_refreshtoken_pkey PRIMARY KEY (id); --- --- Name: authentik_providers_oauth2_refreshtoken authentik_providers_oauth2_refreshtoken_refresh_token_key; Type: CONSTRAINT; Schema: public; Owner: authentik --- - -ALTER TABLE ONLY public.authentik_providers_oauth2_refreshtoken - ADD CONSTRAINT authentik_providers_oauth2_refreshtoken_refresh_token_key UNIQUE (refresh_token); - - -- -- Name: authentik_providers_oauth2_scopemapping authentik_providers_oauth2_scopemapping_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- @@ -5397,6 +5636,14 @@ ALTER TABLE ONLY public.authentik_stages_prompt_promptstage_fields ADD CONSTRAINT authentik_stages_prompt__promptstage_id_prompt_id_3212c07e_uniq UNIQUE (promptstage_id, prompt_id); +-- +-- Name: authentik_stages_prompt_prompt authentik_stages_prompt_prompt_name_789de039_uniq; Type: CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_stages_prompt_prompt + ADD CONSTRAINT authentik_stages_prompt_prompt_name_789de039_uniq UNIQUE (name); + + -- -- Name: authentik_stages_prompt_prompt authentik_stages_prompt_prompt_pkey; Type: CONSTRAINT; Schema: public; Owner: authentik -- @@ -5956,13 +6203,6 @@ CREATE INDEX authentik_p_policy__534e15_idx ON public.authentik_policies_policyb CREATE INDEX authentik_p_policy__648f9b_idx ON public.authentik_policies_dummy_dummypolicy USING btree (policy_ptr_id); --- --- Name: authentik_p_policy__6957d7_idx; Type: INDEX; Schema: public; Owner: authentik --- - -CREATE INDEX authentik_p_policy__6957d7_idx ON public.authentik_policies_hibp_haveibeenpwendpolicy USING btree (policy_ptr_id); - - -- -- Name: authentik_p_policy__855e80_idx; Type: INDEX; Schema: public; Owner: authentik -- @@ -6062,10 +6302,17 @@ CREATE INDEX authentik_providers_oaut_client_id_ae566546_like ON public.authenti -- --- Name: authentik_providers_oaut_refresh_token_851d886b_like; Type: INDEX; Schema: public; Owner: authentik +-- Name: authentik_providers_oauth2_accesstoken_provider_id_40ef5d24; Type: INDEX; Schema: public; Owner: authentik -- -CREATE INDEX authentik_providers_oaut_refresh_token_851d886b_like ON public.authentik_providers_oauth2_refreshtoken USING btree (refresh_token varchar_pattern_ops); +CREATE INDEX authentik_providers_oauth2_accesstoken_provider_id_40ef5d24 ON public.authentik_providers_oauth2_accesstoken USING btree (provider_id); + + +-- +-- Name: authentik_providers_oauth2_accesstoken_user_id_7261588f; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_providers_oauth2_accesstoken_user_id_7261588f ON public.authentik_providers_oauth2_accesstoken USING btree (user_id); -- @@ -6369,6 +6616,13 @@ CREATE INDEX authentik_stages_identific_source_id_9579fda9 ON public.authentik_s CREATE INDEX authentik_stages_invitation_invitation_created_by_id_87fe9398 ON public.authentik_stages_invitation_invitation USING btree (created_by_id); +-- +-- Name: authentik_stages_invitation_invitation_flow_id_66945236; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_stages_invitation_invitation_flow_id_66945236 ON public.authentik_stages_invitation_invitation USING btree (flow_id); + + -- -- Name: authentik_stages_invitation_invitation_name_00580941; Type: INDEX; Schema: public; Owner: authentik -- @@ -6411,6 +6665,13 @@ CREATE INDEX authentik_stages_prompt_pr_promptstage_id_cb253bb1 ON public.authen CREATE INDEX authentik_stages_prompt_pr_promptstage_id_d3bd61cc ON public.authentik_stages_prompt_promptstage_fields USING btree (promptstage_id); +-- +-- Name: authentik_stages_prompt_prompt_name_789de039_like; Type: INDEX; Schema: public; Owner: authentik +-- + +CREATE INDEX authentik_stages_prompt_prompt_name_789de039_like ON public.authentik_stages_prompt_prompt USING btree (name text_pattern_ops); + + -- -- Name: authentik_stages_prompt_promptstage_fields_prompt_id_8c79d4c1; Type: INDEX; Schema: public; Owner: authentik -- @@ -6971,14 +7232,6 @@ ALTER TABLE ONLY public.authentik_policies_event_matcher_eventmatcherpolicy ADD CONSTRAINT authentik_policies_e_policy_ptr_id_f12a3e96_fk_authentik FOREIGN KEY (policy_ptr_id) REFERENCES public.authentik_policies_policy(policy_uuid) DEFERRABLE INITIALLY DEFERRED; --- --- Name: authentik_policies_hibp_haveibeenpwendpolicy authentik_policies_h_policy_ptr_id_13df0e7e_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik --- - -ALTER TABLE ONLY public.authentik_policies_hibp_haveibeenpwendpolicy - ADD CONSTRAINT authentik_policies_h_policy_ptr_id_13df0e7e_fk_authentik FOREIGN KEY (policy_ptr_id) REFERENCES public.authentik_policies_policy(policy_uuid) DEFERRABLE INITIALLY DEFERRED; - - -- -- Name: authentik_policies_policybinding authentik_policies_p_group_id_2afb13ee_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- @@ -7091,6 +7344,14 @@ ALTER TABLE ONLY public.authentik_providers_saml_samlpropertymapping ADD CONSTRAINT authentik_providers__propertymapping_ptr__812e8cfb_fk_authentik FOREIGN KEY (propertymapping_ptr_id) REFERENCES public.authentik_core_propertymapping(pm_uuid) DEFERRABLE INITIALLY DEFERRED; +-- +-- Name: authentik_providers_oauth2_accesstoken authentik_providers__provider_id_40ef5d24_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_oauth2_accesstoken + ADD CONSTRAINT authentik_providers__provider_id_40ef5d24_fk_authentik FOREIGN KEY (provider_id) REFERENCES public.authentik_providers_oauth2_oauth2provider(provider_ptr_id) DEFERRABLE INITIALLY DEFERRED; + + -- -- Name: authentik_providers_oauth2_authorizationcode authentik_providers__provider_id_731a3e62_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- @@ -7171,6 +7432,14 @@ ALTER TABLE ONLY public.authentik_providers_oauth2_devicetoken ADD CONSTRAINT authentik_providers__user_id_17317b6d_fk_authentik FOREIGN KEY (user_id) REFERENCES public.authentik_core_user(id) DEFERRABLE INITIALLY DEFERRED; +-- +-- Name: authentik_providers_oauth2_accesstoken authentik_providers__user_id_7261588f_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_providers_oauth2_accesstoken + ADD CONSTRAINT authentik_providers__user_id_7261588f_fk_authentik FOREIGN KEY (user_id) REFERENCES public.authentik_core_user(id) DEFERRABLE INITIALLY DEFERRED; + + -- -- Name: authentik_providers_oauth2_authorizationcode authentik_providers__user_id_c9a35141_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- @@ -7579,6 +7848,14 @@ ALTER TABLE ONLY public.authentik_stages_invitation_invitation ADD CONSTRAINT authentik_stages_inv_created_by_id_87fe9398_fk_authentik FOREIGN KEY (created_by_id) REFERENCES public.authentik_core_user(id) DEFERRABLE INITIALLY DEFERRED; +-- +-- Name: authentik_stages_invitation_invitation authentik_stages_inv_flow_id_66945236_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik +-- + +ALTER TABLE ONLY public.authentik_stages_invitation_invitation + ADD CONSTRAINT authentik_stages_inv_flow_id_66945236_fk_authentik FOREIGN KEY (flow_id) REFERENCES public.authentik_flows_flow(flow_uuid) DEFERRABLE INITIALLY DEFERRED; + + -- -- Name: authentik_stages_invitation_invitationstage authentik_stages_inv_stage_ptr_id_fcaca395_fk_authentik; Type: FK CONSTRAINT; Schema: public; Owner: authentik -- diff --git a/devenv/docker/blocks/auth/authentik/docker-compose.yaml b/devenv/docker/blocks/auth/authentik/docker-compose.yaml index 0c70030bb6c..0c13c19c342 100644 --- a/devenv/docker/blocks/auth/authentik/docker-compose.yaml +++ b/devenv/docker/blocks/auth/authentik/docker-compose.yaml @@ -39,7 +39,7 @@ - "authentik:authentik" authentik: - image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2022.12.1} + image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2023.2.3} restart: unless-stopped container_name: authentik command: server diff --git a/devenv/docker/blocks/loki/data/data.js b/devenv/docker/blocks/loki/data/data.js index 7ab907c0797..8462deed770 100644 --- a/devenv/docker/blocks/loki/data/data.js +++ b/devenv/docker/blocks/loki/data/data.js @@ -47,10 +47,7 @@ async function sleep(duration) { }); } -async function lokiSendLogLine(timestampMs, line, tags) { - // we keep nanosecond-timestamp in a string because - // as a number it would be too large - const timestampNs = `${timestampMs}000000`; +async function lokiSendLogLine(timestampNs, line, tags) { const data = { streams: [ { @@ -136,6 +133,24 @@ function calculateDelays(pointsCount) { return delays; } +function getRandomNanosecPart() { + // we want to have cases with milliseconds-only, with microsec and nanosec. + const mode = Math.random(); + + if (mode < 0.333) { + // only milisec precision + return '000000'; + } + + if (mode < 0.666) { + // microsec precision + return Math.trunc(Math.random()*1000).toString().padStart(3, '0') + '000' + } + + // nanosec precision + return Math.trunc(Math.random()*1000000).toString().padStart(6, '0') +} + async function main() { const delays = calculateDelays(DAYS * POINTS_PER_DAY); @@ -144,9 +159,10 @@ async function main() { for(let i =0; i < delays.length; i++ ) { // i cannot do a forEach because of the `await` inside const delay = delays[i]; timestampMs += Math.trunc(delay * timeRange); + const timestampNs = `${timestampMs}${getRandomNanosecPart()}`; const item = getRandomLogItem(i + 1) - await lokiSendLogLine(timestampMs, JSON.stringify(item), {place:'moon', source: 'data', instance: 'server\\1', job: '"grafana/data"'}); - await lokiSendLogLine(timestampMs, logFmtLine(item), {place:'luna', source: 'data', instance: 'server\\2', job: '"grafana/data"'}); + await lokiSendLogLine(timestampNs, JSON.stringify(item), {place:'moon', source: 'data', instance: 'server\\1', job: '"grafana/data"'}); + await lokiSendLogLine(timestampNs, logFmtLine(item), {place:'luna', source: 'data', instance: 'server\\2', job: '"grafana/data"'}); }; } diff --git a/devenv/docker/ha-test-unified-alerting/Dockerfile b/devenv/docker/ha-test-unified-alerting/Dockerfile new file mode 100644 index 00000000000..cc9b14e2e4e --- /dev/null +++ b/devenv/docker/ha-test-unified-alerting/Dockerfile @@ -0,0 +1,12 @@ +FROM golang:1.19 + +ADD webhook-listener.go /go/src/webhook/webhook-listener.go + +WORKDIR /go/src/webhook + +RUN mkdir /tmp/logs +RUN go build -o /bin webhook-listener.go + +ENV PORT 8080 + +ENTRYPOINT [ "/bin/webhook-listener" ] diff --git a/devenv/docker/ha-test-unified-alerting/docker-compose.yaml b/devenv/docker/ha-test-unified-alerting/docker-compose.yaml index 2424f1f0376..12ec330b1f2 100644 --- a/devenv/docker/ha-test-unified-alerting/docker-compose.yaml +++ b/devenv/docker/ha-test-unified-alerting/docker-compose.yaml @@ -32,7 +32,7 @@ services: environment: - VIRTUAL_HOST=prometheus.loc ports: - - 909 + - 9090 nginx-proxy: image: jwilder/nginx-proxy ports: @@ -43,48 +43,53 @@ services: db: condition: service_healthy grafana1: - image: grafana/grafana:dev - volumes: - - ./grafana/provisioning/:/etc/grafana/provisioning/ - environment: - - VIRTUAL_HOST=grafana.loc - - GF_FEATURE_TOGGLES_ENABLE=ngalert - - GF_UNIFIED_ALERTING_HA_PEERS=ha-test-unified-alerting_grafana2_1:9094,ha-test-unified-alerting_grafana1_1:9094 - - GF_SERVER_ROOT_URL=http://grafana.loc - - GF_DATABASE_NAME=grafana - - GF_DATABASE_USER=grafana - - GF_DATABASE_PASSWORD=password - - GF_DATABASE_TYPE=mysql - - GF_DATABASE_HOST=db:3306 - - GF_DATABASE_MAX_OPEN_CONN=300 - - GF_SESSION_PROVIDER=mysql - - GF_SESSION_PROVIDER_CONFIG=grafana:password@tcp(db:3306)/grafana?allowNativePasswords=true + extends: + file: ./grafana-service.yml + service: grafana ports: - 3010:3000 depends_on: db: condition: service_healthy - grafana2: - image: grafana/grafana:dev - volumes: - - ./grafana/provisioning/:/etc/grafana/provisioning/ - environment: - - VIRTUAL_HOST=grafana.loc - - GF_FEATURE_TOGGLES_ENABLE=ngalert - - GF_UNIFIED_ALERTING_HA_PEERS=ha-test-unified-alerting_grafana2_1:9094,ha-test-unified-alerting_grafana1_1:9094 - - GF_SERVER_ROOT_URL=http://grafana.loc - - GF_DATABASE_NAME=grafana - - GF_DATABASE_USER=grafana - - GF_DATABASE_PASSWORD=password - - GF_DATABASE_TYPE=mysql - - GF_DATABASE_HOST=db:3306 - - GF_DATABASE_MAX_OPEN_CONN=300 - - GF_SESSION_PROVIDER=mysql - - GF_SESSION_PROVIDER_CONFIG=grafana:password@tcp(db:3306)/grafana?allowNativePasswords=true + extends: + file: ./grafana-service.yml + service: grafana ports: - 3020:3000 depends_on: db: condition: service_healthy - + grafana1: + condition: service_healthy + grafana3: + extends: + file: ./grafana-service.yml + service: grafana + ports: + - 3030:3000 + depends_on: + db: + condition: service_healthy + grafana2: + condition: service_healthy + grafana4: + extends: + file: ./grafana-service.yml + service: grafana + ports: + - 3040:3000 + depends_on: + db: + condition: service_healthy + grafana3: + condition: service_healthy + webhook: + image: webhook-receiver + build: + context: . + dockerfile: Dockerfile + ports: + - "18081:8080" + volumes: + - "./logs/webhook:/tmp/logs:rw" diff --git a/devenv/docker/ha-test-unified-alerting/grafana-service.yml b/devenv/docker/ha-test-unified-alerting/grafana-service.yml new file mode 100644 index 00000000000..d5729041d36 --- /dev/null +++ b/devenv/docker/ha-test-unified-alerting/grafana-service.yml @@ -0,0 +1,23 @@ +services: + grafana: + image: grafana/grafana-dev:3a22eba17f23b18faa27436ab2f9c3ea977b550b + volumes: + - ./grafana/provisioning/:/etc/grafana/provisioning/ + environment: + - VIRTUAL_HOST=grafana.loc + - GF_FEATURE_TOGGLES_ENABLE=ngalert + - GF_UNIFIED_ALERTING_HA_PEERS=ha-test-unified-alerting-grafana2-1:9094,ha-test-unified-alerting-grafana1-1:9094,ha-test-unified-alerting-grafana3-1:9094,ha-test-unified-alerting-grafana4-1:9094 + - GF_SERVER_ROOT_URL=http://grafana.loc + - GF_DATABASE_NAME=grafana + - GF_DATABASE_USER=grafana + - GF_DATABASE_PASSWORD=password + - GF_DATABASE_TYPE=mysql + - GF_DATABASE_HOST=db:3306 + - GF_DATABASE_MAX_OPEN_CONN=300 + - GF_SESSION_PROVIDER=mysql + - GF_SESSION_PROVIDER_CONFIG=grafana:password@tcp(db:3306)/grafana?allowNativePasswords=true + healthcheck: + test: timeout 10s bash -c ':> /dev/tcp/127.0.0.1/3000' || exit 1 + interval: 5s + timeout: 15s + retries: 3 diff --git a/devenv/docker/ha-test-unified-alerting/logs/webhook/.gitkeep b/devenv/docker/ha-test-unified-alerting/logs/webhook/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d diff --git a/devenv/docker/ha-test-unified-alerting/webhook-listener.go b/devenv/docker/ha-test-unified-alerting/webhook-listener.go new file mode 100644 index 00000000000..18724ec2a84 --- /dev/null +++ b/devenv/docker/ha-test-unified-alerting/webhook-listener.go @@ -0,0 +1,181 @@ +package main + +import ( + "encoding/json" + "flag" + "fmt" + "io/ioutil" + "log" + "net/http" + "os" + "path" + "path/filepath" + "sync" + "time" +) + +var ( + fingerprints = make(Fingerprints) + mu sync.Mutex + waitSeconds int + logFile bool + logFileName = filepath.Join(os.TempDir(), "/logs/webhook-listener.log") + dumpDir = filepath.Join(os.TempDir(), "/logs/dumps") +) + +type Alert struct { + Fingerprint string `json:"fingerprint"` + StartsAt time.Time `json:"startsAt"` + Status string `json:"status"` +} + +type Data struct { + Receiver string `json:"receiver"` + Status string `json:"status"` + Alerts []Alert `json:"alerts"` +} + +// Fingerprints keeps track of the number of alerts received +// by fingerprint and StartsAt time. +type Fingerprints map[string]map[time.Time]tracker + +type tracker struct { + Updates int `json:"updates"` + Statuses []string `json:"statuses"` +} + +func updateFingerprints(v Data) { + mu.Lock() + defer mu.Unlock() + for _, alert := range v.Alerts { + m, ok := fingerprints[alert.Fingerprint] + if !ok { + m = make(map[time.Time]tracker) + } + + t, ok := m[alert.StartsAt] + if !ok { + t = tracker{ + Updates: 0, + Statuses: []string{}, + } + } + + t.Updates += 1 + t.Statuses = append(t.Statuses, alert.Status) + + m[alert.StartsAt] = t + fingerprints[alert.Fingerprint] = m + } +} + +func parseFlags() { + flag.BoolVar(&logFile, "log-file", true, "Whether to log to file") + flag.IntVar(&waitSeconds, "wait-seconds", 0, "The number of seconds to wait before sending an HTTP response") + flag.Parse() +} + +func saveDump(data []byte) { + if !logFile { + return + } + + if len(data) == 0 { + fmt.Println("empty dump - not saving") + return + } + ts := time.Now().UnixNano() + name := path.Join(dumpDir, fmt.Sprintf("%d.json", ts)) + for i := 1; i <= 1000; i++ { + if _, err := os.Stat(name); os.IsNotExist(err) { + break + } + name = path.Join(dumpDir, fmt.Sprintf("%d_%04d.json", ts, i)) + } + log.Printf("saving dump to %s", name) + err := os.WriteFile(name, data, os.ModePerm) + if err != nil { + log.Printf("cannot save to file %s: %s\n", name, err) + } +} + +func main() { + parseFlags() + + _, err := os.Stat(dumpDir) + if os.IsNotExist(err) { + err = os.MkdirAll(dumpDir, os.ModePerm) + if err != nil { + log.Panicf("can't create directory '%s'", dumpDir) + } + } + + if logFile { + //create your file with desired read/write permissions + f, err := os.OpenFile(logFileName, os.O_WRONLY|os.O_CREATE|os.O_APPEND, os.ModePerm) + if err != nil { + log.Fatal(err) + } + defer f.Close() + log.SetOutput(f) + } + + waitDuration := time.Duration(waitSeconds) * time.Second + http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { + + writer.WriteHeader(http.StatusOK) + writer.Write([]byte(landingPage)) + }) + + http.HandleFunc("/listen", func(w http.ResponseWriter, r *http.Request) { + log.Printf("got submission from: %s\n", r.RemoteAddr) + b, err := ioutil.ReadAll(r.Body) + if err != nil { + log.Println(err) + w.WriteHeader(http.StatusBadRequest) + return + } + saveDump(b) + v := Data{} + if err := json.Unmarshal(b, &v); err != nil { + log.Println(err) + w.WriteHeader(http.StatusBadRequest) + return + } + fmt.Printf("receiver: %s, status: %s\n", v.Receiver, v.Status) + updateFingerprints(v) + <-time.After(waitDuration) + }) + http.HandleFunc("/fingerprints", func(w http.ResponseWriter, r *http.Request) { + b, err := func() ([]byte, error) { + mu.Lock() + defer mu.Unlock() + return json.Marshal(fingerprints) + }() + if err != nil { + log.Println(err) + w.WriteHeader(http.StatusInternalServerError) + return + } + w.Header().Add("Content-Type", "application/json") + w.Write(b) + }) + log.Println("Listening") + log.Printf("Wait Duration %v\n", waitDuration) + http.ListenAndServe("0.0.0.0:8080", nil) +} + +const landingPage = ` + + + +Webhook listener + + +

Webhook Listener

+ +

For setup, please point your webhook configuration to the "/listen" endpoint.

+

For debugging, please use the "/fingerprints" endpoint.

+ + +` diff --git a/devenv/docker/loadtest-ts/.babelrc b/devenv/docker/loadtest-ts/.babelrc deleted file mode 100644 index f34ccd9eb31..00000000000 --- a/devenv/docker/loadtest-ts/.babelrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "presets": [ - "@babel/env", - "@babel/typescript" - ], - "plugins": [ - "@babel/proposal-class-properties", - "@babel/proposal-object-rest-spread" - ] -} diff --git a/devenv/docker/loadtest-ts/.gitignore b/devenv/docker/loadtest-ts/.gitignore deleted file mode 100644 index f8d4b7b3dbe..00000000000 --- a/devenv/docker/loadtest-ts/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -scripts/tmp -dist/ -.yarn diff --git a/devenv/docker/loadtest-ts/README.md b/devenv/docker/loadtest-ts/README.md deleted file mode 100644 index 73075d22342..00000000000 --- a/devenv/docker/loadtest-ts/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Grafana load tests written in typescript - EXPERIMENTAL - -Runs load tests written in typescript and checks Grafana's performance using [k6](https://k6.io/) - -This is **experimental** - please consider adding new tests to devenv/docker/loadtest while we are testing the typescript approach! - - - -# How to run - -``` -yarn install -GRPC_TOKEN={REPLACE_WITH_SERVICE_ACCOUNT_ADMIN_TOKEN} ./run.sh test=object-store-test grpcAddress=127.0.0.1:10000 execution=local -``` diff --git a/devenv/docker/loadtest-ts/package.json b/devenv/docker/loadtest-ts/package.json deleted file mode 100644 index 20368fd20d3..00000000000 --- a/devenv/docker/loadtest-ts/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "private": true, - "license": "Apache-2.0", - "name": "@grafana/perf-tests", - "version": "9.4.0-pre", - "devDependencies": { - "@babel/core": "7.19.6", - "@babel/plugin-proposal-class-properties": "7.18.6", - "@babel/plugin-proposal-object-rest-spread": "7.19.4", - "@babel/preset-env": "7.19.4", - "@babel/preset-typescript": "7.18.6", - "@types/k6": "0.41.0", - "@types/shortid": "0.0.29", - "@types/webpack": "5.28.0", - "babel-loader": "9.1.0", - "shortid": "2.2.16", - "ts-node": "10.9.1", - "typescript": "4.8.4", - "webpack": "5.74.0", - "webpack-cli": "4.10.0", - "webpack-glob-entries": "1.0.1" - }, - "scripts": { - "build": "webpack", - "prepare-testdata": "yarn run prepare-testdata:object-store-test", - "prepare-testdata:object-store-test": "ts-node scripts/prepareDashboardFileNames.ts ../../dev-dashboards ./scripts/tmp/filenames.json" - } -} diff --git a/devenv/docker/loadtest-ts/run.sh b/devenv/docker/loadtest-ts/run.sh deleted file mode 100755 index bde41cb2876..00000000000 --- a/devenv/docker/loadtest-ts/run.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env bash - -if ((BASH_VERSINFO[0] < 4)); then - echo "Bash ver >= 4 is needed to run this script" - echo "Please upgrade your bash - run 'brew install bash' if you use Homebrew on MacOS" - exit 1; -fi - -declare -A cfg=( - [grpcToken]=$GRPC_TOKEN - [grpcAddress]="127.0.0.1:10000" - [execution]="local" - [test]="object-store-test" - [k6CloudToken]=$K6_CLOUD_TOKEN -) - -for ARGUMENT in "$@" -do - KEY=$(echo $ARGUMENT | cut -f1 -d=) - - KEY_LENGTH=${#KEY} - VALUE="${ARGUMENT:$KEY_LENGTH+1}" - cfg["$KEY"]="$VALUE" -done - -function usage() { - echo "$0 grpcAddress= grpcToken= execution= k6CloudToken= test= -- 'grpcAddress' is the address of Grafana gRPC server. 127.0.0.1:10000 is the default. -- 'grpcToken' is the service account admin token used for Grafana gRPC server authentication. -- 'execution' is the test execution mode; one of 'local', 'cloud-output', 'cloud'. 'local' is the default. -- 'k6CloudToken' is the k6 cloud token required for 'cloud-output' and 'cloud' execution modes. -- 'test' is the filepath of the test to execute relative to ./src, without the extension. example 'object-store-test'" - exit 0 -} - -if [ "${cfg[grpcToken]}" == "" ]; then - usage -fi - - -if [ "${cfg[execution]}" == "cloud" ]; then - echo "cloud execution mode is not yet implemented" - exit 0 -elif [ "${cfg[execution]}" == "cloud-output" ]; then - if [ "${cfg[k6CloudToken]}" == "" ]; then - usage - fi -elif [ "${cfg[execution]}" != "local" ]; then - usage -fi - -yarn run build -yarn run prepare-testdata - -TEST_PATH="./dist/${cfg[test]}.js" -echo "$(date '+%Y-%m-%d %H:%M:%S'): Executing test ${TEST_PATH} in ${cfg[execution]} mode" - -if [ "${cfg[execution]}" == "cloud-output" ]; then - GRPC_TOKEN="${cfg[grpcToken]}" GRPC_ADDRESS="${cfg[grpcAddress]}" K6_CLOUD_TOKEN="${cfg[k6CloudToken]}" k6 run --out cloud "$TEST_PATH" -elif [ "${cfg[execution]}" == "local" ]; then - GRPC_TOKEN="${cfg[grpcToken]}" GRPC_ADDRESS="${cfg[grpcAddress]}" k6 run "$TEST_PATH" -fi - - diff --git a/devenv/docker/loadtest-ts/scripts/prepareDashboardFileNames.ts b/devenv/docker/loadtest-ts/scripts/prepareDashboardFileNames.ts deleted file mode 100644 index 1f571837414..00000000000 --- a/devenv/docker/loadtest-ts/scripts/prepareDashboardFileNames.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { readdirSync, writeFileSync, mkdirSync } from 'fs'; -import { dirname, resolve } from 'path'; - -const args = process.argv.slice(2); - -if (args.length !== 2) { - throw new Error('expected dev dashboards dir and the output file path'); -} - -const devDashboardsDir = args[0]; -const outputFilePath = args[1]; - -const getFiles = (dirPath: string, ext?: string): string[] => - readdirSync(dirPath, { withFileTypes: true }) - .flatMap((dirEntry) => { - const res = resolve(dirPath, dirEntry.name); - return dirEntry.isDirectory() ? getFiles(res) : res; - }) - .filter((path) => (ext?.length ? path.endsWith(ext) : true)); - -const files = getFiles(devDashboardsDir, '.json'); - -mkdirSync(dirname(outputFilePath), { recursive: true }); -writeFileSync(outputFilePath, JSON.stringify(files, null, 2)); diff --git a/devenv/docker/loadtest-ts/src/get-large-dashboard.ts b/devenv/docker/loadtest-ts/src/get-large-dashboard.ts deleted file mode 100644 index 12211dde391..00000000000 --- a/devenv/docker/loadtest-ts/src/get-large-dashboard.ts +++ /dev/null @@ -1,116 +0,0 @@ -const testDash = { - annotations: { list: [] }, - editable: true, - fiscalYearStartMonth: 0, - graphTooltip: 0, - id: 100, - links: [], - liveNow: false, - panels: [ - { - datasource: { - type: 'testdata', - uid: 'testdata', - }, - fieldConfig: { - defaults: { - color: { - mode: 'thresholds', - }, - custom: { - align: 'auto', - displayMode: 'auto', - inspect: false, - }, - mappings: [], - thresholds: { - mode: 'absolute', - steps: [ - { - color: 'green', - value: null, - }, - { - color: 'red', - value: 80, - }, - ], - }, - }, - overrides: [], - }, - gridPos: { - h: 9, - w: 12, - x: 0, - y: 0, - }, - id: 2, - options: { - footer: { - fields: '', - reducer: ['sum'], - show: false, - }, - showHeader: true, - }, - pluginVersion: '9.4.0-pre', - targets: [ - { - csvContent: '', - datasource: { - type: 'testdata', - uid: 'PD8C576611E62080A', - }, - refId: 'A', - scenarioId: 'csv_content', - }, - ], - title: 'Panel Title', - type: 'table', - }, - ], - schemaVersion: 37, - style: 'dark', - tags: [], - templating: { - list: [], - }, - time: { - from: 'now-6h', - to: 'now', - }, - timepicker: {}, - timezone: '', - title: 'New dashboard', - uid: '5v6e5VH4z', - version: 1, - weekStart: '', -} as const; - -const getCsvContent = (lengthInKb: number): string => { - const lines: string[] = ['id,name']; - for (let i = 0; i < lengthInKb; i++) { - const prefix = `${i},`; - lines.push(prefix + 'a'.repeat(1024 - prefix.length)); - } - return lines.join('\n'); -}; - -export const prepareDashboard = (lengthInKb: number): Record => { - const firstPanel = testDash.panels[0]; - return { - ...testDash, - panels: [ - { - ...firstPanel, - targets: [ - { - ...firstPanel.targets[0], - csvContent: getCsvContent(lengthInKb), - }, - ], - }, - ], - }; -}; diff --git a/devenv/docker/loadtest-ts/src/object-store-client.ts b/devenv/docker/loadtest-ts/src/object-store-client.ts deleted file mode 100644 index 7b839a71abf..00000000000 --- a/devenv/docker/loadtest-ts/src/object-store-client.ts +++ /dev/null @@ -1,214 +0,0 @@ -import { check } from 'k6'; -import { b64encode } from 'k6/encoding'; -import grpc from 'k6/net/grpc'; - -import { Object } from './prepare-data'; - -enum GRPCMethods { - ServerHealth = 'grpc.health.v1.Health/Check', - ObjectWrite = 'object.ObjectStore/Write', - ObjectDelete = 'object.ObjectStore/Delete', - ObjectRead = 'object.ObjectStore/Read', -} - -export class GRPCObjectStoreClient { - private connected = false; - constructor(private client: grpc.Client, private grpcAddress: string, private grpcToken: string) {} - - connect = () => { - if (!this.connected) { - this.client.connect(this.grpcAddress, { plaintext: true, reflect: true }); - this.connected = true; - } - }; - - grpcRequestParams = () => { - return { - metadata: { - authorization: `Bearer ${this.grpcToken}`, - }, - }; - }; - - healthCheck = (): boolean => { - this.connect(); - const response = this.client.invoke(GRPCMethods.ServerHealth, {}); - - return check(response, { - 'server is healthy': (r) => { - const statusOK = r && r.status === grpc.StatusOK; - if (!statusOK) { - return false; - } - - const body = r.message; - // @ts-ignore - return 'status' in body && body.status === 'SERVING'; - }, - }); - }; - - deleteObject = (uid: string, kind: string, _?: {}) => { - this.connect(); - - const response = this.client.invoke( - GRPCMethods.ObjectDelete, - { - kind: kind, - UID: uid, - }, - this.grpcRequestParams() - ); - - check(response, { - 'object was deleted': (r) => { - const statusOK = r && r.status === grpc.StatusOK; - if (!statusOK) { - return false; - } - - if (!isDeleteObjectResponse(r.message)) { - console.log( - JSON.stringify({ - type: 'invalid_delete_response', - uid: uid, - kind: kind, - resp: r, - }) - ); - return false; - } - - return true; - }, - }); - }; - - readObject = (uid: string, kind: string, _?: {}) => { - this.connect(); - - const response = this.client.invoke( - GRPCMethods.ObjectRead, - { - kind: kind, - UID: uid, - with_body: true, - with_summary: true, - }, - this.grpcRequestParams() - ); - - check(response, { - 'object exists': (r) => { - const statusOK = r && r.status === grpc.StatusOK; - if (!statusOK) { - return false; - } - - const respBody = r.message; - if (!isReadObjectResponse(respBody)) { - console.log( - JSON.stringify({ - type: 'invalid_read_response', - uid: uid, - kind: kind, - resp: r, - }) - ); - return false; - } - - return typeof respBody.object.body === 'string'; - }, - }); - }; - - writeObject = (object: Object, opts?: { randomizeData?: boolean; checkCreatedOrUpdated?: boolean }) => { - this.connect(); - - const data = opts?.randomizeData - ? { - ...object.data, - __random: `${Date.now() - Math.random()}`, - } - : object.data; - - const response = this.client.invoke( - GRPCMethods.ObjectWrite, - { - body: b64encode(JSON.stringify(data)), - comment: '', - kind: object.kind, - UID: object.uid, - }, - this.grpcRequestParams() - ); - - const checkName = opts?.checkCreatedOrUpdated ? 'object was created or updated' : 'object was created'; - check(response, { - [checkName]: (r) => { - const statusOK = r && r.status === grpc.StatusOK; - if (!statusOK) { - return false; - } - - const respBody = r.message; - if (!isWriteObjectResponse(respBody)) { - console.log( - JSON.stringify({ - type: 'invalid_write_response', - uid: object.uid, - kind: object.kind, - resp: r, - }) - ); - return false; - } - - return opts?.checkCreatedOrUpdated - ? respBody.status === WriteObjectResponseStatus.UPDATED || - respBody.status === WriteObjectResponseStatus.CREATED - : respBody.status === WriteObjectResponseStatus.CREATED; - }, - }); - }; -} - -type DeleteObjectResponse = { - OK: boolean; -}; - -const isDeleteObjectResponse = (resp: object): resp is DeleteObjectResponse => { - return resp.hasOwnProperty('OK'); -}; - -enum WriteObjectResponseStatus { - CREATED = 'CREATED', - UPDATED = 'UPDATED', -} - -type WriteObjectResponse = { - status: WriteObjectResponseStatus; -}; - -const isWriteObjectResponse = (resp: object): resp is WriteObjectResponse => { - return resp.hasOwnProperty('status'); -}; - -type ReadObjectResponse = { - object: { - UID: string; - kind: string; - body: string; - }; -}; - -const isReadObjectResponse = (resp: object): resp is ReadObjectResponse => { - if (!resp.hasOwnProperty('object')) { - return false; - } - - // @ts-ignore - const object = resp.object; - return Boolean(object && typeof object === 'object' && object.hasOwnProperty('body')); -}; diff --git a/devenv/docker/loadtest-ts/src/object-store-test.ts b/devenv/docker/loadtest-ts/src/object-store-test.ts deleted file mode 100755 index 5e69dd448aa..00000000000 --- a/devenv/docker/loadtest-ts/src/object-store-test.ts +++ /dev/null @@ -1,145 +0,0 @@ -import { SharedArray } from 'k6/data'; -import execution from 'k6/execution'; -import grpc from 'k6/net/grpc'; - -import { GRPCObjectStoreClient } from './object-store-client'; -import { Data, prepareData } from './prepare-data'; - -const grpcToken = __ENV.GRPC_TOKEN; -const grpcAddress = __ENV.GRPC_ADDRESS; - -if (typeof grpcToken !== 'string' || !grpcToken.length) { - throw new Error('GRPC_TOKEN env variable is missing'); -} - -if (typeof grpcAddress !== 'string' || !grpcAddress.length) { - throw new Error('GRPC_ADDRESS env variable is missing'); -} - -const client = new grpc.Client(); -const objectStoreClient = new GRPCObjectStoreClient(client, grpcAddress, grpcToken); - -const data: Data = new SharedArray('data', () => { - return [prepareData(JSON.parse(open('../scripts/tmp/filenames.json')), 50)]; -})[0]; - -const scenarioDuration = '2m'; - -export const options = { - setupTimeout: '5m', - teardownTimeout: '5m', - noConnectionReuse: true, - scenarios: { - writer: { - exec: 'writer', - executor: 'constant-arrival-rate', - rate: 1, - timeUnit: '2s', - duration: scenarioDuration, - preAllocatedVUs: 1, - maxVUs: 1, - }, - reader: { - exec: 'reader', - executor: 'constant-arrival-rate', - rate: 10, - timeUnit: '2s', - duration: scenarioDuration, - preAllocatedVUs: 1, - maxVUs: 10, - }, - writer1mb: { - exec: 'writer1mb', - executor: 'constant-arrival-rate', - rate: 1, - timeUnit: '20s', - duration: scenarioDuration, - preAllocatedVUs: 1, - maxVUs: 5, - }, - reader1mb: { - startTime: '2s', - exec: 'reader1mb', - executor: 'constant-arrival-rate', - rate: 1, - timeUnit: '1s', - duration: scenarioDuration, - preAllocatedVUs: 1, - maxVUs: 5, - }, - writer4mb: { - exec: 'writer4mb', - executor: 'constant-arrival-rate', - rate: 1, - timeUnit: '30s', - duration: scenarioDuration, - preAllocatedVUs: 1, - maxVUs: 5, - }, - reader4mb: { - startTime: '3s', - exec: 'reader4mb', - executor: 'constant-arrival-rate', - rate: 1, - timeUnit: '5s', - duration: scenarioDuration, - preAllocatedVUs: 1, - maxVUs: 5, - }, - }, - // thresholds: { http_req_duration: ['avg<100', 'p(95)<200'] }, -}; - -export function setup() { - if (!objectStoreClient.healthCheck()) { - execution.test.abort('server should be healthy'); - } - - console.log('inserting base objects'); - for (let i = 0; i < data.base.length; i++) { - if (i % 100 === 0) { - console.log(`inserted ${i} / ${data.base.length}`); - } - objectStoreClient.writeObject(data.base[i], { randomizeData: false, checkCreatedOrUpdated: false }); - } -} - -export function teardown() { - const toDelete = [...data.base, ...data.toWrite, data.size1mb, data.size4mb, data.size100kb]; - - console.log('deleting base objects'); - for (let i = 0; i < toDelete.length; i++) { - if (i % 100 === 0) { - console.log(`deleted ${i} / ${data.base.length}`); - } - objectStoreClient.deleteObject(toDelete[i].uid, toDelete[i].kind); - } -} - -export function reader() { - const item = data.base[execution.scenario.iterationInTest % data.base.length]; - objectStoreClient.readObject(item.uid, item.kind); -} - -export function writer() { - const item = data.toWrite[execution.scenario.iterationInTest % data.toWrite.length]; - objectStoreClient.writeObject(item, { randomizeData: true, checkCreatedOrUpdated: true }); -} - -export function writer1mb() { - objectStoreClient.writeObject(data.size1mb, { randomizeData: true, checkCreatedOrUpdated: true }); -} - -export function reader1mb() { - const item = data.size1mb; - objectStoreClient.readObject(item.uid, item.kind); -} - -export function writer4mb() { - objectStoreClient.writeObject(data.size4mb, { randomizeData: true, checkCreatedOrUpdated: true }); -} - -export function reader4mb() { - const item = data.size4mb; - objectStoreClient.readObject(item.uid, item.kind); -} diff --git a/devenv/docker/loadtest-ts/src/prepare-data.ts b/devenv/docker/loadtest-ts/src/prepare-data.ts deleted file mode 100644 index cb02b06e4fa..00000000000 --- a/devenv/docker/loadtest-ts/src/prepare-data.ts +++ /dev/null @@ -1,57 +0,0 @@ -import shortid from 'shortid'; - -import { prepareDashboard } from './get-large-dashboard'; - -export type Object = { - data: Record; - kind: string; - uid: string; -}; - -export type Data = { - base: Object[]; // objects that are inserted in the test setup and removed only in the teardown - toWrite: Object[]; // objects that are inserted by scenarios and removed after a short period of time: Object; - size100kb: Object; - size1mb: Object; - size4mb: Object; -}; - -export const readAsObjects = (paths: string[], kind: string): Object[] => { - return paths.map((p) => ({ - data: JSON.parse(open(p)), - uid: shortid.generate(), - kind, - })); -}; - -export const getBase = (uniqueObjects: Object[], no: number): Object[] => { - const base = new Array(no); - for (let i = 0; i < no; i++) { - const obj = uniqueObjects[Math.floor(i % uniqueObjects.length)]; - base[i] = { - ...obj, - uid: `${obj.uid}-${Math.floor(i / uniqueObjects.length)}`, - }; - } - - return base; -}; - -const prepareObject = (lengthInKb: number): Object => { - return { - data: prepareDashboard(lengthInKb), - kind: 'dashboard', - uid: shortid(), - }; -}; - -export const prepareData = (dashboardFilePaths: string[], baseNumber: number): Data => { - const objects = readAsObjects(dashboardFilePaths, 'dashboard'); - return { - base: getBase(objects, baseNumber), - toWrite: objects, - size100kb: prepareObject(100), - size1mb: prepareObject(1000), - size4mb: prepareObject(4000), - }; -}; diff --git a/devenv/docker/loadtest-ts/tsconfig.json b/devenv/docker/loadtest-ts/tsconfig.json deleted file mode 100644 index 7da92cf09e2..00000000000 --- a/devenv/docker/loadtest-ts/tsconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "moduleResolution": "node", - "module": "commonjs", - "noEmit": true, - "allowJs": true, - "removeComments": false, - - "strict": true, - "noImplicitAny": true, - "noImplicitThis": true, - - "noUnusedLocals": true, - "noUnusedParameters": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - - "skipLibCheck": true - } -} diff --git a/devenv/docker/loadtest-ts/webpack.config.js b/devenv/docker/loadtest-ts/webpack.config.js deleted file mode 100644 index 66891f56cc1..00000000000 --- a/devenv/docker/loadtest-ts/webpack.config.js +++ /dev/null @@ -1,37 +0,0 @@ -const path = require('path'); -const GlobEntries = require('webpack-glob-entries'); - -module.exports = { - mode: 'production', - entry: GlobEntries('./src/*test*.ts'), // Generates multiple entry for each test - output: { - path: path.join(__dirname, 'dist'), - libraryTarget: 'commonjs', - filename: '[name].js', - clean: true, - }, - resolve: { - extensions: ['.ts', '.js'], - }, - module: { - rules: [ - { - test: /\.ts$/, - use: 'babel-loader', - exclude: /node_modules/, - }, - ], - }, - target: 'web', - externals: /^(k6|https?\:\/\/)(\/.*)?/, - // Generate map files for compiled scripts - devtool: 'source-map', - stats: { - colors: true, - }, - plugins: [], - optimization: { - // Don't minimize, as it's not used in the browser - minimize: false, - }, -}; diff --git a/devenv/docker/loadtest-ts/yarn.lock b/devenv/docker/loadtest-ts/yarn.lock deleted file mode 100644 index 6e86007c1a1..00000000000 --- a/devenv/docker/loadtest-ts/yarn.lock +++ /dev/null @@ -1,3167 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 6 - cacheKey: 8 - -"@ampproject/remapping@npm:^2.1.0": - version: 2.2.0 - resolution: "@ampproject/remapping@npm:2.2.0" - dependencies: - "@jridgewell/gen-mapping": ^0.1.0 - "@jridgewell/trace-mapping": ^0.3.9 - checksum: d74d170d06468913921d72430259424b7e4c826b5a7d39ff839a29d547efb97dc577caa8ba3fb5cf023624e9af9d09651afc3d4112a45e2050328abc9b3a2292 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/code-frame@npm:7.18.6" - dependencies: - "@babel/highlight": ^7.18.6 - checksum: 195e2be3172d7684bf95cff69ae3b7a15a9841ea9d27d3c843662d50cdd7d6470fd9c8e64be84d031117e4a4083486effba39f9aef6bbb2c89f7f21bcfba33ba - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.19.3, @babel/compat-data@npm:^7.19.4": - version: 7.19.4 - resolution: "@babel/compat-data@npm:7.19.4" - checksum: 757fdaeb6756c2d323ff56f60fb8e670292108cda6abf762a56c0d40910ecc4d2c7e283dbdfbcee6bc28c74ad659144352609e1cb49d31e101ab13ea5ce90072 - languageName: node - linkType: hard - -"@babel/core@npm:7.19.6": - version: 7.19.6 - resolution: "@babel/core@npm:7.19.6" - dependencies: - "@ampproject/remapping": ^2.1.0 - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.19.6 - "@babel/helper-compilation-targets": ^7.19.3 - "@babel/helper-module-transforms": ^7.19.6 - "@babel/helpers": ^7.19.4 - "@babel/parser": ^7.19.6 - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.19.6 - "@babel/types": ^7.19.4 - convert-source-map: ^1.7.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.2.1 - semver: ^6.3.0 - checksum: 85c0bd38d0ef180aa2d23c3db6840a0baec88d2e05c30e7ffc3dfeb6b2b89d6e4864922f04997a1f4ce55f9dd469bf2e76518d5c7ae744b98516709d32769b73 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.19.6": - version: 7.19.6 - resolution: "@babel/generator@npm:7.19.6" - dependencies: - "@babel/types": ^7.19.4 - "@jridgewell/gen-mapping": ^0.3.2 - jsesc: ^2.5.1 - checksum: 734fcb1fbef182e7b8967459cb39b81edd2701dd13170c154b368d4e086842f72ef214798c5a37e67e0a695dfb34b13143277bedcd9795b3b1b83da8e1d236c6 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.20.1": - version: 7.20.1 - resolution: "@babel/generator@npm:7.20.1" - dependencies: - "@babel/types": ^7.20.0 - "@jridgewell/gen-mapping": ^0.3.2 - jsesc: ^2.5.1 - checksum: e6846d88c59a5dae4c86f3cc84f84972cf9cc5fa0f4944606303a9df3ba1be388e0cb08a625c86f7282ab03faf54acd72efba34f019b6762f4739a175173783e - languageName: node - linkType: hard - -"@babel/helper-annotate-as-pure@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: 88ccd15ced475ef2243fdd3b2916a29ea54c5db3cd0cfabf9d1d29ff6e63b7f7cd1c27264137d7a40ac2e978b9b9a542c332e78f40eb72abe737a7400788fc1b - languageName: node - linkType: hard - -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.18.6": - version: 7.18.9 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.18.9" - dependencies: - "@babel/helper-explode-assignable-expression": ^7.18.6 - "@babel/types": ^7.18.9 - checksum: b4bc214cb56329daff6cc18a7f7a26aeafb55a1242e5362f3d47fe3808421f8c7cd91fff95d6b9b7ccb67e14e5a67d944e49dbe026942bfcbfda19b1c72a8e72 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.19.0, @babel/helper-compilation-targets@npm:^7.19.3": - version: 7.19.3 - resolution: "@babel/helper-compilation-targets@npm:7.19.3" - dependencies: - "@babel/compat-data": ^7.19.3 - "@babel/helper-validator-option": ^7.18.6 - browserslist: ^4.21.3 - semver: ^6.3.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: aafcb4490c98cddb3255fff98bfbdb881b4def85a1935fd9b1f9b1f0f8b502696839f6b387fb508ca991ea72ba82ce6913bab99f21df4ce80bda2b79e91a09f5 - languageName: node - linkType: hard - -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helper-create-class-features-plugin@npm:7.19.0" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 - "@babel/helper-member-expression-to-functions": ^7.18.9 - "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-replace-supers": ^7.18.9 - "@babel/helper-split-export-declaration": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: f0c6fb77b6f113d70f308e7093f60dd465b697818badf5df0519d8dd12b6bfb1f4ad300b923207ce9f9c1c940ef58bff12ac4270c0863eadf9e303b7dd6d01b6 - languageName: node - linkType: hard - -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.19.0" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - regexpu-core: ^5.1.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 811cc90afe9fc25a74ed37fc0c1361a4a91b0b940235dd3958e3f03b366d40a903b40fc93b51bcb93be774aba573219f8f215664bea1d1301f58797ca6854f3f - languageName: node - linkType: hard - -"@babel/helper-define-polyfill-provider@npm:^0.3.3": - version: 0.3.3 - resolution: "@babel/helper-define-polyfill-provider@npm:0.3.3" - dependencies: - "@babel/helper-compilation-targets": ^7.17.7 - "@babel/helper-plugin-utils": ^7.16.7 - debug: ^4.1.1 - lodash.debounce: ^4.0.8 - resolve: ^1.14.2 - semver: ^6.1.2 - peerDependencies: - "@babel/core": ^7.4.0-0 - checksum: 8e3fe75513302e34f6d92bd67b53890e8545e6c5bca8fe757b9979f09d68d7e259f6daea90dc9e01e332c4f8781bda31c5fe551c82a277f9bc0bec007aed497c - languageName: node - linkType: hard - -"@babel/helper-environment-visitor@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-environment-visitor@npm:7.18.9" - checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 - languageName: node - linkType: hard - -"@babel/helper-explode-assignable-expression@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-explode-assignable-expression@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: 225cfcc3376a8799023d15dc95000609e9d4e7547b29528c7f7111a0e05493ffb12c15d70d379a0bb32d42752f340233c4115bded6d299bc0c3ab7a12be3d30f - languageName: node - linkType: hard - -"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helper-function-name@npm:7.19.0" - dependencies: - "@babel/template": ^7.18.10 - "@babel/types": ^7.19.0 - checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e - languageName: node - linkType: hard - -"@babel/helper-hoist-variables@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-hoist-variables@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: fd9c35bb435fda802bf9ff7b6f2df06308a21277c6dec2120a35b09f9de68f68a33972e2c15505c1a1a04b36ec64c9ace97d4a9e26d6097b76b4396b7c5fa20f - languageName: node - linkType: hard - -"@babel/helper-member-expression-to-functions@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-member-expression-to-functions@npm:7.18.9" - dependencies: - "@babel/types": ^7.18.9 - checksum: fcf8184e3b55051c4286b2cbedf0eccc781d0f3c9b5cbaba582eca19bf0e8d87806cdb7efc8554fcb969ceaf2b187d5ea748d40022d06ec7739fbb18c1b19a7a - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-module-imports@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: f393f8a3b3304b1b7a288a38c10989de754f01d29caf62ce7c4e5835daf0a27b81f3ac687d9d2780d39685aae7b55267324b512150e7b2be967b0c493b6a1def - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.19.6": - version: 7.19.6 - resolution: "@babel/helper-module-transforms@npm:7.19.6" - dependencies: - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-simple-access": ^7.19.4 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/helper-validator-identifier": ^7.19.1 - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.19.6 - "@babel/types": ^7.19.4 - checksum: c28692b37d4b5abacc775bcab52a74f44a493f38c58cb72b56a6c6d67a97485dd8aff6f26905abd1a924d3261a171d0214a9fb76f48d8598f1e35b8b29284792 - languageName: node - linkType: hard - -"@babel/helper-optimise-call-expression@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-optimise-call-expression@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: e518fe8418571405e21644cfb39cf694f30b6c47b10b006609a92469ae8b8775cbff56f0b19732343e2ea910641091c5a2dc73b56ceba04e116a33b0f8bd2fbd - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.19.0 - resolution: "@babel/helper-plugin-utils@npm:7.19.0" - checksum: eedc996c633c8c207921c26ec2989eae0976336ecd9b9f1ac526498f52b5d136f7cd03c32b6fdf8d46a426f907c142de28592f383c42e5fba1e904cbffa05345 - languageName: node - linkType: hard - -"@babel/helper-remap-async-to-generator@npm:^7.18.6, @babel/helper-remap-async-to-generator@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-wrap-function": ^7.18.9 - "@babel/types": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 4be6076192308671b046245899b703ba090dbe7ad03e0bea897bb2944ae5b88e5e85853c9d1f83f643474b54c578d8ac0800b80341a86e8538264a725fbbefec - languageName: node - linkType: hard - -"@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.18.9": - version: 7.19.1 - resolution: "@babel/helper-replace-supers@npm:7.19.1" - dependencies: - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-member-expression-to-functions": ^7.18.9 - "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/traverse": ^7.19.1 - "@babel/types": ^7.19.0 - checksum: a0e4bf79ebe7d2bb5947169e47a0b4439c73fb0ec57d446cf3ea81b736721129ec373c3f94d2ebd2716b26dd65f8e6c083dac898170d42905e7ba815a2f52c25 - languageName: node - linkType: hard - -"@babel/helper-simple-access@npm:^7.19.4": - version: 7.19.4 - resolution: "@babel/helper-simple-access@npm:7.19.4" - dependencies: - "@babel/types": ^7.19.4 - checksum: 964cb1ec36b69aabbb02f8d5ee1d680ebbb628611a6740958d9b05107ab16c0492044e430618ae42b1f8ea73e4e1bafe3750e8ebc959d6f3277d9cfbe1a94880 - languageName: node - linkType: hard - -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.18.9" - dependencies: - "@babel/types": ^7.18.9 - checksum: 6e93ccd10248293082606a4b3e30eed32c6f796d378f6b662796c88f462f348aa368aadeb48eb410cfcc8250db93b2d6627c2e55662530f08fc25397e588d68a - languageName: node - linkType: hard - -"@babel/helper-split-export-declaration@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-split-export-declaration@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: c6d3dede53878f6be1d869e03e9ffbbb36f4897c7cc1527dc96c56d127d834ffe4520a6f7e467f5b6f3c2843ea0e81a7819d66ae02f707f6ac057f3d57943a2b - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.19.4": - version: 7.19.4 - resolution: "@babel/helper-string-parser@npm:7.19.4" - checksum: b2f8a3920b30dfac81ec282ac4ad9598ea170648f8254b10f475abe6d944808fb006aab325d3eb5a8ad3bea8dfa888cfa6ef471050dae5748497c110ec060943 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": - version: 7.19.1 - resolution: "@babel/helper-validator-identifier@npm:7.19.1" - checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-validator-option@npm:7.18.6" - checksum: f9cc6eb7cc5d759c5abf006402180f8d5e4251e9198197428a97e05d65eb2f8ae5a0ce73b1dfd2d35af41d0eb780627a64edf98a4e71f064eeeacef8de58f2cf - languageName: node - linkType: hard - -"@babel/helper-wrap-function@npm:^7.18.9": - version: 7.19.0 - resolution: "@babel/helper-wrap-function@npm:7.19.0" - dependencies: - "@babel/helper-function-name": ^7.19.0 - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.19.0 - "@babel/types": ^7.19.0 - checksum: 2453a6b134f12cc779179188c4358a66252c29b634a8195c0cf626e17f9806c3c4c40e159cd8056c2ec82b69b9056a088014fa43d6ccc1aca67da8d9605da8fd - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.19.4": - version: 7.20.1 - resolution: "@babel/helpers@npm:7.20.1" - dependencies: - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.20.1 - "@babel/types": ^7.20.0 - checksum: be35f78666bdab895775ed94dbeb098f7b4fa08ce4cfb0c3a9e69b7220cce56960dcdc2b14f5df9d3b80388d4bf7df155c97f6cf6768c0138f4e6931d0f44955 - languageName: node - linkType: hard - -"@babel/highlight@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/highlight@npm:7.18.6" - dependencies: - "@babel/helper-validator-identifier": ^7.18.6 - chalk: ^2.0.0 - js-tokens: ^4.0.0 - checksum: 92d8ee61549de5ff5120e945e774728e5ccd57fd3b2ed6eace020ec744823d4a98e242be1453d21764a30a14769ecd62170fba28539b211799bbaf232bbb2789 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.18.10, @babel/parser@npm:^7.19.6": - version: 7.19.6 - resolution: "@babel/parser@npm:7.19.6" - bin: - parser: ./bin/babel-parser.js - checksum: 9a3dca4ee3acd7e4fc3b58e1e1526a11fa334acbfe437f8ebf91dfaf48e943c147ef64b1733ba0a55af57d1eccafbf4e4a4afc46a15becd921971fe2ddf309bf - languageName: node - linkType: hard - -"@babel/parser@npm:^7.20.1": - version: 7.20.1 - resolution: "@babel/parser@npm:7.20.1" - bin: - parser: ./bin/babel-parser.js - checksum: 2db7ba692b8b3054df129876b115ed8b265d5c138dee5e1db56a999209df3dd3d508e0985bf3cc44fc432498da094c164906b531d049608e55e208dae0678d42 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 845bd280c55a6a91d232cfa54eaf9708ec71e594676fe705794f494bb8b711d833b752b59d1a5c154695225880c23dbc9cab0e53af16fd57807976cd3ff41b8d - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.18.9" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 - "@babel/plugin-proposal-optional-chaining": ^7.18.9 - peerDependencies: - "@babel/core": ^7.13.0 - checksum: 93abb5cb179a13db171bfc2cdf79489598f43c50cc174f97a2b7bb1d44d24ade7109665a20cf4e317ad6c1c730f036f06478f7c7e789b4240be1abdb60d6452f - languageName: node - linkType: hard - -"@babel/plugin-proposal-async-generator-functions@npm:^7.19.1": - version: 7.20.1 - resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.20.1" - dependencies: - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-plugin-utils": ^7.19.0 - "@babel/helper-remap-async-to-generator": ^7.18.9 - "@babel/plugin-syntax-async-generators": ^7.8.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 518483a68c5618932109913eb7316ed5e656c575cbd9d22667bc0451e35a1be45f8eaeb8e2065834b36c8a93c4840f78cebf8f1d067b07c422f7be16d58eca60 - languageName: node - linkType: hard - -"@babel/plugin-proposal-class-properties@npm:7.18.6, @babel/plugin-proposal-class-properties@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 49a78a2773ec0db56e915d9797e44fd079ab8a9b2e1716e0df07c92532f2c65d76aeda9543883916b8e0ff13606afeffa67c5b93d05b607bc87653ad18a91422 - languageName: node - linkType: hard - -"@babel/plugin-proposal-class-static-block@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-class-static-block@npm:7.18.6" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-class-static-block": ^7.14.5 - peerDependencies: - "@babel/core": ^7.12.0 - checksum: b8d7ae99ed5ad784f39e7820e3ac03841f91d6ed60ab4a98c61d6112253da36013e12807bae4ffed0ef3cb318e47debac112ed614e03b403fb8b075b09a828ee - languageName: node - linkType: hard - -"@babel/plugin-proposal-dynamic-import@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-dynamic-import@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-dynamic-import": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 96b1c8a8ad8171d39e9ab106be33bde37ae09b22fb2c449afee9a5edf3c537933d79d963dcdc2694d10677cb96da739cdf1b53454e6a5deab9801f28a818bb2f - languageName: node - linkType: hard - -"@babel/plugin-proposal-export-namespace-from@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-proposal-export-namespace-from@npm:7.18.9" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - "@babel/plugin-syntax-export-namespace-from": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 84ff22bacc5d30918a849bfb7e0e90ae4c5b8d8b65f2ac881803d1cf9068dffbe53bd657b0e4bc4c20b4db301b1c85f1e74183cf29a0dd31e964bd4e97c363ef - languageName: node - linkType: hard - -"@babel/plugin-proposal-json-strings@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-json-strings@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-json-strings": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 25ba0e6b9d6115174f51f7c6787e96214c90dd4026e266976b248a2ed417fe50fddae72843ffb3cbe324014a18632ce5648dfac77f089da858022b49fd608cb3 - languageName: node - linkType: hard - -"@babel/plugin-proposal-logical-assignment-operators@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.18.9" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: dd87fa4a48c6408c5e85dbd6405a65cc8fe909e3090030df46df90df64cdf3e74007381a58ed87608778ee597eff7395d215274009bb3f5d8964b2db5557754f - languageName: node - linkType: hard - -"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 949c9ddcdecdaec766ee610ef98f965f928ccc0361dd87cf9f88cf4896a6ccd62fce063d4494778e50da99dea63d270a1be574a62d6ab81cbe9d85884bf55a7d - languageName: node - linkType: hard - -"@babel/plugin-proposal-numeric-separator@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-numeric-separator@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-numeric-separator": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f370ea584c55bf4040e1f78c80b4eeb1ce2e6aaa74f87d1a48266493c33931d0b6222d8cee3a082383d6bb648ab8d6b7147a06f974d3296ef3bc39c7851683ec - languageName: node - linkType: hard - -"@babel/plugin-proposal-object-rest-spread@npm:7.19.4, @babel/plugin-proposal-object-rest-spread@npm:^7.19.4": - version: 7.19.4 - resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.19.4" - dependencies: - "@babel/compat-data": ^7.19.4 - "@babel/helper-compilation-targets": ^7.19.3 - "@babel/helper-plugin-utils": ^7.19.0 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-transform-parameters": ^7.18.8 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 90a2a59da305e6c8c83831e16079193df33d727a77a90972e286af2c8c0295fddb91b0978b88f16f63080d08a82b08ce3ee82a88b0488b3c51decc73c1d35786 - languageName: node - linkType: hard - -"@babel/plugin-proposal-optional-catch-binding@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7b5b39fb5d8d6d14faad6cb68ece5eeb2fd550fb66b5af7d7582402f974f5bc3684641f7c192a5a57e0f59acfae4aada6786be1eba030881ddc590666eff4d1e - languageName: node - linkType: hard - -"@babel/plugin-proposal-optional-chaining@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-proposal-optional-chaining@npm:7.18.9" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f2db40e26172f07c50b635cb61e1f36165de3ba868fcf608d967642f0d044b7c6beb0e7ecf17cbd421144b99e1eae7ad6031ded92925343bb0ed1d08707b514f - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-methods@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-private-methods@npm:7.18.6" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 22d8502ee96bca99ad2c8393e8493e2b8d4507576dd054490fd8201a36824373440106f5b098b6d821b026c7e72b0424ff4aeca69ed5f42e48f029d3a156d5ad - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-property-in-object@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.18.6" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-create-class-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-private-property-in-object": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c8e56a972930730345f39f2384916fd8e711b3f4b4eae2ca9740e99958980118120d5cc9b6ac150f0965a5a35f825910e2c3013d90be3e9993ab6111df444569 - languageName: node - linkType: hard - -"@babel/plugin-proposal-unicode-property-regex@npm:^7.18.6, @babel/plugin-proposal-unicode-property-regex@npm:^7.4.4": - version: 7.18.6 - resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.18.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a8575ecb7ff24bf6c6e94808d5c84bb5a0c6dd7892b54f09f4646711ba0ee1e1668032b3c43e3e1dfec2c5716c302e851ac756c1645e15882d73df6ad21ae951 - languageName: node - linkType: hard - -"@babel/plugin-syntax-async-generators@npm:^7.8.4": - version: 7.8.4 - resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-properties@npm:^7.12.13": - version: 7.12.13 - resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" - dependencies: - "@babel/helper-plugin-utils": ^7.12.13 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-static-block@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3e80814b5b6d4fe17826093918680a351c2d34398a914ce6e55d8083d72a9bdde4fbaf6a2dcea0e23a03de26dc2917ae3efd603d27099e2b98380345703bf948 - languageName: node - linkType: hard - -"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ce307af83cf433d4ec42932329fad25fa73138ab39c7436882ea28742e1c0066626d224e0ad2988724c82644e41601cef607b36194f695cb78a1fcdc959637bd - languageName: node - linkType: hard - -"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 85740478be5b0de185228e7814451d74ab8ce0a26fcca7613955262a26e99e8e15e9da58f60c754b84515d4c679b590dbd3f2148f0f58025f4ae706f1c5a5d4a - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-assertions@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 54918a05375325ba0c60bc81abfb261e6f118bed2de94e4c17dca9a2006fc25e13b1a8b5504b9a881238ea394fd2f098f60b2eb3a392585d6348874565445e7b - languageName: node - linkType: hard - -"@babel/plugin-syntax-json-strings@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a - languageName: node - linkType: hard - -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 - languageName: node - linkType: hard - -"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 - languageName: node - linkType: hard - -"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b317174783e6e96029b743ccff2a67d63d38756876e7e5d0ba53a322e38d9ca452c13354a57de1ad476b4c066dbae699e0ca157441da611117a47af88985ecda - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e - languageName: node - linkType: hard - -"@babel/plugin-syntax-typescript@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-syntax-typescript@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2cde73725ec51118ebf410bf02d78781c03fa4d3185993fcc9d253b97443381b621c44810084c5dd68b92eb8bdfae0e5b163e91b32bebbb33852383d1815c05d - languageName: node - linkType: hard - -"@babel/plugin-transform-arrow-functions@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 900f5c695755062b91eec74da6f9092f40b8fada099058b92576f1e23c55e9813ec437051893a9b3c05cefe39e8ac06303d4a91b384e1c03dd8dc1581ea11602 - languageName: node - linkType: hard - -"@babel/plugin-transform-async-to-generator@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.18.6" - dependencies: - "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-remap-async-to-generator": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c2cca47468cf1aeefdc7ec35d670e195c86cee4de28a1970648c46a88ce6bd1806ef0bab27251b9e7fb791bb28a64dcd543770efd899f28ee5f7854e64e873d3 - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoped-functions@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 0a0df61f94601e3666bf39f2cc26f5f7b22a94450fb93081edbed967bd752ce3f81d1227fefd3799f5ee2722171b5e28db61379234d1bb85b6ec689589f99d7e - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoping@npm:^7.19.4": - version: 7.20.0 - resolution: "@babel/plugin-transform-block-scoping@npm:7.20.0" - dependencies: - "@babel/helper-plugin-utils": ^7.19.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ff5ba1a2c481047e3a1fd880e78a4942ad05c0ead1424e2db150fa4009b86707d66e945173abb14451ed5ca605a19620a2b9414d16407d296326ab26219ef511 - languageName: node - linkType: hard - -"@babel/plugin-transform-classes@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/plugin-transform-classes@npm:7.19.0" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-compilation-targets": ^7.19.0 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 - "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-plugin-utils": ^7.19.0 - "@babel/helper-replace-supers": ^7.18.9 - "@babel/helper-split-export-declaration": ^7.18.6 - globals: ^11.1.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 5500953031fc3eae73f717c7b59ef406158a4a710d566a0f78a4944240bcf98f817f07cf1d6af0e749e21f0dfee29c36412b75d57b0a753c3ad823b70c596b79 - languageName: node - linkType: hard - -"@babel/plugin-transform-computed-properties@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-computed-properties@npm:7.18.9" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a6bfbea207827d77592628973c0e8cc3319db636506bdc6e81e21582de2e767890e6975b382d0511e9ec3773b9f43691185df90832883bbf9251f688d27fbc1d - languageName: node - linkType: hard - -"@babel/plugin-transform-destructuring@npm:^7.19.4": - version: 7.20.0 - resolution: "@babel/plugin-transform-destructuring@npm:7.20.0" - dependencies: - "@babel/helper-plugin-utils": ^7.19.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ce43dfcc36254ac2aef386465942f46f9901cec5d14e8aef68ebced71d46fed7d9ec88046fe2e47a57a769a26cc20ec61c4c4f13efb733ad3a82edea52aa7bdf - languageName: node - linkType: hard - -"@babel/plugin-transform-dotall-regex@npm:^7.18.6, @babel/plugin-transform-dotall-regex@npm:^7.4.4": - version: 7.18.6 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.18.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: cbe5d7063eb8f8cca24cd4827bc97f5641166509e58781a5f8aa47fb3d2d786ce4506a30fca2e01f61f18792783a5cb5d96bf5434c3dd1ad0de8c9cc625a53da - languageName: node - linkType: hard - -"@babel/plugin-transform-duplicate-keys@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.18.9" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 220bf4a9fec5c4d4a7b1de38810350260e8ea08481bf78332a464a21256a95f0df8cd56025f346238f09b04f8e86d4158fafc9f4af57abaef31637e3b58bd4fe - languageName: node - linkType: hard - -"@babel/plugin-transform-exponentiation-operator@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.18.6" - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7f70222f6829c82a36005508d34ddbe6fd0974ae190683a8670dd6ff08669aaf51fef2209d7403f9bd543cb2d12b18458016c99a6ed0332ccedb3ea127b01229 - languageName: node - linkType: hard - -"@babel/plugin-transform-for-of@npm:^7.18.8": - version: 7.18.8 - resolution: "@babel/plugin-transform-for-of@npm:7.18.8" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ca64c623cf0c7a80ab6f07ebd3e6e4ade95e2ae806696f70b43eafe6394fa8ce21f2b1ffdd15df2067f7363d2ecfe26472a97c6c774403d2163fa05f50c98f17 - languageName: node - linkType: hard - -"@babel/plugin-transform-function-name@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-function-name@npm:7.18.9" - dependencies: - "@babel/helper-compilation-targets": ^7.18.9 - "@babel/helper-function-name": ^7.18.9 - "@babel/helper-plugin-utils": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 62dd9c6cdc9714704efe15545e782ee52d74dc73916bf954b4d3bee088fb0ec9e3c8f52e751252433656c09f744b27b757fc06ed99bcde28e8a21600a1d8e597 - languageName: node - linkType: hard - -"@babel/plugin-transform-literals@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-literals@npm:7.18.9" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3458dd2f1a47ac51d9d607aa18f3d321cbfa8560a985199185bed5a906bb0c61ba85575d386460bac9aed43fdd98940041fae5a67dff286f6f967707cff489f8 - languageName: node - linkType: hard - -"@babel/plugin-transform-member-expression-literals@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 35a3d04f6693bc6b298c05453d85ee6e41cc806538acb6928427e0e97ae06059f97d2f07d21495fcf5f70d3c13a242e2ecbd09d5c1fcb1b1a73ff528dcb0b695 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-amd@npm:^7.18.6": - version: 7.19.6 - resolution: "@babel/plugin-transform-modules-amd@npm:7.19.6" - dependencies: - "@babel/helper-module-transforms": ^7.19.6 - "@babel/helper-plugin-utils": ^7.19.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 4236aad970025bc10c772c1589b1e2eab8b7681933bb5ffa6e395d4c1a52532b28c47c553e3011b4272ea81e5ab39fe969eb5349584e8390e59771055c467d42 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-commonjs@npm:^7.18.6": - version: 7.19.6 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.19.6" - dependencies: - "@babel/helper-module-transforms": ^7.19.6 - "@babel/helper-plugin-utils": ^7.19.0 - "@babel/helper-simple-access": ^7.19.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 85d46945ab5ba3fff89e962d560a5d40253f228b9659a697683db3de07c0236e8cd60e5eb41958007359951a42bc268bf32350fcdb5b4a86f58dff1e032c096e - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-systemjs@npm:^7.19.0": - version: 7.19.6 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.19.6" - dependencies: - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-module-transforms": ^7.19.6 - "@babel/helper-plugin-utils": ^7.19.0 - "@babel/helper-validator-identifier": ^7.19.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 8526431cc81ea3eb232ad50862d0ed1cbb422b5251d14a8d6610d0ca0617f6e75f35179e98eb1235d0cccb980120350b9f112594e5646dd45378d41eaaf87342 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-umd@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-modules-umd@npm:7.18.6" - dependencies: - "@babel/helper-module-transforms": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c3b6796c6f4579f1ba5ab0cdcc73910c1e9c8e1e773c507c8bb4da33072b3ae5df73c6d68f9126dab6e99c24ea8571e1563f8710d7c421fac1cde1e434c20153 - languageName: node - linkType: hard - -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.19.1": - version: 7.19.1 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.19.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.19.0 - "@babel/helper-plugin-utils": ^7.19.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 8a40f5d04f2140c44fe890a5a3fd72abc2a88445443ac2bd92e1e85d9366d3eb8f1ebb7e2c89d2daeaf213d9b28cb65605502ac9b155936d48045eeda6053494 - languageName: node - linkType: hard - -"@babel/plugin-transform-new-target@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-new-target@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bd780e14f46af55d0ae8503b3cb81ca86dcc73ed782f177e74f498fff934754f9e9911df1f8f3bd123777eed7c1c1af4d66abab87c8daae5403e7719a6b845d1 - languageName: node - linkType: hard - -"@babel/plugin-transform-object-super@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-object-super@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-replace-supers": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 0fcb04e15deea96ae047c21cb403607d49f06b23b4589055993365ebd7a7d7541334f06bf9642e90075e66efce6ebaf1eb0ef066fbbab802d21d714f1aac3aef - languageName: node - linkType: hard - -"@babel/plugin-transform-parameters@npm:^7.18.8": - version: 7.18.8 - resolution: "@babel/plugin-transform-parameters@npm:7.18.8" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2b5863300da60face8a250d91da16294333bd5626e9721b13a3ba2078bd2a5a190e32c6e7a1323d5f547f579aeb2804ff49a62a55fcad2b1d099e55a55b788ea - languageName: node - linkType: hard - -"@babel/plugin-transform-property-literals@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-property-literals@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 1c16e64de554703f4b547541de2edda6c01346dd3031d4d29e881aa7733785cd26d53611a4ccf5353f4d3e69097bb0111c0a93ace9e683edd94fea28c4484144 - languageName: node - linkType: hard - -"@babel/plugin-transform-regenerator@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-regenerator@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - regenerator-transform: ^0.15.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 60bd482cb0343c714f85c3e19a13b3b5fa05ee336c079974091c0b35e263307f4e661f4555dff90707a87d5efe19b1d51835db44455405444ac1813e268ad750 - languageName: node - linkType: hard - -"@babel/plugin-transform-reserved-words@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-reserved-words@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 0738cdc30abdae07c8ec4b233b30c31f68b3ff0eaa40eddb45ae607c066127f5fa99ddad3c0177d8e2832e3a7d3ad115775c62b431ebd6189c40a951b867a80c - languageName: node - linkType: hard - -"@babel/plugin-transform-shorthand-properties@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b8e4e8acc2700d1e0d7d5dbfd4fdfb935651913de6be36e6afb7e739d8f9ca539a5150075a0f9b79c88be25ddf45abb912fe7abf525f0b80f5b9d9860de685d7 - languageName: node - linkType: hard - -"@babel/plugin-transform-spread@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/plugin-transform-spread@npm:7.19.0" - dependencies: - "@babel/helper-plugin-utils": ^7.19.0 - "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: e73a4deb095999185e70b524d0ff4e35df50fcda58299e700a6149a15bbc1a9b369ef1cef384e15a54b3c3ce316cc0f054dbf249dcd0d1ca59f4281dd4df9718 - languageName: node - linkType: hard - -"@babel/plugin-transform-sticky-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 68ea18884ae9723443ffa975eb736c8c0d751265859cd3955691253f7fee37d7a0f7efea96c8a062876af49a257a18ea0ed5fea0d95a7b3611ce40f7ee23aee3 - languageName: node - linkType: hard - -"@babel/plugin-transform-template-literals@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-template-literals@npm:7.18.9" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3d2fcd79b7c345917f69b92a85bdc3ddd68ce2c87dc70c7d61a8373546ccd1f5cb8adc8540b49dfba08e1b82bb7b3bbe23a19efdb2b9c994db2db42906ca9fb2 - languageName: node - linkType: hard - -"@babel/plugin-transform-typeof-symbol@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.18.9" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: e754e0d8b8a028c52e10c148088606e3f7a9942c57bd648fc0438e5b4868db73c386a5ed47ab6d6f0594aae29ee5ffc2ffc0f7ebee7fae560a066d6dea811cd4 - languageName: node - linkType: hard - -"@babel/plugin-transform-typescript@npm:^7.18.6": - version: 7.19.3 - resolution: "@babel/plugin-transform-typescript@npm:7.19.3" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.19.0 - "@babel/helper-plugin-utils": ^7.19.0 - "@babel/plugin-syntax-typescript": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 094c8c4ad05fee7f1bda243923cadb2b05b58448ea7cf9560e734c7cffd72acfeab3e1e0d2b084eb47a5a950ac316f970b83904b3504c203fa6fe9d8d61526a8 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-escapes@npm:^7.18.10": - version: 7.18.10 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.18.10" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f5baca55cb3c11bc08ec589f5f522d85c1ab509b4d11492437e45027d64ae0b22f0907bd1381e8d7f2a436384bb1f9ad89d19277314242c5c2671a0f91d0f9cd - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.18.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d9e18d57536a2d317fb0b7c04f8f55347f3cfacb75e636b4c6fa2080ab13a3542771b5120e726b598b815891fc606d1472ac02b749c69fd527b03847f22dc25e - languageName: node - linkType: hard - -"@babel/preset-env@npm:7.19.4": - version: 7.19.4 - resolution: "@babel/preset-env@npm:7.19.4" - dependencies: - "@babel/compat-data": ^7.19.4 - "@babel/helper-compilation-targets": ^7.19.3 - "@babel/helper-plugin-utils": ^7.19.0 - "@babel/helper-validator-option": ^7.18.6 - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.18.6 - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.18.9 - "@babel/plugin-proposal-async-generator-functions": ^7.19.1 - "@babel/plugin-proposal-class-properties": ^7.18.6 - "@babel/plugin-proposal-class-static-block": ^7.18.6 - "@babel/plugin-proposal-dynamic-import": ^7.18.6 - "@babel/plugin-proposal-export-namespace-from": ^7.18.9 - "@babel/plugin-proposal-json-strings": ^7.18.6 - "@babel/plugin-proposal-logical-assignment-operators": ^7.18.9 - "@babel/plugin-proposal-nullish-coalescing-operator": ^7.18.6 - "@babel/plugin-proposal-numeric-separator": ^7.18.6 - "@babel/plugin-proposal-object-rest-spread": ^7.19.4 - "@babel/plugin-proposal-optional-catch-binding": ^7.18.6 - "@babel/plugin-proposal-optional-chaining": ^7.18.9 - "@babel/plugin-proposal-private-methods": ^7.18.6 - "@babel/plugin-proposal-private-property-in-object": ^7.18.6 - "@babel/plugin-proposal-unicode-property-regex": ^7.18.6 - "@babel/plugin-syntax-async-generators": ^7.8.4 - "@babel/plugin-syntax-class-properties": ^7.12.13 - "@babel/plugin-syntax-class-static-block": ^7.14.5 - "@babel/plugin-syntax-dynamic-import": ^7.8.3 - "@babel/plugin-syntax-export-namespace-from": ^7.8.3 - "@babel/plugin-syntax-import-assertions": ^7.18.6 - "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.10.4 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-syntax-private-property-in-object": ^7.14.5 - "@babel/plugin-syntax-top-level-await": ^7.14.5 - "@babel/plugin-transform-arrow-functions": ^7.18.6 - "@babel/plugin-transform-async-to-generator": ^7.18.6 - "@babel/plugin-transform-block-scoped-functions": ^7.18.6 - "@babel/plugin-transform-block-scoping": ^7.19.4 - "@babel/plugin-transform-classes": ^7.19.0 - "@babel/plugin-transform-computed-properties": ^7.18.9 - "@babel/plugin-transform-destructuring": ^7.19.4 - "@babel/plugin-transform-dotall-regex": ^7.18.6 - "@babel/plugin-transform-duplicate-keys": ^7.18.9 - "@babel/plugin-transform-exponentiation-operator": ^7.18.6 - "@babel/plugin-transform-for-of": ^7.18.8 - "@babel/plugin-transform-function-name": ^7.18.9 - "@babel/plugin-transform-literals": ^7.18.9 - "@babel/plugin-transform-member-expression-literals": ^7.18.6 - "@babel/plugin-transform-modules-amd": ^7.18.6 - "@babel/plugin-transform-modules-commonjs": ^7.18.6 - "@babel/plugin-transform-modules-systemjs": ^7.19.0 - "@babel/plugin-transform-modules-umd": ^7.18.6 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.19.1 - "@babel/plugin-transform-new-target": ^7.18.6 - "@babel/plugin-transform-object-super": ^7.18.6 - "@babel/plugin-transform-parameters": ^7.18.8 - "@babel/plugin-transform-property-literals": ^7.18.6 - "@babel/plugin-transform-regenerator": ^7.18.6 - "@babel/plugin-transform-reserved-words": ^7.18.6 - "@babel/plugin-transform-shorthand-properties": ^7.18.6 - "@babel/plugin-transform-spread": ^7.19.0 - "@babel/plugin-transform-sticky-regex": ^7.18.6 - "@babel/plugin-transform-template-literals": ^7.18.9 - "@babel/plugin-transform-typeof-symbol": ^7.18.9 - "@babel/plugin-transform-unicode-escapes": ^7.18.10 - "@babel/plugin-transform-unicode-regex": ^7.18.6 - "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.19.4 - babel-plugin-polyfill-corejs2: ^0.3.3 - babel-plugin-polyfill-corejs3: ^0.6.0 - babel-plugin-polyfill-regenerator: ^0.4.1 - core-js-compat: ^3.25.1 - semver: ^6.3.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f12af25281f3c5e7df60fa1e79ad481ddd7f6a111d4c0fabcffdabf0eaed3a01b4f8c647ae5445ed1f58df70f52083ffd283e8919ade7afa73801a49c733d22c - languageName: node - linkType: hard - -"@babel/preset-modules@npm:^0.1.5": - version: 0.1.5 - resolution: "@babel/preset-modules@npm:0.1.5" - dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/plugin-proposal-unicode-property-regex": ^7.4.4 - "@babel/plugin-transform-dotall-regex": ^7.4.4 - "@babel/types": ^7.4.4 - esutils: ^2.0.2 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 8430e0e9e9d520b53e22e8c4c6a5a080a12b63af6eabe559c2310b187bd62ae113f3da82ba33e9d1d0f3230930ca702843aae9dd226dec51f7d7114dc1f51c10 - languageName: node - linkType: hard - -"@babel/preset-typescript@npm:7.18.6": - version: 7.18.6 - resolution: "@babel/preset-typescript@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-validator-option": ^7.18.6 - "@babel/plugin-transform-typescript": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7fe0da5103eb72d3cf39cf3e138a794c8cdd19c0b38e3e101507eef519c46a87a0d6d0e8bc9e28a13ea2364001ebe7430b9d75758aab4c3c3a8db9a487b9dc7c - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.8.4": - version: 7.19.4 - resolution: "@babel/runtime@npm:7.19.4" - dependencies: - regenerator-runtime: ^0.13.4 - checksum: 66b7e3c13e9ee1d2c9397ea89144f29a875edee266a0eb2d9971be51b32fdbafc85808c7a45e011e6681899bb804b4e2ee2aed6dc07108dbbd6b11b6cc2afba6 - languageName: node - linkType: hard - -"@babel/template@npm:^7.18.10": - version: 7.18.10 - resolution: "@babel/template@npm:7.18.10" - dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/parser": ^7.18.10 - "@babel/types": ^7.18.10 - checksum: 93a6aa094af5f355a72bd55f67fa1828a046c70e46f01b1606e6118fa1802b6df535ca06be83cc5a5e834022be95c7b714f0a268b5f20af984465a71e28f1473 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.19.0, @babel/traverse@npm:^7.19.1, @babel/traverse@npm:^7.19.6": - version: 7.19.6 - resolution: "@babel/traverse@npm:7.19.6" - dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.19.6 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.19.6 - "@babel/types": ^7.19.4 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: 3fafa244f7d0b696a9d38f5da016a8f8db4b08ac60a067b299a8f54d91fb7c70c3edf06f921221d333137e65ffb64392526e68fdcf596ec91e95720037789d66 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.20.1": - version: 7.20.1 - resolution: "@babel/traverse@npm:7.20.1" - dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.20.1 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.20.1 - "@babel/types": ^7.20.0 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: 6696176d574b7ff93466848010bc7e94b250169379ec2a84f1b10da46a7cc2018ea5e3a520c3078487db51e3a4afab9ecff48f25d1dbad8c1319362f4148fb4b - languageName: node - linkType: hard - -"@babel/types@npm:^7.18.10, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.19.4, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.19.4 - resolution: "@babel/types@npm:7.19.4" - dependencies: - "@babel/helper-string-parser": ^7.19.4 - "@babel/helper-validator-identifier": ^7.19.1 - to-fast-properties: ^2.0.0 - checksum: 4032f6407093f80dd4f4764be676f7527d2a5c0381586967cd79683cf8af01cdc16745a381b9cef045f702f0c9b0dffd880d84ee55dad59ba01bd23d5d52a8e0 - languageName: node - linkType: hard - -"@babel/types@npm:^7.20.0": - version: 7.20.0 - resolution: "@babel/types@npm:7.20.0" - dependencies: - "@babel/helper-string-parser": ^7.19.4 - "@babel/helper-validator-identifier": ^7.19.1 - to-fast-properties: ^2.0.0 - checksum: 8729b1114c707a03625cd79e3ae3a28d69b36ddcf804cb0a4599af226e5e9fad71665bdc0e56c43527ecfcabc545d9c797231f5ce718ae1ab52d31a57b6c2024 - languageName: node - linkType: hard - -"@cspotcode/source-map-support@npm:^0.8.0": - version: 0.8.1 - resolution: "@cspotcode/source-map-support@npm:0.8.1" - dependencies: - "@jridgewell/trace-mapping": 0.3.9 - checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa - languageName: node - linkType: hard - -"@discoveryjs/json-ext@npm:^0.5.0": - version: 0.5.7 - resolution: "@discoveryjs/json-ext@npm:0.5.7" - checksum: 2176d301cc258ea5c2324402997cf8134ebb212469c0d397591636cea8d3c02f2b3cf9fd58dcb748c7a0dade77ebdc1b10284fa63e608c033a1db52fddc69918 - languageName: node - linkType: hard - -"@grafana/perf-tests@workspace:.": - version: 0.0.0-use.local - resolution: "@grafana/perf-tests@workspace:." - dependencies: - "@babel/core": 7.19.6 - "@babel/plugin-proposal-class-properties": 7.18.6 - "@babel/plugin-proposal-object-rest-spread": 7.19.4 - "@babel/preset-env": 7.19.4 - "@babel/preset-typescript": 7.18.6 - "@types/k6": 0.41.0 - "@types/shortid": 0.0.29 - "@types/webpack": 5.28.0 - babel-loader: 9.1.0 - shortid: 2.2.16 - ts-node: 10.9.1 - typescript: 4.8.4 - webpack: 5.74.0 - webpack-cli: 4.10.0 - webpack-glob-entries: 1.0.1 - languageName: unknown - linkType: soft - -"@jridgewell/gen-mapping@npm:^0.1.0": - version: 0.1.1 - resolution: "@jridgewell/gen-mapping@npm:0.1.1" - dependencies: - "@jridgewell/set-array": ^1.0.0 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: 3bcc21fe786de6ffbf35c399a174faab05eb23ce6a03e8769569de28abbf4facc2db36a9ddb0150545ae23a8d35a7cf7237b2aa9e9356a7c626fb4698287d5cc - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": - version: 0.3.2 - resolution: "@jridgewell/gen-mapping@npm:0.3.2" - dependencies: - "@jridgewell/set-array": ^1.0.1 - "@jridgewell/sourcemap-codec": ^1.4.10 - "@jridgewell/trace-mapping": ^0.3.9 - checksum: 1832707a1c476afebe4d0fbbd4b9434fdb51a4c3e009ab1e9938648e21b7a97049fa6009393bdf05cab7504108413441df26d8a3c12193996e65493a4efb6882 - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:3.1.0, @jridgewell/resolve-uri@npm:^3.0.3": - version: 3.1.0 - resolution: "@jridgewell/resolve-uri@npm:3.1.0" - checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 - languageName: node - linkType: hard - -"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": - version: 1.1.2 - resolution: "@jridgewell/set-array@npm:1.1.2" - checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e - languageName: node - linkType: hard - -"@jridgewell/source-map@npm:^0.3.2": - version: 0.3.2 - resolution: "@jridgewell/source-map@npm:0.3.2" - dependencies: - "@jridgewell/gen-mapping": ^0.3.0 - "@jridgewell/trace-mapping": ^0.3.9 - checksum: 1b83f0eb944e77b70559a394d5d3b3f98a81fcc186946aceb3ef42d036762b52ef71493c6c0a3b7c1d2f08785f53ba2df1277fe629a06e6109588ff4cdcf7482 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10": - version: 1.4.14 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" - checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:0.3.9": - version: 0.3.9 - resolution: "@jridgewell/trace-mapping@npm:0.3.9" - dependencies: - "@jridgewell/resolve-uri": ^3.0.3 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.14, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.17 - resolution: "@jridgewell/trace-mapping@npm:0.3.17" - dependencies: - "@jridgewell/resolve-uri": 3.1.0 - "@jridgewell/sourcemap-codec": 1.4.14 - checksum: 9d703b859cff5cd83b7308fd457a431387db5db96bd781a63bf48e183418dd9d3d44e76b9e4ae13237f6abeeb25d739ec9215c1d5bfdd08f66f750a50074a339 - languageName: node - linkType: hard - -"@tsconfig/node10@npm:^1.0.7": - version: 1.0.9 - resolution: "@tsconfig/node10@npm:1.0.9" - checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df - languageName: node - linkType: hard - -"@tsconfig/node12@npm:^1.0.7": - version: 1.0.11 - resolution: "@tsconfig/node12@npm:1.0.11" - checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a - languageName: node - linkType: hard - -"@tsconfig/node14@npm:^1.0.0": - version: 1.0.3 - resolution: "@tsconfig/node14@npm:1.0.3" - checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d - languageName: node - linkType: hard - -"@tsconfig/node16@npm:^1.0.2": - version: 1.0.3 - resolution: "@tsconfig/node16@npm:1.0.3" - checksum: 3a8b657dd047495b7ad23437d6afd20297ce90380ff0bdee93fc7d39a900dbd8d9e26e53ff6b465e7967ce2adf0b218782590ce9013285121e6a5928fbd6819f - languageName: node - linkType: hard - -"@types/eslint-scope@npm:^3.7.3": - version: 3.7.4 - resolution: "@types/eslint-scope@npm:3.7.4" - dependencies: - "@types/eslint": "*" - "@types/estree": "*" - checksum: ea6a9363e92f301cd3888194469f9ec9d0021fe0a397a97a6dd689e7545c75de0bd2153dfb13d3ab532853a278b6572c6f678ce846980669e41029d205653460 - languageName: node - linkType: hard - -"@types/eslint@npm:*": - version: 8.4.8 - resolution: "@types/eslint@npm:8.4.8" - dependencies: - "@types/estree": "*" - "@types/json-schema": "*" - checksum: 5b4708a56adeb5c209bc5d33590499be01286a90d3c324e2aabb1812d405a622ea9dd65eb8a095b2b9eb902bc8a25afddb9832f1f634457f973c07eade86aa5e - languageName: node - linkType: hard - -"@types/estree@npm:*": - version: 1.0.0 - resolution: "@types/estree@npm:1.0.0" - checksum: 910d97fb7092c6738d30a7430ae4786a38542023c6302b95d46f49420b797f21619cdde11fa92b338366268795884111c2eb10356e4bd2c8ad5b92941e9e6443 - languageName: node - linkType: hard - -"@types/estree@npm:^0.0.51": - version: 0.0.51 - resolution: "@types/estree@npm:0.0.51" - checksum: e56a3bcf759fd9185e992e7fdb3c6a5f81e8ff120e871641607581fb3728d16c811702a7d40fa5f869b7f7b4437ab6a87eb8d98ffafeee51e85bbe955932a189 - languageName: node - linkType: hard - -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": - version: 7.0.11 - resolution: "@types/json-schema@npm:7.0.11" - checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d - languageName: node - linkType: hard - -"@types/k6@npm:0.41.0": - version: 0.41.0 - resolution: "@types/k6@npm:0.41.0" - checksum: efc027b5967f8fa1102eb7d0e4867d90bdbdec32153507da510827ccdc5a7a7fefac30703cfd31a8ad5550313a63a5948a369f7503490e9851f19c347bd531b5 - languageName: node - linkType: hard - -"@types/node@npm:*": - version: 18.11.5 - resolution: "@types/node@npm:18.11.5" - checksum: ac54e9287dd4549ea3dc8aabc0cf7bfa04c52f02925d7fd68414789617ec770f034c8ae2e111e8bd00d446a46fcac42587b5a316a1303e2f6ea094854248c9ff - languageName: node - linkType: hard - -"@types/shortid@npm:0.0.29": - version: 0.0.29 - resolution: "@types/shortid@npm:0.0.29" - checksum: 06d940fabc5774ff2221da6ba3496cef97ae7c2f7f0fee4740144a68cf2b630b109db2f934133096daa58045e4e7aaffba687934166bb0b2b0d5c52679b10d08 - languageName: node - linkType: hard - -"@types/webpack@npm:5.28.0": - version: 5.28.0 - resolution: "@types/webpack@npm:5.28.0" - dependencies: - "@types/node": "*" - tapable: ^2.2.0 - webpack: ^5 - checksum: a038d7e12dd109c6a8d2eb744fd32070ef94f1655e730fb1443b370db98864c3a0e408638b02d12ba08269b9c012b3be8b801117ced2d1102e7676203fd663ed - languageName: node - linkType: hard - -"@webassemblyjs/ast@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/ast@npm:1.11.1" - dependencies: - "@webassemblyjs/helper-numbers": 1.11.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.1 - checksum: 1eee1534adebeece635362f8e834ae03e389281972611408d64be7895fc49f48f98fddbbb5339bf8a72cb101bcb066e8bca3ca1bf1ef47dadf89def0395a8d87 - languageName: node - linkType: hard - -"@webassemblyjs/floating-point-hex-parser@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.1" - checksum: b8efc6fa08e4787b7f8e682182d84dfdf8da9d9c77cae5d293818bc4a55c1f419a87fa265ab85252b3e6c1fd323d799efea68d825d341a7c365c64bc14750e97 - languageName: node - linkType: hard - -"@webassemblyjs/helper-api-error@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/helper-api-error@npm:1.11.1" - checksum: 0792813f0ed4a0e5ee0750e8b5d0c631f08e927f4bdfdd9fe9105dc410c786850b8c61bff7f9f515fdfb149903bec3c976a1310573a4c6866a94d49bc7271959 - languageName: node - linkType: hard - -"@webassemblyjs/helper-buffer@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/helper-buffer@npm:1.11.1" - checksum: a337ee44b45590c3a30db5a8b7b68a717526cf967ada9f10253995294dbd70a58b2da2165222e0b9830cd4fc6e4c833bf441a721128d1fe2e9a7ab26b36003ce - languageName: node - linkType: hard - -"@webassemblyjs/helper-numbers@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/helper-numbers@npm:1.11.1" - dependencies: - "@webassemblyjs/floating-point-hex-parser": 1.11.1 - "@webassemblyjs/helper-api-error": 1.11.1 - "@xtuc/long": 4.2.2 - checksum: 44d2905dac2f14d1e9b5765cf1063a0fa3d57295c6d8930f6c59a36462afecc6e763e8a110b97b342a0f13376166c5d41aa928e6ced92e2f06b071fd0db59d3a - languageName: node - linkType: hard - -"@webassemblyjs/helper-wasm-bytecode@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.1" - checksum: eac400113127832c88f5826bcc3ad1c0db9b3dbd4c51a723cfdb16af6bfcbceb608170fdaac0ab7731a7e18b291be7af68a47fcdb41cfe0260c10857e7413d97 - languageName: node - linkType: hard - -"@webassemblyjs/helper-wasm-section@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.1" - dependencies: - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/helper-buffer": 1.11.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.1 - "@webassemblyjs/wasm-gen": 1.11.1 - checksum: 617696cfe8ecaf0532763162aaf748eb69096fb27950219bb87686c6b2e66e11cd0614d95d319d0ab1904bc14ebe4e29068b12c3e7c5e020281379741fe4bedf - languageName: node - linkType: hard - -"@webassemblyjs/ieee754@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/ieee754@npm:1.11.1" - dependencies: - "@xtuc/ieee754": ^1.2.0 - checksum: 23a0ac02a50f244471631802798a816524df17e56b1ef929f0c73e3cde70eaf105a24130105c60aff9d64a24ce3b640dad443d6f86e5967f922943a7115022ec - languageName: node - linkType: hard - -"@webassemblyjs/leb128@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/leb128@npm:1.11.1" - dependencies: - "@xtuc/long": 4.2.2 - checksum: 33ccc4ade2f24de07bf31690844d0b1ad224304ee2062b0e464a610b0209c79e0b3009ac190efe0e6bd568b0d1578d7c3047fc1f9d0197c92fc061f56224ff4a - languageName: node - linkType: hard - -"@webassemblyjs/utf8@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/utf8@npm:1.11.1" - checksum: 972c5cfc769d7af79313a6bfb96517253a270a4bf0c33ba486aa43cac43917184fb35e51dfc9e6b5601548cd5931479a42e42c89a13bb591ffabebf30c8a6a0b - languageName: node - linkType: hard - -"@webassemblyjs/wasm-edit@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/wasm-edit@npm:1.11.1" - dependencies: - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/helper-buffer": 1.11.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.1 - "@webassemblyjs/helper-wasm-section": 1.11.1 - "@webassemblyjs/wasm-gen": 1.11.1 - "@webassemblyjs/wasm-opt": 1.11.1 - "@webassemblyjs/wasm-parser": 1.11.1 - "@webassemblyjs/wast-printer": 1.11.1 - checksum: 6d7d9efaec1227e7ef7585a5d7ff0be5f329f7c1c6b6c0e906b18ed2e9a28792a5635e450aca2d136770d0207225f204eff70a4b8fd879d3ac79e1dcc26dbeb9 - languageName: node - linkType: hard - -"@webassemblyjs/wasm-gen@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/wasm-gen@npm:1.11.1" - dependencies: - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.1 - "@webassemblyjs/ieee754": 1.11.1 - "@webassemblyjs/leb128": 1.11.1 - "@webassemblyjs/utf8": 1.11.1 - checksum: 1f6921e640293bf99fb16b21e09acb59b340a79f986c8f979853a0ae9f0b58557534b81e02ea2b4ef11e929d946708533fd0693c7f3712924128fdafd6465f5b - languageName: node - linkType: hard - -"@webassemblyjs/wasm-opt@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/wasm-opt@npm:1.11.1" - dependencies: - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/helper-buffer": 1.11.1 - "@webassemblyjs/wasm-gen": 1.11.1 - "@webassemblyjs/wasm-parser": 1.11.1 - checksum: 21586883a20009e2b20feb67bdc451bbc6942252e038aae4c3a08e6f67b6bae0f5f88f20bfc7bd0452db5000bacaf5ab42b98cf9aa034a6c70e9fc616142e1db - languageName: node - linkType: hard - -"@webassemblyjs/wasm-parser@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/wasm-parser@npm:1.11.1" - dependencies: - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/helper-api-error": 1.11.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.1 - "@webassemblyjs/ieee754": 1.11.1 - "@webassemblyjs/leb128": 1.11.1 - "@webassemblyjs/utf8": 1.11.1 - checksum: 1521644065c360e7b27fad9f4bb2df1802d134dd62937fa1f601a1975cde56bc31a57b6e26408b9ee0228626ff3ba1131ae6f74ffb7d718415b6528c5a6dbfc2 - languageName: node - linkType: hard - -"@webassemblyjs/wast-printer@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/wast-printer@npm:1.11.1" - dependencies: - "@webassemblyjs/ast": 1.11.1 - "@xtuc/long": 4.2.2 - checksum: f15ae4c2441b979a3b4fce78f3d83472fb22350c6dc3fd34bfe7c3da108e0b2360718734d961bba20e7716cb8578e964b870da55b035e209e50ec9db0378a3f7 - languageName: node - linkType: hard - -"@webpack-cli/configtest@npm:^1.2.0": - version: 1.2.0 - resolution: "@webpack-cli/configtest@npm:1.2.0" - peerDependencies: - webpack: 4.x.x || 5.x.x - webpack-cli: 4.x.x - checksum: a2726cd9ec601d2b57e5fc15e0ebf5200a8892065e735911269ac2038e62be4bfc176ea1f88c2c46ff09b4d05d4c10ae045e87b3679372483d47da625a327e28 - languageName: node - linkType: hard - -"@webpack-cli/info@npm:^1.5.0": - version: 1.5.0 - resolution: "@webpack-cli/info@npm:1.5.0" - dependencies: - envinfo: ^7.7.3 - peerDependencies: - webpack-cli: 4.x.x - checksum: 7f56fe037cd7d1fd5c7428588519fbf04a0cad33925ee4202ffbafd00f8ec1f2f67d991245e687d50e0f3e23f7b7814273d56cb9f7da4b05eed47c8d815c6296 - languageName: node - linkType: hard - -"@webpack-cli/serve@npm:^1.7.0": - version: 1.7.0 - resolution: "@webpack-cli/serve@npm:1.7.0" - peerDependencies: - webpack-cli: 4.x.x - peerDependenciesMeta: - webpack-dev-server: - optional: true - checksum: d475e8effa23eb7ff9a48b14d4de425989fd82f906ce71c210921cc3852327c22873be00c35e181a25a6bd03d424ae2b83e7f3b3f410ac7ee31b128ab4ac7713 - languageName: node - linkType: hard - -"@xtuc/ieee754@npm:^1.2.0": - version: 1.2.0 - resolution: "@xtuc/ieee754@npm:1.2.0" - checksum: ac56d4ca6e17790f1b1677f978c0c6808b1900a5b138885d3da21732f62e30e8f0d9120fcf8f6edfff5100ca902b46f8dd7c1e3f903728634523981e80e2885a - languageName: node - linkType: hard - -"@xtuc/long@npm:4.2.2": - version: 4.2.2 - resolution: "@xtuc/long@npm:4.2.2" - checksum: 8ed0d477ce3bc9c6fe2bf6a6a2cc316bb9c4127c5a7827bae947fa8ec34c7092395c5a283cc300c05b5fa01cbbfa1f938f410a7bf75db7c7846fea41949989ec - languageName: node - linkType: hard - -"acorn-import-assertions@npm:^1.7.6": - version: 1.8.0 - resolution: "acorn-import-assertions@npm:1.8.0" - peerDependencies: - acorn: ^8 - checksum: 5c4cf7c850102ba7ae0eeae0deb40fb3158c8ca5ff15c0bca43b5c47e307a1de3d8ef761788f881343680ea374631ae9e9615ba8876fee5268dbe068c98bcba6 - languageName: node - linkType: hard - -"acorn-walk@npm:^8.1.1": - version: 8.2.0 - resolution: "acorn-walk@npm:8.2.0" - checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 - languageName: node - linkType: hard - -"acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.1": - version: 8.8.1 - resolution: "acorn@npm:8.8.1" - bin: - acorn: bin/acorn - checksum: 4079b67283b94935157698831967642f24a075c52ce3feaaaafe095776dfbe15d86a1b33b1e53860fc0d062ed6c83f4284a5c87c85b9ad51853a01173da6097f - languageName: node - linkType: hard - -"ajv-formats@npm:^2.1.1": - version: 2.1.1 - resolution: "ajv-formats@npm:2.1.1" - dependencies: - ajv: ^8.0.0 - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - checksum: 4a287d937f1ebaad4683249a4c40c0fa3beed30d9ddc0adba04859026a622da0d317851316ea64b3680dc60f5c3c708105ddd5d5db8fe595d9d0207fd19f90b7 - languageName: node - linkType: hard - -"ajv-keywords@npm:^3.5.2": - version: 3.5.2 - resolution: "ajv-keywords@npm:3.5.2" - peerDependencies: - ajv: ^6.9.1 - checksum: 7dc5e5931677a680589050f79dcbe1fefbb8fea38a955af03724229139175b433c63c68f7ae5f86cf8f65d55eb7c25f75a046723e2e58296707617ca690feae9 - languageName: node - linkType: hard - -"ajv-keywords@npm:^5.0.0": - version: 5.1.0 - resolution: "ajv-keywords@npm:5.1.0" - dependencies: - fast-deep-equal: ^3.1.3 - peerDependencies: - ajv: ^8.8.2 - checksum: c35193940b853119242c6757787f09ecf89a2c19bcd36d03ed1a615e710d19d450cb448bfda407b939aba54b002368c8bff30529cc50a0536a8e10bcce300421 - languageName: node - linkType: hard - -"ajv@npm:^6.12.5": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: ^3.1.1 - fast-json-stable-stringify: ^2.0.0 - json-schema-traverse: ^0.4.1 - uri-js: ^4.2.2 - checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 - languageName: node - linkType: hard - -"ajv@npm:^8.0.0, ajv@npm:^8.8.0": - version: 8.11.0 - resolution: "ajv@npm:8.11.0" - dependencies: - fast-deep-equal: ^3.1.1 - json-schema-traverse: ^1.0.0 - require-from-string: ^2.0.2 - uri-js: ^4.2.2 - checksum: 5e0ff226806763be73e93dd7805b634f6f5921e3e90ca04acdf8db81eed9d8d3f0d4c5f1213047f45ebbf8047ffe0c840fa1ef2ec42c3a644899f69aa72b5bef - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: ^1.9.0 - checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 - languageName: node - linkType: hard - -"arg@npm:^4.1.0": - version: 4.1.3 - resolution: "arg@npm:4.1.3" - checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 - languageName: node - linkType: hard - -"babel-loader@npm:9.1.0": - version: 9.1.0 - resolution: "babel-loader@npm:9.1.0" - dependencies: - find-cache-dir: ^3.3.2 - schema-utils: ^4.0.0 - peerDependencies: - "@babel/core": ^7.12.0 - webpack: ">=5" - checksum: 774758febd1e8ca804abcae3b8f65634330dc688837424d0946f06d1386914de43435cce691710fa144eccdf1292cf883439ac3598ce7320916acfaaa2372641 - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs2@npm:^0.3.3": - version: 0.3.3 - resolution: "babel-plugin-polyfill-corejs2@npm:0.3.3" - dependencies: - "@babel/compat-data": ^7.17.7 - "@babel/helper-define-polyfill-provider": ^0.3.3 - semver: ^6.1.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7db3044993f3dddb3cc3d407bc82e640964a3bfe22de05d90e1f8f7a5cb71460011ab136d3c03c6c1ba428359ebf635688cd6205e28d0469bba221985f5c6179 - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs3@npm:^0.6.0": - version: 0.6.0 - resolution: "babel-plugin-polyfill-corejs3@npm:0.6.0" - dependencies: - "@babel/helper-define-polyfill-provider": ^0.3.3 - core-js-compat: ^3.25.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 470bb8c59f7c0912bd77fe1b5a2e72f349b3f65bbdee1d60d6eb7e1f4a085c6f24b2dd5ab4ac6c2df6444a96b070ef6790eccc9edb6a2668c60d33133bfb62c6 - languageName: node - linkType: hard - -"babel-plugin-polyfill-regenerator@npm:^0.4.1": - version: 0.4.1 - resolution: "babel-plugin-polyfill-regenerator@npm:0.4.1" - dependencies: - "@babel/helper-define-polyfill-provider": ^0.3.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ab0355efbad17d29492503230387679dfb780b63b25408990d2e4cf421012dae61d6199ddc309f4d2409ce4e9d3002d187702700dd8f4f8770ebbba651ed066c - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: ^1.0.0 - concat-map: 0.0.1 - checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 - languageName: node - linkType: hard - -"browserslist@npm:^4.14.5, browserslist@npm:^4.21.3, browserslist@npm:^4.21.4": - version: 4.21.4 - resolution: "browserslist@npm:4.21.4" - dependencies: - caniuse-lite: ^1.0.30001400 - electron-to-chromium: ^1.4.251 - node-releases: ^2.0.6 - update-browserslist-db: ^1.0.9 - bin: - browserslist: cli.js - checksum: 4af3793704dbb4615bcd29059ab472344dc7961c8680aa6c4bb84f05340e14038d06a5aead58724eae69455b8fade8b8c69f1638016e87e5578969d74c078b79 - languageName: node - linkType: hard - -"buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001400": - version: 1.0.30001425 - resolution: "caniuse-lite@npm:1.0.30001425" - checksum: 4fbf9f5b125b15a3eeaf7b75ca611f417ab9ce1a9fc07ee1023b2a7c0cc9844ad61ff089e814e4af6f747b9b532b6b50e7cb7844e6c29900f68ac9d171193ece - languageName: node - linkType: hard - -"chalk@npm:^2.0.0": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: ^3.2.1 - escape-string-regexp: ^1.0.5 - supports-color: ^5.3.0 - checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 - languageName: node - linkType: hard - -"chrome-trace-event@npm:^1.0.2": - version: 1.0.3 - resolution: "chrome-trace-event@npm:1.0.3" - checksum: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 - languageName: node - linkType: hard - -"clone-deep@npm:^4.0.1": - version: 4.0.1 - resolution: "clone-deep@npm:4.0.1" - dependencies: - is-plain-object: ^2.0.4 - kind-of: ^6.0.2 - shallow-clone: ^3.0.0 - checksum: 770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: 1.1.3 - checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d - languageName: node - linkType: hard - -"colorette@npm:^2.0.14": - version: 2.0.19 - resolution: "colorette@npm:2.0.19" - checksum: 888cf5493f781e5fcf54ce4d49e9d7d698f96ea2b2ef67906834bb319a392c667f9ec69f4a10e268d2946d13a9503d2d19b3abaaaf174e3451bfe91fb9d82427 - languageName: node - linkType: hard - -"commander@npm:^2.20.0": - version: 2.20.3 - resolution: "commander@npm:2.20.3" - checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e - languageName: node - linkType: hard - -"commander@npm:^7.0.0": - version: 7.2.0 - resolution: "commander@npm:7.2.0" - checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc - languageName: node - linkType: hard - -"commondir@npm:^1.0.1": - version: 1.0.1 - resolution: "commondir@npm:1.0.1" - checksum: 59715f2fc456a73f68826285718503340b9f0dd89bfffc42749906c5cf3d4277ef11ef1cca0350d0e79204f00f1f6d83851ececc9095dc88512a697ac0b9bdcb - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af - languageName: node - linkType: hard - -"convert-source-map@npm:^1.7.0": - version: 1.9.0 - resolution: "convert-source-map@npm:1.9.0" - checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 - languageName: node - linkType: hard - -"core-js-compat@npm:^3.25.1": - version: 3.26.0 - resolution: "core-js-compat@npm:3.26.0" - dependencies: - browserslist: ^4.21.4 - checksum: 120780ec33d441e476810abac9bf57199c2083006b179dc23d0ab0cfea096eff2a2fc3e9cb315d245735df661cfa4b76a8b8c37f5056fd02428a3cd2ea1d9f36 - languageName: node - linkType: hard - -"create-require@npm:^1.1.0": - version: 1.1.1 - resolution: "create-require@npm:1.1.1" - checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.3": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" - dependencies: - path-key: ^3.1.0 - shebang-command: ^2.0.0 - which: ^2.0.1 - checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 - languageName: node - linkType: hard - -"debug@npm:^4.1.0, debug@npm:^4.1.1": - version: 4.3.4 - resolution: "debug@npm:4.3.4" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 - languageName: node - linkType: hard - -"diff@npm:^4.0.1": - version: 4.0.2 - resolution: "diff@npm:4.0.2" - checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.4.251": - version: 1.4.284 - resolution: "electron-to-chromium@npm:1.4.284" - checksum: be496e9dca6509dbdbb54dc32146fc99f8eb716d28a7ee8ccd3eba0066561df36fc51418d8bd7cf5a5891810bf56c0def3418e74248f51ea4a843d423603d10a - languageName: node - linkType: hard - -"enhanced-resolve@npm:^5.10.0": - version: 5.10.0 - resolution: "enhanced-resolve@npm:5.10.0" - dependencies: - graceful-fs: ^4.2.4 - tapable: ^2.2.0 - checksum: 0bb9830704db271610f900e8d79d70a740ea16f251263362b0c91af545576d09fe50103496606c1300a05e588372d6f9780a9bc2e30ce8ef9b827ec8f44687ff - languageName: node - linkType: hard - -"envinfo@npm:^7.7.3": - version: 7.8.1 - resolution: "envinfo@npm:7.8.1" - bin: - envinfo: dist/cli.js - checksum: de736c98d6311c78523628ff127af138451b162e57af5293c1b984ca821d0aeb9c849537d2fde0434011bed33f6bca5310ca2aab8a51a3f28fc719e89045d648 - languageName: node - linkType: hard - -"es-module-lexer@npm:^0.9.0": - version: 0.9.3 - resolution: "es-module-lexer@npm:0.9.3" - checksum: 84bbab23c396281db2c906c766af58b1ae2a1a2599844a504df10b9e8dc77ec800b3211fdaa133ff700f5703d791198807bba25d9667392d27a5e9feda344da8 - languageName: node - linkType: hard - -"escalade@npm:^3.1.1": - version: 3.1.1 - resolution: "escalade@npm:3.1.1" - checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 - languageName: node - linkType: hard - -"eslint-scope@npm:5.1.1": - version: 5.1.1 - resolution: "eslint-scope@npm:5.1.1" - dependencies: - esrecurse: ^4.3.0 - estraverse: ^4.1.1 - checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb - languageName: node - linkType: hard - -"esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: ^5.2.0 - checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 - languageName: node - linkType: hard - -"estraverse@npm:^4.1.1": - version: 4.3.0 - resolution: "estraverse@npm:4.3.0" - checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 - languageName: node - linkType: hard - -"estraverse@npm:^5.2.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 - languageName: node - linkType: hard - -"events@npm:^3.2.0": - version: 3.3.0 - resolution: "events@npm:3.3.0" - checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 - languageName: node - linkType: hard - -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:^2.0.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb - languageName: node - linkType: hard - -"fastest-levenshtein@npm:^1.0.12": - version: 1.0.16 - resolution: "fastest-levenshtein@npm:1.0.16" - checksum: a78d44285c9e2ae2c25f3ef0f8a73f332c1247b7ea7fb4a191e6bb51aa6ee1ef0dfb3ed113616dcdc7023e18e35a8db41f61c8d88988e877cf510df8edafbc71 - languageName: node - linkType: hard - -"find-cache-dir@npm:^3.3.2": - version: 3.3.2 - resolution: "find-cache-dir@npm:3.3.2" - dependencies: - commondir: ^1.0.1 - make-dir: ^3.0.2 - pkg-dir: ^4.1.0 - checksum: 1e61c2e64f5c0b1c535bd85939ae73b0e5773142713273818cc0b393ee3555fb0fd44e1a5b161b8b6c3e03e98c2fcc9c227d784850a13a90a8ab576869576817 - languageName: node - linkType: hard - -"find-up@npm:^4.0.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: ^5.0.0 - path-exists: ^4.0.0 - checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 - languageName: node - linkType: hard - -"function-bind@npm:^1.1.1": - version: 1.1.1 - resolution: "function-bind@npm:1.1.1" - checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a - languageName: node - linkType: hard - -"gensync@npm:^1.0.0-beta.2": - version: 1.0.0-beta.2 - resolution: "gensync@npm:1.0.0-beta.2" - checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec - languageName: node - linkType: hard - -"glob-to-regexp@npm:^0.4.1": - version: 0.4.1 - resolution: "glob-to-regexp@npm:0.4.1" - checksum: e795f4e8f06d2a15e86f76e4d92751cf8bbfcf0157cea5c2f0f35678a8195a750b34096b1256e436f0cebc1883b5ff0888c47348443e69546a5a87f9e1eb1167 - languageName: node - linkType: hard - -"glob@npm:^5.0.15": - version: 5.0.15 - resolution: "glob@npm:5.0.15" - dependencies: - inflight: ^1.0.4 - inherits: 2 - minimatch: 2 || 3 - once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: f9742448303460672607e569457f1b57e486a79a985e269b69465834d2075b243378225f65dc54c09fcd4b75e4fb34442aec88f33f8c65fa4abccc8ee2dc2f5d - languageName: node - linkType: hard - -"globals@npm:^11.1.0": - version: 11.12.0 - resolution: "globals@npm:11.12.0" - checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.9": - version: 4.2.10 - resolution: "graceful-fs@npm:4.2.10" - checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b - languageName: node - linkType: hard - -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad - languageName: node - linkType: hard - -"has@npm:^1.0.3": - version: 1.0.3 - resolution: "has@npm:1.0.3" - dependencies: - function-bind: ^1.1.1 - checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 - languageName: node - linkType: hard - -"import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" - dependencies: - pkg-dir: ^4.2.0 - resolve-cwd: ^3.0.0 - bin: - import-local-fixture: fixtures/cli.js - checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: ^1.3.0 - wrappy: 1 - checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd - languageName: node - linkType: hard - -"inherits@npm:2": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 - languageName: node - linkType: hard - -"interpret@npm:^2.2.0": - version: 2.2.0 - resolution: "interpret@npm:2.2.0" - checksum: f51efef7cb8d02da16408ffa3504cd6053014c5aeb7bb8c223727e053e4235bf565e45d67028b0c8740d917c603807aa3c27d7bd2f21bf20b6417e2bb3e5fd6e - languageName: node - linkType: hard - -"is-core-module@npm:^2.9.0": - version: 2.11.0 - resolution: "is-core-module@npm:2.11.0" - dependencies: - has: ^1.0.3 - checksum: f96fd490c6b48eb4f6d10ba815c6ef13f410b0ba6f7eb8577af51697de523e5f2cd9de1c441b51d27251bf0e4aebc936545e33a5d26d5d51f28d25698d4a8bab - languageName: node - linkType: hard - -"is-plain-object@npm:^2.0.4": - version: 2.0.4 - resolution: "is-plain-object@npm:2.0.4" - dependencies: - isobject: ^3.0.1 - checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 - languageName: node - linkType: hard - -"isobject@npm:^3.0.1": - version: 3.0.1 - resolution: "isobject@npm:3.0.1" - checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 - languageName: node - linkType: hard - -"jest-worker@npm:^27.4.5": - version: 27.5.1 - resolution: "jest-worker@npm:27.5.1" - dependencies: - "@types/node": "*" - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980 - languageName: node - linkType: hard - -"js-tokens@npm:^4.0.0": - version: 4.0.0 - resolution: "js-tokens@npm:4.0.0" - checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 - languageName: node - linkType: hard - -"jsesc@npm:^2.5.1": - version: 2.5.2 - resolution: "jsesc@npm:2.5.2" - bin: - jsesc: bin/jsesc - checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d - languageName: node - linkType: hard - -"jsesc@npm:~0.5.0": - version: 0.5.0 - resolution: "jsesc@npm:0.5.0" - bin: - jsesc: bin/jsesc - checksum: b8b44cbfc92f198ad972fba706ee6a1dfa7485321ee8c0b25f5cedd538dcb20cde3197de16a7265430fce8277a12db066219369e3d51055038946039f6e20e17 - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^2.3.1": - version: 2.3.1 - resolution: "json-parse-even-better-errors@npm:2.3.1" - checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f - languageName: node - linkType: hard - -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b - languageName: node - linkType: hard - -"json-schema-traverse@npm:^1.0.0": - version: 1.0.0 - resolution: "json-schema-traverse@npm:1.0.0" - checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad - languageName: node - linkType: hard - -"json5@npm:^2.2.1": - version: 2.2.1 - resolution: "json5@npm:2.2.1" - bin: - json5: lib/cli.js - checksum: 74b8a23b102a6f2bf2d224797ae553a75488b5adbaee9c9b6e5ab8b510a2fc6e38f876d4c77dea672d4014a44b2399e15f2051ac2b37b87f74c0c7602003543b - languageName: node - linkType: hard - -"kind-of@npm:^6.0.2": - version: 6.0.3 - resolution: "kind-of@npm:6.0.3" - checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b - languageName: node - linkType: hard - -"loader-runner@npm:^4.2.0": - version: 4.3.0 - resolution: "loader-runner@npm:4.3.0" - checksum: a90e00dee9a16be118ea43fec3192d0b491fe03a32ed48a4132eb61d498f5536a03a1315531c19d284392a8726a4ecad71d82044c28d7f22ef62e029bf761569 - languageName: node - linkType: hard - -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: ^4.1.0 - checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 - languageName: node - linkType: hard - -"lodash.debounce@npm:^4.0.8": - version: 4.0.8 - resolution: "lodash.debounce@npm:4.0.8" - checksum: a3f527d22c548f43ae31c861ada88b2637eb48ac6aa3eb56e82d44917971b8aa96fbb37aa60efea674dc4ee8c42074f90f7b1f772e9db375435f6c83a19b3bc6 - languageName: node - linkType: hard - -"make-dir@npm:^3.0.2": - version: 3.1.0 - resolution: "make-dir@npm:3.1.0" - dependencies: - semver: ^6.0.0 - checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 - languageName: node - linkType: hard - -"make-error@npm:^1.1.1": - version: 1.3.6 - resolution: "make-error@npm:1.3.6" - checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 - languageName: node - linkType: hard - -"merge-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "merge-stream@npm:2.0.0" - checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f - languageName: node - linkType: hard - -"mime-types@npm:^2.1.27": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: 1.52.0 - checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 - languageName: node - linkType: hard - -"minimatch@npm:2 || 3": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: ^1.1.7 - checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a - languageName: node - linkType: hard - -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f - languageName: node - linkType: hard - -"nanoid@npm:^2.1.0": - version: 2.1.11 - resolution: "nanoid@npm:2.1.11" - checksum: 18cd14386816873849787eb4e65667021bfdeb019a8f14c74287c23594c67b7c0e8f42c7d69f6aedf05cd3d100f1ddc41184f9f9b6b17fbaea1c3ee3f0704eec - languageName: node - linkType: hard - -"neo-async@npm:^2.6.2": - version: 2.6.2 - resolution: "neo-async@npm:2.6.2" - checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 - languageName: node - linkType: hard - -"node-releases@npm:^2.0.6": - version: 2.0.6 - resolution: "node-releases@npm:2.0.6" - checksum: e86a926dc9fbb3b41b4c4a89d998afdf140e20a4e8dbe6c0a807f7b2948b42ea97d7fd3ad4868041487b6e9ee98409829c6e4d84a734a4215dff060a7fbeb4bf - languageName: node - linkType: hard - -"once@npm:^1.3.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: 1 - checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 - languageName: node - linkType: hard - -"p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: ^2.0.0 - checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 - languageName: node - linkType: hard - -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: ^2.2.0 - checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 - languageName: node - linkType: hard - -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 - languageName: node - linkType: hard - -"path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 - languageName: node - linkType: hard - -"path-parse@npm:^1.0.7": - version: 1.0.7 - resolution: "path-parse@npm:1.0.7" - checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a - languageName: node - linkType: hard - -"picocolors@npm:^1.0.0": - version: 1.0.0 - resolution: "picocolors@npm:1.0.0" - checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 - languageName: node - linkType: hard - -"pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0": - version: 4.2.0 - resolution: "pkg-dir@npm:4.2.0" - dependencies: - find-up: ^4.0.0 - checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 - languageName: node - linkType: hard - -"punycode@npm:^2.1.0": - version: 2.1.1 - resolution: "punycode@npm:2.1.1" - checksum: 823bf443c6dd14f669984dea25757b37993f67e8d94698996064035edd43bed8a5a17a9f12e439c2b35df1078c6bec05a6c86e336209eb1061e8025c481168e8 - languageName: node - linkType: hard - -"randombytes@npm:^2.1.0": - version: 2.1.0 - resolution: "randombytes@npm:2.1.0" - dependencies: - safe-buffer: ^5.1.0 - checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 - languageName: node - linkType: hard - -"rechoir@npm:^0.7.0": - version: 0.7.1 - resolution: "rechoir@npm:0.7.1" - dependencies: - resolve: ^1.9.0 - checksum: 2a04aab4e28c05fcd6ee6768446bc8b859d8f108e71fc7f5bcbc5ef25e53330ce2c11d10f82a24591a2df4c49c4f61feabe1fd11f844c66feedd4cd7bb61146a - languageName: node - linkType: hard - -"regenerate-unicode-properties@npm:^10.1.0": - version: 10.1.0 - resolution: "regenerate-unicode-properties@npm:10.1.0" - dependencies: - regenerate: ^1.4.2 - checksum: b1a8929588433ab8b9dc1a34cf3665b3b472f79f2af6ceae00d905fc496b332b9af09c6718fb28c730918f19a00dc1d7310adbaa9b72a2ec7ad2f435da8ace17 - languageName: node - linkType: hard - -"regenerate@npm:^1.4.2": - version: 1.4.2 - resolution: "regenerate@npm:1.4.2" - checksum: 3317a09b2f802da8db09aa276e469b57a6c0dd818347e05b8862959c6193408242f150db5de83c12c3fa99091ad95fb42a6db2c3329bfaa12a0ea4cbbeb30cb0 - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.13.4": - version: 0.13.10 - resolution: "regenerator-runtime@npm:0.13.10" - checksum: 09893f5a9e82932642d9a999716b6c626dc53ef2a01307c952ebbf8e011802360163a37c304c18a6c358548be5a72b448e37209954a18696f21e438c81cbb4b9 - languageName: node - linkType: hard - -"regenerator-transform@npm:^0.15.0": - version: 0.15.0 - resolution: "regenerator-transform@npm:0.15.0" - dependencies: - "@babel/runtime": ^7.8.4 - checksum: 86e54849ab1167618d28bb56d214c52a983daf29b0d115c976d79840511420049b6b42c9ebdf187defa8e7129bdd74b6dd266420d0d3868c9fa7f793b5d15d49 - languageName: node - linkType: hard - -"regexpu-core@npm:^5.1.0": - version: 5.2.1 - resolution: "regexpu-core@npm:5.2.1" - dependencies: - regenerate: ^1.4.2 - regenerate-unicode-properties: ^10.1.0 - regjsgen: ^0.7.1 - regjsparser: ^0.9.1 - unicode-match-property-ecmascript: ^2.0.0 - unicode-match-property-value-ecmascript: ^2.0.0 - checksum: c1244db79f7a4597414cd7fdf5171fa73905f0cbc684385c78127fc6198f9cade8fe829a1c4036c8ec57ac75b1ffb8c196451abdd2e153f26a4d8043fa10bbb3 - languageName: node - linkType: hard - -"regjsgen@npm:^0.7.1": - version: 0.7.1 - resolution: "regjsgen@npm:0.7.1" - checksum: 7cac399921c58db8e16454869283ff66871531180218064fa938ac05c11c2976792a00706c3c78bbc625e1d793ca373065ea90564e06189a751a7b4ae33acadc - languageName: node - linkType: hard - -"regjsparser@npm:^0.9.1": - version: 0.9.1 - resolution: "regjsparser@npm:0.9.1" - dependencies: - jsesc: ~0.5.0 - bin: - regjsparser: bin/parser - checksum: 5e1b76afe8f1d03c3beaf9e0d935dd467589c3625f6d65fb8ffa14f224d783a0fed4bf49c2c1b8211043ef92b6117313419edf055a098ed8342e340586741afc - languageName: node - linkType: hard - -"require-from-string@npm:^2.0.2": - version: 2.0.2 - resolution: "require-from-string@npm:2.0.2" - checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b - languageName: node - linkType: hard - -"resolve-cwd@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-cwd@npm:3.0.0" - dependencies: - resolve-from: ^5.0.0 - checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 - languageName: node - linkType: hard - -"resolve-from@npm:^5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf - languageName: node - linkType: hard - -"resolve@npm:^1.14.2, resolve@npm:^1.9.0": - version: 1.22.1 - resolution: "resolve@npm:1.22.1" - dependencies: - is-core-module: ^2.9.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: 07af5fc1e81aa1d866cbc9e9460fbb67318a10fa3c4deadc35c3ad8a898ee9a71a86a65e4755ac3195e0ea0cfbe201eb323ebe655ce90526fd61917313a34e4e - languageName: node - linkType: hard - -"resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.9.0#~builtin": - version: 1.22.1 - resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" - dependencies: - is-core-module: ^2.9.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: 5656f4d0bedcf8eb52685c1abdf8fbe73a1603bb1160a24d716e27a57f6cecbe2432ff9c89c2bd57542c3a7b9d14b1882b73bfe2e9d7849c9a4c0b8b39f02b8b - languageName: node - linkType: hard - -"safe-buffer@npm:^5.1.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 - languageName: node - linkType: hard - -"schema-utils@npm:^3.1.0, schema-utils@npm:^3.1.1": - version: 3.1.1 - resolution: "schema-utils@npm:3.1.1" - dependencies: - "@types/json-schema": ^7.0.8 - ajv: ^6.12.5 - ajv-keywords: ^3.5.2 - checksum: fb73f3d759d43ba033c877628fe9751620a26879f6301d3dbeeb48cf2a65baec5cdf99da65d1bf3b4ff5444b2e59cbe4f81c2456b5e0d2ba7d7fd4aed5da29ce - languageName: node - linkType: hard - -"schema-utils@npm:^4.0.0": - version: 4.0.0 - resolution: "schema-utils@npm:4.0.0" - dependencies: - "@types/json-schema": ^7.0.9 - ajv: ^8.8.0 - ajv-formats: ^2.1.1 - ajv-keywords: ^5.0.0 - checksum: c843e92fdd1a5c145dbb6ffdae33e501867f9703afac67bdf35a685e49f85b1dcc10ea250033175a64bd9d31f0555bc6785b8359da0c90bcea30cf6dfbb55a8f - languageName: node - linkType: hard - -"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": - version: 6.3.0 - resolution: "semver@npm:6.3.0" - bin: - semver: ./bin/semver.js - checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 - languageName: node - linkType: hard - -"serialize-javascript@npm:^6.0.0": - version: 6.0.0 - resolution: "serialize-javascript@npm:6.0.0" - dependencies: - randombytes: ^2.1.0 - checksum: 56f90b562a1bdc92e55afb3e657c6397c01a902c588c0fe3d4c490efdcc97dcd2a3074ba12df9e94630f33a5ce5b76a74784a7041294628a6f4306e0ec84bf93 - languageName: node - linkType: hard - -"shallow-clone@npm:^3.0.0": - version: 3.0.1 - resolution: "shallow-clone@npm:3.0.1" - dependencies: - kind-of: ^6.0.2 - checksum: 39b3dd9630a774aba288a680e7d2901f5c0eae7b8387fc5c8ea559918b29b3da144b7bdb990d7ccd9e11be05508ac9e459ce51d01fd65e583282f6ffafcba2e7 - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: ^3.0.0 - checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 - languageName: node - linkType: hard - -"shortid@npm:2.2.16": - version: 2.2.16 - resolution: "shortid@npm:2.2.16" - dependencies: - nanoid: ^2.1.0 - checksum: 0790ce22fe20aacc226915160da178b5a6af7814d1796404684f6699b60f77e291d39ad3b6b2b4c6efcf5553e1deeee7e29a48b8f46955de1425e67ab934e309 - languageName: node - linkType: hard - -"source-map-support@npm:~0.5.20": - version: 0.5.21 - resolution: "source-map-support@npm:0.5.21" - dependencies: - buffer-from: ^1.0.0 - source-map: ^0.6.0 - checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 - languageName: node - linkType: hard - -"source-map@npm:^0.6.0": - version: 0.6.1 - resolution: "source-map@npm:0.6.1" - checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: ^3.0.0 - checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac - languageName: node - linkType: hard - -"supports-color@npm:^8.0.0": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: ^4.0.0 - checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 - languageName: node - linkType: hard - -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae - languageName: node - linkType: hard - -"tapable@npm:^2.1.1, tapable@npm:^2.2.0": - version: 2.2.1 - resolution: "tapable@npm:2.2.1" - checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 - languageName: node - linkType: hard - -"terser-webpack-plugin@npm:^5.1.3": - version: 5.3.6 - resolution: "terser-webpack-plugin@npm:5.3.6" - dependencies: - "@jridgewell/trace-mapping": ^0.3.14 - jest-worker: ^27.4.5 - schema-utils: ^3.1.1 - serialize-javascript: ^6.0.0 - terser: ^5.14.1 - peerDependencies: - webpack: ^5.1.0 - peerDependenciesMeta: - "@swc/core": - optional: true - esbuild: - optional: true - uglify-js: - optional: true - checksum: 8f3448d7fdb0434ce6a0c09d95c462bfd2f4a5a430233d854163337f734a7f5c07c74513d16081e06d4ca33d366d5b1a36f5444219bc41a7403afd6162107bad - languageName: node - linkType: hard - -"terser@npm:^5.14.1": - version: 5.15.1 - resolution: "terser@npm:5.15.1" - dependencies: - "@jridgewell/source-map": ^0.3.2 - acorn: ^8.5.0 - commander: ^2.20.0 - source-map-support: ~0.5.20 - bin: - terser: bin/terser - checksum: 9880a1e0956983a1ce5de204ea35121c0009fa41d582a6904ae850e1953a1a2cc021168439565280c5a8eee67c85a874175627e24989b046c7a72589b81c3979 - languageName: node - linkType: hard - -"to-fast-properties@npm:^2.0.0": - version: 2.0.0 - resolution: "to-fast-properties@npm:2.0.0" - checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 - languageName: node - linkType: hard - -"ts-node@npm:10.9.1": - version: 10.9.1 - resolution: "ts-node@npm:10.9.1" - dependencies: - "@cspotcode/source-map-support": ^0.8.0 - "@tsconfig/node10": ^1.0.7 - "@tsconfig/node12": ^1.0.7 - "@tsconfig/node14": ^1.0.0 - "@tsconfig/node16": ^1.0.2 - acorn: ^8.4.1 - acorn-walk: ^8.1.1 - arg: ^4.1.0 - create-require: ^1.1.0 - diff: ^4.0.1 - make-error: ^1.1.1 - v8-compile-cache-lib: ^3.0.1 - yn: 3.1.1 - peerDependencies: - "@swc/core": ">=1.2.50" - "@swc/wasm": ">=1.2.50" - "@types/node": "*" - typescript: ">=2.7" - peerDependenciesMeta: - "@swc/core": - optional: true - "@swc/wasm": - optional: true - bin: - ts-node: dist/bin.js - ts-node-cwd: dist/bin-cwd.js - ts-node-esm: dist/bin-esm.js - ts-node-script: dist/bin-script.js - ts-node-transpile-only: dist/bin-transpile.js - ts-script: dist/bin-script-deprecated.js - checksum: 090adff1302ab20bd3486e6b4799e90f97726ed39e02b39e566f8ab674fd5bd5f727f43615debbfc580d33c6d9d1c6b1b3ce7d8e3cca3e20530a145ffa232c35 - languageName: node - linkType: hard - -"typescript@npm:4.8.4": - version: 4.8.4 - resolution: "typescript@npm:4.8.4" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 3e4f061658e0c8f36c820802fa809e0fd812b85687a9a2f5430bc3d0368e37d1c9605c3ce9b39df9a05af2ece67b1d844f9f6ea8ff42819f13bcb80f85629af0 - languageName: node - linkType: hard - -"typescript@patch:typescript@4.8.4#~builtin": - version: 4.8.4 - resolution: "typescript@patch:typescript@npm%3A4.8.4#~builtin::version=4.8.4&hash=701156" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 301459fc3eb3b1a38fe91bf96d98eb55da88a9cb17b4ef80b4d105d620f4d547ba776cc27b44cc2ef58b66eda23fe0a74142feb5e79a6fb99f54fc018a696afa - languageName: node - linkType: hard - -"unicode-canonical-property-names-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" - checksum: 39be078afd014c14dcd957a7a46a60061bc37c4508ba146517f85f60361acf4c7539552645ece25de840e17e293baa5556268d091ca6762747fdd0c705001a45 - languageName: node - linkType: hard - -"unicode-match-property-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-match-property-ecmascript@npm:2.0.0" - dependencies: - unicode-canonical-property-names-ecmascript: ^2.0.0 - unicode-property-aliases-ecmascript: ^2.0.0 - checksum: 1f34a7434a23df4885b5890ac36c5b2161a809887000be560f56ad4b11126d433c0c1c39baf1016bdabed4ec54829a6190ee37aa24919aa116dc1a5a8a62965a - languageName: node - linkType: hard - -"unicode-match-property-value-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-match-property-value-ecmascript@npm:2.0.0" - checksum: 8fe6a09d9085a625cabcead5d95bdbc1a2d5d481712856092ce0347231e81a60b93a68f1b69e82b3076a07e415a72c708044efa2aa40ae23e2e7b5c99ed4a9ea - languageName: node - linkType: hard - -"unicode-property-aliases-ecmascript@npm:^2.0.0": - version: 2.1.0 - resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" - checksum: 243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.0.9": - version: 1.0.10 - resolution: "update-browserslist-db@npm:1.0.10" - dependencies: - escalade: ^3.1.1 - picocolors: ^1.0.0 - peerDependencies: - browserslist: ">= 4.21.0" - bin: - browserslist-lint: cli.js - checksum: 12db73b4f63029ac407b153732e7cd69a1ea8206c9100b482b7d12859cd3cd0bc59c602d7ae31e652706189f1acb90d42c53ab24a5ba563ed13aebdddc5561a0 - languageName: node - linkType: hard - -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: ^2.1.0 - checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 - languageName: node - linkType: hard - -"v8-compile-cache-lib@npm:^3.0.1": - version: 3.0.1 - resolution: "v8-compile-cache-lib@npm:3.0.1" - checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 - languageName: node - linkType: hard - -"watchpack@npm:^2.4.0": - version: 2.4.0 - resolution: "watchpack@npm:2.4.0" - dependencies: - glob-to-regexp: ^0.4.1 - graceful-fs: ^4.1.2 - checksum: 23d4bc58634dbe13b86093e01c6a68d8096028b664ab7139d58f0c37d962d549a940e98f2f201cecdabd6f9c340338dc73ef8bf094a2249ef582f35183d1a131 - languageName: node - linkType: hard - -"webpack-cli@npm:4.10.0": - version: 4.10.0 - resolution: "webpack-cli@npm:4.10.0" - dependencies: - "@discoveryjs/json-ext": ^0.5.0 - "@webpack-cli/configtest": ^1.2.0 - "@webpack-cli/info": ^1.5.0 - "@webpack-cli/serve": ^1.7.0 - colorette: ^2.0.14 - commander: ^7.0.0 - cross-spawn: ^7.0.3 - fastest-levenshtein: ^1.0.12 - import-local: ^3.0.2 - interpret: ^2.2.0 - rechoir: ^0.7.0 - webpack-merge: ^5.7.3 - peerDependencies: - webpack: 4.x.x || 5.x.x - peerDependenciesMeta: - "@webpack-cli/generators": - optional: true - "@webpack-cli/migrate": - optional: true - webpack-bundle-analyzer: - optional: true - webpack-dev-server: - optional: true - bin: - webpack-cli: bin/cli.js - checksum: 2ff5355ac348e6b40f2630a203b981728834dca96d6d621be96249764b2d0fc01dd54edfcc37f02214d02935de2cf0eefd6ce689d970d154ef493f01ba922390 - languageName: node - linkType: hard - -"webpack-glob-entries@npm:1.0.1": - version: 1.0.1 - resolution: "webpack-glob-entries@npm:1.0.1" - dependencies: - glob: ^5.0.15 - checksum: 2ff68b0784070617370c65552a498967320e3328b62e9adeaa2361aaf499773db2530755c87d2195904a900f09bbda2581ee64d9853a99a37a2b30a4e305a8e4 - languageName: node - linkType: hard - -"webpack-merge@npm:^5.7.3": - version: 5.8.0 - resolution: "webpack-merge@npm:5.8.0" - dependencies: - clone-deep: ^4.0.1 - wildcard: ^2.0.0 - checksum: 88786ab91013f1bd2a683834ff381be81c245a4b0f63304a5103e90f6653f44dab496a0768287f8531761f8ad957d1f9f3ccb2cb55df0de1bd9ee343e079da26 - languageName: node - linkType: hard - -"webpack-sources@npm:^3.2.3": - version: 3.2.3 - resolution: "webpack-sources@npm:3.2.3" - checksum: 989e401b9fe3536529e2a99dac8c1bdc50e3a0a2c8669cbafad31271eadd994bc9405f88a3039cd2e29db5e6d9d0926ceb7a1a4e7409ece021fe79c37d9c4607 - languageName: node - linkType: hard - -"webpack@npm:5.74.0, webpack@npm:^5": - version: 5.74.0 - resolution: "webpack@npm:5.74.0" - dependencies: - "@types/eslint-scope": ^3.7.3 - "@types/estree": ^0.0.51 - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/wasm-edit": 1.11.1 - "@webassemblyjs/wasm-parser": 1.11.1 - acorn: ^8.7.1 - acorn-import-assertions: ^1.7.6 - browserslist: ^4.14.5 - chrome-trace-event: ^1.0.2 - enhanced-resolve: ^5.10.0 - es-module-lexer: ^0.9.0 - eslint-scope: 5.1.1 - events: ^3.2.0 - glob-to-regexp: ^0.4.1 - graceful-fs: ^4.2.9 - json-parse-even-better-errors: ^2.3.1 - loader-runner: ^4.2.0 - mime-types: ^2.1.27 - neo-async: ^2.6.2 - schema-utils: ^3.1.0 - tapable: ^2.1.1 - terser-webpack-plugin: ^5.1.3 - watchpack: ^2.4.0 - webpack-sources: ^3.2.3 - peerDependenciesMeta: - webpack-cli: - optional: true - bin: - webpack: bin/webpack.js - checksum: 320c41369a75051b19e18c63f408b3dcc481852e992f83d311771c5ec0f05f2946385e8ebef62030cf3587f0a3d2f12779ffdb191569a966847289ba7313f946 - languageName: node - linkType: hard - -"which@npm:^2.0.1": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: ^2.0.0 - bin: - node-which: ./bin/node-which - checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 - languageName: node - linkType: hard - -"wildcard@npm:^2.0.0": - version: 2.0.0 - resolution: "wildcard@npm:2.0.0" - checksum: 1f4fe4c03dfc492777c60f795bbba597ac78794f1b650d68f398fbee9adb765367c516ebd4220889b6a81e9626e7228bbe0d66237abb311573c2ee1f4902a5ad - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 - languageName: node - linkType: hard - -"yn@npm:3.1.1": - version: 3.1.1 - resolution: "yn@npm:3.1.1" - checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 - languageName: node - linkType: hard diff --git a/docs/Makefile b/docs/Makefile index 9b692032fc1..1d069a90692 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -26,3 +26,8 @@ docs-local-static: pull if [ ! -d "$(LOCAL_STATIC_PATH)" ]; then echo "local path (website project) $(LOCAL_STATIC_PATH) not found"]; exit 1; fi $(PODMAN) run --init -v $(shell pwd)/sources:$(CONTENT_PATH):Z \ -v $(shell pwd)/$(LOCAL_STATIC_PATH):/hugo/static:Z -p $(PORT) --rm -it $(IMAGE) + +.PHONY: doc-validator/% +doc-validator/%: ## Run doc-validator on a specific path. To lint the path /docs/sources/administration, run 'make doc-validator/administration'. +doc-validator/%: + $(PODMAN) run --init -v "$(shell pwd)/sources:/sources" grafana/doc-validator:latest --skip-image-validation --include=$(subst doc-validator/,,$@) ./sources /docs/grafana/latest diff --git a/docs/sources/administration/_index.md b/docs/sources/administration/_index.md index c9a8a8ea313..ef1699b2158 100644 --- a/docs/sources/administration/_index.md +++ b/docs/sources/administration/_index.md @@ -1,4 +1,10 @@ --- +cascade: + labels: + products: + - cloud + - enterprise + - oss description: Administration title: Administration weight: 40 diff --git a/docs/sources/administration/enterprise-licensing/_index.md b/docs/sources/administration/enterprise-licensing/_index.md index 09ae340da34..815f07c46e5 100644 --- a/docs/sources/administration/enterprise-licensing/_index.md +++ b/docs/sources/administration/enterprise-licensing/_index.md @@ -8,6 +8,10 @@ aliases: - ../enterprise/license/license-expiration/ - ../enterprise/license/license-restrictions/ - license-restrictions/ +cascade: + labels: + products: + - enterprise description: Activate and manage a Grafana Enterprise license keywords: - grafana diff --git a/docs/sources/administration/organization-management/index.md b/docs/sources/administration/organization-management/index.md index 92fbbdce6e1..9214c79635a 100644 --- a/docs/sources/administration/organization-management/index.md +++ b/docs/sources/administration/organization-management/index.md @@ -8,6 +8,10 @@ description: Describes how to use organizations to isolate dashboard to users an keywords: - organizations - dashboards +labels: + products: + - enterprise + - oss menuTitle: Manage organizations title: Manage organizations weight: 200 diff --git a/docs/sources/administration/provisioning/index.md b/docs/sources/administration/provisioning/index.md index c243fc68f12..323d32e6313 100644 --- a/docs/sources/administration/provisioning/index.md +++ b/docs/sources/administration/provisioning/index.md @@ -5,6 +5,10 @@ description: Describes provisioning settings for Grafana using configuration fil keywords: - grafana - provisioning +labels: + products: + - enterprise + - oss title: Provision Grafana weight: 600 --- diff --git a/docs/sources/administration/stats-and-license/index.md b/docs/sources/administration/stats-and-license/index.md index 955ce8a03a6..b84ced7dcaf 100644 --- a/docs/sources/administration/stats-and-license/index.md +++ b/docs/sources/administration/stats-and-license/index.md @@ -11,6 +11,10 @@ keywords: - configuration - server - settings +labels: + products: + - enterprise + - oss title: Stats and license weight: 400 --- diff --git a/docs/sources/alerting/_index.md b/docs/sources/alerting/_index.md index 71d1cb2ae9e..c7747d9dea4 100644 --- a/docs/sources/alerting/_index.md +++ b/docs/sources/alerting/_index.md @@ -2,6 +2,11 @@ aliases: - about-alerting/ - unified-alerting/alerting/ +cascade: + labels: + products: + - cloud + - oss title: Alerting weight: 114 --- @@ -64,8 +69,8 @@ With mute timings, you can specify a time interval when you don’t want new not ## Useful links -- [Fundamental concepts]({{< relref "fundamentals/" >}}) of Grafana Alerting. +- [Fundamental concepts]({{< relref "/docs/grafana/latest/alerting/fundamentals" >}}) of Grafana Alerting. -- [Role-based access control]({{< relref "../administration/roles-and-permissions/access-control/" >}}) in Grafana Enterprise. +- [Role-based access control]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control" >}}) in Grafana Enterprise. -- [High availability](https://grafana.com/docs/grafana/next/alerting/fundamentals/high-availability/) +- [High availability]({{< relref "/docs/grafana/latest/alerting/fundamentals/high-availability" >}}) diff --git a/docs/sources/alerting/alerting-rules/create-grafana-managed-rule.md b/docs/sources/alerting/alerting-rules/create-grafana-managed-rule.md index bdb4a2c9132..37119a6dc7c 100644 --- a/docs/sources/alerting/alerting-rules/create-grafana-managed-rule.md +++ b/docs/sources/alerting/alerting-rules/create-grafana-managed-rule.md @@ -26,7 +26,7 @@ Watch this video to learn more about creating alerts: {{< vimeo 720001934 >}} - In **Rule name**, add a descriptive name. This name is displayed in the alert rule list. It is also the `alertname` label for every alert instance that is created from this rule. 1. In Step 2, add queries and expressions to evaluate, and then select the alert condition. - For queries, select a data source from the drop-down. - - Add one or more [queries]({{< relref "../../panels-visualizations/query-transform-data/#add-a-query/" >}}) or [expressions]({{< relref "../../panels-visualizations/query-transform-data/expression-queries/" >}}). + - Add one or more [queries]({{< relref "/docs/grafana/latest/panels-visualizations/query-transform-data#add-a-query" >}}) or [expressions]({{< relref "/docs/grafana/latest/panels-visualizations/query-transform-data/expression-queries" >}}). - For each expression, select either **Classic condition** to create a single alert rule, or choose from **Math**, **Reduce**, **Resample** options to generate separate alert for each series. For details on these options, see [Single and multi dimensional rule](#single-and-multi-dimensional-rule). - Click **Run queries** to verify that the query is successful. - Next, select the query or expression for your alert condition. @@ -74,7 +74,7 @@ To generate a separate alert for each series, create a multi-dimensional rule. U #### Rule with classic condition -For more information, see [expressions documentation]({{< relref "../../panels-visualizations/query-transform-data/expression-queries/" >}}). +For more information, see [expressions documentation]({{< relref "/docs/grafana/latest/panels-visualizations/query-transform-data/expression-queries" >}}). ### No data and error handling @@ -87,7 +87,7 @@ Configure alerting behavior in the absence of data using information in the foll | Ok | Set alert rule state to `Normal`. | | Error or timeout option | Description | -| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | | Alerting | Set alert rule state to `Alerting`. From Grafana 8.5, the alert rule waits for the entire duration for which the condition is true before firing. | | OK | Set alert rule state to `Normal` | -| Error | Create a new alert `DatasourceError` with the name and UID of the alert rule, and UID of the datasource that returned no data as labels. | +| re | Error | Create a new alert `DatasourceError` with the name and UID of the alert rule, and UID of the datasource that returned no data as labels. | diff --git a/docs/sources/alerting/fundamentals/alert-rules/alert-rule-types.md b/docs/sources/alerting/fundamentals/alert-rules/alert-rule-types.md index ad5bfd9731d..4d5e94d2e11 100644 --- a/docs/sources/alerting/fundamentals/alert-rules/alert-rule-types.md +++ b/docs/sources/alerting/fundamentals/alert-rules/alert-rule-types.md @@ -16,7 +16,7 @@ Grafana supports several alert rule types, the following sections will explain t Grafana-managed rules are the most flexible alert rule type. They allow you to create alerts that can act on data from any of your existing data sources. -In additional to supporting any datasource you can also add additional [expressions]({{< relref "../../../panels-visualizations/query-transform-data/expression-queries/" >}}) to transform your data and express alert conditions. +In addition to supporting any data source, you can add [expressions]({{< relref "/docs/grafana/latest/panels-visualizations/query-transform-data/expression-queries" >}}) to transform your data and express alert conditions. ## Mimir, Loki and Cortex rules diff --git a/docs/sources/alerting/fundamentals/alert-rules/message-templating.md b/docs/sources/alerting/fundamentals/alert-rules/message-templating.md index c8d2679771f..f816e690a07 100644 --- a/docs/sources/alerting/fundamentals/alert-rules/message-templating.md +++ b/docs/sources/alerting/fundamentals/alert-rules/message-templating.md @@ -16,7 +16,9 @@ weight: 415 # Notification templating -Notifications sent via contact points are built using notification templates. Grafana's default templates are based on the [Go templating system](https://golang.org/pkg/text/template) where some fields are evaluated as text, while others are evaluated as HTML (which can affect escaping). The default template, defined in [default_template.go](https://github.com/grafana/alerting/blob/main/templates/default_template.go), is a useful reference for custom templates. +Notifications sent via contact points are built using notification templates. Grafana's default templates are based on the [Go templating system](https://golang.org/pkg/text/template) where some fields are evaluated as text, while others are evaluated as HTML (which can affect escaping). + +The default template [default_template.go](https://github.com/grafana/alerting/blob/main/templates/default_template.go) is a useful reference for custom templates. Since most of the contact point fields can be templated, you can create reusable custom templates and use them in multiple contact points. diff --git a/docs/sources/alerting/fundamentals/annotation-label/how-to-use-labels.md b/docs/sources/alerting/fundamentals/annotation-label/how-to-use-labels.md index f9e78155ed3..0c92011f81d 100644 --- a/docs/sources/alerting/fundamentals/annotation-label/how-to-use-labels.md +++ b/docs/sources/alerting/fundamentals/annotation-label/how-to-use-labels.md @@ -17,7 +17,7 @@ This topic explains why labels are a fundamental component of alerting. - The Alertmanager uses labels to match alerts for silences and alert groups in notification policies. - The alerting UI shows labels for every alert instance generated during evaluation of that rule. - Contact points can access labels to dynamically generate notifications that contain information specific to the alert that is resulting in a notification. -- You can add labels to an [alerting rule]({{< relref "../../alerting-rules/" >}}). Labels are manually configurable, use template functions, and can reference other labels. Labels added to an alerting rule take precedence in the event of a collision between labels (except in the case of [Grafana reserved labels](#grafana-reserved-labels)). +- You can add labels to an [alerting rule]({{< relref "/docs/grafana/latest/alerting/alerting-rules" >}}). Labels are manually configurable, use template functions, and can reference other labels. Labels added to an alerting rule take precedence in the event of a collision between labels (except in the case of [Grafana reserved labels](#grafana-reserved-labels)). {{< figure src="/static/img/docs/alerting/unified/rule-edit-details-8-0.png" max-width="550px" caption="Alert details" >}} @@ -38,7 +38,7 @@ Example: A label key/value pair `Alert! 🔔="🔥"` will become `Alert_0x1f514= # Grafana reserved labels > **Note:** Labels prefixed with `grafana_` are reserved by Grafana for special use. If a manually configured label is added beginning with `grafana_` it may be overwritten in case of collision. -> To stop the Grafana Alerting engine from adding a reserved label, you can disable it via the `disabled_labels` option in [unified_alerting.reserved_labels]({{< relref "../../../setup-grafana/configure-grafana/#unified_alertingreserved_labels" >}}) configuration. +> To stop the Grafana Alerting engine from adding a reserved label, you can disable it via the `disabled_labels` option in [unified_alerting.reserved_labels]({{< relref "/docs/grafana/latest/setup-grafana/configure-grafana#unified_alertingreserved_labels" >}}) configuration. Grafana reserved labels can be used in the same way as manually configured labels. The current list of available reserved labels are: diff --git a/docs/sources/alerting/fundamentals/evaluate-grafana-alerts.md b/docs/sources/alerting/fundamentals/evaluate-grafana-alerts.md index ac6d573f903..3c30ee288c5 100644 --- a/docs/sources/alerting/fundamentals/evaluate-grafana-alerts.md +++ b/docs/sources/alerting/fundamentals/evaluate-grafana-alerts.md @@ -23,11 +23,11 @@ Grafana managed alerts query the following backend data sources that have alerti - built-in data sources or those developed and maintained by Grafana: `Graphite`, `Prometheus`, `Loki`, `InfluxDB`, `Elasticsearch`, `Google Cloud Monitoring`, `Cloudwatch`, `Azure Monitor`, `MySQL`, `PostgreSQL`, `MSSQL`, `OpenTSDB`, `Oracle`, and `Azure Monitor` -- community developed backend data sources with alerting enabled (`backend` and `alerting` properties are set in the [plugin.json]({{< relref "../../developers/plugins/metadata/" >}})) +- community developed backend data sources with alerting enabled (`backend` and `alerting` properties are set in the [plugin.json]({{< relref "/docs/grafana/latest/developers/plugins/metadata" >}})) ### Metrics from the alerting engine -The alerting engine publishes some internal metrics about itself. You can read more about how Grafana publishes [internal metrics]({{< relref "../../setup-grafana/set-up-grafana-monitoring/" >}}). +The alerting engine publishes some internal metrics about itself. You can read more about how Grafana publishes [internal metrics]({{< relref "/docs/grafana/latest/setup-grafana/set-up-grafana-monitoring" >}}). | Metric Name | Type | Description | | ------------------------------------------------- | --------- | ---------------------------------------------------------------------------------------- | diff --git a/docs/sources/alerting/fundamentals/notifications.md b/docs/sources/alerting/fundamentals/notifications.md index 78eae2708d4..54694626641 100644 --- a/docs/sources/alerting/fundamentals/notifications.md +++ b/docs/sources/alerting/fundamentals/notifications.md @@ -21,13 +21,15 @@ Grafana uses Alertmanagers to send notifications for firing and resolved alerts. Notification policies control when and where notifications are sent. A notification policy can choose to send all alerts together in the same notification, send alerts in grouped notifications based on a set of labels, or send alerts as separate notifications. You can configure each notification policy to control how often notifications should be sent as well as having one or more mute timings to inhibit notifications at certain times of the day and on certain days of the week. -Notification policies are organized in a tree structure where at the root of the tree there is a notification policy called the root policy. There can be only one root policy and the root policy cannot be deleted. +Notification policies are organized in a tree structure where at the root of the tree there is a notification policy called the default policy. There can be only one default policy and the default policy cannot be deleted. -Specific routing policies are children of the root policy and can be used to match either all alerts or a subset of alerts based on a set of matching labels. A notification policy matches an alert when its matching labels match the labels in the alert. +Specific routing policies are children of the default policy and can be used to match either all alerts or a subset of alerts based on a set of matching labels. A notification policy matches an alert when its matching labels match the labels in the alert. -A specific routing policy can have its own child policies, called nested policies, which allow for additional matching of alerts. An example of a specific routing policy could be sending infrastructure alerts to the Ops team; while a child policy might send high priority alerts to Pagerduty and low priority alerts as emails. +A nested policy can have its own nested policies, which allow for additional matching of alerts. An example of a nested policy could be sending infrastructure alerts to the Ops team; while a nested policy might send high priority alerts to Pagerduty and low priority alerts as emails. -All alerts, irrespective of their labels, match the root policy. However, when the root policy receives an alert it looks at each specific routing policy and sends the alert to the first specific routing policy that matches the alert. If the specific routing policy has further child policies, then it can attempt to the match the alert against one of its nested policies. If no nested policies match the alert then the specific routing policy is the matching policy. If there are no specific routing policies, or no specific routing policies match the alert, then the root policy is the matching policy. +All alerts, irrespective of their labels, match the default policy. However, when the default policy receives an alert it looks at each nested policy and sends the alert to the first nested policy that matches the alert. If the nested policy has further nested policies, then it can attempt to the match the alert against one of its nested policies. If no nested policies match the alert then the policy itself is the matching policy. If there are no nested policies, or no nested policies match the alert, then the default policy is the matching policy. + + ## Contact points diff --git a/docs/sources/alerting/manage-notifications/create-notification-policy.md b/docs/sources/alerting/manage-notifications/create-notification-policy.md index fb3382c5c27..80acd1e3b81 100644 --- a/docs/sources/alerting/manage-notifications/create-notification-policy.md +++ b/docs/sources/alerting/manage-notifications/create-notification-policy.md @@ -16,14 +16,12 @@ weight: 300 # Manage notification policies -Notification policies determine how alerts are routed to contact points. Policies have a tree structure, where each policy can have one or more child policies. Each policy, except for the root policy, can also match specific alert labels. Each alert is evaluated by the root policy and subsequently by each child policy. If the `Continue matching subsequent sibling nodes` option is enabled for a specific policy, then evaluation continues even after one or more matches. A parent policy’s configuration settings and contact point information govern the behavior of an alert that does not match any of the child policies. A root policy governs any alert that does not match a specific policy. +Notification policies determine how alerts are routed to contact points. Policies have a tree structure, where each policy can have one or more nested policies. Each policy, except for the default policy, can also match specific alert labels. Each alert is evaluated by the default policy and subsequently by each nested policy. If the `Continue matching subsequent sibling nodes` option is enabled for a nested policy, then evaluation continues even after one or more matches. A parent policy’s configuration settings and contact point information govern the behavior of an alert that does not match any of the nested policies. A default policy governs any alert that does not match a nested policy. You can configure Grafana managed notification policies as well as notification policies for an external Alertmanager data source. ## Grouping -{{< figure max-width="40%" src="/static/img/docs/alerting/unified/notification-policies-grouping.png" max-width="650px" caption="Notification policies grouping" >}} - Grouping is a new and key concept of Grafana Alerting that categorizes alert notifications of similar nature into a single funnel. This allows you to properly route alert notifications during larger outages when many parts of a system fail at once causing a high number of alerts to fire simultaneously. For example, suppose you have 100 services connected to a database in different environments. These services are differentiated by the label `env=environmentname`. An alert rule is in place to monitor whether your services can reach the database named `alertname=DatabaseUnreachable`. @@ -34,14 +32,14 @@ You can configure grouping to be `group_by: [alertname]` (take note that the `en > **Note:** Grafana also has a special label named `...` that you can use to group all alerts by all labels (effectively disabling grouping), therefore each alert will go into its own group. It is different from the default of `group_by: null` where **all** alerts go into a single group. -## Edit root notification policy +## Edit default notification policy > **Note:** Before Grafana v8.2, the configuration of the embedded Alertmanager was shared across organizations. Users of Grafana 8.0 and 8.1 are advised to use the new Grafana 8 Alerts only if they have one organization. Otherwise, silences for the Grafana managed alerts will be visible by all organizations. 1. In the Grafana menu, click the **Alerting** (bell) icon to open the Alerting page listing existing alerts. 1. Click **Notification policies**. 1. From the **Alertmanager** dropdown, select an external Alertmanager. By default, the Grafana Alertmanager is selected. -1. In the Root policy section, click **Edit** (pen icon). +1. In the Default policy section, click **...** › **Edit** (pen icon). 1. In **Default contact point**, update the contact point to whom notifications should be sent for rules when alert rules do not match any specific policy. 1. In **Group by**, choose labels to group alerts by. If multiple alerts are matched for this policy, then they are grouped by these labels. A notification is sent per group. If the field is empty (default), then all notifications are sent in a single group. Use a special label `...` to group alerts by all labels (which effectively disables grouping). 1. In **Timing options**, select from the following options: @@ -50,7 +48,7 @@ You can configure grouping to be `group_by: [alertname]` (take note that the `en - **Repeat interval** Minimum time interval for re-sending a notification if no new alerts were added to the group. Default is 4 hours. 1. Click **Save** to save your changes. -## Add new specific policy +## Add new nested policy 1. In the Grafana menu, click the **Alerting** (bell) icon to open the Alerting page listing existing alerts. 1. Click **Notification policies**. @@ -59,7 +57,7 @@ You can configure grouping to be `group_by: [alertname]` (take note that the `en 1. In **Matching labels** section, add one or more rules for matching alert labels. 1. In **Contact point**, add the contact point to send notification to if alert matches only this specific policy and not any of the nested policies. 1. Optionally, enable **Continue matching subsequent sibling nodes** to continue matching sibling policies even after the alert matched the current policy. When this option is enabled, you can get more than one notification for one alert. -1. Optionally, enable **Override grouping** to specify the same grouping as the root policy. If this option is not enabled, the root policy grouping is used. +1. Optionally, enable **Override grouping** to specify the same grouping as the default policy. If this option is not enabled, the default policy grouping is used. 1. Optionally, enable **Override general timings** to override the timing options configured in the group notification policy. 1. Click **Save policy** to save your changes. @@ -76,14 +74,29 @@ You can configure grouping to be `group_by: [alertname]` (take note that the `en 1. Make any changes using instructions in [Add new specific policy](#add-new-specific-policy). 1. Click **Save policy**. +## Searching for policies + +Grafana allows you to search within the tree of policies by the following: + +- **Label matchers** +- **Contact Points** + +To search by contact point simply select a contact point from the **Search by contact point** dropdown. The policies that use that contact point will be highlighted in the user interface. + +To search by label matchers simply enter a valid matcher in the **Search by matchers** input field. Multiple matchers can be combined with a comma (`,`). + +An example of a valid matchers search input is: + +`severity=high, region=~EMEA|NASA` + +> All matched policies will be **exact** matches, we currently do not support regex-style or partial matching. + ## Example An example of an alert configuration. -- Create a "default" contact point for slack notifications, and set it on root policy. -- Edit the root policy grouping to group alerts by `cluster`, `namespace` and `severity` so that you get a notification per alert rule and specific kubernetes cluster and namespace. +- Create a "default" contact point for slack notifications, and set it on the default policy. +- Edit the default policy grouping to group alerts by `cluster`, `namespace` and `severity` so that you get a notification per alert rule and specific kubernetes cluster and namespace. - Create specific route for alerts coming from the development cluster with an appropriate contact point. - Create a specific route for alerts with "critical" severity with a more invasive contact point integration, like pager duty notification. -- Create specific routes for particular teams that handle their own onduty rotations. - -{{< figure max-width="40%" src="/static/img/docs/alerting/unified/notification-policies-8-0.png" max-width="650px" caption="Notification policies" >}} +- Create specific routes for particular teams that handle their own on-call rotations. diff --git a/docs/sources/alerting/manage-notifications/images-in-notifications.md b/docs/sources/alerting/manage-notifications/images-in-notifications.md index d061189d8f3..170e3088c40 100644 --- a/docs/sources/alerting/manage-notifications/images-in-notifications.md +++ b/docs/sources/alerting/manage-notifications/images-in-notifications.md @@ -13,35 +13,37 @@ weight: 500 Images in notifications helps recipients of alert notifications better understand why an alert has fired or resolved by including a screenshot of the panel associated with the alert. -> **Note**: This feature is not supported for Mimir or Loki rules, or when Grafana sends alert notifications to an external Alertmanager. +> **Note**: This feature is not supported in Mimir or Loki, or when Grafana is configured to send alerts to other Alertmanagers such as the Prometheus Alertmanager When an alert is fired or resolved Grafana takes a screenshot of the panel associated with the alert. This is determined via the Dashboard UID and Panel ID annotations of the rule. Grafana cannot take a screenshot for alerts that are not associated with a panel. -Because a number of contact points, such as email, do not support uploading screenshots at the time of sending a notification; Grafana can also upload the screenshot to a cloud storage service such as Amazon S3, Azure Blob Storage and Google Cloud Storage, where a link to the uploaded screenshot can be added to the notification. However, if using a cloud storage service is not an option then Grafana can be its own cloud storage service such that the screenshot is available under the same domain as Grafana. +Grafana takes at most two screenshots for each alert: once when the alert fires and again when the alert is resolved. Screenshots are not re-taken over the lifetime of the alert, instead you should open the panel in Grafana to follow the data in real time. In addition, depending on how alerts are grouped in your notification policies, Grafana might send a notification with many screenshots of the same panel. This happens because Grafana does not know how your alerts are grouped at the time a screenshot is taken, and so acts conservatively by taking a screenshot for every alert. -Should either the cloud storage service, or Grafana if acting as its own cloud storage service, be protected by a firewall, gateway service or VPN, then screenshots might not be shown in notifications. +Once a screenshot has been taken Grafana can either upload it to a cloud storage service such as Amazon S3, Azure Blob Storage or Google Cloud Storage; upload the screenshot to it's internal web server; or upload it to the service that is receiving the notification, such as Slack. Which option you should choose depends on how your Grafana is managed and which integrations you use. More information on this can be found in Requirements. -How to choose between uploading screenshots at the time of sending the notification, using a cloud storage service, or using Grafana as its own cloud storage service, depends on which contact points you plan to use and whether you use a firewall, gateway service or VPN. - -For example, if a contact point supports uploading images at the time of notification is it not required to use cloud storage. Cloud storage is required when a contact point does not support uploading images at the time of sending a notification, such as email. We don't recommend using cloud storage if the cloud storage service is behind a firewall, gateway service, or VPN, as screenshots might not be shown in notifications. - -Please refer to the table at the end of this page for a list of contact points and their support for images in notifications. +Refer to the table at the end of this page for a list of contact points and their support for images in notifications. ## Requirements -To use images in notifications, Grafana must be set up to use [image rendering](https://grafana.com/docs/grafana/next/setup-grafana/image-rendering/). You can either install the image rendering plugin or run it as a remote rendering service. +1. To use images in notifications, Grafana must be set up to use [image rendering]({{< relref "/docs/grafana/latest/setup-grafana/image-rendering" >}}). You can either install the image rendering plugin or run it as a remote rendering service. -When a screenshot is taken it is saved to the [data]({{< relref "../../setup-grafana/configure-grafana/#paths" >}}) path. This is where screenshots are stored before being sent in a notification or uploaded to a cloud storage service. Grafana must have write-access to this path. If Grafana cannot write to this path then screenshots cannot be saved to disk and an error will be logged for each failed screenshot attempt. +2. When a screenshot is taken it is saved to the [data]({{< relref "/docs/grafana/latest/setup-grafana/configure-grafana#paths" >}}) folder, even if Grafana is configured to upload screenshots to a cloud storage service. Grafana must have write-access to this folder otherwise screenshots cannot be saved to disk and an error will be logged for each failed screenshot attempt. -If using a [cloud storage service](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#external_image_storage) such as Amazon S3, Azure Blob Storage or Google Cloud Storage, uploaded images need to be accessible outside of a firewall, gateway service or VPN for screenshots to be shown in notifications. Grafana will not delete screenshots from cloud storage. We recommend configuring a retention policy on the bucket to delete screenshots older than 1 month. +3. You should use a cloud storage service unless sending alerts to Discord, Email, Pushover, Slack or Telegram. These integrations support either embedding screenshots in the email or attaching screenshots to the notification, while other integrations must link screenshots uploaded to a cloud storage bucket. If a cloud storage service has been configured then integrations that support both will link screenshots from the cloud storage bucket instead of embedding or attaching screenshots to the notification. -If using Grafana as its own cloud storage service then screenshots will be saved to `static_root_path/img/attachments`. `static_root_path` is a configuration option for Grafana and can be found in `defaults.ini`. However, like when using a cloud storage service, images need to be accessible outside of a firewall, gateway service or VPN for screenshots to be shown in notifications. +4. If uploading screenshots to a cloud storage service such as Amazon S3, Azure Blob Storage or Google Cloud Storage; and accessing screenshots in the bucket requires authentication, logging into a VPN or corporate network; then image previews might not work in all instant messaging and communication platforms as some services rewrite URLs to use their CDN. If this happens we recommend using [integrations which support uploading images]({{}}) or [disabling images in notifications]({{}}) altogether. -When using Grafana as its own cloud storage service screenshots are copied from [data]({{< relref "../../setup-grafana/configure-grafana/#paths" >}}) to `static_root_path/img/attachments`. Screenshots older than `temp_data_lifetime` are deleted from [data]({{< relref "../../setup-grafana/configure-grafana/#paths" >}}) but not from `static_root_path/images/attachments`. To delete screenshots from `static_root_path` after a certain amount of time we recommend setting up a CRON job. +5. When uploading screenshots to a cloud storage service Grafana uses a random 20 character (30 characters for Azure Blob Storage) filename for each image. This makes URLs hard to guess but not impossible. + +6. Grafana does not delete screenshots from cloud storage. We recommend configuring a retention policy with your cloud storage service to delete screenshots older than 1 month. + +7. If Grafana is configured to upload screenshots to its internal web server, and accessing Grafana requires logging into a VPN or corporate network; image previews might not work in all instant messaging and communication platforms as some services rewrite URLs to use their CDN. If this happens we recommend using [integrations which support uploading images]({{}}) or [disabling images in notifications]({{}}) altogether. + +8. Grafana does not delete screenshots uploaded to its internal web server. To delete screenshots from `static_root_path/images/attachments` after a certain amount of time we recommend setting up a CRON job. ## Configuration -> **Note:** Grafana Cloud users can request this feature by [opening a support ticket in the Cloud Portal](https://grafana.com/profile/org#support). +> **Note:** Grafana Cloud users can request this feature by [opening a support ticket in the Cloud Portal](/profile/org#support). Having installed either the image rendering plugin, or set up Grafana to use a remote rendering service, set `capture` in `[unified_alerting.screenshots]` to `true`: @@ -57,9 +59,9 @@ If screenshots should be uploaded to cloud storage then `upload_external_image_s # will be persisted to disk for up to temp_data_lifetime. upload_external_image_storage = false -Please see [`[external_image_storage]`](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#external_image_storage) for instructions on how to configure cloud storage. Grafana will not start if `upload_external_image_storage` is `true` and `[external_image_storage]` contains missing or invalid configuration. +Please see [`[external_image_storage]`]({{< relref "/docs/grafana/latest/setup-grafana/configure-grafana#external_image_storage" >}}) for instructions on how to configure cloud storage. Grafana will not start if `upload_external_image_storage` is `true` and `[external_image_storage]` contains missing or invalid configuration. -If Grafana is acting as its own cloud storage then `[upload_external_image_storage]` should be set to `true` and the `local` provider should be set in [`[external_image_storage]`](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#external_image_storage). +If Grafana is acting as its own cloud storage then `[upload_external_image_storage]` should be set to `true` and the `local` provider should be set in [`[external_image_storage]`]({{< relref "/docs/grafana/latest/setup-grafana/configure-grafana#external_image_storage" >}}). Restart Grafana for the changes to take effect. @@ -73,36 +75,36 @@ We recommended that `max_concurrent_screenshots` is less than or equal to `concu # the total number of concurrent screenshots across all Grafana services. max_concurrent_screenshots = 5 -## Support for images in contact points +## Supported contact points -Grafana supports a wide range of contact points with varied support for images in notifications. The table below shows the list of all contact points supported in Grafana and their support for uploading images at the time of sending the notification and images uploaded to cloud storage, including when Grafana is acting as its own cloud storage service. +Grafana supports a wide range of contact points with varied support for images in notifications. The table below shows the list of all contact points supported in Grafana and their support for uploading screenshots to the receiving service and referencing screenshots that have been uploaded to a cloud storage service. -| Name | Upload images from disk | Include images from URL | -| ----------------------- | --------------------------- | ------------------------- | -| DingDing | No | No | -| Discord | Yes | Yes | -| Email | Yes | Yes | -| Google Hangouts Chat | No | Yes | -| Kafka | No | No | -| Line | No | No | -| Microsoft Teams | No | Yes | -| Opsgenie | No | Yes | -| Pagerduty | No | Yes | -| Prometheus Alertmanager | No | No | -| Pushover | Yes | No | -| Sensu Go | No | No | -| Slack | Yes (when using Bot tokens) | Yes (when using webhooks) | -| Telegram | Yes | No | -| Threema | No | No | -| VictorOps | No | No | -| Webhook | No | Yes | +| Name | Upload from disk | Reference from cloud storage | +| ----------------------- | ---------------------------------------------------------- | -------------------------------------------------------- | +| DingDing | No | No | +| Discord | Yes (Maximum of 10 per notification) | Yes (Maximum of 10 per notification) | +| Email | Yes (Embedded in the email) | Yes | +| Google Hangouts Chat | No | Yes | +| Kafka | No | No | +| Line | No | No | +| Microsoft Teams | No | Yes | +| Opsgenie | No | Yes | +| Pagerduty | No | Yes | +| Prometheus Alertmanager | No | No | +| Pushover | Yes (Maximum of 1 per notification) | No | +| Sensu Go | No | No | +| Slack | Yes (when using Bot tokens, maximum of 5 per notification) | Yes (when using webhooks, maximum of 1 per notification) | +| Telegram | Yes | No | +| Threema | No | No | +| VictorOps | No | No | +| Webhook | No | Yes | ## Limitations -- This feature is not supported for Mimir or Loki rules, or when Grafana sends alert notifications to an external Alertmanager. -- When multiple alerts are sent in a single notification a screenshot might be included for each alert. The order the images are shown in random. -- Some contact points support at most one image per notification. In this case, the first image associated with an alert will be attached. -- We don't recommend using cloud storage if the cloud storage service is behind a firewall, gateway service, or VPN, as screenshots might not be shown in notifications. +- This feature is not supported in Mimir or Loki, or when Grafana is configured to send alerts to other Alertmanagers such as the Prometheus Alertmanager. +- A number of contact points support at most one image per notification. In this case, just the first image is either uploaded to the receiving service or referenced from cloud storage per notification. +- When multiple alerts are sent in a single notification a screenshot might be included for each alert. The order the images are shown is random. +- If uploading screenshots to a cloud storage service such as Amazon S3, Azure Blob Storage or Google Cloud Storage; and accessing screenshots in the bucket requires authentication, logging into a VPN or corporate network; image previews might not work in all instant messaging and communication platforms as some services rewrite URLs to use their CDN. ## Troubleshooting @@ -113,9 +115,7 @@ If Grafana has been set up to send images in notifications, however notification 3. If the alert is not associated with a dashboard there will be logs for `Cannot take screenshot for alert rule as it is not associated with a dashboard`. 4. If the alert is associated with a dashboard, but no panel in the dashboard, there will be logs for `Cannot take screenshot for alert rule as it is not associated with a panel`. 5. If images cannot be taken because of mis-configuration or an issue with image rendering there will be logs for `Failed to take an image` including the Dashboard UID, Panel ID, and the error message. -6. Check that the contact point supports images in notifications, and the present configuration, as per the table. -7. If the image was uploaded to cloud storage make sure it is public. -8. If images are made available via Grafana's built in web server make sure it is accessible via the Internet. +6. Check that the contact point supports images in notifications and whether it supports uploading images to the receiving service or referencing images that have been uploaded to a cloud storage service. ## Metrics diff --git a/docs/sources/alerting/manage-notifications/mute-timings.md b/docs/sources/alerting/manage-notifications/mute-timings.md index 5c617318848..01b256b4843 100644 --- a/docs/sources/alerting/manage-notifications/mute-timings.md +++ b/docs/sources/alerting/manage-notifications/mute-timings.md @@ -20,7 +20,7 @@ A mute timing is a recurring interval of time when no new notifications for a po Similar to silences, mute timings do not prevent alert rules from being evaluated, nor do they stop alert instances from being shown in the user interface. They only prevent notifications from being created. -You can configure Grafana managed mute timings as well as mute timings for an [external Alertmanager data source]({{< relref "../../datasources/alertmanager/" >}}). For more information, refer to [Alertmanager documentation]((https://grafana.com/docs/grafana/next/alerting/manage-notifications/alertmanager/). +You can configure Grafana managed mute timings as well as mute timings for an [external Alertmanager data source]({{< relref "/docs/grafana/latest/datasources/alertmanager" >}}). For more information, refer to [Alertmanager documentation]({{< relref "/docs/grafana/latest/alerting/manage-notifications/alertmanager" >}}). ## Mute timings vs silences @@ -36,7 +36,8 @@ The following table highlights the key differences between mute timings and sile 1. In the Grafana menu, click the **Alerting** (bell) icon to open the Alerting page listing existing alerts. 1. Click **Notification policies**. 1. From the **Alertmanager** dropdown, select an external Alertmanager. By default, the Grafana Alertmanager is selected. -1. At the bottom of the page there will be a section titled **Mute timings**. Click the **Add mute timing** button. +1. Click the **Mute Timings** tab. +1. Click **Add mute timing**. 1. You will be redirected to a form to create a [time interval](#time-intervals) to match against for your mute timing. 1. Click **Submit** to create the mute timing. diff --git a/docs/sources/alerting/manage-notifications/view-alert-groups.md b/docs/sources/alerting/manage-notifications/view-alert-groups.md index aa70d723269..20e78107953 100644 --- a/docs/sources/alerting/manage-notifications/view-alert-groups.md +++ b/docs/sources/alerting/manage-notifications/view-alert-groups.md @@ -17,7 +17,7 @@ weight: 800 # View and filter by alert groups -Alert groups show grouped alerts from an Alertmanager instance. By default, alert rules are grouped by the label keys for the root policy in notification policies. Grouping common alert rules into a single alert group prevents duplicate alert rules from being fired. +Alert groups show grouped alerts from an Alertmanager instance. By default, alert rules are grouped by the label keys for the default policy in notification policies. Grouping common alert rules into a single alert group prevents duplicate alert rules from being fired. You can view alert groups and also filter for alert rules that match specific criteria. @@ -30,7 +30,7 @@ To view alert groups, complete the following steps. 1. From the **Alertmanager** drop-down, select an external Alertmanager as your data source. By default, the `Grafana` Alertmanager is selected. 1. From **custom group by** drop-down, select a combination of labels to view a grouping other than the default. This is useful for debugging and verifying your grouping of notification policies. -If an alert does not contain labels specified either in the grouping of the root policy or the custom grouping, then the alert is added to a catch all group with a header of `No grouping`. +If an alert does not contain labels specified either in the grouping of the default policy or the custom grouping, then the alert is added to a catch all group with a header of `No grouping`. ## Filter alerts diff --git a/docs/sources/dashboards/_index.md b/docs/sources/dashboards/_index.md index c548e42e61c..11c1d5055d5 100644 --- a/docs/sources/dashboards/_index.md +++ b/docs/sources/dashboards/_index.md @@ -1,6 +1,12 @@ --- aliases: - features/dashboard/dashboards/ +cascade: + labels: + products: + - cloud + - enterprise + - oss title: Dashboards weight: 70 --- diff --git a/docs/sources/dashboards/create-reports/index.md b/docs/sources/dashboards/create-reports/index.md index 7def573355e..3d11ae5e0cc 100644 --- a/docs/sources/dashboards/create-reports/index.md +++ b/docs/sources/dashboards/create-reports/index.md @@ -236,15 +236,17 @@ You can customize the branding options. Report branding: -- **Company logo URL:** Company logo displayed in the report PDF. Defaults to the Grafana logo. +- **Company logo:** Company logo displayed in the report PDF. It can be configured by specifying a URL, or by uploading a file. Defaults to the Grafana logo. Email branding: -- **Company logo URL:** Company logo displayed in the report PDF. Defaults to the Grafana logo. +- **Company logo:** Company logo displayed in the report email. It can be configured by specifying a URL, or by uploading a file. Defaults to the Grafana logo. - **Email footer:** Toggle to enable the report email footer. Select **Sent by** or **None**. - **Footer link text:** Text of the link in the report email footer. Defaults to `Grafana`. - **Footer link URL:** Link of the report email footer. +> Note: Currently, the API does not allow for the simultaneous upload of files with identical names for both the email logo and report logo. You can still upload the same file for each logo separately in two distinct steps. + ## Troubleshoot reporting To troubleshoot and get more log information, enable debug logging in the configuration file. Refer to [Configuration]({{< relref "../../setup-grafana/configure-grafana/#filters" >}}) for more information. diff --git a/docs/sources/dashboards/dashboard-public/index.md b/docs/sources/dashboards/dashboard-public/index.md index 5563ca7683b..d6b85e8ea1b 100644 --- a/docs/sources/dashboards/dashboard-public/index.md +++ b/docs/sources/dashboards/dashboard-public/index.md @@ -38,7 +38,7 @@ If you are using Docker, use an environment variable to enable public dashboards --env GF_FEATURE_TOGGLES_ENABLE=publicDashboards ``` -> **Note:** For Grafana Cloud, you will need to contact support to have the feature enabled. +> **Note:** For Grafana Cloud, contact support to have the feature enabled. ## Make a dashboard public @@ -64,7 +64,63 @@ The dashboard is no longer accessible, even with the link, until you make it sha The link no longer works. You must create a new public URL as in [Make a dashboard public](#make-a-dashboard-public). -## Supported datasources +## Email sharing + +> **Note:** Available in [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud Pro and Advanced](/docs/grafana-cloud). + +Email sharing allows you to share your public dashboard with only specific people via email, instead of having it accessible to anyone with the URL. + +### Enable email sharing + +> **Note:** For Grafana Cloud, contact support to have the feature enabled. + +Add the `publicDashboardsEmailSharing` feature toggle to your `custom.ini` file. + +``` +[feature_toggles] +publicDashboardsEmailSharing = true +``` + +### Invite a viewer + +1. Click the sharing icon to the right of the dashboard title. +1. Click the **Public dashboard** tab. +1. Click **Only specified people**. +1. Enter the email you want to share the public dashboard with. +1. Click **Invite**. +1. The recipient(s) will receive an email with a one-time use link. This link must be used within **one hour** or it expires. Once the link is used, the viewer has access to the public dashboard for **30 days**. + +### Viewers requesting access + +If a viewer without access tries to navigate to the public dashboard, they'll be asked to request access by providing their email. They will receive an email with a new one-time use link if the email they provided has already been invited to view the public dashboard and has not been revoked. + +If the viewer doesn't have an invitation or it's been revoked, you won't be notified and no link is sent. + +### Revoke access for a viewer + +1. Click the sharing icon to the right of the dashboard title. +1. Click the **Public dashboard** tab. +1. Click **Revoke** on the viewer you'd like to revoke access for. + +Immediately, the viewer no longer has access to the public dashboard, nor can they use any existing one-time use links they may have. + +### Reinvite a viewer + +1. Click the sharing icon to the right of the dashboard title. +1. Click the **Public dashboard** tab. +1. Click **Resend** on the viewer you'd like to re-share the public dashboard with. + +The viewer will receive an email with a new one-time use link. This will invalidate all previously issued links for that viewer. + +### Access limitations + +One-time use links use browser cookies, so when a viewer is granted access via one of these links, they will only have access through the browser they used to claim the link. + +A single viewer cannot generate multiple valid one-time use links. When a new one-time use link is issued for a viewer, all previous ones are invalidated. + +If a Grafana user has read access to the parent dashboard, they can view the public dashboard without needing to have access granted. + +## Supported data sources Public dashboards _should_ work with any datasource that has the properties `backend` and `alerting` both set to true in it's `package.json`. However, this cannot always be guaranteed because plugin developers can override this functionality. The following lists include data sources confirmed to work with public dashboards and data sources that should work but have not been confirmed as compatible. @@ -166,7 +222,6 @@ guaranteed because plugin developers can override this functionality. The follow - Panels that use frontend datasources will fail to fetch data. - Template variables are currently not supported, but are planned to be in the future. -- The time range is permanently set to the default time range on the dashboard. If you update the default time range for a dashboard, it will be reflected in the public dashboard. - Exemplars will be omitted from the panel. - Only annotations that query the `-- Grafana --` datasource are supported. - Organization annotations are not supported. diff --git a/docs/sources/datasources/_index.md b/docs/sources/datasources/_index.md index cd1bf1dd095..c85f69d6021 100644 --- a/docs/sources/datasources/_index.md +++ b/docs/sources/datasources/_index.md @@ -2,6 +2,12 @@ aliases: - data-sources/ - overview/ +cascade: + labels: + products: + - cloud + - enterprise + - oss title: Data sources weight: 60 --- diff --git a/docs/sources/datasources/jaeger/_index.md b/docs/sources/datasources/jaeger/_index.md index 0d2bcb14636..c1832f9679f 100644 --- a/docs/sources/datasources/jaeger/_index.md +++ b/docs/sources/datasources/jaeger/_index.md @@ -22,6 +22,8 @@ For instructions on how to add a data source to Grafana, refer to the [administr Only users with the organization administrator role can add data sources. Administrators can also [configure the data source via YAML]({{< relref "#provision-the-data-source" >}}) with Grafana's provisioning system. +Once you've added the data source, you can [configure it]({{< relref "#configure-the-data-source" >}}) so your Grafana instance's users can create queries in the [query editor]({{< relref "#query-the-data-source" >}}) when the users [build dashboards]({{< relref "../../dashboards/build-dashboards/" >}}) and use [Explore]({{< relref "../../explore/" >}}). + You can also [upload a JSON trace file]({{< relref "#upload-a-json-trace-file" >}}), and [link a trace ID from logs]({{< relref "#link-a-trace-id-from-logs" >}}) in Loki. ## Configure the data source @@ -43,47 +45,78 @@ Set the data source's basic configuration options carefully: | **User** | Defines the user name for basic authentication. | | **Password** | Defines the password for basic authentication. | -You can also configure settings specific to the Jaeger data source: +You can also configure settings specific to the Jaeger data source. These options are described in the sections below. -### Configure trace to logs +### Trace to logs -{{< figure src="/static/img/docs/explore/traces-to-logs-settings-8-2.png" class="docs-image--no-shadow" caption="Screenshot of the trace to logs settings" >}} +![Trace to logs settings](/media/docs/tempo/tempo-trace-to-logs-9-4.png) > **Note:** Available in Grafana v7.4 and higher. +> If you use Grafana Cloud, open a [support ticket in the Cloud Portal](/profile/org#support) to access this feature. The **Trace to logs** setting configures the [trace to logs feature]({{< relref "../../explore/trace-integration" >}}) that is available when you integrate Grafana with Jaeger. -**To configure trace to logs:** +There are two ways to configure the trace to logs feature: + +- Use a simplified configuration with default query, or +- Configure a custom query where you can use a [template language]({{< relref "../../dashboards/variables/variable-syntax">}}) to interpolate variables from the trace or span. + +#### Use a simple configuration 1. Select the target data source. -2. Select which tags to use in the logs query. The tags you configure must be present in the spans attributes or resources for a trace to logs span link to appear. - - **Single tag** - - Configuring `job` as a tag and clicking on a span link will take you to your configured logs datasource with the query `{job='value from clicked span'}`. - - **Multiple tags** - - If multiple tags are used they will be concatenated so the logs query would look like `{job='value from clicked span', service='value from clicked span'}`. - - **Mapped tags** - - For a mapped tag `service.name` with value `service`, clicking on a span link will take you to your configured logs datasource with the query `{service='value from clicked span'}` instead of `{service.name='value from clicked span'}`. - - This is useful for instances where your tracing datasource tags and your logs datasource tags don't match one-to-one. +1. Set start and end time shift. Since the logs timestamps may not exactly match the timestamps of the spans in trace, it may be necessary to search in larger or shifted time range to find the desired logs. +1. Select which tags to use in the logs query. The tags you configure must be present in the spans attributes or resources for a trace to logs span link to appear. You can optionally configure a new name for the tag. This is useful if the tag has dots in the name and the target data source does not allow dots in labels. In that case, you can, for example, remap `http.status` to `http_status`. +1. Optionally, switch on the **Filter by trace ID** and/or **Filter by span ID** setting to further filter the logs if your logs consistently contain trace or span IDs. + +#### Configure a custom query + +1. Select the target data source. +1. Set start and end time shift. Since the logs timestamps may not exactly match the timestamps of the spans in the trace, you may need to widen or shift the time range to find the desired logs. +1. Optionally, select tags to map. These tags can be used in the custom query with `${__tags}` variable. This variable will interpolate the mapped tags as a list in an appropriate syntax for the data source and will only include the tags that were present in the span omitting those that weren't present. You can optionally configure a new name for the tag. This is useful in cases where the tag has dots in the name and the target data source does not allow dots in labels. For example, you can remap `http.status` to `http_status`. If you don't map any tags here, you can still use any tag in the query like this `method="${__span.tags.method}"`. +1. Skip **Filter by trace ID** and **Filter by span ID** settings as these cannot be used with a custom query. +1. Switch on **Use custom query**. +1. Specify a custom query to be used to query the logs. You can use various variables to make that query relevant for current span. The link is present only if all the variables are interpolated with non-empty values to prevent creating an invalid query. + +#### Variables that can be used in a custom query + +To use a variable you need to wrap it in `${}`. For example: `${__span.name}`. + +| Variable name | Description | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **\_\_tags** | This variable uses the tag mapping from the UI to create a label matcher string in the specific data source syntax. The variable only uses tags that are present in the span. The link is still created even if only one of those tags is present in the span. You can use this if all tags are not required for the query to be useful. | +| **\_\_span.spanId** | The ID of the span. | +| **\_\_span.traceId** | The ID of the trace. | +| **\_\_span.duration** | The duration of the span. | +| **\_\_span.name** | Name of the span. | +| **\_\_span.tags** | Namespace for the tags in the span. To access a specific tag named `version`, you would use `${__span.tags.version}`. In case the tag contains dot, you have to access it as `${__span.tags["http.status"]}`. | +| **\_\_trace.traceId** | The ID of the trace. | +| **\_\_trace.duration** | The duration of the trace. | +| **\_\_trace.name** | The name of the trace. | The following table describes the ways in which you can configure your trace to logs settings: -| Name | Description | -| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Data source** | Sets the target data source. | -| **Tags** | Defines the tags to use in the logs query. Default is `'cluster', 'hostname', 'namespace', 'pod'`. | -| **Map tag names** | Enables configuring how Jaeger tag names map to logs label names. For example, map `service.name` to `service`. | -| **Span start time shift** | Shifts the start time for the logs query based on the span start time. To extend to the past, use a negative value. Use time interval units like `5s`, `1m`, `3h`. Default is `0`. | -| **Span end time shift** | Shifts the end time for the logs query based on the span end time. Use time interval units. Default is `0`. | -| **Filter by Trace ID** | Toggles whether to append the trace ID to the logs query. | -| **Filter by Span ID** | Toggles whether to append the span ID to the logs query. | +| Setting name | Description | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Data source** | Defines the target data source. You can select only Loki or Splunk \[logs\] data sources. | +| **Span start time shift** | Shifts the start time for the logs query, based on the span's start time. You can use time units, such as `5s`, `1m`, `3h`. To extend the time to the past, use a negative value. Default: `0`. | +| **Span end time shift** | Shifts the end time for the logs query, based on the span's end time. You can use time units. Default: `0`. | +| **Tags** | Defines the the tags to use in the logs query. Default is `cluster`, `hostname`, `namespace`, `pod`. You can change the tag name for example to remove dots from the name if they are not allowed in the target data source. For example map `http.status` to `http_status`. | +| **Filter by trace ID** | Toggles whether to append the trace ID to the logs query. | +| **Filter by span ID** | Toggles whether to append the span ID to the logs query. | +| **Use custom query** | Toggles use of custom query with interpolation. | +| **Query** | Input to write custom query. Use variable interpolation to customize it with variables from span. | -### Configure trace to metrics +### Trace to metrics > **Note:** This feature is behind the `traceToMetrics` [feature toggle]({{< relref "../../setup-grafana/configure-grafana#feature_toggles" >}}). +> If you use Grafana Cloud, open a [support ticket in the Cloud Portal](/profile/org#support) to access this feature. -The **Trace to metrics** section configures the [trace to metrics feature](/blog/2022/08/18/new-in-grafana-9.1-trace-to-metrics-allows-users-to-navigate-from-a-trace-span-to-a-selected-data-source/). +The **Trace to metrics** section configures the [trace to metrics feature](/blog/2022/08/18/new-in-grafana-9.1-trace-to-metrics-allows-users-to-navigate-from-a-trace-span-to-a-selected-data-source/) available when integrating Grafana with Jaeger. -Use the settings to select the target Prometheus data source, and create any desired linked queries. +To configure trace to metrics: + +1. Select the target data source. +1. Create any desired linked queries. | Setting name | Description | | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -97,13 +130,13 @@ Each linked query consists of: Interpolate tags using the `$__tags` keyword. For example, when you configure the query `requests_total{$__tags}`with the tags `k8s.pod=pod` and `cluster`, the result looks like `requests_total{pod="nginx-554b9", cluster="us-east-1"}`. -### Enable Node Graph +### Node Graph The **Node Graph** setting enables the [Node Graph visualization]({{< relref "../../panels-visualizations/visualizations/node-graph/" >}}), which is disabled by default. -Once enabled, Grafana displays the Node Graph after loading the trace view. +Once enabled, Grafana displays the Node Graph above the trace view. -### Configure the span bar label +### Span bar label The **Span bar label** section helps you display additional information in the span bar row. @@ -159,22 +192,12 @@ datasources: basicAuthPassword: my_password ``` -## Query traces +## Query the data source You can query and display traces from Jaeger via [Explore]({{< relref "../../explore" >}}). -{{< figure src="/static/img/docs/explore/jaeger-search-form.png" class="docs-image--no-shadow" caption="Screenshot of the Jaeger query editor" >}} - -You can query by trace ID, or use the search form to find traces. - -### Query by trace ID - -{{< figure src="/static/img/docs/explore/jaeger-trace-id.png" class="docs-image--no-shadow" caption="Screenshot of the Jaeger query editor with trace ID selected" >}} - -**To query by trace ID:** - -1. Select **TraceID** from the **Query** type selector. -1. Insert the ID into the text input. +This topic explains configuration and queries specific to the Jaeger data source. +For general documentation on querying data sources in Grafana, see [Query and transform data]({{< relref "../../panels-visualizations/query-transform-data" >}}). ### Query by search @@ -188,10 +211,21 @@ You can query by trace ID, or use the search form to find traces. | **Service** | Returns a list of services. | | **Operation** | Populated when you select a service with related operations. Select `All` to query all operations. | | **Tags** | Sets tags with values in the [logfmt](https://brandur.org/logfmt) format, such as `error=true db.statement="select * from User"`. | -| **Min Duration** | Filters all traces with a duration higher than the set value. Valid values are `1.2s, 100ms, 500us`. | -| **Max Duration** | Filters all traces with a duration lower than the set value. Valid values are `1.2s, 100ms, 500us`. | +| **Min Duration** | Filters all traces with a duration higher than the set value. Possible values are `1.2s, 100ms, 500us`. | +| **Max Duration** | Filters all traces with a duration lower than the set value. Possible values are `1.2s, 100ms, 500us`. | | **Limit** | Limits the number of traces returned. | +{{< figure src="/static/img/docs/explore/jaeger-search-form.png" class="docs-image--no-shadow" caption="Screenshot of the Jaeger query editor" >}} + +### Query by trace ID + +To query a particular trace: + +1. Select the **TraceID** query type. +1. Enter the trace's ID into the **Trace ID** field. + +{{< figure src="/static/img/docs/explore/jaeger-trace-id.png" class="docs-image--no-shadow" caption="Screenshot of the Jaeger query editor with TraceID selected" >}} + ## Upload a JSON trace file You can upload a JSON file that contains a single trace and visualize it. diff --git a/docs/sources/datasources/mysql/_index.md b/docs/sources/datasources/mysql/_index.md index bab280da31f..e94da01b3a1 100644 --- a/docs/sources/datasources/mysql/_index.md +++ b/docs/sources/datasources/mysql/_index.md @@ -82,7 +82,9 @@ You can use wildcards (`*`) in place of database or table if you want to grant a You can define and configure the data source in YAML files as part of Grafana's provisioning system. For more information about provisioning, and for available configuration options, refer to [Provisioning Grafana]({{< relref "../../administration/provisioning/#data-sources" >}}). -#### Provisioning example +#### Provisioning examples + +##### Basic Provisioning ```yaml apiVersion: 1 @@ -101,6 +103,51 @@ datasources: password: ${GRAFANA_MYSQL_PASSWORD} ``` +##### Using TLS Verificaiton + +```yaml +apiVersion: 1 + +datasources: + - name: MySQL + type: mysql + url: localhost:3306 + user: grafana + jsonData: + tlsAuth: true + database: grafana + maxOpenConns: 0 # Grafana v5.4+ + maxIdleConns: 2 # Grafana v5.4+ + connMaxLifetime: 14400 # Grafana v5.4+ + secureJsonData: + password: ${GRAFANA_MYSQL_PASSWORD} + tlsClientCert: ${GRAFANA_TLS_CLIENT_CERT} + tlsCACert: ${GRAFANA_TLS_CA_CERT} +``` + +##### Use TLS and Skip Certificate Verification + +```yaml +apiVersion: 1 + +datasources: + - name: MySQL + type: mysql + url: localhost:3306 + user: grafana + jsonData: + tlsAuth: true + skipTLSVerify: true + database: grafana + maxOpenConns: 0 # Grafana v5.4+ + maxIdleConns: 2 # Grafana v5.4+ + connMaxLifetime: 14400 # Grafana v5.4+ + secureJsonData: + password: ${GRAFANA_MYSQL_PASSWORD} + tlsClientCert: ${GRAFANA_TLS_CLIENT_CERT} + tlsCACert: ${GRAFANA_TLS_CA_CERT} +``` + ## Query builder {{< figure src="/static/img/docs/v92/mysql_query_builder.png" class="docs-image--no-shadow" >}} diff --git a/docs/sources/datasources/tempo/_index.md b/docs/sources/datasources/tempo/_index.md index 1b77febbdd9..4feb6120894 100644 --- a/docs/sources/datasources/tempo/_index.md +++ b/docs/sources/datasources/tempo/_index.md @@ -15,7 +15,7 @@ weight: 1400 # Tempo data source -Grafana ships with built-in support for Tempo, a high-volume, minimal-dependency trace storage, open-source tracing solution from Grafana Labs. +Grafana ships with built-in support for [Tempo](https://grafana.com/docs/tempo/latest/), a high-volume, minimal-dependency trace storage, open-source tracing solution from Grafana Labs. This topic explains configuration and queries specific to the Tempo data source. For instructions on how to add a data source to Grafana, refer to the [administration documentation]({{< relref "../../administration/data-source-management/" >}}). Only users with the organization administrator role can add data sources. @@ -112,7 +112,7 @@ The following table describes the ways in which you can configure your trace to The **Trace to metrics** setting configures the [trace to metrics feature](/blog/2022/08/18/new-in-grafana-9.1-trace-to-metrics-allows-users-to-navigate-from-a-trace-span-to-a-selected-data-source/) available when integrating Grafana with Tempo. -**To configure trace to metrics:** +To configure trace to metrics: 1. Select the target data source. 1. Create any desired linked queries. @@ -141,7 +141,7 @@ To use the Service Graph, refer to the [Service Graph documentation]({{< relref The **Node Graph** setting enables the [node graph visualization]({{< relref "../../panels-visualizations/visualizations/node-graph/" >}}), which is disabled by default. -Once enabled, Grafana displays the node graph after loading the trace view. +Once enabled, Grafana displays the node graph above the trace view. ### Tempo search diff --git a/docs/sources/datasources/tempo/query-editor/index.md b/docs/sources/datasources/tempo/query-editor/index.md index fb54c3e5262..cb774d001a1 100644 --- a/docs/sources/datasources/tempo/query-editor/index.md +++ b/docs/sources/datasources/tempo/query-editor/index.md @@ -19,13 +19,26 @@ The Tempo data source's query editor helps you query and display traces from Tem This topic explains configuration and queries specific to the Tempo data source. For general documentation on querying data sources in Grafana, see [Query and transform data]({{< relref "../../../panels-visualizations/query-transform-data" >}}). -## Query Tempo search +## Query by search -Tempo search is an experimental feature behind a feature toggle. Use this to search for traces by service name, span name, duration range, or process-level attributes that are included in your application's instrumentation, such as HTTP status code and customer ID. To configure Tempo and the Tempo data source for search, refer to [Configure the data source]({{< relref "../#configure-the-data-source" >}}). +To search for traces: + +1. Select **Search** from the **Query** type selector. +1. Fill out the search form: + +| Name | Description | +| ---------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| **Service Name** | Returns a list of services. | +| **Span Name** | Returns a list of span names. | +| **Tags** | Sets tags with values in the [logfmt](https://brandur.org/logfmt) format, such as `error=true db.statement="select * from User"`. | +| **Min Duration** | Filters all traces with a duration higher than the set value. Possible values are `1.2s`, `100ms`, `500us`. | +| **Max Duration** | Filters all traces with a duration lower than the set value. Possible values are `1.2s`, `100ms`, `500us`. | +| **Limit** | Limits the number of traces returned. | + {{< figure src="/static/img/docs/explore/tempo-search.png" class="docs-image--no-shadow" max-width="750px" caption="Screenshot of the Tempo search feature with a trace rendered in the right panel" >}} ### Search recent traces @@ -41,18 +54,18 @@ Tempo includes the ability to search the entire backend datastore. To configure your Tempo data source to use this feature, refer to the [Tempo documentation](/docs/tempo/latest/getting-started/tempo-in-grafana/#search-of-the-backend-datastore). -## Query Loki for traces +## Query by trace ID -To find traces to visualize, you can use the [Loki query editor]({{< relref "../../loki#loki-query-editor" >}}). -For results, you must configure [derived fields]({{< relref "../../loki#configure-derived-fields" >}}) in the Loki data source that point to this data source. - -{{< figure src="/static/img/docs/tempo/query-editor-search.png" class="docs-image--no-shadow" max-width="750px" caption="Screenshot of the Tempo query editor showing the search tab" >}} - -## Trace ID search - -**To query a particular trace:** +To query a particular trace: 1. Select the **TraceID** query type. 1. Enter the trace's ID into the **Trace ID** field. {{< figure src="/static/img/docs/tempo/query-editor-traceid.png" class="docs-image--no-shadow" max-width="750px" caption="Screenshot of the Tempo TraceID query type" >}} + +## Query Loki for traces + +To find traces to visualize, you can use the [Loki query editor]({{< relref "../../loki#loki-query-editor" >}}). +For results, you must configure [derived fields]({{< relref "../../loki#configure-derived-fields" >}}) in the Loki data source that point to this data source. + +{{< figure src="/static/img/docs/tempo/query-editor-search.png" class="docs-image--no-shadow" max-width="750px" caption="Screenshot of the Tempo query editor showing the Loki Search tab" >}} diff --git a/docs/sources/datasources/testdata/_index.md b/docs/sources/datasources/testdata/_index.md index d81f41d6f85..de1e9953e0d 100644 --- a/docs/sources/datasources/testdata/_index.md +++ b/docs/sources/datasources/testdata/_index.md @@ -60,6 +60,7 @@ You can assign an **Alias** to each scenario, and many have their own options th - **CSV Metric Values** - **Datapoints Outside Range** - **Exponential heatmap bucket data** +- **Flame Graph** - **Grafana API** - **Grafana Live** - **Linear heatmap bucket data** @@ -77,6 +78,7 @@ You can assign an **Alias** to each scenario, and many have their own options th - **Slow Query** - **Streaming Client** - **Table Static** +- **Trace** - **USA generated data** ## Import a pre-configured dashboard diff --git a/docs/sources/datasources/zipkin/_index.md b/docs/sources/datasources/zipkin/_index.md index e44b7715218..bea8e24a364 100644 --- a/docs/sources/datasources/zipkin/_index.md +++ b/docs/sources/datasources/zipkin/_index.md @@ -15,13 +15,13 @@ weight: 1600 # Zipkin data source -Grafana ships with built-in support for Zipkin, an open source, distributed tracing system. +Grafana ships with built-in support for Zipkin, an open source, distributed tracing system. This topic explains configuration and queries specific to the Zipkin data source. For instructions on how to add a data source to Grafana, refer to the [administration documentation]({{< relref "../../administration/data-source-management/" >}}). Only users with the organization administrator role can add data sources. Administrators can also [configure the data source via YAML]({{< relref "#provision-the-data-source" >}}) with Grafana's provisioning system. -Once you've added the Zipkin data source, you can [configure it]({{< relref "#configure-the-data-source" >}}) so that your Grafana instance's users can create queries in its [query editor]({{< relref "#query-traces" >}}) when they [build dashboards]({{< relref "../../dashboards/build-dashboards/" >}}) and use [Explore]({{< relref "../../explore/" >}}). +Once you've added the Zipkin data source, you can [configure it]({{< relref "#configure-the-data-source" >}}) so that your Grafana instance's users can create queries in its [query editor]({{< relref "#query-the-data-source" >}}) when they [build dashboards]({{< relref "../../dashboards/build-dashboards/" >}}) and use [Explore]({{< relref "../../explore/" >}}). ## Configure the data source @@ -42,46 +42,76 @@ Set the data source's basic configuration options carefully: | **User** | Defines the user name for basic authentication. | | **Password** | Defines the password for basic authentication. | -### Configure trace to logs +### Trace to logs -{{< figure src="/static/img/docs/explore/traces-to-logs-settings-8-2.png" class="docs-image--no-shadow" caption="Screenshot of the trace to logs settings" >}} +![Trace to logs settings](/media/docs/tempo/tempo-trace-to-logs-9-4.png) > **Note:** Available in Grafana v7.4 and higher. +> If you use Grafana Cloud, open a [support ticket in the Cloud Portal](/profile/org#support) to access this feature. The **Trace to logs** setting configures the [trace to logs feature]({{< relref "../../explore/trace-integration" >}}) that is available when you integrate Grafana with Zipkin. -**To configure trace to logs:** +There are two ways to configure the trace to logs feature: + +- Use a simplified configuration with default query, or +- Configure a custom query where you can use a [template language]({{< relref "../../dashboards/variables/variable-syntax">}}) to interpolate variables from the trace or span. + +#### Use a simple configuration 1. Select the target data source. -1. Select which tags to use in the logs query. The tags you configure must be present in the spans attributes or resources for a trace to logs span link to appear. +1. Set start and end time shift. As the logs timestamps may not exactly match the timestamps of the spans in trace it may be necessary to search in larger or shifted time range to find the desired logs. +1. Select which tags to use in the logs query. The tags you configure must be present in the spans attributes or resources for a trace to logs span link to appear. You can optionally configure a new name for the tag. This is useful if the tag has dots in the name and the target data source does not allow using dots in labels. In that case, you can for example remap `http.status` to `http_status`. +1. Optionally, switch on the **Filter by trace ID** and/or **Filter by span ID** setting to further filter the logs if your logs consistently contain trace or span IDs. - - **Single tag** - - Configuring `job` as a tag and clicking on a span link will take you to your configured logs datasource with the query `{job='value from clicked span'}`. - - **Multiple tags** - - If multiple tags are used they will be concatenated so the logs query would look like `{job='value from clicked span', service='value from clicked span'}`. - - **Mapped tags** - - For a mapped tag `service.name` with value `service`, clicking on a span link will take you to your configured logs datasource with the query `{service='value from clicked span'}` instead of `{service.name='value from clicked span'}`. - - This is useful for instances where your tracing datasource tags and your logs datasource tags don't match one-to-one. +#### Configure a custom query + +1. Select the target data source. +1. Set start and end time shift. Since the logs timestamps may not exactly match the timestamps of the spans in the trace, you may need to widen or shift the time range to find the desired logs. +1. Optionally, select tags to map. These tags can be used in the custom query with `${__tags}` variable. This variable will interpolate the mapped tags as list in an appropriate syntax for the data source and will only include the tags that were present in the span omitting those that weren't present. You can optionally configure a new name for the tag. This is useful when the tag has dots in the name and the target data source does not allow using dots in labels. For example, you can remap `http.status` to `http_status`. If you don't map any tags here, you can still use any tag in the query like this `method="${__span.tags.method}"`. +1. Skip **Filter by trace ID** and **Filter by span ID** settings as these cannot be used with a custom query. +1. Switch on **Use custom query**. +1. Specify a custom query to be used to query the logs. You can use various variables to make that query relevant for current span. The link will only be shown only if all the variables are interpolated with non-empty values to prevent creating an invalid query. + +#### Variables that can be used in a custom query + +To use a variable you need to wrap it in `${}`. For example `${__span.name}`. + +| Variable name | Description | +| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **\_\_tags** | This variable uses the tag mapping from the UI to create a label matcher string in the specific data source syntax. The variable only uses tags that are present in the span. The link is still created even if only one of those tags is present in the span. You can use this if all tags are not required for the query to be useful. | +| **\_\_span.spanId** | The ID of the span. | +| **\_\_span.traceId** | The ID of the trace. | +| **\_\_span.duration** | The duration of the span. | +| **\_\_span.name** | Name of the span. | +| **\_\_span.tags** | Namespace for the tags in the span. To access a specific tag named `version`, you would use `${__span.tags.version}`. In case the tag contains dot, you have to access it as `${__span.tags["http.status"]}`. | +| **\_\_trace.traceId** | The ID of the trace. | +| **\_\_trace.duration** | The duration of the trace. | +| **\_\_trace.name** | The name of the trace. | The following table describes the ways in which you can configure your trace to logs settings: -| Name | Description | -| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Data source** | Sets the target data source. | -| **Tags** | Defines the tags to use in the logs query. Default is `'cluster', 'hostname', 'namespace', 'pod'`. | -| **Map tag names** | Enables configuring how Jaeger tag names map to logs label names. For example, map `service.name` to `service`. | -| **Span start time shift** | Shifts the start time for the logs query based on the span start time. To extend to the past, use a negative value. Use time interval units like `5s`, `1m`, `3h`. Default is `0`. | -| **Span end time shift** | Shifts the end time for the logs query based on the span end time. Use time interval units. Default is `0`. | -| **Filter by Trace ID** | Toggles whether to append the trace ID to the logs query. | -| **Filter by Span ID** | Toggles whether to append the span ID to the logs query. | +| Setting name | Description | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Data source** | Defines the target data source. You can select only Loki or Splunk \[logs\] data sources. | +| **Span start time shift** | Shifts the start time for the logs query, based on the span's start time. You can use time units, such as `5s`, `1m`, `3h`. To extend the time to the past, use a negative value. Default: `0`. | +| **Span end time shift** | Shifts the end time for the logs query, based on the span's end time. You can use time units. Default: `0`. | +| **Tags** | Defines the the tags to use in the logs query. Default is `cluster`, `hostname`, `namespace`, `pod`. You can change the tag name for example to remove dots from the name if they are not allowed in the target data source. For example map `http.status` to `http_status`. | +| **Filter by trace ID** | Toggles whether to append the trace ID to the logs query. | +| **Filter by span ID** | Toggles whether to append the span ID to the logs query. | +| **Use custom query** | Toggles use of custom query with interpolation. | +| **Query** | Input to write custom query. Use variable interpolation to customize it with variables from span. | -### Configure trace to metrics +### Trace to metrics > **Note:** This feature is behind the `traceToMetrics` [feature toggle]({{< relref "../../setup-grafana/configure-grafana#feature_toggles" >}}). +> If you use Grafana Cloud, open a [support ticket in the Cloud Portal](/profile/org#support) to access this feature. -The **Trace to metrics** section configures the [trace to metrics feature](/blog/2022/08/18/new-in-grafana-9.1-trace-to-metrics-allows-users-to-navigate-from-a-trace-span-to-a-selected-data-source/). +The **Trace to metrics** section configures the [trace to metrics feature](/blog/2022/08/18/new-in-grafana-9.1-trace-to-metrics-allows-users-to-navigate-from-a-trace-span-to-a-selected-data-source/) available when integrating Grafana with Zipkin. -Use the settings to select the target Prometheus data source, and create any desired linked queries. +To configure trace to metrics: + +1. Select the target data source. +1. Create any desired linked queries. | Setting name | Description | | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -95,13 +125,13 @@ Each linked query consists of: Interpolate tags using the `$__tags` keyword. For example, when you configure the query `requests_total{$__tags}`with the tags `k8s.pod=pod` and `cluster`, the result looks like `requests_total{pod="nginx-554b9", cluster="us-east-1"}`. -### Enable Node Graph +### Node Graph The **Node Graph** setting enables the [Node Graph visualization]({{< relref "../../panels-visualizations/visualizations/node-graph/" >}}), which is disabled by default. Once enabled, Grafana displays the Node Graph after loading the trace view. -### Configure the span bar label +### Span bar label The **Span bar label** section helps you display additional information in the span bar row. @@ -113,18 +143,23 @@ You can choose one of three options: | **Duration** | _(Default)_ Displays the span duration on the span bar row. | | **Tag** | Displays the span tag on the span bar row. You must also specify which tag key to use to get the tag value, such as `span.kind`. | -## Query traces +## Query the data source You can query and display traces from Zipkin via [Explore]({{< relref "../../explore/" >}}). This topic explains configuration and queries specific to the Zipkin data source. For general documentation on querying data sources in Grafana, see [Query and transform data]({{< relref "../../panels-visualizations/query-transform-data" >}}). +### Query by trace ID + +To query a particular trace: + +1. Select the **TraceID** query type. +1. Enter the trace's ID into the **Trace ID** field. + {{< figure src="/static/img/docs/v70/zipkin-query-editor.png" class="docs-image--no-shadow" caption="Screenshot of the Zipkin query editor" >}} -To query by trace ID, enter it. - -{{< figure src="/static/img/docs/v70/zipkin-query-editor-open.png" class="docs-image--no-shadow" caption="Screenshot of the Zipkin query editor with trace selector expanded" >}} +### Query by trace selector To select a particular trace from all traces logged in the time range you have selected in Explore, you can also query by trace selector. The trace selector has three levels of nesting: @@ -133,6 +168,8 @@ The trace selector has three levels of nesting: - Particular operation, part of the selected service - Specific trace in which the selected operation occurred, represented by the root operation name and trace duration +{{< figure src="/static/img/docs/v70/zipkin-query-editor-open.png" class="docs-image--no-shadow" caption="Screenshot of the Zipkin query editor with trace selector expanded" >}} + ## View data mapping in the trace UI You can view Zipkin annotations in the trace view as logs with annotation value displayed under the annotation key. diff --git a/docs/sources/developers/angular_deprecation.md b/docs/sources/developers/angular_deprecation.md index 8051888a8ba..7b2e48433be 100644 --- a/docs/sources/developers/angular_deprecation.md +++ b/docs/sources/developers/angular_deprecation.md @@ -10,26 +10,30 @@ weight: 500 # Angular support deprecation -Angular plugin support is deprecated, and it will be removed in a future release. There are still many community plugins that depend on Grafana’s angular plugin support for them to work. The same is true for many internal (private) plugins developed over the years by Grafana users. Grafana version 9 will have a server configuration option, global for the whole instance, that will control if angular plugin support is available or not. By default angular support is still enabled but this will soon change as we complete the migration of all angular code in the core product. +Angular plugin support is deprecated and will be removed in a future release. There are still many community plugins that rely on Grafana's Angular plugin support to work. The same is true for many internal (private) plugins that have been developed by Grafana users over the years. Grafana version 9 has a server configuration option that is global to the entire instance and controls whether Angular plugin support is available or not. By default, Angular support is still enabled, but that will change soon once we complete the migration of all Angular code in the core product. -## Why are we deprecating angular support? +## Why are we deprecating Angular support? -AngularJS is an old frontend framework that stopped active development many years ago. As a result, it is a security risk. AngularJS also requires unsafe-eval in the CSP (Content Security Policy) settings which also reduces the security level of how javascript is executed in the browser. +AngularJS is an old frontend framework whose active development stopped many years ago. Therefore, it poses a security risk. As Grafana itself had already started migrating to React in v5, this presented the most logical framework for our plugin platform. AngularJS also requires unsafe-eval in the CSP (Content Security Policy) settings, which also reduces the security of running JavaScript in the browser. -## When will angular plugins stop working? +## When will Angular plugins stop working? -We hope to migrate the last remaining angular code in core Grafana later this year. Then the setting enable_angular_support can be disable by default. This will make all angular plugins stop working. If you still depend on community or internally developed plugins that require AngularJS then you will have to enable this option. +Our goal is to transfer all the remaining Angular code to the core of Grafana before Grafana 10 is released in Summer 2023. Once this is done, the option "[angular_support_enabled](https://github.com/grafana/grafana/blob/d61bcdf4ca5e69489e0067c56fbe7f0bfdf84ee4/conf/defaults.ini#L362)" will be disabled by default, resulting in the deactivation of all Angular plugins. In case you still rely on AngularJS-based plugins developed internally or by the community, you will need to enable this option to continue using them. -This is a good time to start working on migrating plugins to React. +## When will we remove Angular support completely? -Our plan is to fully remove angular plugin support in version 10 released in 2023. Meaning all plugins that do depend on angular will stop working and this temporary option to enable it introduced in v9 will be removed. +Our plan is to completely remove support for Angular plugins in version 11, which will be released in 2024. This means that all plugins that depend on Angular will stop working and the temporary option introduced in version 10 to enable Angular will be removed. -## How do I migrate an angular plugin to React? +## How do I migrate an Angular plugin to React? Depending on if it’s a data source plugin, panel plugin, or app plugin the process will differ. For panels, the rendering logic could in some cases be easily preserved but all options need to be redone to use the declarative options framework. For data source plugins the query editor and config options will likely need a total rewrite. +## How do I encourage a community plugin to migrate? + +We encourage you to locate the repository of the corresponding plugin and create or upvote an Issue within it if you are using a plugin that is still based on Angular. + ### Links - [Migrate Angular to React](https://grafana.com/docs/grafana/latest/developers/plugins/migration-guide/#migrate-a-plugin-from-angular-to-react) diff --git a/docs/sources/developers/http_api/access_control.md b/docs/sources/developers/http_api/access_control.md index fe3d1a85da3..23115da777d 100644 --- a/docs/sources/developers/http_api/access_control.md +++ b/docs/sources/developers/http_api/access_control.md @@ -17,11 +17,11 @@ title: RBAC HTTP API # RBAC API -> Role-based access control API is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}). +> Role-based access control API is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "/docs/grafana/latest/introduction/grafana-enterprise" >}}). The API can be used to create, update, delete, get, and list roles. -To check which basic or fixed roles have the required permissions, refer to [RBAC role definitions]({{< ref "../../administration/roles-and-permissions/access-control/rbac-fixed-basic-role-definitions/" >}}). +To check which basic or fixed roles have the required permissions, refer to [RBAC role definitions]({{< ref "/docs/grafana/latest/administration/roles-and-permissions/access-control/rbac-fixed-basic-role-definitions" >}}). ## Get status @@ -222,7 +222,7 @@ Content-Type: application/json; charset=UTF-8 `POST /api/access-control/roles` -Creates a new custom role and maps given permissions to that role. Note that roles with the same prefix as [Fixed roles]({{< relref "../../administration/roles-and-permissions/access-control/#fixed-roles" >}}) can't be created. +Creates a new custom role and maps given permissions to that role. Note that roles with the same prefix as [Fixed roles]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control#fixed-roles" >}}) can't be created. #### Required permissions @@ -260,24 +260,24 @@ Content-Type: application/json #### JSON body schema -| Field Name | Date Type | Required | Description | -| ----------- | ---------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| uid | string | No | UID of the role. If not present, the UID will be automatically created for you and returned in response. Refer to the [Custom roles]({{< relref "../../administration/roles-and-permissions/access-control/#custom-roles" >}}) for more information. | -| global | boolean | No | A flag indicating if the role is global or not. If set to `false`, the default org ID of the authenticated user will be used from the request. | -| version | number | No | Version of the role. If not present, version 0 will be assigned to the role and returned in the response. Refer to the [Custom roles]({{< relref "../../administration/roles-and-permissions/access-control/#custom-roles" >}}) for more information. | -| name | string | Yes | Name of the role. Refer to [Custom roles]({{< relref "../../administration/roles-and-permissions/access-control/#custom-roles" >}}) for more information. | -| description | string | No | Description of the role. | -| displayName | string | No | Display name of the role, visible in the UI. | -| group | string | No | The group name the role belongs to. | -| hidden | boolean | No | Specify whether the role is hidden or not. If set to `true`, then the role does not show in the role picker. It will not be listed by API endpoints unless explicitly specified. | -| permissions | Permission | No | If not present, the role will be created without any permissions. | +| Field Name | Date Type | Required | Description | +| ----------- | ---------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| uid | string | No | UID of the role. If not present, the UID will be automatically created for you and returned in response. Refer to the [Custom roles]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control#custom-roles" >}}) for more information. | +| global | boolean | No | A flag indicating if the role is global or not. If set to `false`, the default org ID of the authenticated user will be used from the request. | +| version | number | No | Version of the role. If not present, version 0 will be assigned to the role and returned in the response. Refer to the [Custom roles]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/#custom-roles" >}}) for more information. | +| name | string | Yes | Name of the role. Refer to [Custom roles]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control#custom-roles" >}}) for more information. | +| description | string | No | Description of the role. | +| displayName | string | No | Display name of the role, visible in the UI. | +| group | string | No | The group name the role belongs to. | +| hidden | boolean | No | Specify whether the role is hidden or not. If set to `true`, then the role does not show in the role picker. It will not be listed by API endpoints unless explicitly specified. | +| permissions | Permission | No | If not present, the role will be created without any permissions. | **Permission** -| Field Name | Data Type | Required | Description | -| ---------- | --------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| action | string | Yes | Refer to [Custom role actions and scopes]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for full list of available actions. | -| scope | string | No | If not present, no scope will be mapped to the permission. Refer to [Custom role actions and scopes]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for full list of available scopes. | +| Field Name | Data Type | Required | Description | +| ---------- | --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| action | string | Yes | Refer to [Custom role actions and scopes]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for full list of available actions. | +| scope | string | No | If not present, no scope will be mapped to the permission. Refer to [Custom role actions and scopes]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for full list of available scopes. | #### Example response @@ -375,10 +375,10 @@ Content-Type: application/json **Permission** -| Field Name | Data Type | Required | Description | -| ---------- | --------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| action | string | Yes | Refer to [Custom role actions and scopes]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for full list of available actions. | -| scope | string | No | If not present, no scope will be mapped to the permission. Refer to [Custom role actions and scopes]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for full list of available scopes. | +| Field Name | Data Type | Required | Description | +| ---------- | --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| action | string | Yes | Refer to [Custom role actions and scopes]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for full list of available actions. | +| scope | string | No | If not present, no scope will be mapped to the permission. Refer to [Custom role actions and scopes]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for full list of available scopes. | #### Example response @@ -448,10 +448,10 @@ Accept: application/json #### Query parameters -| Param | Type | Required | Description | -| ------ | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| force | boolean | No | When set to `true`, the role will be deleted with all it's assignments. | -| global | boolean | No | A flag indicating if the role is global or not. If set to false, the default org ID of the authenticated user will be used from the request. Refer to the [About RBAC]({{< relref "../../administration/roles-and-permissions/access-control/" >}}) for more information. | +| Param | Type | Required | Description | +| ------ | ------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| force | boolean | No | When set to `true`, the role will be deleted with all it's assignments. | +| global | boolean | No | A flag indicating if the role is global or not. If set to false, the default org ID of the authenticated user will be used from the request. Refer to the [About RBAC]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control" >}}) for more information. | #### Example response diff --git a/docs/sources/developers/http_api/alerting.md b/docs/sources/developers/http_api/alerting.md index b91cbddcaf1..312a79519d8 100644 --- a/docs/sources/developers/http_api/alerting.md +++ b/docs/sources/developers/http_api/alerting.md @@ -19,9 +19,9 @@ title: 'Alerting HTTP API ' This topic is relevant for the [legacy dashboard alerts](https://grafana.com/docs/grafana/v8.5/alerting/old-alerting/) only. -If you are using Grafana Alerting, refer to [Alerting provisioning API](https://grafana.com/docs/grafana/latest/developers/http_api/alerting_provisioning/) +If you are using Grafana Alerting, refer to [Alerting provisioning API]({{< relref "/docs/grafana/latest/developers/http_api/alerting_provisioning" >}}) -You can find Grafana Alerting API specification details [here](https://editor.swagger.io/?url=https://raw.githubusercontent.com/grafana/grafana/main/pkg/services/ngalert/api/tooling/post.json). Also, refer to [Grafana Alerting alerts documentation]({{< relref "../../alerting/" >}}) for details on how to create and manage new alerts. +You can find Grafana Alerting API specification details [here](https://editor.swagger.io/?url=https://raw.githubusercontent.com/grafana/grafana/main/pkg/services/ngalert/api/tooling/post.json). Also, refer to [Grafana Alerting alerts documentation]({{< relref "/docs/grafana/latest/alerting" >}}) for details on how to create and manage new alerts. You can use the Alerting API to get information about legacy dashboard alerts and their states but this API cannot be used to modify the alert. To create new alerts or modify them you need to update the dashboard JSON that contains the alerts. @@ -167,4 +167,4 @@ Content-Type: application/json ## Pause all alerts -See [Admin API]({{< relref "admin/#pause-all-alerts" >}}). +See [Admin API]({{< relref "/docs/grafana/latest/developers/http_api/admin#pause-all-alerts" >}}). diff --git a/docs/sources/developers/http_api/alerting_notification_channels.md b/docs/sources/developers/http_api/alerting_notification_channels.md index dd4dfe5f56a..ea8d4cac8ea 100644 --- a/docs/sources/developers/http_api/alerting_notification_channels.md +++ b/docs/sources/developers/http_api/alerting_notification_channels.md @@ -25,7 +25,7 @@ The identifier (id) of a notification channel is an auto-incrementing numeric va The unique identifier (uid) of a notification channel can be used for uniquely identify a notification channel between multiple Grafana installs. It's automatically generated if not provided when creating a notification channel. The uid allows having consistent URLs for accessing notification channels and when syncing notification channels between multiple -Grafana installations, refer to [alert notification channel provisioning]({{< relref "../../administration/provisioning/#alert-notification-channels" >}}). +Grafana installations, refer to [alert notification channel provisioning]({{< relref "/docs/grafana/latest/administration/provisioning#alert-notification-channels" >}}). The uid can have a maximum length of 40 characters. diff --git a/docs/sources/developers/http_api/annotations.md b/docs/sources/developers/http_api/annotations.md index 0c8b5efd9f2..be1c3f9d5a1 100644 --- a/docs/sources/developers/http_api/annotations.md +++ b/docs/sources/developers/http_api/annotations.md @@ -18,7 +18,7 @@ title: Annotations HTTP API Annotations are saved in the Grafana database (sqlite, mysql or postgres). Annotations can be organization annotations that can be shown on any dashboard by configuring an annotation data source - they are filtered by tags. Or they can be tied to a panel on a dashboard and are then only shown on that panel. -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for more information. ## Find Annotations diff --git a/docs/sources/developers/http_api/curl-examples.md b/docs/sources/developers/http_api/curl-examples.md index 2d0a5a5de06..b733e4ca28d 100644 --- a/docs/sources/developers/http_api/curl-examples.md +++ b/docs/sources/developers/http_api/curl-examples.md @@ -22,16 +22,16 @@ The most basic example for a dashboard for which there is no authentication. You curl http://localhost:3000/api/search ``` -Here's a cURL command that works for getting the home dashboard when you are running Grafana locally with [basic authentication]({{< relref "../../setup-grafana/configure-security/configure-authentication/#basic-auth" >}}) enabled using the default admin credentials: +Here's a cURL command that works for getting the home dashboard when you are running Grafana locally with [basic authentication]({{< relref "/docs/grafana/latest/setup-grafana/configure-security/configure-authentication#basic-auth" >}}) enabled using the default admin credentials: ``` curl http://admin:admin@localhost:3000/api/search ``` -To pass a username and password with [HTTP basic authorization]({{< relref "../../administration/roles-and-permissions/access-control/manage-rbac-roles/" >}}), encode them as base64. +To pass a username and password with [HTTP basic authorization]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/manage-rbac-roles" >}}), encode them as base64. You can't use authorization tokens in the request. -For example, to [list permissions associated with roles]({{< relref "../../administration/roles-and-permissions/access-control/manage-rbac-roles/" >}}) given a username of `user` and password of `password`, use: +For example, to [list permissions associated with roles]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/manage-rbac-roles" >}}) given a username of `user` and password of `password`, use: ``` curl --location '/api/access-control/builtin-roles' --user 'user:password' diff --git a/docs/sources/developers/http_api/dashboard.md b/docs/sources/developers/http_api/dashboard.md index 8cb569259a8..7ecbf17cf45 100644 --- a/docs/sources/developers/http_api/dashboard.md +++ b/docs/sources/developers/http_api/dashboard.md @@ -14,7 +14,7 @@ title: Dashboard HTTP API # Dashboard API -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for more information. ## Identifier (id) vs unique identifier (uid) @@ -22,7 +22,7 @@ The identifier (id) of a dashboard is an auto-incrementing numeric value and is The unique identifier (uid) of a dashboard can be used for uniquely identify a dashboard between multiple Grafana installs. It's automatically generated if not provided when creating a dashboard. The uid allows having consistent URLs for accessing -dashboards and when syncing dashboards between multiple Grafana installs, see [dashboard provisioning]({{< relref "../../administration/provisioning/#dashboards" >}}) +dashboards and when syncing dashboards between multiple Grafana installs, see [dashboard provisioning]({{< relref "/docs/grafana/latest/administration/provisioning#dashboards" >}}) for more information. This means that changing the title of a dashboard will not break any bookmarked links to that dashboard. The uid can have a maximum length of 40 characters. @@ -76,7 +76,7 @@ JSON Body schema: - **folderUid** – The UID of the folder to save the dashboard in. Overrides the `folderId`. - **overwrite** – Set to true if you want to overwrite existing dashboard with newer version, same dashboard title in folder or same dashboard uid. - **message** - Set a commit message for the version history. -- **refresh** - Set the dashboard refresh interval. If this is lower than [the minimum refresh interval]({{< relref "../../setup-grafana/configure-grafana/#min_refresh_interval" >}}), then Grafana will ignore it and will enforce the minimum refresh interval. +- **refresh** - Set the dashboard refresh interval. If this is lower than [the minimum refresh interval]({{< relref "/docs/grafana/latest/setup-grafana/configure-grafana#min_refresh_interval" >}}), then Grafana will ignore it and will enforce the minimum refresh interval. For adding or updating an alert rule for a dashboard panel the user should declare a `dashboard.panels.alert` block. diff --git a/docs/sources/developers/http_api/dashboard_permissions.md b/docs/sources/developers/http_api/dashboard_permissions.md index cb5fe1d2a12..ab4bc89ec95 100644 --- a/docs/sources/developers/http_api/dashboard_permissions.md +++ b/docs/sources/developers/http_api/dashboard_permissions.md @@ -28,7 +28,7 @@ The permission levels for the permission field: - 2 = Edit - 4 = Admin -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for more information. ## Get permissions for a dashboard diff --git a/docs/sources/developers/http_api/data_source.md b/docs/sources/developers/http_api/data_source.md index 6684b2cea22..5cdc18b1939 100644 --- a/docs/sources/developers/http_api/data_source.md +++ b/docs/sources/developers/http_api/data_source.md @@ -15,7 +15,7 @@ title: Data source HTTP API # Data source API -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for more information. ## Get all data sources diff --git a/docs/sources/developers/http_api/datasource_permissions.md b/docs/sources/developers/http_api/datasource_permissions.md index a97db97c3ef..db755a6ba20 100644 --- a/docs/sources/developers/http_api/datasource_permissions.md +++ b/docs/sources/developers/http_api/datasource_permissions.md @@ -19,9 +19,9 @@ title: Datasource Permissions HTTP API # Data Source Permissions API -> The Data Source Permissions is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}). +> The Data Source Permissions is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "/docs/grafana/latest/introduction/grafana-enterprise" >}}). -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for more information. This API can be used to enable, disable, list, add and remove permissions for a data source. diff --git a/docs/sources/developers/http_api/external_group_sync.md b/docs/sources/developers/http_api/external_group_sync.md index 7f931e1ff4c..644fc6098eb 100644 --- a/docs/sources/developers/http_api/external_group_sync.md +++ b/docs/sources/developers/http_api/external_group_sync.md @@ -18,9 +18,9 @@ title: External Group Sync HTTP API # External Group Synchronization API -> External Group Synchronization is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}). +> External Group Synchronization is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "/docs/grafana/latest/introduction/grafana-enterprise" >}}). -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for more information. ## Get External Groups diff --git a/docs/sources/developers/http_api/folder.md b/docs/sources/developers/http_api/folder.md index 7b6e4b64f66..860513fbb8b 100644 --- a/docs/sources/developers/http_api/folder.md +++ b/docs/sources/developers/http_api/folder.md @@ -14,7 +14,7 @@ title: Folder HTTP API # Folder API -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for more information. ## Identifier (id) vs unique identifier (uid) @@ -280,7 +280,7 @@ Content-Length: 97 Deletes an existing folder identified by UID along with all dashboards (and their alerts) stored in the folder. This operation cannot be reverted. -If [Grafana Alerting]({{< relref "../../alerting/" >}}) is enabled, you can set an optional query parameter `forceDeleteRules=false` so that requests will fail with 400 (Bad Request) error if the folder contains any Grafana alerts. However, if this parameter is set to `true` then it will delete any Grafana alerts under this folder. +If [Grafana Alerting]({{< relref "/docs/grafana/latest/alerting" >}}) is enabled, you can set an optional query parameter `forceDeleteRules=false` so that requests will fail with 400 (Bad Request) error if the folder contains any Grafana alerts. However, if this parameter is set to `true` then it will delete any Grafana alerts under this folder. **Required permissions** diff --git a/docs/sources/developers/http_api/folder_dashboard_search.md b/docs/sources/developers/http_api/folder_dashboard_search.md index 2f4300060bc..330c5f4a5ae 100644 --- a/docs/sources/developers/http_api/folder_dashboard_search.md +++ b/docs/sources/developers/http_api/folder_dashboard_search.md @@ -20,7 +20,7 @@ title: Folder/Dashboard Search HTTP API `GET /api/search/` -> Note: When using [Role-based access control]({{< relref "../../administration/roles-and-permissions/access-control/" >}}), search results will contain only dashboards and folders which you have access to. +> Note: When using [Role-based access control]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control" >}}), search results will contain only dashboards and folders which you have access to. Query parameters: diff --git a/docs/sources/developers/http_api/folder_permissions.md b/docs/sources/developers/http_api/folder_permissions.md index ae9278192e7..456c085d578 100644 --- a/docs/sources/developers/http_api/folder_permissions.md +++ b/docs/sources/developers/http_api/folder_permissions.md @@ -28,7 +28,7 @@ The permission levels for the permission field: - 2 = Edit - 4 = Admin -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for more information. ## Get permissions for a folder diff --git a/docs/sources/developers/http_api/licensing.md b/docs/sources/developers/http_api/licensing.md index 73c3fcf4088..4e47692132c 100644 --- a/docs/sources/developers/http_api/licensing.md +++ b/docs/sources/developers/http_api/licensing.md @@ -15,9 +15,9 @@ title: Licensing HTTP API # Enterprise License API -Licensing is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}). +Licensing is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "/docs/grafana/latest/introduction/grafana-enterprise" >}}). -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for more information. ## Check license availability diff --git a/docs/sources/developers/http_api/org.md b/docs/sources/developers/http_api/org.md index 23e05bc2462..48ed44cf6bc 100644 --- a/docs/sources/developers/http_api/org.md +++ b/docs/sources/developers/http_api/org.md @@ -19,7 +19,7 @@ The Organization HTTP API is divided in two resources, `/api/org` (current organ and `/api/orgs` (admin organizations). One big difference between these are that the admin of all organizations API only works with basic authentication, see [Admin Organizations API](#admin-organizations-api) for more information. -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for more information. ## Current Organization API diff --git a/docs/sources/developers/http_api/reporting.md b/docs/sources/developers/http_api/reporting.md index 4ed1d88ae87..989be605c90 100644 --- a/docs/sources/developers/http_api/reporting.md +++ b/docs/sources/developers/http_api/reporting.md @@ -13,13 +13,13 @@ title: Reporting API # Reporting API -This API allows you to interact programmatically with the [Reporting]({{< relref "../../dashboards/create-reports/" >}}) feature. +This API allows you to interact programmatically with the [Reporting]({{< relref "/docs/grafana/latest/dashboards/create-reports" >}}) feature. > The Reporting API is not stabilized yet, it is still in active development and may change without prior notice. -> Reporting is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}). +> Reporting is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "/docs/grafana/latest/introduction/grafana-enterprise" >}}). -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for more information. ## List all reports @@ -27,7 +27,7 @@ This API allows you to interact programmatically with the [Reporting]({{< relref #### Required permissions -See note in the [introduction]({{< ref "#reporting-api" >}}) for an explanation. +See note in the [introduction]({{< relref "#reporting-api" >}}) for an explanation. | Action | Scope | | ------------ | --------------------------- | @@ -99,7 +99,7 @@ Content-Length: 1840 ### Status Codes - **200** – OK -- **401** - Authentication failed, refer to [Authentication API]({{< relref "auth/" >}}). +- **401** - Authentication failed, refer to [Authentication API]({{< relref "/docs/grafana/latest/developers/http_api/auth" >}}). - **500** – Unexpected error or server misconfiguration. Refer to server logs for more details. ## Get a report @@ -108,7 +108,7 @@ Content-Length: 1840 #### Required permissions -See note in the [introduction]({{< ref "#reporting-api" >}}) for an explanation. +See note in the [introduction]({{< relref "#reporting-api" >}}) for an explanation. | Action | Scope | | ------------ | ---------------------------------------------------------- | @@ -183,7 +183,7 @@ Content-Length: 940 - **200** – OK - **400** – Bad request (invalid report ID). -- **401** - Authentication failed, refer to [Authentication API]({{< relref "auth/" >}}). +- **401** - Authentication failed, refer to [Authentication API]({{< relref "/docs/grafana/latest/developers/http_api/auth" >}}). - **403** – Forbidden (access denied to a report or a dashboard used in the report). - **404** – Not found (such report does not exist). - **500** – Unexpected error or server misconfiguration. Refer to server logs for more details. @@ -377,7 +377,7 @@ Content-Length: 28 - **200** – OK - **400** – Bad request (invalid json, missing or invalid fields values, etc.). -- **401** - Authentication failed, refer to [Authentication API]({{< relref "auth/" >}}). +- **401** - Authentication failed, refer to [Authentication API]({{< relref "/docs/grafana/latest/developers/http_api/auth" >}}). - **403** – Forbidden (access denied to a report or a dashboard used in the report). - **404** – Not found (such report does not exist). - **500** – Unexpected error or server misconfiguration. Refer to server logs for more details. @@ -419,7 +419,7 @@ Content-Length: 39 - **200** – OK - **400** – Bad request (invalid report ID). -- **401** - Authentication failed, refer to [Authentication API]({{< relref "auth/" >}}). +- **401** - Authentication failed, refer to [Authentication API]({{< relref "/docs/grafana/latest/developers/http_api/auth" >}}). - **404** - Not found (report with this ID does not exist). - **500** - Unexpected error or server misconfiguration. Refer to server logs for more details @@ -473,7 +473,7 @@ Content-Length: 29 - **200** – Report was sent. - **400** – Bad request (invalid json, missing content-type, missing or invalid fields, etc.). -- **401** - Authentication failed, refer to [Authentication API]({{< relref "auth/" >}}). +- **401** - Authentication failed, refer to [Authentication API]({{< relref "/docs/grafana/latest/developers/http_api/auth" >}}). - **403** - Forbidden (access denied to a report or a dashboard used in the report). - **404** - Report not found. - **500** - Unexpected error or server misconfiguration. Refer to server logs for more details. @@ -525,7 +525,7 @@ Content-Length: 181 ### Status Codes - **200** – OK -- **401** - Authentication failed, refer to [Authentication API]({{< relref "auth/" >}}). +- **401** - Authentication failed, refer to [Authentication API]({{< relref "/docs/grafana/latest/developers/http_api/auth" >}}). - **500** - Unexpected error or server misconfiguration. Refer to server logs for more detail ## Save reports branding settings @@ -587,7 +587,7 @@ Content-Length: 35 - **200** – OK - **400** – Bad request (invalid json, missing or invalid fields values, etc.). -- **401** - Authentication failed, refer to [Authentication API]({{< relref "auth/" >}}). +- **401** - Authentication failed, refer to [Authentication API]({{< relref "/docs/grafana/latest/developers/http_api/auth" >}}). - **500** - Unexpected error or server misconfiguration. Refer to server logs for more detail ## Send a test email @@ -670,6 +670,6 @@ Content-Length: 29 - **200** – OK - **400** – Bad request (invalid json, missing or invalid fields values, etc.). -- **401** - Authentication failed, refer to [Authentication API]({{< relref "auth/" >}}). +- **401** - Authentication failed, refer to [Authentication API]({{< relref "/docs/grafana/latest/developers/http_api/auth" >}}). - **403** - Forbidden (access denied to a report or a dashboard used in the report). - **500** - Unexpected error or server misconfiguration. Refer to server logs for more details diff --git a/docs/sources/developers/http_api/serviceaccount.md b/docs/sources/developers/http_api/serviceaccount.md index 70976c99dde..4d96628272b 100644 --- a/docs/sources/developers/http_api/serviceaccount.md +++ b/docs/sources/developers/http_api/serviceaccount.md @@ -14,7 +14,7 @@ title: Service account HTTP API # Service account API -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for more information. ## Search service accounts with Paging diff --git a/docs/sources/developers/http_api/short_url.md b/docs/sources/developers/http_api/short_url.md index 7406031451b..1694b5d95c8 100644 --- a/docs/sources/developers/http_api/short_url.md +++ b/docs/sources/developers/http_api/short_url.md @@ -37,7 +37,7 @@ Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk JSON body schema: -- **path** – The path to shorten, relative to the Grafana [root_url]({{< relref "../../setup-grafana/configure-grafana/#root_url" >}}). +- **path** – The path to shorten, relative to the Grafana [root_url]({{< relref "/docs/grafana/latest/setup-grafana/configure-grafana#root_url" >}}). **Example response:** diff --git a/docs/sources/developers/http_api/team.md b/docs/sources/developers/http_api/team.md index 4453a9c683d..6ec7a54875b 100644 --- a/docs/sources/developers/http_api/team.md +++ b/docs/sources/developers/http_api/team.md @@ -25,7 +25,7 @@ Access to these API endpoints is restricted as follows: - If you enable `editors_can_admin` configuration flag, then Organization Editors can create teams and manage teams where they are Admin. - If you enable `editors_can_admin` configuration flag, Editors can find out whether a team that they are not members of exists by trying to create a team with the same name. -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for more information. ## Team Search With Paging diff --git a/docs/sources/developers/http_api/user.md b/docs/sources/developers/http_api/user.md index dab299898c9..d278d14a306 100644 --- a/docs/sources/developers/http_api/user.md +++ b/docs/sources/developers/http_api/user.md @@ -14,7 +14,7 @@ title: User HTTP API # User API -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../administration/roles-and-permissions/access-control/custom-role-actions-scopes/" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes" >}}) for more information. ## Search Users diff --git a/docs/sources/developers/kinds/composable/bargaugepanelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/bargaugepanelcfg/schema-reference.md index 1e8bf65de88..a4ecf690870 100644 --- a/docs/sources/developers/kinds/composable/bargaugepanelcfg/schema-reference.md +++ b/docs/sources/developers/kinds/composable/bargaugepanelcfg/schema-reference.md @@ -27,6 +27,7 @@ It extends [SingleStatBaseOptions](#singlestatbaseoptions). | `minVizHeight` | uint32 | **Yes** | Default: `10`. | | `minVizWidth` | uint32 | **Yes** | Default: `0`. | | `showUnfilled` | boolean | **Yes** | Default: `true`. | +| `valueMode` | string | **Yes** | Allows for the table cell gauge display type to set the gauge mode.
Possible values are: `color`, `text`, `hidden`. | | `orientation` | string | No | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs
Possible values are: `auto`, `vertical`, `horizontal`. | | `reduceOptions` | [ReduceDataOptions](#reducedataoptions) | No | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs | | `text` | [VizTextDisplayOptions](#viztextdisplayoptions) | No | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs | diff --git a/docs/sources/developers/kinds/composable/elasticsearchdataquery/schema-reference.md b/docs/sources/developers/kinds/composable/elasticsearchdataquery/schema-reference.md index 61a6f2af201..dda50523b93 100644 --- a/docs/sources/developers/kinds/composable/elasticsearchdataquery/schema-reference.md +++ b/docs/sources/developers/kinds/composable/elasticsearchdataquery/schema-reference.md @@ -17,12 +17,11 @@ It extends [DataQuery](#dataquery). | Property | Type | Required | Description | |--------------|-------------------------------------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `refId` | string | **Yes** | *(Inherited from [DataQuery](#dataquery))*
A - Z | +| `refId` | string | **Yes** | *(Inherited from [DataQuery](#dataquery))*
A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | | `alias` | string | No | Alias pattern | | `bucketAggs` | [BucketAggregation](#bucketaggregation)[] | No | List of bucket aggregations | | `datasource` | | No | *(Inherited from [DataQuery](#dataquery))*
For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | *(Inherited from [DataQuery](#dataquery))*
true if query is disabled (ie should not be returned to the dashboard) | -| `key` | string | No | *(Inherited from [DataQuery](#dataquery))*
Unique, guid like, string used in explore mode | +| `hide` | boolean | No | *(Inherited from [DataQuery](#dataquery))*
true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | | `metrics` | [MetricAggregation](#metricaggregation)[] | No | List of metric aggregations | | `queryType` | string | No | *(Inherited from [DataQuery](#dataquery))*
Specify the query flavor
TODO make this required and give it a default | | `query` | string | No | Lucene query | @@ -38,90 +37,85 @@ It extends [DataQuery](#dataquery). It extends [BucketAggregationWithField](#bucketaggregationwithfield). -| Property | Type | Required | Description | -|------------|---------------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | -| `field` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `id` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `settings` | [object](#settings) | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | +| Property | Type | Required | Description | +|------------|--------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `type` | string | **Yes** | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | +| `field` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | +| `id` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | +| `settings` | | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | ### BucketAggregationWithField It extends [BaseBucketAggregation](#basebucketaggregation). -| Property | Type | Required | Description | -|------------|---------------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `id` | string | **Yes** | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))* | -| `type` | string | **Yes** | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | -| `field` | string | No | | -| `settings` | [object](#settings) | No | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))* | +| Property | Type | Required | Description | +|------------|--------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `id` | string | **Yes** | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))* | +| `type` | string | **Yes** | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | +| `field` | string | No | | +| `settings` | | No | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))* | ### BaseBucketAggregation -| Property | Type | Required | Description | -|------------|---------------------|----------|---------------------------------------------------------------------------------------------------| -| `id` | string | **Yes** | | -| `type` | string | **Yes** | Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | -| `settings` | [object](#settings) | No | | - -### Settings - -| Property | Type | Required | Description | -|----------|------|----------|-------------| +| Property | Type | Required | Description | +|------------|--------|----------|---------------------------------------------------------------------------------------------------| +| `id` | string | **Yes** | | +| `type` | string | **Yes** | Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | +| `settings` | | No | | ### Filters It extends [BaseBucketAggregation](#basebucketaggregation). -| Property | Type | Required | Description | -|------------|---------------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `id` | string | **Yes** | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))* | -| `type` | string | **Yes** | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | -| `settings` | [object](#settings) | No | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))* | +| Property | Type | Required | Description | +|------------|--------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `id` | string | **Yes** | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))* | +| `type` | string | **Yes** | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | +| `settings` | | No | *(Inherited from [BaseBucketAggregation](#basebucketaggregation))* | ### GeoHashGrid It extends [BucketAggregationWithField](#bucketaggregationwithfield). -| Property | Type | Required | Description | -|------------|---------------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | -| `field` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `id` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `settings` | [object](#settings) | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | +| Property | Type | Required | Description | +|------------|--------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `type` | string | **Yes** | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | +| `field` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | +| `id` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | +| `settings` | | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | ### Histogram It extends [BucketAggregationWithField](#bucketaggregationwithfield). -| Property | Type | Required | Description | -|------------|---------------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | -| `field` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `id` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `settings` | [object](#settings) | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | +| Property | Type | Required | Description | +|------------|--------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `type` | string | **Yes** | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | +| `field` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | +| `id` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | +| `settings` | | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | ### Nested It extends [BucketAggregationWithField](#bucketaggregationwithfield). -| Property | Type | Required | Description | -|------------|---------------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | -| `field` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `id` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `settings` | [object](#settings) | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | +| Property | Type | Required | Description | +|------------|--------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `type` | string | **Yes** | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | +| `field` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | +| `id` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | +| `settings` | | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | ### Terms It extends [BucketAggregationWithField](#bucketaggregationwithfield). -| Property | Type | Required | Description | -|------------|---------------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `type` | string | **Yes** | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | -| `field` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `id` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | -| `settings` | [object](#settings) | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | +| Property | Type | Required | Description | +|------------|--------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `type` | string | **Yes** | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))*
Possible values are: `terms`, `filters`, `geohash_grid`, `date_histogram`, `histogram`, `nested`. | +| `field` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | +| `id` | string | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | +| `settings` | | No | *(Inherited from [BucketAggregationWithField](#bucketaggregationwithfield))* | ### DataQuery @@ -131,10 +125,9 @@ properties for the given context. | Property | Type | Required | Description | |--------------|---------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `refId` | string | **Yes** | A - Z | +| `refId` | string | **Yes** | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | | `datasource` | | No | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | true if query is disabled (ie should not be returned to the dashboard) | -| `key` | string | No | Unique, guid like, string used in explore mode | +| `hide` | boolean | No | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | | `queryType` | string | No | Specify the query flavor
TODO make this required and give it a default | ### MetricAggregation @@ -222,11 +215,11 @@ It extends [MetricAggregationWithField](#metricaggregationwithfield). | Property | Type | Required | Description | |---------------|---------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `type` | string | **Yes** | *(Inherited from [MetricAggregationWithField](#metricaggregationwithfield))*
Possible values are: `count`, `avg`, `sum`, `min`, `max`, `extended_stats`, `percentiles`, `cardinality`, `raw_document`, `raw_data`, `logs`, `rate`, `top_metrics`, `moving_avg`, `moving_fn`, `derivative`, `serial_diff`, `cumulative_sum`, `bucket_script`. | | `field` | string | No | *(Inherited from [MetricAggregationWithField](#metricaggregationwithfield))* | | `hide` | boolean | No | *(Inherited from [MetricAggregationWithField](#metricaggregationwithfield))* | | `id` | string | No | *(Inherited from [MetricAggregationWithField](#metricaggregationwithfield))* | | `pipelineAgg` | string | No | | -| `type` | string | No | *(Inherited from [MetricAggregationWithField](#metricaggregationwithfield))*
Possible values are: `count`, `avg`, `sum`, `min`, `max`, `extended_stats`, `percentiles`, `cardinality`, `raw_document`, `raw_data`, `logs`, `rate`, `top_metrics`, `moving_avg`, `moving_fn`, `derivative`, `serial_diff`, `cumulative_sum`, `bucket_script`. | ### MetricAggregationWithField @@ -279,6 +272,11 @@ It extends [BasePipelineMetricAggregation](#basepipelinemetricaggregation). | `pipelineAgg` | string | No | *(Inherited from [BasePipelineMetricAggregation](#basepipelinemetricaggregation))* | | `settings` | [object](#settings) | No | | +### Settings + +| Property | Type | Required | Description | +|----------|------|----------|-------------| + ### Meta | Property | Type | Required | Description | diff --git a/docs/sources/developers/kinds/composable/lokidataquery/schema-reference.md b/docs/sources/developers/kinds/composable/lokidataquery/schema-reference.md index b57bbd97795..6b022166568 100644 --- a/docs/sources/developers/kinds/composable/lokidataquery/schema-reference.md +++ b/docs/sources/developers/kinds/composable/lokidataquery/schema-reference.md @@ -18,12 +18,11 @@ It extends [DataQuery](#dataquery). | Property | Type | Required | Description | |----------------|---------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `expr` | string | **Yes** | The LogQL query. | -| `refId` | string | **Yes** | *(Inherited from [DataQuery](#dataquery))*
A - Z | +| `refId` | string | **Yes** | *(Inherited from [DataQuery](#dataquery))*
A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | | `datasource` | | No | *(Inherited from [DataQuery](#dataquery))*
For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | | `editorMode` | string | No | Possible values are: `code`, `builder`. | -| `hide` | boolean | No | *(Inherited from [DataQuery](#dataquery))*
true if query is disabled (ie should not be returned to the dashboard) | +| `hide` | boolean | No | *(Inherited from [DataQuery](#dataquery))*
true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | | `instant` | boolean | No | @deprecated, now use queryType. | -| `key` | string | No | *(Inherited from [DataQuery](#dataquery))*
Unique, guid like, string used in explore mode | | `legendFormat` | string | No | Used to override the name of the series. | | `maxLines` | integer | No | Used to limit the number of log rows returned. | | `queryType` | string | No | *(Inherited from [DataQuery](#dataquery))*
Specify the query flavor
TODO make this required and give it a default | @@ -38,10 +37,9 @@ properties for the given context. | Property | Type | Required | Description | |--------------|---------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `refId` | string | **Yes** | A - Z | +| `refId` | string | **Yes** | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | | `datasource` | | No | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | true if query is disabled (ie should not be returned to the dashboard) | -| `key` | string | No | Unique, guid like, string used in explore mode | +| `hide` | boolean | No | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | | `queryType` | string | No | Specify the query flavor
TODO make this required and give it a default | diff --git a/docs/sources/developers/kinds/composable/parcadataquery/schema-reference.md b/docs/sources/developers/kinds/composable/parcadataquery/schema-reference.md index 486fb6ef4cb..3bc24556ada 100644 --- a/docs/sources/developers/kinds/composable/parcadataquery/schema-reference.md +++ b/docs/sources/developers/kinds/composable/parcadataquery/schema-reference.md @@ -19,10 +19,9 @@ It extends [DataQuery](#dataquery). |-----------------|---------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `labelSelector` | string | **Yes** | Specifies the query label selectors. Default: `{}`. | | `profileTypeId` | string | **Yes** | Specifies the type of profile to query. | -| `refId` | string | **Yes** | *(Inherited from [DataQuery](#dataquery))*
A - Z | +| `refId` | string | **Yes** | *(Inherited from [DataQuery](#dataquery))*
A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | | `datasource` | | No | *(Inherited from [DataQuery](#dataquery))*
For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | *(Inherited from [DataQuery](#dataquery))*
true if query is disabled (ie should not be returned to the dashboard) | -| `key` | string | No | *(Inherited from [DataQuery](#dataquery))*
Unique, guid like, string used in explore mode | +| `hide` | boolean | No | *(Inherited from [DataQuery](#dataquery))*
true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | | `queryType` | string | No | *(Inherited from [DataQuery](#dataquery))*
Specify the query flavor
TODO make this required and give it a default | ### DataQuery @@ -33,10 +32,9 @@ properties for the given context. | Property | Type | Required | Description | |--------------|---------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `refId` | string | **Yes** | A - Z | +| `refId` | string | **Yes** | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | | `datasource` | | No | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | true if query is disabled (ie should not be returned to the dashboard) | -| `key` | string | No | Unique, guid like, string used in explore mode | +| `hide` | boolean | No | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | | `queryType` | string | No | Specify the query flavor
TODO make this required and give it a default | diff --git a/docs/sources/developers/kinds/composable/phlaredataquery/schema-reference.md b/docs/sources/developers/kinds/composable/phlaredataquery/schema-reference.md index e8779c916e4..bafb2005be1 100644 --- a/docs/sources/developers/kinds/composable/phlaredataquery/schema-reference.md +++ b/docs/sources/developers/kinds/composable/phlaredataquery/schema-reference.md @@ -20,10 +20,9 @@ It extends [DataQuery](#dataquery). | `groupBy` | string[] | **Yes** | Allows to group the results. | | `labelSelector` | string | **Yes** | Specifies the query label selectors. Default: `{}`. | | `profileTypeId` | string | **Yes** | Specifies the type of profile to query. | -| `refId` | string | **Yes** | *(Inherited from [DataQuery](#dataquery))*
A - Z | +| `refId` | string | **Yes** | *(Inherited from [DataQuery](#dataquery))*
A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | | `datasource` | | No | *(Inherited from [DataQuery](#dataquery))*
For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | *(Inherited from [DataQuery](#dataquery))*
true if query is disabled (ie should not be returned to the dashboard) | -| `key` | string | No | *(Inherited from [DataQuery](#dataquery))*
Unique, guid like, string used in explore mode | +| `hide` | boolean | No | *(Inherited from [DataQuery](#dataquery))*
true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | | `queryType` | string | No | *(Inherited from [DataQuery](#dataquery))*
Specify the query flavor
TODO make this required and give it a default | ### DataQuery @@ -34,10 +33,9 @@ properties for the given context. | Property | Type | Required | Description | |--------------|---------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `refId` | string | **Yes** | A - Z | +| `refId` | string | **Yes** | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | | `datasource` | | No | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | true if query is disabled (ie should not be returned to the dashboard) | -| `key` | string | No | Unique, guid like, string used in explore mode | +| `hide` | boolean | No | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | | `queryType` | string | No | Specify the query flavor
TODO make this required and give it a default | diff --git a/docs/sources/developers/kinds/composable/prometheusdataquery/schema-reference.md b/docs/sources/developers/kinds/composable/prometheusdataquery/schema-reference.md new file mode 100644 index 00000000000..2645ed1d5c9 --- /dev/null +++ b/docs/sources/developers/kinds/composable/prometheusdataquery/schema-reference.md @@ -0,0 +1,44 @@ +--- +keywords: + - grafana + - schema +title: PrometheusDataQuery kind +--- +> Both documentation generation and kinds schemas are in active development and subject to change without prior notice. + +## PrometheusDataQuery + +#### Maturity: [experimental](../../../maturity/#experimental) +#### Version: 0.0 + + + +It extends [DataQuery](#dataquery). + +| Property | Type | Required | Description | +|--------------|---------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `expr` | string | **Yes** | The actual expression/query that will be evaluated by Prometheus | +| `refId` | string | **Yes** | *(Inherited from [DataQuery](#dataquery))*
A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | +| `datasource` | | No | *(Inherited from [DataQuery](#dataquery))*
For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | +| `editorMode` | string | No | Possible values are: `code`, `builder`. | +| `exemplar` | boolean | No | Execute an additional query to identify interesting raw samples relevant for the given expr | +| `format` | string | No | Possible values are: `time_series`, `table`, `heatmap`. | +| `hide` | boolean | No | *(Inherited from [DataQuery](#dataquery))*
true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | +| `instant` | boolean | No | Returns only the latest value that Prometheus has scraped for the requested time series | +| `queryType` | string | No | *(Inherited from [DataQuery](#dataquery))*
Specify the query flavor
TODO make this required and give it a default | +| `range` | boolean | No | Returns a Range vector, comprised of a set of time series containing a range of data points over time for each time series | + +### DataQuery + +These are the common properties available to all queries in all datasources. +Specific implementations will *extend* this interface, adding the required +properties for the given context. + +| Property | Type | Required | Description | +|--------------|---------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `refId` | string | **Yes** | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | +| `datasource` | | No | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | +| `hide` | boolean | No | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | +| `queryType` | string | No | Specify the query flavor
TODO make this required and give it a default | + + diff --git a/docs/sources/developers/kinds/composable/statpanelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/statpanelcfg/schema-reference.md index 4435cb03d81..a4f6b93e95b 100644 --- a/docs/sources/developers/kinds/composable/statpanelcfg/schema-reference.md +++ b/docs/sources/developers/kinds/composable/statpanelcfg/schema-reference.md @@ -27,6 +27,7 @@ It extends [SingleStatBaseOptions](#singlestatbaseoptions). | `graphMode` | string | **Yes** | TODO docs
Possible values are: `none`, `line`, `area`. | | `justifyMode` | string | **Yes** | TODO docs
Possible values are: `auto`, `center`. | | `textMode` | string | **Yes** | TODO docs
Possible values are: `auto`, `value`, `value_and_name`, `name`, `none`. | +| `hasGradient` | boolean | No | Default: `true`. | | `orientation` | string | No | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs
Possible values are: `auto`, `vertical`, `horizontal`. | | `reduceOptions` | [ReduceDataOptions](#reducedataoptions) | No | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs | | `text` | [VizTextDisplayOptions](#viztextdisplayoptions) | No | *(Inherited from [SingleStatBaseOptions](#singlestatbaseoptions))*
TODO docs | diff --git a/docs/sources/developers/kinds/composable/tablepanelcfg/schema-reference.md b/docs/sources/developers/kinds/composable/tablepanelcfg/schema-reference.md index 33e565a7039..f012f709d25 100644 --- a/docs/sources/developers/kinds/composable/tablepanelcfg/schema-reference.md +++ b/docs/sources/developers/kinds/composable/tablepanelcfg/schema-reference.md @@ -23,6 +23,7 @@ title: TablePanelCfg kind |-----------------|---------------------------------------------------|----------|--------------------------------------------------------------------------------------| | `frameIndex` | number | **Yes** | Represents the index of the selected frame Default: `0`. | | `showHeader` | boolean | **Yes** | Controls whether the panel should show the header Default: `true`. | +| `cellHeight` | string | No | Height of a table cell
Possible values are: `sm`, `md`, `lg`. | | `footer` | [object](#footer) | No | Controls footer options Default: `map[countRows:false reducer:[] show:false]`. | | `showRowNums` | boolean | No | Controls whether the columns should be numbered Default: `false`. | | `showTypeIcons` | boolean | No | Controls whether the header should show icons for the column types Default: `false`. | diff --git a/docs/sources/developers/kinds/composable/testdatadataquery/schema-reference.md b/docs/sources/developers/kinds/composable/testdatadataquery/schema-reference.md index 0d576fbdd84..f571a4274b5 100644 --- a/docs/sources/developers/kinds/composable/testdatadataquery/schema-reference.md +++ b/docs/sources/developers/kinds/composable/testdatadataquery/schema-reference.md @@ -17,7 +17,7 @@ It extends [DataQuery](#dataquery). | Property | Type | Required | Description | |-------------------|-------------------------------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `refId` | string | **Yes** | *(Inherited from [DataQuery](#dataquery))*
A - Z | +| `refId` | string | **Yes** | *(Inherited from [DataQuery](#dataquery))*
A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | | `alias` | string | No | | | `channel` | string | No | | | `csvContent` | string | No | | @@ -25,8 +25,7 @@ It extends [DataQuery](#dataquery). | `csvWave` | [CSVWave](#csvwave)[] | No | | | `datasource` | | No | *(Inherited from [DataQuery](#dataquery))*
For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | | `errorType` | string | No | Possible values are: `server_panic`, `frontend_exception`, `frontend_observable`. | -| `hide` | boolean | No | *(Inherited from [DataQuery](#dataquery))*
true if query is disabled (ie should not be returned to the dashboard) | -| `key` | string | No | *(Inherited from [DataQuery](#dataquery))*
Unique, guid like, string used in explore mode | +| `hide` | boolean | No | *(Inherited from [DataQuery](#dataquery))*
true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | | `labels` | string | No | | | `levelColumn` | boolean | No | | | `lines` | integer | No | | @@ -60,10 +59,9 @@ properties for the given context. | Property | Type | Required | Description | |--------------|---------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `refId` | string | **Yes** | A - Z | +| `refId` | string | **Yes** | A unique identifier for the query within the list of targets.
In server side expressions, the refId is used as a variable name to identify results.
By default, the UI will assign A->Z; however setting meaningful names may be useful. | | `datasource` | | No | For mixed data sources the selected datasource is on the query level.
For non mixed scenarios this is undefined.
TODO find a better way to do this ^ that's friendly to schema
TODO this shouldn't be unknown but DataSourceRef | null | -| `hide` | boolean | No | true if query is disabled (ie should not be returned to the dashboard) | -| `key` | string | No | Unique, guid like, string used in explore mode | +| `hide` | boolean | No | true if query is disabled (ie should not be returned to the dashboard)
Note this does not always imply that the query should not be executed since
the results from a hidden query may be used as the input to other queries (SSE etc) | | `queryType` | string | No | Specify the query flavor
TODO make this required and give it a default | ### NodesQuery diff --git a/docs/sources/developers/kinds/core/dashboard/schema-reference.md b/docs/sources/developers/kinds/core/dashboard/schema-reference.md index 2733eb423c0..92f5834fd29 100644 --- a/docs/sources/developers/kinds/core/dashboard/schema-reference.md +++ b/docs/sources/developers/kinds/core/dashboard/schema-reference.md @@ -195,11 +195,12 @@ TODO docs TODO docs -| Property | Type | Required | Description | -|----------|--------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------| -| `color` | string | **Yes** | TODO docs | -| `state` | string | No | TODO docs
TODO are the values here enumerable into a disjunction?
Some seem to be listed in typescript comment | -| `value` | number | No | TODO docs
FIXME the corresponding typescript field is required/non-optional, but nulls currently appear here when serializing -Infinity to JSON | +| Property | Type | Required | Description | +|----------|---------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------| +| `color` | string | **Yes** | TODO docs | +| `index` | integer | No | Threshold index, an old property that is not needed an should only appear in older dashboards | +| `state` | string | No | TODO docs
TODO are the values here enumerable into a disjunction?
Some seem to be listed in typescript comment | +| `value` | number | No | TODO docs
FIXME the corresponding typescript field is required/non-optional, but nulls currently appear here when serializing -Infinity to JSON | ### ValueMapping diff --git a/docs/sources/developers/plugins/add-support-for-variables.md b/docs/sources/developers/plugins/add-support-for-variables.md index c8bc2a85358..c398b284fb4 100644 --- a/docs/sources/developers/plugins/add-support-for-variables.md +++ b/docs/sources/developers/plugins/add-support-for-variables.md @@ -143,7 +143,7 @@ Let's create a custom query editor to allow the user to edit the query model. onChange: (query: MyVariableQuery, definition: string) => void; } - export const VariableQueryEditor: React.FC = ({ onChange, query }) => { + export const VariableQueryEditor = ({ onChange, query }: VariableQueryProps) => { const [state, setState] = useState(query); const saveQuery = () => { diff --git a/docs/sources/developers/plugins/custom-panel-option-editors.md b/docs/sources/developers/plugins/custom-panel-option-editors.md index d943c6deb70..d0d4ab8e766 100644 --- a/docs/sources/developers/plugins/custom-panel-option-editors.md +++ b/docs/sources/developers/plugins/custom-panel-option-editors.md @@ -17,7 +17,7 @@ import React from 'react'; import { Button } from '@grafana/ui'; import { StandardEditorProps } from '@grafana/data'; -export const SimpleEditor: React.FC> = ({ value, onChange }) => { +export const SimpleEditor = ({ value, onChange }: StandardEditorProps) => { return ; }; ``` @@ -51,7 +51,9 @@ interface Settings { to: number; } -export const SimpleEditor: React.FC> = ({ item, value, onChange }) => { +type Props = StandardEditorProps; + +export const SimpleEditor = ({ item, value, onChange }: Props) => { const options: Array> = []; // Default values @@ -97,7 +99,7 @@ The editor context is available through the `context` prop. The data frames retu **SimpleEditor.tsx** ```ts -export const SimpleEditor: React.FC> = ({ item, value, onChange, context }) => { +export const SimpleEditor = ({ item, value, onChange, context }: StandardEditorProps) => { const options: SelectableValue[] = []; if (context.data) { diff --git a/docs/sources/developers/plugins/metadata.md b/docs/sources/developers/plugins/metadata.md index 2b2b343499f..9a6628e4173 100644 --- a/docs/sources/developers/plugins/metadata.md +++ b/docs/sources/developers/plugins/metadata.md @@ -22,25 +22,23 @@ The plugin.json file is required for all plugins. When Grafana starts, it scans | `info` | [object](#info) | **Yes** | Metadata for the plugin. Some fields are used on the plugins page in Grafana and others on grafana.com if the plugin is published. | | `dependencies` | [object](#dependencies) | **Yes** | Dependency information related to Grafana and other plugins. | | `$schema` | string | No | Schema definition for the plugin.json file. Used primarily for schema validation. | -| `alerting` | boolean | No | For data source plugins, if the plugin supports alerting. | +| `alerting` | boolean | No | For data source plugins, if the plugin supports alerting. Requires `backend` to be set to `true`. | | `annotations` | boolean | No | For data source plugins, if the plugin supports annotation queries. | -| `autoEnabled` | boolean | No | Set to true for app plugins that should be enabled by default in all orgs | +| `autoEnabled` | boolean | No | Set to true for app plugins that should be enabled and pinned to the navigation bar in all orgs. | | `backend` | boolean | No | If the plugin has a backend component. | -| `category` | string | No | Plugin category used on the Add data source page. Possible values are: `tsdb`, `logging`, `cloud`, `tracing`, `sql`, `enterprise`, `other`. | -| `enterpriseFeatures` | [object](#enterprisefeatures) | No | Grafana Enerprise specific features. | +| `category` | string | No | Plugin category used on the "Add data source" page. Possible values are: `tsdb`, `logging`, `cloud`, `tracing`, `profiling`, `sql`, `enterprise`, `iot`, `other`. | +| `enterpriseFeatures` | [object](#enterprisefeatures) | No | Grafana Enterprise specific features | | `executable` | string | No | The first part of the file name of the backend component executable. There can be multiple executables built for different operating system and architecture. Grafana will check for executables named `_<$GOOS>_<.exe for Windows>`, e.g. `plugin_linux_amd64`. Combination of $GOOS and $GOARCH can be found here: https://golang.org/doc/install/source#environment. | -| `hiddenQueries` | boolean | No | For data source plugins, include hidden queries in the data request. | | `includes` | [object](#includes)[] | No | Resources to include in plugin. | -| `logs` | boolean | No | For data source plugins, if the plugin supports logs. | -| `metrics` | boolean | No | For data source plugins, if the plugin supports metric queries. Used in Explore. | -| `preload` | boolean | No | Initialize plugin on startup. By default, the plugin initializes on first use. | +| `logs` | boolean | No | For data source plugins, if the plugin supports logs. It may be used to filter logs only features. | +| `metrics` | boolean | No | For data source plugins, if the plugin supports metric queries. Used to enable the plugin in the panel editor. | +| `preload` | boolean | No | Initialize plugin on startup. By default, the plugin initializes on first use. Useful for app plugins that should load without user interaction. | | `queryOptions` | [object](#queryoptions) | No | For data source plugins. There is a query options section in the plugin's query editor and these options can be turned on if needed. | | `routes` | [object](#routes)[] | No | For data source plugins. Proxy routes used for plugin authentication and adding headers to HTTP requests made by the plugin. For more information, refer to [Authentication for data source plugins](https://grafana.com/docs/grafana/latest/developers/plugins/authentication/). | | `skipDataQuery` | boolean | No | For panel plugins. Hides the query editor. | | `state` | string | No | Marks a plugin as a pre-release. Possible values are: `alpha`, `beta`. | -| `streaming` | boolean | No | For data source plugins, if the plugin supports streaming. | -| `tables` | boolean | No | This is an undocumented feature. | -| `tracing` | boolean | No | For data source plugins, if the plugin supports tracing. | +| `streaming` | boolean | No | For data source plugins, if the plugin supports streaming. Used in Explore to start live streaming. | +| `tracing` | boolean | No | For data source plugins, if the plugin supports tracing. Used for example to link logs (e.g. Loki logs) with tracing plugins. | ## dependencies @@ -69,7 +67,7 @@ Plugin dependency. Used to display information about plugin dependencies in the ## enterpriseFeatures -Grafana Enerprise specific features. +Grafana Enterprise specific features. ### Properties diff --git a/docs/sources/developers/plugins/plugin.schema.json b/docs/sources/developers/plugins/plugin.schema.json index 374d11028af..b90c6addc15 100644 --- a/docs/sources/developers/plugins/plugin.schema.json +++ b/docs/sources/developers/plugins/plugin.schema.json @@ -17,166 +17,6 @@ "description": "Plugin type.", "enum": ["app", "datasource", "panel", "renderer", "secretsmanager"] }, - "name": { - "type": "string", - "description": "Human-readable name of the plugin that is shown to the user in the UI." - }, - "dependencies": { - "type": "object", - "description": "Dependency information related to Grafana and other plugins.", - "required": ["grafanaDependency"], - "additionalProperties": false, - "properties": { - "grafanaVersion": { - "type": "string", - "description": "(Deprecated) Required Grafana version for this plugin, e.g. `6.x.x 7.x.x` to denote plugin requires Grafana v6.x.x or v7.x.x.", - "pattern": "^([0-9]+)(\\.[0-9x]+)?(\\.[0-9x])?$" - }, - "grafanaDependency": { - "type": "string", - "description": "Required Grafana version for this plugin. Validated using https://github.com/npm/node-semver.", - "pattern": "^(<=|>=|<|>|=|~|\\^)?([0-9]+)(\\.[0-9x\\*]+)(\\.[0-9x\\*]+)?(\\s(<=|>=|<|=>)?([0-9]+)(\\.[0-9x]+)(\\.[0-9x]+))?$" - }, - "plugins": { - "type": "array", - "description": "An array of required plugins on which this plugin depends.", - "additionalItems": false, - "items": { - "type": "object", - "description": "Plugin dependency. Used to display information about plugin dependencies in the Grafana UI.", - "required": ["id", "name", "type", "version"], - "properties": { - "id": { - "type": "string", - "pattern": "^[0-9a-z]+\\-([0-9a-z]+\\-)?(app|panel|datasource|secretsmanager)$" - }, - "type": { - "type": "string", - "enum": ["app", "datasource", "panel", "secretsmanager"] - }, - "name": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - } - } - }, - "$schema": { - "type": "string", - "description": "Schema definition for the plugin.json file. Used primarily for schema validation." - }, - "category": { - "type": "string", - "description": "Plugin category used on the Add data source page.", - "enum": ["tsdb", "logging", "cloud", "tracing", "sql", "enterprise", "other"] - }, - "annotations": { - "type": "boolean", - "description": "For data source plugins, if the plugin supports annotation queries." - }, - "alerting": { - "type": "boolean", - "description": "For data source plugins, if the plugin supports alerting." - }, - "backend": { - "type": "boolean", - "description": "If the plugin has a backend component." - }, - "executable": { - "type": "string", - "description": "The first part of the file name of the backend component executable. There can be multiple executables built for different operating system and architecture. Grafana will check for executables named `_<$GOOS>_<.exe for Windows>`, e.g. `plugin_linux_amd64`. Combination of $GOOS and $GOARCH can be found here: https://golang.org/doc/install/source#environment." - }, - "preload": { - "type": "boolean", - "description": "Initialize plugin on startup. By default, the plugin initializes on first use." - }, - "state": { - "type": "string", - "description": "Marks a plugin as a pre-release.", - "enum": ["alpha", "beta"] - }, - "includes": { - "type": "array", - "description": "Resources to include in plugin.", - "items": { - "type": "object", - "additionalItems": false, - "properties": { - "uid": { - "type": "string", - "description": "Unique identifier of the included resource" - }, - "type": { - "type": "string", - "enum": ["dashboard", "page", "panel", "datasource", "secretsmanager"] - }, - "name": { - "type": "string" - }, - "component": { - "type": "string", - "description": "(Legacy) The Angular component to use for a page." - }, - "role": { - "type": "string", - "description": "The minimum role a user must have to see this page in the navigation menu.", - "enum": ["Admin", "Editor", "Viewer"] - }, - "path": { - "type": "string", - "description": "Used for app plugins." - }, - "addToNav": { - "type": "boolean", - "description": "Add the include to the navigation menu." - }, - "defaultNav": { - "type": "boolean", - "description": "Page or dashboard when user clicks the icon in the side menu." - }, - "icon": { - "type": "string", - "description": "Icon to use in the side menu. For information on available icon, refer to [Icons Overview](https://developers.grafana.com/ui/latest/index.html?path=/story/docs-overview-icon--icons-overview)." - } - } - } - }, - "logs": { - "type": "boolean", - "description": "For data source plugins, if the plugin supports logs." - }, - "skipDataQuery": { - "type": "boolean", - "description": "For panel plugins. Hides the query editor." - }, - "metrics": { - "type": "boolean", - "description": "For data source plugins, if the plugin supports metric queries. Used in Explore." - }, - "streaming": { - "type": "boolean", - "description": "For data source plugins, if the plugin supports streaming." - }, - "tables": { - "type": "boolean", - "description": "This is an undocumented feature." - }, - "tracing": { - "type": "boolean", - "description": "For data source plugins, if the plugin supports tracing." - }, - "hiddenQueries": { - "type": "boolean", - "description": "For data source plugins, include hidden queries in the data request." - }, - "autoEnabled": { - "type": "boolean", - "description": "Set to true for app plugins that should be enabled by default in all orgs" - }, "info": { "type": "object", "description": "Metadata for the plugin. Some fields are used on the plugins page in Grafana and others on grafana.com if the plugin is published.", @@ -308,6 +148,166 @@ } } }, + "name": { + "type": "string", + "description": "Human-readable name of the plugin that is shown to the user in the UI." + }, + "dependencies": { + "type": "object", + "description": "Dependency information related to Grafana and other plugins.", + "required": ["grafanaDependency"], + "additionalProperties": false, + "properties": { + "grafanaVersion": { + "type": "string", + "description": "(Deprecated) Required Grafana version for this plugin, e.g. `6.x.x 7.x.x` to denote plugin requires Grafana v6.x.x or v7.x.x.", + "pattern": "^([0-9]+)(\\.[0-9x]+)?(\\.[0-9x])?$" + }, + "grafanaDependency": { + "type": "string", + "description": "Required Grafana version for this plugin. Validated using https://github.com/npm/node-semver.", + "pattern": "^(<=|>=|<|>|=|~|\\^)?([0-9]+)(\\.[0-9x\\*]+)(\\.[0-9x\\*]+)?(\\s(<=|>=|<|=>)?([0-9]+)(\\.[0-9x]+)(\\.[0-9x]+))?$" + }, + "plugins": { + "type": "array", + "description": "An array of required plugins on which this plugin depends.", + "additionalItems": false, + "items": { + "type": "object", + "description": "Plugin dependency. Used to display information about plugin dependencies in the Grafana UI.", + "required": ["id", "name", "type", "version"], + "properties": { + "id": { + "type": "string", + "pattern": "^[0-9a-z]+\\-([0-9a-z]+\\-)?(app|panel|datasource|secretsmanager)$" + }, + "type": { + "type": "string", + "enum": ["app", "datasource", "panel", "secretsmanager"] + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "$schema": { + "type": "string", + "description": "Schema definition for the plugin.json file. Used primarily for schema validation." + }, + "alerting": { + "type": "boolean", + "description": "For data source plugins, if the plugin supports alerting. Requires `backend` to be set to `true`." + }, + "annotations": { + "type": "boolean", + "description": "For data source plugins, if the plugin supports annotation queries." + }, + "autoEnabled": { + "type": "boolean", + "description": "Set to true for app plugins that should be enabled and pinned to the navigation bar in all orgs." + }, + "backend": { + "type": "boolean", + "description": "If the plugin has a backend component." + }, + "builtIn": { + "type": "boolean", + "description": "[internal only] Indicates whether the plugin is developed and shipped as part of Grafana. Also known as a 'core plugin'." + }, + "category": { + "type": "string", + "description": "Plugin category used on the Add data source page.", + "enum": ["tsdb", "logging", "cloud", "tracing", "profiling", "sql", "enterprise", "iot", "other"] + }, + "enterpriseFeatures": { + "type": "object", + "description": "Grafana Enterprise specific features", + "additionalProperties": true, + "properties": { + "healthDiagnosticsErrors": { + "type": "boolean", + "description": "Enable/Disable health diagnostics errors. Requires Grafana >=7.5.5.", + "default": false + } + } + }, + "executable": { + "type": "string", + "description": "The first part of the file name of the backend component executable. There can be multiple executables built for different operating system and architecture. Grafana will check for executables named `_<$GOOS>_<.exe for Windows>`, e.g. `plugin_linux_amd64`. Combination of $GOOS and $GOARCH can be found here: https://golang.org/doc/install/source#environment." + }, + "hideFromList": { + "type": "boolean", + "description": "[internal only] Excludes the plugin from listings in Grafana's UI. Only allowed for `builtIn` plugins." + }, + "includes": { + "type": "array", + "description": "Resources to include in plugin.", + "items": { + "type": "object", + "additionalItems": false, + "properties": { + "uid": { + "type": "string", + "description": "Unique identifier of the included resource" + }, + "type": { + "type": "string", + "enum": ["dashboard", "page", "panel", "datasource", "secretsmanager"] + }, + "name": { + "type": "string" + }, + "component": { + "type": "string", + "description": "(Legacy) The Angular component to use for a page." + }, + "role": { + "type": "string", + "description": "The minimum role a user must have to see this page in the navigation menu.", + "enum": ["Admin", "Editor", "Viewer"] + }, + "path": { + "type": "string", + "description": "Used for app plugins." + }, + "addToNav": { + "type": "boolean", + "description": "Add the include to the navigation menu." + }, + "defaultNav": { + "type": "boolean", + "description": "Page or dashboard when user clicks the icon in the side menu." + }, + "icon": { + "type": "string", + "description": "Icon to use in the side menu. For information on available icon, refer to [Icons Overview](https://developers.grafana.com/ui/latest/index.html?path=/story/docs-overview-icon--icons-overview)." + } + } + } + }, + "logs": { + "type": "boolean", + "description": "For data source plugins, if the plugin supports logs. It may be used to filter logs only features." + }, + "metrics": { + "type": "boolean", + "description": "For data source plugins, if the plugin supports metric queries. Used to enable the plugin in the panel editor." + }, + "pascalName": { + "type": "string", + "description": "[internal only] The PascalCase name for the plugin. Used for creating machine-friendly identifiers, typically in code generation. If not provided, defaults to name, but title-cased and sanitized (only alphabetical characters allowed).", + "pattern": "^([A-Z][a-zA-Z]{1,62})$" + }, + "preload": { + "type": "boolean", + "description": "Initialize plugin on startup. By default, the plugin initializes on first use. Useful for app plugins that should load without user interaction." + }, "queryOptions": { "type": "object", "description": "For data source plugins. There is a query options section in the plugin's query editor and these options can be turned on if needed.", @@ -461,17 +461,22 @@ } } }, - "enterpriseFeatures": { - "type": "object", - "description": "Grafana Enterprise specific features.", - "additionalProperties": true, - "properties": { - "healthDiagnosticsErrors": { - "type": "boolean", - "description": "Enable/Disable health diagnostics errors. Requires Grafana >=7.5.5.", - "default": false - } - } + "skipDataQuery": { + "type": "boolean", + "description": "For panel plugins. Hides the query editor." + }, + "state": { + "type": "string", + "description": "Marks a plugin as a pre-release.", + "enum": ["alpha", "beta"] + }, + "streaming": { + "type": "boolean", + "description": "For data source plugins, if the plugin supports streaming. Used in Explore to start live streaming." + }, + "tracing": { + "type": "boolean", + "description": "For data source plugins, if the plugin supports tracing. Used for example to link logs (e.g. Loki logs) with tracing plugins." } } } diff --git a/docs/sources/developers/plugins/publish-a-plugin.md b/docs/sources/developers/plugins/publish-a-plugin.md index 4e98489be36..687dda6c910 100644 --- a/docs/sources/developers/plugins/publish-a-plugin.md +++ b/docs/sources/developers/plugins/publish-a-plugin.md @@ -2,15 +2,18 @@ aliases: - share-a-plugin/ - package-a-plugin/ +description: Learn how to package and share your plugin. title: Publish a plugin type: docs --- # Publish a plugin -You've just built your first plugin, and now you want to share it with the world. In this guide, you'll learn how to package and share your plugin with others. +You've just built your first plugin, and now you want to share it with the world. +In this guide, you'll learn how to package and share your plugin with others. -For Grafana to be able to load a plugin, it first needs to be built. When you build a plugin from source, a `dist` directory is created that contains the production build, or _plugin assets_, for your plugin. +For Grafana to be able to load a plugin, it first needs to be built. +When you build a plugin from source, a `dist` directory is created that contains the production build, or _plugin assets_, for your plugin. When the Grafana server starts, it recursively looks in the plugin directory for any directory that contains a `plugin.json` file and tries to load the plugin assets in the same directory. @@ -35,7 +38,7 @@ There are three steps needed to package a plugin: make sure that all the binaries are executable and have a `0755` (`-rwxr-xr-x`) permission -1. [Sign the plugin]({{< relref "sign-a-plugin/" >}}). +1. [Sign the plugin]({{< relref "./sign-a-plugin" >}}). 1. Rename `dist` directory to match your plugin id and create a ZIP archive @@ -44,7 +47,8 @@ There are three steps needed to package a plugin: zip myorg-simple-panel-1.0.0.zip myorg-simple-panel -r ``` -1. (Optional) Verify your plugin is packaged correctly using [zipinfo](https://linux.die.net/man/1/zipinfo). It should look like this: +1. (Optional) Verify your plugin is packaged correctly using [zipinfo](https://linux.die.net/man/1/zipinfo). + It should look like this: ``` zipinfo grafana-clickhouse-datasource-1.1.2.zip @@ -76,22 +80,23 @@ drwxr-xr-x 0 bx stor 22-Mar-24 23:23 grafana-clickhouse-datasource/img/ 22 files, 92516655 bytes uncompressed, 34319591 bytes compressed: 62.9% ``` -# Publish your plugin on Grafana.com +## Publish your plugin on Grafana.com -The best way to share your plugin with the world is to publish it on [Grafana Plugins](https://grafana.com/plugins). By having your plugin published on Grafana.com, more users will be able to discover your plugin. +The best way to share your plugin with the world is to publish it on [Grafana Plugins](/plugins). +By having your plugin published on Grafana.com, more users will be able to discover your plugin. Before you submit your plugin, we ask that you read our guidelines and frequently asked questions. -## Guidelines +### Guidelines To speed up the time it takes to review your plugin: -- Get familiar with our plugin [publishing and signing criteria](publishing-and-signing-criteria.md) +- Get familiar with our plugin [publishing and signing criteria]({{< relref "./publishing-and-signing-criteria" >}}) - Check that your plugin is ready for review using the [plugin validator](https://github.com/grafana/plugin-validator). -- Read our [6 tips for improving your Grafana plugin before you publish](https://grafana.com/blog/2021/01/21/6-tips-for-improving-your-grafana-plugin-before-you-publish/). +- Read our [6 tips for improving your Grafana plugin before you publish](/blog/2021/01/21/6-tips-for-improving-your-grafana-plugin-before-you-publish/). - Refer to [plugin-examples](https://github.com/grafana/grafana-plugin-examples) to review best practices for building your plugin. -## Frequently Asked Questions +### Frequently Asked Questions **Do I need to submit a private plugin?** @@ -111,21 +116,25 @@ To speed up the time it takes to review your plugin: **How can I update my plugin's catalog page?** -- The plugin's catalog page content is extracted from the plugin README file. To update the plugin's catalog page, it is necessary to submit an updated plugin with the new content included in the README file. +- The plugin's catalog page content is extracted from the plugin README file. + To update the plugin's catalog page, it is necessary to submit an updated plugin with the new content included in the README file. **Can I unlist my plugin from the Grafana Plugin's Catalog in case of a bug?** -- In the event of a bug, unlisting the plugin from the Grafana Plugin's Catalog may be possible in exceptional cases, such as security concerns. However, we do not have control over the specific instances where the plugin is installed. +- In the event of a bug, unlisting the plugin from the Grafana Plugin's Catalog may be possible in exceptional cases, such as security concerns. + However, we do not have control over the specific instances where the plugin is installed. **Can I distribute my plugin somewhere else than the Grafana Catalog?** -- The official method for distributing Grafana plugins is through the Grafana Catalog. Alternative methods, such as installing private or development plugins on local Grafana instances, are available as per the guidelines provided in [this guide](https://grafana.com/docs/grafana/latest/administration/plugin-management/#install-plugin-on-local-grafana). +- The official method for distributing Grafana plugins is through the Grafana Catalog. + Alternative methods, such as installing private or development plugins on local Grafana instances, are available as per the guidelines provided in [this guide]({{< relref "../../administration/plugin-management#install-plugin-on-local-grafana" >}}). **Can I still use Angular for my plugin?** -- No. We will not accept any new plugin submissions written in angular. Please take a look at our [angular support deprecation documentation](https://grafana.com/docs/grafana/latest/developers/angular_deprecation/). +- No. We will not accept any new plugin submissions written in angular. + Please take a look at our [angular support deprecation documentation]({{< relref "../angular_deprecation" >}}). -## Publishing your plugin for the first time +### Publishing your plugin for the first time **Do plugin signatures expire?** @@ -133,36 +142,43 @@ To speed up the time it takes to review your plugin: {{< figure src="/static/img/docs/plugins/plugins-submission-create2.png" class="docs-image--no-shadow" max-width="650px" >}} -1. [Sign in](https://grafana.com/auth/sign-in) to your Grafana Cloud account. +1. [Sign in](/auth/sign-in) to your Grafana Cloud account. 1. In the left menu, under **Org settings**, click **My Plugins**. 1. Click **Submit Plugin**. 1. Enter the information requested by the form. - **OS & Architecture:** - Select **Single** if your plugin archive contains binaries for multiple architectures. - - Select **Multiple** if you'd like to submit separate plugin archives for each architecture. This can lead to faster downloads since users can select the specific architecture on which they want to install the plugin. + - Select **Multiple** if you'd like to submit separate plugin archives for each architecture. + This can lead to faster downloads since users can select the specific architecture on which they want to install the plugin. - **URL:** A URL that points to a ZIP archive of your packaged plugin. - **Source Code URL:** A URL that points to a public git repository or ZIP archive of your complete plugin source code. - **MD5:** The MD5 hash of the plugin specified by the **URL**. - - The remaining questions help us determine the [signature level](https://grafana.com/docs/grafana/latest/plugins/plugin-signatures/#plugin-signature-levels) for your plugin. + - The remaining questions help us determine the [signature level]({{< relref "./sign-a-plugin#plugin-signature-levels" >}}) for your plugin. 1. Click **Submit**. - After you have submitted your plugin, we run an automated validation to make sure it adheres to our guidelines. Once your submission passes the validation, it's placed in a review queue. + After you have submitted your plugin, we run an automated validation to make sure it adheres to our guidelines. + Once your submission passes the validation, it's placed in a review queue. -All submissions are manually inspected by a plugin reviewer. For every new plugin, we perform a manual review that includes the following checks: +All submissions are manually inspected by a plugin reviewer. +For every new plugin, we perform a manual review that includes the following checks: -- **Code review:** For quality and security purposes, we review the source code for the plugin. If you're unable to make the source code publicly available, let us know in a comment on your plugin submission. -- **Tests:** We install your plugin on one of our Grafana instances to test it for basic use. For more advanced plugins, we may ask you to assist us in configuring a test environment for the plugin. This test environment will be used whenever you submit an plugin update. +- **Code review:** For quality and security purposes, we review the source code for the plugin. + If you're unable to make the source code publicly available, let us know in a comment on your plugin submission. +- **Tests:** We install your plugin on one of our Grafana instances to test it for basic use. + For more advanced plugins, we may ask you to assist us in configuring a test environment for the plugin. + This test environment will be used whenever you submit an plugin update. -## Submit a plugin update +### Submit a plugin update To submit an **update** for an already published plugin: -1. [Sign in](https://grafana.com/auth/sign-in) to your Grafana Cloud account. +1. [Sign in](/auth/sign-in) to your Grafana Cloud account. 1. In the left menu, under **Org settings**, click **My Plugins**. 1. Click **Submit Update** for the plugin you want to update. 1. Enter the information requested by the form. - **OS & Architecture:** - Select **Single** if your plugin archive contains binaries for multiple architectures. - - Select **Multiple** if you'd like to submit separate plugin archives for each architecture. This can lead to faster downloads since users can select the specific architecture they want to install the plugin on. + - Select **Multiple** if you'd like to submit separate plugin archives for each architecture. + This can lead to faster downloads since users can select the specific architecture they want to install the plugin on. - **URL:** A URL that points to a ZIP archive of your packaged plugin. - **Source Code URL:** A URL that points to a public git repository or ZIP archive of your complete plugin source code. - **MD5:** The MD5 hash of the plugin specified by the **URL**. diff --git a/docs/sources/explore/_index.md b/docs/sources/explore/_index.md index a39007e0ee1..244628dfcc7 100644 --- a/docs/sources/explore/_index.md +++ b/docs/sources/explore/_index.md @@ -1,6 +1,12 @@ --- aliases: - features/explore/ +cascade: + labels: + products: + - cloud + - enterprise + - oss keywords: - explore - loki diff --git a/docs/sources/fundamentals/_index.md b/docs/sources/fundamentals/_index.md index 82adaa25c94..00a3b23e553 100644 --- a/docs/sources/fundamentals/_index.md +++ b/docs/sources/fundamentals/_index.md @@ -1,6 +1,12 @@ --- aliases: - basics/ +cascade: + labels: + products: + - cloud + - enterprise + - oss title: Fundamentals weight: 8 --- diff --git a/docs/sources/fundamentals/exemplars/index.md b/docs/sources/fundamentals/exemplars/index.md index 4e4d89ece5e..c4ad1e625fe 100644 --- a/docs/sources/fundamentals/exemplars/index.md +++ b/docs/sources/fundamentals/exemplars/index.md @@ -9,7 +9,7 @@ keywords: - exemplars - prometheus title: Exemplars -weight: 400 +weight: 750 --- # Introduction to exemplars diff --git a/docs/sources/fundamentals/intro-to-prometheus/index.md b/docs/sources/fundamentals/intro-to-prometheus/index.md new file mode 100644 index 00000000000..c144abf57c3 --- /dev/null +++ b/docs/sources/fundamentals/intro-to-prometheus/index.md @@ -0,0 +1,110 @@ +--- +aliases: + - ../basics/timeseries/ +description: Introduction to Prometheus +keywords: + - grafana + - intro + - Prometheus + - metrics + - time series +title: What is Prometheus? +weight: 300 +--- + +# What is Prometheus? + +Observability focuses on understanding the internal state of your systems based on the data they produce, which helps determine if your infrastructure is healthy. Prometheus is a core technology for system observability, but the term "Prometheus" can be confusing because it is used in different contexts. Understanding Prometheus basics, why it’s valuable for system observability, and how people use it in practice will both help you better understand it and help you use Grafana. + +Prometheus began in 2012 at SoundCloud because existing technologies were insufficient for their observability needs. Prometheus offers both a robust data model and a query language, which are discussed on this page. Prometheus is also simple and scalable. In 2018, Prometheus graduated from Cloud Native Computing Foundation (CNCF) incubation, and today has a thriving community. + +## Prometheus as data + +The following panel in a Grafana dashboard shows how much disk bandwidth on a Mac laptop is being used. The green line represents disk `reads`, and the yellow line represents `writes`. + +{{< figure src="/media/docs/grafana/intro-prometheus/disk-io.png" max-width="750px" caption="Disk I/O dashboard" >}} + +Data like these form _time series_. The X-axis is a moment in time and the Y-axis is a number or measurement; for example, 5 megabytes per second. This type of time series data appears everywhere in systems monitoring, as well as in places such as seasonal temperature charts and stock prices. This data is simply some measurement (such as a company stock price or Disk I/O) through a series of time instants. + +Prometheus is a technology that collects and stores time series data. Time series are fundamental to Prometheus; its [data model](https://prometheus.io/docs/concepts/data_model/) is arranged into: + +- _metrics_ that consist of a _timestamp_ and a _sample_, which is the numeric value, such as how many disk bytes have been read or a stock price +- a set of labels called _dimensions_, for example, `job` and `device` + +You can store time series data in any relational database, but these kinds of systems are not developed to store and query large volumes of time series data. Prometheus and similar software provide tools to compact and optimize time series data. + +### Simple dashboard using PromQL + +The following Grafana dashboard image shows a Disk I/O graph of raw data from Prometheus derived from a laptop. + +The **Metrics browser** field contains the following query: + +`node_disk_written_bytes_total{job="integrations/macos-node", device!=""}` + +In this example, the Y-axis shows the total number of bytes written, and the X-axis shows dates and times. As the laptop runs, the number of bytes written increases over time. Below **Metrics browser** is a counter that counts the number of bytes written over time. + +{{< figure src="/media/docs/grafana/intro-prometheus/dashboard-example.png" max-width="750px" caption="Metrics browser and counter" >}} + +The query is a simple example of [PromQL](/blog/2020/02/04/introduction-to-promql-the-prometheus-query-language/), the Prometheus Query Language. The query identifies the metric of interest (`node_disk_written_bytes_total`) and provides two labels (`job` and `device`). The label selector `job="integrations/macos-node"` filters metrics. It both reduces the scope of the metrics to those coming from the MacOS integration job and specifies that the “device” label cannot be empty. The result of this query is the raw stream of numbers that the graph displays. + +Although this view provides some insight into the performance of the system, it doesn’t provide the full story. A clearer picture of system performance requires understanding the rate of change that displays _how fast the data being written is changing_. To properly monitor disk performance, you need to also see spikes in activity that illustrate if and when the system is under load, and whether disk performance is at risk. PromQL includes a [rate()](https://prometheus.io/docs/prometheus/latest/querying/functions/#rate) function that shows the per-second average rate of increase over `5m` (5-minute) intervals. This view provides a much clearer picture of what’s happening with the system. + +{{< figure src="/media/docs/grafana/intro-prometheus/rate-function.png" max-width="750px" caption="Prometheus rate function" >}} + +A counter metric is just one type of metric; it is a number (such as total bytes written) that only increases. Prometheus [supports several others](https://prometheus.io/docs/concepts/metric_types/), such as the metric type `gauge`, which can increase or decrease. + +The following gauge visualization displays the total RAM usage on a computer. + +{{< figure src="/media/docs/grafana/intro-prometheus/gauge-example.png" max-width="750px" caption="Gauge visualization" >}} + +The third metric type is called a `histogram`, which counts observations and organizes them into configurable groups. The following example displays floating-point numbers grouped into ranges that display how frequently each occurred. + +{{< figure src="/media/docs/grafana/intro-prometheus/histogram-example.png" max-width="750px" caption="Historgram visualization" >}} + +These core concepts of time series, metrics, labels, and aggregation functions are foundational to Grafana and observability. + +## Why this is valuable + +Software and systems are a difficult business. Sometimes things go wrong. Observability helps you understand a system’s state so that issues can be quickly identified and proactively addressed. And when problems do occur, you can be alerted to them to diagnose and solve them within your Service Level Objectives (SLOs). + +The [three pillars of observability](https://www.oreilly.com/library/view/distributed-systems-observability/9781492033431/ch04.html) are metrics, logs, and traces. Prometheus supports the metrics pillar. When software on a computer runs slowly, observability can help you identify whether CPU is saturated, the system is out of memory, or if the disk is writing at maximum speed so you can proactively respond. + +## Prometheus as software + +Prometheus isn’t just a data format; it is also considered an [open source systems monitoring and alerting toolkit](https://prometheus.io/docs/introduction/overview/). That’s because Prometheus is software, not just data. + +Prometheus can scrape metric data from software and infrastructure and store it. Scraping means that Prometheus software periodically revisits the same endpoint to check for new data. Prometheus scrapes data from a piece of software instrumented with a client library. + +For example, a NodeJS application can configure the [prom-client](https://github.com/siimon/prom-client) to expose metrics easily at an endpoint, and Prometheus can regularly scrape that endpoint. Prometheus includes a number of other tools within the toolkit to instrument your applications. + +## Prometheus as deployment + +The first section of this document introduced the Prometheus as Data concept and how the Prometheus data model and metrics are organized. The second section introduced the concept of Prometheus as Software that is used to collect, process, and store metrics. This section describes how Prometheus as Data and Prometheus as Software come together. + +Consider the following example. Suppose a 'MyApp' application uses a Prometheus client to expose metrics. One approach to collecting metrics data is to use a URL in the application that points to an endpoint `http://localhost:3000/metrics` that produces Prometheus metrics data. + +The following image shows the two metrics associated with the endpoint. The HELP text explains what the metric means, and the TYPE text indicates what kind of metric it is (in this case, a gauge). `MyAppnodejs_active_request_total` indicates the number of requests (in this case, `1`). `MyAppnodejs_heap_size_total_bytes` indicates the heap size reported in bytes. There are only two numbers because this data shows the value at the moment the data was fetched. + +{{< figure src="/media/docs/grafana/intro-prometheus/endpoint-data.png" max-width="750px" caption="Endpoint example" >}} + +The 'MyApp' metrics are available in an HTTP endpoint, but how do they get to Grafana, and subsequently, into a dashboard? The process of recording and transmitting the readings of an application or piece of infrastructure is known as _telemetry_. Telemetry is critical to observability because it helps you understand exactly what's going on in your infrastructure. The metrics introduced previously, for example, `MyAppnodejs_active_requests_total`, are telemetry data. + +To get metrics into Grafana, you can use either the Prometheus software or [Grafana Agent](/docs/agent/latest/) to scrape metrics. Grafana Agent collects and forwards the telemetry data to open-source deployments of the Grafana Stack, Grafana Cloud, or Grafana Enterprise, where your data can be analyzed. For example, you can configure Grafana Agent to pull the data from 'MyApp' every five seconds and send the results to Grafana Cloud. + +Metrics data is only one type of telemetry data; the other kinds are logs and traces. Using Grafana Agent can be a great option to send telemetry data because as you scale your observability practices to include logs and traces, which Grafana Agent also supports, you've got a solution already in place. + +The following image illustrates how Grafana Agent works as an intermediary between 'MyApp' and Grafana Cloud. + +{{< figure src="/media/docs/grafana/intro-prometheus/grafana-agent.png" max-width="750px" caption="Grafana Agent" >}} + +## Bringing it together + +The combination of Prometheus and Grafana Agent gives you control over the metrics you want to report, where they come from, and where they’re going. Once the data is in Grafana, it can be stored in a Grafana Mimir database. Grafana dashboards consist of visualizations populated by data queried from the Prometheus data source. The PromQL query filters and aggregates the data to provide you the insight you need. With those steps, we’ve gone from raw numbers, generated by software, into Prometheus, delivered to Grafana, queried by PromQL, and visualized by Grafana. + +## What’s next? + +Now that you understand how Prometheus metrics work, what will you build? + +- One great next step is to [build a dashboard]({{< relref "../../dashboards/build-dashboards/" >}}) in Grafana and start turning that raw Prometheus telemetry data into insights about what’s going with your services and infrastructure. +- Another great step is to learn about [Grafana Mimir](/oss/mimir/), which is essentially a database for Prometheus data. If you’re wondering how to make this work for a huge number of metrics with a lot of data and fast querying, check out Grafana Mimir. +- If you’re interested in working with Prometheus data in Grafana directly, check out the [Prometheus data source]({{< relref "../../datasources/prometheus/" >}}) documentation, or check out [PromQL basics](https://prometheus.io/docs/prometheus/latest/querying/basics/). diff --git a/docs/sources/getting-started/build-first-dashboard.md b/docs/sources/getting-started/build-first-dashboard.md index 6456ee83901..4882e1a571c 100644 --- a/docs/sources/getting-started/build-first-dashboard.md +++ b/docs/sources/getting-started/build-first-dashboard.md @@ -39,14 +39,15 @@ To sign in to Grafana for the first time: To create your first dashboard: -1. Click the **New dashboard** item under the **Dashboards** icon in the side menu. +1. Click **Dashboards** in the left-side menu. +1. On the Dashboards, click **New** and select **New Dashboard** from dropdown menu. 1. On the dashboard, click **Add a new panel**. 1. In the New dashboard/Edit panel view, go to the **Query** tab. 1. Configure your [query]({{< relref "../panels-visualizations/query-transform-data/#add-a-query" >}}) by selecting `-- Grafana --` from the data source selector. This generates the Random Walk dashboard. -1. Click the **Save** icon in the top right corner of your screen to save the dashboard. +1. Click **Save** in the top right corner of your screen to save the dashboard. 1. Add a descriptive name, and then click **Save**. Congratulations, you have created your first dashboard and it is displaying results. diff --git a/docs/sources/getting-started/get-started-grafana-influxdb.md b/docs/sources/getting-started/get-started-grafana-influxdb.md index d592be07607..fc08912fd71 100644 --- a/docs/sources/getting-started/get-started-grafana-influxdb.md +++ b/docs/sources/getting-started/get-started-grafana-influxdb.md @@ -10,8 +10,6 @@ weight: 400 {{< docs/shared "influxdb/intro.md" >}} -{{< docs/shared "getting-started/first-step.md" >}} - #### Get InfluxDB You can [download InfluxDB](https://portal.influxdata.com/downloads/) and install it locally or you can sign up for [InfluxDB Cloud](https://www.influxdata.com/products/influxdb-cloud/). Windows installers are not available for some versions of InfluxDB. diff --git a/docs/sources/getting-started/get-started-grafana-ms-sql-server.md b/docs/sources/getting-started/get-started-grafana-ms-sql-server.md index 13b03e6e6e1..eb50870dd37 100644 --- a/docs/sources/getting-started/get-started-grafana-ms-sql-server.md +++ b/docs/sources/getting-started/get-started-grafana-ms-sql-server.md @@ -12,8 +12,6 @@ weight: 500 Microsoft SQL Server is a popular relational database management system that is widely used in development and production environments. This topic walks you through the steps to create a series of dashboards in Grafana to display metrics from a MS SQL Server database. You can also configure the MS SQL Server data source on a [Grafana Cloud](/docs/grafana-cloud/) instance without having to host Grafana yourself. -{{< docs/shared "getting-started/first-step.md" >}} - > **Note:** You must install Grafana 5.1+ in order to use the integrated MS SQL data source. #### Download MS SQL Server @@ -28,10 +26,10 @@ If you are on a Windows host but want to use Grafana and MS SQL data source on a #### Add the MS SQL data source -1. In the Grafana side menu, hover your cursor over the **Configuration** (gear) icon and then click **Data Sources**. -1. Filter by `mssql` and select the **Microsoft SQL Server** option. -1. Click **Add data source** in the top right header to open the configuration page. -1. Enter the information specified in the table below, then click **Save & Test**. +1. Click **Connections** in the left-side menu and filter by `mssql`. +1. Select the **Microsoft SQL Server** option. +1. Click **Create a Microsoft SQL Server data source** in the top right corner to open the configuration page. +1. Enter the information specified in the table below, then click **Save & test**. | Name | Description | | ---------- | --------------------------------------------------------------------------------------------------------------------- | diff --git a/docs/sources/getting-started/get-started-grafana-prometheus.md b/docs/sources/getting-started/get-started-grafana-prometheus.md index 74d608aed67..ff3f00af5af 100644 --- a/docs/sources/getting-started/get-started-grafana-prometheus.md +++ b/docs/sources/getting-started/get-started-grafana-prometheus.md @@ -12,8 +12,6 @@ weight: 300 Prometheus is an open source monitoring system for which Grafana provides out-of-the-box support. This topic walks you through the steps to create a series of dashboards in Grafana to display system metrics for a server monitored by Prometheus. -{{< docs/shared "getting-started/first-step.md" >}} - _Grafana and Prometheus_: 1. Download Prometheus and node_exporter diff --git a/docs/sources/introduction/grafana-cloud.md b/docs/sources/introduction/grafana-cloud.md index ce4b6cee99d..62dae9e5baa 100644 --- a/docs/sources/introduction/grafana-cloud.md +++ b/docs/sources/introduction/grafana-cloud.md @@ -1,4 +1,7 @@ --- +labels: + products: + - cloud title: Grafana Cloud weight: 300 --- diff --git a/docs/sources/introduction/grafana-enterprise.md b/docs/sources/introduction/grafana-enterprise.md index de578294c91..32f91ef4478 100644 --- a/docs/sources/introduction/grafana-enterprise.md +++ b/docs/sources/introduction/grafana-enterprise.md @@ -1,6 +1,9 @@ --- aliases: - ../enterprise/ +labels: + products: + - enterprise description: Grafana Enterprise overview title: Grafana Enterprise weight: 200 diff --git a/docs/sources/panels-visualizations/_index.md b/docs/sources/panels-visualizations/_index.md index d5f6742c79a..a0097eabbc4 100644 --- a/docs/sources/panels-visualizations/_index.md +++ b/docs/sources/panels-visualizations/_index.md @@ -3,6 +3,12 @@ aliases: - dashboards/configure-panels-visualizations/ - features/panels/panels/ - panels/ +cascade: + labels: + products: + - cloud + - enterprise + - oss keywords: - grafana - configure diff --git a/docs/sources/panels-visualizations/query-transform-data/transform-data/index.md b/docs/sources/panels-visualizations/query-transform-data/transform-data/index.md index 8fa2a5dd58e..0099b631dfb 100644 --- a/docs/sources/panels-visualizations/query-transform-data/transform-data/index.md +++ b/docs/sources/panels-visualizations/query-transform-data/transform-data/index.md @@ -732,3 +732,9 @@ Here is the result after adding a Limit transformation with a value of '3': | 2020-07-07 11:34:20 | Temperature | 25 | | 2020-07-07 11:34:20 | Humidity | 22 | | 2020-07-07 10:32:20 | Humidity | 29 | + +### Time series to table transform + +> **Note:** This transformation is available in Grafana 9.5+ as an opt-in beta feature. Modify Grafana [configuration file]({{< relref "../../../setup-grafana/configure-grafana/#configuration-file-location" >}}) to enable the `timeSeriesTable` [feature toggle]({{< relref "../../../setup-grafana/configure-grafana/#feature_toggles" >}}) to use it. + +Use this transformation to convert time series result into a table, converting time series data frame into a "Trend" field. "Trend" field can then be rendered using [sparkline cell type]({{< relref "../../visualizations/table/#sparkline" >}}), producing an inline sparkline for each table row. If there are multiple time series queries, each will result in a separate table data frame. These can be joined using join or merge transforms to produce a single table with multiple sparklines per row. diff --git a/docs/sources/panels-visualizations/visualizations/canvas/index.md b/docs/sources/panels-visualizations/visualizations/canvas/index.md index 6d9b5b2d28b..578f79039aa 100644 --- a/docs/sources/panels-visualizations/visualizations/canvas/index.md +++ b/docs/sources/panels-visualizations/visualizations/canvas/index.md @@ -84,11 +84,24 @@ The inline editing toggle enables you to lock or unlock the canvas panel. When t ### Data links -Canvas supports [data links](https://grafana.com/docs/grafana/latest/panels-visualizations/configure-data-links/). Once you've added a data link to the panel, you can display it by following these steps: +Canvas supports [data links](https://grafana.com/docs/grafana/latest/panels-visualizations/configure-data-links/). You can create a data link for a metric-value element and display it for all elements that use the field name by following these steps: 1. Set an element to be tied to a field value. 1. Turn off the inline editing toggle. +1. Create an override for **Fields with name** and select the element field name from the list. +1. Click the **+ Add override property** button. +1. Select `Datalinks > Datalinks` from the list. +1. Click **+Add link** add a title and URL for the data link. 1. Hover over the element to display the data link tooltip. 1. Click on the element to be able to open the data link. +If multiple elements use the same field name, and you want to control which elements display the data link, you can create a unique field name using the [add field from calculation transform](https://grafana.com/docs/grafana/latest/panels-visualizations/query-transform-data/transform-data/#add-field-from-calculation). The alias you create in the transformation will appear as a field you can use with an element. + +1. In the panel editor for the canvas panel, click the **Transform** tab. +1. Select **Add field from calculation** from the list of transformations, or click **+ Add transformation** to display the list first. +1. Choose **Reduce row** from the dropdown and click the field name that you want to use for the element. +1. Select **All Values** from the **Calculation** dropdown. +1. Add an alias for the field name. +1. Reference the new unique field alias to create the element and field override. + {{< video-embed src="/media/docs/grafana/canvas-data-links-9-4-0.mp4" max-width="750px" caption="Data links demo" >}} diff --git a/docs/sources/panels-visualizations/visualizations/table/index.md b/docs/sources/panels-visualizations/visualizations/table/index.md index 8e3e6b13d6c..c4b22966547 100644 --- a/docs/sources/panels-visualizations/visualizations/table/index.md +++ b/docs/sources/panels-visualizations/visualizations/table/index.md @@ -108,6 +108,22 @@ The gauge is split up in small cells that are lit or unlit. {{< figure src="/static/img/docs/tables/lcd-gauge.png" max-width="500px" caption="LCD gauge" class="docs-image--no-shadow" >}} +#### Label Options + +Additionally, labels displayed alongside of the gauges can be set to be colored by value, match the theme text color, or be hidden. + +**Value Color** + +{{< figure src="/static/img/docs/tables/value-color-mode.png" max-width="500px" caption="Color Label by Value" class="docs-image--no-shadow" >}} + +**Text Color** + +{{< figure src="/static/img/docs/tables/text-color-mode.png" max-width="500px" caption="Color Label by theme color" class="docs-image--no-shadow" >}} + +**Hidden** + +{{< figure src="/static/img/docs/tables/hidden-mode.png" max-width="500px" caption="Hide Label" class="docs-image--no-shadow" >}} + ### JSON view Shows value formatted as code. If a value is an object the JSON view allowing browsing the JSON object will appear on hover. @@ -122,6 +138,14 @@ If you have a field value that is an image URL or a base64 encoded image you can {{< figure src="/static/img/docs/v73/table_hover.gif" max-width="900px" caption="Table hover" >}} +### Sparkline + +> **Note:** This cell type is available in Grafana 9.5+ as an opt-in beta feature. Modify Grafana [configuration file]({{< relref "../../../setup-grafana/configure-grafana/#configuration-file-location" >}}) to enable the `timeSeriesTable` [feature toggle]({{< relref "../../../setup-grafana/configure-grafana/#feature_toggles" >}}) to use it. + +Shows value rendered as a sparkline. Requires [time series to table]({{< relref "../../query-transform-data/transform-data/#time-series-to-table-transform" >}}) data transform. + +{{< figure src="/static/img/docs/tables/sparkline.png" max-width="500px" caption="Sparkline" class="docs-image--no-shadow" >}} + ## Cell value inspect Enables value inspection from table cell. The raw value is presented in a modal window. diff --git a/docs/sources/release-notes/_index.md b/docs/sources/release-notes/_index.md index 1b6b009f1de..1480c23ac84 100644 --- a/docs/sources/release-notes/_index.md +++ b/docs/sources/release-notes/_index.md @@ -1,4 +1,10 @@ --- +cascade: + labels: + products: + - cloud + - enterprise + - oss title: Release notes weight: 10000 --- diff --git a/docs/sources/search/_index.md b/docs/sources/search/_index.md index b31c80748d3..5cb68b0aeff 100644 --- a/docs/sources/search/_index.md +++ b/docs/sources/search/_index.md @@ -1,6 +1,12 @@ --- aliases: - ./ +cascade: + labels: + products: + - cloud + - enterprise + - oss description: Learn how to search for Grafana dashboards keywords: - search diff --git a/docs/sources/setup-grafana/configure-grafana/enterprise-configuration/index.md b/docs/sources/setup-grafana/configure-grafana/enterprise-configuration/index.md index 2515c40af09..06314069a00 100644 --- a/docs/sources/setup-grafana/configure-grafana/enterprise-configuration/index.md +++ b/docs/sources/setup-grafana/configure-grafana/enterprise-configuration/index.md @@ -456,13 +456,13 @@ The default is `25`. ### url -The full Redis URL of your Redis server. For example: `redis://username:password@localhost:6739/0`. To enable TLS, use the `redis` scheme. +The full Redis URL of your Redis server. For example: `redis://username:password@localhost:6379`. To enable TLS, use the `redis` scheme. The default is `"redis://localhost:6379"`. ### cluster -A comma-separated list of Redis cluster members, either in `host:port` format or using the full Redis URLs (`redis://username:password@localhost:6739`). For example, `localhost:7000, localhost: 7001, localhost:7002`. +A comma-separated list of Redis cluster members, either in `host:port` format or using the full Redis URLs (`redis://username:password@localhost:6379`). For example, `localhost:7000, localhost: 7001, localhost:7002`. If you use the full Redis URLs, then you can specify the scheme, username, and password only once. For example, `redis://username:password@localhost:0000,localhost:1111,localhost:2222`. You cannot specify a different username and password for each URL. > **Note:** If you have specify `cluster`, the value for `url` is ignored. diff --git a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md index 776b5ca774e..5b31881de3d 100644 --- a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md +++ b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md @@ -59,10 +59,9 @@ Alpha features might be changed or removed without prior notice. | `live-service-web-worker` | This will use a webworker thread to processes events rather than the main thread | | `queryOverLive` | Use Grafana Live WebSocket to execute backend queries | | `publicDashboards` | Enables public access to dashboards | +| `publicDashboardsEmailSharing` | Enables public dashboard sharing to be restricted to only allowed emails | | `lokiLive` | Support WebSocket streaming for loki (early prototype) | | `lokiDataframeApi` | Use experimental loki api for WebSocket streaming (early prototype) | -| `dashboardComments` | Enable dashboard-wide comments | -| `annotationComments` | Enable annotation comments | | `storage` | Configurable storage for dashboards, datasources, and resources | | `exploreMixedDatasource` | Enable mixed datasource in Explore | | `tracing` | Adds trace ID to error notifications | @@ -92,17 +91,19 @@ Alpha features might be changed or removed without prior notice. | `individualCookiePreferences` | Support overriding cookie preferences per user | | `drawerDataSourcePicker` | Changes the user experience for data source selection to a drawer. | | `traceqlSearch` | Enables the 'TraceQL Search' tab for the Tempo datasource which provides a UI to generate TraceQL queries | +| `prometheusMetricEncyclopedia` | Replaces the Prometheus query builder metric select option with a paginated and filterable component | +| `timeSeriesTable` | Enable time series table transformer & sparkline cell type | +| `influxdbBackendMigration` | Query InfluxDB InfluxQL without the proxy | ## Development feature toggles The following toggles require explicitly setting Grafana's [app mode]({{< relref "../_index.md/#app_mode" >}}) to 'development' before you can enable this feature toggle. These features tend to be experimental. -| Feature toggle name | Description | -| ------------------------------ | ----------------------------------------------------------------------- | -| `publicDashboardsEmailSharing` | Allows public dashboard sharing to be restricted to only allowed emails | -| `k8s` | Explore native k8s integrations | -| `dashboardsFromStorage` | Load dashboards from the generic storage interface | -| `grpcServer` | Run GRPC server | -| `entityStore` | SQL-based entity store (requires storage flag also) | -| `queryLibrary` | Reusable query library | -| `nestedFolders` | Enable folder nesting | +| Feature toggle name | Description | +| ----------------------- | --------------------------------------------------- | +| `k8s` | Explore native k8s integrations | +| `dashboardsFromStorage` | Load dashboards from the generic storage interface | +| `grpcServer` | Run GRPC server | +| `entityStore` | SQL-based entity store (requires storage flag also) | +| `queryLibrary` | Reusable query library | +| `nestedFolders` | Enable folder nesting | diff --git a/docs/sources/setup-grafana/configure-security/audit-grafana.md b/docs/sources/setup-grafana/configure-security/audit-grafana.md index c0bbafce2d0..1bc989ea6d3 100644 --- a/docs/sources/setup-grafana/configure-security/audit-grafana.md +++ b/docs/sources/setup-grafana/configure-security/audit-grafana.md @@ -7,6 +7,10 @@ keywords: - auditing - audit - logs +labels: + products: + - cloud + - enterprise title: Audit a Grafana instance weight: 800 --- diff --git a/docs/sources/setup-grafana/configure-security/configure-authentication/_index.md b/docs/sources/setup-grafana/configure-security/configure-authentication/_index.md index 158c51117d1..e450af2a7bc 100644 --- a/docs/sources/setup-grafana/configure-security/configure-authentication/_index.md +++ b/docs/sources/setup-grafana/configure-security/configure-authentication/_index.md @@ -2,6 +2,12 @@ aliases: - ../../auth/ - ../../auth/overview/ +cascade: + labels: + products: + - cloud + - enterprise + - oss description: Learn about all the ways in which you can configure Grafana to authenticate users. title: Configure authentication @@ -30,24 +36,24 @@ The following table shows all supported authentication providers and the feature ## Grafana Auth Grafana of course has a built in user authentication system with password authentication enabled by default. You can -disable authentication by enabling anonymous access. You can also hide login form and only allow login through an auth +disable authentication by enabling anonymous access. You can also hide the login form and only allow login through an auth provider (listed above). There are also options for allowing self sign up. ### Login and short-lived tokens > The following applies when using Grafana's built in user authentication, LDAP (without Auth proxy) or OAuth integration. -Grafana are using short-lived tokens as a mechanism for verifying authenticated users. -These short-lived tokens are rotated each `token_rotation_interval_minutes` for an active authenticated user. +Grafana uses short-lived tokens as a mechanism for verifying authenticated users. +These short-lived tokens are rotated on an interval specified by `token_rotation_interval_minutes` for active authenticated users. -An active authenticated user that gets it token rotated will extend the `login_maximum_inactive_lifetime_duration` time from "now" that Grafana will remember the user. -This means that a user can close its browser and come back before `now + login_maximum_inactive_lifetime_duration` and still being authenticated. -This is true as long as the time since user login is less than `login_maximum_lifetime_duration`. +Inactive authenticated users will remain logged in for a duration specified by `login_maximum_inactive_lifetime_duration`. +This means that a user can close a Grafana window and return before `now + login_maximum_inactive_lifetime_duration` to continue their session. +This is true as long as the time since last user login is less than `login_maximum_lifetime_duration`. #### Remote logout You can logout from other devices by removing login sessions from the bottom of your profile page. If you are -a Grafana admin user you can also do the same for any user from the Server Admin / Edit User view. +a Grafana admin user, you can also do the same for any user from the Server Admin / Edit User view. ## Settings @@ -59,15 +65,13 @@ Example: # Login cookie name login_cookie_name = grafana_session - # The maximum lifetime (duration) an authenticated user can be inactive before being required to login at next visit. Default is 7 days (7d). This setting should be expressed as a duration, e.g. 5m (minutes), 6h (hours), 10d (days), 2w (weeks), 1M (month). The lifetime resets at each successful token rotation (token_rotation_interval_minutes). login_maximum_inactive_lifetime_duration = - # The maximum lifetime (duration) an authenticated user can be logged in since login time before being required to login. Default is 30 days (30d). This setting should be expressed as a duration, e.g. 5m (minutes), 6h (hours), 10d (days), 2w (weeks), 1M (month). login_maximum_lifetime_duration = -# How often should auth tokens be rotated for authenticated users when being active. The default is each 10 minutes. +# How often should auth tokens be rotated for authenticated users when being active. The default is every 10 minutes. token_rotation_interval_minutes = 10 # The maximum lifetime (seconds) an API key can be used. If it is set all the API keys should have limited lifetime that is lower than this value. @@ -91,11 +95,11 @@ org_name = Main Org. org_role = Viewer ``` -If you change your organization name in the Grafana UI this setting needs to be updated to match the new name. +If you change your organization name in the Grafana UI, this setting needs to be updated to match the new name. ### Basic authentication -Basic auth is enabled by default and works with the built in Grafana user password authentication system and LDAP +Basic auth is enabled by default and works with the built-in Grafana user-password authentication system and LDAP authentication integration. To disable basic auth: @@ -107,7 +111,7 @@ enabled = false ### Disable login form -You can hide the Grafana login form using the below configuration settings. +Hide the Grafana login form using the below configuration settings. ```bash [auth] diff --git a/docs/sources/setup-grafana/configure-security/configure-authentication/enhanced-ldap/index.md b/docs/sources/setup-grafana/configure-security/configure-authentication/enhanced-ldap/index.md index f886693c3a2..621258eae50 100644 --- a/docs/sources/setup-grafana/configure-security/configure-authentication/enhanced-ldap/index.md +++ b/docs/sources/setup-grafana/configure-security/configure-authentication/enhanced-ldap/index.md @@ -18,7 +18,7 @@ weight: 900 The enhanced LDAP integration adds additional functionality on top of the [LDAP integration]({{< relref "ldap/" >}}) available in the open source edition of Grafana. -> **Note:** Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud Advanced]({{< ref "/grafana-cloud" >}}). +> **Note:** Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud Advanced](/docs/grafana-cloud). > To control user access with role-based permissions, refer to [role-based access control]({{< relref "../../../../administration/roles-and-permissions/access-control/" >}}). diff --git a/docs/sources/setup-grafana/configure-security/configure-database-encryption/_index.md b/docs/sources/setup-grafana/configure-security/configure-database-encryption/_index.md index c9352063e9e..354df10bdb0 100644 --- a/docs/sources/setup-grafana/configure-security/configure-database-encryption/_index.md +++ b/docs/sources/setup-grafana/configure-security/configure-database-encryption/_index.md @@ -49,19 +49,19 @@ You can re-encrypt secrets in order to: - Move already existing secrets' encryption forward from legacy to envelope encryption. - Re-encrypt secrets after a [data keys rotation](#rotate-data-keys). -To re-encrypt secrets, use the [Grafana CLI]({{< ref "/cli" >}}) by running the `grafana-cli admin secrets-migration re-encrypt` command or the `/encryption/reencrypt-secrets` endpoint of the Grafana [Admin API]({{< relref "../../../developers/http_api/admin/#roll-back-secrets" >}}). It's safe to run more than once, more recommended under maintenance mode. +To re-encrypt secrets, use the [Grafana CLI]({{< relref "../../../cli/" >}}) by running the `grafana-cli admin secrets-migration re-encrypt` command or the `/encryption/reencrypt-secrets` endpoint of the Grafana [Admin API]({{< relref "../../../developers/http_api/admin/#roll-back-secrets" >}}). It's safe to run more than once, more recommended under maintenance mode. ### Roll back secrets You can roll back secrets encrypted with envelope encryption to legacy encryption. This might be necessary to downgrade to Grafana versions prior to v9.0 after an unsuccessful upgrade. -To roll back secrets, use the [Grafana CLI]({{< ref "/cli" >}}) by running the `grafana-cli admin secrets-migration rollback` command or the `/encryption/rollback-secrets` endpoint of the Grafana [Admin API]({{< relref "../../../developers/http_api/admin/#re-encrypt-secrets" >}}). It's safe to run more than once, more recommended under maintenance mode. +To roll back secrets, use the [Grafana CLI]({{< relref "../../../cli/" >}}) by running the `grafana-cli admin secrets-migration rollback` command or the `/encryption/rollback-secrets` endpoint of the Grafana [Admin API]({{< relref "../../../developers/http_api/admin/#re-encrypt-secrets" >}}). It's safe to run more than once, more recommended under maintenance mode. ### Re-encrypt data keys You can re-encrypt data keys encrypted with a specific key encryption key (KEK). This allows you to either re-encrypt existing data keys with a new KEK version (see [KMS integration](#kms-integration) rotation) or to re-encrypt them with a completely different KEK. -To re-encrypt data keys, use the [Grafana CLI]({{< ref "/cli" >}}) by running the `grafana-cli admin secrets-migration re-encrypt-data-keys` command or the `/encryption/reencrypt-data-keys` endpoint of the Grafana [Admin API]({{< relref "../../../developers/http_api/admin/#re-encrypt-data-encryption-keys" >}}). It's safe to run more than once, more recommended under maintenance mode. +To re-encrypt data keys, use the [Grafana CLI]({{< relref "../../../cli/" >}}) by running the `grafana-cli admin secrets-migration re-encrypt-data-keys` command or the `/encryption/reencrypt-data-keys` endpoint of the Grafana [Admin API]({{< relref "../../../developers/http_api/admin/#re-encrypt-data-encryption-keys" >}}). It's safe to run more than once, more recommended under maintenance mode. ### Rotate data keys @@ -92,4 +92,4 @@ Grafana integrates with the following key management services: Grafana encrypts secrets using Advanced Encryption Standard in Cipher FeedBack mode (AES-CFB). You might prefer to use AES in Galois/Counter Mode (AES-GCM) instead, to meet your company’s security requirements or in order to maintain consistency with other services. -To change your encryption mode, update the `algorithm` value in the `[security.encryption]` section of your Grafana configuration file. For further details, refer to [Enterprise configuration]({{< relref "../../configure-grafana/enterprise-configuration/#securityencryption" >}}). +To change your encryption mode, update the `algorithm` value in the `[security.encryption]` section of your Grafana configuration file. For further details, refer to [Enterprise configuration]({{< relref "../../configure-grafana/enterprise-configuration#securityencryption" >}}). diff --git a/docs/sources/setup-grafana/configure-security/configure-private-datasource-connect/index.md b/docs/sources/setup-grafana/configure-security/configure-private-datasource-connect/index.md deleted file mode 100644 index d91e9f75588..00000000000 --- a/docs/sources/setup-grafana/configure-security/configure-private-datasource-connect/index.md +++ /dev/null @@ -1,228 +0,0 @@ ---- -title: Configure Grafana private data source connect -weight: 200 -_build: - list: false ---- - -# Configure Grafana private data source connect - -Private data source connect (PDC) enables you to securely connect your Grafana Cloud stack to data sources hosted on a private network. - -> **Note:** Private data source connect is available as part of Grafana Cloud Pro, Advanced, and Enterprise. - -> **Note:** Private data source connect is currently in private preview. Grafana Labs offers support on a best-effort basis, and breaking changes might occur prior to the feature being made generally available. - -Observability data is often located within private networks such as on-premise networks and Virtual Private Clouds (VPCs) hosted by AWS, Azure, Google Cloud Platform, or other public cloud providers. For example, you might host your Splunk or Elasticsearch service on your private network, or you might want to visualize data from Amazon RDS hosted in a VPC. - -By using private data source connect, you can query data that lives within your private network without opening your network to inbound traffic from Grafana Cloud. Queries and data are encrypted from the PDC agent to the user’s browser. - -## Key features - -Private data source connect routes queries and responses between your Grafana Cloud stack and your private data source through an agent deployed in your network. - -![Private Data Source Connect diagram](/media/docs/grafana/grafana-pdc-diagram-1.png) - -- The SSH client running in your network is configured with reverse dynamic forwarding* (\_the* [-R <port>](https://man.openbsd.org/ssh.1#R~2) _option_).\_ In this mode, SSH acts as a [SOCKS](https://en.wikipedia.org/wiki/SOCKS) proxy and forwards connections to destinations requested by Grafana. -- You can restrict the destinations reachable by Grafana Cloud over this tunnel using the [PermitRemoteOpen](https://man.openbsd.org/ssh_config.5#PermitRemoteOpen) SSH option. -- The monitoring and supervision of the SSH tunnel are delegated to an agent running inside your private network. At any time, you can shut off the agent, which terminates the connection. -- The agent running inside your private network will be a horizontally scalable component to ensure fault-tolerance. -- Traffic is encrypted all the way from the Grafana Cloud instance to the SSH client running in your private network. If the private data source supports encryption (for example, HTTPS), traffic will be end-to-end encrypted. -- In your Grafana Cloud instance, you will be able to configure compatible datasources to route requests through the SSH tunnel. Each data source is configured using the internal DNS name (for example, mysql.your.domain:3306), as if Grafana were running directly inside the private network. - -## Known limitations - -The preview version of PDC has the following known limitations: - -- You can connect each Grafana instance to just one private network. Once PDC is generally available, you can connect a single Grafana instance to multiple private networks (VPCs, on-premise networks, and so on). -- During early access, Grafana Labs’ engineering team will configure the connection in Grafana, and you will deploy an agent in your private network. Once PDC is generally available, you can set up and manage your own private data source connections. -- Private data source connect is available for the following data sources: - - Elasticsearch - - Graphite - - Influxdb - - Loki - - Opentsdb - - Parca - - Phlare - - Prometheus - - Tempo - - Jaeger - - Zipkin - -> **Note:** Because many data sources are maintained by community members, not all data sources work with private data source connect. - -## Set up a private data source connection - -To set up a private data source connection, deploy the Grafana PDC agent, configure which hosts and ports to allow on your network, and configure your data source with those ports. - -### Before you begin - -- You need the ability to deploy the PDC agent within your network. You can deploy it directly to a Linux or Windows server, or use a container management system like Docker or Kubernetes. -- Private data source connect is available in Grafana Cloud Pro, Cloud Advanced, and Cloud Enterprise. -- You need to know the local host name and port of the data source you would like to connect to, for example `loki:8080`. -- As with all data sources in Grafana, you need a set of credentials to access the data, for example, a username and password, or a token. Refer to the [documentation]({{< relref "../../../datasources/" >}}) for your data source to learn what credentials are needed. -- You need an administrator account for your Grafana Cloud organization. To learn more about Grafana Cloud permissions, refer to [Grafana Cloud user roles and permissions](/docs/grafana-cloud/authentication-and-permissions/cloud-roles/). - -### Steps - -To set up a private data source connection, follow these steps: - -1. In a terminal, create a new folder, navigate to it, and generate an SSH key using the following command: - - ``` - $ ssh-keygen -f ${SLUG} -N "" -t ed25519 - ``` - - The flags used for ssh-keygen command mean the following: - - - -f: The file name of the key file - - -N: The passphrase to use for the key pair, we want this empty - - -t: The encryption algorithm. - - This command generates two files: `${SLUG}` and `${SLUG}.pub`. You will send `${SLUG}.pub` to the Grafana team in the next step. - - You can find more optional SSH flags in the [SSH documentation](https://www.man7.org/linux/man-pages/man1/ssh-keygen.1.html). - -1. Open a support ticket or let your account team know that you would like to try private data source connect. In your ticket, provide the following information: - - - A list of the data sources on which you want to enable PDC. - - The Grafana Cloud stack you want to connect to your private network. - - The `${SLUG}.pub` file you generated in the previous step. - - Grafana Labs will send you a certificate and public CA. - -1. Connect to Grafana Cloud using the ssh or the pdc agent in the same directory as your private key, and the certificate and known_hosts file Grafana Labs provided to you. - - There are three connecting options: Kubernetes, SSH, or the PDC Agent Docker image. - - - **Option 1:** Using Kubernetes - - Create a Kubernetes secret with the private key and the certificate and known_hosts file Grafana Labs provided. - - ``` - $ kubectl create secret generic -n ${NAMESPACE} grafana-pdc-agent \ - --from-file=key=./${SLUG} \ - --from-file=known_hosts=./known_hosts \ - --from-file=cert.pub=./${SLUG}-cert.pub - ``` - - Generate a Kubernetes deployment to deploy the agent. - - ``` - SLUG=${SLUG} PDC_GATEWAY=${PDC_GATEWAY} NAMESPACE=${NAMESPACE} /bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/grafana/pdc-agent/main/production/kubernetes/install-agent.sh)" - kubectl apply -f deployment.yaml - ``` - - The following list contains the environment variables used in the previous commands: - - - ${PDC_GATEWAY}: The URL of the private data source connect in Grafana Cloud. The Grafana team will give you this URL. The URL follows the format `grafana-private-datasource-connect-.grafana.net` - - ${SLUG}: The name of the stack you want to connect to your data source. For example, the stack `test.grafana.net` has the slug `test.` - - ${NAMESPACE}: The Kubernetes namespace for the pdc-agent. - - - **Option 2:** Using SSH - - ``` - $ ssh -i ${SLUG} ${SLUG}@${PDC_GATEWAY} -p 22 -o UserKnownHostsFile=./known_hosts -o CertificateFile=${SLUG}-cert.pub -R 0 -vv - ``` - - The flags used in the ssh command are as follows: - - - -i ${SLUG}: The private key - - -p 22: The port to connect to - - -o [UserKnownHostsFile](https://man.openbsd.org/ssh_config.5#UserKnownHostsFile): The list of Grafana PDC servers to trust when establishing a connection for the first time - - -o [CertificateFile](https://man.openbsd.org/ssh_config.5#CertificateFile): Your public certificate - - -R 0: Runs ssh with remote port forwarding, which enables it to act as a socks server - - -vv (optional): Sets the verbosity to debug2, so hostnames can be seen. It can be set to -v, if this is not desired. - - -o [PermitRemoteOpen](https://man.openbsd.org/ssh_config.5#PermitRemoteOpen) (optional): This can be specified to restrict the destinations reachable by Grafana Cloud over this connection. - - Refer to the [OpenSSH documentation](https://linux.die.net/man/1/ssh) for a complete list of available ssh command flags. - - Additionally: - - - ${PDC_GATEWAY}: The URL of the private data source connect in Grafana Cloud. The Grafana team will give you this URL. The URL follows the format `private-datasource-connect-.grafana.net` - - ${SLUG}: The name of the stack you want to connect to your data source. For example, the stack `test.grafana.net` has the slug `test.` - - - **Option 3:** Using the [pdc-agent](https://github.com/grafana/pdc-agent) docker [image](https://hub.docker.com/r/grafana/pdc-agent/tags) - - ``` - docker run --rm --name pdc-agent -v $(pwd):/etc/keys grafana/pdc-agent:latest -i /etc/keys/${SLUG} ${SLUG}@${PDC_GATEWAY} -p 22 -o BatchMode=yes -o UserKnownHostsFile=/etc/keys/known_hosts -o CertificateFile=/etc/keys/${SLUG}-cert.pub -R 0 -v - ``` - - The flags used on this are a combination of: - - - –-rm: Remove the docker container when it exits - - --name pdc-agent: This names the docker process pdc-agent - - -v $(pwd):/etc/keys: Copies the working directory into the /etc/keys directory in the Docker container - - -i /etc/keys/${SLUG}: The private key - - -p 22: The port to connect to - - -o [BatchMode](https://man.openbsd.org/ssh_config.5#BatchMode): Skips the passphrase checking - - -o [UserKnownHostsFile](https://man.openbsd.org/ssh_config.5#UserKnownHostsFile): The list of Grafana PDC servers to trust when establishing a connection for the first time - - -o [CertificateFile](https://man.openbsd.org/ssh_config.5#CertificateFile): Your public certificate - - -R 0: Runs ssh with remote port forwarding (which allows it to act as a socks server) - - -v (optional): Sets the verbosity to debug. - - -o [PermitRemoteOpen](https://man.openbsd.org/ssh_config.5#PermitRemoteOpen) (optional): This can be specified to restrict the destinations reachable by Grafana Cloud over this connection. - -1. (Optional) For high availability, you can install additional instances of the agent on your network with the same configuration. - - These can be deployed to different regions, data centers, or providers as long as they are on the same network. - -## Configure a data source to use private data source connect - -After you have set up a private data source connection, set up a data source in Grafana to query your data. - -### Before you begin - -- Ensure the data source you want to connect to supports Private data source connect. Refer to [Known limitations](#known-limitations) for a list of supported data sources. -- [Set up a private data source connection](#set-up-a-private-data-source-connection) - -### Steps - -1. Follow the [Add a data source]({{< relref "../../../administration/data-source-management/#add-a-data-source" >}}) instructions. - -1. Enable the Secure Socks Proxy setting for your data source. - - > **Note:** If you are running Grafana v9.4.0, this setting is only available in Prometheus and Loki, but you can still enable PDC for all the data sources listed as available in this document. Reach out to the Grafana engineering team or support for assistance. - -1. In the URL field for your data source, use the same URL as if you were on your private network, instead of a public URL. - -1. Save, test, and query your data source as usual. - -### Troubleshooting - -If you have trouble connecting to your data source, check the list of destinations reachable by the PDC agent, which might be restricted using the [PermitRemoteOpen](https://man.openbsd.org/ssh_config.5#PermitRemoteOpen) SSH option. You can see this list in the agent’s configuration. - -## Audit activity on the PDC agent - -The PDC agent logs every connection attempt, whether it is successful or denied. You can use these logs to audit traffic and ensure that no unwanted actors are trying to query your data. - -The method you use to access and store the logs depends on where the agent is deployed, and your logging tool. - -The logs will be the standard debug logs from ssh, plus an introduction log when you’ve first connected to Grafana’s PDC Service. - -Once connected, the log will be: \ -`This is Grafana Private Datasource Connect!` - -Successful logs will look like this: - -``` -debug1: client_input_channel_open: ctype forwarded-tcpip rchan 1 win 2097152 max 32768 -debug1: client_request_forwarded_tcpip: listen localhost port 1234, originator ::1 port 61779 -debug1: channel 1: new [::1] -debug1: confirm forwarded-tcpip -debug1: connect_next: host 34.205.150.168 ([34.205.150.168]:443) in progress, fd=10 -debug1: channel 1: connected to 34.205.150.168 port 443 -debug1: channel 1: free: ::1, nchannels 2 -``` - -Failed connections could look like this: - -> **Note:** There are different reasons that may be logged for the failed reason. - -``` -debug1: client_input_channel_open: ctype forwarded-tcpip rchan 1 win 2097152 max 32768 -debug1: client_request_forwarded_tcpip: listen localhost port 1234, originator ::1 port 61917 -debug1: channel 1: new [::1] -debug1: confirm forwarded-tcpip -debug1: rdynamic_connect_finish: requested forward not permitted -debug1: channel 1: free: ::1, nchannels 2 -``` diff --git a/docs/sources/setup-grafana/configure-security/configure-request-security.md b/docs/sources/setup-grafana/configure-security/configure-request-security.md index 4d4f7eb4690..bd8b6b39c84 100644 --- a/docs/sources/setup-grafana/configure-security/configure-request-security.md +++ b/docs/sources/setup-grafana/configure-security/configure-request-security.md @@ -4,6 +4,11 @@ aliases: description: Request security enables you to limit requests from the Grafana server by targeting requests generated by users, such as data source metric queries and alert notifications. +labels: + products: + - cloud + - enterprise + - oss title: Configure request security weight: 1100 --- diff --git a/docs/sources/setup-grafana/configure-security/configure-team-sync.md b/docs/sources/setup-grafana/configure-security/configure-team-sync.md index 0566e697318..b19d9764441 100644 --- a/docs/sources/setup-grafana/configure-security/configure-team-sync.md +++ b/docs/sources/setup-grafana/configure-security/configure-team-sync.md @@ -5,6 +5,10 @@ aliases: - ../../enterprise/team-sync/ description: Learn how to use Team Sync to synchronize between your authentication provider teams and Grafana teams. +labels: + products: + - cloud + - enterprise title: Configure Team Sync weight: 1000 --- @@ -38,16 +42,16 @@ If you have already grouped some users into a team, then you can synchronize tha {{< figure src="/static/img/docs/enterprise/team_add_external_group.png" class="docs-image--no-shadow docs-image--right" max-width= "600px" >}} -1. In Grafana, navigate to **Configuration > Teams**. +1. In Grafana, navigate to **Administration > Teams**. 1. Select a team. -1. On the External group sync tab, and click **Add group**. +1. Go to the External group sync tab, and click **Add group**. 1. Insert the value of the group you want to sync with. This becomes the Grafana `GroupID`. Examples: - For LDAP, this is the LDAP distinguished name (DN) of LDAP group you want to synchronize with the team. - For Auth Proxy, this is the value we receive as part of the custom `Groups` header. -1. Click `Add group` to save. +1. Click **Add group** to save. > Group matching is case insensitive. diff --git a/docs/sources/setup-grafana/configure-security/export-logs.md b/docs/sources/setup-grafana/configure-security/export-logs.md index 3f11dae3c87..ca7bfa95df0 100644 --- a/docs/sources/setup-grafana/configure-security/export-logs.md +++ b/docs/sources/setup-grafana/configure-security/export-logs.md @@ -7,6 +7,10 @@ keywords: - export - usage-insights - enterprise +labels: + products: + - cloud + - oss title: Export logs of usage insights weight: 900 --- diff --git a/docs/sources/setup-grafana/set-up-grafana-monitoring.md b/docs/sources/setup-grafana/set-up-grafana-monitoring.md index 6634404fc9a..d520a4cba2e 100644 --- a/docs/sources/setup-grafana/set-up-grafana-monitoring.md +++ b/docs/sources/setup-grafana/set-up-grafana-monitoring.md @@ -14,13 +14,13 @@ weight: 800 # Set up Grafana monitoring -Grafana supports [Jaeger tracing](https://www.jaegertracing.io/). +Grafana supports tracing. -Grafana can emit Jaeger traces for its HTTP API endpoints and propagate Jaeger trace information to data sources. +Grafana can emit Jaeger or OpenTelemetry Protocol (OTLP) traces for its HTTP API endpoints and propagate Jaeger and [w3c Trace Context](https://www.w3.org/TR/trace-context/) trace information to compatible data sources. All HTTP endpoints are logged evenly (annotations, dashboard, tags, and so on). When a trace ID is propagated, it is reported with operation 'HTTP /datasources/proxy/:id/\*'. -Refer to [Configuration]({{< relref "configure-grafana/#tracingjaeger" >}}) for information about enabling Jaeger tracing. +Refer to [Configuration's OpenTelemetry section]({{< relref "configure-grafana/#tracingopentelemetry" >}}) for a reference of tracing options available in Grafana. ## View Grafana internal metrics diff --git a/docs/sources/shared/tutorials/create-plugin.md b/docs/sources/shared/tutorials/create-plugin.md index 937f2ee86d4..671154e09ba 100755 --- a/docs/sources/shared/tutorials/create-plugin.md +++ b/docs/sources/shared/tutorials/create-plugin.md @@ -6,7 +6,7 @@ Tooling for modern web development can be tricky to wrap your head around. While Grafana [create-plugin tool](https://www.npmjs.com/package/@grafana/create-plugin) is a CLI application that simplifies Grafana plugin development, so that you can focus on code. The tool scaffolds a starter plugin and all the required configuration for you. -1. In the plugin directory, create a plugin from template using create-plugin. Select `datasource` when asked the kind of plugin: +1. In the plugin directory, create a plugin from template using create-plugin. When prompted for the kind of plugin, select `datasource`: ``` npx @grafana/create-plugin@latest diff --git a/docs/sources/troubleshooting/_index.md b/docs/sources/troubleshooting/_index.md index feff9f7bb8e..e3805d150bf 100644 --- a/docs/sources/troubleshooting/_index.md +++ b/docs/sources/troubleshooting/_index.md @@ -1,6 +1,12 @@ --- aliases: - troubleshoot-dashboards/ +cascade: + labels: + products: + - cloud + - enterprise + - oss description: Guide to troubleshooting Grafana problems keywords: - grafana diff --git a/docs/sources/troubleshooting/support-bundles/index.md b/docs/sources/troubleshooting/support-bundles/index.md index d5650abfab2..f8decb69cb6 100644 --- a/docs/sources/troubleshooting/support-bundles/index.md +++ b/docs/sources/troubleshooting/support-bundles/index.md @@ -31,6 +31,7 @@ A support bundle can include any of the following components: - **Settings**: Settings for the Grafana instance - **SAML**: Healthcheck connection and metadata for SAML (only displayed if SAML is enabled) - **LDAP**: Healthcheck connection and metadata for LDAP (only displayed if LDAP is enabled) +- **OAuth2**: Healthcheck connection and metadata for each OAuth2 Provider supporter (only displayed if OAuth provider is enabled) ## Steps diff --git a/docs/sources/tutorials/build-a-panel-plugin-with-d3/index.md b/docs/sources/tutorials/build-a-panel-plugin-with-d3/index.md index 3638df56e06..4e77ee6d93b 100644 --- a/docs/sources/tutorials/build-a-panel-plugin-with-d3/index.md +++ b/docs/sources/tutorials/build-a-panel-plugin-with-d3/index.md @@ -48,7 +48,7 @@ Wait a minute. Manipulating documents based on data? That's sounds an awful lot In **SimplePanel.tsx**, change `SimplePanel` to return an `svg` with a `rect` element. ```ts -export const SimplePanel: React.FC = ({ options, data, width, height }) => { +export const SimplePanel = ({ options, data, width, height }: Props) => { const theme = useTheme(); return ( @@ -196,7 +196,7 @@ import * as d3 from 'd3'; interface Props extends PanelProps {} -export const SimplePanel: React.FC = ({ options, data, width, height }) => { +export const SimplePanel = ({ options, data, width, height }: Props) => { const theme = useTheme(); const values = [4, 8, 15, 16, 23, 42]; diff --git a/docs/sources/tutorials/build-a-streaming-data-source-plugin/index.md b/docs/sources/tutorials/build-a-streaming-data-source-plugin/index.md index bb7eece2d80..7260287ca25 100644 --- a/docs/sources/tutorials/build-a-streaming-data-source-plugin/index.md +++ b/docs/sources/tutorials/build-a-streaming-data-source-plugin/index.md @@ -42,7 +42,7 @@ In this tutorial, you'll: To build a backend for your data source plugin, Grafana requires a binary that it can execute when it loads the plugin during start-up. In this guide, we will build a binary using the [Grafana plugin SDK for Go](/docs/grafana/latest/developers/plugins/backend/grafana-plugin-sdk-for-go/). -The easiest way to get started is to use the Grafana [create-plugin tool](https://www.npmjs.com/package/@grafana/create-plugin). Navigate to the plugin folder that you configured in step 1 and type: +The easiest way to get started is to use the Grafana [create-plugin tool](https://www.npmjs.com/package/@grafana/create-plugin). Navigate to the plugin folder that you configured in step 1 and enter: ``` npx @grafana/create-plugin@latest diff --git a/docs/sources/tutorials/build-an-app-plugin/index.md b/docs/sources/tutorials/build-an-app-plugin/index.md index fa2aeb03c7e..7a8bc2a6e86 100644 --- a/docs/sources/tutorials/build-an-app-plugin/index.md +++ b/docs/sources/tutorials/build-an-app-plugin/index.md @@ -65,9 +65,9 @@ Let's add a tab for managing server instances. ```ts import { AppRootProps } from '@grafana/data'; - import React, { FC } from 'react'; + import React from 'react'; - export const Instances: FC = ({ query, path, meta }) => { + export const Instances = ({ query, path, meta }: AppRootProps) => { return

Hello

; }; ``` diff --git a/docs/sources/tutorials/grafana-fundamentals/index.md b/docs/sources/tutorials/grafana-fundamentals/index.md index 5374ac91ae0..8de83359849 100644 --- a/docs/sources/tutorials/grafana-fundamentals/index.md +++ b/docs/sources/tutorials/grafana-fundamentals/index.md @@ -323,7 +323,9 @@ Now that Grafana knows how to notify us, it's time to set up an alert rule: 1. In **Section 4**, you can add some sample text to your summary message. [Read more about message templating here](/docs/grafana/latest/alerting/unified-alerting/message-templating/). 1. Click **Save and exit** at the top of the page. 1. In Grafana's sidebar, hover the cursor over the **Alerting** (bell) icon and then click **Notification policies**. -1. Under **Root policy**, press **Edit** and change the **Default contact point** to **RequestBin**. As a system grows, admins can use the **Notification policies** setting to organize and match alert rules to specific contact points. +1. Under **Default policy**, select **...** › **Edit** and change the **Default contact point** to **RequestBin**. + As a system grows, admins can use the **Notification policies** setting to organize and match alert rules to + specific contact points. ### Trigger a Grafana Managed Alert diff --git a/docs/sources/whatsnew/_index.md b/docs/sources/whatsnew/_index.md index 21988eb5ae3..62da2dee350 100644 --- a/docs/sources/whatsnew/_index.md +++ b/docs/sources/whatsnew/_index.md @@ -53,6 +53,11 @@ aliases: - whats-new-in-v6-5/ - whats-new-in-v6-6/ - whats-new-in-v6-7/ +cascade: + labels: + products: + - cloud + - oss title: What's new weight: 1 --- diff --git a/docs/sources/whatsnew/whats-new-in-v9-4.md b/docs/sources/whatsnew/whats-new-in-v9-4.md index a7a980be37f..d47d7a20c23 100644 --- a/docs/sources/whatsnew/whats-new-in-v9-4.md +++ b/docs/sources/whatsnew/whats-new-in-v9-4.md @@ -254,12 +254,6 @@ We've added Discord as a contact point receiver for Grafana Cloud alert rules. We've made the following changes to alert administration. -#### Better guidance to configure your Alertmanagers - -Get additional help while configuring your Alertmanager. If you enter an invalid Alertmanager configuration, an error message displays, and you can choose from a previous working configuration to restart it. - -{{< figure src="/media/docs/alerting/alertmanager-config.png" max-width="750px" caption="Better guidance to configure your Alertmanager" >}} - #### Alerting landing page Introduces a new landing page that helps you get started quickly with Alerting. It also provides you with at a glance information on how Alerting works and a video to introduce you to key concepts. diff --git a/e2e/benchmarks/live/4-20hz-panels.spec.ts b/e2e/benchmarks/live/4-20hz-panels.spec.ts index 1531d4cc567..67fb90bd07c 100644 --- a/e2e/benchmarks/live/4-20hz-panels.spec.ts +++ b/e2e/benchmarks/live/4-20hz-panels.spec.ts @@ -10,7 +10,7 @@ type WithGrafanaRuntime = T & { }; const hasGrafanaRuntime = (obj: T): obj is WithGrafanaRuntime => { - return typeof (obj as any)?.grafanaRuntime === 'object'; + return 'grafanaRuntime' in obj; }; e2e.benchmark({ diff --git a/e2e/cloud-plugins-suite/azure-monitor.spec.ts b/e2e/cloud-plugins-suite/azure-monitor.spec.ts index 3b7944bb6ee..2009e0a4c89 100644 --- a/e2e/cloud-plugins-suite/azure-monitor.spec.ts +++ b/e2e/cloud-plugins-suite/azure-monitor.spec.ts @@ -44,7 +44,7 @@ function provisionAzureMonitorDatasources(datasources: AzureMonitorProvision[]) e2eSelectors.configEditor.loadSubscriptions.button().click().wait('@subscriptions').wait(500); e2eSelectors.configEditor.defaultSubscription.input().find('input').type('datasources{enter}'); // Wait for 15s so that credentials are ready. 5s has been tested locally before and seemed insufficient. - e2e().wait(15000); + e2e().wait(30000); }, expectedAlertMessage: 'Successfully connected to all Azure Monitor endpoints', // Reduce the timeout from 30s to error faster when an invalid alert message is presented diff --git a/e2e/dashboards-suite/dashboard-templating.spec.ts b/e2e/dashboards-suite/dashboard-templating.spec.ts index f555d05fecc..019fdf28113 100644 --- a/e2e/dashboards-suite/dashboard-templating.spec.ts +++ b/e2e/dashboards-suite/dashboard-templating.spec.ts @@ -27,7 +27,7 @@ e2e.scenario({ `Server:pipe = A'A"A|BB\\B|CCC`, `Server:distributed = A'A"A,Server=BB\\B,Server=CCC`, `Server:csv = A'A"A,BB\\B,CCC`, - `Server:html = A'A"A, BB\\B, CCC`, + `Server:html = A'A"A, BB\\B, CCC`, `Server:json = ["A'A\\"A","BB\\\\B","CCC"]`, `Server:percentencode = %7BA%27A%22A%2CBB%5CB%2CCCC%7D`, `Server:singlequote = 'A\\'A"A','BB\\B','CCC'`, diff --git a/e2e/dashboards-suite/load-options-from-url.spec.ts b/e2e/dashboards-suite/load-options-from-url.spec.ts index 4c03e37675b..d4e2f486eed 100644 --- a/e2e/dashboards-suite/load-options-from-url.spec.ts +++ b/e2e/dashboards-suite/load-options-from-url.spec.ts @@ -20,7 +20,7 @@ describe('Variables - Load options from Url', () => { e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownDropDown() .should('be.visible') .within(() => { - e2e().get('.variable-option').should('have.length', 9); + e2e.components.Variables.variableOption().should('have.length', 9); }); e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownOptionTexts('All').should('be.visible'); @@ -33,7 +33,7 @@ describe('Variables - Load options from Url', () => { e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownDropDown() .should('be.visible') .within(() => { - e2e().get('.variable-option').should('have.length', 9); + e2e.components.Variables.variableOption().should('have.length', 9); }); e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownOptionTexts('All').should('be.visible'); @@ -46,7 +46,7 @@ describe('Variables - Load options from Url', () => { e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownDropDown() .should('be.visible') .within(() => { - e2e().get('.variable-option').should('have.length', 9); + e2e.components.Variables.variableOption().should('have.length', 9); }); e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownOptionTexts('All').should('be.visible'); @@ -72,7 +72,7 @@ describe('Variables - Load options from Url', () => { e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownDropDown() .should('be.visible') .within(() => { - e2e().get('.variable-option').should('have.length', 9); + e2e.components.Variables.variableOption().should('have.length', 9); }); e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownOptionTexts('All').should('be.visible'); @@ -85,7 +85,7 @@ describe('Variables - Load options from Url', () => { e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownDropDown() .should('be.visible') .within(() => { - e2e().get('.variable-option').should('have.length', 9); + e2e.components.Variables.variableOption().should('have.length', 9); }); e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownOptionTexts('All').should('be.visible'); @@ -98,7 +98,7 @@ describe('Variables - Load options from Url', () => { e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownDropDown() .should('be.visible') .within(() => { - e2e().get('.variable-option').should('have.length', 9); + e2e.components.Variables.variableOption().should('have.length', 9); }); e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownOptionTexts('All').should('be.visible'); @@ -135,7 +135,7 @@ describe('Variables - Load options from Url', () => { e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownDropDown() .should('be.visible') .within(() => { - e2e().get('.variable-option').should('have.length', 9); + e2e.components.Variables.variableOption().should('have.length', 9); }); e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownOptionTexts('All').should('be.visible'); @@ -147,7 +147,7 @@ describe('Variables - Load options from Url', () => { e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownDropDown() .should('be.visible') .within(() => { - e2e().get('.variable-option').should('have.length', 65); + e2e.components.Variables.variableOption().should('have.length', 65); }); }); }); diff --git a/e2e/dashboards-suite/new-query-variable.spec.ts b/e2e/dashboards-suite/new-query-variable.spec.ts index 40956de18f4..4ef03f29168 100644 --- a/e2e/dashboards-suite/new-query-variable.spec.ts +++ b/e2e/dashboards-suite/new-query-variable.spec.ts @@ -123,7 +123,7 @@ describe('Variables - Query - Add variable', () => { e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownDropDown() .should('be.visible') .within(() => { - e2e().get('.variable-option').should('have.length', 1); + e2e.components.Variables.variableOption().should('have.length', 1); }); e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownOptionTexts('C').should('be.visible'); @@ -195,7 +195,7 @@ describe('Variables - Query - Add variable', () => { e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownDropDown() .should('be.visible') .within(() => { - e2e().get('.variable-option').should('have.length', 2); + e2e.components.Variables.variableOption().should('have.length', 2); }); e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownOptionTexts('All').should('be.visible'); diff --git a/e2e/dashboards-suite/set-options-from-ui.spec.ts b/e2e/dashboards-suite/set-options-from-ui.spec.ts index f62eee52e3e..94d1fbe60fd 100644 --- a/e2e/dashboards-suite/set-options-from-ui.spec.ts +++ b/e2e/dashboards-suite/set-options-from-ui.spec.ts @@ -33,7 +33,7 @@ describe('Variables - Set options from ui', () => { e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownDropDown() .should('be.visible') .within(() => { - e2e().get('.variable-option').should('have.length', 9); + e2e.components.Variables.variableOption().should('have.length', 9); }); e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownOptionTexts('All').should('be.visible'); @@ -46,7 +46,7 @@ describe('Variables - Set options from ui', () => { e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownDropDown() .should('be.visible') .within(() => { - e2e().get('.variable-option').should('have.length', 65); + e2e.components.Variables.variableOption().should('have.length', 65); }); e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownOptionTexts('All').should('be.visible'); @@ -89,7 +89,7 @@ describe('Variables - Set options from ui', () => { e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownDropDown() .should('be.visible') .within(() => { - e2e().get('.variable-option').should('have.length', 17); + e2e.components.Variables.variableOption().should('have.length', 17); }); e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownOptionTexts('All').should('be.visible'); @@ -105,7 +105,7 @@ describe('Variables - Set options from ui', () => { e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownDropDown() .should('be.visible') .within(() => { - e2e().get('.variable-option').should('have.length', 9); + e2e.components.Variables.variableOption().should('have.length', 9); }); e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownOptionTexts('All').should('be.visible'); @@ -147,7 +147,7 @@ describe('Variables - Set options from ui', () => { e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownDropDown() .should('be.visible') .within(() => { - e2e().get('.variable-option').should('have.length', 9); + e2e.components.Variables.variableOption().should('have.length', 9); }); e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownOptionTexts('All').should('be.visible'); @@ -160,7 +160,7 @@ describe('Variables - Set options from ui', () => { e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownDropDown() .should('be.visible') .within(() => { - e2e().get('.variable-option').should('have.length', 9); + e2e.components.Variables.variableOption().should('have.length', 9); }); e2e.pages.Dashboard.SubMenu.submenuItemValueDropDownOptionTexts('BBA').should('be.visible'); diff --git a/e2e/e2e-flow-suite/00-panel-menu-extension.spec.ts b/e2e/e2e-flow-suite/00-panel-menu-extension.spec.ts new file mode 100644 index 00000000000..426e16b2616 --- /dev/null +++ b/e2e/e2e-flow-suite/00-panel-menu-extension.spec.ts @@ -0,0 +1,17 @@ +import { e2e } from '@grafana/e2e'; + +e2e.scenario({ + describeName: 'Panel menu ui extension flow', + itName: 'Should be possible to click extension menu item', + addScenarioDataSource: false, + addScenarioDashBoard: false, + skipScenario: false, + scenario: () => { + const panelTitle = 'Random walk series'; + const extensionTitle = 'Copy'; + + e2e.flows.openDashboard({ uid: '5SdHCasdf' }); + e2e.flows.openPanelMenuExtension(extensionTitle, panelTitle); + e2e.flows.assertSuccessNotification(); + }, +}); diff --git a/e2e/panels-suite/panelEdit_queries.spec.ts b/e2e/panels-suite/panelEdit_queries.spec.ts index 03479c3703a..da1e8ef66b6 100644 --- a/e2e/panels-suite/panelEdit_queries.spec.ts +++ b/e2e/panels-suite/panelEdit_queries.spec.ts @@ -88,14 +88,14 @@ e2e.scenario({ }, }); -const expectInspectorResultAndClose = (expectCallBack: (keys: any[]) => void) => { +const expectInspectorResultAndClose = (expectCallBack: (keys: JQuery) => void) => { e2e.components.QueryTab.queryInspectorButton().should('be.visible').click(); e2e.components.PanelInspector.Query.refreshButton().should('be.visible').click(); e2e.components.PanelInspector.Query.jsonObjectKeys({ timeout: flakyTimeout }) .should('be.visible') - .within((keys: any) => expectCallBack(keys)); + .within((keys) => expectCallBack(keys)); e2e.components.Drawer.General.close().should('be.visible').click(); }; diff --git a/embed.go b/embed.go index 12878a11060..570415e0034 100644 --- a/embed.go +++ b/embed.go @@ -6,5 +6,5 @@ import ( // CueSchemaFS embeds all schema-related CUE files in the Grafana project. // -//go:embed cue.mod/module.cue kinds/*.cue kinds/*/*.cue packages/grafana-schema/src/common/*.cue public/app/plugins/*/*/*.cue public/app/plugins/*/*/plugin.json pkg/kindsys/*.cue pkg/plugins/*/*.cue +//go:embed cue.mod/module.cue kinds/*.cue kinds/*/*.cue packages/grafana-schema/src/common/*.cue public/app/plugins/*/*/*.cue public/app/plugins/*/*/plugin.json pkg/plugins/*/*.cue var CueSchemaFS embed.FS diff --git a/go.mod b/go.mod index 0b0c9681fa5..8053097d832 100644 --- a/go.mod +++ b/go.mod @@ -26,8 +26,8 @@ replace github.com/deepmap/oapi-codegen => github.com/spinillos/oapi-codegen v1. replace k8s.io/client-go => k8s.io/client-go v0.25.3 require ( - k8s.io/apiextensions-apiserver v0.25.3 - k8s.io/apimachinery v0.25.3 + k8s.io/apiextensions-apiserver v0.26.2 // indirect + k8s.io/apimachinery v0.26.2 ) require ( @@ -64,7 +64,7 @@ require ( github.com/google/uuid v1.3.0 github.com/google/wire v0.5.0 github.com/gorilla/websocket v1.5.0 - github.com/grafana/alerting v0.0.0-20230302124801-c17c23256fba + github.com/grafana/alerting v0.0.0-20230315185333-d1e3c68ac064 github.com/grafana/cuetsy v0.1.6 github.com/grafana/grafana-aws-sdk v0.12.0 github.com/grafana/grafana-azure-sdk-go v1.6.0 @@ -254,7 +254,7 @@ require ( github.com/jmoiron/sqlx v1.3.5 github.com/matryer/is v1.4.0 github.com/urfave/cli v1.22.12 - go.etcd.io/etcd/api/v3 v3.5.4 + go.etcd.io/etcd/api/v3 v3.5.5 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.37.0 go.opentelemetry.io/contrib/propagators/jaeger v1.6.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2 @@ -268,8 +268,8 @@ require ( github.com/Masterminds/semver/v3 v3.1.1 github.com/dave/dst v0.27.2 github.com/go-jose/go-jose/v3 v3.0.0 - github.com/grafana/thema v0.0.0-20230224141623-cb20887cb028 - github.com/hmarr/codeowners v1.1.1 + github.com/grafana/kindsys v0.0.0-20230309200316-812b9884a375 + github.com/grafana/thema v0.0.0-20230302221249-6952e4a999b7 github.com/weaveworks/common v0.0.0-20230208133027-16871410fca4 github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f ) @@ -300,7 +300,6 @@ require ( github.com/drone/runner-go v1.12.0 // indirect github.com/envoyproxy/go-control-plane v0.10.3 // indirect github.com/envoyproxy/protoc-gen-validate v0.6.13 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-asn1-ber/asn1-ber v1.5.4 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect @@ -336,11 +335,10 @@ require ( go.starlark.net v0.0.0-20221020143700-22309ac47eac // indirect gopkg.in/fsnotify/fsnotify.v1 v1.4.7 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - k8s.io/klog/v2 v2.80.0 // indirect - k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed // indirect + k8s.io/klog/v2 v2.80.1 // indirect + k8s.io/utils v0.0.0-20221107191617-1a15be271d1d // indirect sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect ) require ( @@ -377,6 +375,7 @@ require ( github.com/go-logr/stdr v1.2.2 // indirect github.com/google/go-github v17.0.0+incompatible github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 // indirect + github.com/hmarr/codeowners v1.1.2 github.com/imdario/mergo v0.3.12 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect @@ -416,7 +415,7 @@ replace xorm.io/xorm => github.com/grafana/xorm v0.8.3-0.20220614223926-2fcda756 // Use our fork of the upstream alertmanagers. // This is required in order to get notification delivery errors from the receivers API. -replace github.com/prometheus/alertmanager => github.com/grafana/prometheus-alertmanager v0.25.1-0.20230119183635-ec19b0a443b7 +replace github.com/prometheus/alertmanager => github.com/grafana/prometheus-alertmanager v0.25.1-0.20230308154952-78fedf89728b // grpc v1.46.0 removed "WithBalancerName()" API, still in use by weaveworks/commons. replace google.golang.org/grpc => google.golang.org/grpc v1.45.0 diff --git a/go.sum b/go.sum index 86f37dd3b9f..660ac3c09a0 100644 --- a/go.sum +++ b/go.sum @@ -731,8 +731,8 @@ github.com/elazarl/goproxy/ext v0.0.0-20220115173737-adb46da277ac h1:9yrT5tmn9Zc github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful/v3 v3.8.0 h1:eCZ8ulSerjdAiaNpF7GxXIE7ZCMo1moN1qX+S609eVw= github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE= github.com/emicklei/proto v1.10.0 h1:pDGyFRVV5RvV+nkBK9iy3q67FBy9Xa7vwrOTE+g5aGw= github.com/emicklei/proto v1.10.0/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= @@ -776,7 +776,6 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fsouza/fake-gcs-server v1.7.0/go.mod h1:5XIRs4YvwNbNoz+1JF8j6KLAyDh7RHGAyAK3EP2EsNk= github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= @@ -1259,6 +1258,8 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grafana/alerting v0.0.0-20230302124801-c17c23256fba h1:ScqEvk2xPpUIKE+m45meufYlLlediv7Y/hHKcotW/1o= github.com/grafana/alerting v0.0.0-20230302124801-c17c23256fba/go.mod h1:NoSLbfmUwE+omWFReFrLtbtOItmvTbuQERJ6XFYp9ME= +github.com/grafana/alerting v0.0.0-20230315185333-d1e3c68ac064 h1:MtsWzSTav7NGKolO+TaJQUcyR7VY0YpUROVsJX8ktIU= +github.com/grafana/alerting v0.0.0-20230315185333-d1e3c68ac064/go.mod h1:nHfrSTdV7/l74N5/ezqlQ+JwSvIChhN3G5+PjCfwG/E= github.com/grafana/codejen v0.0.3 h1:tAWxoTUuhgmEqxJPOLtJoxlPBbMULFwKFOcRsPRPXDw= github.com/grafana/codejen v0.0.3/go.mod h1:zmwwM/DRyQB7pfuBjTWII3CWtxcXh8LTwAYGfDfpR6s= github.com/grafana/cuetsy v0.1.6 h1:61QGIDy1rVABU3OkoarOn0+qPdGopIJr34PyWVmGDfs= @@ -1277,16 +1278,18 @@ github.com/grafana/grafana-plugin-sdk-go v0.94.0/go.mod h1:3VXz4nCv6wH5SfgB3mlW3 github.com/grafana/grafana-plugin-sdk-go v0.114.0/go.mod h1:D7x3ah+1d4phNXpbnOaxa/osSaZlwh9/ZUnGGzegRbk= github.com/grafana/grafana-plugin-sdk-go v0.153.0 h1:5Z3NU/W32BsElkiqalvh6ow0Mx81GhAk94+GddIuTrQ= github.com/grafana/grafana-plugin-sdk-go v0.153.0/go.mod h1:4f/8Gf6xMwqXhOmS5U2RPmKQ2UgyA0bVteM/gxGFaCI= +github.com/grafana/kindsys v0.0.0-20230309200316-812b9884a375 h1:iWFjqAU5GjIV/HetIE/Me6VF3SRw29u5QviMVbJUVQo= +github.com/grafana/kindsys v0.0.0-20230309200316-812b9884a375/go.mod h1:213a3clTiegHfheYcLPLeEyHv/azK/fAF67OEbzuLzw= github.com/grafana/phlare/api v0.1.3 h1:mYTaE9mLsAW/uzPXlW/PQSLsZ4ojBFA+oAMfR/PDdw8= github.com/grafana/phlare/api v0.1.3/go.mod h1:29vcLwFDmZBDce2jwFIMtzvof7fzPadT8VMKw9ks7FU= -github.com/grafana/prometheus-alertmanager v0.25.1-0.20230119183635-ec19b0a443b7 h1:ma1CfisUaAXQzL24tCao9yMleZYsFJ853m2l0rgahyE= -github.com/grafana/prometheus-alertmanager v0.25.1-0.20230119183635-ec19b0a443b7/go.mod h1:MnBfDPXJqXmmfPwQlCLvVUdqfnvrAw+hSPtDeaaFwj4= +github.com/grafana/prometheus-alertmanager v0.25.1-0.20230308154952-78fedf89728b h1:VQOGGGJ2lKcVPANyzIESKYhSeA0QIvUQwfA3CbrkDfA= +github.com/grafana/prometheus-alertmanager v0.25.1-0.20230308154952-78fedf89728b/go.mod h1:MnBfDPXJqXmmfPwQlCLvVUdqfnvrAw+hSPtDeaaFwj4= github.com/grafana/saml v0.4.13-0.20230203140620-5f476db5c00a h1:aWSTt/pTOI4uGY9DhBMG1l0GOnGjIYtaqxzYR3/q82o= github.com/grafana/saml v0.4.13-0.20230203140620-5f476db5c00a/go.mod h1:igEejV+fihTIlHXYP8zOec3V5A8y3lws5bQBFsTm4gA= github.com/grafana/sqlds/v2 v2.3.10 h1:HWKhE0vR6LoEiE+Is8CSZOgaB//D1yqb2ntkass9Fd4= github.com/grafana/sqlds/v2 v2.3.10/go.mod h1:c6ibxnxRVGxV/0YkEgvy7QpQH/lyifFyV7K/14xvdIs= -github.com/grafana/thema v0.0.0-20230224141623-cb20887cb028 h1:6DXb3CmghXpjtd0VjK1FDEjvHhNcXfYSxUcEfxyMx9w= -github.com/grafana/thema v0.0.0-20230224141623-cb20887cb028/go.mod h1:T6q1RVzq5fzVbm+QBeIsTmVzuXlMaArp4wxfLvcaMV0= +github.com/grafana/thema v0.0.0-20230302221249-6952e4a999b7 h1:XOxaBjhozlleshff3mKNdp55ul74nXJEX3wz8ckjTpc= +github.com/grafana/thema v0.0.0-20230302221249-6952e4a999b7/go.mod h1:T6q1RVzq5fzVbm+QBeIsTmVzuXlMaArp4wxfLvcaMV0= github.com/grafana/xorm v0.8.3-0.20220614223926-2fcda7565af6 h1:I9dh1MXGX0wGyxdV/Sl7+ugnki4Dfsy8lv2s5Yf887o= github.com/grafana/xorm v0.8.3-0.20220614223926-2fcda7565af6/go.mod h1:ZkJLEYLoVyg7amJK/5r779bHyzs2AU8f8VMiP6BM7uY= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= @@ -1405,8 +1408,8 @@ github.com/hetznercloud/hcloud-go v1.26.2/go.mod h1:2C5uMtBiMoFr3m7lBFPf7wXTdh33 github.com/hetznercloud/hcloud-go v1.32.0/go.mod h1:XX/TQub3ge0yWR2yHWmnDVIrB+MQbda1pHxkUmDlUME= github.com/hetznercloud/hcloud-go v1.35.3 h1:WCmFAhLRooih2QHAsbCbEdpIHnshQQmrPqsr3rHE1Ow= github.com/hetznercloud/hcloud-go v1.35.3/go.mod h1:mepQwR6va27S3UQthaEPGS86jtzSY9xWL1e9dyxXpgA= -github.com/hmarr/codeowners v1.1.1 h1:a1eD22I36JYH6O/zb+R+JkJgQ3CSlbu6H9EserOojSw= -github.com/hmarr/codeowners v1.1.1/go.mod h1:+ez+YARvfVhzL1MzY0f2+D/VusjODs4iRj3tO/IxBMw= +github.com/hmarr/codeowners v1.1.2 h1:CdmLJ0e2s2aaH21+3HW1HXJyJqz+OCEiMBfD9iZb3n8= +github.com/hmarr/codeowners v1.1.2/go.mod h1:+ez+YARvfVhzL1MzY0f2+D/VusjODs4iRj3tO/IxBMw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= github.com/huandu/xstrings v1.3.1 h1:4jgBlKK6tLKFvO8u5pmYjG91cqytmDCDvGh7ECVFfFs= @@ -2330,8 +2333,9 @@ go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.4 h1:OHVyt3TopwtUQ2GKdd5wu3PmmipR4FTwCqoEjSyRdIc= go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= +go.etcd.io/etcd/api/v3 v3.5.5 h1:BX4JIbQ7hl7+jL+g+2j5UAr0o1bctCm6/Ct+ArBGkf0= +go.etcd.io/etcd/api/v3 v3.5.5/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= @@ -2877,7 +2881,6 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908150016-7ac13a9a928d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -3205,10 +3208,10 @@ k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= k8s.io/api v0.21.1/go.mod h1:FstGROTmsSHBarKc8bylzXih8BLNYTiS3TZcsoEDg2s= k8s.io/api v0.22.1/go.mod h1:bh13rkTp3F1XEaLGykbyRD2QaTTzPm0e/BMd8ptFONY= -k8s.io/api v0.25.3 h1:Q1v5UFfYe87vi5H7NU0p4RXC26PPMT8KOpr1TLQbCMQ= k8s.io/api v0.25.3/go.mod h1:o42gKscFrEVjHdQnyRenACrMtbuJsVdP+WVjqejfzmI= -k8s.io/apiextensions-apiserver v0.25.3 h1:bfI4KS31w2f9WM1KLGwnwuVlW3RSRPuIsfNF/3HzR0k= -k8s.io/apiextensions-apiserver v0.25.3/go.mod h1:ZJqwpCkxIx9itilmZek7JgfUAM0dnTsA48I4krPqRmo= +k8s.io/api v0.26.2 h1:dM3cinp3PGB6asOySalOZxEG4CZ0IAdJsrYZXE/ovGQ= +k8s.io/apiextensions-apiserver v0.26.2 h1:/yTG2B9jGY2Q70iGskMf41qTLhL9XeNN2KhI0uDgwko= +k8s.io/apiextensions-apiserver v0.26.2/go.mod h1:Y7UPgch8nph8mGCuVk0SK83LnS8Esf3n6fUBgew8SH8= k8s.io/apimachinery v0.0.0-20190809020650-423f5d784010/go.mod h1:Waf/xTS2FGRrgXCkO5FP3XxTOWh0qLf2QhL1qFZZ/R8= k8s.io/apimachinery v0.17.5/go.mod h1:ioIo1G/a+uONV7Tv+ZmCbMG1/a3kVw5YcDdncd8ugQ0= k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= @@ -3216,8 +3219,9 @@ k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRp k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= k8s.io/apimachinery v0.21.1/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY= k8s.io/apimachinery v0.22.1/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= -k8s.io/apimachinery v0.25.3 h1:7o9ium4uyUOM76t6aunP0nZuex7gDf8VGwkR5RcJnQc= k8s.io/apimachinery v0.25.3/go.mod h1:jaF9C/iPNM1FuLl7Zuy5b9v+n35HGSh6AQ4HYRkCqwo= +k8s.io/apimachinery v0.26.2 h1:da1u3D5wfR5u2RpLhE/ZtZS2P7QvDgLZTi9wrNZl/tQ= +k8s.io/apimachinery v0.26.2/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= @@ -3245,23 +3249,24 @@ k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= k8s.io/klog/v2 v2.10.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/klog/v2 v2.80.0 h1:lyJt0TWMPaGoODa8B8bUuxgHS3W/m/bNr2cca3brA/g= -k8s.io/klog/v2 v2.80.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= +k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20190709113604-33be087ad058/go.mod h1:nfDlWeOsu3pUf4yWGL+ERqohP4YsZcBJXWMK+gkzOA4= k8s.io/kube-openapi v0.0.0-20190722073852-5e22f3d471e6/go.mod h1:RZvgC8MSN6DjiMV6oIfEE9pDL9CYXokkfaCKZeHm3nc= k8s.io/kube-openapi v0.0.0-20200316234421-82d701f24f9d/go.mod h1:F+5wygcW0wmRTnM3cOgIqGivxkwSWIWT5YdsDbeAOaU= k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE= k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= -k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1 h1:MQ8BAZPZlWk3S9K4a9NCkIFQtZShWqoha7snGixVgEA= k8s.io/kube-openapi v0.0.0-20220803162953-67bda5d908f1/go.mod h1:C/N6wCaBHeBHkHUesQOQy2/MZqGgMAFPqGsGQLdbZBU= +k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E= k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= k8s.io/utils v0.0.0-20190809000727-6c36bc71fc4a/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20200414100711-2df71ebbae66/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed h1:jAne/RjBTyawwAy0utX5eqigAwz/lQhTmy+Hr/Cpue4= k8s.io/utils v0.0.0-20220728103510-ee6ede2d64ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20221107191617-1a15be271d1d h1:0Smp/HP1OH4Rvhe+4B8nWGERtlqAGSftbSbbmm45oFs= +k8s.io/utils v0.0.0-20221107191617-1a15be271d1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= @@ -3282,7 +3287,6 @@ sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ih sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= xorm.io/builder v0.3.6 h1:ha28mQ2M+TFx96Hxo+iq6tQgnkC9IZkM6D8w9sKHHF8= xorm.io/builder v0.3.6/go.mod h1:LEFAPISnRzG+zxaxj2vPicRwz67BdhFreKg8yv8/TgU= diff --git a/kinds/constraint.cue b/kinds/constraint.cue index 4d1bb954cf5..2bc9f6c16c9 100644 --- a/kinds/constraint.cue +++ b/kinds/constraint.cue @@ -1,6 +1,6 @@ package kind -import "github.com/grafana/grafana/pkg/kindsys" +import "github.com/grafana/kindsys" // In each child directory, the set of .cue files with 'package kind' // must be an instance of kindsys.Core - a declaration of a core kind. diff --git a/kinds/dashboard/dashboard_kind.cue b/kinds/dashboard/dashboard_kind.cue index f399d9a0d38..72d44fa1798 100644 --- a/kinds/dashboard/dashboard_kind.cue +++ b/kinds/dashboard/dashboard_kind.cue @@ -25,8 +25,8 @@ lineage: seqs: [ // Description of dashboard. description?: string // This property should only be used in dashboards defined by plugins. It is a quick check - // to see if the version has changed since the last time. Unclear why using the version property - // is insufficient. + // to see if the version has changed since the last time. Unclear why using the version property + // is insufficient. revision?: int64 @grafanamaturity(NeedsExpertReview) // For dashboards imported from the https://grafana.com/grafana/dashboards/ portal gnetId?: string @grafanamaturity(NeedsExpertReview) @@ -220,6 +220,8 @@ lineage: seqs: [ value?: number @grafanamaturity(NeedsExpertReview) // TODO docs color: string @grafanamaturity(NeedsExpertReview) + // Threshold index, an old property that is not needed an should only appear in older dashboards + index?: int32 @grafanamaturity(NeedsExpertReview) // TODO docs // TODO are the values here enumerable into a disjunction? // Some seem to be listed in typescript comment diff --git a/kinds/gen.go b/kinds/gen.go index e93e92ffa50..e0d0ccdd456 100644 --- a/kinds/gen.go +++ b/kinds/gen.go @@ -18,9 +18,10 @@ import ( "cuelang.org/go/cue/errors" "github.com/grafana/codejen" "github.com/grafana/cuetsy" + "github.com/grafana/kindsys" + "github.com/grafana/grafana/pkg/codegen" "github.com/grafana/grafana/pkg/cuectx" - "github.com/grafana/grafana/pkg/kindsys" ) func main() { @@ -37,13 +38,13 @@ func main() { // All the jennies that comprise the core kinds generator pipeline coreKindsGen.Append( - codegen.LatestJenny(kindsys.GoCoreKindParentPath, codegen.GoTypesJenny{}), - codegen.CoreKindJenny(kindsys.GoCoreKindParentPath, nil), - codegen.BaseCoreRegistryJenny(filepath.Join("pkg", "registry", "corekind"), kindsys.GoCoreKindParentPath), - codegen.LatestMajorsOrXJenny(kindsys.TSCoreKindParentPath, codegen.TSTypesJenny{}), + codegen.LatestJenny(cuectx.GoCoreKindParentPath, codegen.GoTypesJenny{}), + codegen.CoreKindJenny(cuectx.GoCoreKindParentPath, nil), + codegen.BaseCoreRegistryJenny(filepath.Join("pkg", "registry", "corekind"), cuectx.GoCoreKindParentPath), + codegen.LatestMajorsOrXJenny(cuectx.TSCoreKindParentPath, codegen.TSTypesJenny{}), codegen.TSVeneerIndexJenny(filepath.Join("packages", "grafana-schema", "src")), - codegen.CRDTypesJenny(kindsys.GoCoreKindParentPath), - codegen.YamlCRDJenny(kindsys.GoCoreKindParentPath), + codegen.CRDTypesJenny(cuectx.GoCoreKindParentPath), + codegen.YamlCRDJenny(cuectx.GoCoreKindParentPath), codegen.CRDKindRegistryJenny(filepath.Join("pkg", "registry", "corecrd")), codegen.DocsJenny(filepath.Join("docs", "sources", "developers", "kinds", "core")), codegen.SchemaRegistryJenny(filepath.Join("pkg", "kindsys", "schemaregistry")), @@ -62,14 +63,14 @@ func main() { rt := cuectx.GrafanaThemaRuntime() var all []kindsys.Kind - f := os.DirFS(filepath.Join(groot, kindsys.CoreDefParentPath)) + f := os.DirFS(filepath.Join(groot, cuectx.CoreDefParentPath)) kinddirs := elsedie(fs.ReadDir(f, "."))("error reading core kind fs root directory") for _, kinddir := range kinddirs { if !kinddir.IsDir() { continue } - rel := filepath.Join(kindsys.CoreDefParentPath, kinddir.Name()) - def, err := kindsys.LoadCoreKindDef(rel, rt.Context(), nil) + rel := filepath.Join(cuectx.CoreDefParentPath, kinddir.Name()) + def, err := cuectx.LoadCoreKindDef(rel, rt.Context(), nil) if err != nil { die(fmt.Errorf("%s is not a valid kind: %s", rel, errors.Details(err, nil))) } diff --git a/local/.gitkeep b/local/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d diff --git a/package.json b/package.json index e6b295eda44..3f77100ddd2 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "@babel/core": "7.20.5", "@babel/plugin-proposal-class-properties": "7.18.6", "@babel/plugin-proposal-nullish-coalescing-operator": "7.18.6", - "@babel/plugin-proposal-object-rest-spread": "7.20.2", + "@babel/plugin-proposal-object-rest-spread": "7.20.7", "@babel/plugin-proposal-optional-chaining": "7.20.7", "@babel/plugin-syntax-dynamic-import": "7.8.3", "@babel/plugin-transform-react-constant-elements": "7.20.2", @@ -107,14 +107,14 @@ "@grafana/eslint-plugin": "link:./packages/grafana-eslint-rules", "@grafana/toolkit": "workspace:*", "@grafana/tsconfig": "^1.2.0-rc1", - "@pmmmwh/react-refresh-webpack-plugin": "0.5.8", - "@react-types/button": "3.7.0", + "@pmmmwh/react-refresh-webpack-plugin": "0.5.10", + "@react-types/button": "3.7.1", "@react-types/menu": "3.7.2", "@react-types/overlays": "3.6.4", "@react-types/shared": "3.16.0", "@rtsao/plugin-proposal-class-properties": "7.0.1-patch.1", - "@swc/core": "1.3.11", - "@swc/helpers": "0.4.12", + "@swc/core": "1.3.38", + "@swc/helpers": "0.4.14", "@testing-library/dom": "8.20.0", "@testing-library/jest-dom": "5.16.5", "@testing-library/react": "12.1.4", @@ -126,9 +126,9 @@ "@types/d3": "7.4.0", "@types/d3-force": "^3.0.0", "@types/d3-scale-chromatic": "3.0.0", - "@types/debounce-promise": "3.1.5", + "@types/debounce-promise": "3.1.6", "@types/dompurify": "^2", - "@types/eslint": "8.21.0", + "@types/eslint": "8.21.1", "@types/file-saver": "2.0.5", "@types/glob": "^8.0.0", "@types/google.analytics": "^0.0.42", @@ -136,25 +136,25 @@ "@types/history": "4.7.11", "@types/hoist-non-react-statics": "3.3.1", "@types/jest": "29.2.3", - "@types/jquery": "3.5.14", + "@types/jquery": "3.5.16", "@types/js-yaml": "^4.0.5", "@types/jsurl": "^1.2.28", - "@types/lodash": "4.14.187", + "@types/lodash": "4.14.191", "@types/logfmt": "^1.2.3", - "@types/mousetrap": "1.6.10", - "@types/node": "18.14.0", - "@types/ol-ext": "npm:@siedlerchr/types-ol-ext@3.0.6", - "@types/papaparse": "5.3.5", + "@types/mousetrap": "1.6.11", + "@types/node": "18.14.6", + "@types/ol-ext": "npm:@siedlerchr/types-ol-ext@3.0.9", + "@types/papaparse": "5.3.7", "@types/pluralize": "^0.0.29", "@types/prismjs": "1.26.0", "@types/react": "17.0.42", - "@types/react-beautiful-dnd": "13.1.2", + "@types/react-beautiful-dnd": "13.1.3", "@types/react-dom": "17.0.14", "@types/react-grid-layout": "1.3.2", "@types/react-highlight-words": "0.16.4", - "@types/react-redux": "7.1.24", + "@types/react-redux": "7.1.25", "@types/react-router-dom": "5.3.3", - "@types/react-table": "7.7.12", + "@types/react-table": "7.7.14", "@types/react-test-renderer": "17.0.1", "@types/react-transition-group": "4.4.5", "@types/react-virtualized-auto-sizer": "1.0.1", @@ -168,12 +168,12 @@ "@types/testing-library__jest-dom": "5.14.5", "@types/tinycolor2": "1.4.3", "@types/uuid": "9.0.1", - "@types/yargs": "17.0.12", + "@types/yargs": "17.0.22", "@typescript-eslint/eslint-plugin": "5.42.0", "@typescript-eslint/parser": "5.42.0", "autoprefixer": "10.4.13", "babel-jest": "29.3.1", - "babel-loader": "9.1.0", + "babel-loader": "9.1.2", "babel-plugin-angularjs-annotate": "0.10.0", "babel-plugin-macros": "3.1.0", "blob-polyfill": "7.0.20220408", @@ -181,7 +181,7 @@ "chance": "^1.0.10", "codeowners": "^5.1.1", "copy-webpack-plugin": "11.0.0", - "css-loader": "6.7.1", + "css-loader": "6.7.3", "css-minimizer-webpack-plugin": "4.2.2", "cypress": "9.5.1", "esbuild": "0.16.17", @@ -191,90 +191,90 @@ "eslint-config-prettier": "8.6.0", "eslint-plugin-import": "^2.26.0", "eslint-plugin-jest": "27.2.1", - "eslint-plugin-jsdoc": "39.8.0", + "eslint-plugin-jsdoc": "40.0.1", "eslint-plugin-jsx-a11y": "6.7.1", "eslint-plugin-lodash": "7.4.0", - "eslint-plugin-react": "7.32.1", + "eslint-plugin-react": "7.32.2", "eslint-plugin-react-hooks": "4.6.0", - "eslint-webpack-plugin": "3.2.0", + "eslint-webpack-plugin": "4.0.0", "expose-loader": "4.0.0", - "fork-ts-checker-webpack-plugin": "7.3.0", - "glob": "9.1.2", + "fork-ts-checker-webpack-plugin": "8.0.0", + "glob": "9.2.1", "html-loader": "4.2.0", "html-webpack-plugin": "5.5.0", "http-server": "14.1.1", - "husky": "8.0.1", + "husky": "8.0.3", "i18next-parser": "6.6.0", "jest": "29.3.1", "jest-canvas-mock": "2.4.0", "jest-date-mock": "1.0.8", "jest-environment-jsdom": "29.3.1", "jest-fail-on-console": "3.0.2", - "jest-junit": "14.0.1", + "jest-junit": "15.0.0", "jest-matcher-utils": "29.3.1", "lerna": "5.5.4", - "lint-staged": "13.1.0", + "lint-staged": "13.1.2", "mini-css-extract-plugin": "2.7.2", - "msw": "0.49.2", + "msw": "1.1.0", "mutationobserver-shim": "0.3.7", "ngtemplate-loader": "2.1.0", "node-notifier": "10.0.1", - "postcss": "8.4.18", - "postcss-loader": "7.0.1", + "postcss": "8.4.21", + "postcss-loader": "7.0.2", "postcss-reporter": "7.0.5", - "postcss-scss": "4.0.5", - "prettier": "2.8.1", + "postcss-scss": "4.0.6", + "prettier": "2.8.4", "react-refresh": "0.14.0", "react-select-event": "5.5.1", "react-simple-compat": "1.2.3", "react-test-renderer": "17.0.2", "redux-mock-store": "1.5.4", - "rimraf": "4.2.0", + "rimraf": "4.4.0", "rudder-sdk-js": "2.25.0", - "sass": "1.58.2", + "sass": "1.58.3", "sass-loader": "13.2.0", "sinon": "15.0.1", "style-loader": "3.3.1", - "stylelint": "14.14.0", - "stylelint-config-prettier": "9.0.3", + "stylelint": "15.2.0", + "stylelint-config-prettier": "9.0.5", "stylelint-config-sass-guidelines": "9.0.1", "terser-webpack-plugin": "5.3.6", "testing-library-selector": "0.2.1", - "ts-jest": "29.0.3", + "ts-jest": "29.0.5", "ts-loader": "9.3.1", "ts-node": "10.9.1", "typescript": "4.8.4", "wait-on": "7.0.1", - "webpack": "5.75.0", + "webpack": "5.76.0", "webpack-bundle-analyzer": "4.8.0", - "webpack-cli": "4.10.0", + "webpack-cli": "5.0.1", "webpack-dev-server": "4.11.1", "webpack-manifest-plugin": "5.0.0", "webpack-merge": "5.8.0", "yargs": "^17.5.1" }, "dependencies": { - "@daybrush/utils": "1.10.0", - "@emotion/css": "11.10.5", - "@emotion/react": "11.10.5", - "@grafana/aws-sdk": "0.0.40", + "@daybrush/utils": "1.10.2", + "@emotion/css": "11.10.6", + "@emotion/react": "11.10.6", + "@grafana/aws-sdk": "0.0.44", "@grafana/data": "workspace:*", "@grafana/e2e-selectors": "workspace:*", "@grafana/experimental": "1.1.0", - "@grafana/faro-core": "1.0.0-beta2", - "@grafana/faro-web-sdk": "1.0.0-beta2", + "@grafana/faro-core": "1.0.2", + "@grafana/faro-web-sdk": "1.0.2", "@grafana/google-sdk": "0.0.4", "@grafana/lezer-logql": "0.1.2", - "@grafana/monaco-logql": "^0.0.6", + "@grafana/monaco-logql": "^0.0.7", "@grafana/runtime": "workspace:*", - "@grafana/scenes": "^0.0.14", + "@grafana/scenes": "^0.0.21", "@grafana/schema": "workspace:*", "@grafana/ui": "workspace:*", "@kusto/monaco-kusto": "5.3.6", - "@leeoniya/ufuzzy": "1.0.2", - "@lezer/common": "1.0.1", - "@lezer/highlight": "1.1.2", - "@lezer/lr": "1.3.1", + "@leeoniya/ufuzzy": "1.0.6", + "@lezer/common": "1.0.2", + "@lezer/highlight": "1.1.3", + "@lezer/lr": "1.3.3", "@opentelemetry/api": "1.4.0", "@opentelemetry/exporter-collector": "0.25.0", "@opentelemetry/semantic-conventions": "1.9.1", @@ -290,18 +290,18 @@ "@react-stately/collections": "3.4.1", "@react-stately/menu": "3.4.1", "@react-stately/tree": "3.3.1", - "@reduxjs/toolkit": "1.9.1", + "@reduxjs/toolkit": "1.9.3", "@sentry/browser": "6.19.7", "@sentry/types": "6.19.7", "@sentry/utils": "6.19.7", "@types/react-resizable": "3.0.3", "@types/webpack-env": "1.18.0", - "@visx/event": "2.17.0", - "@visx/gradient": "2.10.0", - "@visx/group": "2.10.0", + "@visx/event": "3.0.1", + "@visx/gradient": "3.0.0", + "@visx/group": "3.0.0", "@visx/scale": "3.0.0", "@visx/shape": "3.0.0", - "@visx/tooltip": "2.16.0", + "@visx/tooltip": "3.0.0", "@welldone-software/why-did-you-render": "7.0.1", "angular": "1.8.3", "angular-bindonce": "0.3.1", @@ -315,7 +315,7 @@ "centrifuge": "3.1.0", "classnames": "2.3.2", "combokeys": "^3.0.0", - "comlink": "4.4.0", + "comlink": "4.4.1", "common-tags": "1.8.2", "core-js": "3.28.0", "d3": "7.8.2", @@ -324,7 +324,6 @@ "dangerously-set-html-content": "1.0.9", "date-fns": "2.29.3", "debounce-promise": "3.1.2", - "dompurify": "^2.4.1", "emotion": "11.0.0", "eventemitter3": "5.0.0", "fast-deep-equal": "^3.1.3", @@ -334,38 +333,38 @@ "history": "4.10.1", "hoist-non-react-statics": "3.3.2", "i18next": "^22.0.0", - "immer": "9.0.16", - "immutable": "4.2.2", - "jquery": "3.6.1", + "immer": "9.0.19", + "immutable": "4.2.4", + "jquery": "3.6.3", "js-yaml": "^4.1.0", "json-markup": "^1.1.0", "json-source-map": "0.6.1", "jsurl": "^0.1.5", - "kbar": "0.1.0-beta.36", + "kbar": "0.1.0-beta.40", "lodash": "4.17.21", "logfmt": "^1.3.2", "lru-cache": "7.17.0", "lru-memoize": "^1.1.0", "memoize-one": "6.0.0", "moment": "2.29.4", - "moment-timezone": "0.5.38", + "moment-timezone": "0.5.41", "monaco-editor": "0.34.0", "monaco-promql": "1.7.4", "mousetrap": "1.6.5", "mousetrap-global-bind": "1.1.0", "moveable": "0.43.1", "ol": "7.2.2", - "ol-ext": "4.0.3", + "ol-ext": "4.0.6", "papaparse": "5.3.2", "pluralize": "^8.0.0", "prismjs": "1.29.0", "prop-types": "15.8.1", "pseudoizer": "^0.1.0", "rc-cascader": "3.8.0", - "rc-drawer": "6.1.2", - "rc-slider": "10.1.0", + "rc-drawer": "6.1.3", + "rc-slider": "10.1.1", "rc-time-picker": "3.7.3", - "rc-tree": "5.7.0", + "rc-tree": "5.7.2", "re-resizable": "6.9.9", "react": "17.0.2", "react-awesome-query-builder": "5.4.0", @@ -374,12 +373,12 @@ "react-dom": "17.0.2", "react-draggable": "4.4.5", "react-dropzone": "^14.2.3", - "react-enable": "^3.0.1", + "react-enable": "^3.1.0", "react-grid-layout": "1.3.4", "react-highlight-words": "0.20.0", "react-hook-form": "7.5.3", "react-i18next": "^12.0.0", - "react-inlinesvg": "3.0.1", + "react-inlinesvg": "3.0.2", "react-moveable": "0.46.1", "react-popper": "2.3.0", "react-popper-tooltip": "4.4.2", @@ -396,10 +395,10 @@ "react-virtualized-auto-sizer": "1.0.7", "react-window": "1.8.8", "react-window-infinite-loader": "1.0.8", - "redux": "4.2.0", - "redux-thunk": "2.4.1", - "regenerator-runtime": "0.13.10", - "reselect": "4.1.6", + "redux": "4.2.1", + "redux-thunk": "2.4.2", + "regenerator-runtime": "0.13.11", + "reselect": "4.1.7", "rst2html": "github:thoward/rst2html#990cb89f2a300cdd9151790be377c4c0840df809", "rxjs": "7.8.0", "sass": "link:./public/sass", @@ -425,20 +424,20 @@ "resolutions": { "underscore": "1.13.6", "@types/slate": "0.47.11", - "@rushstack/rig-package": "0.3.17", - "@rushstack/ts-command-line": "4.13.0", - "@storybook/builder-webpack4/css-loader": "6.7.1", + "@rushstack/rig-package": "0.3.18", + "@rushstack/ts-command-line": "4.13.2", + "@storybook/builder-webpack4/css-loader": "6.7.3", "@storybook/builder-webpack4/html-webpack-plugin": "5.5.0", - "@storybook/builder-webpack4/webpack": "5.75.0", - "@storybook/core-common/webpack": "5.75.0", - "@storybook/core-server/webpack": "5.75.0", - "@storybook/manager-webpack4/css-loader": "6.7.1", + "@storybook/builder-webpack4/webpack": "5.76.0", + "@storybook/core-common/webpack": "5.76.0", + "@storybook/core-server/webpack": "5.76.0", + "@storybook/manager-webpack4/css-loader": "6.7.3", "@storybook/manager-webpack4/html-webpack-plugin": "5.5.0", - "@storybook/manager-webpack4/webpack": "5.75.0", - "@storybook/builder-webpack5/webpack": "5.75.0", - "@storybook/manager-webpack5/webpack": "5.75.0", + "@storybook/manager-webpack4/webpack": "5.76.0", + "@storybook/builder-webpack5/webpack": "5.76.0", + "@storybook/manager-webpack5/webpack": "5.76.0", "ngtemplate-loader/loader-utils": "^2.0.0", - "trim@0.0.1": "0.0.3", + "trim": "0.0.3", "slate-dev-environment@^0.2.2": "patch:slate-dev-environment@npm:0.2.5#.yarn/patches/slate-dev-environment-npm-0.2.5-9aeb7da7b5.patch" }, "workspaces": { diff --git a/packages/grafana-data/package.json b/packages/grafana-data/package.json index a0ac05686ee..d997c73c4d4 100644 --- a/packages/grafana-data/package.json +++ b/packages/grafana-data/package.json @@ -35,27 +35,28 @@ "postpack": "mv package.json.bak package.json" }, "dependencies": { - "@braintree/sanitize-url": "6.0.1", + "@braintree/sanitize-url": "6.0.2", "@grafana/schema": "9.5.0-pre", "@types/d3-interpolate": "^3.0.0", "d3-interpolate": "3.0.1", "date-fns": "2.29.3", + "dompurify": "^2.4.3", "eventemitter3": "5.0.0", "fast_array_intersect": "1.1.0", "history": "4.10.1", "lodash": "4.17.21", - "marked": "4.2.0", + "marked": "4.2.12", "moment": "2.29.4", - "moment-timezone": "0.5.38", + "moment-timezone": "0.5.41", "ol": "7.2.2", "papaparse": "5.3.2", "react-use": "17.4.0", - "regenerator-runtime": "0.13.10", + "regenerator-runtime": "0.13.11", "rxjs": "7.8.0", "tinycolor2": "1.6.0", "tslib": "2.5.0", "uplot": "1.6.24", - "xss": "1.0.14" + "xss": "^1.0.14" }, "devDependencies": { "@grafana/tsconfig": "^1.2.0-rc1", @@ -67,13 +68,14 @@ "@testing-library/react": "12.1.4", "@testing-library/react-hooks": "8.0.1", "@testing-library/user-event": "14.4.3", + "@types/dompurify": "^2", "@types/history": "4.7.11", "@types/jest": "29.2.3", - "@types/jquery": "3.5.14", - "@types/lodash": "4.14.187", - "@types/marked": "4.0.7", - "@types/node": "18.14.0", - "@types/papaparse": "5.3.5", + "@types/jquery": "3.5.16", + "@types/lodash": "4.14.191", + "@types/marked": "4.0.8", + "@types/node": "18.14.6", + "@types/papaparse": "5.3.7", "@types/react": "17.0.42", "@types/react-dom": "17.0.14", "@types/sinon": "10.0.13", @@ -83,7 +85,7 @@ "react": "17.0.2", "react-dom": "17.0.2", "react-test-renderer": "17.0.2", - "rimraf": "4.2.0", + "rimraf": "4.4.0", "rollup": "2.79.1", "rollup-plugin-dts": "^5.0.0", "rollup-plugin-esbuild": "5.0.0", diff --git a/packages/grafana-data/src/dataframe/index.ts b/packages/grafana-data/src/dataframe/index.ts index 3267885b2c0..3213eb70dab 100644 --- a/packages/grafana-data/src/dataframe/index.ts +++ b/packages/grafana-data/src/dataframe/index.ts @@ -7,4 +7,4 @@ export * from './dimensions'; export * from './ArrayDataFrame'; export * from './DataFrameJSON'; export * from './frameComparisons'; -export { anySeriesWithTimeField } from './utils'; +export { anySeriesWithTimeField, isTimeSeriesFrame, isTimeSeriesFrames } from './utils'; diff --git a/packages/grafana-data/src/dataframe/utils.ts b/packages/grafana-data/src/dataframe/utils.ts index 0869d2ec135..774c6cd4b6d 100644 --- a/packages/grafana-data/src/dataframe/utils.ts +++ b/packages/grafana-data/src/dataframe/utils.ts @@ -2,15 +2,15 @@ import { DataFrame, FieldType } from '../types/dataFrame'; import { getTimeField } from './processDataFrame'; -export function isTimeSerie(frame: DataFrame) { +export function isTimeSeriesFrame(frame: DataFrame) { if (frame.fields.length > 2) { return false; } return Boolean(frame.fields.find((field) => field.type === FieldType.time)); } -export function isTimeSeries(data: DataFrame[]) { - return !data.find((frame) => !isTimeSerie(frame)); +export function isTimeSeriesFrames(data: DataFrame[]) { + return !data.find((frame) => !isTimeSeriesFrame(frame)); } /** diff --git a/packages/grafana-data/src/datetime/moment_wrapper.ts b/packages/grafana-data/src/datetime/moment_wrapper.ts index 4bcfab24659..73f5850dde5 100644 --- a/packages/grafana-data/src/datetime/moment_wrapper.ts +++ b/packages/grafana-data/src/datetime/moment_wrapper.ts @@ -89,7 +89,18 @@ export const getLocaleData = (): DateTimeLocale => { return moment.localeData(); }; -export const isDateTime = (value: any): value is DateTime => { +export const isDateTimeInput = (value: unknown): value is DateTimeInput => { + return ( + value === null || + typeof value === 'string' || + typeof value === 'number' || + value instanceof Date || + (Array.isArray(value) && value.every((v) => typeof v === 'string' || typeof v === 'number')) || + isDateTime(value) + ); +}; + +export const isDateTime = (value: unknown): value is DateTime => { return moment.isMoment(value); }; diff --git a/packages/grafana-data/src/field/fieldColor.ts b/packages/grafana-data/src/field/fieldColor.ts index 003b2e8c684..8cd714e7f7a 100644 --- a/packages/grafana-data/src/field/fieldColor.ts +++ b/packages/grafana-data/src/field/fieldColor.ts @@ -51,70 +51,70 @@ export const fieldColorModeRegistry = new Registry(() => { }, }), new FieldColorSchemeMode({ - id: 'continuous-GrYlRd', + id: FieldColorModeId.ContinuousGrYlRd, name: 'Green-Yellow-Red', isContinuous: true, isByValue: true, getColors: (theme: GrafanaTheme2) => ['green', 'yellow', 'red'], }), new FieldColorSchemeMode({ - id: 'continuous-RdYlGr', + id: FieldColorModeId.ContinuousRdYlGr, name: 'Red-Yellow-Green', isContinuous: true, isByValue: true, getColors: (theme: GrafanaTheme2) => ['red', 'yellow', 'green'], }), new FieldColorSchemeMode({ - id: 'continuous-BlYlRd', + id: FieldColorModeId.ContinuousBlYlRd, name: 'Blue-Yellow-Red', isContinuous: true, isByValue: true, getColors: (theme: GrafanaTheme2) => ['dark-blue', 'super-light-yellow', 'dark-red'], }), new FieldColorSchemeMode({ - id: 'continuous-YlRd', + id: FieldColorModeId.ContinuousYlRd, name: 'Yellow-Red', isContinuous: true, isByValue: true, getColors: (theme: GrafanaTheme2) => ['super-light-yellow', 'dark-red'], }), new FieldColorSchemeMode({ - id: 'continuous-BlPu', + id: FieldColorModeId.ContinuousBlPu, name: 'Blue-Purple', isContinuous: true, isByValue: true, getColors: (theme: GrafanaTheme2) => ['blue', 'purple'], }), new FieldColorSchemeMode({ - id: 'continuous-YlBl', + id: FieldColorModeId.ContinuousYlBl, name: 'Yellow-Blue', isContinuous: true, isByValue: true, getColors: (theme: GrafanaTheme2) => ['super-light-yellow', 'dark-blue'], }), new FieldColorSchemeMode({ - id: 'continuous-blues', + id: FieldColorModeId.ContinuousBlues, name: 'Blues', isContinuous: true, isByValue: true, getColors: (theme: GrafanaTheme2) => ['panel-bg', 'dark-blue'], }), new FieldColorSchemeMode({ - id: 'continuous-reds', + id: FieldColorModeId.ContinuousReds, name: 'Reds', isContinuous: true, isByValue: true, getColors: (theme: GrafanaTheme2) => ['panel-bg', 'dark-red'], }), new FieldColorSchemeMode({ - id: 'continuous-greens', + id: FieldColorModeId.ContinuousGreens, name: 'Greens', isContinuous: true, isByValue: true, getColors: (theme: GrafanaTheme2) => ['panel-bg', 'dark-green'], }), new FieldColorSchemeMode({ - id: 'continuous-purples', + id: FieldColorModeId.ContinuousPurples, name: 'Purples', isContinuous: true, isByValue: true, @@ -124,7 +124,7 @@ export const fieldColorModeRegistry = new Registry(() => { }); interface FieldColorSchemeModeOptions { - id: string; + id: FieldColorModeId; name: string; description?: string; getColors: (theme: GrafanaTheme2) => string[]; @@ -133,7 +133,7 @@ interface FieldColorSchemeModeOptions { } export class FieldColorSchemeMode implements FieldColorMode { - id: string; + id: FieldColorModeId; name: string; description?: string; isContinuous: boolean; diff --git a/packages/grafana-data/src/field/fieldComparers.ts b/packages/grafana-data/src/field/fieldComparers.ts index 058642dc93e..32182c74edf 100644 --- a/packages/grafana-data/src/field/fieldComparers.ts +++ b/packages/grafana-data/src/field/fieldComparers.ts @@ -1,6 +1,6 @@ import { isNumber } from 'lodash'; -import { dateTime, isDateTime } from '../datetime'; +import { dateTime, isDateTimeInput } from '../datetime'; import { Field, FieldType } from '../types/dataFrame'; import { Vector } from '../types/vector'; @@ -18,6 +18,9 @@ export const fieldIndexComparer = (field: Field, reverse = false): IndexComparer case FieldType.boolean: return booleanIndexComparer(values, reverse); case FieldType.time: + if (typeof field.values.get(0) === 'number') { + return timestampIndexComparer(values, reverse); + } return timeIndexComparer(values, reverse); default: return naturalIndexComparer(reverse); @@ -34,7 +37,7 @@ export const timeComparer = (a: unknown, b: unknown): number => { return numericComparer(a, b); } - if (isDateTime(a) && isDateTime(b)) { + if (isDateTimeInput(a) && isDateTimeInput(b)) { if (dateTime(a).isBefore(b)) { return -1; } @@ -76,6 +79,12 @@ const falsyComparer = (a: unknown, b: unknown): number => { return 0; }; +const timestampIndexComparer = (values: Vector, reverse: boolean): IndexComparer => { + let vals = values.toArray(); + let mult = reverse ? -1 : 1; + return (a: number, b: number): number => mult * (vals[a] - vals[b]); +}; + const timeIndexComparer = (values: Vector, reverse: boolean): IndexComparer => { return (a: number, b: number): number => { const vA = values.get(a); diff --git a/packages/grafana-data/src/field/fieldOverrides.test.ts b/packages/grafana-data/src/field/fieldOverrides.test.ts index 427dd4ead48..2321c1a621b 100644 --- a/packages/grafana-data/src/field/fieldOverrides.test.ts +++ b/packages/grafana-data/src/field/fieldOverrides.test.ts @@ -1,4 +1,5 @@ import { ArrayDataFrame, MutableDataFrame, toDataFrame } from '../dataframe'; +import { rangeUtil } from '../datetime'; import { createTheme } from '../themes'; import { FieldMatcherID } from '../transformations'; import { @@ -640,7 +641,7 @@ describe('getLinksSupplier', () => { }, ], }, - display: (v) => ({ numeric: v, text: String(v) }), + display: (v) => ({ numeric: Number(v), text: String(v) }), }, ], }); @@ -665,6 +666,65 @@ describe('getLinksSupplier', () => { ); }); + it('handles time range on internal links', () => { + locationUtil.initialize({ + config: { appSubUrl: '' } as GrafanaConfig, + getVariablesUrlParams: () => ({}), + getTimeRangeForUrl: () => ({ from: 'now-7d', to: 'now' }), + }); + + const datasourceUid = '1234'; + const range = rangeUtil.relativeToTimeRange({ from: 600, to: 0 }); + const f0 = new MutableDataFrame({ + name: 'A', + fields: [ + { + name: 'message', + type: FieldType.string, + values: [10, 20], + config: { + links: [ + { + url: '', + title: '', + internal: { + datasourceUid: datasourceUid, + datasourceName: 'testDS', + query: '12345', + range, + }, + }, + ], + }, + display: (v) => ({ numeric: Number(v), text: String(v) }), + }, + ], + }); + + const supplier = getLinksSupplier( + f0, + f0.fields[0], + {}, + // We do not need to interpolate anything for this test + (value, vars, format) => value + ); + + const links = supplier({ valueRowIndex: 0 }); + const rangeStr = JSON.stringify({ + from: range.from.toISOString(), + to: range.to.toISOString(), + }); + const encodeURIParams = `{"range":${rangeStr},"datasource":"${datasourceUid}","queries":["12345"]}`; + expect(links.length).toBe(1); + expect(links[0]).toEqual( + expect.objectContaining({ + title: 'testDS', + href: `/explore?left=${encodeURIComponent(encodeURIParams)}`, + onClick: undefined, + }) + ); + }); + describe('dynamic links', () => { beforeEach(() => { locationUtil.initialize({ diff --git a/packages/grafana-data/src/field/fieldOverrides.ts b/packages/grafana-data/src/field/fieldOverrides.ts index 6b2fbf31195..9e1fc4cfe5c 100644 --- a/packages/grafana-data/src/field/fieldOverrides.ts +++ b/packages/grafana-data/src/field/fieldOverrides.ts @@ -2,6 +2,8 @@ import { isNumber, set, unset, get, cloneDeep } from 'lodash'; import { useMemo, useRef } from 'react'; import usePrevious from 'react-use/lib/usePrevious'; +import { VariableFormatID } from '@grafana/schema'; + import { compareArrayValues, compareDataFrameStructures, guessFieldTypeForField } from '../dataframe'; import { getTimeField } from '../dataframe/processDataFrame'; import { PanelPlugin } from '../panel/PanelPlugin'; @@ -214,7 +216,7 @@ export function applyFieldOverrides(options: ApplyFieldOverrideOptions): DataFra }); } -// this is a significant optimization for streaming, where we currently re-process all values in the buffer on ech update +// this is a significant optimization for streaming, where we currently re-process all values in the buffer on each update // via field.display(value). this can potentially be removed once we... // 1. process data packets incrementally and/if cache the results in the streaming datafame (maybe by buffer index) // 2. have the ability to selectively get display color or text (but not always both, which are each quite expensive) @@ -451,11 +453,10 @@ export const getLinksSupplier = internalLink: link.internal, scopedVars: variables, field, - range: {} as any, + range: link.internal.range ?? ({} as any), replaceVariables, }); } - let href = link.onBuildUrl ? link.onBuildUrl({ origin: field, @@ -464,8 +465,8 @@ export const getLinksSupplier = : link.url; if (href) { - locationUtil.assureBaseUrl(href.replace(/\n/g, '')); - href = replaceVariables(href, variables); + href = locationUtil.assureBaseUrl(href.replace(/\n/g, '')); + href = replaceVariables(href, variables, VariableFormatID.PercentEncode); href = locationUtil.processUrl(href); } diff --git a/packages/grafana-data/src/field/index.ts b/packages/grafana-data/src/field/index.ts index 8ae807d42bc..9462ca10687 100644 --- a/packages/grafana-data/src/field/index.ts +++ b/packages/grafana-data/src/field/index.ts @@ -15,4 +15,4 @@ export { sortThresholds, getActiveThreshold } from './thresholds'; export { applyFieldOverrides, validateFieldConfig, applyRawFieldOverrides, useFieldOverrides } from './fieldOverrides'; export { getFieldDisplayValuesProxy } from './getFieldDisplayValuesProxy'; export { getFieldDisplayName, getFrameDisplayName } from './fieldState'; -export { getScaleCalculator, getFieldConfigWithMinMax } from './scale'; +export { getScaleCalculator, getFieldConfigWithMinMax, getMinMaxAndDelta } from './scale'; diff --git a/packages/grafana-data/src/text/index.ts b/packages/grafana-data/src/text/index.ts index 76470eaa838..13d9631e63d 100644 --- a/packages/grafana-data/src/text/index.ts +++ b/packages/grafana-data/src/text/index.ts @@ -1,7 +1,14 @@ export * from './string'; export * from './markdown'; export * from './text'; -import { escapeHtml, hasAnsiCodes, sanitize, sanitizeUrl, sanitizeTextPanelContent } from './sanitize'; +import { + escapeHtml, + hasAnsiCodes, + sanitize, + sanitizeUrl, + sanitizeTextPanelContent, + sanitizeSVGContent, +} from './sanitize'; export const textUtil = { escapeHtml, @@ -9,4 +16,5 @@ export const textUtil = { sanitize, sanitizeTextPanelContent, sanitizeUrl, + sanitizeSVGContent, }; diff --git a/packages/grafana-data/src/text/markdown.test.ts b/packages/grafana-data/src/text/markdown.test.ts index 20a5bab4611..7784169b2ad 100644 --- a/packages/grafana-data/src/text/markdown.test.ts +++ b/packages/grafana-data/src/text/markdown.test.ts @@ -11,6 +11,18 @@ describe('Markdown wrapper', () => { expect(str).toBe('<script>alert()</script>'); }); + it('should only escape (and not remove) code blocks inside markdown', () => { + const inlineCodeBlock = renderMarkdown('This is a piece of code block: ``'); + expect(inlineCodeBlock.trim()).toBe( + '

This is a piece of code block: <script>alert()</script>

' + ); + + const multilineCodeBlock = renderMarkdown('This is a piece of code block: ``````'); + expect(multilineCodeBlock.trim()).toBe( + '

This is a piece of code block: <script>alert()</script>

' + ); + }); + it('should sanitize content in text panel by default', () => { const str = renderTextPanelMarkdown(''); expect(str).toBe('<script>alert()</script>'); diff --git a/packages/grafana-data/src/text/markdown.ts b/packages/grafana-data/src/text/markdown.ts index c93173828ff..8c997dc438a 100644 --- a/packages/grafana-data/src/text/markdown.ts +++ b/packages/grafana-data/src/text/markdown.ts @@ -1,6 +1,6 @@ import { marked } from 'marked'; -import { sanitize, sanitizeTextPanelContent } from './sanitize'; +import { sanitizeTextPanelContent } from './sanitize'; let hasInitialized = false; @@ -37,7 +37,7 @@ export function renderMarkdown(str?: string, options?: RenderMarkdownOptions): s return html; } - return sanitize(html); + return sanitizeTextPanelContent(html); } export function renderTextPanelMarkdown(str?: string, options?: RenderMarkdownOptions): string { diff --git a/packages/grafana-data/src/text/sanitize.test.ts b/packages/grafana-data/src/text/sanitize.test.ts index 8d9ff47d4d9..1b1588271b2 100644 --- a/packages/grafana-data/src/text/sanitize.test.ts +++ b/packages/grafana-data/src/text/sanitize.test.ts @@ -1,4 +1,4 @@ -import { sanitizeTextPanelContent } from './sanitize'; +import { sanitizeTextPanelContent, sanitizeUrl, sanitize } from './sanitize'; describe('Sanitize wrapper', () => { it('should allow whitelisted styles in text panel', () => { @@ -10,3 +10,20 @@ describe('Sanitize wrapper', () => { ); }); }); + +describe('sanitizeUrl', () => { + it('sanitize javascript urls', () => { + const url = 'javascript:alert(document.domain)'; + const str = sanitizeUrl(url); + expect(str).toBe('about:blank'); + }); +}); + +// write test to sanitize xss payloads using the sanitize function +describe('sanitize', () => { + it('should sanitize xss payload', () => { + const html = ''; + const str = sanitize(html); + expect(str).toBe(''); + }); +}); diff --git a/packages/grafana-data/src/text/sanitize.ts b/packages/grafana-data/src/text/sanitize.ts index 6492db1ea06..8bd5f7e0600 100644 --- a/packages/grafana-data/src/text/sanitize.ts +++ b/packages/grafana-data/src/text/sanitize.ts @@ -1,4 +1,5 @@ import { sanitizeUrl as braintreeSanitizeUrl } from '@braintree/sanitize-url'; +import DOMPurify from 'dompurify'; import * as xss from 'xss'; const XSSWL = Object.keys(xss.whiteList).reduce((acc, element) => { @@ -6,10 +7,6 @@ const XSSWL = Object.keys(xss.whiteList).reduce((acc, element) = return acc; }, {}); -const sanitizeXSS = new xss.FilterXSS({ - whiteList: XSSWL, -}); - const sanitizeTextPanelWhitelist = new xss.FilterXSS({ whiteList: XSSWL, css: { @@ -34,21 +31,29 @@ const sanitizeTextPanelWhitelist = new xss.FilterXSS({ }); /** - * Returns string safe from XSS attacks. + * Return a sanitized string that is going to be rendered in the browser to prevent XSS attacks. + * Note that sanitized tags will be removed, such as "' } }, ]); const target = _templateSrv.replace('$test', {}, 'html'); - expect(target).toBe('<script>alert(asd)</script>'); + expect(target).toBe('<script>alert(asd)</script>'); }); }); @@ -388,12 +389,12 @@ describe('templateSrv', () => { }); it('multi value and csv format should render csv string', () => { - const result = _templateSrv.formatValue(['test', 'test2'], 'csv'); + const result = _templateSrv.formatValue(['test', 'test2'], VariableFormatID.CSV); expect(result).toBe('test,test2'); }); it('multi value and percentencode format should render percent-encoded string', () => { - const result = _templateSrv.formatValue(['foo()bar BAZ', 'test2'], 'percentencode'); + const result = _templateSrv.formatValue(['foo()bar BAZ', 'test2'], VariableFormatID.PercentEncode); expect(result).toBe('%7Bfoo%28%29bar%20BAZ%2Ctest2%7D'); }); diff --git a/public/app/features/transformers/FilterByValueTransformer/FilterByValueTransformerEditor.tsx b/public/app/features/transformers/FilterByValueTransformer/FilterByValueTransformerEditor.tsx index 53f434ff5a1..930051da867 100644 --- a/public/app/features/transformers/FilterByValueTransformer/FilterByValueTransformerEditor.tsx +++ b/public/app/features/transformers/FilterByValueTransformer/FilterByValueTransformerEditor.tsx @@ -34,9 +34,7 @@ const filterMatch: Array> = [ { label: 'Match any', value: FilterByValueMatch.any }, ]; -export const FilterByValueTransformerEditor: React.FC> = ( - props -) => { +export const FilterByValueTransformerEditor = (props: TransformerUIProps) => { const { input, options, onChange } = props; const styles = getEditorStyles(); const fieldsInfo = useFieldsInfo(input); diff --git a/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/NoopMatcherEditor.tsx b/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/NoopMatcherEditor.tsx index ea764d8dc3e..f4458df5baa 100644 --- a/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/NoopMatcherEditor.tsx +++ b/public/app/features/transformers/FilterByValueTransformer/ValueMatchers/NoopMatcherEditor.tsx @@ -1,10 +1,8 @@ -import React from 'react'; - import { ValueMatcherID } from '@grafana/data'; -import { ValueMatcherUIProps, ValueMatcherUIRegistryItem } from './types'; +import { ValueMatcherUIRegistryItem } from './types'; -export const NoopMatcherEditor: React.FC> = () => { +export const NoopMatcherEditor = () => { return null; }; diff --git a/public/app/features/transformers/calculateHeatmap/HeatmapTransformerEditor.tsx b/public/app/features/transformers/calculateHeatmap/HeatmapTransformerEditor.tsx index 7b4ccaf0eaa..d8bcb826c71 100644 --- a/public/app/features/transformers/calculateHeatmap/HeatmapTransformerEditor.tsx +++ b/public/app/features/transformers/calculateHeatmap/HeatmapTransformerEditor.tsx @@ -23,7 +23,7 @@ const supplier = ( addHeatmapCalculationOptions('', builder, options); }; -export const HeatmapTransformerEditor: React.FC> = (props) => { +export const HeatmapTransformerEditor = (props: TransformerUIProps) => { useEffect(() => { if (!props.options.xBuckets?.mode) { const opts = getDefaultOptions(supplier); diff --git a/public/app/features/transformers/calculateHeatmap/editor/AxisEditor.tsx b/public/app/features/transformers/calculateHeatmap/editor/AxisEditor.tsx index 4fbabc0c383..477d932a62f 100644 --- a/public/app/features/transformers/calculateHeatmap/editor/AxisEditor.tsx +++ b/public/app/features/transformers/calculateHeatmap/editor/AxisEditor.tsx @@ -25,11 +25,7 @@ const logModeOptions: Array> = [ }, ]; -export const AxisEditor: React.FC> = ({ - value, - onChange, - item, -}) => { +export const AxisEditor = ({ value, onChange, item }: StandardEditorProps) => { return ( void; } -export const GroupByTransformerEditor: React.FC> = ({ +export const GroupByTransformerEditor = ({ input, options, onChange, -}) => { +}: TransformerUIProps) => { const fieldNames = useAllFieldNamesFromDataFrames(input); const onConfigChange = useCallback( @@ -65,7 +65,7 @@ const options = [ { label: 'Calculate', value: GroupByOperationID.aggregate }, ]; -export const GroupByFieldConfiguration: React.FC = ({ fieldName, config, onConfigChange }) => { +export const GroupByFieldConfiguration = ({ fieldName, config, onConfigChange }: FieldProps) => { const styles = getStyling(); const onChange = useCallback( diff --git a/public/app/features/transformers/editors/GroupingToMatrixTransformerEditor.tsx b/public/app/features/transformers/editors/GroupingToMatrixTransformerEditor.tsx index 0c6de4a50b0..9665794ed3e 100644 --- a/public/app/features/transformers/editors/GroupingToMatrixTransformerEditor.tsx +++ b/public/app/features/transformers/editors/GroupingToMatrixTransformerEditor.tsx @@ -13,11 +13,11 @@ import { InlineField, InlineFieldRow, Select } from '@grafana/ui'; import { useAllFieldNamesFromDataFrames } from '../utils'; -export const GroupingToMatrixTransformerEditor: React.FC> = ({ +export const GroupingToMatrixTransformerEditor = ({ input, options, onChange, -}) => { +}: TransformerUIProps) => { const fieldNames = useAllFieldNamesFromDataFrames(input).map((item: string) => ({ label: item, value: item })); const onSelectColumn = useCallback( diff --git a/public/app/features/transformers/editors/HistogramTransformerEditor.tsx b/public/app/features/transformers/editors/HistogramTransformerEditor.tsx index bac37e68d45..8c777e871c7 100644 --- a/public/app/features/transformers/editors/HistogramTransformerEditor.tsx +++ b/public/app/features/transformers/editors/HistogramTransformerEditor.tsx @@ -8,11 +8,11 @@ import { import { InlineField, InlineFieldRow, InlineSwitch } from '@grafana/ui'; import { NumberInput } from 'app/core/components/OptionsUI/NumberInput'; -export const HistogramTransformerEditor: React.FC> = ({ +export const HistogramTransformerEditor = ({ input, options, onChange, -}) => { +}: TransformerUIProps) => { const labelWidth = 18; const onBucketSizeChanged = useCallback( diff --git a/public/app/features/transformers/editors/LabelsToFieldsTransformerEditor.tsx b/public/app/features/transformers/editors/LabelsToFieldsTransformerEditor.tsx index 7a131b5dfcb..f8b1b4814e0 100644 --- a/public/app/features/transformers/editors/LabelsToFieldsTransformerEditor.tsx +++ b/public/app/features/transformers/editors/LabelsToFieldsTransformerEditor.tsx @@ -19,11 +19,11 @@ const modes: Array> = [ { value: LabelsToFieldsMode.Rows, label: 'Rows' }, ]; -export const LabelsAsFieldsTransformerEditor: React.FC> = ({ +export const LabelsAsFieldsTransformerEditor = ({ input, options, onChange, -}) => { +}: TransformerUIProps) => { const labelWidth = 20; const { labelNames, selected } = useMemo(() => { diff --git a/public/app/features/transformers/editors/LimitTransformerEditor.tsx b/public/app/features/transformers/editors/LimitTransformerEditor.tsx index 3cd80da1e14..2d1733ae561 100644 --- a/public/app/features/transformers/editors/LimitTransformerEditor.tsx +++ b/public/app/features/transformers/editors/LimitTransformerEditor.tsx @@ -4,10 +4,7 @@ import { DataTransformerID, standardTransformers, TransformerRegistryItem, Trans import { LimitTransformerOptions } from '@grafana/data/src/transformations/transformers/limit'; import { InlineField, InlineFieldRow, Input } from '@grafana/ui'; -export const LimitTransformerEditor: React.FC> = ({ - options, - onChange, -}) => { +export const LimitTransformerEditor = ({ options, onChange }: TransformerUIProps) => { const onSetLimit = useCallback( (value: FormEvent) => { onChange({ diff --git a/public/app/features/transformers/editors/MergeTransformerEditor.tsx b/public/app/features/transformers/editors/MergeTransformerEditor.tsx index f735eff9cda..8a1868806cf 100644 --- a/public/app/features/transformers/editors/MergeTransformerEditor.tsx +++ b/public/app/features/transformers/editors/MergeTransformerEditor.tsx @@ -4,11 +4,7 @@ import { DataTransformerID, standardTransformers, TransformerRegistryItem, Trans import { MergeTransformerOptions } from '@grafana/data/src/transformations/transformers/merge'; import { FieldValidationMessage } from '@grafana/ui'; -export const MergeTransformerEditor: React.FC> = ({ - input, - options, - onChange, -}) => { +export const MergeTransformerEditor = ({ input, options, onChange }: TransformerUIProps) => { if (input.length <= 1) { // Show warning that merge is useless only apply on a single frame return Merge has no effect when applied on a single frame.; diff --git a/public/app/features/transformers/editors/ReduceTransformerEditor.tsx b/public/app/features/transformers/editors/ReduceTransformerEditor.tsx index b6d6bf9e976..74255a66b4b 100644 --- a/public/app/features/transformers/editors/ReduceTransformerEditor.tsx +++ b/public/app/features/transformers/editors/ReduceTransformerEditor.tsx @@ -13,10 +13,7 @@ import { selectors } from '@grafana/e2e-selectors'; import { LegacyForms, Select, StatsPicker } from '@grafana/ui'; // TODO: Minimal implementation, needs some <3 -export const ReduceTransformerEditor: React.FC> = ({ - options, - onChange, -}) => { +export const ReduceTransformerEditor = ({ options, onChange }: TransformerUIProps) => { const modes: Array> = [ { label: 'Series to rows', diff --git a/public/app/features/transformers/editors/SeriesToRowsTransformerEditor.tsx b/public/app/features/transformers/editors/SeriesToRowsTransformerEditor.tsx index 01673a5bcda..c27e2c3da5f 100644 --- a/public/app/features/transformers/editors/SeriesToRowsTransformerEditor.tsx +++ b/public/app/features/transformers/editors/SeriesToRowsTransformerEditor.tsx @@ -1,13 +1,11 @@ -import React from 'react'; - import { DataTransformerID, standardTransformers, TransformerRegistryItem, TransformerUIProps } from '@grafana/data'; import { SeriesToRowsTransformerOptions } from '@grafana/data/src/transformations/transformers/seriesToRows'; -export const SeriesToRowsTransformerEditor: React.FC> = ({ +export const SeriesToRowsTransformerEditor = ({ input, options, onChange, -}) => { +}: TransformerUIProps) => { return null; }; diff --git a/public/app/features/transformers/editors/SortByTransformerEditor.tsx b/public/app/features/transformers/editors/SortByTransformerEditor.tsx index 054d5f43bdd..008cd5262a6 100644 --- a/public/app/features/transformers/editors/SortByTransformerEditor.tsx +++ b/public/app/features/transformers/editors/SortByTransformerEditor.tsx @@ -6,11 +6,7 @@ import { InlineField, InlineSwitch, InlineFieldRow, Select } from '@grafana/ui'; import { useAllFieldNamesFromDataFrames } from '../utils'; -export const SortByTransformerEditor: React.FC> = ({ - input, - options, - onChange, -}) => { +export const SortByTransformerEditor = ({ input, options, onChange }: TransformerUIProps) => { const fieldNames = useAllFieldNamesFromDataFrames(input).map((item: string) => ({ label: item, value: item })); // Only supports single sort for now diff --git a/public/app/features/transformers/extractFields/ExtractFieldsTransformerEditor.tsx b/public/app/features/transformers/extractFields/ExtractFieldsTransformerEditor.tsx index 723893e81a1..6fd03d726c0 100644 --- a/public/app/features/transformers/extractFields/ExtractFieldsTransformerEditor.tsx +++ b/public/app/features/transformers/extractFields/ExtractFieldsTransformerEditor.tsx @@ -26,11 +26,11 @@ const fieldNamePickerSettings: StandardEditorsRegistryItem null, }; -export const extractFieldsTransformerEditor: React.FC> = ({ +export const extractFieldsTransformerEditor = ({ input, options, onChange, -}) => { +}: TransformerUIProps) => { const onPickSourceField = (source?: string) => { onChange({ ...options, diff --git a/public/app/features/transformers/lookupGazetteer/FieldLookupTransformerEditor.tsx b/public/app/features/transformers/lookupGazetteer/FieldLookupTransformerEditor.tsx index fcc9af08c37..e19a91fa3e7 100644 --- a/public/app/features/transformers/lookupGazetteer/FieldLookupTransformerEditor.tsx +++ b/public/app/features/transformers/lookupGazetteer/FieldLookupTransformerEditor.tsx @@ -31,11 +31,7 @@ const fieldLookupSettings: StandardEditorsRegistryItem> = ({ - input, - options, - onChange, -}) => { +export const FieldLookupTransformerEditor = ({ input, options, onChange }: TransformerUIProps) => { const onPickLookupField = useCallback( (value: string | undefined) => { onChange({ diff --git a/public/app/features/transformers/spatial/SpatialTransformerEditor.tsx b/public/app/features/transformers/spatial/SpatialTransformerEditor.tsx index 7c29bb96faf..57e6e28f067 100644 --- a/public/app/features/transformers/spatial/SpatialTransformerEditor.tsx +++ b/public/app/features/transformers/spatial/SpatialTransformerEditor.tsx @@ -113,7 +113,9 @@ const supplier = ( } }; -export const SetGeometryTransformerEditor: React.FC> = (props) => { +type Props = TransformerUIProps; + +export const SetGeometryTransformerEditor = (props: Props) => { // a new component is created with every change :( useEffect(() => { if (!props.options.source?.mode) { diff --git a/public/app/features/transformers/standardTransformers.ts b/public/app/features/transformers/standardTransformers.ts index c047c59ab14..8716a48a20a 100644 --- a/public/app/features/transformers/standardTransformers.ts +++ b/public/app/features/transformers/standardTransformers.ts @@ -1,4 +1,5 @@ import { TransformerRegistryItem } from '@grafana/data'; +import { config } from '@grafana/runtime'; import { filterByValueTransformRegistryItem } from './FilterByValueTransformer/FilterByValueTransformerEditor'; import { heatmapTransformRegistryItem } from './calculateHeatmap/HeatmapTransformerEditor'; @@ -27,6 +28,7 @@ import { partitionByValuesTransformRegistryItem } from './partitionByValues/Part import { prepareTimeseriesTransformerRegistryItem } from './prepareTimeSeries/PrepareTimeSeriesEditor'; import { rowsToFieldsTransformRegistryItem } from './rowsToFields/RowsToFieldsTransformerEditor'; import { spatialTransformRegistryItem } from './spatial/SpatialTransformerEditor'; +import { timeSeriesTableTransformRegistryItem } from './timeSeriesTable/TimeSeriesTableTransformEditor'; export const getStandardTransformers = (): Array> => { return [ @@ -57,5 +59,6 @@ export const getStandardTransformers = (): Array> = limitTransformRegistryItem, joinByLabelsTransformRegistryItem, partitionByValuesTransformRegistryItem, + ...(config.featureToggles.timeSeriesTable ? [timeSeriesTableTransformRegistryItem] : []), ]; }; diff --git a/public/app/features/transformers/timeSeriesTable/TimeSeriesTableTransformEditor.tsx b/public/app/features/transformers/timeSeriesTable/TimeSeriesTableTransformEditor.tsx new file mode 100644 index 00000000000..eb01f21de1b --- /dev/null +++ b/public/app/features/transformers/timeSeriesTable/TimeSeriesTableTransformEditor.tsx @@ -0,0 +1,25 @@ +import React from 'react'; + +import { PluginState, TransformerRegistryItem, TransformerUIProps } from '@grafana/data'; + +import { timeSeriesTableTransformer, TimeSeriesTableTransformerOptions } from './timeSeriesTableTransformer'; + +export interface Props extends TransformerUIProps<{}> {} + +export function TimeSeriesTableTransformEditor({ input, options, onChange }: Props) { + if (input.length === 0) { + return null; + } + + return
; +} + +export const timeSeriesTableTransformRegistryItem: TransformerRegistryItem = { + id: timeSeriesTableTransformer.id, + editor: TimeSeriesTableTransformEditor, + transformation: timeSeriesTableTransformer, + name: timeSeriesTableTransformer.name, + description: timeSeriesTableTransformer.description, + state: PluginState.beta, + help: ``, +}; diff --git a/public/app/features/transformers/timeSeriesTable/timeSeriesTableTransformer.test.ts b/public/app/features/transformers/timeSeriesTable/timeSeriesTableTransformer.test.ts new file mode 100644 index 00000000000..952fcdf0d9b --- /dev/null +++ b/public/app/features/transformers/timeSeriesTable/timeSeriesTableTransformer.test.ts @@ -0,0 +1,104 @@ +import { toDataFrame, FieldType, Labels, DataFrame, Field } from '@grafana/data'; + +import { timeSeriesToTableTransform } from './timeSeriesTableTransformer'; + +describe('timeSeriesTableTransformer', () => { + it('Will transform a single query', () => { + const series = [ + getTimeSeries('A', { instance: 'A', pod: 'B' }), + getTimeSeries('A', { instance: 'A', pod: 'C' }), + getTimeSeries('A', { instance: 'A', pod: 'D' }), + ]; + + const results = timeSeriesToTableTransform({}, series); + expect(results).toHaveLength(1); + const result = results[0]; + expect(result.refId).toBe('A'); + expect(result.fields).toHaveLength(3); + expect(result.fields[0].values.toArray()).toEqual(['A', 'A', 'A']); + expect(result.fields[1].values.toArray()).toEqual(['B', 'C', 'D']); + assertDataFrameField(result.fields[2], series); + }); + + it('Will pass through non time series frames', () => { + const series = [ + getTable('B', ['foo', 'bar']), + getTimeSeries('A', { instance: 'A', pod: 'B' }), + getTimeSeries('A', { instance: 'A', pod: 'C' }), + getTable('C', ['bar', 'baz', 'bad']), + ]; + + const results = timeSeriesToTableTransform({}, series); + expect(results).toHaveLength(3); + expect(results[0]).toEqual(series[0]); + expect(results[1].refId).toBe('A'); + expect(results[1].fields).toHaveLength(3); + expect(results[1].fields[0].values.toArray()).toEqual(['A', 'A']); + expect(results[1].fields[1].values.toArray()).toEqual(['B', 'C']); + expect(results[2]).toEqual(series[3]); + }); + + it('Will group by refId', () => { + const series = [ + getTimeSeries('A', { instance: 'A', pod: 'B' }), + getTimeSeries('A', { instance: 'A', pod: 'C' }), + getTimeSeries('A', { instance: 'A', pod: 'D' }), + getTimeSeries('B', { instance: 'B', pod: 'F', cluster: 'A' }), + getTimeSeries('B', { instance: 'B', pod: 'G', cluster: 'B' }), + ]; + + const results = timeSeriesToTableTransform({}, series); + expect(results).toHaveLength(2); + expect(results[0].refId).toBe('A'); + expect(results[0].fields).toHaveLength(3); + expect(results[0].fields[0].values.toArray()).toEqual(['A', 'A', 'A']); + expect(results[0].fields[1].values.toArray()).toEqual(['B', 'C', 'D']); + assertDataFrameField(results[0].fields[2], series.slice(0, 3)); + expect(results[1].refId).toBe('B'); + expect(results[1].fields).toHaveLength(4); + expect(results[1].fields[0].values.toArray()).toEqual(['B', 'B']); + expect(results[1].fields[1].values.toArray()).toEqual(['F', 'G']); + expect(results[1].fields[2].values.toArray()).toEqual(['A', 'B']); + assertDataFrameField(results[1].fields[3], series.slice(3, 5)); + }); +}); + +function assertFieldsEqual(field1: Field, field2: Field) { + expect(field1.type).toEqual(field2.type); + expect(field1.name).toEqual(field2.name); + expect(field1.values.toArray()).toEqual(field2.values.toArray()); + expect(field1.labels ?? {}).toEqual(field2.labels ?? {}); +} + +function assertDataFrameField(field: Field, matchesFrames: DataFrame[]) { + const frames: DataFrame[] = field.values.toArray(); + expect(frames).toHaveLength(matchesFrames.length); + frames.forEach((frame, idx) => { + const matchingFrame = matchesFrames[idx]; + expect(frame.fields).toHaveLength(matchingFrame.fields.length); + frame.fields.forEach((field, fidx) => assertFieldsEqual(field, matchingFrame.fields[fidx])); + }); +} + +function getTimeSeries(refId: string, labels: Labels) { + return toDataFrame({ + refId, + fields: [ + { name: 'Time', type: FieldType.time, values: [10] }, + { + name: 'Value', + type: FieldType.number, + values: [10], + labels, + }, + ], + }); +} + +function getTable(refId: string, fields: string[]) { + return toDataFrame({ + refId, + fields: fields.map((f) => ({ name: f, type: FieldType.string, values: ['value'] })), + labels: {}, + }); +} diff --git a/public/app/features/transformers/timeSeriesTable/timeSeriesTableTransformer.ts b/public/app/features/transformers/timeSeriesTable/timeSeriesTableTransformer.ts new file mode 100644 index 00000000000..d3e6b68a12c --- /dev/null +++ b/public/app/features/transformers/timeSeriesTable/timeSeriesTableTransformer.ts @@ -0,0 +1,127 @@ +import { map } from 'rxjs/operators'; + +import { + ArrayVector, + DataFrame, + DataTransformerID, + DataTransformerInfo, + Field, + FieldType, + MutableDataFrame, + isTimeSeriesFrame, +} from '@grafana/data'; + +export interface TimeSeriesTableTransformerOptions {} + +export const timeSeriesTableTransformer: DataTransformerInfo = { + id: DataTransformerID.timeSeriesTable, + name: 'Time series to table transform', + description: 'Time series to table rows', + defaultOptions: {}, + + operator: (options) => (source) => + source.pipe( + map((data) => { + return timeSeriesToTableTransform(options, data); + }) + ), +}; + +/** + * Converts time series frames to table frames for use with sparkline chart type. + * + * @remarks + * For each refId (queryName) convert all time series frames into a single table frame, adding each series + * as values of a "Trend" frame field. This allows "Trend" to be rendered as area chart type. + * Any non time series frames are returned as is. + * + * @param options - Transform options, currently not used + * @param data - Array of data frames to transform + * @returns Array of transformed data frames + * + * @alpha + */ +export function timeSeriesToTableTransform(options: TimeSeriesTableTransformerOptions, data: DataFrame[]): DataFrame[] { + // initialize fields from labels for each refId + const refId2LabelFields = getLabelFields(data); + + const refId2frameField: Record> = {}; + + const result: DataFrame[] = []; + + for (const frame of data) { + if (!isTimeSeriesFrame(frame)) { + result.push(frame); + continue; + } + + const refId = frame.refId ?? ''; + + const labelFields = refId2LabelFields[refId] ?? {}; + // initialize a new frame for this refId with fields per label and a Trend frame field, if it doesn't exist yet + let frameField = refId2frameField[refId]; + if (!frameField) { + frameField = { + name: 'Trend' + (refId && Object.keys(refId2LabelFields).length > 1 ? ` #${refId}` : ''), + type: FieldType.frame, + config: {}, + values: new ArrayVector(), + }; + refId2frameField[refId] = frameField; + const table = new MutableDataFrame(); + for (const label of Object.values(labelFields)) { + table.addField(label); + } + table.addField(frameField); + table.refId = refId; + result.push(table); + } + + // add values to each label based field of this frame + const labels = frame.fields[1].labels; + for (const labelKey of Object.keys(labelFields)) { + const labelValue = labels?.[labelKey] ?? null; + labelFields[labelKey].values.add(labelValue); + } + + frameField.values.add(frame); + } + return result; +} + +// For each refId, initialize a field for each label name +function getLabelFields(frames: DataFrame[]): Record>> { + // refId -> label name -> field + const labelFields: Record>> = {}; + + for (const frame of frames) { + if (!isTimeSeriesFrame(frame)) { + continue; + } + + const refId = frame.refId ?? ''; + + if (!labelFields[refId]) { + labelFields[refId] = {}; + } + + for (const field of frame.fields) { + if (!field.labels) { + continue; + } + + for (const labelName of Object.keys(field.labels)) { + if (!labelFields[refId][labelName]) { + labelFields[refId][labelName] = { + name: labelName, + type: FieldType.string, + config: {}, + values: new ArrayVector(), + }; + } + } + } + } + + return labelFields; +} diff --git a/public/app/features/variables/adhoc/picker/AdHocFilterBuilder.tsx b/public/app/features/variables/adhoc/picker/AdHocFilterBuilder.tsx index 69da8f2afba..1d172ca728b 100644 --- a/public/app/features/variables/adhoc/picker/AdHocFilterBuilder.tsx +++ b/public/app/features/variables/adhoc/picker/AdHocFilterBuilder.tsx @@ -1,4 +1,4 @@ -import React, { FC, useCallback, useState } from 'react'; +import React, { useCallback, useState } from 'react'; import { DataSourceRef, SelectableValue } from '@grafana/data'; import { t } from 'app/core/internationalization'; @@ -14,7 +14,7 @@ interface Props { getTagKeysOptions?: any; } -export const AdHocFilterBuilder: FC = ({ datasource, appendBefore, onCompleted, getTagKeysOptions }) => { +export const AdHocFilterBuilder = ({ datasource, appendBefore, onCompleted, getTagKeysOptions }: Props) => { const [key, setKey] = useState(null); const [operator, setOperator] = useState('='); diff --git a/public/app/features/variables/adhoc/picker/AdHocFilterKey.tsx b/public/app/features/variables/adhoc/picker/AdHocFilterKey.tsx index da71333bce2..051b34c6f10 100644 --- a/public/app/features/variables/adhoc/picker/AdHocFilterKey.tsx +++ b/public/app/features/variables/adhoc/picker/AdHocFilterKey.tsx @@ -1,4 +1,4 @@ -import React, { FC, ReactElement } from 'react'; +import React, { ReactElement } from 'react'; import { DataSourceRef, SelectableValue } from '@grafana/data'; import { Icon, SegmentAsync } from '@grafana/ui'; @@ -14,7 +14,7 @@ interface Props { } const MIN_WIDTH = 90; -export const AdHocFilterKey: FC = ({ datasource, onChange, disabled, filterKey, getTagKeysOptions }) => { +export const AdHocFilterKey = ({ datasource, onChange, disabled, filterKey, getTagKeysOptions }: Props) => { const loadKeys = () => fetchFilterKeys(datasource, getTagKeysOptions); const loadKeysWithRemove = () => fetchFilterKeysWithRemove(datasource, getTagKeysOptions); diff --git a/public/app/features/variables/adhoc/picker/AdHocFilterRenderer.tsx b/public/app/features/variables/adhoc/picker/AdHocFilterRenderer.tsx index c6ced123c9d..79babf88ead 100644 --- a/public/app/features/variables/adhoc/picker/AdHocFilterRenderer.tsx +++ b/public/app/features/variables/adhoc/picker/AdHocFilterRenderer.tsx @@ -1,4 +1,4 @@ -import React, { FC } from 'react'; +import React from 'react'; import { DataSourceRef, SelectableValue } from '@grafana/data'; import { AdHocVariableFilter } from 'app/features/variables/types'; @@ -18,7 +18,7 @@ interface Props { disabled?: boolean; } -export const AdHocFilterRenderer: FC = ({ +export const AdHocFilterRenderer = ({ datasource, filter: { key, operator, value }, onKeyChange, @@ -27,7 +27,7 @@ export const AdHocFilterRenderer: FC = ({ placeHolder, getTagKeysOptions, disabled, -}) => { +}: Props) => { return ( <> = ({ - datasource, - disabled, - onChange, - filterKey, - filterValue, - placeHolder, -}) => { +export const AdHocFilterValue = ({ datasource, disabled, onChange, filterKey, filterValue, placeHolder }: Props) => { const loadValues = () => fetchFilterValues(datasource, filterKey); return ( diff --git a/public/app/features/variables/adhoc/picker/ConditionSegment.tsx b/public/app/features/variables/adhoc/picker/ConditionSegment.tsx index 537b0ddb607..4c47fd73433 100644 --- a/public/app/features/variables/adhoc/picker/ConditionSegment.tsx +++ b/public/app/features/variables/adhoc/picker/ConditionSegment.tsx @@ -1,10 +1,10 @@ -import React, { FC } from 'react'; +import React from 'react'; interface Props { label: string; } -export const ConditionSegment: FC = ({ label }) => { +export const ConditionSegment = ({ label }: Props) => { return (
{label} diff --git a/public/app/features/variables/adhoc/picker/OperatorSegment.tsx b/public/app/features/variables/adhoc/picker/OperatorSegment.tsx index bdcc36dd6b0..b8646b466e6 100644 --- a/public/app/features/variables/adhoc/picker/OperatorSegment.tsx +++ b/public/app/features/variables/adhoc/picker/OperatorSegment.tsx @@ -1,4 +1,4 @@ -import React, { FC } from 'react'; +import React from 'react'; import { SelectableValue } from '@grafana/data'; import { Segment } from '@grafana/ui'; @@ -14,7 +14,7 @@ const options = ['=', '!=', '<', '>', '=~', '!~'].map>(( value, })); -export const OperatorSegment: FC = ({ value, disabled, onChange }) => { +export const OperatorSegment = ({ value, disabled, onChange }: Props) => { return ( = ({ onChange, query }) => { +export const LegacyVariableQueryEditor = ({ onChange, query }: VariableQueryEditorProps) => { const styles = useStyles2(getStyles); const [value, setValue] = useState(query); const onValueChange = (event: React.FormEvent) => { diff --git a/public/app/features/variables/editor/SelectionOptionsEditor.tsx b/public/app/features/variables/editor/SelectionOptionsEditor.tsx index 3c301cef555..06cf1525b71 100644 --- a/public/app/features/variables/editor/SelectionOptionsEditor.tsx +++ b/public/app/features/variables/editor/SelectionOptionsEditor.tsx @@ -1,4 +1,4 @@ -import React, { ChangeEvent, FormEvent, FunctionComponent, useCallback } from 'react'; +import React, { ChangeEvent, FormEvent, useCallback } from 'react'; import { selectors } from '@grafana/e2e-selectors'; import { VerticalGroup } from '@grafana/ui'; @@ -16,11 +16,11 @@ export interface SelectionOptionsEditorProps void; } -export const SelectionOptionsEditor: FunctionComponent = ({ +export const SelectionOptionsEditor = ({ onMultiChanged: onMultiChangedProps, onPropChange, variable, -}) => { +}: SelectionOptionsEditorProps) => { const onMultiChanged = useCallback( (event: ChangeEvent) => { onMultiChangedProps(toKeyedVariableIdentifier(variable), event.target.checked); diff --git a/public/app/features/variables/editor/VariableValuesPreview.tsx b/public/app/features/variables/editor/VariableValuesPreview.tsx index d10f2ca6851..2c04e68198d 100644 --- a/public/app/features/variables/editor/VariableValuesPreview.tsx +++ b/public/app/features/variables/editor/VariableValuesPreview.tsx @@ -11,9 +11,7 @@ export interface VariableValuesPreviewProps { variable: VariableWithOptions; } -export const VariableValuesPreview: React.FunctionComponent = ({ - variable: { options }, -}) => { +export const VariableValuesPreview = ({ variable: { options } }: VariableValuesPreviewProps) => { const [previewLimit, setPreviewLimit] = useState(20); const [previewOptions, setPreviewOptions] = useState([]); const showMoreOptions = useCallback( diff --git a/public/app/features/variables/inspect/NetworkGraph.tsx b/public/app/features/variables/inspect/NetworkGraph.tsx index 38d7707bfef..12c2d0a843b 100644 --- a/public/app/features/variables/inspect/NetworkGraph.tsx +++ b/public/app/features/variables/inspect/NetworkGraph.tsx @@ -1,4 +1,4 @@ -import React, { FC, useCallback, useEffect, useRef } from 'react'; +import React, { useCallback, useEffect, useRef } from 'react'; import { GraphEdge, GraphNode } from './utils'; @@ -17,7 +17,7 @@ interface DispatchProps {} export type Props = OwnProps & ConnectedProps & DispatchProps; -export const NetworkGraph: FC = ({ nodes, edges, direction, width, height, onDoubleClick }) => { +export const NetworkGraph = ({ nodes, edges, direction, width, height, onDoubleClick }: Props) => { const network = useRef(null); const ref = useRef(null); diff --git a/public/app/features/variables/inspect/VariableUsagesButton.tsx b/public/app/features/variables/inspect/VariableUsagesButton.tsx index 58a7d2625ca..66e1d945750 100644 --- a/public/app/features/variables/inspect/VariableUsagesButton.tsx +++ b/public/app/features/variables/inspect/VariableUsagesButton.tsx @@ -1,4 +1,4 @@ -import React, { FC, useMemo } from 'react'; +import React, { useMemo } from 'react'; import { reportInteraction } from '@grafana/runtime'; import { IconButton } from '@grafana/ui'; @@ -12,7 +12,7 @@ interface Props { isAdhoc: boolean; } -export const VariableUsagesButton: FC = ({ id, usages, isAdhoc }) => { +export const VariableUsagesButton = ({ id, usages, isAdhoc }: Props) => { const network = useMemo(() => usages.find((n) => n.variable.id === id), [usages, id]); if (usages.length === 0 || isAdhoc || !network) { return null; diff --git a/public/app/features/variables/inspect/VariablesDependenciesButton.tsx b/public/app/features/variables/inspect/VariablesDependenciesButton.tsx index e2a76a6e6f6..2386a890b03 100644 --- a/public/app/features/variables/inspect/VariablesDependenciesButton.tsx +++ b/public/app/features/variables/inspect/VariablesDependenciesButton.tsx @@ -1,4 +1,4 @@ -import React, { FC, useMemo } from 'react'; +import React, { useMemo } from 'react'; import { Provider } from 'react-redux'; import { reportInteraction } from '@grafana/runtime'; @@ -20,7 +20,7 @@ interface DispatchProps {} type Props = OwnProps & ConnectedProps & DispatchProps; -export const UnProvidedVariablesDependenciesButton: FC = ({ variables }) => { +export const UnProvidedVariablesDependenciesButton = ({ variables }: Props) => { const nodes = useMemo(() => createDependencyNodes(variables), [variables]); const edges = useMemo(() => createDependencyEdges(variables), [variables]); @@ -53,7 +53,7 @@ export const UnProvidedVariablesDependenciesButton: FC = ({ variables }) ); }; -export const VariablesDependenciesButton: FC = (props) => ( +export const VariablesDependenciesButton = (props: Props) => ( diff --git a/public/app/features/variables/inspect/VariablesUnknownButton.tsx b/public/app/features/variables/inspect/VariablesUnknownButton.tsx index 1e37f0986dc..47d7cb33cae 100644 --- a/public/app/features/variables/inspect/VariablesUnknownButton.tsx +++ b/public/app/features/variables/inspect/VariablesUnknownButton.tsx @@ -1,4 +1,4 @@ -import React, { FC, useMemo } from 'react'; +import React, { useMemo } from 'react'; import { IconButton } from '@grafana/ui'; @@ -10,7 +10,7 @@ interface Props { usages: UsagesToNetwork[]; } -export const VariablesUnknownButton: FC = ({ id, usages }) => { +export const VariablesUnknownButton = ({ id, usages }: Props) => { const network = useMemo(() => usages.find((n) => n.variable.id === id), [id, usages]); if (!network) { diff --git a/public/app/features/variables/pickers/OptionsPicker/OptionsPicker.tsx b/public/app/features/variables/pickers/OptionsPicker/OptionsPicker.tsx index 0a93e7ca525..942cdedd0e6 100644 --- a/public/app/features/variables/pickers/OptionsPicker/OptionsPicker.tsx +++ b/public/app/features/variables/pickers/OptionsPicker/OptionsPicker.tsx @@ -150,7 +150,6 @@ export const optionPickerFactory = { .whenActionIsDispatched(navigateOptions('key', NavigationKey.moveDown, clearOthers)) .whenAsyncActionIsDispatched(navigateOptions('key', key, clearOthers), true); - const option = createOption(['sameLabel'], ['B'], true); - // Check selecting the second option triggers variables to update tester.thenDispatchedActionsShouldEqual( - toKeyedAction('key', toggleOption({ option: options[1], forceSelect: true, clearOthers })), - toKeyedAction('key', setCurrentVariableValue(toVariablePayload(variable, { option }))), - toKeyedAction('key', changeVariableProp(toVariablePayload(variable, { propName: 'queryValue', propValue: '' }))), - toKeyedAction('key', hideOptions()), - toKeyedAction('key', setCurrentVariableValue(toVariablePayload(variable, { option }))) + toKeyedAction('key', toggleOption({ option: options[1], forceSelect: false, clearOthers })) ); - expect(locationService.partial).toHaveBeenLastCalledWith({ 'var-Constant': ['B'] }); }); describe('when navigateOptions is dispatched with navigation key selectAndClose after highlighting the second option', () => { - it('then correct actions are dispatched', async () => { + it('then correct actions are dispatched for multi-value variable', async () => { const options = [createOption('A'), createOption('B'), createOption('C')]; const variable = createMultiVariable({ options, current: createOption(['A'], ['A'], true), includeAll: false }); const clearOthers = false; const key = NavigationKey.selectAndClose; + const tester = await reduxTester() + .givenRootReducer(getRootReducer()) + .whenActionIsDispatched( + toKeyedAction('key', addVariable(toVariablePayload(variable, { global: false, index: 0, model: variable }))) + ) + .whenActionIsDispatched(toKeyedAction('key', showOptions(variable))) + .whenActionIsDispatched(navigateOptions('key', NavigationKey.moveDown, clearOthers)) + .whenActionIsDispatched(navigateOptions('key', NavigationKey.moveDown, clearOthers)) + .whenActionIsDispatched(navigateOptions('key', NavigationKey.moveDown, clearOthers)) + .whenActionIsDispatched(navigateOptions('key', NavigationKey.moveUp, clearOthers)) + .whenAsyncActionIsDispatched(navigateOptions('key', key, clearOthers), true); + + tester.thenDispatchedActionsShouldEqual( + toKeyedAction('key', toggleOption({ option: options[1], forceSelect: false, clearOthers })) + ); + }); + + it('then correct actions are dispatched for single-value variable', async () => { + const options = [createOption('A'), createOption('B'), createOption('C')]; + const variable = createVariable({ options, current: createOption('A', 'A', true), includeAll: false }); + + const clearOthers = false; + const key = NavigationKey.selectAndClose; + const tester = await reduxTester() .givenRootReducer(getRootReducer()) .whenActionIsDispatched( @@ -246,9 +263,9 @@ describe('options picker actions', () => { .whenAsyncActionIsDispatched(navigateOptions('key', key, clearOthers), true); const option = { - ...createOption(['B']), + ...createOption('B'), selected: true, - value: ['B'], + value: 'B', }; tester.thenDispatchedActionsShouldEqual( @@ -261,7 +278,7 @@ describe('options picker actions', () => { toKeyedAction('key', hideOptions()), toKeyedAction('key', setCurrentVariableValue(toVariablePayload(variable, { option }))) ); - expect(locationService.partial).toHaveBeenLastCalledWith({ 'var-Constant': ['B'] }); + expect(locationService.partial).toHaveBeenLastCalledWith({ 'var-Constant': 'B' }); }); }); @@ -526,7 +543,7 @@ describe('options picker actions', () => { .whenActionIsDispatched(toggleOptionByHighlight('key', clearOthers)); const optionA = createOption('A'); - const optionBC = createOption('BC'); + const optionBD = createOption('BD'); tester.thenDispatchedActionsShouldEqual( toKeyedAction('key', toggleOption({ option: optionA, forceSelect: false, clearOthers })), @@ -534,13 +551,21 @@ describe('options picker actions', () => { toKeyedAction('key', updateOptionsAndFilter(variable.options)), toKeyedAction('key', moveOptionsHighlight(1)), toKeyedAction('key', moveOptionsHighlight(1)), - toKeyedAction('key', toggleOption({ option: optionBC, forceSelect: false, clearOthers })) + toKeyedAction('key', toggleOption({ option: optionBD, forceSelect: false, clearOthers })) ); }); }); }); function createMultiVariable(extend?: Partial): QueryVariableModel { + return createVariable({ + multi: true, + includeAll: true, + ...(extend ?? {}), + }); +} + +function createVariable(extend?: Partial): QueryVariableModel { return { ...initialVariableModelState, type: 'query', @@ -556,8 +581,8 @@ function createMultiVariable(extend?: Partial): QueryVariabl sort: VariableSort.alphabeticalAsc, refresh: VariableRefresh.never, regex: '', - multi: true, - includeAll: true, + multi: false, + includeAll: false, ...(extend ?? {}), }; } diff --git a/public/app/features/variables/pickers/OptionsPicker/actions.ts b/public/app/features/variables/pickers/OptionsPicker/actions.ts index 675adcf9376..a4c5b3bd134 100644 --- a/public/app/features/variables/pickers/OptionsPicker/actions.ts +++ b/public/app/features/variables/pickers/OptionsPicker/actions.ts @@ -34,8 +34,13 @@ export const navigateOptions = (rootStateKey: string, key: NavigationKey, clearO } if (key === NavigationKey.selectAndClose) { + const picker = getVariablesState(rootStateKey, getState()).optionsPicker; + + if (picker.multi) { + return dispatch(toggleOptionByHighlight(rootStateKey, clearOthers)); + } dispatch(toggleOptionByHighlight(rootStateKey, clearOthers, true)); - return await dispatch(commitChangesToVariable(rootStateKey)); + return dispatch(commitChangesToVariable(rootStateKey)); } if (key === NavigationKey.moveDown) { diff --git a/public/app/features/variables/pickers/OptionsPicker/reducer.test.ts b/public/app/features/variables/pickers/OptionsPicker/reducer.test.ts index e4da8a26d04..f6ccf40632e 100644 --- a/public/app/features/variables/pickers/OptionsPicker/reducer.test.ts +++ b/public/app/features/variables/pickers/OptionsPicker/reducer.test.ts @@ -535,7 +535,7 @@ describe('optionsPickerReducer', () => { ], selectedValues: [{ text: 'All', value: '$__all', selected: true }], queryValue: 'A', - highlightIndex: -1, + highlightIndex: 0, }); }); @@ -559,7 +559,7 @@ describe('optionsPickerReducer', () => { options: [{ text: 'All', value: '$__all', selected: true }], selectedValues: [{ text: 'All', value: '$__all', selected: true }], queryValue: 'A', - highlightIndex: -1, + highlightIndex: 0, }); }); }); @@ -583,7 +583,7 @@ describe('optionsPickerReducer', () => { options: [{ text: 'option:1337', value: 'option:1337', selected: false }], selectedValues: [], queryValue: 'option:1337', - highlightIndex: -1, + highlightIndex: 0, }); }); }); @@ -635,7 +635,7 @@ describe('optionsPickerReducer', () => { ], selectedValues: [{ text: 'B', value: 'B', selected: true }], queryValue: 'A', - highlightIndex: -1, + highlightIndex: 0, }) .whenActionIsDispatched(updateSearchQuery('')) .thenStateShouldEqual({ @@ -646,7 +646,7 @@ describe('optionsPickerReducer', () => { ], selectedValues: [{ text: 'B', value: 'B', selected: true }], queryValue: '', - highlightIndex: -1, + highlightIndex: 0, }) .whenActionIsDispatched(updateOptionsAndFilter(options)) .thenStateShouldEqual({ @@ -658,7 +658,7 @@ describe('optionsPickerReducer', () => { ], selectedValues: [{ text: 'B', value: 'B', selected: true }], queryValue: '', - highlightIndex: -1, + highlightIndex: 0, }); }); }); @@ -766,7 +766,7 @@ describe('optionsPickerReducer', () => { options: [{ text: 'option:11256', value: 'option:11256', selected: false }], selectedValues: [], queryValue: 'option:11256', - highlightIndex: -1, + highlightIndex: 0, }); }); }); diff --git a/public/app/features/variables/pickers/OptionsPicker/reducer.ts b/public/app/features/variables/pickers/OptionsPicker/reducer.ts index 535a0580d11..4d0d32d4f20 100644 --- a/public/app/features/variables/pickers/OptionsPicker/reducer.ts +++ b/public/app/features/variables/pickers/OptionsPicker/reducer.ts @@ -1,5 +1,5 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit'; -import { cloneDeep, isString, trim } from 'lodash'; +import { cloneDeep, isString, trimStart } from 'lodash'; import { applyStateChanges } from '../../../../core/utils/applyStateChanges'; import { ALL_VARIABLE_VALUE } from '../../constants'; @@ -197,7 +197,7 @@ const optionsPickerSlice = createSlice({ return state; }, updateOptionsAndFilter: (state, action: PayloadAction): OptionsPickerState => { - const searchQuery = trim((state.queryValue ?? '').toLowerCase()); + const searchQuery = trimStart((state.queryValue ?? '').toLowerCase()); state.options = action.payload.filter((option) => { const optionsText = option.text ?? ''; @@ -205,7 +205,7 @@ const optionsPickerSlice = createSlice({ return text.toLowerCase().indexOf(searchQuery) !== -1; }); - state.highlightIndex = -1; + state.highlightIndex = 0; return applyStateChanges(state, updateDefaultSelection, updateOptions); }, diff --git a/public/app/features/variables/pickers/PickerRenderer.tsx b/public/app/features/variables/pickers/PickerRenderer.tsx index d02150ff04d..395a63c7c5a 100644 --- a/public/app/features/variables/pickers/PickerRenderer.tsx +++ b/public/app/features/variables/pickers/PickerRenderer.tsx @@ -1,4 +1,4 @@ -import React, { FunctionComponent, PropsWithChildren, ReactElement, useMemo } from 'react'; +import React, { PropsWithChildren, ReactElement, useMemo } from 'react'; import { selectors } from '@grafana/e2e-selectors'; import { Tooltip } from '@grafana/ui'; @@ -11,7 +11,7 @@ interface Props { readOnly?: boolean; } -export const PickerRenderer: FunctionComponent = (props) => { +export const PickerRenderer = (props: Props) => { const PickerToRender = useMemo(() => variableAdapters.get(props.variable.type).picker, [props.variable]); if (!props.variable) { diff --git a/public/app/features/variables/pickers/shared/VariableInput.tsx b/public/app/features/variables/pickers/shared/VariableInput.tsx index 94c8a1762aa..5c586233ae7 100644 --- a/public/app/features/variables/pickers/shared/VariableInput.tsx +++ b/public/app/features/variables/pickers/shared/VariableInput.tsx @@ -8,15 +8,11 @@ export interface Props extends Omit, 'onChange onChange: (value: string) => void; onNavigate: (key: NavigationKey, clearOthers: boolean) => void; value: string | null; - currenthighlightindex?: number; } export class VariableInput extends PureComponent { onKeyDown = (event: React.KeyboardEvent) => { - if ( - NavigationKey[event.keyCode] && - !(event.keyCode === NavigationKey.select && this.props.currenthighlightindex === -1) - ) { + if (NavigationKey[event.keyCode] && event.keyCode !== NavigationKey.select) { const clearOthers = event.ctrlKey || event.metaKey || event.shiftKey; this.props.onNavigate(event.keyCode as NavigationKey, clearOthers); event.preventDefault(); diff --git a/public/app/features/variables/pickers/shared/VariableLink.tsx b/public/app/features/variables/pickers/shared/VariableLink.tsx index d20b2f0b302..5c2d4fb233c 100644 --- a/public/app/features/variables/pickers/shared/VariableLink.tsx +++ b/public/app/features/variables/pickers/shared/VariableLink.tsx @@ -1,5 +1,5 @@ import { css } from '@emotion/css'; -import React, { FC, MouseEvent, useCallback } from 'react'; +import React, { MouseEvent, useCallback } from 'react'; import { GrafanaTheme2 } from '@grafana/data'; import { selectors } from '@grafana/e2e-selectors'; @@ -20,7 +20,7 @@ interface Props { id: string; } -export const VariableLink: FC = ({ loading, disabled, onClick: propsOnClick, text, onCancel, id }) => { +export const VariableLink = ({ loading, disabled, onClick: propsOnClick, text, onCancel, id }: Props) => { const styles = useStyles2(getStyles); const onClick = useCallback( (event: MouseEvent) => { @@ -66,7 +66,7 @@ interface VariableLinkTextProps { text: string; } -const VariableLinkText: FC = ({ text }) => { +const VariableLinkText = ({ text }: VariableLinkTextProps) => { const styles = useStyles2(getStyles); return ( @@ -75,7 +75,7 @@ const VariableLinkText: FC = ({ text }) => { ); }; -const LoadingIndicator: FC> = ({ onCancel }) => { +const LoadingIndicator = ({ onCancel }: Pick) => { const onClick = useCallback( (event: MouseEvent) => { event.preventDefault(); diff --git a/public/app/features/variables/pickers/shared/VariableOptions.tsx b/public/app/features/variables/pickers/shared/VariableOptions.tsx index ad538e2a408..e5f7214c9d2 100644 --- a/public/app/features/variables/pickers/shared/VariableOptions.tsx +++ b/public/app/features/variables/pickers/shared/VariableOptions.tsx @@ -1,9 +1,9 @@ import { css, cx } from '@emotion/css'; -import classNames from 'classnames'; import React, { PureComponent } from 'react'; +import { GrafanaTheme2 } from '@grafana/data'; import { selectors } from '@grafana/e2e-selectors'; -import { Tooltip, Themeable2, withTheme2, clearButtonStyles } from '@grafana/ui'; +import { Tooltip, Themeable2, withTheme2, clearButtonStyles, stylesFactory } from '@grafana/ui'; import { Trans, t } from 'app/core/internationalization'; import { ALL_VARIABLE_VALUE } from '../../constants'; @@ -41,13 +41,14 @@ class VariableOptions extends PureComponent { render() { // Don't want to pass faulty rest props to the div - const { multi, values, highlightIndex, selectedValues, onToggle, onToggleAll, ...restProps } = this.props; + const { multi, values, highlightIndex, selectedValues, onToggle, onToggleAll, theme, ...restProps } = this.props; + const styles = getStyles(theme); return ( -
-
+
+
    @@ -60,22 +61,34 @@ class VariableOptions extends PureComponent { } renderOption(option: VariableOption, index: number) { - const { highlightIndex, theme } = this.props; - const selectClass = option.selected ? 'variable-option pointer selected' : 'variable-option pointer'; - const highlightClass = index === highlightIndex ? `${selectClass} highlighted` : selectClass; + const { highlightIndex, multi, theme } = this.props; + const styles = getStyles(theme); const isAllOption = option.value === ALL_VARIABLE_VALUE; return (
  • @@ -115,16 +134,74 @@ class VariableOptions extends PureComponent { } } -const listStyles = cx( - 'variable-options-column', - css` - list-style-type: none; - ` -); +const getStyles = stylesFactory((theme: GrafanaTheme2) => { + const checkboxImageUrl = theme.isDark ? 'public/img/checkbox.png' : 'public/img/checkbox_white.png'; -const noStyledButton = css` - width: 100%; - text-align: left; -`; + return { + hideVariableOptionIcon: css({ + display: 'none', + }), + highlighted: css({ + backgroundColor: theme.colors.action.hover, + }), + noStyledButton: css({ + width: '100%', + textAlign: 'left', + }), + variableOption: css({ + display: 'block', + padding: '2px 27px 0 8px', + position: 'relative', + whiteSpace: 'nowrap', + minWidth: '115px', + ['&:hover']: { + backgroundColor: theme.colors.action.hover, + }, + }), + variableOptionColumnHeader: css({ + paddingTop: '5px', + paddingBottom: '5px', + marginBottom: '5px', + }), + variableOptionIcon: css({ + display: 'inline-block', + width: '24px', + height: '18px', + position: 'relative', + top: '4px', + background: `url(${checkboxImageUrl}) left top no-repeat`, + }), + variableOptionIconManySelected: css({ + background: `url(${checkboxImageUrl}) 0px -36px no-repeat`, + }), + variableOptionIconSelected: css({ + background: `url(${checkboxImageUrl}) 0px -18px no-repeat`, + }), + variableValueDropdown: css({ + backgroundColor: theme.colors.background.primary, + border: `1px solid ${theme.colors.border.weak}`, + borderRadius: theme.shape.borderRadius(2), + boxShadow: theme.shadows.z2, + position: 'absolute', + top: theme.spacing(theme.components.height.md), + maxHeight: '400px', + minHeight: '150px', + minWidth: '150px', + overflowY: 'auto', + overflowX: 'hidden', + zIndex: theme.zIndex.typeahead, + }), + variableOptionsColumn: css({ + maxHeight: '350px', + display: 'table-cell', + lineHeight: '26px', + listStyleType: 'none', + }), + variableOptionsWrapper: css({ + display: 'table', + width: '100%', + }), + }; +}); export default withTheme2(VariableOptions); diff --git a/public/app/plugins/datasource/azuremonitor/components/ArgQueryEditor/ArgQueryEditor.tsx b/public/app/plugins/datasource/azuremonitor/components/ArgQueryEditor/ArgQueryEditor.tsx index 49fcfa9b33f..488f1cf1211 100644 --- a/public/app/plugins/datasource/azuremonitor/components/ArgQueryEditor/ArgQueryEditor.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/ArgQueryEditor/ArgQueryEditor.tsx @@ -44,14 +44,14 @@ function selectSubscriptions( return querySubscriptions; } -const ArgQueryEditor: React.FC = ({ +const ArgQueryEditor = ({ query, datasource, subscriptionId, variableOptionGroup, onChange, setError, -}) => { +}: ArgQueryEditorProps) => { const [subscriptions, setSubscriptions] = useState([]); useMemo(() => { datasource diff --git a/public/app/plugins/datasource/azuremonitor/components/ArgQueryEditor/QueryField.tsx b/public/app/plugins/datasource/azuremonitor/components/ArgQueryEditor/QueryField.tsx index 4a88a301c7d..1d168835838 100644 --- a/public/app/plugins/datasource/azuremonitor/components/ArgQueryEditor/QueryField.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/ArgQueryEditor/QueryField.tsx @@ -4,7 +4,7 @@ import { CodeEditor } from '@grafana/ui'; import { AzureQueryEditorFieldProps } from '../../types'; -const QueryField: React.FC = ({ query, onQueryChange }) => { +const QueryField = ({ query, onQueryChange }: AzureQueryEditorFieldProps) => { const onChange = useCallback( (newQuery: string) => { onQueryChange({ diff --git a/public/app/plugins/datasource/azuremonitor/components/AzureCredentialsForm.tsx b/public/app/plugins/datasource/azuremonitor/components/AzureCredentialsForm.tsx index 48b652fec9e..434e4bbaf20 100644 --- a/public/app/plugins/datasource/azuremonitor/components/AzureCredentialsForm.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/AzureCredentialsForm.tsx @@ -1,4 +1,4 @@ -import React, { ChangeEvent, FunctionComponent } from 'react'; +import React, { ChangeEvent } from 'react'; import { SelectableValue } from '@grafana/data'; import { LegacyForms, Button, Select, InlineField } from '@grafana/ui'; @@ -30,7 +30,7 @@ const authTypeOptions: Array> = [ const LABEL_WIDTH = 18; -export const AzureCredentialsForm: FunctionComponent = (props: Props) => { +export const AzureCredentialsForm = (props: Props) => { const { credentials, azureCloudOptions, onCredentialsChange, disabled, managedIdentityEnabled } = props; const onAuthTypeChange = (selected: SelectableValue) => { diff --git a/public/app/plugins/datasource/azuremonitor/components/ConfigEditor.tsx b/public/app/plugins/datasource/azuremonitor/components/ConfigEditor.tsx index 826f5d753af..44d647fde49 100644 --- a/public/app/plugins/datasource/azuremonitor/components/ConfigEditor.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/ConfigEditor.tsx @@ -2,7 +2,8 @@ import React, { PureComponent } from 'react'; import { DataSourcePluginOptionsEditorProps, SelectableValue, updateDatasourcePluginOption } from '@grafana/data'; import { getBackendSrv, getTemplateSrv, isFetchError, TemplateSrv } from '@grafana/runtime'; -import { Alert } from '@grafana/ui'; +import { Alert, SecureSocksProxySettings } from '@grafana/ui'; +import { config } from 'app/core/config'; import ResponseParser from '../azure_monitor/response_parser'; import { AzureDataSourceJsonData, AzureDataSourceSecureJsonData, AzureDataSourceSettings } from '../types'; @@ -84,7 +85,7 @@ export class ConfigEditor extends PureComponent { }; render() { - const { options } = this.props; + const { options, onOptionsChange } = this.props; const { error } = this.state; return ( @@ -96,6 +97,9 @@ export class ConfigEditor extends PureComponent { {error.details &&
    {error.details}
    } )} + {config.featureToggles.secureSocksDatasourceProxy && ( + + )} ); } diff --git a/public/app/plugins/datasource/azuremonitor/components/DefaultSubscription.test.tsx b/public/app/plugins/datasource/azuremonitor/components/DefaultSubscription.test.tsx index 258f6e480f5..7fff646bb5d 100644 --- a/public/app/plugins/datasource/azuremonitor/components/DefaultSubscription.test.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/DefaultSubscription.test.tsx @@ -1,4 +1,5 @@ import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import React from 'react'; import { createMockInstanceSetttings } from '../__mocks__/instanceSettings'; @@ -36,7 +37,7 @@ describe('DefaultSubscription', () => { expect(screen.getByTestId(selectors.components.configEditor.loadSubscriptions.button)).toBeDisabled(); }); - it('should enable load subscriptions if credentials are complete and set default subscription', () => { + it('should enable load subscriptions if credentials are complete and set default subscription', async () => { const props = { ...defaultProps, credentials: { ...defaultProps.credentials, clientSecret: 'client_secret' }, @@ -45,7 +46,7 @@ describe('DefaultSubscription', () => { const { rerender } = render(); expect(screen.getByTestId(selectors.components.configEditor.loadSubscriptions.button)).not.toBeDisabled(); - screen.getByTestId(selectors.components.configEditor.loadSubscriptions.button).click(); + await userEvent.click(screen.getByTestId(selectors.components.configEditor.loadSubscriptions.button)); rerender( = (props: Props) => { +export const DefaultSubscription = (props: Props) => { const { credentials, disabled, diff --git a/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/FormatAsField.tsx b/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/FormatAsField.tsx index f3c3c78e518..6796da57671 100644 --- a/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/FormatAsField.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/FormatAsField.tsx @@ -14,7 +14,7 @@ const FORMAT_OPTIONS: Array> = [ { label: 'Table', value: ResultFormat.Table }, ]; -const FormatAsField: React.FC = ({ query, variableOptionGroup, onQueryChange }) => { +const FormatAsField = ({ query, variableOptionGroup, onQueryChange }: AzureQueryEditorFieldProps) => { const options = useMemo(() => [...FORMAT_OPTIONS, variableOptionGroup], [variableOptionGroup]); const handleChange = useCallback( diff --git a/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/LogsQueryEditor.test.tsx b/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/LogsQueryEditor.test.tsx index c8983e1e10e..ee24b71b71e 100644 --- a/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/LogsQueryEditor.test.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/LogsQueryEditor.test.tsx @@ -22,7 +22,7 @@ const variableOptionGroup = { options: [], }; -describe('LogsQueryEdiutor', () => { +describe('LogsQueryEditor', () => { const originalScrollIntoView = window.HTMLElement.prototype.scrollIntoView; beforeEach(() => { @@ -50,13 +50,13 @@ describe('LogsQueryEdiutor', () => { ); const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' }); - resourcePickerButton.click(); + await userEvent.click(resourcePickerButton); const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' }); - subscriptionButton.click(); + await userEvent.click(subscriptionButton); const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' }); - resourceGroupButton.click(); + await userEvent.click(resourceGroupButton); const checkbox = await screen.findByLabelText('web-server'); await userEvent.click(checkbox); @@ -98,13 +98,13 @@ describe('LogsQueryEdiutor', () => { ); const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' }); - resourcePickerButton.click(); + await userEvent.click(resourcePickerButton); const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' }); - subscriptionButton.click(); + await userEvent.click(subscriptionButton); const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' }); - resourceGroupButton.click(); + await userEvent.click(resourceGroupButton); const checkbox = await screen.findByLabelText('web-server'); await userEvent.click(checkbox); @@ -131,13 +131,13 @@ describe('LogsQueryEdiutor', () => { ); const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' }); - resourcePickerButton.click(); + await userEvent.click(resourcePickerButton); const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' }); - subscriptionButton.click(); + await userEvent.click(subscriptionButton); const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' }); - resourceGroupButton.click(); + await userEvent.click(resourceGroupButton); const checkbox = await screen.findByLabelText('web-server'); await userEvent.click(checkbox); @@ -164,17 +164,17 @@ describe('LogsQueryEdiutor', () => { ); const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' }); - resourcePickerButton.click(); + await userEvent.click(resourcePickerButton); const advancedSection = screen.getByText('Advanced'); - advancedSection.click(); + await userEvent.click(advancedSection); const advancedInput = await screen.findByTestId('input-advanced-resource-picker-1'); // const advancedInput = await screen.findByLabelText('Resource URI(s)'); await userEvent.type(advancedInput, '/subscriptions/def-123'); const applyButton = screen.getByRole('button', { name: 'Apply' }); - applyButton.click(); + await userEvent.click(applyButton); expect(onChange).toBeCalledWith( expect.objectContaining({ diff --git a/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/LogsQueryEditor.tsx b/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/LogsQueryEditor.tsx index da37a122949..4152dd37968 100644 --- a/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/LogsQueryEditor.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/LogsQueryEditor.tsx @@ -24,7 +24,7 @@ interface LogsQueryEditorProps { hideFormatAs?: boolean; } -const LogsQueryEditor: React.FC = ({ +const LogsQueryEditor = ({ query, datasource, subscriptionId, @@ -32,7 +32,7 @@ const LogsQueryEditor: React.FC = ({ onChange, setError, hideFormatAs, -}) => { +}: LogsQueryEditorProps) => { const migrationError = useMigrations(datasource, query, onChange); const disableRow = (row: ResourceRow, selectedRows: ResourceRowGroup) => { if (selectedRows.length === 0) { diff --git a/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/QueryField.tsx b/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/QueryField.tsx index c0ba93b623d..148ff64815b 100644 --- a/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/QueryField.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/LogsQueryEditor/QueryField.tsx @@ -22,7 +22,7 @@ interface MonacoLanguages { }; } -const QueryField: React.FC = ({ query, datasource, onQueryChange }) => { +const QueryField = ({ query, datasource, onQueryChange }: AzureQueryEditorFieldProps) => { const monacoPromiseRef = useRef>(); function getPromise() { if (!monacoPromiseRef.current) { diff --git a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/AggregationField.tsx b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/AggregationField.tsx index 1407bdd60f2..71981074a58 100644 --- a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/AggregationField.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/AggregationField.tsx @@ -14,13 +14,13 @@ interface AggregationFieldProps extends AzureQueryEditorFieldProps { isLoading: boolean; } -const AggregationField: React.FC = ({ +const AggregationField = ({ query, variableOptionGroup, onQueryChange, aggregationOptions, isLoading, -}) => { +}: AggregationFieldProps) => { const handleChange = useCallback( (change: SelectableValue) => { if (!change.value) { diff --git a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/DimensionFields.tsx b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/DimensionFields.tsx index 33765f4173a..b0342efe96a 100644 --- a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/DimensionFields.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/DimensionFields.tsx @@ -60,7 +60,7 @@ const useDimensionLabels = (data: PanelData | undefined, query: AzureMonitorQuer return dimensionLabels; }; -const DimensionFields: React.FC = ({ data, query, dimensionOptions, onQueryChange }) => { +const DimensionFields = ({ data, query, dimensionOptions, onQueryChange }: DimensionFieldsProps) => { const dimensionFilters = useMemo( () => query.azureMonitor?.dimensionFilters ?? [], [query.azureMonitor?.dimensionFilters] diff --git a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/LegendFormatField.tsx b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/LegendFormatField.tsx index 31ddc067e9b..1dbbb9b8c8a 100644 --- a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/LegendFormatField.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/LegendFormatField.tsx @@ -7,7 +7,7 @@ import { Field } from '../Field'; import { setLegendAlias } from './setQueryValue'; -const LegendFormatField: React.FC = ({ onQueryChange, query }) => { +const LegendFormatField = ({ onQueryChange, query }: AzureQueryEditorFieldProps) => { const [value, setValue] = useState(query.azureMonitor?.alias ?? ''); // As calling onQueryChange initiates a the datasource refresh, we only want to call it once diff --git a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricNameField.tsx b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricNameField.tsx index 4f73c551690..a3f19d87bb0 100644 --- a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricNameField.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricNameField.tsx @@ -14,7 +14,7 @@ interface MetricNameProps extends AzureQueryEditorFieldProps { metricNames: AzureMonitorOption[]; } -const MetricNameField: React.FC = ({ metricNames, query, variableOptionGroup, onQueryChange }) => { +const MetricNameField = ({ metricNames, query, variableOptionGroup, onQueryChange }: MetricNameProps) => { const handleChange = useCallback( (change: SelectableValue) => { if (!change.value) { diff --git a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricNamespaceField.tsx b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricNamespaceField.tsx index 4f53d8a4c8e..c82bdfda94c 100644 --- a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricNamespaceField.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricNamespaceField.tsx @@ -13,12 +13,12 @@ interface MetricNamespaceFieldProps extends AzureQueryEditorFieldProps { metricNamespaces: AzureMonitorOption[]; } -const MetricNamespaceField: React.FC = ({ +const MetricNamespaceField = ({ metricNamespaces, query, variableOptionGroup, onQueryChange, -}) => { +}: MetricNamespaceFieldProps) => { const handleChange = useCallback( (change: SelectableValue) => { if (!change.value) { diff --git a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricsQueryEditor.test.tsx b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricsQueryEditor.test.tsx index daf6a84e16e..736ae6d0d4d 100644 --- a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricsQueryEditor.test.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricsQueryEditor.test.tsx @@ -106,14 +106,13 @@ describe('MetricsQueryEditor', () => { const resourcePickerButton = await screen.findByRole('button', { name: 'web-server' }); expect(resourcePickerButton).toBeInTheDocument(); - resourcePickerButton.click(); + await userEvent.click(resourcePickerButton); - await waitFor(() => { + await waitFor(async () => { expect(screen.queryByText('Loading...')).not.toBeInTheDocument(); + const selection = await screen.findAllByLabelText('web-server'); + expect(selection).toHaveLength(2); }); - - const selection = await screen.findAllByLabelText('web-server'); - expect(selection).toHaveLength(2); }); it('should change resource when a resource is selected in the ResourcePicker', async () => { @@ -138,17 +137,17 @@ describe('MetricsQueryEditor', () => { const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' }); expect(resourcePickerButton).toBeInTheDocument(); expect(screen.queryByRole('button', { name: 'Expand Primary Subscription' })).not.toBeInTheDocument(); - resourcePickerButton.click(); + await userEvent.click(resourcePickerButton); const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' }); expect(subscriptionButton).toBeInTheDocument(); expect(screen.queryByRole('button', { name: 'Expand A Great Resource Group' })).not.toBeInTheDocument(); - subscriptionButton.click(); + await userEvent.click(subscriptionButton); const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' }); expect(resourceGroupButton).toBeInTheDocument(); expect(screen.queryByLabelText('web-server')).not.toBeInTheDocument(); - resourceGroupButton.click(); + await userEvent.click(resourceGroupButton); const checkbox = await screen.findByLabelText('web-server'); expect(checkbox).toBeInTheDocument(); @@ -194,13 +193,13 @@ describe('MetricsQueryEditor', () => { ); const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' }); - resourcePickerButton.click(); + await userEvent.click(resourcePickerButton); const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' }); - subscriptionButton.click(); + await userEvent.click(subscriptionButton); const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' }); - resourceGroupButton.click(); + await userEvent.click(resourceGroupButton); const checkbox = await screen.findByLabelText('web-server'); await userEvent.click(checkbox); @@ -253,13 +252,13 @@ describe('MetricsQueryEditor', () => { ); const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' }); - resourcePickerButton.click(); + await userEvent.click(resourcePickerButton); const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' }); - subscriptionButton.click(); + await userEvent.click(subscriptionButton); const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' }); - resourceGroupButton.click(); + await userEvent.click(resourceGroupButton); const checkbox = await screen.findByLabelText('web-server'); await userEvent.click(checkbox); @@ -288,13 +287,13 @@ describe('MetricsQueryEditor', () => { ); const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' }); - resourcePickerButton.click(); + await userEvent.click(resourcePickerButton); const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' }); - subscriptionButton.click(); + await userEvent.click(subscriptionButton); const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' }); - resourceGroupButton.click(); + await userEvent.click(resourceGroupButton); const checkbox = await screen.findByLabelText('web-server'); await userEvent.click(checkbox); @@ -397,20 +396,20 @@ describe('MetricsQueryEditor', () => { ); const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' }); - resourcePickerButton.click(); + await userEvent.click(resourcePickerButton); const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' }); - subscriptionButton.click(); + await userEvent.click(subscriptionButton); const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' }); - resourceGroupButton.click(); + await userEvent.click(resourceGroupButton); const checkbox = await screen.findByLabelText('web-server'); await userEvent.click(checkbox); expect(checkbox).toBeChecked(); const advancedSection = screen.getByText('Advanced'); - advancedSection.click(); + await userEvent.click(advancedSection); const advancedInput = await screen.findByLabelText('Subscription'); await userEvent.type(advancedInput, 'def-123'); @@ -443,10 +442,10 @@ describe('MetricsQueryEditor', () => { ); const resourcePickerButton = await screen.findByRole('button', { name: 'Select a resource' }); - resourcePickerButton.click(); + await userEvent.click(resourcePickerButton); const advancedSection = screen.getByText('Advanced'); - advancedSection.click(); + await userEvent.click(advancedSection); const advancedInput = await screen.findByLabelText('Subscription'); await userEvent.type(advancedInput, 'def-123'); @@ -458,7 +457,7 @@ describe('MetricsQueryEditor', () => { await userEvent.type(rnInput, 'rn'); const applyButton = screen.getByRole('button', { name: 'Apply' }); - applyButton.click(); + await userEvent.click(applyButton); expect(onChange).toBeCalledTimes(1); expect(onChange).toBeCalledWith( diff --git a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricsQueryEditor.tsx b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricsQueryEditor.tsx index b8e71f3010f..e86238655cb 100644 --- a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricsQueryEditor.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/MetricsQueryEditor.tsx @@ -29,14 +29,14 @@ interface MetricsQueryEditorProps { setError: (source: string, error: AzureMonitorErrorish | undefined) => void; } -const MetricsQueryEditor: React.FC = ({ +const MetricsQueryEditor = ({ data, query, datasource, variableOptionGroup, onChange, setError, -}) => { +}: MetricsQueryEditorProps) => { const metricsMetadata = useMetricMetadata(query, datasource, onChange); const metricNamespaces = useMetricNamespaces(query, datasource, onChange, setError); const metricNames = useMetricNames(query, datasource, onChange, setError); diff --git a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/TimeGrainField.tsx b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/TimeGrainField.tsx index d39de88c99c..5e7cd0c8072 100644 --- a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/TimeGrainField.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/TimeGrainField.tsx @@ -14,12 +14,7 @@ interface TimeGrainFieldProps extends AzureQueryEditorFieldProps { timeGrainOptions: AzureMonitorOption[]; } -const TimeGrainField: React.FC = ({ - query, - timeGrainOptions, - variableOptionGroup, - onQueryChange, -}) => { +const TimeGrainField = ({ query, timeGrainOptions, variableOptionGroup, onQueryChange }: TimeGrainFieldProps) => { const handleChange = useCallback( (change: SelectableValue) => { if (!change.value) { diff --git a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/TopField.tsx b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/TopField.tsx index b13a41f2517..e3f0254635b 100644 --- a/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/TopField.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/MetricsQueryEditor/TopField.tsx @@ -7,7 +7,7 @@ import { Field } from '../Field'; import { setTop } from './setQueryValue'; -const TopField: React.FC = ({ onQueryChange, query }) => { +const TopField = ({ onQueryChange, query }: AzureQueryEditorFieldProps) => { const [value, setValue] = useState(query.azureMonitor?.top ?? ''); // As calling onQueryChange initiates a the datasource refresh, we only want to call it once diff --git a/public/app/plugins/datasource/azuremonitor/components/MonitorConfig.tsx b/public/app/plugins/datasource/azuremonitor/components/MonitorConfig.tsx index 0ad6e73a59c..4be1881085f 100644 --- a/public/app/plugins/datasource/azuremonitor/components/MonitorConfig.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/MonitorConfig.tsx @@ -1,4 +1,4 @@ -import React, { FunctionComponent, useMemo, useState } from 'react'; +import React, { useMemo, useState } from 'react'; import { SelectableValue } from '@grafana/data'; import { config } from '@grafana/runtime'; @@ -21,7 +21,7 @@ export interface Props { getSubscriptions: () => Promise>>; } -export const MonitorConfig: FunctionComponent = (props: Props) => { +export const MonitorConfig = (props: Props) => { const { updateOptions, getSubscriptions, options } = props; const [subscriptions, setSubscriptions] = useState>>([]); const credentials = useMemo(() => getCredentials(props.options), [props.options]); diff --git a/public/app/plugins/datasource/azuremonitor/components/QueryEditor/QueryEditor.tsx b/public/app/plugins/datasource/azuremonitor/components/QueryEditor/QueryEditor.tsx index d7407e6335e..f9e75280f71 100644 --- a/public/app/plugins/datasource/azuremonitor/components/QueryEditor/QueryEditor.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/QueryEditor/QueryEditor.tsx @@ -27,13 +27,13 @@ export type AzureMonitorQueryEditorProps = QueryEditorProps< AzureDataSourceJsonData >; -const QueryEditor: React.FC = ({ +const QueryEditor = ({ query: baseQuery, datasource, onChange, onRunQuery: baseOnRunQuery, data, -}) => { +}: AzureMonitorQueryEditorProps) => { const [errorMessage, setError] = useLastError(); const onRunQuery = useMemo(() => debounce(baseOnRunQuery, 500), [baseOnRunQuery]); @@ -85,7 +85,7 @@ interface EditorForQueryTypeProps extends Omit void; } -const EditorForQueryType: React.FC = ({ +const EditorForQueryType = ({ data, subscriptionId, query, @@ -93,7 +93,7 @@ const EditorForQueryType: React.FC = ({ variableOptionGroup, onChange, setError, -}) => { +}: EditorForQueryTypeProps) => { switch (query.queryType) { case AzureQueryType.AzureMonitor: return ( diff --git a/public/app/plugins/datasource/azuremonitor/components/QueryHeader.tsx b/public/app/plugins/datasource/azuremonitor/components/QueryHeader.tsx index 6eabde1de97..77d5b5490ab 100644 --- a/public/app/plugins/datasource/azuremonitor/components/QueryHeader.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/QueryHeader.tsx @@ -11,7 +11,7 @@ interface QueryTypeFieldProps { onQueryChange: (newQuery: AzureMonitorQuery) => void; } -export const QueryHeader: React.FC = ({ query, onQueryChange }) => { +export const QueryHeader = ({ query, onQueryChange }: QueryTypeFieldProps) => { const queryTypes: Array<{ value: AzureQueryType; label: string }> = [ { value: AzureQueryType.AzureMonitor, label: 'Metrics' }, { value: AzureQueryType.LogAnalytics, label: 'Logs' }, diff --git a/public/app/plugins/datasource/azuremonitor/components/ResourceField/ResourceField.tsx b/public/app/plugins/datasource/azuremonitor/components/ResourceField/ResourceField.tsx index 9ef86ef395f..7c23c2f15b0 100644 --- a/public/app/plugins/datasource/azuremonitor/components/ResourceField/ResourceField.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/ResourceField/ResourceField.tsx @@ -24,7 +24,9 @@ interface ResourceFieldProps extends AzureQueryEditorFieldProps { selectionNotice?: (selectedRows: ResourceRowGroup) => string; } -const ResourceField: React.FC> = ({ +type Props = ResourceFieldProps; + +const ResourceField = ({ query, datasource, onQueryChange, @@ -36,7 +38,7 @@ const ResourceField: React.FC> disableRow, renderAdvanced, selectionNotice, -}) => { +}: Props) => { const styles = useStyles2(getStyles); const [pickerIsOpen, setPickerIsOpen] = useState(false); diff --git a/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/AdvancedMulti.test.tsx b/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/AdvancedMulti.test.tsx index d6a5d9e2cce..c504d3b84c8 100644 --- a/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/AdvancedMulti.test.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/AdvancedMulti.test.tsx @@ -1,4 +1,5 @@ import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import React from 'react'; import AdvancedMulti from './AdvancedMulti'; @@ -9,7 +10,7 @@ describe('AdvancedMulti', () => { const renderAdvanced = jest.fn().mockReturnValue(
    details!
    ); render(); const advancedSection = screen.getByText('Advanced'); - advancedSection.click(); + await userEvent.click(advancedSection); expect(await screen.findByText('details!')).toBeInTheDocument(); }); diff --git a/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/EntryIcon.tsx b/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/EntryIcon.tsx index b37b3583c25..aebf861dfe0 100644 --- a/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/EntryIcon.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/EntryIcon.tsx @@ -9,7 +9,7 @@ interface EntryIconProps { isOpen: boolean; } -export const EntryIcon: React.FC = ({ isOpen, entry: { type } }) => { +export const EntryIcon = ({ isOpen, entry: { type } }: EntryIconProps) => { switch (type) { case ResourceRowType.Subscription: return ; diff --git a/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/NestedEntry.tsx b/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/NestedEntry.tsx index 150bad28665..6d843e2f18b 100644 --- a/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/NestedEntry.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/NestedEntry.tsx @@ -21,7 +21,7 @@ interface NestedEntryProps { onSelectedChange: (row: ResourceRow, selected: boolean) => void; } -export const NestedEntry: React.FC = ({ +export const NestedEntry = ({ entry, isSelected, isDisabled, @@ -31,7 +31,7 @@ export const NestedEntry: React.FC = ({ scrollIntoView, onToggleCollapse, onSelectedChange, -}) => { +}: NestedEntryProps) => { const theme = useTheme2(); const styles = useStyles2(getStyles); const hasChildren = !!entry.children; diff --git a/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/NestedRow.tsx b/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/NestedRow.tsx index 160d77d300e..e845b59606d 100644 --- a/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/NestedRow.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/NestedRow.tsx @@ -19,7 +19,7 @@ interface NestedRowProps { scrollIntoView?: boolean; } -const NestedRow: React.FC = ({ +const NestedRow = ({ row, selectedRows, level, @@ -28,7 +28,7 @@ const NestedRow: React.FC = ({ selectableEntryTypes, scrollIntoView, disableRow, -}) => { +}: NestedRowProps) => { const styles = useStyles2(getStyles); const [rowStatus, setRowStatus] = useState<'open' | 'closed' | 'loading'>('closed'); diff --git a/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/ResourcePicker.test.tsx b/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/ResourcePicker.test.tsx index ae526502b18..9358c52ea46 100644 --- a/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/ResourcePicker.test.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/ResourcePicker/ResourcePicker.test.tsx @@ -89,6 +89,10 @@ describe('AzureMonitor ResourcePicker', () => { it('should show a subscription as selected if there is one saved', async () => { render(); + await waitFor(async () => { + const subscriptionCheckboxes = await screen.findAllByLabelText('Dev Subscription'); + expect(subscriptionCheckboxes.length).toBe(2); + }); const subscriptionCheckboxes = await screen.findAllByLabelText('Dev Subscription'); expect(subscriptionCheckboxes.length).toBe(2); expect(subscriptionCheckboxes[0]).toBeChecked(); @@ -133,7 +137,7 @@ describe('AzureMonitor ResourcePicker', () => { const expandSubscriptionButton = await screen.findByLabelText('Expand Primary Subscription'); expect(expandSubscriptionButton).toBeInTheDocument(); expect(screen.queryByLabelText('A Great Resource Group')).not.toBeInTheDocument(); - expandSubscriptionButton.click(); + await userEvent.click(expandSubscriptionButton); expect(await screen.findByLabelText('A Great Resource Group')).toBeInTheDocument(); }); @@ -143,10 +147,10 @@ describe('AzureMonitor ResourcePicker', () => { const subscriptionCheckbox = await screen.findByLabelText('Primary Subscription'); expect(subscriptionCheckbox).toBeInTheDocument(); expect(subscriptionCheckbox).not.toBeChecked(); - subscriptionCheckbox.click(); + await userEvent.click(subscriptionCheckbox); const applyButton = screen.getByRole('button', { name: 'Apply' }); expect(applyButton).toBeEnabled(); - applyButton.click(); + await userEvent.click(applyButton); expect(onApply).toBeCalledTimes(1); expect(onApply).toBeCalledWith(['/subscriptions/def-123']); }); @@ -157,9 +161,9 @@ describe('AzureMonitor ResourcePicker', () => { const subscriptionCheckbox = await screen.findAllByLabelText('Primary Subscription'); expect(subscriptionCheckbox).toHaveLength(2); expect(subscriptionCheckbox.at(0)).toBeChecked(); - subscriptionCheckbox.at(0)?.click(); + await userEvent.click(subscriptionCheckbox.at(0)!); const applyButton = screen.getByRole('button', { name: 'Apply' }); - applyButton.click(); + await userEvent.click(applyButton); expect(onApply).toBeCalledTimes(1); expect(onApply).toBeCalledWith([]); }); @@ -172,9 +176,9 @@ describe('AzureMonitor ResourcePicker', () => { const subscriptionCheckbox = await screen.findAllByLabelText('A Great Resource Group'); expect(subscriptionCheckbox).toHaveLength(2); expect(subscriptionCheckbox.at(0)).toBeChecked(); - subscriptionCheckbox.at(0)?.click(); + await userEvent.click(subscriptionCheckbox.at(0)!); const applyButton = screen.getByRole('button', { name: 'Apply' }); - applyButton.click(); + await userEvent.click(applyButton); expect(onApply).toBeCalledTimes(1); expect(onApply).toBeCalledWith([]); }); @@ -186,15 +190,15 @@ describe('AzureMonitor ResourcePicker', () => { const subscriptionButton = await screen.findByRole('button', { name: 'Expand Primary Subscription' }); expect(subscriptionButton).toBeInTheDocument(); expect(screen.queryByRole('button', { name: 'Expand A Great Resource Group' })).not.toBeInTheDocument(); - subscriptionButton.click(); + await userEvent.click(subscriptionButton); const resourceGroupButton = await screen.findByRole('button', { name: 'Expand A Great Resource Group' }); - resourceGroupButton.click(); + await userEvent.click(resourceGroupButton); const checkbox = await screen.findByLabelText('web-server'); await userEvent.click(checkbox); expect(checkbox).toBeChecked(); const applyButton = screen.getByRole('button', { name: 'Apply' }); - applyButton.click(); + await userEvent.click(applyButton); expect(onApply).toBeCalledTimes(1); expect(onApply).toBeCalledWith([ @@ -231,9 +235,9 @@ describe('AzureMonitor ResourcePicker', () => { const checkbox = await screen.findAllByLabelText('web-server'); expect(checkbox).toHaveLength(2); expect(checkbox.at(0)).toBeChecked(); - checkbox.at(0)?.click(); + await userEvent.click(checkbox.at(0)!); const applyButton = screen.getByRole('button', { name: 'Apply' }); - applyButton.click(); + await userEvent.click(applyButton); expect(onApply).toBeCalledTimes(1); expect(onApply).toBeCalledWith([]); }); @@ -269,13 +273,11 @@ describe('AzureMonitor ResourcePicker', () => { it('renders a loading state while waiting for search results', async () => { const rpd = createMockResourcePickerData(); - rpd.search = jest.fn().mockImplementation(() => { - return new Promise((resolve) => { - setTimeout(() => { - return resolve(mockSearchResults()); - }, 1); // purposely slow down call by a tick so as to force a loading state - }); + let promiseResolver: (value: unknown) => void = () => {}; + const promiseToResolve = new Promise((resolve) => { + promiseResolver = resolve; }); + rpd.search = jest.fn().mockImplementation(() => promiseToResolve); render(); @@ -287,6 +289,9 @@ describe('AzureMonitor ResourcePicker', () => { const loading = await screen.findByText('Loading...'); expect(loading).toBeInTheDocument(); + // resolve the promise + promiseResolver(mockSearchResults()); + const searchResult = await screen.findByLabelText('search-result'); expect(searchResult).toBeInTheDocument(); @@ -330,7 +335,7 @@ describe('AzureMonitor ResourcePicker', () => { /> ); const subscriptionExpand = await screen.findByLabelText('Expand Primary Subscription'); - await subscriptionExpand.click(); + await userEvent.click(subscriptionExpand); const error = await screen.findByRole('alert'); expect(error).toHaveTextContent('An error occurred while requesting resources from Azure Monitor'); expect(error).toHaveTextContent( diff --git a/public/app/plugins/datasource/azuremonitor/components/SubscriptionField.tsx b/public/app/plugins/datasource/azuremonitor/components/SubscriptionField.tsx index 72e4843d35a..396bed8b410 100644 --- a/public/app/plugins/datasource/azuremonitor/components/SubscriptionField.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/SubscriptionField.tsx @@ -15,13 +15,13 @@ interface SubscriptionFieldProps extends AzureQueryEditorFieldProps { multiSelect?: boolean; } -const SubscriptionField: React.FC = ({ +const SubscriptionField = ({ query, subscriptions, variableOptionGroup, onQueryChange, multiSelect = false, -}) => { +}: SubscriptionFieldProps) => { const handleChange = useCallback( (change: SelectableValue) => { if (!change.value) { diff --git a/public/app/plugins/datasource/azuremonitor/components/VariableEditor/VariableEditor.test.tsx b/public/app/plugins/datasource/azuremonitor/components/VariableEditor/VariableEditor.test.tsx index a0f8bbcbfe3..7947503f9b8 100644 --- a/public/app/plugins/datasource/azuremonitor/components/VariableEditor/VariableEditor.test.tsx +++ b/public/app/plugins/datasource/azuremonitor/components/VariableEditor/VariableEditor.test.tsx @@ -47,7 +47,7 @@ describe('VariableEditor:', () => { render(); await waitFor(() => screen.getByLabelText('select query type')); expect(screen.getByLabelText('select query type')).toBeInTheDocument(); - screen.getByLabelText('select query type').click(); + await userEvent.click(screen.getByLabelText('select query type')); await select(screen.getByLabelText('select query type'), 'Grafana Query Function', { container: document.body, }); @@ -185,7 +185,7 @@ describe('VariableEditor:', () => { rerender: (ui: React.ReactElement) => void ) => { openMenu(screen.getByLabelText(label)); - screen.getByText(text).click(); + await userEvent.click(screen.getByText(text)); // Simulate onChange behavior const newQuery = onChange.mock.calls.at(-1)[0]; rerender(); @@ -226,7 +226,7 @@ describe('VariableEditor:', () => { // Select a subscription openMenu(screen.getByLabelText('select subscription')); await waitFor(() => expect(screen.getByText('Primary Subscription')).toBeInTheDocument()); - screen.getByText('Template Variables').click(); + await userEvent.click(screen.getByText('Template Variables')); // Simulate onChange behavior const lastQuery = onChange.mock.calls.at(-1)[0]; rerender(); diff --git a/public/app/plugins/datasource/azuremonitor/grafanaTemplateVariableFns.ts b/public/app/plugins/datasource/azuremonitor/grafanaTemplateVariableFns.ts index 1b7578ee774..b4859079099 100644 --- a/public/app/plugins/datasource/azuremonitor/grafanaTemplateVariableFns.ts +++ b/public/app/plugins/datasource/azuremonitor/grafanaTemplateVariableFns.ts @@ -1,5 +1,3 @@ -import { config } from '@grafana/runtime'; - import { isGUIDish } from './components/ResourcePicker/utils'; import DataSource from './datasource'; import { AzureMonitorQuery, AzureQueryType } from './types'; @@ -321,10 +319,7 @@ export const migrateQuery = async ( ): Promise => { let query = await migrateStringQueriesToObjectQueries(rawQuery, options); - if ( - !config.featureToggles.azLegacyTemplateVariables && - query.queryType === AzureQueryType.GrafanaTemplateVariableFn - ) { + if (query.queryType === AzureQueryType.GrafanaTemplateVariableFn) { query = migrateGrafanaTemplateVariableFn(query); } diff --git a/public/app/plugins/datasource/cloud-monitoring/components/Aggregation.tsx b/public/app/plugins/datasource/cloud-monitoring/components/Aggregation.tsx index c5c947801c1..00eef618444 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/Aggregation.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/Aggregation.tsx @@ -1,4 +1,4 @@ -import React, { FC, useMemo } from 'react'; +import React, { useMemo } from 'react'; import { SelectableValue } from '@grafana/data'; import { EditorField } from '@grafana/experimental'; @@ -16,7 +16,7 @@ export interface Props { templateVariableOptions: Array>; } -export const Aggregation: FC = (props) => { +export const Aggregation = (props: Props) => { const aggOptions = useAggregationOptionsByMetric(props); const selected = useSelectedFromOptions(aggOptions, props); diff --git a/public/app/plugins/datasource/cloud-monitoring/components/AliasBy.tsx b/public/app/plugins/datasource/cloud-monitoring/components/AliasBy.tsx index a12d50abf3b..f369f8bdfb3 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/AliasBy.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/AliasBy.tsx @@ -1,5 +1,5 @@ import { debounce } from 'lodash'; -import React, { FunctionComponent, useState } from 'react'; +import React, { useState } from 'react'; import { EditorField } from '@grafana/experimental'; import { Input } from '@grafana/ui'; @@ -10,7 +10,7 @@ export interface Props { value?: string; } -export const AliasBy: FunctionComponent = ({ refId, value = '', onChange }) => { +export const AliasBy = ({ refId, value = '', onChange }: Props) => { const [alias, setAlias] = useState(value ?? ''); const propagateOnChange = debounce(onChange, 1000); diff --git a/public/app/plugins/datasource/cloud-monitoring/components/Alignment.tsx b/public/app/plugins/datasource/cloud-monitoring/components/Alignment.tsx index 4c19378d2dc..5556f396468 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/Alignment.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/Alignment.tsx @@ -1,4 +1,4 @@ -import React, { FC, useMemo } from 'react'; +import React, { useMemo } from 'react'; import { SelectableValue } from '@grafana/data'; import { EditorField, EditorFieldGroup } from '@grafana/experimental'; @@ -22,7 +22,7 @@ export interface Props { preprocessor?: PreprocessorType; } -export const Alignment: FC = ({ +export const Alignment = ({ refId, templateVariableOptions, onChange, @@ -31,7 +31,7 @@ export const Alignment: FC = ({ datasource, metricDescriptor, preprocessor, -}) => { +}: Props) => { const alignmentLabel = useMemo(() => alignmentPeriodLabel(customMetaData, datasource), [customMetaData, datasource]); return ( diff --git a/public/app/plugins/datasource/cloud-monitoring/components/AlignmentFunction.tsx b/public/app/plugins/datasource/cloud-monitoring/components/AlignmentFunction.tsx index 9478e4bc910..d073a5a5e79 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/AlignmentFunction.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/AlignmentFunction.tsx @@ -1,4 +1,4 @@ -import React, { FC, useMemo } from 'react'; +import React, { useMemo } from 'react'; import { SelectableValue } from '@grafana/data'; import { Select } from '@grafana/ui'; @@ -15,14 +15,14 @@ export interface Props { preprocessor?: PreprocessorType; } -export const AlignmentFunction: FC = ({ +export const AlignmentFunction = ({ inputId, query, templateVariableOptions, onChange, metricDescriptor, preprocessor, -}) => { +}: Props) => { const { perSeriesAligner: psa } = query; let { valueType, metricKind } = metricDescriptor || {}; diff --git a/public/app/plugins/datasource/cloud-monitoring/components/ConfigEditor/ConfigEditor.tsx b/public/app/plugins/datasource/cloud-monitoring/components/ConfigEditor/ConfigEditor.tsx index 8378bfb0e19..26d7d6a771b 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/ConfigEditor/ConfigEditor.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/ConfigEditor/ConfigEditor.tsx @@ -2,6 +2,8 @@ import React, { PureComponent } from 'react'; import { DataSourcePluginOptionsEditorProps } from '@grafana/data'; import { ConnectionConfig } from '@grafana/google-sdk'; +import { SecureSocksProxySettings } from '@grafana/ui'; +import { config } from 'app/core/config'; import { CloudMonitoringOptions, CloudMonitoringSecureJsonData } from '../../types'; @@ -9,9 +11,13 @@ export type Props = DataSourcePluginOptionsEditorProps { render() { + const { options, onOptionsChange } = this.props; return ( <> + {config.featureToggles.secureSocksDatasourceProxy && ( + + )} ); } diff --git a/public/app/plugins/datasource/cloud-monitoring/components/Fields.tsx b/public/app/plugins/datasource/cloud-monitoring/components/Fields.tsx index 0f772486752..b04d70dce2e 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/Fields.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/Fields.tsx @@ -1,4 +1,4 @@ -import React, { FC } from 'react'; +import React from 'react'; import { SelectableValue } from '@grafana/data'; import { InlineField, Select } from '@grafana/ui'; @@ -11,13 +11,13 @@ interface VariableQueryFieldProps { allowCustomValue?: boolean; } -export const VariableQueryField: FC = ({ +export const VariableQueryField = ({ label, onChange, value, options, allowCustomValue = false, -}) => { +}: VariableQueryFieldProps) => { return ( - + - + - + } label="Session timezone" - labelWidth={mediumWidth} + labelWidth={WIDTH_MEDIUM} > - + @@ -122,7 +138,12 @@ export const ConfigurationEditor = (props: DataSourcePluginOptionsEditorProps - + + {config.featureToggles.secureSocksDatasourceProxy && ( + + )} {jsonData.tlsAuth || jsonData.tlsAuthWithCACert ? (
    { updateDatasourcePluginJsonDataOption(props, property, value); @@ -158,7 +182,7 @@ export const ConfigurationEditor = (props: DataSourcePluginOptionsEditorProps1m if your data is written every minute. } - labelWidth={mediumWidth} + labelWidth={WIDTH_MEDIUM} label="Min time interval" > void; suggestTagKeys: (query: OpenTsdbQuery) => Promise; filterTypes: string[]; - suggestTagValues: () => Promise; + suggestTagValues: (value: string) => Promise; } export function FilterSection({ @@ -28,9 +38,6 @@ export function FilterSection({ const [tagKeys, updTagKeys] = useState>>(); const [keyIsLoading, updKeyIsLoading] = useState(); - const [tagValues, updTagValues] = useState>>(); - const [valueIsLoading, updValueIsLoading] = useState(); - const [addFilterMode, updAddFilterMode] = useState(false); const [curFilterType, updCurFilterType] = useState('iliteral_or'); @@ -108,6 +115,8 @@ export function FilterSection({ return searchWords.reduce((acc, cur) => acc && label.toLowerCase().includes(cur.toLowerCase()), true); }, []); + const tagValueSearch = debounce((query: string) => suggestTagValues(query), 350); + return (
    @@ -185,23 +194,14 @@ export function FilterSection({
    - { - if (!tagValues) { - updValueIsLoading(true); - const tVs = await suggestTagValues(); - updTagValues(tVs); - updValueIsLoading(false); - } - }} - isLoading={valueIsLoading} - options={tagValues} + loadOptions={tagValueSearch} + defaultOptions={[]} onChange={({ value }) => { if (value) { updCurTagValue(value); diff --git a/public/app/plugins/datasource/parca/ConfigEditor.tsx b/public/app/plugins/datasource/parca/ConfigEditor.tsx index 72cf481077e..7937c46fcc4 100644 --- a/public/app/plugins/datasource/parca/ConfigEditor.tsx +++ b/public/app/plugins/datasource/parca/ConfigEditor.tsx @@ -1,7 +1,8 @@ import React from 'react'; import { DataSourcePluginOptionsEditorProps } from '@grafana/data'; -import { DataSourceHttpSettings } from '@grafana/ui'; +import { DataSourceHttpSettings, SecureSocksProxySettings } from '@grafana/ui'; +import { config } from 'app/core/config'; import { ParcaDataSourceOptions } from './types'; @@ -18,6 +19,9 @@ export const ConfigEditor = (props: Props) => { showAccessOptions={false} onChange={onOptionsChange} /> + {config.featureToggles.secureSocksDatasourceProxy && ( + + )} ); }; diff --git a/public/app/plugins/datasource/parca/QueryEditor/EditorRow.tsx b/public/app/plugins/datasource/parca/QueryEditor/EditorRow.tsx index 5886945fc3f..9a5730602e0 100644 --- a/public/app/plugins/datasource/parca/QueryEditor/EditorRow.tsx +++ b/public/app/plugins/datasource/parca/QueryEditor/EditorRow.tsx @@ -11,7 +11,7 @@ interface EditorRowProps { stackProps?: Partial>; } -export const EditorRow: React.FC = ({ children, stackProps }) => { +export const EditorRow = ({ children, stackProps }: EditorRowProps) => { const styles = useStyles2(getStyles); return ( diff --git a/public/app/plugins/datasource/parca/QueryEditor/EditorRows.tsx b/public/app/plugins/datasource/parca/QueryEditor/EditorRows.tsx index 278a566702f..ce7e38c112a 100644 --- a/public/app/plugins/datasource/parca/QueryEditor/EditorRows.tsx +++ b/public/app/plugins/datasource/parca/QueryEditor/EditorRows.tsx @@ -6,7 +6,7 @@ interface EditorRowsProps { children: React.ReactNode; } -export const EditorRows: React.FC = ({ children }) => { +export const EditorRows = ({ children }: EditorRowsProps) => { return ( {children} diff --git a/public/app/plugins/datasource/phlare/ConfigEditor.tsx b/public/app/plugins/datasource/phlare/ConfigEditor.tsx index 7e4843a2a83..4d8c1583b0f 100644 --- a/public/app/plugins/datasource/phlare/ConfigEditor.tsx +++ b/public/app/plugins/datasource/phlare/ConfigEditor.tsx @@ -1,7 +1,14 @@ import React from 'react'; import { DataSourcePluginOptionsEditorProps } from '@grafana/data'; -import { DataSourceHttpSettings, EventsWithValidation, LegacyForms, regexValidation } from '@grafana/ui'; +import { + DataSourceHttpSettings, + EventsWithValidation, + LegacyForms, + regexValidation, + SecureSocksProxySettings, +} from '@grafana/ui'; +import { config } from 'app/core/config'; import { PhlareDataSourceOptions } from './types'; @@ -19,6 +26,9 @@ export const ConfigEditor = (props: Props) => { onChange={onOptionsChange} /> + {config.featureToggles.secureSocksDatasourceProxy && ( + + )}

    Querying

    diff --git a/public/app/plugins/datasource/phlare/QueryEditor/EditorField.tsx b/public/app/plugins/datasource/phlare/QueryEditor/EditorField.tsx index a6ef8806385..330c5f84b07 100644 --- a/public/app/plugins/datasource/phlare/QueryEditor/EditorField.tsx +++ b/public/app/plugins/datasource/phlare/QueryEditor/EditorField.tsx @@ -12,7 +12,7 @@ interface EditorFieldProps extends ComponentProps { tooltip?: PopoverContent; } -export const EditorField: React.FC = (props) => { +export const EditorField = (props: EditorFieldProps) => { const { label, optional, tooltip, children, width, ...fieldProps } = props; const theme = useTheme2(); diff --git a/public/app/plugins/datasource/phlare/QueryEditor/EditorRow.tsx b/public/app/plugins/datasource/phlare/QueryEditor/EditorRow.tsx index 5886945fc3f..9a5730602e0 100644 --- a/public/app/plugins/datasource/phlare/QueryEditor/EditorRow.tsx +++ b/public/app/plugins/datasource/phlare/QueryEditor/EditorRow.tsx @@ -11,7 +11,7 @@ interface EditorRowProps { stackProps?: Partial>; } -export const EditorRow: React.FC = ({ children, stackProps }) => { +export const EditorRow = ({ children, stackProps }: EditorRowProps) => { const styles = useStyles2(getStyles); return ( diff --git a/public/app/plugins/datasource/phlare/QueryEditor/EditorRows.tsx b/public/app/plugins/datasource/phlare/QueryEditor/EditorRows.tsx index 278a566702f..ce7e38c112a 100644 --- a/public/app/plugins/datasource/phlare/QueryEditor/EditorRows.tsx +++ b/public/app/plugins/datasource/phlare/QueryEditor/EditorRows.tsx @@ -6,7 +6,7 @@ interface EditorRowsProps { children: React.ReactNode; } -export const EditorRows: React.FC = ({ children }) => { +export const EditorRows = ({ children }: EditorRowsProps) => { return ( {children} diff --git a/public/app/plugins/datasource/phlare/datasource.test.ts b/public/app/plugins/datasource/phlare/datasource.test.ts index 10f6d6d1469..f11c4ebc9bb 100644 --- a/public/app/plugins/datasource/phlare/datasource.test.ts +++ b/public/app/plugins/datasource/phlare/datasource.test.ts @@ -1,5 +1,7 @@ import { AbstractLabelOperator, DataSourceInstanceSettings, PluginMetaInfo, PluginType } from '@grafana/data'; +import { TemplateSrv } from 'app/features/templating/template_srv'; +import { defaultPhlareQueryType } from './dataquery.gen'; import { PhlareDataSource } from './datasource'; describe('Phlare data source', () => { @@ -45,8 +47,48 @@ describe('Phlare data source', () => { ]); }); }); + + describe('applyTemplateVariables', () => { + const interpolationVar = '$interpolationVar'; + const interpolationText = 'interpolationText'; + const noInterpolation = 'noInterpolation'; + + it('should not update labelSelector if there are no template variables', () => { + const templateSrv = new TemplateSrv(); + templateSrv.replace = jest.fn((query: string): string => { + return query.replace(/\$interpolationVar/g, interpolationText); + }); + ds = new PhlareDataSource(defaultSettings, templateSrv); + const query = ds.applyTemplateVariables(defaultQuery(`{${noInterpolation}}`), {}); + expect(templateSrv.replace).toBeCalledTimes(1); + expect(query.labelSelector).toBe(`{${noInterpolation}}`); + }); + + it('should update labelSelector if there are template variables', () => { + const templateSrv = new TemplateSrv(); + templateSrv.replace = jest.fn((query: string): string => { + return query.replace(/\$interpolationVar/g, interpolationText); + }); + ds = new PhlareDataSource(defaultSettings, templateSrv); + const query = ds.applyTemplateVariables(defaultQuery(`{${interpolationVar}="${interpolationVar}"}`), { + interpolationVar: { text: interpolationText, value: interpolationText }, + }); + expect(templateSrv.replace).toBeCalledTimes(1); + expect(query.labelSelector).toBe(`{${interpolationText}="${interpolationText}"}`); + }); + }); }); +const defaultQuery = (query: string) => { + return { + refId: 'x', + groupBy: [], + labelSelector: query, + profileTypeId: '', + queryType: defaultPhlareQueryType, + }; +}; + const defaultSettings: DataSourceInstanceSettings = { id: 0, uid: 'phlare', diff --git a/public/app/plugins/datasource/phlare/datasource.ts b/public/app/plugins/datasource/phlare/datasource.ts index 95da2c417de..cb5d7c93c7f 100644 --- a/public/app/plugins/datasource/phlare/datasource.ts +++ b/public/app/plugins/datasource/phlare/datasource.ts @@ -1,8 +1,14 @@ import Prism, { Grammar } from 'prismjs'; import { Observable, of } from 'rxjs'; -import { AbstractQuery, DataQueryRequest, DataQueryResponse, DataSourceInstanceSettings } from '@grafana/data'; -import { DataSourceWithBackend } from '@grafana/runtime'; +import { + AbstractQuery, + DataQueryRequest, + DataQueryResponse, + DataSourceInstanceSettings, + ScopedVars, +} from '@grafana/data'; +import { DataSourceWithBackend, getTemplateSrv, TemplateSrv } from '@grafana/runtime'; import { extractLabelMatchers, toPromLikeExpr } from '../prometheus/language_utils'; @@ -10,7 +16,10 @@ import { normalizeQuery } from './QueryEditor/QueryEditor'; import { PhlareDataSourceOptions, Query, ProfileTypeMessage, SeriesMessage } from './types'; export class PhlareDataSource extends DataSourceWithBackend { - constructor(instanceSettings: DataSourceInstanceSettings) { + constructor( + instanceSettings: DataSourceInstanceSettings, + private readonly templateSrv: TemplateSrv = getTemplateSrv() + ) { super(instanceSettings); } @@ -49,6 +58,13 @@ export class PhlareDataSource extends DataSourceWithBackend { return abstractQueries.map((abstractQuery) => this.importFromAbstractQuery(abstractQuery)); } diff --git a/public/app/plugins/datasource/postgres/configuration/ConfigurationEditor.tsx b/public/app/plugins/datasource/postgres/configuration/ConfigurationEditor.tsx index 20d66677aac..57a7e9054b7 100644 --- a/public/app/plugins/datasource/postgres/configuration/ConfigurationEditor.tsx +++ b/public/app/plugins/datasource/postgres/configuration/ConfigurationEditor.tsx @@ -19,6 +19,7 @@ import { SecretInput, Link, } from '@grafana/ui'; +import { config } from 'app/core/config'; import { ConnectionLimits } from 'app/features/plugins/sql/components/configuration/ConnectionLimits'; import { TLSSecretsConfig } from 'app/features/plugins/sql/components/configuration/TLSSecretsConfig'; import { useMigrateDatabaseField } from 'app/features/plugins/sql/components/configuration/useMigrateDatabaseField'; @@ -166,6 +167,21 @@ export const PostgresConfigEditor = (props: DataSourcePluginOptionsEditorProps

    + {config.featureToggles.secureSocksDatasourceProxy && ( +

    + + + onOptionsChange({ + ...options, + jsonData: { ...options.jsonData, enableSecureSocksProxy: event!.currentTarget.checked }, + }) + } + /> + +
    + )} {jsonData.sslmode !== PostgresTLSModes.disable ? (
    {jsonData.tlsConfigurationMethod === PostgresTLSMethods.fileContent ? ( diff --git a/public/app/plugins/datasource/postgres/types.ts b/public/app/plugins/datasource/postgres/types.ts index 6bb435e4cbb..b1993310eec 100644 --- a/public/app/plugins/datasource/postgres/types.ts +++ b/public/app/plugins/datasource/postgres/types.ts @@ -19,6 +19,7 @@ export interface PostgresOptions extends SQLOptions { sslKeyFile?: string; postgresVersion?: number; timescaledb?: boolean; + enableSecureSocksProxy?: boolean; } export interface SecureJsonData { diff --git a/public/app/plugins/datasource/prometheus/components/PromExploreExtraField.tsx b/public/app/plugins/datasource/prometheus/components/PromExploreExtraField.tsx index 3e6f2c17677..f4bc23d0e4d 100644 --- a/public/app/plugins/datasource/prometheus/components/PromExploreExtraField.tsx +++ b/public/app/plugins/datasource/prometheus/components/PromExploreExtraField.tsx @@ -17,93 +17,91 @@ export interface PromExploreExtraFieldProps { datasource: PrometheusDatasource; } -export const PromExploreExtraField: React.FC = memo( - ({ query, datasource, onChange, onRunQuery }) => { - const rangeOptions = getQueryTypeOptions(true); - const prevQuery = usePrevious(query); +export const PromExploreExtraField = memo(({ query, datasource, onChange, onRunQuery }: PromExploreExtraFieldProps) => { + const rangeOptions = getQueryTypeOptions(true); + const prevQuery = usePrevious(query); - const onExemplarChange = useCallback( - (exemplar: boolean) => { - if (!isEqual(query, prevQuery) || exemplar !== query.exemplar) { - onChange({ ...query, exemplar }); - } - }, - [prevQuery, query, onChange] - ); - - function onChangeQueryStep(interval: string) { - onChange({ ...query, interval }); - } - - function onStepChange(e: React.SyntheticEvent) { - if (e.currentTarget.value !== query.interval) { - onChangeQueryStep(e.currentTarget.value); + const onExemplarChange = useCallback( + (exemplar: boolean) => { + if (!isEqual(query, prevQuery) || exemplar !== query.exemplar) { + onChange({ ...query, exemplar }); } - } + }, + [prevQuery, query, onChange] + ); - function onReturnKeyDown(e: React.KeyboardEvent) { - if (e.key === 'Enter' && e.shiftKey) { - onRunQuery(); - } - } - - const onQueryTypeChange = getQueryTypeChangeHandler(query, onChange); - - return ( -
    - {/*Query type field*/} -
    - Query type - - -
    - {/*Step field*/} -
    - - Min step - - -
    - - -
    - ); + function onChangeQueryStep(interval: string) { + onChange({ ...query, interval }); } -); + + function onStepChange(e: React.SyntheticEvent) { + if (e.currentTarget.value !== query.interval) { + onChangeQueryStep(e.currentTarget.value); + } + } + + function onReturnKeyDown(e: React.KeyboardEvent) { + if (e.key === 'Enter' && e.shiftKey) { + onRunQuery(); + } + } + + const onQueryTypeChange = getQueryTypeChangeHandler(query, onChange); + + return ( +
    + {/*Query type field*/} +
    + Query type + + +
    + {/*Step field*/} +
    + + Min step + + +
    + + +
    + ); +}); PromExploreExtraField.displayName = 'PromExploreExtraField'; diff --git a/public/app/plugins/datasource/prometheus/components/PromLink.tsx b/public/app/plugins/datasource/prometheus/components/PromLink.tsx index 8264eb83866..52f5405da4d 100644 --- a/public/app/plugins/datasource/prometheus/components/PromLink.tsx +++ b/public/app/plugins/datasource/prometheus/components/PromLink.tsx @@ -1,5 +1,5 @@ import { map } from 'lodash'; -import React, { FC, useEffect, useState, memo } from 'react'; +import React, { useEffect, useState, memo } from 'react'; import { DataQueryRequest, PanelData, ScopedVars, textUtil, rangeUtil } from '@grafana/data'; @@ -12,7 +12,7 @@ interface Props { panelData?: PanelData; } -const PromLink: FC = ({ panelData, query, datasource }) => { +const PromLink = ({ panelData, query, datasource }: Props) => { const [href, setHref] = useState(''); useEffect(() => { diff --git a/public/app/plugins/datasource/prometheus/components/PromQueryEditorByApp.test.tsx b/public/app/plugins/datasource/prometheus/components/PromQueryEditorByApp.test.tsx index cd8a373b563..93cc8173792 100644 --- a/public/app/plugins/datasource/prometheus/components/PromQueryEditorByApp.test.tsx +++ b/public/app/plugins/datasource/prometheus/components/PromQueryEditorByApp.test.tsx @@ -1,4 +1,4 @@ -import { render, RenderResult } from '@testing-library/react'; +import { render, screen } from '@testing-library/react'; import { noop } from 'lodash'; import React from 'react'; @@ -22,7 +22,7 @@ jest.mock('./monaco-query-field/MonacoQueryFieldLazy', () => { }; }); -function setup(app: CoreApp): RenderResult & { onRunQuery: jest.Mock } { +function setup(app: CoreApp): { onRunQuery: jest.Mock } { const dataSource = { createQuery: jest.fn((q) => q), getInitHints: () => [], @@ -37,7 +37,7 @@ function setup(app: CoreApp): RenderResult & { onRunQuery: jest.Mock } { } as unknown as PrometheusDatasource; const onRunQuery = jest.fn(); - const renderOutput = render( + render( { - it('should render simplified query editor for cloud alerting', () => { - const { getByTestId } = setup(CoreApp.CloudAlerting); + it('should render simplified query editor for cloud alerting', async () => { + setup(CoreApp.CloudAlerting); - expect(getByTestId(alertingTestIds.editor)).toBeInTheDocument(); + expect(await screen.findByTestId(alertingTestIds.editor)).toBeInTheDocument(); }); it('should render editor selector for unkown apps', () => { - const { getByTestId, queryByTestId } = setup(CoreApp.Unknown); + setup(CoreApp.Unknown); - expect(getByTestId('QueryEditorModeToggle')).toBeInTheDocument(); - expect(queryByTestId(alertingTestIds.editor)).toBeNull(); + expect(screen.getByTestId('QueryEditorModeToggle')).toBeInTheDocument(); + expect(screen.queryByTestId(alertingTestIds.editor)).toBeNull(); }); it('should render editor selector for explore', () => { - const { getByTestId, queryByTestId } = setup(CoreApp.Explore); + setup(CoreApp.Explore); - expect(getByTestId('QueryEditorModeToggle')).toBeInTheDocument(); - expect(queryByTestId(alertingTestIds.editor)).toBeNull(); + expect(screen.getByTestId('QueryEditorModeToggle')).toBeInTheDocument(); + expect(screen.queryByTestId(alertingTestIds.editor)).toBeNull(); }); it('should render editor selector for dashboard', () => { - const { getByTestId, queryByTestId } = setup(CoreApp.Dashboard); + setup(CoreApp.Dashboard); - expect(getByTestId('QueryEditorModeToggle')).toBeInTheDocument(); - expect(queryByTestId(alertingTestIds.editor)).toBeNull(); + expect(screen.getByTestId('QueryEditorModeToggle')).toBeInTheDocument(); + expect(screen.queryByTestId(alertingTestIds.editor)).toBeNull(); }); }); diff --git a/public/app/plugins/datasource/prometheus/components/PromQueryField.test.tsx b/public/app/plugins/datasource/prometheus/components/PromQueryField.test.tsx index 6dc1d23111e..1f10acda38e 100644 --- a/public/app/plugins/datasource/prometheus/components/PromQueryField.test.tsx +++ b/public/app/plugins/datasource/prometheus/components/PromQueryField.test.tsx @@ -48,31 +48,40 @@ describe('PromQueryField', () => { window.getSelection = () => {}; }); - it('renders metrics chooser regularly if lookups are not disabled in the datasource settings', () => { + it('renders metrics chooser regularly if lookups are not disabled in the datasource settings', async () => { const queryField = render(); + // wait for component to render + await screen.findByRole('button'); + expect(queryField.getAllByRole('button')).toHaveLength(1); }); - it('renders a disabled metrics chooser if lookups are disabled in datasource settings', () => { + it('renders a disabled metrics chooser if lookups are disabled in datasource settings', async () => { const props = defaultProps; props.datasource.lookupsDisabled = true; const queryField = render(); + // wait for component to render + await screen.findByRole('button'); + const bcButton = queryField.getByRole('button'); expect(bcButton).toBeDisabled(); }); - it('renders an initial hint if no data and initial hint provided', () => { + it('renders an initial hint if no data and initial hint provided', async () => { const props = defaultProps; props.datasource.lookupsDisabled = true; props.datasource.getInitHints = () => [{ label: 'Initial hint', type: 'INFO' }]; render(); + // wait for component to render + await screen.findByRole('button'); + expect(screen.getByText('Initial hint')).toBeInTheDocument(); }); - it('renders query hint if data, query hint and initial hint provided', () => { + it('renders query hint if data, query hint and initial hint provided', async () => { const props = defaultProps; props.datasource.lookupsDisabled = true; props.datasource.getInitHints = () => [{ label: 'Initial hint', type: 'INFO' }]; @@ -89,6 +98,9 @@ describe('PromQueryField', () => { /> ); + // wait for component to render + await screen.findByRole('button'); + expect(screen.getByText('Query hint')).toBeInTheDocument(); expect(screen.queryByText('Initial hint')).not.toBeInTheDocument(); }); @@ -113,6 +125,9 @@ describe('PromQueryField', () => { /> ); + // wait for component to render + await screen.findByRole('button'); + const changedMetrics = ['baz', 'moo']; queryField.rerender( { // If we check the label browser right away it should be in loading state let labelBrowser = screen.getByRole('button'); expect(labelBrowser.textContent).toContain('Loading'); + + // wait for component to rerender + labelBrowser = await screen.findByRole('button'); + expect(labelBrowser.textContent).toContain('Metrics browser'); }); it('should not run query onBlur in explore', async () => { const onRunQuery = jest.fn(); const { container } = render(); + // wait for component to rerender + await screen.findByRole('button'); + const input = getByTestId(container, 'dummy-code-input'); expect(input).toBeInTheDocument(); await userEvent.type(input, 'metric'); - input.blur(); + + // blur element + await userEvent.click(document.body); expect(onRunQuery).not.toHaveBeenCalled(); }); @@ -144,10 +168,15 @@ describe('PromQueryField', () => { const onRunQuery = jest.fn(); const { container } = render(); + // wait for component to rerender + await screen.findByRole('button'); + const input = getByTestId(container, 'dummy-code-input'); expect(input).toBeInTheDocument(); await userEvent.type(input, 'metric'); - input.blur(); + + // blur element + await userEvent.click(document.body); expect(onRunQuery).toHaveBeenCalled(); }); }); diff --git a/public/app/plugins/datasource/prometheus/components/VariableQueryEditor.tsx b/public/app/plugins/datasource/prometheus/components/VariableQueryEditor.tsx index ace4bd84eaf..c2b064d5e76 100644 --- a/public/app/plugins/datasource/prometheus/components/VariableQueryEditor.tsx +++ b/public/app/plugins/datasource/prometheus/components/VariableQueryEditor.tsx @@ -1,4 +1,4 @@ -import React, { FC, FormEvent, useEffect, useState } from 'react'; +import React, { FormEvent, useEffect, useState } from 'react'; import { QueryEditorProps, SelectableValue } from '@grafana/data'; import { InlineField, InlineFieldRow, Input, Select, TextArea } from '@grafana/ui'; @@ -28,7 +28,7 @@ export type Props = QueryEditorProps = ({ onChange, query, datasource }) => { +export const PromVariableQueryEditor = ({ onChange, query, datasource }: Props) => { // to select the query type, i.e. label_names, label_values, etc. const [qryType, setQryType] = useState(undefined); diff --git a/public/app/plugins/datasource/prometheus/configuration/AzureAuthSettings.tsx b/public/app/plugins/datasource/prometheus/configuration/AzureAuthSettings.tsx index 47c7ae7c5c8..b7746369dab 100644 --- a/public/app/plugins/datasource/prometheus/configuration/AzureAuthSettings.tsx +++ b/public/app/plugins/datasource/prometheus/configuration/AzureAuthSettings.tsx @@ -1,4 +1,4 @@ -import React, { FunctionComponent, FormEvent, useMemo, useState } from 'react'; +import React, { FormEvent, useMemo, useState } from 'react'; import { config } from '@grafana/runtime'; import { InlineField, InlineFieldRow, InlineSwitch, Input } from '@grafana/ui'; @@ -8,7 +8,7 @@ import { KnownAzureClouds, AzureCredentials } from './AzureCredentials'; import { getCredentials, updateCredentials } from './AzureCredentialsConfig'; import { AzureCredentialsForm } from './AzureCredentialsForm'; -export const AzureAuthSettings: FunctionComponent = (props: HttpSettingsBaseProps) => { +export const AzureAuthSettings = (props: HttpSettingsBaseProps) => { const { dataSourceConfig, onChange } = props; const [overrideAudienceAllowed] = useState( diff --git a/public/app/plugins/datasource/prometheus/configuration/AzureCredentialsForm.tsx b/public/app/plugins/datasource/prometheus/configuration/AzureCredentialsForm.tsx index 5bf492f90ca..daa1fb3cf31 100644 --- a/public/app/plugins/datasource/prometheus/configuration/AzureCredentialsForm.tsx +++ b/public/app/plugins/datasource/prometheus/configuration/AzureCredentialsForm.tsx @@ -1,4 +1,4 @@ -import React, { ChangeEvent, FunctionComponent, useEffect, useReducer, useState } from 'react'; +import React, { ChangeEvent, useEffect, useReducer, useState } from 'react'; import { SelectableValue } from '@grafana/data'; import { InlineFormLabel, Button } from '@grafana/ui/src/components'; @@ -27,7 +27,7 @@ const authTypeOptions: Array> = [ }, ]; -export const AzureCredentialsForm: FunctionComponent = (props: Props) => { +export const AzureCredentialsForm = (props: Props) => { const { credentials, azureCloudOptions, onCredentialsChange, getSubscriptions, disabled } = props; const hasRequiredFields = isCredentialsComplete(credentials); diff --git a/public/app/plugins/datasource/prometheus/dataquery.cue b/public/app/plugins/datasource/prometheus/dataquery.cue new file mode 100644 index 00000000000..46858e6c92c --- /dev/null +++ b/public/app/plugins/datasource/prometheus/dataquery.cue @@ -0,0 +1,55 @@ +// Copyright 2023 Grafana Labs +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package grafanaplugin + +import ( + common "github.com/grafana/grafana/packages/grafana-schema/src/common" + "github.com/grafana/grafana/pkg/plugins/pfs" +) + +// This file (with its sibling .cue files) implements pfs.GrafanaPlugin +pfs.GrafanaPlugin + +composableKinds: DataQuery: { + maturity: "experimental" + + lineage: { + seqs: [ + { + schemas: [ + { + common.DataQuery + + // The actual expression/query that will be evaluated by Prometheus + expr: string + // Returns only the latest value that Prometheus has scraped for the requested time series + instant?: bool + // Returns a Range vector, comprised of a set of time series containing a range of data points over time for each time series + range?: bool + // Execute an additional query to identify interesting raw samples relevant for the given expr + exemplar?: bool + // Specifies which editor is being used to prepare the query. It can be "code" or "builder" + editorMode?: #QueryEditorMode + // Query format to determine how to display data points in panel. It can be "time_series", "table", "heatmap" + format?: #PromQueryFormat + + #QueryEditorMode: "code" | "builder" @cuetsy(kind="enum") + #PromQueryFormat: "time_series" | "table" | "heatmap" @cuetsy(kind="type") + }, + ] + }, + ] + } +} diff --git a/public/app/plugins/datasource/prometheus/dataquery.gen.ts b/public/app/plugins/datasource/prometheus/dataquery.gen.ts new file mode 100644 index 00000000000..6ab137644ae --- /dev/null +++ b/public/app/plugins/datasource/prometheus/dataquery.gen.ts @@ -0,0 +1,47 @@ +// Code generated - EDITING IS FUTILE. DO NOT EDIT. +// +// Generated by: +// public/app/plugins/gen.go +// Using jennies: +// TSTypesJenny +// PluginTSTypesJenny +// +// Run 'make gen-cue' from repository root to regenerate. + +import * as common from '@grafana/schema'; + +export const DataQueryModelVersion = Object.freeze([0, 0]); + +export enum QueryEditorMode { + Builder = 'builder', + Code = 'code', +} + +export type PromQueryFormat = ('time_series' | 'table' | 'heatmap'); + +export interface Prometheus extends common.DataQuery { + /** + * Specifies which editor is being used to prepare the query. It can be "code" or "builder" + */ + editorMode?: QueryEditorMode; + /** + * Execute an additional query to identify interesting raw samples relevant for the given expr + */ + exemplar?: boolean; + /** + * The actual expression/query that will be evaluated by Prometheus + */ + expr: string; + /** + * Query format to determine how to display data points in panel. It can be "time_series", "table", "heatmap" + */ + format?: PromQueryFormat; + /** + * Returns only the latest value that Prometheus has scraped for the requested time series + */ + instant?: boolean; + /** + * Returns a Range vector, comprised of a set of time series containing a range of data points over time for each time series + */ + range?: boolean; +} diff --git a/public/app/plugins/datasource/prometheus/datasource.test.ts b/public/app/plugins/datasource/prometheus/datasource.test.ts index 9cced6e00e7..91a75a413e8 100644 --- a/public/app/plugins/datasource/prometheus/datasource.test.ts +++ b/public/app/plugins/datasource/prometheus/datasource.test.ts @@ -190,7 +190,7 @@ describe('PrometheusDatasource', () => { }); describe('customQueryParams', () => { - const target = { expr: 'test{job="testjob"}', format: 'time_series', refId: '' }; + const target: PromQuery = { expr: 'test{job="testjob"}', format: 'time_series', refId: '' }; function makeQuery(target: PromQuery) { return { @@ -618,7 +618,7 @@ describe('PrometheusDatasource', () => { describe('interpolateVariablesInQueries', () => { it('should call replace function 2 times', () => { - const query = { + const query: PromQuery = { expr: 'test{job="testjob"}', format: 'time_series', interval: '$Interval', diff --git a/public/app/plugins/datasource/prometheus/language_provider.ts b/public/app/plugins/datasource/prometheus/language_provider.ts index 31970bb0db3..4b2251ac7e1 100644 --- a/public/app/plugins/datasource/prometheus/language_provider.ts +++ b/public/app/plugins/datasource/prometheus/language_provider.ts @@ -77,6 +77,20 @@ export function getMetadataString(metric: string, metadata: PromMetricsMetadata) return `${type.toUpperCase()}: ${help}`; } +export function getMetadataHelp(metric: string, metadata: PromMetricsMetadata): string | undefined { + if (!metadata[metric]) { + return undefined; + } + return metadata[metric].help; +} + +export function getMetadataType(metric: string, metadata: PromMetricsMetadata): string | undefined { + if (!metadata[metric]) { + return undefined; + } + return metadata[metric].type; +} + const PREFIX_DELIMITER_REGEX = /(="|!="|=~"|!~"|\{|\[|\(|\+|-|\/|\*|%|\^|\band\b|\bor\b|\bunless\b|==|>=|!=|<=|>|<|=|~|,)/; diff --git a/public/app/plugins/datasource/prometheus/querybuilder/components/FeedbackLink.tsx b/public/app/plugins/datasource/prometheus/querybuilder/components/FeedbackLink.tsx new file mode 100644 index 00000000000..ae3916a0f51 --- /dev/null +++ b/public/app/plugins/datasource/prometheus/querybuilder/components/FeedbackLink.tsx @@ -0,0 +1,40 @@ +import { css } from '@emotion/css'; +import React from 'react'; + +import { GrafanaTheme2 } from '@grafana/data'; +import { Stack } from '@grafana/experimental'; +import { Icon, useStyles2 } from '@grafana/ui'; + +export interface Props { + feedbackUrl?: string; +} + +export function FeedbackLink({ feedbackUrl }: Props) { + const styles = useStyles2(getStyles); + + return ( + + + Give feedback + + + ); +} + +function getStyles(theme: GrafanaTheme2) { + return { + link: css({ + color: theme.colors.text.secondary, + fontSize: theme.typography.bodySmall.fontSize, + ':hover': { + color: theme.colors.text.link, + }, + }), + }; +} diff --git a/public/app/plugins/datasource/prometheus/querybuilder/components/MetricEncyclopediaModal.test.tsx b/public/app/plugins/datasource/prometheus/querybuilder/components/MetricEncyclopediaModal.test.tsx new file mode 100644 index 00000000000..9a3b74b0f52 --- /dev/null +++ b/public/app/plugins/datasource/prometheus/querybuilder/components/MetricEncyclopediaModal.test.tsx @@ -0,0 +1,297 @@ +import { render, screen, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import React from 'react'; + +import { DataSourceInstanceSettings, DataSourcePluginMeta } from '@grafana/data'; + +import { PrometheusDatasource } from '../../datasource'; +import PromQlLanguageProvider from '../../language_provider'; +import { EmptyLanguageProviderMock } from '../../language_provider.mock'; +import { PromOptions } from '../../types'; +import { PromVisualQuery } from '../types'; + +import { MetricEncyclopediaModal, testIds } from './MetricEncyclopediaModal'; + +// don't care about interaction tracking in our unit tests +jest.mock('@grafana/runtime', () => ({ + ...jest.requireActual('@grafana/runtime'), + reportInteraction: jest.fn(), +})); + +describe('MetricEncyclopediaModal', () => { + it('renders the modal', async () => { + setup(defaultQuery, listOfMetrics); + await waitFor(() => { + expect(screen.getByText('Browse Metrics')).toBeInTheDocument(); + }); + }); + + it('renders a list of metrics', async () => { + setup(defaultQuery, listOfMetrics); + await waitFor(() => { + expect(screen.getByText('all-metrics')).toBeInTheDocument(); + }); + }); + + it('renders a list of metrics filtered by labels in the PromVisualQuery', async () => { + const query: PromVisualQuery = { + metric: 'random_metric', + labels: [ + { + op: '=', + label: 'action', + value: 'add_presence', + }, + ], + operations: [], + }; + + setup(query, listOfMetrics); + await waitFor(() => { + expect(screen.getByText('with-labels')).toBeInTheDocument(); + }); + }); + + it('displays a type for a metric when the metric is clicked', async () => { + setup(defaultQuery, listOfMetrics); + await waitFor(() => { + expect(screen.getByText('all-metrics')).toBeInTheDocument(); + }); + + const interactiveMetric = screen.getByText('all-metrics'); + + await userEvent.click(interactiveMetric); + + expect(screen.getByText('all-metrics-type')).toBeInTheDocument(); + }); + + it('displays a description for a metric', async () => { + setup(defaultQuery, listOfMetrics); + await waitFor(() => { + expect(screen.getByText('all-metrics')).toBeInTheDocument(); + }); + + const interactiveMetric = screen.getByText('all-metrics'); + + await userEvent.click(interactiveMetric); + + expect(screen.getByText('all-metrics-help')).toBeInTheDocument(); + }); + + it('displays no metadata for a metric missing metadata when the metric is clicked', async () => { + setup(defaultQuery, listOfMetrics); + await waitFor(() => { + expect(screen.getByText('b')).toBeInTheDocument(); + }); + + const interactiveMetric = screen.getByText('b'); + + await userEvent.click(interactiveMetric); + + expect(screen.getByText('No metadata available')).toBeInTheDocument(); + }); + + // Filtering + it('has a filter for selected type', async () => { + setup(defaultQuery, listOfMetrics); + + await waitFor(() => { + const selectType = screen.getByText('Filter by type'); + expect(selectType).toBeInTheDocument(); + }); + }); + + it('filters by alphebetical letter choice', async () => { + setup(defaultQuery, listOfMetrics); + // pick the letter J + const letterJ = screen.getByTestId('letter-J'); + await userEvent.click(letterJ); + + // check metrics that start with J + const metricStartingWithJ = screen.getByText('j'); + expect(metricStartingWithJ).toBeInTheDocument(); + // check metrics that don't start with J + const metricStartingWithSomethingElse = screen.queryByText('a'); + expect(metricStartingWithSomethingElse).toBeNull(); + }); + + it('allows a user to select a template variable', async () => { + setup(defaultQuery, listOfMetrics); + + await waitFor(() => { + const selectType = screen.getByText('Select template variables'); + expect(selectType).toBeInTheDocument(); + }); + }); + + // Pagination + it('shows metrics within a range by pagination', async () => { + // default resultsPerPage is 10 + setup(defaultQuery, listOfMetrics); + await waitFor(() => { + expect(screen.getByText('all-metrics')).toBeInTheDocument(); + expect(screen.getByText('a_bucket')).toBeInTheDocument(); + expect(screen.getByText('a')).toBeInTheDocument(); + expect(screen.getByText('b')).toBeInTheDocument(); + expect(screen.getByText('c')).toBeInTheDocument(); + expect(screen.getByText('d')).toBeInTheDocument(); + expect(screen.getByText('e')).toBeInTheDocument(); + expect(screen.getByText('f')).toBeInTheDocument(); + expect(screen.getByText('g')).toBeInTheDocument(); + expect(screen.getByText('h')).toBeInTheDocument(); + }); + }); + + it('does not show metrics outside a range by pagination', async () => { + // default resultsPerPage is 10 + setup(defaultQuery, listOfMetrics); + await waitFor(() => { + const metricOutsideRange = screen.queryByText('j'); + expect(metricOutsideRange).toBeNull(); + }); + }); + + it('shows results metrics per page chosen by the user', async () => { + setup(defaultQuery, listOfMetrics); + const resultsPerPageInput = screen.getByTestId(testIds.resultsPerPage); + await userEvent.type(resultsPerPageInput, '12'); + const metricInsideRange = screen.getByText('j'); + expect(metricInsideRange).toBeInTheDocument(); + }); + + it('paginates millions of metrics and does not run out of memory', async () => { + const millionsOfMetrics: string[] = [...Array(1000000).keys()].map((i) => '' + i); + setup(defaultQuery, millionsOfMetrics); + await waitFor(() => { + // doesn't break on loading + expect(screen.getByText('0')).toBeInTheDocument(); + }); + const resultsPerPageInput = screen.getByTestId(testIds.resultsPerPage); + // doesn't break on changing results per page + await userEvent.type(resultsPerPageInput, '11'); + const metricInsideRange = screen.getByText('10'); + expect(metricInsideRange).toBeInTheDocument(); + }); + + // Fuzzy search + it('searches and filter by metric name with a fuzzy search', async () => { + // search for a_bucket by name + setup(defaultQuery, listOfMetrics); + let metricAll: HTMLElement | null; + let metricABucket: HTMLElement | null; + await waitFor(() => { + metricAll = screen.getByText('all-metrics'); + metricABucket = screen.getByText('a_bucket'); + expect(metricAll).toBeInTheDocument(); + expect(metricABucket).toBeInTheDocument(); + }); + const searchMetric = screen.getByTestId(testIds.searchMetric); + expect(searchMetric).toBeInTheDocument(); + await userEvent.type(searchMetric, 'a_b'); + + await waitFor(() => { + metricABucket = screen.getByText('a_bucket'); + expect(metricABucket).toBeInTheDocument(); + metricAll = screen.queryByText('all-metrics'); + expect(metricAll).toBeNull(); + }); + }); + + it('searches by all metric metadata with a fuzzy search', async () => { + // search for a_bucket by metadata type counter but only type countt + setup(defaultQuery, listOfMetrics); + let metricABucket: HTMLElement | null; + + await waitFor(() => { + metricABucket = screen.getByText('a_bucket'); + expect(metricABucket).toBeInTheDocument(); + }); + + const metadataSwitch = screen.getByTestId(testIds.searchWithMetadata); + expect(metadataSwitch).toBeInTheDocument(); + await userEvent.click(metadataSwitch); + + const searchMetric = screen.getByTestId(testIds.searchMetric); + expect(searchMetric).toBeInTheDocument(); + await userEvent.type(searchMetric, 'countt'); + + await waitFor(() => { + metricABucket = screen.getByText('a_bucket'); + expect(metricABucket).toBeInTheDocument(); + }); + }); +}); + +const defaultQuery: PromVisualQuery = { + metric: 'random_metric', + labels: [], + operations: [], +}; + +const listOfMetrics: string[] = ['all-metrics', 'a_bucket', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']; + +function createDatasource(metrics: string[], withLabels?: boolean) { + const languageProvider = new EmptyLanguageProviderMock() as unknown as PromQlLanguageProvider; + + // display different results if their are labels selected in the PromVisualQuery + if (withLabels) { + languageProvider.getSeries = () => Promise.resolve({ __name__: ['with-labels'] }); + languageProvider.metricsMetadata = { + 'with-labels': { + type: 'with-labels-type', + help: 'with-labels-help', + }, + }; + } else { + // all metrics + languageProvider.getLabelValues = () => Promise.resolve(metrics); + languageProvider.metricsMetadata = { + 'all-metrics': { + type: 'all-metrics-type', + help: 'all-metrics-help', + }, + a: { + type: 'counter', + help: 'a-metric-help', + }, + a_bucket: { + type: 'counter', + help: 'for functions', + }, + // missing metadata for other metrics is tested for, see below + }; + } + + const datasource = new PrometheusDatasource( + { + url: '', + jsonData: {}, + meta: {} as DataSourcePluginMeta, + } as DataSourceInstanceSettings, + undefined, + undefined, + languageProvider + ); + return datasource; +} + +function createProps(query: PromVisualQuery, datasource: PrometheusDatasource) { + return { + datasource, + isOpen: true, + onChange: jest.fn(), + onClose: jest.fn(), + query: query, + }; +} + +function setup(query: PromVisualQuery, metrics: string[], withlabels?: boolean) { + const withLabels: boolean = query.labels.length > 0; + const datasource = createDatasource(metrics, withLabels); + const props = createProps(query, datasource); + + // render the modal only + const { container } = render(); + + return container; +} diff --git a/public/app/plugins/datasource/prometheus/querybuilder/components/MetricEncyclopediaModal.tsx b/public/app/plugins/datasource/prometheus/querybuilder/components/MetricEncyclopediaModal.tsx new file mode 100644 index 00000000000..90ad6fa1464 --- /dev/null +++ b/public/app/plugins/datasource/prometheus/querybuilder/components/MetricEncyclopediaModal.tsx @@ -0,0 +1,837 @@ +import { css, cx } from '@emotion/css'; +import uFuzzy from '@leeoniya/ufuzzy'; +import debounce from 'debounce-promise'; +import { debounce as debounceLodash } from 'lodash'; +import React, { useCallback, useEffect, useMemo, useState } from 'react'; + +import { GrafanaTheme2, SelectableValue } from '@grafana/data'; +import { EditorField } from '@grafana/experimental'; +import { reportInteraction } from '@grafana/runtime'; +import { + Button, + Card, + Collapse, + InlineField, + InlineSwitch, + Input, + Modal, + MultiSelect, + Select, + Spinner, + useStyles2, +} from '@grafana/ui'; + +import { PrometheusDatasource } from '../../datasource'; +import { getMetadataHelp, getMetadataType } from '../../language_provider'; +import { promQueryModeller } from '../PromQueryModeller'; +import { regexifyLabelValuesQueryString } from '../shared/parsingUtils'; +import { PromVisualQuery } from '../types'; + +import { FeedbackLink } from './FeedbackLink'; + +type Props = { + datasource: PrometheusDatasource; + isOpen: boolean; + query: PromVisualQuery; + onClose: () => void; + onChange: (query: PromVisualQuery) => void; +}; + +type MetricsData = MetricData[]; + +type MetricData = { + value: string; + type?: string; + description?: string; +}; + +type PromFilterOption = { + value: string; + description: string; +}; + +const promTypes: PromFilterOption[] = [ + { + value: 'counter', + description: + 'A cumulative metric that represents a single monotonically increasing counter whose value can only increase or be reset to zero on restart.', + }, + { + value: 'gauge', + description: 'A metric that represents a single numerical value that can arbitrarily go up and down.', + }, + { + value: 'histogram', + description: + 'A histogram samples observations (usually things like request durations or response sizes) and counts them in configurable buckets.', + }, + { + value: 'summary', + description: + 'A summary samples observations (usually things like request durations and response sizes) and can calculate configurable quantiles over a sliding time window.', + }, +]; + +export const placeholders = { + browse: 'Search metrics by name', + metadataSearchSwitch: 'Search by metadata type and description in addition to name', + type: 'Select...', + variables: 'Select...', + excludeNoMetadata: 'Exclude results with no metadata', + setUseBackend: 'Use the backend to browse metrics', +}; + +export const DEFAULT_RESULTS_PER_PAGE = 10; + +const uf = new uFuzzy({ + intraMode: 1, + intraIns: 1, + intraSub: 1, + intraTrn: 1, + intraDel: 1, +}); + +function fuzzySearch(haystack: string[], query: string, setter: React.Dispatch>) { + const idxs = uf.filter(haystack, query); + idxs && setter(idxs); +} + +const debouncedFuzzySearch = debounceLodash(fuzzySearch, 300); + +export const MetricEncyclopediaModal = (props: Props) => { + const { datasource, isOpen, onClose, onChange, query } = props; + + const [variables, setVariables] = useState>>([]); + + const [isLoading, setIsLoading] = useState(true); + + // metric list + const [metrics, setMetrics] = useState([]); + const [hasMetadata, setHasMetadata] = useState(true); + const [metaHaystack, setMetaHaystack] = useState([]); + const [nameHaystack, setNameHaystack] = useState([]); + const [openTabs, setOpenTabs] = useState([]); + + // pagination + const [resultsPerPage, setResultsPerPage] = useState(DEFAULT_RESULTS_PER_PAGE); + const [pageNum, setPageNum] = useState(1); + + // filters + const [fuzzySearchQuery, setFuzzySearchQuery] = useState(''); + const [fuzzyMetaSearchResults, setFuzzyMetaSearchResults] = useState([]); + const [fuzzyNameSearchResults, setFuzzyNameSearchResults] = useState([]); + const [fullMetaSearch, setFullMetaSearch] = useState(false); + const [excludeNullMetadata, setExcludeNullMetadata] = useState(false); + const [selectedTypes, setSelectedTypes] = useState>>([]); + const [letterSearch, setLetterSearch] = useState(null); + + const [totalMetricCount, setTotalMetricCount] = useState(0); + const [filteredMetricCount, setFilteredMetricCount] = useState(); + // backend search metric names by text + const [useBackend, setUseBackend] = useState(false); + + const updateMetricsMetadata = useCallback(async () => { + // *** Loading Gif + setIsLoading(true); + + // Makes sure we loaded the metadata for metrics. Usually this is done in the start() method of the provider but we + // don't use it with the visual builder and there is no need to run all the start() setup anyway. + if (!datasource.languageProvider.metricsMetadata) { + await datasource.languageProvider.loadMetricsMetadata(); + } + + // Error handling for when metrics metadata returns as undefined + // *** Will have to handle metadata filtering if this happens + // *** only display metrics fuzzy search, filter and pagination + if (!datasource.languageProvider.metricsMetadata) { + setHasMetadata(false); + datasource.languageProvider.metricsMetadata = {}; + } + + // filter by adding the query.labels to the search? + // *** do this in the filter??? + let metrics; + if (query.labels.length > 0) { + const expr = promQueryModeller.renderLabels(query.labels); + metrics = (await datasource.languageProvider.getSeries(expr, true))['__name__'] ?? []; + } else { + metrics = (await datasource.languageProvider.getLabelValues('__name__')) ?? []; + } + + let haystackMetaData: string[] = []; + let haystackNameData: string[] = []; + let metricsData: MetricsData = metrics.map((m) => { + const type = getMetadataType(m, datasource.languageProvider.metricsMetadata!); + const description = getMetadataHelp(m, datasource.languageProvider.metricsMetadata!); + + // string[] = name + type + description + haystackMetaData.push(`${m} ${type} ${description}`); + haystackNameData.push(m); + return { + value: m, + type: type, + description: description, + }; + }); + + // setting this by the backend if useBackend is true + setMetrics(metricsData); + setMetaHaystack(haystackMetaData); + setNameHaystack(haystackNameData); + + setVariables( + datasource.getVariables().map((v) => { + return { + value: v, + label: v, + }; + }) + ); + + setTotalMetricCount(metricsData.length); + setFilteredMetricCount(metricsData.length); + setIsLoading(false); + }, [query, datasource]); + + useEffect(() => { + updateMetricsMetadata(); + }, [updateMetricsMetadata]); + + const styles = useStyles2(getStyles); + + const typeOptions: SelectableValue[] = promTypes.map((t: PromFilterOption) => { + return { + value: t.value, + label: t.value, + description: t.description, + }; + }); + + function calculatePageList(metrics: MetricsData, resultsPerPage: number) { + if (!metrics.length) { + return []; + } + + const calcResultsPerPage: number = resultsPerPage === 0 ? 1 : resultsPerPage; + + const pages = Math.floor(filterMetrics(metrics).length / calcResultsPerPage) + 1; + + return [...Array(pages).keys()].map((i) => i + 1); + } + + function sliceMetrics(metrics: MetricsData, pageNum: number, resultsPerPage: number) { + const calcResultsPerPage: number = resultsPerPage === 0 ? 1 : resultsPerPage; + const start: number = pageNum === 1 ? 0 : (pageNum - 1) * calcResultsPerPage; + const end: number = start + calcResultsPerPage; + return metrics.slice(start, end); + } + + function hasMetaDataFilters() { + return selectedTypes.length > 0; + } + + /** + * Filter + * + * @param metrics + * @param skipLetterSearch used to show the alphabet letters as clickable before filtering out letters (needs to be refactored) + * @returns + */ + function filterMetrics(metrics: MetricsData, skipLetterSearch?: boolean): MetricsData { + let filteredMetrics: MetricsData = metrics; + + if (fuzzySearchQuery) { + filteredMetrics = filteredMetrics.filter((m: MetricData, idx) => { + if (useBackend) { + // skip for backend! + return true; + } else if (fullMetaSearch) { + return fuzzyMetaSearchResults.includes(idx); + } else { + return fuzzyNameSearchResults.includes(idx); + } + }); + } + + if (letterSearch && !skipLetterSearch) { + filteredMetrics = filteredMetrics.filter((m: MetricData, idx) => { + const letters: string[] = [letterSearch, letterSearch.toLowerCase()]; + return letters.includes(m.value[0]); + }); + } + + if (selectedTypes.length > 0 && !useBackend) { + filteredMetrics = filteredMetrics.filter((m: MetricData, idx) => { + // Matches type + const matchesSelectedType = selectedTypes.some((t) => t.value === m.type); + + // missing type + const hasNoType = !m.type; + + return matchesSelectedType || (hasNoType && !excludeNullMetadata); + }); + } + + return filteredMetrics; + } + + /** + * The filtered and paginated metrics displayed in the modal + * */ + function displayedMetrics(metrics: MetricsData) { + const filteredSorted: MetricsData = filterMetrics(metrics).sort(alphabetically(true, hasMetaDataFilters())); + + if (filteredMetricCount !== filteredSorted.length && filteredSorted.length !== 0) { + setFilteredMetricCount(filteredSorted.length); + } + + const displayedMetrics: MetricsData = sliceMetrics(filteredSorted, pageNum, resultsPerPage); + + return displayedMetrics; + } + /** + * The backend debounced search + */ + const debouncedBackendSearch = useMemo( + () => + debounce(async (metricText: string) => { + setIsLoading(true); + const queryString = regexifyLabelValuesQueryString(metricText); + + const labelsParams = query.labels.map((label) => { + return `,${label.label}="${label.value}"`; + }); + + const params = `label_values({__name__=~".*${queryString}"${ + query.labels ? labelsParams.join() : '' + }},__name__)`; + + const results = datasource.metricFindQuery(params); + + const metrics = await results.then((results) => { + return results.map((result) => { + return { + value: result.text, + }; + }); + }); + + setMetrics(metrics); + setFilteredMetricCount(metrics.length); + setIsLoading(false); + }, 300), + [datasource, query.labels] + ); + + function letterSearchComponent() { + const alphabetCheck: { [char: string]: number } = { + A: 0, + B: 0, + C: 0, + D: 0, + E: 0, + F: 0, + G: 0, + H: 0, + I: 0, + J: 0, + K: 0, + L: 0, + M: 0, + N: 0, + O: 0, + P: 0, + Q: 0, + R: 0, + S: 0, + T: 0, + U: 0, + V: 0, + W: 0, + X: 0, + Y: 0, + Z: 0, + }; + + filterMetrics(metrics, true).forEach((m: MetricData, idx) => { + const metricFirstLetter = m.value[0].toUpperCase(); + + if (alphabet.includes(metricFirstLetter) && !alphabetCheck[metricFirstLetter]) { + alphabetCheck[metricFirstLetter] += 1; + } + }); + + // return the alphabet components with the correct style and behavior + return Object.keys(alphabetCheck).map((letter: string) => { + // const active: boolean = .some((m: MetricData) => { + // return m.value[0] === letter || m.value[0] === letter?.toLowerCase(); + // }); + const active: boolean = alphabetCheck[letter] > 0; + // starts with letter search + // filter by starts with letter + // if same letter searched null out remove letter search + function updateLetterSearch() { + if (letterSearch === letter) { + setLetterSearch(null); + } else { + setLetterSearch(letter); + } + setPageNum(1); + } + // selected letter to filter by + const selectedClass: string = letterSearch === letter ? styles.selAlpha : ''; + // these letters are represented in the list of metrics + const activeClass: string = active ? styles.active : styles.gray; + + return ( + {}} + className={`${selectedClass} ${activeClass}`} + key={letter} + data-testid={'letter-' + letter} + > + {letter + ' '} + {/* {idx !== coll.length - 1 ? '|': ''} */} + + ); + }); + } + + const MAXIMUM_RESULTS_PER_PAGE = 1000; + const calculateResultsPerPage = (results: number) => { + if (results < 1) { + return 1; + } + + if (results > MAXIMUM_RESULTS_PER_PAGE) { + return MAXIMUM_RESULTS_PER_PAGE; + } + + return results ?? 10; + }; + + return ( + +
    +
    + + { + const value = e.currentTarget.value ?? ''; + setFuzzySearchQuery(value); + if (useBackend && value === '') { + // get all metrics data if a user erases everything in the input + updateMetricsMetadata(); + } else if (useBackend) { + debouncedBackendSearch(value); + } else { + // search either the names or all metadata + // fuzzy search go! + + if (fullMetaSearch) { + debouncedFuzzySearch(metaHaystack, value, setFuzzyMetaSearchResults); + } else { + debouncedFuzzySearch(nameHaystack, value, setFuzzyNameSearchResults); + } + } + + setPageNum(1); + }} + /> + +
    +
    + + { + // *** Filter by type + // *** always include metrics without metadata but label it as unknown type + // Consider tabs select instead of actual select or multi select + setSelectedTypes(v); + setPageNum(1); + }} + /> + +
    +
    + + { + return { value: p, label: '' + p }; + })} + value={pageNum ?? 1} + placeholder="select page" + width={20} + onChange={(e) => { + const value = e.value ?? 1; + setPageNum(value); + }} + /> + + + + { + const value = +e.currentTarget.value; + + if (isNaN(value)) { + return; + } + + setResultsPerPage(value); + }} + /> + +
    + + +
    +
    + ); +}; + +function alphabetically(ascending: boolean, metadataFilters: boolean) { + return function (a: MetricData, b: MetricData) { + // equal items sort equally + if (a.value === b.value) { + return 0; + } + + // *** NO METADATA? SORT LAST + // undefined metadata sort after anything else + // if filters are on + if (metadataFilters) { + if (a.type === undefined) { + return 1; + } + if (b.type === undefined) { + return -1; + } + } + + // otherwise, if we're ascending, lowest sorts first + if (ascending) { + return a.value < b.value ? -1 : 1; + } + + // if descending, highest sorts first + return a.value < b.value ? 1 : -1; + }; +} + +const getStyles = (theme: GrafanaTheme2) => { + return { + modal: css` + width: 85vw; + ${theme.breakpoints.down('md')} { + width: 100%; + } + `, + inputWrapper: css` + display: flex; + flex-direction: row; + gap: ${theme.spacing(2)}; + margin-bottom: ${theme.spacing(2)}; + `, + inputItemFirst: css` + flex-basis: 40%; + `, + inputItem: css` + flex-grow: 1; + `, + selectWrapper: css` + margin-bottom: ${theme.spacing(2)}; + `, + selectItem: css` + display: flex; + flex-direction: row; + `, + selectItemLabel: css` + margin: 0 0 0 ${theme.spacing(1)}; + align-self: center; + color: ${theme.colors.text.secondary}; + `, + resultsHeading: css` + margin: 0 0 0 0; + `, + resultsData: css` + margin: 0 0 ${theme.spacing(1)} 0; + `, + resultsDataCount: css` + margin: 0; + `, + resultsDataFiltered: css` + margin: 0; + color: ${theme.colors.warning.main}; + `, + alphabetRow: css` + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + `, + results: css` + height: 300px; + overflow-y: scroll; + `, + pageSettingsWrapper: css` + padding-top: ${theme.spacing(1.5)}; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + `, + pageSettings: css` + display: flex; + flex-direction: row; + align-items: center; + `, + cardsContainer: css` + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + `, + card: css` + width: 100%; + display: flex; + flex-direction: column; + `, + selAlpha: css` + cursor: pointer; + color: #6e9fff; + `, + active: css` + cursor: pointer; + `, + gray: css` + color: grey; + `, + metadata: css` + color: rgb(204, 204, 220); + `, + loadingSpinner: css` + display: inline-block; + `, + }; +}; + +export const testIds = { + metricModal: 'metric-modal', + searchMetric: 'search-metric', + searchWithMetadata: 'search-with-metadata', + selectType: 'select-type', + metricCard: 'metric-card', + useMetric: 'use-metric', + searchPage: 'search-page', + resultsPerPage: 'results-per-page', + setUseBackend: 'set-use-backend', +}; + +const alphabet = [ + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', +]; diff --git a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilder.tsx b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilder.tsx index 78e54fe840d..67ef6dfc4ab 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilder.tsx +++ b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilder.tsx @@ -1,7 +1,10 @@ +import { css } from '@emotion/css'; import React, { useCallback, useState } from 'react'; -import { DataSourceApi, PanelData, SelectableValue } from '@grafana/data'; +import { DataSourceApi, GrafanaTheme2, PanelData, SelectableValue } from '@grafana/data'; import { EditorRow } from '@grafana/experimental'; +import { config } from '@grafana/runtime'; +import { Button, Tag, useStyles2 } from '@grafana/ui'; import { PrometheusDatasource } from '../../datasource'; import { getMetadataString } from '../../language_provider'; @@ -19,6 +22,7 @@ import { QueryBuilderLabelFilter, QueryBuilderOperation } from '../shared/types' import { PromVisualQuery } from '../types'; import { LabelFilters } from './LabelFilters'; +import { MetricEncyclopediaModal } from './MetricEncyclopediaModal'; import { MetricSelect, PROMETHEUS_QUERY_BUILDER_MAX_RESULTS } from './MetricSelect'; import { NestedQueryList } from './NestedQueryList'; import { EXPLAIN_LABEL_FILTER_CONTENT } from './PromQueryBuilderExplained'; @@ -35,10 +39,12 @@ export interface Props { export const PromQueryBuilder = React.memo((props) => { const { datasource, query, onChange, onRunQuery, data, showExplain } = props; const [highlightedOp, setHighlightedOp] = useState(); + const [metricEncyclopediaModalOpen, setMetricEncyclopediaModalOpen] = useState(false); const onChangeLabels = (labels: QueryBuilderLabelFilter[]) => { onChange({ ...query, labels }); }; + const styles = useStyles2(getStyles); /** * Map metric metadata to SelectableValue for Select component and also adds defined template variables to the list. */ @@ -202,17 +208,52 @@ export const PromQueryBuilder = React.memo((props) => { }, [datasource, query, withTemplateVariableOptions]); const lang = { grammar: promqlGrammar, name: 'promql' }; + const MetricEncyclopedia = config.featureToggles.prometheusMetricEncyclopedia; return ( <> - + {MetricEncyclopedia ? ( + <> + + {query.metric && ( + { + onChange({ ...query, metric: '' }); + }} + title="Click to remove metric" + className={styles.metricTag} + /> + )} + {metricEncyclopediaModalOpen && ( + setMetricEncyclopediaModalOpen(false)} + query={query} + onChange={onChange} + /> + )} + + ) : ( + + )} { + return { + button: css` + height: auto; + `, + metricTag: css` + margin: '10px 0 10px 0', + backgroundColor: '#3D71D9', + `, + }; +}; diff --git a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilderOptions.test.tsx b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilderOptions.test.tsx index a56bbcc1206..04aaf58b302 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilderOptions.test.tsx +++ b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilderOptions.test.tsx @@ -1,4 +1,5 @@ import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import React from 'react'; import { selectOptionInTest } from 'test/helpers/selectOptionInTest'; @@ -13,10 +14,10 @@ describe('PromQueryBuilderOptions', () => { it('Can change query type', async () => { const { props } = setup(); - screen.getByTitle('Click to edit options').click(); + await userEvent.click(screen.getByTitle('Click to edit options')); expect(screen.getByLabelText('Range')).toBeChecked(); - screen.getByLabelText('Instant').click(); + await userEvent.click(screen.getByLabelText('Instant')); expect(props.onChange).toHaveBeenCalledWith({ ...props.query, @@ -29,7 +30,7 @@ describe('PromQueryBuilderOptions', () => { it('Can set query type to "Both" on render for PanelEditor', async () => { setup({ instant: true, range: true }); - screen.getByTitle('Click to edit options').click(); + await userEvent.click(screen.getByTitle('Click to edit options')); expect(screen.getByLabelText('Both')).toBeChecked(); }); @@ -37,12 +38,12 @@ describe('PromQueryBuilderOptions', () => { it('Can set query type to "Both" on render for Explorer', async () => { setup({ instant: true, range: true }, CoreApp.Explore); - screen.getByTitle('Click to edit options').click(); + await userEvent.click(screen.getByTitle('Click to edit options')); expect(screen.getByLabelText('Both')).toBeChecked(); }); - it('Legend format default to Auto', async () => { + it('Legend format default to Auto', () => { setup(); expect(screen.getByText('Legend: Auto')).toBeInTheDocument(); }); @@ -50,12 +51,12 @@ describe('PromQueryBuilderOptions', () => { it('Can change legend format to verbose', async () => { const { props } = setup(); - screen.getByTitle('Click to edit options').click(); + await userEvent.click(screen.getByTitle('Click to edit options')); let legendModeSelect = screen.getByText('Auto').parentElement!; - legendModeSelect.click(); + await userEvent.click(legendModeSelect); - await selectOptionInTest(legendModeSelect as HTMLElement, 'Verbose'); + await selectOptionInTest(legendModeSelect, 'Verbose'); expect(props.onChange).toHaveBeenCalledWith({ ...props.query, @@ -66,12 +67,12 @@ describe('PromQueryBuilderOptions', () => { it('Can change legend format to custom', async () => { const { props } = setup(); - screen.getByTitle('Click to edit options').click(); + await userEvent.click(screen.getByTitle('Click to edit options')); let legendModeSelect = screen.getByText('Auto').parentElement!; - legendModeSelect.click(); + await userEvent.click(legendModeSelect); - await selectOptionInTest(legendModeSelect as HTMLElement, 'Custom'); + await selectOptionInTest(legendModeSelect, 'Custom'); expect(props.onChange).toHaveBeenCalledWith({ ...props.query, @@ -79,23 +80,23 @@ describe('PromQueryBuilderOptions', () => { }); }); - it('Handle defaults with undefined range', async () => { + it('Handle defaults with undefined range', () => { setup(getQueryWithDefaults({ refId: 'A', expr: '', range: undefined, instant: true }, CoreApp.Dashboard)); expect(screen.getByText('Type: Instant')).toBeInTheDocument(); }); - it('Should show "Exemplars: false" by default', async () => { + it('Should show "Exemplars: false" by default', () => { setup(); expect(screen.getByText('Exemplars: false')).toBeInTheDocument(); }); - it('Should show "Exemplars: false" when query has "Exemplars: false"', async () => { + it('Should show "Exemplars: false" when query has "Exemplars: false"', () => { setup({ exemplar: false }); expect(screen.getByText('Exemplars: false')).toBeInTheDocument(); }); - it('Should show "Exemplars: true" when query has "Exemplars: true"', async () => { + it('Should show "Exemplars: true" when query has "Exemplars: true"', () => { setup({ exemplar: true }); expect(screen.getByText('Exemplars: true')).toBeInTheDocument(); }); diff --git a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilderOptions.tsx b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilderOptions.tsx index a258a3b65d6..7f12cb2746b 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilderOptions.tsx +++ b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryBuilderOptions.tsx @@ -5,6 +5,7 @@ import { EditorField, EditorRow, EditorSwitch } from '@grafana/experimental'; import { AutoSizeInput, RadioButtonGroup, Select } from '@grafana/ui'; import { getQueryTypeChangeHandler, getQueryTypeOptions } from '../../components/PromExploreExtraField'; +import { PromQueryFormat } from '../../dataquery.gen'; import { PromQuery } from '../../types'; import { QueryOptionGroup } from '../shared/QueryOptionGroup'; @@ -28,7 +29,7 @@ export interface Props { } export const PromQueryBuilderOptions = React.memo(({ query, app, onChange, onRunQuery }) => { - const onChangeFormat = (value: SelectableValue) => { + const onChangeFormat = (value: SelectableValue) => { onChange({ ...query, format: value.value }); onRunQuery(); }; diff --git a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryCodeEditor.test.tsx b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryCodeEditor.test.tsx index d42d6bb8881..90122c862c7 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryCodeEditor.test.tsx +++ b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryCodeEditor.test.tsx @@ -45,13 +45,21 @@ describe('PromQueryCodeEditor', () => { const props = createProps(datasource); props.showExplain = true; render(); - expect(await screen.findByText(EXPLAIN_LABEL_FILTER_CONTENT)).toBeInTheDocument(); + + // wait for component to render + await screen.findByRole('button'); + + expect(screen.getByText(EXPLAIN_LABEL_FILTER_CONTENT)).toBeInTheDocument(); }); it('does not show explain section when showExplain is false', async () => { const { datasource } = createDatasource(); const props = createProps(datasource); render(); - expect(await screen.queryByText(EXPLAIN_LABEL_FILTER_CONTENT)).not.toBeInTheDocument(); + + // wait for component to render + await screen.findByRole('button'); + + expect(screen.queryByText(EXPLAIN_LABEL_FILTER_CONTENT)).not.toBeInTheDocument(); }); }); diff --git a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.test.tsx b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.test.tsx index 8dc1e640aa4..87beb07e386 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.test.tsx +++ b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.test.tsx @@ -99,41 +99,43 @@ describe('PromQueryEditorSelector', () => { it('shows code editor if expr and nothing else', async () => { // We opt for showing code editor for queries created before this feature was added render(); - expectCodeEditor(); + await expectCodeEditor(); }); it('shows code editor if no expr and nothing else since defaultEditor is code', async () => { renderWithDatasourceDefaultEditorMode(QueryEditorMode.Code); - expectCodeEditor(); + await expectCodeEditor(); }); it('shows builder if no expr and nothing else since defaultEditor is builder', async () => { renderWithDatasourceDefaultEditorMode(QueryEditorMode.Builder); - expectBuilder(); + await expectBuilder(); }); it('shows code editor when code mode is set', async () => { renderWithMode(QueryEditorMode.Code); - expectCodeEditor(); + await expectCodeEditor(); }); - it('shows builder when builder mode is set', () => { + it('shows builder when builder mode is set', async () => { renderWithMode(QueryEditorMode.Builder); - expectBuilder(); + await expectBuilder(); }); - it('shows Run Queries button in Dashboards', () => { + it('shows Run Queries button in Dashboards', async () => { renderWithProps({}, { app: CoreApp.Dashboard }); - expectRunQueriesButton(); + await expectRunQueriesButton(); }); - it('hides Run Queries button in Explore', () => { + it('hides Run Queries button in Explore', async () => { renderWithProps({}, { app: CoreApp.Explore }); + await expectCodeEditor(); expectNoRunQueriesButton(); }); - it('hides Run Queries button in Correlations Page', () => { + it('hides Run Queries button in Correlations Page', async () => { renderWithProps({}, { app: CoreApp.Correlations }); + await expectCodeEditor(); expectNoRunQueriesButton(); }); @@ -159,7 +161,7 @@ describe('PromQueryEditorSelector', () => { it('Can enable explain', async () => { renderWithMode(QueryEditorMode.Builder); expect(screen.queryByText(EXPLAIN_LABEL_FILTER_CONTENT)).not.toBeInTheDocument(); - screen.getByLabelText('Explain').click(); + await userEvent.click(screen.getByLabelText('Explain')); expect(await screen.findByText(EXPLAIN_LABEL_FILTER_CONTENT)).toBeInTheDocument(); }); @@ -228,16 +230,16 @@ function renderWithProps(overrides?: Partial, componentProps: Partial return { onChange, ...stuff }; } -function expectCodeEditor() { - expect(screen.getByText('MonacoQueryFieldWrapper')).toBeInTheDocument(); +async function expectCodeEditor() { + expect(await screen.findByText('MonacoQueryFieldWrapper')).toBeInTheDocument(); } -function expectBuilder() { - expect(screen.getByText('Metric')).toBeInTheDocument(); +async function expectBuilder() { + expect(await screen.findByText('Metric')).toBeInTheDocument(); } -function expectRunQueriesButton() { - expect(screen.getByRole('button', { name: /run queries/i })).toBeInTheDocument(); +async function expectRunQueriesButton() { + expect(await screen.findByRole('button', { name: /run queries/i })).toBeInTheDocument(); } function expectNoRunQueriesButton() { diff --git a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.tsx b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.tsx index 1057c9ebcd4..524d1e03f10 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.tsx +++ b/public/app/plugins/datasource/prometheus/querybuilder/components/PromQueryEditorSelector.tsx @@ -8,6 +8,7 @@ import { reportInteraction } from '@grafana/runtime'; import { Button, ConfirmModal } from '@grafana/ui'; import { PromQueryEditorProps } from '../../components/types'; +import { PromQueryFormat } from '../../dataquery.gen'; import { PromQuery } from '../../types'; import { QueryPatternsModal } from '../QueryPatternsModal'; import { buildVisualQueryFromString } from '../parsing'; @@ -21,7 +22,7 @@ import { PromQueryBuilderContainer } from './PromQueryBuilderContainer'; import { PromQueryBuilderOptions } from './PromQueryBuilderOptions'; import { PromQueryCodeEditor } from './PromQueryCodeEditor'; -export const FORMAT_OPTIONS: Array> = [ +export const FORMAT_OPTIONS: Array> = [ { label: 'Time series', value: 'time_series' }, { label: 'Table', value: 'table' }, { label: 'Heatmap', value: 'heatmap' }, diff --git a/public/app/plugins/datasource/prometheus/querybuilder/shared/LabelFilterItem.tsx b/public/app/plugins/datasource/prometheus/querybuilder/shared/LabelFilterItem.tsx index c7c400273ec..093ff0c5c2c 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/shared/LabelFilterItem.tsx +++ b/public/app/plugins/datasource/prometheus/querybuilder/shared/LabelFilterItem.tsx @@ -5,6 +5,7 @@ import { SelectableValue, toOption } from '@grafana/data'; import { selectors } from '@grafana/e2e-selectors'; import { AccessoryButton, InputGroup } from '@grafana/experimental'; import { InlineField, Select } from '@grafana/ui'; +import { lokiOperators } from 'app/plugins/datasource/loki/querybuilder/types'; import { isConflictingSelector } from './operationUtils'; import { QueryBuilderLabelFilter } from './types'; @@ -160,8 +161,8 @@ export function LabelFilterItem({ } const operators = [ - { label: '=~', value: '=~', isMultiValue: true }, - { label: '=', value: '=', isMultiValue: false }, - { label: '!=', value: '!=', isMultiValue: false }, - { label: '!~', value: '!~', isMultiValue: true }, + lokiOperators.equals, + lokiOperators.doesNotEqual, + lokiOperators.matchesRegex, + lokiOperators.doesNotMatchRegex, ]; diff --git a/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationEditor.tsx b/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationEditor.tsx index eb68a3946d1..d17fa46b9ca 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationEditor.tsx +++ b/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationEditor.tsx @@ -147,7 +147,7 @@ export function OperationEditor({
    { return { + cardWrapper: css({ + alignItems: 'stretch', + }), error: css({ marginBottom: theme.spacing(1), }), @@ -258,6 +261,7 @@ const getStyles = (theme: GrafanaTheme2) => { marginBottom: theme.spacing(1), position: 'relative', transition: 'all 0.5s ease-in 0s', + height: '100%', }), cardError: css({ boxShadow: `0px 0px 4px 0px ${theme.colors.warning.main}`, diff --git a/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationHeader.tsx b/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationHeader.tsx index 575f134f501..ede453f0745 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationHeader.tsx +++ b/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationHeader.tsx @@ -1,6 +1,6 @@ import { css } from '@emotion/css'; import React, { useState } from 'react'; -import { DraggableProvidedDragHandleProps } from 'react-beautiful-dnd'; +import { DraggableProvided } from 'react-beautiful-dnd'; import { GrafanaTheme2, SelectableValue } from '@grafana/data'; import { FlexItem } from '@grafana/experimental'; @@ -14,7 +14,7 @@ export interface Props { def: QueryBuilderOperationDef; index: number; queryModeller: VisualQueryModeller; - dragHandleProps?: DraggableProvidedDragHandleProps; + dragHandleProps?: DraggableProvided['dragHandleProps']; onChange: (index: number, update: QueryBuilderOperation) => void; onRemove: (index: number) => void; } diff --git a/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationList.testUtils.ts b/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationList.testUtils.ts index aabbc820ac1..c0e2a6b93b2 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationList.testUtils.ts +++ b/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationList.testUtils.ts @@ -1,16 +1,18 @@ -import { screen, fireEvent } from '@testing-library/react'; +import { screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; export async function addOperation(section: string, op: string) { const addOperationButton = screen.getByTitle('Add operation'); expect(addOperationButton).toBeInTheDocument(); await userEvent.click(addOperationButton); - const sectionItem = screen.getByTitle(section); + const sectionItem = await screen.findByTitle(section); expect(sectionItem).toBeInTheDocument(); // Weirdly the await userEvent.click doesn't work here, it reports the item has pointer-events: none. Don't see that // anywhere when debugging so not sure what style is it picking up. - fireEvent.click(sectionItem.children[0]); + await userEvent.click(sectionItem.children[0], { pointerEventsCheck: 0 }); const opItem = screen.getByTitle(op); expect(opItem).toBeInTheDocument(); - fireEvent.click(opItem); + // Weirdly the await userEvent.click doesn't work here, it reports the item has pointer-events: none. Don't see that + // anywhere when debugging so not sure what style is it picking up. + await userEvent.click(opItem, { pointerEventsCheck: 0 }); } diff --git a/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationParamEditor.tsx b/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationParamEditor.tsx index 2e0941d5bfb..de069eb71ff 100644 --- a/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationParamEditor.tsx +++ b/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationParamEditor.tsx @@ -105,6 +105,7 @@ function SelectInputParamEditor({ placeholder={paramDef.placeholder} allowCustomValue={true} onChange={(value) => onChange(index, value.value!)} + width={paramDef.minWidth || 'auto'} /> {paramDef.optional && (
    diff --git a/public/app/plugins/panel/flamegraph/components/FlameGraph/FlameGraphContextMenu.tsx b/public/app/plugins/panel/flamegraph/components/FlameGraph/FlameGraphContextMenu.tsx index e3ecddcebda..c61a5f3fb28 100644 --- a/public/app/plugins/panel/flamegraph/components/FlameGraph/FlameGraphContextMenu.tsx +++ b/public/app/plugins/panel/flamegraph/components/FlameGraph/FlameGraphContextMenu.tsx @@ -16,6 +16,7 @@ type Props = { setSelectedBarIndex: (bar: number) => void; setRangeMin: (range: number) => void; setRangeMax: (range: number) => void; + getLabelValue: (label: string | number) => string; }; const FlameGraphContextMenu = ({ @@ -28,6 +29,7 @@ const FlameGraphContextMenu = ({ setSelectedBarIndex, setRangeMin, setRangeMax, + getLabelValue, }: Props) => { const renderMenuItems = () => { return ( @@ -55,7 +57,7 @@ const FlameGraphContextMenu = ({ onClick={() => { if (graphRef.current && contextMenuData) { const bar = levels[contextMenuData.levelIndex][contextMenuData.barIndex]; - navigator.clipboard.writeText(bar.label).then(() => { + navigator.clipboard.writeText(getLabelValue(bar.label)).then(() => { setContextMenuData(undefined); }); } diff --git a/public/app/plugins/panel/flamegraph/components/FlameGraph/FlameGraphTooltip.tsx b/public/app/plugins/panel/flamegraph/components/FlameGraph/FlameGraphTooltip.tsx index ff113ab397b..3b92818f16e 100644 --- a/public/app/plugins/panel/flamegraph/components/FlameGraph/FlameGraphTooltip.tsx +++ b/public/app/plugins/panel/flamegraph/components/FlameGraph/FlameGraphTooltip.tsx @@ -9,9 +9,10 @@ import { TooltipData, SampleUnit } from '../types'; type Props = { tooltipRef: LegacyRef; tooltipData: TooltipData; + getLabelValue: (label: string | number) => string; }; -const FlameGraphTooltip = ({ tooltipRef, tooltipData }: Props) => { +const FlameGraphTooltip = ({ tooltipRef, tooltipData, getLabelValue }: Props) => { const styles = useStyles2(getStyles); return ( @@ -20,7 +21,7 @@ const FlameGraphTooltip = ({ tooltipRef, tooltipData }: Props) => { -

    {tooltipData.name}

    +

    {getLabelValue(tooltipData.name)}

    {tooltipData.unitTitle}
    diff --git a/public/app/plugins/panel/flamegraph/components/FlameGraph/rendering.test.ts b/public/app/plugins/panel/flamegraph/components/FlameGraph/rendering.test.ts index 888a2284b79..6b476e0f3f0 100644 --- a/public/app/plugins/panel/flamegraph/components/FlameGraph/rendering.test.ts +++ b/public/app/plugins/panel/flamegraph/components/FlameGraph/rendering.test.ts @@ -12,7 +12,8 @@ describe('getRectDimensionsForLevel', () => { 100, 0, 10, - getDisplayProcessor({ field: { config: {} }, theme: createTheme() }) + getDisplayProcessor({ field: { config: {} }, theme: createTheme() }), + (val) => val.toString() ); expect(result).toEqual([ { @@ -40,7 +41,8 @@ describe('getRectDimensionsForLevel', () => { 100, 0, 10, - getDisplayProcessor({ field: { config: {} }, theme: createTheme() }) + getDisplayProcessor({ field: { config: {} }, theme: createTheme() }), + (val) => val.toString() ); expect(result).toEqual([ { width: 999, height: 22, x: 0, y: 44, collapsed: false, ticks: 100, label: '1', unitLabel: '100' }, @@ -61,7 +63,8 @@ describe('getRectDimensionsForLevel', () => { 100, 0, 1, - getDisplayProcessor({ field: { config: {} }, theme: createTheme() }) + getDisplayProcessor({ field: { config: {} }, theme: createTheme() }), + (val) => val.toString() ); expect(result).toEqual([ { width: 99, height: 22, x: 0, y: 44, collapsed: false, ticks: 100, label: '1', unitLabel: '100' }, diff --git a/public/app/plugins/panel/flamegraph/components/FlameGraph/rendering.ts b/public/app/plugins/panel/flamegraph/components/FlameGraph/rendering.ts index 22dbfac9eb8..bf528d42609 100644 --- a/public/app/plugins/panel/flamegraph/components/FlameGraph/rendering.ts +++ b/public/app/plugins/panel/flamegraph/components/FlameGraph/rendering.ts @@ -26,11 +26,6 @@ type RectData = { /** * Compute the pixel coordinates for each bar in a level. We need full level of bars so that we can collapse small bars * into bigger rects. - * @param level - * @param levelIndex - * @param totalTicks - * @param rangeMin - * @param pixelsPerTick */ export function getRectDimensionsForLevel( level: ItemWithStart[], @@ -38,7 +33,8 @@ export function getRectDimensionsForLevel( totalTicks: number, rangeMin: number, pixelsPerTick: number, - processor: DisplayProcessor + processor: DisplayProcessor, + getLabelValue: (value: number | string) => string ): RectData[] { const coordinatesLevel = []; for (let barIndex = 0; barIndex < level.length; barIndex += 1) { @@ -70,7 +66,7 @@ export function getRectDimensionsForLevel( y: levelIndex * PIXELS_PER_LEVEL, collapsed, ticks: curBarTicks, - label: item.label, + label: getLabelValue(item.label), unitLabel: unit, }); } diff --git a/public/app/plugins/panel/flamegraph/components/FlameGraphContainer.test.tsx b/public/app/plugins/panel/flamegraph/components/FlameGraphContainer.test.tsx index c8a1f53eedf..f39ff0c5fb3 100644 --- a/public/app/plugins/panel/flamegraph/components/FlameGraphContainer.test.tsx +++ b/public/app/plugins/panel/flamegraph/components/FlameGraphContainer.test.tsx @@ -1,5 +1,5 @@ -import '@testing-library/jest-dom'; import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import React from 'react'; import { CoreApp, MutableDataFrame } from '@grafana/data'; @@ -20,6 +20,7 @@ describe('FlameGraphContainer', () => { // Needed for AutoSizer to work in test Object.defineProperty(HTMLElement.prototype, 'offsetHeight', { value: 500 }); Object.defineProperty(HTMLElement.prototype, 'offsetWidth', { value: 500 }); + Object.defineProperty(HTMLElement.prototype, 'clientWidth', { value: 500 }); const FlameGraphContainerWithProps = () => { const flameGraphData = new MutableDataFrame(data); @@ -38,11 +39,11 @@ describe('FlameGraphContainer', () => { it('should update search when row selected in top table', async () => { render(); - screen.getAllByRole('row')[1].click(); + await userEvent.click((await screen.findAllByRole('row'))[1]); expect(screen.getByDisplayValue('net/http.HandlerFunc.ServeHTTP')).toBeInTheDocument(); - screen.getAllByRole('row')[2].click(); + await userEvent.click(screen.getAllByRole('row')[2]); expect(screen.getByDisplayValue('total')).toBeInTheDocument(); - screen.getAllByRole('row')[2].click(); + await userEvent.click(screen.getAllByRole('row')[2]); expect(screen.queryByDisplayValue('total')).not.toBeInTheDocument(); }); @@ -59,15 +60,15 @@ describe('FlameGraphContainer', () => { expect(screen.getByTestId('flameGraph')).toBeDefined(); expect(screen.getByTestId('topTable')).toBeDefined(); - screen.getByText(/Top Table/).click(); + await userEvent.click(screen.getByText(/Top Table/)); expect(screen.queryByTestId('flameGraph')).toBeNull(); expect(screen.getByTestId('topTable')).toBeDefined(); - screen.getByText(/Flame Graph/).click(); + await userEvent.click(screen.getByText(/Flame Graph/)); expect(screen.getByTestId('flameGraph')).toBeDefined(); expect(screen.queryByTestId('topTable')).toBeNull(); - screen.getByText(/Both/).click(); + await userEvent.click(screen.getByText(/Both/)); expect(screen.getByTestId('flameGraph')).toBeDefined(); expect(screen.getByTestId('topTable')).toBeDefined(); }); diff --git a/public/app/plugins/panel/flamegraph/components/FlameGraphContainer.tsx b/public/app/plugins/panel/flamegraph/components/FlameGraphContainer.tsx index dc1b41dc31a..d2ce0f3d3e2 100644 --- a/public/app/plugins/panel/flamegraph/components/FlameGraphContainer.tsx +++ b/public/app/plugins/panel/flamegraph/components/FlameGraphContainer.tsx @@ -1,9 +1,9 @@ import { css } from '@emotion/css'; -import React, { useEffect, useMemo, useState } from 'react'; +import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { useMeasure } from 'react-use'; -import { DataFrame, DataFrameView, CoreApp } from '@grafana/data'; -import { useStyles2 } from '@grafana/ui'; +import { DataFrame, DataFrameView, CoreApp, getEnumDisplayProcessor } from '@grafana/data'; +import { useStyles2, useTheme2 } from '@grafana/ui'; import { MIN_WIDTH_TO_SHOW_BOTH_TOPTABLE_AND_FLAMEGRAPH, PIXELS_PER_LEVEL } from '../constants'; @@ -14,7 +14,7 @@ import FlameGraphTopTableContainer from './TopTable/FlameGraphTopTableContainer' import { SelectedView } from './types'; type Props = { - data: DataFrame; + data?: DataFrame; app: CoreApp; // Height for flame graph when not used in explore. // This needs to be different to explore flame graph height as we @@ -31,6 +31,25 @@ const FlameGraphContainer = (props: Props) => { const [selectedView, setSelectedView] = useState(SelectedView.Both); const [sizeRef, { width: containerWidth }] = useMeasure(); + const labelField = props.data?.fields.find((f) => f.name === 'label'); + + const theme = useTheme2(); + + // Label can actually be an enum field so depending on that we have to access it through display processor. This is + // both a backward compatibility but also to allow using a simple dataFrame without enum config. This would allow + // users to use this panel with correct query from data sources that do not return profiles natively. + const getLabelValue = useCallback( + (label: string | number) => { + const enumConfig = labelField?.config?.type?.enum; + if (enumConfig) { + return getEnumDisplayProcessor(theme, enumConfig)(label).text; + } else { + return label.toString(); + } + }, + [labelField, theme] + ); + // Transform dataFrame with nested set format to array of levels. Each level contains all the bars for a particular // level of the flame graph. We do this temporary as in the end we should be able to render directly by iterating // over the dataFrame rows. @@ -91,6 +110,7 @@ const FlameGraphContainer = (props: Props) => { setSelectedBarIndex={setSelectedBarIndex} setRangeMin={setRangeMin} setRangeMax={setRangeMax} + getLabelValue={getLabelValue} /> )} @@ -110,6 +130,7 @@ const FlameGraphContainer = (props: Props) => { setRangeMin={setRangeMin} setRangeMax={setRangeMax} selectedView={selectedView} + getLabelValue={getLabelValue} /> )}

    diff --git a/public/app/plugins/panel/flamegraph/components/FlameGraphHeader.test.tsx b/public/app/plugins/panel/flamegraph/components/FlameGraphHeader.test.tsx index 78b6cefb309..b124a930a6f 100644 --- a/public/app/plugins/panel/flamegraph/components/FlameGraphHeader.test.tsx +++ b/public/app/plugins/panel/flamegraph/components/FlameGraphHeader.test.tsx @@ -33,7 +33,7 @@ describe('FlameGraphHeader', () => { render(); await userEvent.type(screen.getByPlaceholderText('Search..'), 'abc'); expect(screen.getByDisplayValue('abc')).toBeInTheDocument(); - screen.getByRole('button', { name: /Reset/i }).click(); + await userEvent.click(screen.getByRole('button', { name: /Reset/i })); expect(screen.queryByDisplayValue('abc')).not.toBeInTheDocument(); }); }); diff --git a/public/app/plugins/panel/flamegraph/components/TopTable/FlameGraphTopTableContainer.test.tsx b/public/app/plugins/panel/flamegraph/components/TopTable/FlameGraphTopTableContainer.test.tsx index 0bf006f262c..4bb58c62063 100644 --- a/public/app/plugins/panel/flamegraph/components/TopTable/FlameGraphTopTableContainer.test.tsx +++ b/public/app/plugins/panel/flamegraph/components/TopTable/FlameGraphTopTableContainer.test.tsx @@ -30,6 +30,7 @@ describe('FlameGraphTopTableContainer', () => { setSelectedBarIndex={jest.fn()} setRangeMin={jest.fn()} setRangeMax={jest.fn()} + getLabelValue={(val) => val.toString()} /> ); }; diff --git a/public/app/plugins/panel/flamegraph/components/TopTable/FlameGraphTopTableContainer.tsx b/public/app/plugins/panel/flamegraph/components/TopTable/FlameGraphTopTableContainer.tsx index 4b75ba35a2a..08c04d317cb 100644 --- a/public/app/plugins/panel/flamegraph/components/TopTable/FlameGraphTopTableContainer.tsx +++ b/public/app/plugins/panel/flamegraph/components/TopTable/FlameGraphTopTableContainer.tsx @@ -2,8 +2,8 @@ import { css } from '@emotion/css'; import React, { useCallback, useEffect, useState } from 'react'; import AutoSizer from 'react-virtualized-auto-sizer'; -import { CoreApp, createTheme, DataFrame, Field, FieldType, getDisplayProcessor } from '@grafana/data'; -import { useStyles2 } from '@grafana/ui'; +import { CoreApp, DataFrame, Field, FieldType, getDisplayProcessor } from '@grafana/data'; +import { useStyles2, useTheme2 } from '@grafana/ui'; import { PIXELS_PER_LEVEL } from '../../constants'; import { SampleUnit, SelectedView, TableData, TopTableData } from '../types'; @@ -21,6 +21,7 @@ type Props = { setSelectedBarIndex: (bar: number) => void; setRangeMin: (range: number) => void; setRangeMax: (range: number) => void; + getLabelValue: (label: string | number) => string; }; const FlameGraphTopTableContainer = ({ @@ -34,26 +35,30 @@ const FlameGraphTopTableContainer = ({ setSelectedBarIndex, setRangeMin, setRangeMax, + getLabelValue, }: Props) => { const styles = useStyles2(() => getStyles(selectedView, app)); + const theme = useTheme2(); const [topTable, setTopTable] = useState(); const valueField = data.fields.find((f) => f.name === 'value') ?? data.fields.find((f) => f.type === FieldType.number); + const selfField = data.fields.find((f) => f.name === 'self') ?? data.fields.find((f) => f.type === FieldType.number); + const labelsField = data.fields.find((f) => f.name === 'label'); const sortLevelsIntoTable = useCallback(() => { let label, self, value; let table: { [key: string]: TableData } = {}; - if (data.fields.length === 6) { - const valueValues = data.fields[1].values; - const selfValues = data.fields[2].values; - const labelValues = data.fields[3].values; + if (valueField && selfField && labelsField) { + const valueValues = valueField.values; + const selfValues = selfField.values; + const labelValues = labelsField.values; for (let i = 0; i < valueValues.length; i++) { value = valueValues.get(i); self = selfValues.get(i); - label = labelValues.get(i); + label = getLabelValue(labelValues.get(i)); table[label] = table[label] || {}; table[label].self = table[label].self ? table[label].self + self : self; table[label].total = table[label].total ? table[label].total + value : value; @@ -61,28 +66,31 @@ const FlameGraphTopTableContainer = ({ } return table; - }, [data.fields]); + }, [getLabelValue, selfField, valueField, labelsField]); - const getTopTableData = (field: Field, value: number) => { - const processor = getDisplayProcessor({ field, theme: createTheme() /* theme does not matter for us here */ }); - const displayValue = processor(value); - let unitValue = displayValue.text + displayValue.suffix; + const getTopTableData = useCallback( + (field: Field, value: number) => { + const processor = getDisplayProcessor({ field, theme }); + const displayValue = processor(value); + let unitValue = displayValue.text + displayValue.suffix; - switch (field.config.unit) { - case SampleUnit.Bytes: - break; - case SampleUnit.Nanoseconds: - break; - default: - if (!displayValue.suffix) { - // Makes sure we don't show 123undefined or something like that if suffix isn't defined - unitValue = displayValue.text; - } - break; - } + switch (field.config.unit) { + case SampleUnit.Bytes: + break; + case SampleUnit.Nanoseconds: + break; + default: + if (!displayValue.suffix) { + // Makes sure we don't show 123undefined or something like that if suffix isn't defined + unitValue = displayValue.text; + } + break; + } - return unitValue; - }; + return unitValue; + }, + [theme] + ); useEffect(() => { const table = sortLevelsIntoTable(); @@ -100,7 +108,7 @@ const FlameGraphTopTableContainer = ({ } setTopTable(topTable); - }, [data.fields, selfField, sortLevelsIntoTable, valueField]); + }, [data.fields, selfField, sortLevelsIntoTable, valueField, getTopTableData]); return ( <> diff --git a/public/app/plugins/panel/geomap/editor/StyleRuleEditor.tsx b/public/app/plugins/panel/geomap/editor/StyleRuleEditor.tsx index 1f4294db808..d395569d2b7 100644 --- a/public/app/plugins/panel/geomap/editor/StyleRuleEditor.tsx +++ b/public/app/plugins/panel/geomap/editor/StyleRuleEditor.tsx @@ -5,12 +5,14 @@ import { useObservable } from 'react-use'; import { Observable } from 'rxjs'; import { GrafanaTheme2, SelectableValue, StandardEditorProps, StandardEditorsRegistryItem } from '@grafana/data'; +import { ComparisonOperation } from '@grafana/schema'; import { Button, InlineField, InlineFieldRow, Select, useStyles2 } from '@grafana/ui'; +import { comparisonOperationOptions } from '@grafana/ui/src/components/MatchersUI/FieldValueMatcher'; import { NumberInput } from 'app/core/components/OptionsUI/NumberInput'; import { DEFAULT_STYLE_RULE } from '../layers/data/geojsonLayer'; import { defaultStyleConfig, StyleConfig } from '../style/types'; -import { ComparisonOperation, FeatureStyleConfig } from '../types'; +import { FeatureStyleConfig } from '../types'; import { getUniqueFeatureValues, LayerContentInfo } from '../utils/getFeatures'; import { getSelectionInfo } from '../utils/selection'; @@ -21,15 +23,6 @@ export interface StyleRuleEditorSettings { layerInfo: Observable; } -const comparators = [ - { label: '==', value: ComparisonOperation.EQ }, - { label: '!=', value: ComparisonOperation.NEQ }, - { label: '>', value: ComparisonOperation.GT }, - { label: '>=', value: ComparisonOperation.GTE }, - { label: '<', value: ComparisonOperation.LT }, - { label: '<=', value: ComparisonOperation.LTE }, -]; - type Props = StandardEditorProps; export const StyleRuleEditor = ({ value, onChange, item, context }: Props) => { @@ -148,8 +141,8 @@ export const StyleRuleEditor = ({ value, onChange, item, context }: Props) => { @@ -64,15 +67,30 @@ export const TableCellOptionEditor = ({ value, onChange }: Props) => { {cellType === TableCellDisplayMode.ColorBackground && ( )} - + {cellType === TableCellDisplayMode.Sparkline && ( + + )} +
    ); }; +const SparklineDisplayModeOption: SelectableValue = { + value: { type: TableCellDisplayMode.Sparkline }, + label: 'Sparkline', +}; + const cellDisplayModeOptions: Array> = [ { value: { type: TableCellDisplayMode.Auto }, label: 'Auto' }, + ...(config.featureToggles.timeSeriesTable ? [SparklineDisplayModeOption] : []), { value: { type: TableCellDisplayMode.ColorText }, label: 'Colored text' }, { value: { type: TableCellDisplayMode.ColorBackground }, label: 'Colored background' }, { value: { type: TableCellDisplayMode.Gauge }, label: 'Gauge' }, { value: { type: TableCellDisplayMode.JSONView }, label: 'JSON View' }, { value: { type: TableCellDisplayMode.Image }, label: 'Image' }, ]; + +const getStyles = (theme: GrafanaTheme2) => ({ + fixBottomMargin: css({ + marginBottom: theme.spacing(-2), + }), +}); diff --git a/public/app/plugins/panel/table/TablePanel.tsx b/public/app/plugins/panel/table/TablePanel.tsx index 3ae842d3d59..485024b55d9 100644 --- a/public/app/plugins/panel/table/TablePanel.tsx +++ b/public/app/plugins/panel/table/TablePanel.tsx @@ -56,6 +56,7 @@ export function TablePanel(props: Props) { footerOptions={options.footer} enablePagination={options.footer?.enablePagination} subData={subData} + cellHeight={options.cellHeight} /> ); diff --git a/public/app/plugins/panel/table/cells/BarGaugeCellOptionsEditor.tsx b/public/app/plugins/panel/table/cells/BarGaugeCellOptionsEditor.tsx index e8a3d04f908..6465e7284c6 100644 --- a/public/app/plugins/panel/table/cells/BarGaugeCellOptionsEditor.tsx +++ b/public/app/plugins/panel/table/cells/BarGaugeCellOptionsEditor.tsx @@ -1,32 +1,46 @@ import React from 'react'; import { SelectableValue } from '@grafana/data'; -import { BarGaugeDisplayMode, TableBarGaugeCellOptions } from '@grafana/schema'; -import { Field, HorizontalGroup, Select } from '@grafana/ui'; +import { Stack } from '@grafana/experimental'; +import { BarGaugeDisplayMode, BarGaugeValueMode, TableBarGaugeCellOptions } from '@grafana/schema'; +import { Field, RadioButtonGroup, Select } from '@grafana/ui'; import { TableCellEditorProps } from '../TableCellOptionEditor'; +type Props = TableCellEditorProps; + +export function BarGaugeCellOptionsEditor({ cellOptions, onChange }: Props) { + // Set the display mode on change + const onCellOptionsChange = (v: SelectableValue) => { + cellOptions.mode = v.value; + onChange(cellOptions); + }; + + const onValueModeChange = (v: BarGaugeValueMode) => { + cellOptions.valueDisplayMode = v; + onChange(cellOptions); + }; + + return ( + + + - - - ); -}; +const valueModes: SelectableValue[] = [ + { value: BarGaugeValueMode.Color, label: 'Value color' }, + { value: BarGaugeValueMode.Text, label: 'Text color' }, + { value: BarGaugeValueMode.Hidden, label: 'Hidden' }, +]; diff --git a/public/app/plugins/panel/table/cells/ColorBackgroundCellOptionsEditor.tsx b/public/app/plugins/panel/table/cells/ColorBackgroundCellOptionsEditor.tsx index 7650d51ec78..1b794902bdf 100644 --- a/public/app/plugins/panel/table/cells/ColorBackgroundCellOptionsEditor.tsx +++ b/public/app/plugins/panel/table/cells/ColorBackgroundCellOptionsEditor.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { SelectableValue } from '@grafana/data'; import { TableCellBackgroundDisplayMode, TableColoredBackgroundCellOptions } from '@grafana/schema'; -import { HorizontalGroup, Select, Field } from '@grafana/ui'; +import { Select, Field } from '@grafana/ui'; import { TableCellEditorProps } from '../TableCellOptionEditor'; @@ -22,10 +22,8 @@ export const ColorBackgroundCellOptionsEditor = ({ }; return ( - - - + ); }; diff --git a/public/app/plugins/panel/table/cells/SparklineCellOptionsEditor.tsx b/public/app/plugins/panel/table/cells/SparklineCellOptionsEditor.tsx new file mode 100644 index 00000000000..2e7ade9d591 --- /dev/null +++ b/public/app/plugins/panel/table/cells/SparklineCellOptionsEditor.tsx @@ -0,0 +1,79 @@ +import { css } from '@emotion/css'; +import React, { useMemo } from 'react'; + +import { createFieldConfigRegistry } from '@grafana/data'; +import { GraphFieldConfig, TableSparklineCellOptions } from '@grafana/schema'; +import { VerticalGroup, Field, useStyles2 } from '@grafana/ui'; +import { defaultSparklineCellConfig } from '@grafana/ui/src/components/Table/SparklineCell'; + +import { getGraphFieldConfig } from '../../timeseries/config'; +import { TableCellEditorProps } from '../TableCellOptionEditor'; + +type OptionKey = keyof TableSparklineCellOptions; + +const optionIds: Array = [ + 'drawStyle', + 'lineInterpolation', + 'barAlignment', + 'lineWidth', + 'fillOpacity', + 'gradientMode', + 'lineStyle', + 'spanNulls', + 'showPoints', + 'pointSize', +]; + +export const SparklineCellOptionsEditor = (props: TableCellEditorProps) => { + const { cellOptions, onChange } = props; + + const registry = useMemo(() => { + const config = getGraphFieldConfig(defaultSparklineCellConfig); + return createFieldConfigRegistry(config, 'ChartCell'); + }, []); + + const style = useStyles2(getStyles); + + const values = { ...defaultSparklineCellConfig, ...cellOptions }; + + return ( + + {registry.list(optionIds.map((id) => `custom.${id}`)).map((item) => { + if (item.showIf && !item.showIf(values)) { + return null; + } + const Editor = item.editor; + const path = item.path; + + return ( + + onChange({ ...cellOptions, [path]: val })} + value={(isOptionKey(path, values) ? values[path] : undefined) ?? item.defaultValue} + item={item} + context={{ data: [] }} + /> + + ); + })} + + ); +}; + +// jumping through hoops to avoid using "any" +function isOptionKey(key: string, options: TableSparklineCellOptions): key is OptionKey { + return key in options; +} + +const getStyles = () => ({ + field: css` + width: 100%; + + // @TODO don't show "scheme" option for custom gradient mode. + // it needs thresholds to work, which are not supported + // for area chart cell right now + [title='Use color scheme to define gradient'] { + display: none; + } + `, +}); diff --git a/public/app/plugins/panel/table/module.tsx b/public/app/plugins/panel/table/module.tsx index 9604f5c2df7..9b90878c2a1 100644 --- a/public/app/plugins/panel/table/module.tsx +++ b/public/app/plugins/panel/table/module.tsx @@ -7,7 +7,13 @@ import { standardEditorsRegistry, identityOverrideProcessor, } from '@grafana/data'; -import { TableFieldOptions, TableCellOptions, TableCellDisplayMode, defaultTableFieldOptions } from '@grafana/schema'; +import { + TableFieldOptions, + TableCellOptions, + TableCellDisplayMode, + defaultTableFieldOptions, + TableCellHeight, +} from '@grafana/schema'; import { PaginationEditor } from './PaginationEditor'; import { TableCellOptionEditor } from './TableCellOptionEditor'; @@ -17,7 +23,7 @@ import { PanelOptions, defaultPanelOptions } from './panelcfg.gen'; import { TableSuggestionsSupplier } from './suggestions'; const footerCategory = 'Table footer'; -const cellCategory = ['Cell Options']; +const cellCategory = ['Cell options']; export const plugin = new PanelPlugin(TablePanel) .setPanelChangeHandler(tablePanelChangedHandler) @@ -64,7 +70,7 @@ export const plugin = new PanelPlugin(TablePane .addCustomEditor({ id: 'cellOptions', path: 'cellOptions', - name: 'Cell Type', + name: 'Cell type', editor: TableCellOptionEditor, override: TableCellOptionEditor, defaultValue: defaultTableFieldOptions.cellOptions, @@ -108,6 +114,18 @@ export const plugin = new PanelPlugin(TablePane name: 'Show table header', defaultValue: defaultPanelOptions.showHeader, }) + .addRadio({ + path: 'cellHeight', + name: 'Cell height', + defaultValue: defaultPanelOptions.cellHeight, + settings: { + options: [ + { value: TableCellHeight.Sm, label: 'Small' }, + { value: TableCellHeight.Md, label: 'Medium' }, + { value: TableCellHeight.Lg, label: 'Large' }, + ], + }, + }) .addBooleanSwitch({ path: 'showRowNums', name: 'Show row numbers', diff --git a/public/app/plugins/panel/table/panelcfg.cue b/public/app/plugins/panel/table/panelcfg.cue index a574c08d6b2..9233430d79c 100644 --- a/public/app/plugins/panel/table/panelcfg.cue +++ b/public/app/plugins/panel/table/panelcfg.cue @@ -45,6 +45,8 @@ composableKinds: PanelCfg: { // Represents the selected calculations reducer: [] } + // Controls the height of the rows + cellHeight?: ui.TableCellHeight | *"sm" } @cuetsy(kind="interface") }, ] diff --git a/public/app/plugins/panel/table/panelcfg.gen.ts b/public/app/plugins/panel/table/panelcfg.gen.ts index c0533fcb87a..7b578df36bf 100644 --- a/public/app/plugins/panel/table/panelcfg.gen.ts +++ b/public/app/plugins/panel/table/panelcfg.gen.ts @@ -13,6 +13,10 @@ import * as ui from '@grafana/schema'; export const PanelCfgModelVersion = Object.freeze([0, 0]); export interface PanelOptions { + /** + * Controls the height of the rows + */ + cellHeight?: ui.TableCellHeight; /** * Controls footer options */ @@ -40,6 +44,7 @@ export interface PanelOptions { } export const defaultPanelOptions: Partial = { + cellHeight: ui.TableCellHeight.Sm, footer: { /** * Controls whether the footer should be shown diff --git a/public/app/plugins/panel/timeseries/migrations.ts b/public/app/plugins/panel/timeseries/migrations.ts index dff624293a9..b45f6cf1e58 100644 --- a/public/app/plugins/panel/timeseries/migrations.ts +++ b/public/app/plugins/panel/timeseries/migrations.ts @@ -46,7 +46,7 @@ export const graphPanelChangedHandler: PanelTypeChangedHandler = ( ) => { // Changing from angular/flot panel to react/uPlot if (prevPluginId === 'graph' && prevOptions.angular) { - const { fieldConfig, options } = flotToGraphOptions({ + const { fieldConfig, options } = graphToTimeseriesOptions({ ...prevOptions.angular, fieldConfig: prevFieldConfig, }); @@ -61,7 +61,7 @@ export const graphPanelChangedHandler: PanelTypeChangedHandler = ( return {}; }; -export function flotToGraphOptions(angular: any): { fieldConfig: FieldConfigSource; options: TimeSeriesOptions } { +export function graphToTimeseriesOptions(angular: any): { fieldConfig: FieldConfigSource; options: TimeSeriesOptions } { const overrides: ConfigOverrideRule[] = angular.fieldConfig?.overrides ?? []; const yaxes = angular.yaxes ?? []; let y1 = getFieldConfigFromOldAxis(yaxes[0]); diff --git a/public/app/plugins/panel/timeseries/plugins/AnnotationEditorPlugin.tsx b/public/app/plugins/panel/timeseries/plugins/AnnotationEditorPlugin.tsx index c66e91972f9..a74425947f1 100644 --- a/public/app/plugins/panel/timeseries/plugins/AnnotationEditorPlugin.tsx +++ b/public/app/plugins/panel/timeseries/plugins/AnnotationEditorPlugin.tsx @@ -22,7 +22,7 @@ interface AnnotationEditorPluginProps { /** * @alpha */ -export const AnnotationEditorPlugin: React.FC = ({ data, timeZone, config, children }) => { +export const AnnotationEditorPlugin = ({ data, timeZone, config, children }: AnnotationEditorPluginProps) => { const plotInstance = useRef(); const [bbox, setBbox] = useState(); const [isAddingAnnotation, setIsAddingAnnotation] = useState(false); diff --git a/public/app/plugins/panel/timeseries/plugins/AnnotationsPlugin.tsx b/public/app/plugins/panel/timeseries/plugins/AnnotationsPlugin.tsx index 936e93e6d77..c190a814b6b 100644 --- a/public/app/plugins/panel/timeseries/plugins/AnnotationsPlugin.tsx +++ b/public/app/plugins/panel/timeseries/plugins/AnnotationsPlugin.tsx @@ -13,7 +13,7 @@ interface AnnotationsPluginProps { timeZone: TimeZone; } -export const AnnotationsPlugin: React.FC = ({ annotations, timeZone, config }) => { +export const AnnotationsPlugin = ({ annotations, timeZone, config }: AnnotationsPluginProps) => { const theme = useTheme2(); const plotInstance = useRef(); diff --git a/public/app/plugins/panel/timeseries/plugins/ContextMenuPlugin.tsx b/public/app/plugins/panel/timeseries/plugins/ContextMenuPlugin.tsx index 76a99cbfce6..3a28507a14c 100644 --- a/public/app/plugins/panel/timeseries/plugins/ContextMenuPlugin.tsx +++ b/public/app/plugins/panel/timeseries/plugins/ContextMenuPlugin.tsx @@ -32,14 +32,14 @@ interface ContextMenuPluginProps { replaceVariables?: InterpolateFunction; } -export const ContextMenuPlugin: React.FC = ({ +export const ContextMenuPlugin = ({ data, config, onClose, timeZone, replaceVariables, ...otherProps -}) => { +}: ContextMenuPluginProps) => { const plotCanvas = useRef(); const [coords, setCoords] = useState(null); const [point, setPoint] = useState(null); @@ -208,14 +208,14 @@ interface ContextMenuViewProps { replaceVariables?: InterpolateFunction; } -export const ContextMenuView: React.FC = ({ +export const ContextMenuView = ({ selection, timeZone, defaultItems, replaceVariables, data, ...otherProps -}) => { +}: ContextMenuViewProps) => { const ref = useRef(null); const onClose = () => { diff --git a/public/app/plugins/panel/timeseries/plugins/ExemplarMarker.tsx b/public/app/plugins/panel/timeseries/plugins/ExemplarMarker.tsx index a7d588b452f..5cb502818e3 100644 --- a/public/app/plugins/panel/timeseries/plugins/ExemplarMarker.tsx +++ b/public/app/plugins/panel/timeseries/plugins/ExemplarMarker.tsx @@ -25,14 +25,14 @@ interface ExemplarMarkerProps { exemplarColor?: string; } -export const ExemplarMarker: React.FC = ({ +export const ExemplarMarker = ({ timeZone, dataFrame, dataFrameFieldIndex, config, getFieldLinks, exemplarColor, -}) => { +}: ExemplarMarkerProps) => { const styles = useStyles2(getExemplarMarkerStyles); const [isOpen, setIsOpen] = useState(false); const [markerElement, setMarkerElement] = React.useState(null); diff --git a/public/app/plugins/panel/timeseries/plugins/ExemplarsPlugin.tsx b/public/app/plugins/panel/timeseries/plugins/ExemplarsPlugin.tsx index 7539afc8671..c9d0d254e4d 100644 --- a/public/app/plugins/panel/timeseries/plugins/ExemplarsPlugin.tsx +++ b/public/app/plugins/panel/timeseries/plugins/ExemplarsPlugin.tsx @@ -23,13 +23,13 @@ interface ExemplarsPluginProps { visibleSeries?: VisibleExemplarLabels; } -export const ExemplarsPlugin: React.FC = ({ +export const ExemplarsPlugin = ({ exemplars, timeZone, getFieldLinks, config, visibleSeries, -}) => { +}: ExemplarsPluginProps) => { const plotInstance = useRef(); useLayoutEffect(() => { diff --git a/public/app/plugins/panel/timeseries/plugins/OutsideRangePlugin.tsx b/public/app/plugins/panel/timeseries/plugins/OutsideRangePlugin.tsx index d088f9f9d63..f75057f6f7f 100644 --- a/public/app/plugins/panel/timeseries/plugins/OutsideRangePlugin.tsx +++ b/public/app/plugins/panel/timeseries/plugins/OutsideRangePlugin.tsx @@ -9,7 +9,7 @@ interface ThresholdControlsPluginProps { onChangeTimeRange: (timeRange: AbsoluteTimeRange) => void; } -export const OutsideRangePlugin: React.FC = ({ config, onChangeTimeRange }) => { +export const OutsideRangePlugin = ({ config, onChangeTimeRange }: ThresholdControlsPluginProps) => { const plotInstance = useRef(); const [timevalues, setTimeValues] = useState([]); const [timeRange, setTimeRange] = useState(); diff --git a/public/app/plugins/panel/timeseries/plugins/ThresholdControlsPlugin.tsx b/public/app/plugins/panel/timeseries/plugins/ThresholdControlsPlugin.tsx index 295f28a388a..ae05da876d2 100644 --- a/public/app/plugins/panel/timeseries/plugins/ThresholdControlsPlugin.tsx +++ b/public/app/plugins/panel/timeseries/plugins/ThresholdControlsPlugin.tsx @@ -14,11 +14,7 @@ interface ThresholdControlsPluginProps { onThresholdsChange?: (thresholds: ThresholdsConfig) => void; } -export const ThresholdControlsPlugin: React.FC = ({ - config, - fieldConfig, - onThresholdsChange, -}) => { +export const ThresholdControlsPlugin = ({ config, fieldConfig, onThresholdsChange }: ThresholdControlsPluginProps) => { const plotInstance = useRef(); const [renderToken, setRenderToken] = useState(0); diff --git a/public/app/plugins/panel/timeseries/plugins/ThresholdDragHandle.tsx b/public/app/plugins/panel/timeseries/plugins/ThresholdDragHandle.tsx index dd58f9b3755..a6446933858 100644 --- a/public/app/plugins/panel/timeseries/plugins/ThresholdDragHandle.tsx +++ b/public/app/plugins/panel/timeseries/plugins/ThresholdDragHandle.tsx @@ -17,14 +17,14 @@ interface ThresholdDragHandleProps { formatValue: (value: number) => string; } -export const ThresholdDragHandle: React.FC = ({ +export const ThresholdDragHandle = ({ step, y, dragBounds, mapPositionToValue, formatValue, onChange, -}) => { +}: ThresholdDragHandleProps) => { const theme = useTheme2(); let yPos = y; let outOfBounds: OutOfBounds = 'none'; diff --git a/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationEditor.tsx b/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationEditor.tsx index ad2e9cee156..686c076fc86 100644 --- a/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationEditor.tsx +++ b/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationEditor.tsx @@ -19,7 +19,7 @@ interface AnnotationEditorProps extends HTMLAttributes { annotation?: AnnotationsDataFrameViewDTO; } -export const AnnotationEditor: React.FC = ({ +export const AnnotationEditor = ({ onDismiss, onSave, timeZone, @@ -27,7 +27,7 @@ export const AnnotationEditor: React.FC = ({ selection, annotation, style, -}) => { +}: AnnotationEditorProps) => { const theme = useTheme2(); const styles = useStyles2(getStyles); const commonStyles = useStyles2(getCommonAnnotationStyles); diff --git a/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationTooltip.tsx b/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationTooltip.tsx index da85261f39f..6820d455b21 100644 --- a/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationTooltip.tsx +++ b/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationTooltip.tsx @@ -3,9 +3,7 @@ import React from 'react'; import { GrafanaTheme2, textUtil } from '@grafana/data'; import { HorizontalGroup, IconButton, Tag, useStyles2 } from '@grafana/ui'; -import config from 'app/core/config'; import alertDef from 'app/features/alerting/state/alertDef'; -import { CommentManager } from 'app/features/comments/CommentManager'; import { AnnotationsDataFrameViewDTO } from '../types'; @@ -64,10 +62,8 @@ export const AnnotationTooltip = ({ ); } - const areAnnotationCommentsEnabled = config.featureToggles.annotationComments; - return ( -
    +
    @@ -91,11 +87,6 @@ export const AnnotationTooltip = ({ ))} - {areAnnotationCommentsEnabled && ( -
    - -
    - )}
    ); diff --git a/public/app/plugins/panel/timeseries/utils.ts b/public/app/plugins/panel/timeseries/utils.ts index f6a1219556d..9a1dc00f449 100644 --- a/public/app/plugins/panel/timeseries/utils.ts +++ b/public/app/plugins/panel/timeseries/utils.ts @@ -12,6 +12,7 @@ import { SortedVector, TimeRange, } from '@grafana/data'; +import { convertFieldType } from '@grafana/data/src/transformations/transformers/convertFieldType'; import { GraphFieldConfig, LineInterpolation } from '@grafana/schema'; import { applyNullInsertThreshold } from '@grafana/ui/src/components/GraphNG/nullInsertThreshold'; import { nullToValue } from '@grafana/ui/src/components/GraphNG/nullToValue'; @@ -29,6 +30,17 @@ export function prepareGraphableFields( return null; } + // some datasources simply tag the field as time, but don't convert to milli epochs + // so we're stuck with doing the parsing here to avoid Moment slowness everywhere later + // this mutates (once) + for (let frame of series) { + for (let field of frame.fields) { + if (field.type === FieldType.time && typeof field.values.get(0) !== 'number') { + field.values = convertFieldType(field, { destinationType: FieldType.time }).values; + } + } + } + if (series.every((df) => df.meta?.type === DataFrameType.TimeSeriesLong)) { series = prepareTimeSeriesLong(series); } diff --git a/public/app/plugins/panel/traces/TracesPanel.tsx b/public/app/plugins/panel/traces/TracesPanel.tsx index 35393be714d..95e5a4a5bee 100644 --- a/public/app/plugins/panel/traces/TracesPanel.tsx +++ b/public/app/plugins/panel/traces/TracesPanel.tsx @@ -17,7 +17,7 @@ const styles = { `, }; -export const TracesPanel: React.FunctionComponent = ({ data }) => { +export const TracesPanel = ({ data }: PanelProps) => { const topOfViewRef = createRef(); const traceProp = useMemo(() => transformDataFrames(data.series[0]), [data.series]); const { search, setSearch, spanFindMatches } = useSearch(traceProp?.spans); diff --git a/public/app/plugins/panel/welcome/Welcome.tsx b/public/app/plugins/panel/welcome/Welcome.tsx index 4c5b7f5bb89..b427770b63b 100644 --- a/public/app/plugins/panel/welcome/Welcome.tsx +++ b/public/app/plugins/panel/welcome/Welcome.tsx @@ -1,5 +1,5 @@ import { css } from '@emotion/css'; -import React, { FC } from 'react'; +import React from 'react'; import { GrafanaTheme2 } from '@grafana/data'; import { useStyles2 } from '@grafana/ui'; @@ -11,7 +11,7 @@ const helpOptions = [ { value: 3, label: 'Public Slack', href: 'http://slack.grafana.com' }, ]; -export const WelcomeBanner: FC = () => { +export const WelcomeBanner = () => { const styles = useStyles2(getStyles); return ( diff --git a/public/app/plugins/panel/xychart/XYChartPanel.old b/public/app/plugins/panel/xychart/XYChartPanel.old index a446d74d7b2..879f8d4ef83 100644 --- a/public/app/plugins/panel/xychart/XYChartPanel.old +++ b/public/app/plugins/panel/xychart/XYChartPanel.old @@ -6,7 +6,7 @@ import { prepData, prepScatter } from './scatter'; interface XYChartPanelProps extends PanelProps {} -export const XYChartPanel: React.FC = ({ +export const XYChartPanel = ({ data, width, height, @@ -14,7 +14,7 @@ export const XYChartPanel: React.FC = ({ fieldConfig, timeRange, //onFieldConfigChange, -}) => { +}: XYChartPanelProps) => { const theme = useTheme2(); const info = useMemo(() => { diff --git a/public/app/plugins/panel/xychart/XYChartPanel2.tsx b/public/app/plugins/panel/xychart/XYChartPanel2.tsx index cadfd88179e..83b01bcfa31 100644 --- a/public/app/plugins/panel/xychart/XYChartPanel2.tsx +++ b/public/app/plugins/panel/xychart/XYChartPanel2.tsx @@ -33,7 +33,7 @@ import { PanelOptions, ScatterHoverEvent, ScatterSeries } from './types'; type Props = PanelProps; const TOOLTIP_OFFSET = 10; -export const XYChartPanel2: React.FC = (props: Props) => { +export const XYChartPanel2 = (props: Props) => { const [error, setError] = useState(); const [series, setSeries] = useState([]); const [builder, setBuilder] = useState(); diff --git a/public/app/routes/routes.tsx b/public/app/routes/routes.tsx index 20fff70cf77..c3bb8ac060d 100644 --- a/public/app/routes/routes.tsx +++ b/public/app/routes/routes.tsx @@ -185,15 +185,14 @@ export function getAppRoutes(): RouteDescriptor[] { }, { path: '/dashboards/f/:uid/:slug/permissions', - component: - config.rbacEnabled && contextSrv.hasPermission(AccessControlAction.FoldersPermissionsRead) - ? SafeDynamicImport( - () => - import(/* webpackChunkName: "FolderPermissions"*/ 'app/features/folders/AccessControlFolderPermissions') - ) - : SafeDynamicImport( - () => import(/* webpackChunkName: "FolderPermissions"*/ 'app/features/folders/FolderPermissions') - ), + component: config.rbacEnabled + ? SafeDynamicImport( + () => + import(/* webpackChunkName: "FolderPermissions"*/ 'app/features/folders/AccessControlFolderPermissions') + ) + : SafeDynamicImport( + () => import(/* webpackChunkName: "FolderPermissions"*/ 'app/features/folders/FolderPermissions') + ), }, { path: '/dashboards/f/:uid/:slug/settings', @@ -581,9 +580,10 @@ export function getDynamicDashboardRoutes(cfg = config): RouteDescriptor[] { ), }, { - path: '/scenes/embedded/:name', + path: '/scenes/grafana-monitoring', + exact: false, component: SafeDynamicImport( - () => import(/* webpackChunkName: "scenes"*/ 'app/features/scenes/SceneEmbeddedPage') + () => import(/* webpackChunkName: "scenes"*/ 'app/features/scenes/apps/GrafanaMonitoringApp') ), }, { diff --git a/public/app/types/explore.ts b/public/app/types/explore.ts index 38678696ce4..5d97a69b4d0 100644 --- a/public/app/types/explore.ts +++ b/public/app/types/explore.ts @@ -87,7 +87,7 @@ export interface ExploreState { } export const EXPLORE_GRAPH_STYLES = ['lines', 'bars', 'points', 'stacked_lines', 'stacked_bars'] as const; -export type ExploreGraphStyle = typeof EXPLORE_GRAPH_STYLES[number]; +export type ExploreGraphStyle = (typeof EXPLORE_GRAPH_STYLES)[number]; export interface ExploreItemState { /** @@ -264,7 +264,7 @@ export enum TABLE_RESULTS_STYLE { raw = 'raw', } export const TABLE_RESULTS_STYLES = [TABLE_RESULTS_STYLE.table, TABLE_RESULTS_STYLE.raw]; -export type TableResultsStyle = typeof TABLE_RESULTS_STYLES[number]; +export type TableResultsStyle = (typeof TABLE_RESULTS_STYLES)[number]; export interface SupplementaryQuery { enabled: boolean; diff --git a/public/locales/de-DE/grafana.json b/public/locales/de-DE/grafana.json index 82ce8b0468d..444a8897ff9 100644 --- a/public/locales/de-DE/grafana.json +++ b/public/locales/de-DE/grafana.json @@ -32,7 +32,6 @@ }, "dashboard": { "inspect": { - "actions-tab": "Aktionen", "data-tab": "Daten", "error-tab": "Fehler", "json-tab": "JSON", diff --git a/public/locales/en-US/grafana.json b/public/locales/en-US/grafana.json index 77978f893c5..d30697295a1 100644 --- a/public/locales/en-US/grafana.json +++ b/public/locales/en-US/grafana.json @@ -32,7 +32,6 @@ }, "dashboard": { "inspect": { - "actions-tab": "Actions", "data-tab": "Data", "error-tab": "Error", "json-tab": "JSON", diff --git a/public/locales/es-ES/grafana.json b/public/locales/es-ES/grafana.json index 4030d4aaf87..ffe76941eb9 100644 --- a/public/locales/es-ES/grafana.json +++ b/public/locales/es-ES/grafana.json @@ -32,7 +32,6 @@ }, "dashboard": { "inspect": { - "actions-tab": "Acciones", "data-tab": "Datos", "error-tab": "Error", "json-tab": "JSON", diff --git a/public/locales/fr-FR/grafana.json b/public/locales/fr-FR/grafana.json index e684abfd899..2dbf6848724 100644 --- a/public/locales/fr-FR/grafana.json +++ b/public/locales/fr-FR/grafana.json @@ -32,7 +32,6 @@ }, "dashboard": { "inspect": { - "actions-tab": "Actions", "data-tab": "Données", "error-tab": "Erreur", "json-tab": "JSON", diff --git a/public/locales/pseudo-LOCALE/grafana.json b/public/locales/pseudo-LOCALE/grafana.json index 3a9dd97dc82..b8e05e65ae7 100644 --- a/public/locales/pseudo-LOCALE/grafana.json +++ b/public/locales/pseudo-LOCALE/grafana.json @@ -32,7 +32,6 @@ }, "dashboard": { "inspect": { - "actions-tab": "Åčŧįőʼnş", "data-tab": "Đäŧä", "error-tab": "Ēřřőř", "json-tab": "ĴŜØŃ", diff --git a/public/locales/zh-Hans/grafana.json b/public/locales/zh-Hans/grafana.json index 907485f55ca..a7603565155 100644 --- a/public/locales/zh-Hans/grafana.json +++ b/public/locales/zh-Hans/grafana.json @@ -32,7 +32,6 @@ }, "dashboard": { "inspect": { - "actions-tab": "操作", "data-tab": "数据", "error-tab": "错误", "json-tab": "JSON", diff --git a/public/sass/_variables.dark.generated.scss b/public/sass/_variables.dark.generated.scss index 2d8026af48b..e1197d4f35e 100644 --- a/public/sass/_variables.dark.generated.scss +++ b/public/sass/_variables.dark.generated.scss @@ -356,9 +356,6 @@ $diff-json-changed-num: $text-color; $diff-json-icon: $gray-5; -//Submenu -$variable-option-bg: $dropdownLinkBackgroundHover; - //Switch Slider // ------------------------- $switch-bg: $input-bg; diff --git a/public/sass/_variables.light.generated.scss b/public/sass/_variables.light.generated.scss index c7022ca3136..84147e39fc4 100644 --- a/public/sass/_variables.light.generated.scss +++ b/public/sass/_variables.light.generated.scss @@ -353,9 +353,6 @@ $diff-json-changed-num: $gray-4; $diff-json-icon: $gray-4; -//Submenu -$variable-option-bg: $dropdownLinkBackgroundHover; - //Switch Slider // ------------------------- $switch-bg: $white; diff --git a/public/sass/components/_submenu.scss b/public/sass/components/_submenu.scss index b253b8b86be..3b97b28a940 100644 --- a/public/sass/components/_submenu.scss +++ b/public/sass/components/_submenu.scss @@ -8,15 +8,6 @@ padding: 0 0 $space-sm 0; } -.annotation-segment { - padding: 8px 7px; - - label.cr1 { - margin-left: 5px; - margin-top: 3px; - } -} - .submenu-item { display: inline-block; @@ -30,114 +21,7 @@ } } -.variable-value-link { - max-width: 500px; - padding-right: 10px; - padding: 0 $space-sm; - background-color: $input-bg; - border: 1px solid $input-border-color; - border-radius: $input-border-radius; - display: flex; - align-items: center; - color: $text-color; - height: $input-height; - - .label-tag { - margin: 0 5px; - } -} - .variable-link-wrapper { display: inline-block; position: relative; } - -.variable-value-dropdown { - position: absolute; - top: $input-height; - min-width: 150px; - max-height: 400px; - min-height: 150px; - overflow-y: auto; - overflow-x: hidden; - background-color: $dropdownBackground; - box-shadow: $dropdownShadow; - z-index: $zindex-typeahead; - font-size: $font-size-base; - border-radius: 3px 3px 0 0; - border: 1px solid $tight-form-func-bg; - - &.multi { - .selected { - .variable-option-icon { - background: url($checkboxImageUrl) 0px -18px no-repeat; - } - } - } - - &.single { - .variable-option-icon { - display: none; - } - .selected { - background-color: $tight-form-func-highlight-bg; - } - } -} - -.variable-options-wrapper { - display: table; - width: 100%; -} - -.variable-options-column { - max-height: 350px; - display: table-cell; - line-height: 26px; - &:nth-child(2) { - border-left: 1px solid $tight-form-func-bg; - } -} - -.variable-option-tag, -.variable-option, -.variable-options-column-header { - display: block; - padding: 2px 27px 0 8px; - position: relative; - white-space: nowrap; - min-width: 115px; -} - -.variable-options-column-header { - padding-top: 5px; - padding-bottom: 5px; - margin-bottom: 5px; - &.many-selected { - .variable-option-icon { - background: url($checkboxImageUrl) 0px -36px no-repeat; - } - } -} - -.variable-option-icon { - display: inline-block; - width: 24px; - height: 18px; - position: relative; - top: 4px; - background: url($checkboxImageUrl) left top no-repeat; -} - -.variable-option { - &:hover, - &.highlighted { - background-color: $variable-option-bg; - } -} - -.dash-nav-link { - padding: 8px 7px; - display: inline-block; - color: $text-color; -} diff --git a/public/test/mocks/datasource_srv.ts b/public/test/mocks/datasource_srv.ts index 90c182b657c..af815da4d90 100644 --- a/public/test/mocks/datasource_srv.ts +++ b/public/test/mocks/datasource_srv.ts @@ -60,6 +60,12 @@ export class MockDataSourceApi extends DataSourceApi { testDatasource() { return Promise.resolve(); } + + setupMixed(value: boolean) { + this.meta = this.meta || {}; + this.meta.mixed = value; + return this; + } } export class MockObservableDataSourceApi extends DataSourceApi { diff --git a/public/test/mocks/getGrafanaContextMock.ts b/public/test/mocks/getGrafanaContextMock.ts index d84e6c8e305..feb0155cabd 100644 --- a/public/test/mocks/getGrafanaContextMock.ts +++ b/public/test/mocks/getGrafanaContextMock.ts @@ -1,15 +1,15 @@ import { GrafanaConfig } from '@grafana/data'; -import { BackendSrv, LocationService } from '@grafana/runtime'; +import { LocationService } from '@grafana/runtime'; import { AppChromeService } from 'app/core/components/AppChrome/AppChromeService'; import { GrafanaContextType } from 'app/core/context/GrafanaContext'; +import { backendSrv } from 'app/core/services/backend_srv'; import { KeybindingSrv } from 'app/core/services/keybindingSrv'; /** Not sure what this should evolve into, just a starting point */ export function getGrafanaContextMock(overrides: Partial = {}): GrafanaContextType { return { chrome: new AppChromeService(), - // eslint-disable-next-line - backend: {} as BackendSrv, + backend: backendSrv, // eslint-disable-next-line location: {} as LocationService, // eslint-disable-next-line diff --git a/public/test/mocks/query.ts b/public/test/mocks/query.ts new file mode 100644 index 00000000000..92dcec063fb --- /dev/null +++ b/public/test/mocks/query.ts @@ -0,0 +1,30 @@ +import { CoreApp, DataQueryRequest, getDefaultTimeRange } from '@grafana/data'; +import { DataQuery, DataSourceRef } from '@grafana/schema'; + +export class MockQuery implements DataQuery { + refId: string; + testQuery: string; + datasource?: DataSourceRef; + + constructor(refId = 'A', testQuery = '', datasourceRef?: DataSourceRef) { + this.refId = refId; + this.testQuery = testQuery; + this.datasource = datasourceRef; + } +} + +export class MockDataQueryRequest implements DataQueryRequest { + app = CoreApp.Unknown; + interval = ''; + intervalMs = 0; + range = getDefaultTimeRange(); + requestId = '1'; + scopedVars = {}; + startTime = 0; + targets: MockQuery[]; + timezone = 'utc'; + + constructor({ targets }: { targets: MockQuery[] }) { + this.targets = targets || []; + } +} diff --git a/scripts/drone/steps/lib.star b/scripts/drone/steps/lib.star index d3481ab1e83..34d672b1f26 100644 --- a/scripts/drone/steps/lib.star +++ b/scripts/drone/steps/lib.star @@ -8,7 +8,7 @@ load( "prerelease_bucket", ) -grabpl_version = "v3.0.21" +grabpl_version = "v3.0.30" build_image = "grafana/build-container:1.7.2" publish_image = "grafana/grafana-ci-deploy:1.3.3" deploy_docker_image = "us.gcr.io/kubernetes-dev/drone/plugins/deploy-image" @@ -1481,7 +1481,6 @@ def trigger_test_release(): "image": build_image, "environment": { "GITHUB_TOKEN": from_secret("github_token_pr"), - "DOWNSTREAM_REPO": from_secret("downstream"), "TEST_TAG": "v0.0.0-test", }, "commands": [ diff --git a/scripts/drone/vault.star b/scripts/drone/vault.star index 09a6bae3009..be4a4be0c70 100644 --- a/scripts/drone/vault.star +++ b/scripts/drone/vault.star @@ -94,4 +94,29 @@ def secrets(): "secret/data/common/aws-marketplace", "aws_secret_access_key", ), + vault_secret( + "security_dest_bucket", + "infra/data/ci/grafana-release-eng/security-bucket", + "bucket", + ), + vault_secret( + "static_asset_editions", + "infra/data/ci/grafana-release-eng/artifact-publishing", + "static_asset_editions", + ), + vault_secret( + "enterprise2_security_prefix", + "infra/data/ci/grafana-release-eng/enterprise2", + "security_prefix", + ), + vault_secret( + "enterprise2-cdn-path", + "infra/data/ci/grafana-release-eng/enterprise2", + "cdn_path", + ), + vault_secret( + "enterprise2_security_prefix", + "infra/data/ci/grafana-release-eng/enterprise2", + "security_prefix", + ), ] diff --git a/scripts/webpack/webpack.dev.js b/scripts/webpack/webpack.dev.js index c549a5275a1..89d6962f83c 100644 --- a/scripts/webpack/webpack.dev.js +++ b/scripts/webpack/webpack.dev.js @@ -88,8 +88,8 @@ module.exports = (env = {}) => }, }, }), - // next major version of ForkTsChecker is dropping support for ESLint new ESLintPlugin({ + cache: true, lintDirtyModulesOnly: true, // don't lint on start, only lint changed files extensions: ['.ts', '.tsx'], }), diff --git a/yarn.lock b/yarn.lock index dee304cd9a3..786797f0bc6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -106,6 +106,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.20.5": + version: 7.21.0 + resolution: "@babel/compat-data@npm:7.21.0" + checksum: dbf632c532f9c75ba0be7d1dc9f6cd3582501af52f10a6b90415d634ec5878735bd46064c91673b10317af94d4cc99c4da5bd9d955978cdccb7905fc33291e4d + languageName: node + linkType: hard + "@babel/core@npm:7.12.9": version: 7.12.9 resolution: "@babel/core@npm:7.12.9" @@ -541,6 +548,21 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helper-compilation-targets@npm:7.20.7" + dependencies: + "@babel/compat-data": ^7.20.5 + "@babel/helper-validator-option": ^7.18.6 + browserslist: ^4.21.3 + lru-cache: ^5.1.1 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 8c32c873ba86e2e1805b30e0807abd07188acbe00ebb97576f0b09061cc65007f1312b589eccb4349c5a8c7f8bb9f2ab199d41da7030bf103d9f347dcd3a3cf4 + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-create-class-features-plugin@npm:7.18.6" @@ -1807,18 +1829,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-object-rest-spread@npm:7.20.2, @babel/plugin-proposal-object-rest-spread@npm:^7.20.2": - version: 7.20.2 - resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.2" +"@babel/plugin-proposal-object-rest-spread@npm:7.20.7": + version: 7.20.7 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.7" dependencies: - "@babel/compat-data": ^7.20.1 - "@babel/helper-compilation-targets": ^7.20.0 + "@babel/compat-data": ^7.20.5 + "@babel/helper-compilation-targets": ^7.20.7 "@babel/helper-plugin-utils": ^7.20.2 "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-transform-parameters": ^7.20.1 + "@babel/plugin-transform-parameters": ^7.20.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9764d1a4735fcd384fdb9b6c6ccb20d1bea2f88f648640d26ce5d9cd5880ce1e389d2f852d7bea7e86ff343726225dc16e1deb92c7b3dc5c5721ed905a602318 + checksum: 1329db17009964bc644484c660eab717cb3ca63ac0ab0f67c651a028d1bc2ead51dc4064caea283e46994f1b7221670a35cbc0b4beb6273f55e915494b5aa0b2 languageName: node linkType: hard @@ -1837,6 +1859,21 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-object-rest-spread@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.2" + dependencies: + "@babel/compat-data": ^7.20.1 + "@babel/helper-compilation-targets": ^7.20.0 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-transform-parameters": ^7.20.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9764d1a4735fcd384fdb9b6c6ccb20d1bea2f88f648640d26ce5d9cd5880ce1e389d2f852d7bea7e86ff343726225dc16e1deb92c7b3dc5c5721ed905a602318 + languageName: node + linkType: hard + "@babel/plugin-proposal-optional-catch-binding@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.18.6" @@ -2090,7 +2127,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.17.12, @babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.7.2": +"@babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.7.2": version: 7.18.6 resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" dependencies: @@ -2672,6 +2709,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-parameters@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/plugin-transform-parameters@npm:7.20.7" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6ffe0dd9afb2d2b9bc247381aa2e95dd9997ff5568a0a11900528919a4e073ac68f46409431455badb8809644d47cff180045bc2b9700e3f36e3b23554978947 + languageName: node + linkType: hard + "@babel/plugin-transform-property-literals@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-property-literals@npm:7.18.6" @@ -3862,10 +3910,10 @@ __metadata: languageName: node linkType: hard -"@braintree/sanitize-url@npm:6.0.1": - version: 6.0.1 - resolution: "@braintree/sanitize-url@npm:6.0.1" - checksum: 6f9221299aac0c841a17ecb1ebc60eb43c794f05b5136ca9b87116c8472b7e96f21e56ba2da8369f964112c6055fab791a37015bbea4bd5a189cc38206d214ad +"@braintree/sanitize-url@npm:6.0.2": + version: 6.0.2 + resolution: "@braintree/sanitize-url@npm:6.0.2" + checksum: 6a9dfd4081cc96516eeb281d1a83d3b5f1ad3d2837adf968fcc2ba18889ee833554f9c641b4083c36d3360a932e4504ddf25b0b51e9933c3742622df82cf7c9a languageName: node linkType: hard @@ -3897,6 +3945,32 @@ __metadata: languageName: node linkType: hard +"@csstools/css-parser-algorithms@npm:^2.0.1": + version: 2.0.1 + resolution: "@csstools/css-parser-algorithms@npm:2.0.1" + peerDependencies: + "@csstools/css-tokenizer": ^2.0.0 + checksum: 9f168cfc8fa30ba19fcbe7632d947b74beea494db60cf0eb250f7b77fe72239fb5e6d292b035144dbc52977fb4768f157064f8358530701fe56e5ef2993174c7 + languageName: node + linkType: hard + +"@csstools/css-tokenizer@npm:^2.0.1": + version: 2.1.0 + resolution: "@csstools/css-tokenizer@npm:2.1.0" + checksum: af3619557e18cd348810cfb41b3b7177b36d216df8dd4cac3979f241c15416baf8cdd55fb764ecc78fab5985b085363cfc8e8b8a18aaa361d00c9b9300b7c0f3 + languageName: node + linkType: hard + +"@csstools/media-query-list-parser@npm:^2.0.1": + version: 2.0.1 + resolution: "@csstools/media-query-list-parser@npm:2.0.1" + peerDependencies: + "@csstools/css-parser-algorithms": ^2.0.0 + "@csstools/css-tokenizer": ^2.0.0 + checksum: f30b2a9e1aa3c2d8e98d3ac79463ab514ba4c4577c4cc6120a69d9f4562e521766adb62fc44ffee2226a967bdcfcf86a46bdaf625d21af8f21caa99553994d60 + languageName: node + linkType: hard + "@csstools/postcss-color-function@npm:^1.0.3": version: 1.1.0 resolution: "@csstools/postcss-color-function@npm:1.1.0" @@ -3988,13 +4062,13 @@ __metadata: languageName: node linkType: hard -"@csstools/selector-specificity@npm:^2.0.2": - version: 2.0.2 - resolution: "@csstools/selector-specificity@npm:2.0.2" +"@csstools/selector-specificity@npm:^2.1.1": + version: 2.1.1 + resolution: "@csstools/selector-specificity@npm:2.1.1" peerDependencies: - postcss: ^8.2 + postcss: ^8.4 postcss-selector-parser: ^6.0.10 - checksum: a2045a27276a6cfe645b6e212afc217d9a43174ea7a1fa1ab8918d5a0ace72380fbd9837fe1920c547985c11a9070dc48c5c80d483d3f581ddf7aa688204d44f + checksum: 392ab62732e93aa8cbea445bf3485c1acbbecc8ec087b200e06c9ddd2acf740fd1fe46abdacf813e7a50a95a60346377ee3eecb4e1fe3709582e2851430b376a languageName: node linkType: hard @@ -4068,10 +4142,10 @@ __metadata: languageName: node linkType: hard -"@daybrush/utils@npm:1.10.0, @daybrush/utils@npm:^1.10.0": - version: 1.10.0 - resolution: "@daybrush/utils@npm:1.10.0" - checksum: bd8401971012052c420046e45b143fa9a211a2dc80c782ebc930865df6da8da8544f683a2b8728862a97407ff48bd7eb02657279b19f261e95541818441023db +"@daybrush/utils@npm:1.10.2, @daybrush/utils@npm:^1.6.0": + version: 1.10.2 + resolution: "@daybrush/utils@npm:1.10.2" + checksum: aa3513eb7571fa052de3c5216d41dbc6c7330719052881ea562f75e2bc89c8f00f32dbf6743b379e32deb80477ffe0ecd0c69bb77e3f78cf5ada123b57b3a7bd languageName: node linkType: hard @@ -4082,10 +4156,10 @@ __metadata: languageName: node linkType: hard -"@daybrush/utils@npm:^1.6.0": - version: 1.10.2 - resolution: "@daybrush/utils@npm:1.10.2" - checksum: aa3513eb7571fa052de3c5216d41dbc6c7330719052881ea562f75e2bc89c8f00f32dbf6743b379e32deb80477ffe0ecd0c69bb77e3f78cf5ada123b57b3a7bd +"@daybrush/utils@npm:^1.10.0": + version: 1.10.0 + resolution: "@daybrush/utils@npm:1.10.0" + checksum: bd8401971012052c420046e45b143fa9a211a2dc80c782ebc930865df6da8da8544f683a2b8728862a97407ff48bd7eb02657279b19f261e95541818441023db languageName: node linkType: hard @@ -4133,12 +4207,11 @@ __metadata: languageName: node linkType: hard -"@emotion/babel-plugin@npm:^11.10.5": - version: 11.10.5 - resolution: "@emotion/babel-plugin@npm:11.10.5" +"@emotion/babel-plugin@npm:^11.10.6": + version: 11.10.6 + resolution: "@emotion/babel-plugin@npm:11.10.6" dependencies: "@babel/helper-module-imports": ^7.16.7 - "@babel/plugin-syntax-jsx": ^7.17.12 "@babel/runtime": ^7.18.3 "@emotion/hash": ^0.9.0 "@emotion/memoize": ^0.8.0 @@ -4149,9 +4222,7 @@ __metadata: find-root: ^1.1.0 source-map: ^0.5.7 stylis: 4.1.3 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: e3353499c76c4422d6e900c0dfab73607056d9da86161a3f27c3459c193c4908050c5d252c68fcde231e13f02a9d8e0dc07d260317ae0e5206841e331cc4caae + checksum: 3eed138932e8edf2598352e69ad949b9db3051a4d6fcff190dacbac9aa838d7ef708b9f3e6c48660625d9311dae82d73477ae4e7a31139feef5eb001a5528421 languageName: node linkType: hard @@ -4228,21 +4299,16 @@ __metadata: languageName: node linkType: hard -"@emotion/css@npm:11.10.5": - version: 11.10.5 - resolution: "@emotion/css@npm:11.10.5" +"@emotion/css@npm:11.10.6": + version: 11.10.6 + resolution: "@emotion/css@npm:11.10.6" dependencies: - "@emotion/babel-plugin": ^11.10.5 + "@emotion/babel-plugin": ^11.10.6 "@emotion/cache": ^11.10.5 "@emotion/serialize": ^1.1.1 "@emotion/sheet": ^1.2.1 "@emotion/utils": ^1.2.0 - peerDependencies: - "@babel/core": ^7.0.0 - peerDependenciesMeta: - "@babel/core": - optional: true - checksum: 2f1e953c3519cd69e40d2931cf36c3f1daf33d9f5064cb2612071bd316e38c8debb83d9520db5694ac323b6475f86004f6542919746f005fea0c14a855fc579b + checksum: 010ca5e1d0434923c431eab2c6f8226ab4415310a053ece6e4133011c7dc621de099469e57314b013e682c3b6ffd09a91cc6473538c185095d2afca79d81fb95 languageName: node linkType: hard @@ -4290,12 +4356,12 @@ __metadata: languageName: node linkType: hard -"@emotion/react@npm:11.10.5": - version: 11.10.5 - resolution: "@emotion/react@npm:11.10.5" +"@emotion/react@npm:11.10.6": + version: 11.10.6 + resolution: "@emotion/react@npm:11.10.6" dependencies: "@babel/runtime": ^7.18.3 - "@emotion/babel-plugin": ^11.10.5 + "@emotion/babel-plugin": ^11.10.6 "@emotion/cache": ^11.10.5 "@emotion/serialize": ^1.1.1 "@emotion/use-insertion-effect-with-fallbacks": ^1.0.0 @@ -4303,14 +4369,11 @@ __metadata: "@emotion/weak-memoize": ^0.3.0 hoist-non-react-statics: ^3.3.1 peerDependencies: - "@babel/core": ^7.0.0 react: ">=16.8.0" peerDependenciesMeta: - "@babel/core": - optional: true "@types/react": optional: true - checksum: 32b67b28e9b6d6c53b970072680697f04c2521441050bdeb19a1a7f0164af549b4dad39ff375eda1b6a3cf1cc86ba2c6fa55460ec040e6ebbca3e9ec58353cf7 + checksum: 4762042e39126ffaffe76052dc65c9bb0ba6b8893013687ba3cc13ed4dd834c31597f1230684c3c078e90aecc13ab6cd0e3cde0dec8b7761affd2571f4d80019 languageName: node linkType: hard @@ -4829,10 +4892,22 @@ __metadata: languageName: unknown linkType: soft -"@grafana/aws-sdk@npm:0.0.40": - version: 0.0.40 - resolution: "@grafana/aws-sdk@npm:0.0.40" - checksum: 23d20f8da262b7a80a13d0c60bbefa49760c5b1459c00646cbb4762d861003f8c3a32d8c6660902762c27ba136831b15d420291b105f4d72b971a04854d9027f +"@grafana/async-query-data@npm:0.1.4": + version: 0.1.4 + resolution: "@grafana/async-query-data@npm:0.1.4" + dependencies: + tslib: ^2.4.1 + checksum: e1954d2b77841cdf8a7686a6bd132fbdf647c2fb810d895b721b936bb883fdd00c13257edd4d3352c39cb3e0d2106ba424457e02c7cbe6ab359139c3e1e044a2 + languageName: node + linkType: hard + +"@grafana/aws-sdk@npm:0.0.44": + version: 0.0.44 + resolution: "@grafana/aws-sdk@npm:0.0.44" + dependencies: + "@grafana/async-query-data": 0.1.4 + "@grafana/experimental": 1.1.0 + checksum: 54955767af28109ed976a24224345757c09a369eb636c95dfdb389f70475838ba14b04c6bad147f423b35480e4e68f76fa719e422cbfa470750aef0d5f38b371 languageName: node linkType: hard @@ -4840,7 +4915,7 @@ __metadata: version: 0.0.0-use.local resolution: "@grafana/data@workspace:packages/grafana-data" dependencies: - "@braintree/sanitize-url": 6.0.1 + "@braintree/sanitize-url": 6.0.2 "@grafana/schema": 9.5.0-pre "@grafana/tsconfig": ^1.2.0-rc1 "@rollup/plugin-commonjs": 23.0.2 @@ -4852,13 +4927,14 @@ __metadata: "@testing-library/react-hooks": 8.0.1 "@testing-library/user-event": 14.4.3 "@types/d3-interpolate": ^3.0.0 + "@types/dompurify": ^2 "@types/history": 4.7.11 "@types/jest": 29.2.3 - "@types/jquery": 3.5.14 - "@types/lodash": 4.14.187 - "@types/marked": 4.0.7 - "@types/node": 18.14.0 - "@types/papaparse": 5.3.5 + "@types/jquery": 3.5.16 + "@types/lodash": 4.14.191 + "@types/marked": 4.0.8 + "@types/node": 18.14.6 + "@types/papaparse": 5.3.7 "@types/react": 17.0.42 "@types/react-dom": 17.0.14 "@types/sinon": 10.0.13 @@ -4866,22 +4942,23 @@ __metadata: "@types/tinycolor2": 1.4.3 d3-interpolate: 3.0.1 date-fns: 2.29.3 + dompurify: ^2.4.3 esbuild: 0.16.17 eventemitter3: 5.0.0 fast_array_intersect: 1.1.0 history: 4.10.1 lodash: 4.17.21 - marked: 4.2.0 + marked: 4.2.12 moment: 2.29.4 - moment-timezone: 0.5.38 + moment-timezone: 0.5.41 ol: 7.2.2 papaparse: 5.3.2 react: 17.0.2 react-dom: 17.0.2 react-test-renderer: 17.0.2 react-use: 17.4.0 - regenerator-runtime: 0.13.10 - rimraf: 4.2.0 + regenerator-runtime: 0.13.11 + rimraf: 4.4.0 rollup: 2.79.1 rollup-plugin-dts: ^5.0.0 rollup-plugin-esbuild: 5.0.0 @@ -4892,7 +4969,7 @@ __metadata: tslib: 2.5.0 typescript: 4.8.4 uplot: 1.6.24 - xss: 1.0.14 + xss: ^1.0.14 peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 @@ -4906,9 +4983,9 @@ __metadata: "@grafana/tsconfig": ^1.2.0-rc1 "@rollup/plugin-commonjs": 23.0.2 "@rollup/plugin-node-resolve": 15.0.1 - "@types/node": 18.14.0 + "@types/node": 18.14.6 esbuild: 0.16.17 - rimraf: 4.2.0 + rimraf: 4.4.0 rollup: 2.79.1 rollup-plugin-dts: ^5.0.0 rollup-plugin-esbuild: 5.0.0 @@ -4918,14 +4995,14 @@ __metadata: languageName: unknown linkType: soft -"@grafana/e2e-selectors@npm:canary": - version: 9.4.0-96193pre - resolution: "@grafana/e2e-selectors@npm:9.4.0-96193pre" +"@grafana/e2e-selectors@npm:^9.4.3": + version: 9.4.3 + resolution: "@grafana/e2e-selectors@npm:9.4.3" dependencies: "@grafana/tsconfig": ^1.2.0-rc1 tslib: 2.4.1 typescript: 4.8.4 - checksum: 1ce663607c0c816ec02cad33d80c38731c4dfafdc7d1693baa989b8eff6588e3cc1d8a031c4f30f888bbd8aa8768cce7c5dd4cb2455306040f39dcac933ceae4 + checksum: 85a88cdf4adb643ff863b15f96fc6c04ecb7567c27cc526a00c157eb02575e55adc1e7701d58e1b48f00f24951c332fbb191cd2b5a8e74cd0c545543777e82af languageName: node linkType: hard @@ -4940,23 +5017,23 @@ __metadata: "@grafana/tsconfig": ^1.2.0-rc1 "@mochajs/json-file-reporter": ^1.2.0 "@rollup/plugin-node-resolve": 15.0.1 - "@types/chrome-remote-interface": 0.31.4 - "@types/lodash": 4.14.187 - "@types/node": 18.14.0 + "@types/chrome-remote-interface": 0.31.9 + "@types/lodash": 4.14.191 + "@types/node": 18.14.6 "@types/uuid": 9.0.1 - babel-loader: 9.1.0 + babel-loader: 9.1.2 blink-diff: 1.0.13 - chrome-remote-interface: 0.32.0 + chrome-remote-interface: 0.32.1 commander: 8.3.0 cypress: 9.5.1 cypress-file-upload: 5.0.8 - devtools-protocol: 0.0.1065144 + devtools-protocol: 0.0.1113774 esbuild: 0.16.17 execa: 5.1.1 lodash: 4.17.21 mocha: 10.2.0 - resolve-as-bin: 2.1.0 - rimraf: 4.2.0 + resolve-bin: 1.0.1 + rimraf: 4.4.0 rollup: 2.79.1 rollup-plugin-dts: ^5.0.0 rollup-plugin-esbuild: 5.0.0 @@ -4966,7 +5043,7 @@ __metadata: tslib: 2.5.0 typescript: 4.8.4 uuid: 9.0.0 - webpack: 5.75.0 + webpack: 5.76.0 yaml: ^2.0.0 bin: grafana-e2e: bin/grafana-e2e.js @@ -5040,26 +5117,25 @@ __metadata: languageName: node linkType: hard -"@grafana/faro-core@npm:1.0.0-beta2, @grafana/faro-core@npm:^1.0.0-beta2": - version: 1.0.0-beta2 - resolution: "@grafana/faro-core@npm:1.0.0-beta2" +"@grafana/faro-core@npm:1.0.2, @grafana/faro-core@npm:^1.0.2": + version: 1.0.2 + resolution: "@grafana/faro-core@npm:1.0.2" dependencies: - "@opentelemetry/api": ^1.1.0 + "@opentelemetry/api": ^1.4.0 "@opentelemetry/api-metrics": ^0.33.0 - "@opentelemetry/otlp-transformer": ^0.33.0 - fast-deep-equal: ^3.1.3 - checksum: 0c807f5212e502313b149b087e3f2c0cebf59bfe95bcd558f6fd421727a6f7eeb735abb12661f9b76e14bbcebca4773763332a1fb992461e4a673f1326a9acce + "@opentelemetry/otlp-transformer": ^0.35.0 + checksum: 09c3c6687b955aacd17de73dca319dbb2abda8dd26f5c038618266ffefbc1f915cfe12167cd4b49db5c639ab70b7141bb9794c3cbdc682bb63174f95df9d9dfd languageName: node linkType: hard -"@grafana/faro-web-sdk@npm:1.0.0-beta2": - version: 1.0.0-beta2 - resolution: "@grafana/faro-web-sdk@npm:1.0.0-beta2" +"@grafana/faro-web-sdk@npm:1.0.2": + version: 1.0.2 + resolution: "@grafana/faro-web-sdk@npm:1.0.2" dependencies: - "@grafana/faro-core": ^1.0.0-beta2 + "@grafana/faro-core": ^1.0.2 ua-parser-js: ^1.0.32 - web-vitals: ^3.0.4 - checksum: 7919c4856653880c71d384b14e8e8a7fa2edc17cf57bdc55dc6afd8a8c94b6787a0b9186540b6fb1c4f6d720de7ec8b3ddd00517a2e8117ede94de5b3f8c5559 + web-vitals: ^3.1.1 + checksum: ca04add8469778d73e1bc15f057d063d93a88b9d76325c79060848ad3211fa929e30b6a85365981f7bcef023704f9f92f67678311bfed13dd521399c0f00e92f languageName: node linkType: hard @@ -5079,12 +5155,12 @@ __metadata: languageName: node linkType: hard -"@grafana/monaco-logql@npm:^0.0.6": - version: 0.0.6 - resolution: "@grafana/monaco-logql@npm:0.0.6" +"@grafana/monaco-logql@npm:^0.0.7": + version: 0.0.7 + resolution: "@grafana/monaco-logql@npm:0.0.7" peerDependencies: monaco-editor: ^0.32.1 - checksum: 81ac76c0eaa020cdac4c2eb5a7b5b4c18c3aac932ecfe2a860e1755597a41fae8421290b96a4f6234cd02e640b6cf3dc7380b475973e20d8e29ab62f4cee5933 + checksum: cce4a8ed8aaefee9211c4f2e283e5b4e551a942cd6673f13c5b9afca750432493388e383815f0f81bd2f119526115c2ecd8dfb23060ea61511eeecfc2a9750a4 languageName: node linkType: hard @@ -5094,7 +5170,7 @@ __metadata: dependencies: "@grafana/data": 9.5.0-pre "@grafana/e2e-selectors": 9.5.0-pre - "@grafana/faro-web-sdk": 1.0.0-beta2 + "@grafana/faro-web-sdk": 1.0.2 "@grafana/tsconfig": ^1.2.0-rc1 "@grafana/ui": 9.5.0-pre "@rollup/plugin-commonjs": 23.0.2 @@ -5107,7 +5183,7 @@ __metadata: "@types/angular": 1.8.4 "@types/history": 4.7.11 "@types/jest": 29.2.3 - "@types/lodash": 4.14.187 + "@types/lodash": 4.14.191 "@types/react": 17.0.42 "@types/react-dom": 17.0.14 "@types/systemjs": ^0.20.6 @@ -5116,7 +5192,7 @@ __metadata: lodash: 4.17.21 react: 17.0.2 react-dom: 17.0.2 - rimraf: 4.2.0 + rimraf: 4.4.0 rollup: 2.79.1 rollup-plugin-dts: ^5.0.0 rollup-plugin-esbuild: 5.0.0 @@ -5133,17 +5209,17 @@ __metadata: languageName: unknown linkType: soft -"@grafana/scenes@npm:^0.0.14": - version: 0.0.14 - resolution: "@grafana/scenes@npm:0.0.14" +"@grafana/scenes@npm:^0.0.21": + version: 0.0.21 + resolution: "@grafana/scenes@npm:0.0.21" dependencies: - "@grafana/e2e-selectors": canary + "@grafana/e2e-selectors": ^9.4.3 "@grafana/experimental": 1.0.1 react-grid-layout: 1.3.4 react-use: 17.4.0 react-virtualized-auto-sizer: 1.0.7 uuid: ^9.0.0 - checksum: 77cb6ff3ec8f716ce35399fb9f51c4d701025a71af2cb9f7d33a26b973ebfdabed49ba9b3d72dfdb5fbf43043a8b944a4f297c027261df14b3e0bd189096c905 + checksum: a36d6b19884a240df1bc3048f72a2a5b7a505371ae30ae29f70f77d6c590d39282a027322b7d49233cb62fa9410eefedb6cb2cb53d938d9394d142ba5734a070 languageName: node linkType: hard @@ -5156,7 +5232,7 @@ __metadata: "@rollup/plugin-json": 5.0.1 "@rollup/plugin-node-resolve": 15.0.1 esbuild: 0.16.17 - rimraf: 4.2.0 + rimraf: 4.4.0 rollup: 2.79.1 rollup-plugin-dts: ^5.0.0 rollup-plugin-esbuild: 5.0.0 @@ -5271,13 +5347,13 @@ __metadata: resolution: "@grafana/ui@workspace:packages/grafana-ui" dependencies: "@babel/core": 7.20.5 - "@emotion/css": 11.10.5 - "@emotion/react": 11.10.5 + "@emotion/css": 11.10.6 + "@emotion/react": 11.10.6 "@grafana/data": 9.5.0-pre "@grafana/e2e-selectors": 9.5.0-pre "@grafana/schema": 9.5.0-pre "@grafana/tsconfig": ^1.2.0-rc1 - "@leeoniya/ufuzzy": 1.0.2 + "@leeoniya/ufuzzy": 1.0.6 "@mdx-js/react": 1.6.22 "@monaco-editor/react": 4.4.6 "@popperjs/core": 2.11.6 @@ -5316,19 +5392,19 @@ __metadata: "@types/hoist-non-react-statics": 3.3.1 "@types/is-hotkey": 0.1.7 "@types/jest": 29.2.3 - "@types/jquery": 3.5.14 - "@types/lodash": 4.14.187 + "@types/jquery": 3.5.16 + "@types/lodash": 4.14.191 "@types/mock-raf": 1.0.3 - "@types/node": 18.14.0 + "@types/node": 18.14.6 "@types/prismjs": 1.26.0 "@types/react": 17.0.42 - "@types/react-beautiful-dnd": 13.1.2 + "@types/react-beautiful-dnd": 13.1.3 "@types/react-calendar": 3.9.0 "@types/react-color": 3.0.6 "@types/react-dom": 17.0.14 "@types/react-highlight-words": 0.16.4 "@types/react-router-dom": 5.3.3 - "@types/react-table": 7.7.12 + "@types/react-table": 7.7.14 "@types/react-test-renderer": 17.0.1 "@types/react-transition-group": 4.4.5 "@types/react-window": 1.8.5 @@ -5343,7 +5419,7 @@ __metadata: classnames: 2.3.2 common-tags: 1.8.2 core-js: 3.28.0 - css-loader: 6.7.1 + css-loader: 6.7.3 csstype: 3.1.1 d3: 7.8.2 date-fns: 2.29.3 @@ -5351,9 +5427,9 @@ __metadata: expose-loader: 4.0.0 hoist-non-react-statics: 3.3.2 i18next: ^22.0.0 - immutable: 4.2.2 + immutable: 4.2.4 is-hotkey: 0.2.0 - jquery: 3.6.1 + jquery: 3.6.3 lodash: 4.17.21 memoize-one: 6.0.0 mock-raf: 1.0.1 @@ -5363,13 +5439,13 @@ __metadata: prismjs: 1.29.0 process: ^0.11.10 rc-cascader: 3.8.0 - rc-drawer: 6.1.2 - rc-slider: 10.1.0 + rc-drawer: 6.1.3 + rc-slider: 10.1.1 rc-time-picker: ^3.7.3 rc-tooltip: 5.3.1 react: 17.0.2 react-beautiful-dnd: 13.1.1 - react-calendar: 3.9.0 + react-calendar: 4.0.0 react-colorful: 5.6.1 react-custom-scrollbars-2: 4.5.0 react-dom: 17.0.2 @@ -5377,7 +5453,7 @@ __metadata: react-highlight-words: 0.20.0 react-hook-form: 7.5.3 react-i18next: ^12.0.0 - react-inlinesvg: 3.0.1 + react-inlinesvg: 3.0.2 react-popper: 2.3.0 react-popper-tooltip: 4.4.2 react-router-dom: ^5.2.0 @@ -5388,7 +5464,7 @@ __metadata: react-transition-group: 4.4.5 react-use: 17.4.0 react-window: 1.8.8 - rimraf: 4.2.0 + rimraf: 4.4.0 rollup: 2.79.1 rollup-plugin-dts: ^5.0.0 rollup-plugin-esbuild: 5.0.0 @@ -5407,7 +5483,7 @@ __metadata: typescript: 4.8.4 uplot: 1.6.24 uuid: 9.0.0 - webpack: 5.75.0 + webpack: 5.76.0 peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 @@ -5848,6 +5924,15 @@ __metadata: languageName: node linkType: hard +"@jest/schemas@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/schemas@npm:29.4.3" + dependencies: + "@sinclair/typebox": ^0.25.16 + checksum: ac754e245c19dc39e10ebd41dce09040214c96a4cd8efa143b82148e383e45128f24599195ab4f01433adae4ccfbe2db6574c90db2862ccd8551a86704b5bebd + languageName: node + linkType: hard + "@jest/source-map@npm:^27.5.1": version: 27.5.1 resolution: "@jest/source-map@npm:27.5.1" @@ -6067,6 +6152,20 @@ __metadata: languageName: node linkType: hard +"@jest/types@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/types@npm:29.5.0" + dependencies: + "@jest/schemas": ^29.4.3 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: 1811f94b19cf8a9460a289c4f056796cfc373480e0492692a6125a553cd1a63824bd846d7bb78820b7b6f758f6dd3c2d4558293bb676d541b2fa59c70fdf9d39 + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.3.0": version: 0.3.1 resolution: "@jridgewell/gen-mapping@npm:0.3.1" @@ -6233,10 +6332,10 @@ __metadata: languageName: node linkType: hard -"@leeoniya/ufuzzy@npm:1.0.2": - version: 1.0.2 - resolution: "@leeoniya/ufuzzy@npm:1.0.2" - checksum: 5460378a8c32d121b0bc7c8e95cde995316516655528e248051b1bf360cdca0311ef3275de14b802587748231333cee6183c931b3abba26f9e4236ecc4959aa3 +"@leeoniya/ufuzzy@npm:1.0.6": + version: 1.0.6 + resolution: "@leeoniya/ufuzzy@npm:1.0.6" + checksum: e09672848e094745726331feebe6744d42563ccf160b38796eed4d72105daa052838fdec1944d5b44a27e328fc74a00547d00b894710e2720aa692ed5d3d6e3b languageName: node linkType: hard @@ -7051,28 +7150,28 @@ __metadata: languageName: node linkType: hard -"@lezer/common@npm:1.0.1, @lezer/common@npm:^1.0.0": - version: 1.0.1 - resolution: "@lezer/common@npm:1.0.1" - checksum: 05bda2b0b90713a511502e1e0c67842996cb86415cd701c46eb49f8fa117552229a4bc7244f1e8e0025e3563294a52911eebd70d06a4bc987280fca5d148c34b +"@lezer/common@npm:1.0.2, @lezer/common@npm:^1.0.0": + version: 1.0.2 + resolution: "@lezer/common@npm:1.0.2" + checksum: bbcc58e07be02652bf0700d2856042ec089d5be0b95893d628b3e18192ade864fac83b61b19653e10b9f1472261a178b12318d934e9004edd5483a577c0db56b languageName: node linkType: hard -"@lezer/highlight@npm:1.1.2": - version: 1.1.2 - resolution: "@lezer/highlight@npm:1.1.2" +"@lezer/highlight@npm:1.1.3": + version: 1.1.3 + resolution: "@lezer/highlight@npm:1.1.3" dependencies: "@lezer/common": ^1.0.0 - checksum: b974c3f43c4338840f7f6110948d5f69ba8ce9d58b75e493bbef5183d63b3b531a1416398e9c7844914d134ea4e9ae717fae240629d937554fcc4cf1ab5385e8 + checksum: 90ec143ce46b32f6779c3b245f1b5a540d66686939816d3daed8318821acc4bc719466dc222336cfd483bf04a8de4fdc6f279e904cf114d4d9f786f9feccbbd8 languageName: node linkType: hard -"@lezer/lr@npm:1.3.1": - version: 1.3.1 - resolution: "@lezer/lr@npm:1.3.1" +"@lezer/lr@npm:1.3.3": + version: 1.3.3 + resolution: "@lezer/lr@npm:1.3.3" dependencies: "@lezer/common": ^1.0.0 - checksum: 01b421b9724d43a00a97639344cd89c539e9740b7bedc8270882192e4205f68679e5b7c6837dde7756970a418bd4e710e4a778ab7c6713a2331bea3049232ca8 + checksum: 1804074c794005a31c54d80ab72127f19ae5be29bb627c52bc001a57b1af97a9e62732ff13e3aeb7bc53b330202b6bd3747272c64d87f257dbba533e75a183a3 languageName: node linkType: hard @@ -7675,7 +7774,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/api-metrics@npm:0.33.0, @opentelemetry/api-metrics@npm:^0.33.0": +"@opentelemetry/api-metrics@npm:^0.33.0": version: 0.33.0 resolution: "@opentelemetry/api-metrics@npm:0.33.0" dependencies: @@ -7684,14 +7783,14 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/api@npm:1.4.0": +"@opentelemetry/api@npm:1.4.0, @opentelemetry/api@npm:^1.4.0": version: 1.4.0 resolution: "@opentelemetry/api@npm:1.4.0" checksum: 8dc522194e20d2e8aa6cac155dbce19d3fc9cfac59e953ece1064158c6348ccd9560ee99d2f2381e82c2f8c9a129b57fa7b640027383315504de1fa712b6d7f1 languageName: node linkType: hard -"@opentelemetry/api@npm:^1.0.0, @opentelemetry/api@npm:^1.1.0": +"@opentelemetry/api@npm:^1.0.0": version: 1.1.0 resolution: "@opentelemetry/api@npm:1.1.0" checksum: 8be8e8dd20a473639a9bb9b4185b8984f537f86e49829ba1d4c4e909f4480309cb22696b7eb7122882878dac0b5f4ce799d66ed72248568bafed085d6269e1bc @@ -7710,14 +7809,14 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/core@npm:1.7.0": - version: 1.7.0 - resolution: "@opentelemetry/core@npm:1.7.0" +"@opentelemetry/core@npm:1.9.1": + version: 1.9.1 + resolution: "@opentelemetry/core@npm:1.9.1" dependencies: - "@opentelemetry/semantic-conventions": 1.7.0 + "@opentelemetry/semantic-conventions": 1.9.1 peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.3.0" - checksum: 94fcae57c3c2c3a1cff6311246f32a228b216533449bfcec2f8eb03ea023f0ace4e0929c8cf5145772c6f25263d5f2d5d3485a39ab0ced4e11f5a0fed7497e9c + "@opentelemetry/api": ">=1.0.0 <1.5.0" + checksum: 5581a809e2caff142136734634f45255ce9f1ed701cf38629b9e17d91a8d15449b467fb3a7f3d0d8b076f653090e50cc31d3b1db4cfefeda9b6b901c60581024 languageName: node linkType: hard @@ -7736,18 +7835,17 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/otlp-transformer@npm:^0.33.0": - version: 0.33.0 - resolution: "@opentelemetry/otlp-transformer@npm:0.33.0" +"@opentelemetry/otlp-transformer@npm:^0.35.0": + version: 0.35.1 + resolution: "@opentelemetry/otlp-transformer@npm:0.35.1" dependencies: - "@opentelemetry/api-metrics": 0.33.0 - "@opentelemetry/core": 1.7.0 - "@opentelemetry/resources": 1.7.0 - "@opentelemetry/sdk-metrics": 0.33.0 - "@opentelemetry/sdk-trace-base": 1.7.0 + "@opentelemetry/core": 1.9.1 + "@opentelemetry/resources": 1.9.1 + "@opentelemetry/sdk-metrics": 1.9.1 + "@opentelemetry/sdk-trace-base": 1.9.1 peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.3.0" - checksum: f2a68957588a5bf7de3974dd210440dc64f29dd93c3f6f79c2e0cf69d3e487432cfec6d2c14752d7ba007f93140a23f8ea39135451e7bf455789b4a2d8ad84d1 + "@opentelemetry/api": ">=1.3.0 <1.5.0" + checksum: e0a68b2be28d5535aaaa58be31a5e85b268b42025c8b3a34498f00b019fbd172530b1b484c4257fd330c5890007130eedec288b8fe8f2b85176198f9ffc2507e languageName: node linkType: hard @@ -7763,15 +7861,15 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/resources@npm:1.7.0": - version: 1.7.0 - resolution: "@opentelemetry/resources@npm:1.7.0" +"@opentelemetry/resources@npm:1.9.1": + version: 1.9.1 + resolution: "@opentelemetry/resources@npm:1.9.1" dependencies: - "@opentelemetry/core": 1.7.0 - "@opentelemetry/semantic-conventions": 1.7.0 + "@opentelemetry/core": 1.9.1 + "@opentelemetry/semantic-conventions": 1.9.1 peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.3.0" - checksum: 9d669e4170120ef240757f9d82b5ef411335606114d19bd9f7a534a8328638871de0a06487f5da2dc0eb2ea540bb3ccbeea2f41c75a27de4e13e270452dd38eb + "@opentelemetry/api": ">=1.0.0 <1.5.0" + checksum: cf15e5faa698df3f0abcee35f7b4271c019b6cb81cb521b07793fe622c716d9c6873216219879afd57a28202f748a839ecaf28e04268e490004f14bbb850c96e languageName: node linkType: hard @@ -7789,17 +7887,16 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/sdk-metrics@npm:0.33.0": - version: 0.33.0 - resolution: "@opentelemetry/sdk-metrics@npm:0.33.0" +"@opentelemetry/sdk-metrics@npm:1.9.1": + version: 1.9.1 + resolution: "@opentelemetry/sdk-metrics@npm:1.9.1" dependencies: - "@opentelemetry/api-metrics": 0.33.0 - "@opentelemetry/core": 1.7.0 - "@opentelemetry/resources": 1.7.0 + "@opentelemetry/core": 1.9.1 + "@opentelemetry/resources": 1.9.1 lodash.merge: 4.6.2 peerDependencies: - "@opentelemetry/api": ^1.0.0 - checksum: 2c99c7ece4e545a3da0280e8dc9699458fdbb5c2bf9bcf09a9524612a844b28516d864ab1e0b5bedd12f9cccfc5d4f01663686538e8144b4d0185d2f8a581f0e + "@opentelemetry/api": ">=1.3.0 <1.5.0" + checksum: 08e8215841da74ffc36f2e5c414ab4230e5a2676a4329f9c98fbde4b162b6166612ab48bcc701cebf8ded3e2b5a68981f72987751df4393e0839089fa0c5ee13 languageName: node linkType: hard @@ -7817,16 +7914,16 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/sdk-trace-base@npm:1.7.0": - version: 1.7.0 - resolution: "@opentelemetry/sdk-trace-base@npm:1.7.0" +"@opentelemetry/sdk-trace-base@npm:1.9.1": + version: 1.9.1 + resolution: "@opentelemetry/sdk-trace-base@npm:1.9.1" dependencies: - "@opentelemetry/core": 1.7.0 - "@opentelemetry/resources": 1.7.0 - "@opentelemetry/semantic-conventions": 1.7.0 + "@opentelemetry/core": 1.9.1 + "@opentelemetry/resources": 1.9.1 + "@opentelemetry/semantic-conventions": 1.9.1 peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.3.0" - checksum: f6ebfe1614d481ab11f4ebca4ae45ae92790e9b27a6b30cdeedf968918ac85e6d5cd695dd26ba3d0db0e665830a9c73ed25b4bd286c019c4adf084a05776bb9c + "@opentelemetry/api": ">=1.0.0 <1.5.0" + checksum: f9448132686b1a8c1fde7539845a2b31bcb315c3bbabccb20a18142db80eeed433b3713e2761151348c1b626ad00183f4b7e9b9868d1a8ab8c541dce1d082f38 languageName: node linkType: hard @@ -7837,13 +7934,6 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/semantic-conventions@npm:1.7.0": - version: 1.7.0 - resolution: "@opentelemetry/semantic-conventions@npm:1.7.0" - checksum: 5214501648a002cc92fc6ad2296be8fa95b1803b360fc7732222e74a7f3743f3f72952740bed18ea9207741e450f3a32bf11752d732dc83f8770681eb8a6656b - languageName: node - linkType: hard - "@opentelemetry/semantic-conventions@npm:1.9.1": version: 1.9.1 resolution: "@opentelemetry/semantic-conventions@npm:1.9.1" @@ -7910,7 +8000,46 @@ __metadata: languageName: node linkType: hard -"@pmmmwh/react-refresh-webpack-plugin@npm:0.5.8, @pmmmwh/react-refresh-webpack-plugin@npm:^0.5.3": +"@pmmmwh/react-refresh-webpack-plugin@npm:0.5.10": + version: 0.5.10 + resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.5.10" + dependencies: + ansi-html-community: ^0.0.8 + common-path-prefix: ^3.0.0 + core-js-pure: ^3.23.3 + error-stack-parser: ^2.0.6 + find-up: ^5.0.0 + html-entities: ^2.1.0 + loader-utils: ^2.0.4 + schema-utils: ^3.0.0 + source-map: ^0.7.3 + peerDependencies: + "@types/webpack": 4.x || 5.x + react-refresh: ">=0.10.0 <1.0.0" + sockjs-client: ^1.4.0 + type-fest: ">=0.17.0 <4.0.0" + webpack: ">=4.43.0 <6.0.0" + webpack-dev-server: 3.x || 4.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + "@types/webpack": + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + checksum: c45beded9c56fbbdc7213a2c36131ace5db360ed704d462cc39d6678f980173a91c9a3f691e6bd3a026f25486644cd0027e8a12a0a4eced8e8b886a0472e7d34 + languageName: node + linkType: hard + +"@pmmmwh/react-refresh-webpack-plugin@npm:^0.5.3": version: 0.5.8 resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.5.8" dependencies: @@ -8053,6 +8182,55 @@ __metadata: languageName: node linkType: hard +"@radix-ui/react-compose-refs@npm:1.0.0": + version: 1.0.0 + resolution: "@radix-ui/react-compose-refs@npm:1.0.0" + dependencies: + "@babel/runtime": ^7.13.10 + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + checksum: fb98be2e275a1a758ccac647780ff5b04be8dcf25dcea1592db3b691fecf719c4c0700126da605b2f512dd89caa111352b9fad59528d736b4e0e9a0e134a74a1 + languageName: node + linkType: hard + +"@radix-ui/react-portal@npm:^1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-portal@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-primitive": 1.0.1 + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: 3bdcf6e1d918e473e328d45df659853cc0da687e4e885eaf7bd7bb76825a30e6f8384f15db3cbe523d80c5381fa9886f80718a8679ff66a7a10167aab290c4f7 + languageName: node + linkType: hard + +"@radix-ui/react-primitive@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-primitive@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-slot": 1.0.1 + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + checksum: 1cc86b72f926be4a42122e7e456e965de0906f16b0dc244b8448bac05905f208598c984a0dd40026f654b4a71d0235335d48a18e377b07b0ec6c6917576a8080 + languageName: node + linkType: hard + +"@radix-ui/react-slot@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-slot@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-compose-refs": 1.0.0 + peerDependencies: + react: ^16.8 || ^17.0 || ^18.0 + checksum: a20693f8ce532bd6cbff12ba543dfcf90d451f22923bd60b57dc9e639f6e53348915e182002b33444feb6ab753434e78e2a54085bf7092aadda4418f0423763f + languageName: node + linkType: hard + "@rc-component/portal@npm:^1.0.0-6": version: 1.0.3 resolution: "@rc-component/portal@npm:1.0.3" @@ -8074,33 +8252,6 @@ __metadata: languageName: node linkType: hard -"@reach/portal@npm:^0.16.0": - version: 0.16.2 - resolution: "@reach/portal@npm:0.16.2" - dependencies: - "@reach/utils": 0.16.0 - tiny-warning: ^1.0.3 - tslib: ^2.3.0 - peerDependencies: - react: ^16.8.0 || 17.x - react-dom: ^16.8.0 || 17.x - checksum: 7413dcd169cfb9854dd0d3a01f811ec19ef170558fcbd00118d676fc02c197d1c0bce1d1357508879d4775169561d103e13a8e4d74cc677eb0037cc7b04f7a1e - languageName: node - linkType: hard - -"@reach/utils@npm:0.16.0": - version: 0.16.0 - resolution: "@reach/utils@npm:0.16.0" - dependencies: - tiny-warning: ^1.0.3 - tslib: ^2.3.0 - peerDependencies: - react: ^16.8.0 || 17.x - react-dom: ^16.8.0 || 17.x - checksum: 36bc0eb41a71798eb6186b23de265ba709e51dae5bf214fb8505c66bb3f2e6a41bb2401457350436ba89ca9e3a50f93a04fe7c33d15648ce11e568a85622d770 - languageName: node - linkType: hard - "@react-aria/button@npm:3.6.1": version: 3.6.1 resolution: "@react-aria/button@npm:3.6.1" @@ -8455,14 +8606,14 @@ __metadata: languageName: node linkType: hard -"@react-types/button@npm:3.7.0": - version: 3.7.0 - resolution: "@react-types/button@npm:3.7.0" +"@react-types/button@npm:3.7.1": + version: 3.7.1 + resolution: "@react-types/button@npm:3.7.1" dependencies: - "@react-types/shared": ^3.16.0 + "@react-types/shared": ^3.17.0 peerDependencies: react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: e5c1bc38b20d2e123492ea59b9c1637671b83d1b5081b3ac414bc20858ff3300465c7b4bc9b714f3e062bf471eebfe7a68210e23a8731bba1ae1b0ae7a2cd16d + checksum: 4002e7af86a2673e0d1855ccadda4afd13579b5c3a71cf423465d4f5c2f26270d9ca4ce831a0ae23b503c59c8e3ee21c7f8a792a26abba381a7662b945f43cc3 languageName: node linkType: hard @@ -8546,7 +8697,7 @@ __metadata: languageName: node linkType: hard -"@react-types/shared@npm:3.16.0, @react-types/shared@npm:^3.16.0": +"@react-types/shared@npm:3.16.0": version: 3.16.0 resolution: "@react-types/shared@npm:3.16.0" peerDependencies: @@ -8564,9 +8715,18 @@ __metadata: languageName: node linkType: hard -"@reduxjs/toolkit@npm:1.9.1": - version: 1.9.1 - resolution: "@reduxjs/toolkit@npm:1.9.1" +"@react-types/shared@npm:^3.17.0": + version: 3.17.0 + resolution: "@react-types/shared@npm:3.17.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 + checksum: 004fc58ab0d3d64a84ce5a98e7e201b88bbb64f8b4a8309d50be30fe6172d0f172f00c666074aa96f13bbbfbced8b986901ad6b35b6d2d32d8dc25e251fcdb31 + languageName: node + linkType: hard + +"@reduxjs/toolkit@npm:1.9.3": + version: 1.9.3 + resolution: "@reduxjs/toolkit@npm:1.9.3" dependencies: immer: ^9.0.16 redux: ^4.2.0 @@ -8580,7 +8740,7 @@ __metadata: optional: true react-redux: optional: true - checksum: e6700a0d45198ab525c96ff0425fa0125fbdc37ce514f0c77c30225837113279ceec9190ac3da35cb20e77553e56342021788bbf17465819068c4db34cb3d87f + checksum: d965fc6197fd420e4b8eb714015aa908d4ea214e6e10889cf4521e64ac4f8e0a7de29ee4e8da63b291acc40ac330dd31682334090d54838add73c746dc590650 languageName: node linkType: hard @@ -8813,6 +8973,13 @@ __metadata: languageName: node linkType: hard +"@sinclair/typebox@npm:^0.25.16": + version: 0.25.24 + resolution: "@sinclair/typebox@npm:0.25.24" + checksum: 10219c58f40b8414c50b483b0550445e9710d4fe7b2c4dccb9b66533dd90ba8e024acc776026cebe81e87f06fa24b07fdd7bc30dd277eb9cc386ec50151a3026 + languageName: node + linkType: hard + "@sinonjs/commons@npm:^1.7.0": version: 1.8.3 resolution: "@sinonjs/commons@npm:1.8.3" @@ -10286,137 +10453,95 @@ __metadata: languageName: node linkType: hard -"@swc/core-android-arm-eabi@npm:1.3.11": - version: 1.3.11 - resolution: "@swc/core-android-arm-eabi@npm:1.3.11" - dependencies: - "@swc/wasm": 1.2.122 - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@swc/core-android-arm64@npm:1.3.11": - version: 1.3.11 - resolution: "@swc/core-android-arm64@npm:1.3.11" - dependencies: - "@swc/wasm": 1.2.130 - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@swc/core-darwin-arm64@npm:1.3.11": - version: 1.3.11 - resolution: "@swc/core-darwin-arm64@npm:1.3.11" +"@swc/core-darwin-arm64@npm:1.3.38": + version: 1.3.38 + resolution: "@swc/core-darwin-arm64@npm:1.3.38" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.11": - version: 1.3.11 - resolution: "@swc/core-darwin-x64@npm:1.3.11" +"@swc/core-darwin-x64@npm:1.3.38": + version: 1.3.38 + resolution: "@swc/core-darwin-x64@npm:1.3.38" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-freebsd-x64@npm:1.3.11": - version: 1.3.11 - resolution: "@swc/core-freebsd-x64@npm:1.3.11" - dependencies: - "@swc/wasm": 1.2.130 - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@swc/core-linux-arm-gnueabihf@npm:1.3.11": - version: 1.3.11 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.11" - dependencies: - "@swc/wasm": 1.2.130 +"@swc/core-linux-arm-gnueabihf@npm:1.3.38": + version: 1.3.38 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.38" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.11": - version: 1.3.11 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.11" +"@swc/core-linux-arm64-gnu@npm:1.3.38": + version: 1.3.38 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.38" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.11": - version: 1.3.11 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.11" +"@swc/core-linux-arm64-musl@npm:1.3.38": + version: 1.3.38 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.38" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.11": - version: 1.3.11 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.11" +"@swc/core-linux-x64-gnu@npm:1.3.38": + version: 1.3.38 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.38" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.11": - version: 1.3.11 - resolution: "@swc/core-linux-x64-musl@npm:1.3.11" +"@swc/core-linux-x64-musl@npm:1.3.38": + version: 1.3.38 + resolution: "@swc/core-linux-x64-musl@npm:1.3.38" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.11": - version: 1.3.11 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.11" - dependencies: - "@swc/wasm": 1.2.130 +"@swc/core-win32-arm64-msvc@npm:1.3.38": + version: 1.3.38 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.38" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.11": - version: 1.3.11 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.11" - dependencies: - "@swc/wasm": 1.2.130 +"@swc/core-win32-ia32-msvc@npm:1.3.38": + version: 1.3.38 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.38" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.11": - version: 1.3.11 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.11" +"@swc/core-win32-x64-msvc@npm:1.3.38": + version: 1.3.38 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.38" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@swc/core@npm:1.3.11": - version: 1.3.11 - resolution: "@swc/core@npm:1.3.11" +"@swc/core@npm:1.3.38": + version: 1.3.38 + resolution: "@swc/core@npm:1.3.38" dependencies: - "@swc/core-android-arm-eabi": 1.3.11 - "@swc/core-android-arm64": 1.3.11 - "@swc/core-darwin-arm64": 1.3.11 - "@swc/core-darwin-x64": 1.3.11 - "@swc/core-freebsd-x64": 1.3.11 - "@swc/core-linux-arm-gnueabihf": 1.3.11 - "@swc/core-linux-arm64-gnu": 1.3.11 - "@swc/core-linux-arm64-musl": 1.3.11 - "@swc/core-linux-x64-gnu": 1.3.11 - "@swc/core-linux-x64-musl": 1.3.11 - "@swc/core-win32-arm64-msvc": 1.3.11 - "@swc/core-win32-ia32-msvc": 1.3.11 - "@swc/core-win32-x64-msvc": 1.3.11 + "@swc/core-darwin-arm64": 1.3.38 + "@swc/core-darwin-x64": 1.3.38 + "@swc/core-linux-arm-gnueabihf": 1.3.38 + "@swc/core-linux-arm64-gnu": 1.3.38 + "@swc/core-linux-arm64-musl": 1.3.38 + "@swc/core-linux-x64-gnu": 1.3.38 + "@swc/core-linux-x64-musl": 1.3.38 + "@swc/core-win32-arm64-msvc": 1.3.38 + "@swc/core-win32-ia32-msvc": 1.3.38 + "@swc/core-win32-x64-msvc": 1.3.38 dependenciesMeta: - "@swc/core-android-arm-eabi": - optional: true - "@swc/core-android-arm64": - optional: true "@swc/core-darwin-arm64": optional: true "@swc/core-darwin-x64": optional: true - "@swc/core-freebsd-x64": - optional: true "@swc/core-linux-arm-gnueabihf": optional: true "@swc/core-linux-arm64-gnu": @@ -10433,32 +10558,16 @@ __metadata: optional: true "@swc/core-win32-x64-msvc": optional: true - bin: - swcx: run_swcx.js - checksum: 1d617f0707700b1b4137487acad24e2515c99cfcaba45e7ca3032acecc4faa6146cfcf20eca7a9c57e01f3cbea7995d5c46216cf665de897f6e4e2e4d4a7fa86 + checksum: c55d30e57638bcd21f788add8490c3f3e71bfe027aa5a8b153e1b1b9686ecddd6deeaaa6a6b17717c7eab4c1e2a232b465b6755b6c891506fc0d03139badfbf7 languageName: node linkType: hard -"@swc/helpers@npm:0.4.12": - version: 0.4.12 - resolution: "@swc/helpers@npm:0.4.12" +"@swc/helpers@npm:0.4.14": + version: 0.4.14 + resolution: "@swc/helpers@npm:0.4.14" dependencies: tslib: ^2.4.0 - checksum: 3f9112f37d87815b6d4270137fc78d22bb98c75138e9b0eac7cac203ec2cf2bffbf13b20a713067c292affd5e9e70a724eb245b8daf0963e7fe528b901771c28 - languageName: node - linkType: hard - -"@swc/wasm@npm:1.2.122": - version: 1.2.122 - resolution: "@swc/wasm@npm:1.2.122" - checksum: 563345370c5ad18373d3b403590ab880fe52dcd8fc8c8601be263fcd9886520b28a7f4e46236cf49ca2b136c79d4ef50c960bc34b7cdc2068118b0d84dfca1f4 - languageName: node - linkType: hard - -"@swc/wasm@npm:1.2.130": - version: 1.2.130 - resolution: "@swc/wasm@npm:1.2.130" - checksum: 02203bfef3e382c64cbbd63c138c8fdf61865e74d923b317e9d9e9f33f5a3f0a9533b5fdbc9505e76d78e864be04a82fc847eb987a1e47ccac5850146c858292 + checksum: 273fd3f3fc461a92f3790cc551ea054745c6d6959afbe1232e6d7aa1c722bbc114d308aab96bef5c78fc0303c85c7b472ef00e2253251cc89737f3b1af56e5a5 languageName: node linkType: hard @@ -10688,12 +10797,12 @@ __metadata: languageName: node linkType: hard -"@types/chrome-remote-interface@npm:0.31.4": - version: 0.31.4 - resolution: "@types/chrome-remote-interface@npm:0.31.4" +"@types/chrome-remote-interface@npm:0.31.9": + version: 0.31.9 + resolution: "@types/chrome-remote-interface@npm:0.31.9" dependencies: devtools-protocol: 0.0.927104 - checksum: 91c6cf9c749adedc08458b772db12f4142172f36fe885dc741921d259bdb7ec47d64b9e294d793a6c36f0435c6855d6470754fd143711e0b2ff204878dd4f721 + checksum: e1b3402ccda40c44f6849243a5aa6542761dc1ea57529b28fc053c2968288846ebb6cd9d5c19bcbdd466d3b76c0c24f3065b9fa57b12689abad6d6530446b014 languageName: node linkType: hard @@ -11058,10 +11167,10 @@ __metadata: languageName: node linkType: hard -"@types/debounce-promise@npm:3.1.5": - version: 3.1.5 - resolution: "@types/debounce-promise@npm:3.1.5" - checksum: 53ed58c3b9ee2300dcb233b3fcc1eaa4ef2921ee09833deb51143cb42f371e1090414aeccdb53dc2df013edc40b51b9addb50eeb163864ca8dbe94e1b4d8505d +"@types/debounce-promise@npm:3.1.6": + version: 3.1.6 + resolution: "@types/debounce-promise@npm:3.1.6" + checksum: db1e5bf86215dfcdd0b0f94497269b0be5b27e0b9622bbad53c7a24de078229b97927f848549bb661795575d80615fd935f8357d8f23928c0526b158b51fa122 languageName: node linkType: hard @@ -11103,13 +11212,13 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:8.21.0": - version: 8.21.0 - resolution: "@types/eslint@npm:8.21.0" +"@types/eslint@npm:8.21.1, @types/eslint@npm:^8.4.10": + version: 8.21.1 + resolution: "@types/eslint@npm:8.21.1" dependencies: "@types/estree": "*" "@types/json-schema": "*" - checksum: 48823b13e1ffbc6fe22c96d99f691a17507ef5a498c4aed95e3a9076ec6d44ff48ce8a632928b6f82bea92701ac8967bba0d78a5c9de4dfa3f2e12d26dae7da4 + checksum: 584068441e4000c7b41c8928274fdcc737bc62f564928c30eb64ec41bbdbac31612f9fedaf490bceab31ec8305e99615166428188ea345d58878394683086fae languageName: node linkType: hard @@ -11123,16 +11232,6 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:^7.29.0 || ^8.4.1": - version: 8.4.5 - resolution: "@types/eslint@npm:8.4.5" - dependencies: - "@types/estree": "*" - "@types/json-schema": "*" - checksum: 428b0c971a50adb0d08621e76f21b284580a0052a31341a0e6d553f72b54cd0142d549aa1497c7e3bc56e9f6bcc27286e66e0216e1ba76d1a5ecd2279c40bc8c - languageName: node - linkType: hard - "@types/estree-jsx@npm:^1.0.0": version: 1.0.0 resolution: "@types/estree-jsx@npm:1.0.0" @@ -11428,12 +11527,12 @@ __metadata: languageName: node linkType: hard -"@types/jquery@npm:3.5.14": - version: 3.5.14 - resolution: "@types/jquery@npm:3.5.14" +"@types/jquery@npm:3.5.16": + version: 3.5.16 + resolution: "@types/jquery@npm:3.5.16" dependencies: "@types/sizzle": "*" - checksum: 159d6f804ed1a204b3f79f2d591a271d82e866bd45bd49fb6ef40561a25dbe0f47ec7815681b44cc2db5598425f72811e7e80ab0e983d980470998ac56feb375 + checksum: 13c995f15d1c2f1d322103dc1cb0a22b95eecc3e7546f00279b8731aea21d7ec04550af40e609ee48e755d4e11bf61c25b4aa9f53df3bcbec4b8fe8e81471732 languageName: node linkType: hard @@ -11504,10 +11603,10 @@ __metadata: languageName: node linkType: hard -"@types/lodash@npm:4.14.187": - version: 4.14.187 - resolution: "@types/lodash@npm:4.14.187" - checksum: 5f8a4fe6d8a6785b8ecbd9efdc8b7d3341b873f63c5390ad0f269a517508e92c1b1d7d43e97bdfb6bba5bba9a8501b30a54f791ef4c30b854382745c75c607d4 +"@types/lodash@npm:4.14.191": + version: 4.14.191 + resolution: "@types/lodash@npm:4.14.191" + checksum: ba0d5434e10690869f32d5ea49095250157cae502f10d57de0a723fd72229ce6c6a4979576f0f13e0aa9fbe3ce2457bfb9fa7d4ec3d6daba56730a51906d1491 languageName: node linkType: hard @@ -11541,10 +11640,10 @@ __metadata: languageName: node linkType: hard -"@types/marked@npm:4.0.7": - version: 4.0.7 - resolution: "@types/marked@npm:4.0.7" - checksum: 4907b6a606578cd864bad429aca3c234591e6ed56bd141c575140487269b825a480ace9a85e4d003d1de1f007004c9d9b2fe600038ded5bba75aef59118e58d5 +"@types/marked@npm:4.0.8": + version: 4.0.8 + resolution: "@types/marked@npm:4.0.8" + checksum: 68278fa7acaa5d920cdc239d675b5daf842e0ad4779e4848cd617d9baf2ac1afccb5a264c331e37d80031d647e1640cb983cd31e73d45b28552670b4853fad8e languageName: node linkType: hard @@ -11592,10 +11691,10 @@ __metadata: languageName: node linkType: hard -"@types/mousetrap@npm:1.6.10": - version: 1.6.10 - resolution: "@types/mousetrap@npm:1.6.10" - checksum: ee112ad18c4cd28e67f9400d8b3e36d5bfe00925c03fcd534e5c6bb1c657b8e6ba74dbd3fdc4097dcfcb240a139b7f2dc8a698515ee03b7543c92bfd43348243 +"@types/mousetrap@npm:1.6.11": + version: 1.6.11 + resolution: "@types/mousetrap@npm:1.6.11" + checksum: 4465d16b7c20ab52d2f6b7fe8087e8f16101472f2e8758f01c63591015c1b0a67c9e6c371d978f24d5f37c4b83457515571489284bf7c7c844eb6c8f2527685b languageName: node linkType: hard @@ -11630,10 +11729,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:18.14.0": - version: 18.14.0 - resolution: "@types/node@npm:18.14.0" - checksum: d83fcf5e4ed544755dd9028f5cbb6b9d46235043159111bb2ad62223729aee581c0144a9f6df8ba73d74011db9ed4ebd7af2fd5e0996714e3beb508a5da8ac5c +"@types/node@npm:18.14.6": + version: 18.14.6 + resolution: "@types/node@npm:18.14.6" + checksum: 2f88f482cabadc6dbddd627a1674239e68c3c9beab56eb4ae2309fb96fd17fc3a509d99b0309bafe13b58529574f49ecf3a583f2ebe2896dd32fe4be436dc96e languageName: node linkType: hard @@ -11672,21 +11771,21 @@ __metadata: languageName: node linkType: hard -"@types/ol-ext@npm:@siedlerchr/types-ol-ext@3.0.6": - version: 3.0.6 - resolution: "@siedlerchr/types-ol-ext@npm:3.0.6" +"@types/ol-ext@npm:@siedlerchr/types-ol-ext@3.0.9": + version: 3.0.9 + resolution: "@siedlerchr/types-ol-ext@npm:3.0.9" dependencies: jspdf: ^2.5.1 - checksum: d43e5c8730b04d1469407e24dfa017e38289a6f930e9d514be5811f3426b49c879e53e847f63ef5451de4194ee99eea70a7d1884fc4ab6476f00ad03c78d9f33 + checksum: 5f16d09dccd4f553c83f68eb1db854453e2ae93e284eac15055d444a798b2fdbc72e01bb51db7a8e46deb93a2444081302c53f3fd9f0fd3c8692a402974330cf languageName: node linkType: hard -"@types/papaparse@npm:5.3.5": - version: 5.3.5 - resolution: "@types/papaparse@npm:5.3.5" +"@types/papaparse@npm:5.3.7": + version: 5.3.7 + resolution: "@types/papaparse@npm:5.3.7" dependencies: "@types/node": "*" - checksum: f9833662e5536836be9586b9344757d99e22c7cfd6997ab212700c3b623491e28548676e023adfa801fc7c60f3f6d1d417dbf02c5f138442ed9b020b128a7f5f + checksum: 5ffa6fc81c0f41cd18c9c015599b3690f2a19ee553dec85e92c17bd1ef4a045e0ba4973d8bd49aed9f83fcba3b0ec280ebbe0a0def66701c0b4860c691444694 languageName: node linkType: hard @@ -11767,12 +11866,12 @@ __metadata: languageName: node linkType: hard -"@types/react-beautiful-dnd@npm:13.1.2": - version: 13.1.2 - resolution: "@types/react-beautiful-dnd@npm:13.1.2" +"@types/react-beautiful-dnd@npm:13.1.3": + version: 13.1.3 + resolution: "@types/react-beautiful-dnd@npm:13.1.3" dependencies: "@types/react": "*" - checksum: 28372854fcd4b7546aabe55ee6569da59fad10f117929cff8a9c6f928448e4dd08ed1139facca33232833b9de100edf017aab9a0ee34065f8fc0e2a7a1262b2c + checksum: e09860672c15666ee3d3acfad3dfc2ebd8fceb29b5468e12b7543af74d0e19f2eb9c4be187adb33c5d6816f47b0db958a8c0160b15826b92f6df1e8e3e34657a languageName: node linkType: hard @@ -11844,15 +11943,15 @@ __metadata: languageName: node linkType: hard -"@types/react-redux@npm:7.1.24": - version: 7.1.24 - resolution: "@types/react-redux@npm:7.1.24" +"@types/react-redux@npm:7.1.25": + version: 7.1.25 + resolution: "@types/react-redux@npm:7.1.25" dependencies: "@types/hoist-non-react-statics": ^3.3.0 "@types/react": "*" hoist-non-react-statics: ^3.3.0 redux: ^4.0.0 - checksum: 6582246581331ac7fbbd44aa1f1c136c8a9c8febbcf462432ac81302263308c21e1a2e7868beb7f73bbcb52a8e67935d133cb37f5bdcb6564eaff3a811805101 + checksum: a61ec25cbf8bb3720850402d3c49493fcff4afb73ad447d161460b5d4c600c984ad48708e8564d2fd32052eaa3c3b3f655c5b300ce813429637cce9e5958329f languageName: node linkType: hard @@ -11898,12 +11997,12 @@ __metadata: languageName: node linkType: hard -"@types/react-table@npm:7.7.12": - version: 7.7.12 - resolution: "@types/react-table@npm:7.7.12" +"@types/react-table@npm:7.7.14": + version: 7.7.14 + resolution: "@types/react-table@npm:7.7.14" dependencies: "@types/react": "*" - checksum: 287ea68e75b56c2e70e6d6491cd172348c7302b032789047eb2dca1b25b240684e48a60f58140575828b790f95724b9f3ec4d3adce82fc1c05d994def1449009 + checksum: 238047beca9abecc4b3e1e377b823b492b1a00d011b8456012bbcbd2682d5a7e0c0b1cca6384ccc41e724156e991d35e5725a5a3c4b01ff7bbaf095643569da9 languageName: node linkType: hard @@ -12357,12 +12456,12 @@ __metadata: languageName: node linkType: hard -"@types/yargs@npm:17.0.12": - version: 17.0.12 - resolution: "@types/yargs@npm:17.0.12" +"@types/yargs@npm:17.0.22": + version: 17.0.22 + resolution: "@types/yargs@npm:17.0.22" dependencies: "@types/yargs-parser": "*" - checksum: 5b41d21d8624199f89db82209b2adab2e47867b3677e852fde65698be2ca48364b14c2e70cb0adc9bca4a2102c93dad2409cae0ad666ea36ae031ae1cb08a7b5 + checksum: 0773523fda71bafdc52f13f5970039e535a353665a60ba9261149a5c9c2b908242e6e77fbb7a8c06931ec78ce889d64d09673c68ba23eb5f5742d5385d0d1982 languageName: node linkType: hard @@ -12764,9 +12863,9 @@ __metadata: languageName: node linkType: hard -"@visx/bounds@npm:2.16.0": - version: 2.16.0 - resolution: "@visx/bounds@npm:2.16.0" +"@visx/bounds@npm:3.0.0": + version: 3.0.0 + resolution: "@visx/bounds@npm:3.0.0" dependencies: "@types/react": "*" "@types/react-dom": "*" @@ -12774,7 +12873,7 @@ __metadata: peerDependencies: react: ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0 react-dom: ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0 - checksum: dcc30f4f6b5ca5f69ea30e9dee01243a3c770fafc33c50b0666b0a2b76a2c989251e90a07e68640691d7d11de7cc6989c823c1d36b8c96552da8e0f74408059b + checksum: 3c50dad1c78b526bebe20a690360ae5ad3dd2a31c86150553071671e49309a9fcf3bca3303eab7f7ac2e28be8d7987ac9ce5daa28b8df32c647b0aa97f118fa9 languageName: node linkType: hard @@ -12788,38 +12887,25 @@ __metadata: languageName: node linkType: hard -"@visx/event@npm:2.17.0": - version: 2.17.0 - resolution: "@visx/event@npm:2.17.0" +"@visx/event@npm:3.0.1": + version: 3.0.1 + resolution: "@visx/event@npm:3.0.1" dependencies: "@types/react": "*" - "@visx/point": 2.17.0 - checksum: 360a9ee2a163c0e0200f98cadcd9f0c98f53725d4be62e49d326aeb8ca7cd837305f28f326f03d9ae49910ca67e1185a97827f0ef76efb0b901fb54c56c97bd3 + "@visx/point": 3.0.1 + checksum: 0cb4dd578bbe54bd428a0cfae9e64db141b039c2c6c1412d1cd1d04e1613d193212b031124948ca3b7eed877cdea87d161cc3a008b973c6f217e21a8a2dd27b0 languageName: node linkType: hard -"@visx/gradient@npm:2.10.0": - version: 2.10.0 - resolution: "@visx/gradient@npm:2.10.0" +"@visx/gradient@npm:3.0.0": + version: 3.0.0 + resolution: "@visx/gradient@npm:3.0.0" dependencies: "@types/react": "*" prop-types: ^15.5.7 peerDependencies: react: ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0 - checksum: 30b1a0d0f30685c4c53795a6c4a4b0c88f290a6606205867c9b611f35ad122fa92bc4e5992674276972d698518aabecf7411ed2e71e0583c24f2ac8fdbb0f08f - languageName: node - linkType: hard - -"@visx/group@npm:2.10.0": - version: 2.10.0 - resolution: "@visx/group@npm:2.10.0" - dependencies: - "@types/react": "*" - classnames: ^2.3.1 - prop-types: ^15.6.2 - peerDependencies: - react: ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0 - checksum: 4774fb8d62f68948e45cb214acf025d4f0be1a4d80be11d7771dcd63f7e054710df2a05bc66c5b0d57bf33755c834f5d6033b11c0a360681ca166e32342292f2 + checksum: 471b4a4e1ec329e26cedb5aeef627b7c6393b54d85f76fa2707ec4f2b75a67007c5d9e4c9ffbdf58d37853228c21e285780466ab958b22dbba41f209c5212182 languageName: node linkType: hard @@ -12836,10 +12922,10 @@ __metadata: languageName: node linkType: hard -"@visx/point@npm:2.17.0": - version: 2.17.0 - resolution: "@visx/point@npm:2.17.0" - checksum: 9cb18e41f1f47e46b85bdbbdd1c930a654ed8b731b3a5da0920e2b3a261d887c066ec97079293d4f5195a1e04d842faa2f2bf0519876cb27ea6ee82fc5ff8855 +"@visx/point@npm:3.0.1": + version: 3.0.1 + resolution: "@visx/point@npm:3.0.1" + checksum: 727f314826eb85a608b4088a9e2fedb7e6996a5f0fdddaeb40702a51aa04da07fdbc5fdcf2d595d914dfa083389c644f769fc69b3a247b4da274936dd58c7bb8 languageName: node linkType: hard @@ -12879,19 +12965,19 @@ __metadata: languageName: node linkType: hard -"@visx/tooltip@npm:2.16.0": - version: 2.16.0 - resolution: "@visx/tooltip@npm:2.16.0" +"@visx/tooltip@npm:3.0.0": + version: 3.0.0 + resolution: "@visx/tooltip@npm:3.0.0" dependencies: "@types/react": "*" - "@visx/bounds": 2.16.0 + "@visx/bounds": 3.0.0 classnames: ^2.3.1 prop-types: ^15.5.10 react-use-measure: ^2.0.4 peerDependencies: react: ^16.8.0-0 || ^17.0.0-0 || ^18.0.0-0 react-dom: ^16.8.0-0 || ^17.0.0-0 || ^18.0.0-0 - checksum: 1a6ed1877b0370e4c57ba9b678eace46221a04ab7f66cbfa8fad3ebb98405655e062a31524654e16cb8cd94db7c4c8f610fdea4ab22c5ec9617ce3165badeb26 + checksum: f3d9b62905424c8c3bd10f2fcbf6947da9adc7fff9a22aa961ce1c4523db4f0297b066a2fe27eeae7f4e45f0a4f7049067b6da71c6566a3991cb6fc53f6f8eb4 languageName: node linkType: hard @@ -13046,36 +13132,36 @@ __metadata: languageName: node linkType: hard -"@webpack-cli/configtest@npm:^1.2.0": - version: 1.2.0 - resolution: "@webpack-cli/configtest@npm:1.2.0" +"@webpack-cli/configtest@npm:^2.0.1": + version: 2.0.1 + resolution: "@webpack-cli/configtest@npm:2.0.1" peerDependencies: - webpack: 4.x.x || 5.x.x - webpack-cli: 4.x.x - checksum: a2726cd9ec601d2b57e5fc15e0ebf5200a8892065e735911269ac2038e62be4bfc176ea1f88c2c46ff09b4d05d4c10ae045e87b3679372483d47da625a327e28 + webpack: 5.x.x + webpack-cli: 5.x.x + checksum: 15d0ca835f2e16ec99e9f295f07b676435b9e706d7700df0ad088692fea065e34772fc44b96a4f6a86178b9ca8cf1ff941fbce15269587cf0925d70b18928cea languageName: node linkType: hard -"@webpack-cli/info@npm:^1.5.0": - version: 1.5.0 - resolution: "@webpack-cli/info@npm:1.5.0" - dependencies: - envinfo: ^7.7.3 +"@webpack-cli/info@npm:^2.0.1": + version: 2.0.1 + resolution: "@webpack-cli/info@npm:2.0.1" peerDependencies: - webpack-cli: 4.x.x - checksum: 7f56fe037cd7d1fd5c7428588519fbf04a0cad33925ee4202ffbafd00f8ec1f2f67d991245e687d50e0f3e23f7b7814273d56cb9f7da4b05eed47c8d815c6296 + webpack: 5.x.x + webpack-cli: 5.x.x + checksum: b8fba49fee10d297c2affb0b064c9a81e9038d75517c6728fb85f9fb254cae634e5d33e696dac5171e6944ae329d85fddac72f781c7d833f7e9dfe43151ce60d languageName: node linkType: hard -"@webpack-cli/serve@npm:^1.7.0": - version: 1.7.0 - resolution: "@webpack-cli/serve@npm:1.7.0" +"@webpack-cli/serve@npm:^2.0.1": + version: 2.0.1 + resolution: "@webpack-cli/serve@npm:2.0.1" peerDependencies: - webpack-cli: 4.x.x + webpack: 5.x.x + webpack-cli: 5.x.x peerDependenciesMeta: webpack-dev-server: optional: true - checksum: d475e8effa23eb7ff9a48b14d4de425989fd82f906ce71c210921cc3852327c22873be00c35e181a25a6bd03d424ae2b83e7f3b3f410ac7ee31b128ab4ac7713 + checksum: 75c55f8398dd60e4821f81bec6e96287cebb3ab1837ef016779bc2f0c76a1d29c45b99e53daa99ba1fa156b5e2b61c19abf58098de20c2b58391b1f496ecc145 languageName: node linkType: hard @@ -13111,7 +13197,7 @@ __metadata: languageName: node linkType: hard -"@xstate/react@npm:^3.0.0": +"@xstate/react@npm:^3.2.1": version: 3.2.1 resolution: "@xstate/react@npm:3.2.1" dependencies: @@ -14309,16 +14395,16 @@ __metadata: languageName: node linkType: hard -"babel-loader@npm:9.1.0": - version: 9.1.0 - resolution: "babel-loader@npm:9.1.0" +"babel-loader@npm:9.1.2": + version: 9.1.2 + resolution: "babel-loader@npm:9.1.2" dependencies: find-cache-dir: ^3.3.2 schema-utils: ^4.0.0 peerDependencies: "@babel/core": ^7.12.0 webpack: ">=5" - checksum: 774758febd1e8ca804abcae3b8f65634330dc688837424d0946f06d1386914de43435cce691710fa144eccdf1292cf883439ac3598ce7320916acfaaa2372641 + checksum: f0edb8e157f9806b810ba3f2c8ca8fa489d377ae5c2b7b00c2ace900a6925641ce4ec520b9c12f70e37b94aa5366e7003e0f6271b26821643e109966ce741cb7 languageName: node linkType: hard @@ -15762,15 +15848,15 @@ __metadata: languageName: node linkType: hard -"chrome-remote-interface@npm:0.32.0": - version: 0.32.0 - resolution: "chrome-remote-interface@npm:0.32.0" +"chrome-remote-interface@npm:0.32.1": + version: 0.32.1 + resolution: "chrome-remote-interface@npm:0.32.1" dependencies: commander: 2.11.x ws: ^7.2.0 bin: chrome-remote-interface: bin/client.js - checksum: 9be5e5bce0856d3fe4e32339857514d16ca4831310de4475a8e62f604fa346d939d82058aa06411ba61d2ee3cee8d0288599221908d82cd6e548ad09dd215794 + checksum: 2a7c7e42e9a41a44242b7cecafbb5df20dfc594f87bdfbc45c6fa8c1615ff18ed9edc285df6b4b5c0901452fe9f042dbf3867c3722af530f918cb172942bd225 languageName: node linkType: hard @@ -16002,6 +16088,13 @@ __metadata: languageName: node linkType: hard +"clsx@npm:^1.2.1": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 + languageName: node + linkType: hard + "cmd-shim@npm:^5.0.0": version: 5.0.0 resolution: "cmd-shim@npm:5.0.0" @@ -16177,10 +16270,10 @@ __metadata: languageName: node linkType: hard -"comlink@npm:4.4.0": - version: 4.4.0 - resolution: "comlink@npm:4.4.0" - checksum: 429dc83e36d35c3dfd17e86343142ed3526fe2310a18f3816d0380eb9a162b50272bb40f7426e1c5a1f04f44203a178b60a4a0bcabed01d675d91474c53788f7 +"comlink@npm:4.4.1": + version: 4.4.1 + resolution: "comlink@npm:4.4.1" + checksum: 16d58a8f590087fc45432e31d6c138308dfd4b75b89aec0b7f7bb97ad33d810381bd2b1e608a1fb2cf05979af9cbfcdcaf1715996d5fcf77aeb013b6da3260af languageName: node linkType: hard @@ -16226,7 +16319,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:7, commander@npm:^7.0.0, commander@npm:^7.2.0": +"commander@npm:7, commander@npm:^7.2.0": version: 7.2.0 resolution: "commander@npm:7.2.0" checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc @@ -16756,6 +16849,18 @@ __metadata: languageName: node linkType: hard +"cosmiconfig@npm:^8.0.0": + version: 8.1.0 + resolution: "cosmiconfig@npm:8.1.0" + dependencies: + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + parse-json: ^5.0.0 + path-type: ^4.0.0 + checksum: 78a1846acc4935ab4d928e3f768ee2ad2fddbec96377935462749206568423ff4757140ac7f2ccd1f547f86309b8448c04b26588848b5a1520f2e9741cdeecf0 + languageName: node + linkType: hard + "cp-file@npm:^7.0.0": version: 7.0.0 resolution: "cp-file@npm:7.0.0" @@ -16804,7 +16909,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^6.0.0, cross-spawn@npm:^6.0.5": +"cross-spawn@npm:^6.0.0": version: 6.0.5 resolution: "cross-spawn@npm:6.0.5" dependencies: @@ -16908,21 +17013,21 @@ __metadata: languageName: node linkType: hard -"css-loader@npm:6.7.1, css-loader@npm:^6.7.1": - version: 6.7.1 - resolution: "css-loader@npm:6.7.1" +"css-loader@npm:6.7.3": + version: 6.7.3 + resolution: "css-loader@npm:6.7.3" dependencies: icss-utils: ^5.1.0 - postcss: ^8.4.7 + postcss: ^8.4.19 postcss-modules-extract-imports: ^3.0.0 postcss-modules-local-by-default: ^4.0.0 postcss-modules-scope: ^3.0.0 postcss-modules-values: ^4.0.0 postcss-value-parser: ^4.2.0 - semver: ^7.3.5 + semver: ^7.3.8 peerDependencies: webpack: ^5.0.0 - checksum: 170fdbc630a05a43679ef60fa97694766b568dbde37adccc0faafa964fc675f08b976bc68837bb73b61d60240e8d2cbcbf51540fe94ebc9dafc56e7c46ba5527 + checksum: 473cc32b6c837c2848e2051ad1ba331c1457449f47442e75a8c480d9891451434ada241f7e3de2347e57de17fcd84610b3bcfc4a9da41102cdaedd1e17902d31 languageName: node linkType: hard @@ -16946,6 +17051,24 @@ __metadata: languageName: node linkType: hard +"css-loader@npm:^6.7.1": + version: 6.7.1 + resolution: "css-loader@npm:6.7.1" + dependencies: + icss-utils: ^5.1.0 + postcss: ^8.4.7 + postcss-modules-extract-imports: ^3.0.0 + postcss-modules-local-by-default: ^4.0.0 + postcss-modules-scope: ^3.0.0 + postcss-modules-values: ^4.0.0 + postcss-value-parser: ^4.2.0 + semver: ^7.3.5 + peerDependencies: + webpack: ^5.0.0 + checksum: 170fdbc630a05a43679ef60fa97694766b568dbde37adccc0faafa964fc675f08b976bc68837bb73b61d60240e8d2cbcbf51540fe94ebc9dafc56e7c46ba5527 + languageName: node + linkType: hard + "css-minimizer-webpack-plugin@npm:4.2.2": version: 4.2.2 resolution: "css-minimizer-webpack-plugin@npm:4.2.2" @@ -17081,6 +17204,16 @@ __metadata: languageName: node linkType: hard +"css-tree@npm:^2.3.1": + version: 2.3.1 + resolution: "css-tree@npm:2.3.1" + dependencies: + mdn-data: 2.0.30 + source-map-js: ^1.0.1 + checksum: 493cc24b5c22b05ee5314b8a0d72d8a5869491c1458017ae5ed75aeb6c3596637dbe1b11dac2548974624adec9f7a1f3a6cf40593dc1f9185eb0e8279543fbc0 + languageName: node + linkType: hard + "css-what@npm:^5.0.0": version: 5.1.0 resolution: "css-what@npm:5.1.0" @@ -17809,19 +17942,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2": - version: 4.3.2 - resolution: "debug@npm:4.3.2" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 820ea160e267e23c953c9ed87e7ad93494d8cda2f7349af5e7e3bb236d23707ee3022f477d5a7d2ee86ef2bf7d60aa9ab22d1f58080d7deb9dccd073585e1e43 - languageName: node - linkType: hard - -"debug@npm:4.3.4, debug@npm:^4.0.0, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -17849,18 +17970,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.3.3": - version: 4.3.3 - resolution: "debug@npm:4.3.3" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 14472d56fe4a94dbcfaa6dbed2dd3849f1d72ba78104a1a328047bb564643ca49df0224c3a17fa63533fd11dd3d4c8636cd861191232a2c6735af00cc2d4de16 - languageName: node - linkType: hard - "debuglog@npm:^1.0.1": version: 1.0.1 resolution: "debuglog@npm:1.0.1" @@ -18190,10 +18299,10 @@ __metadata: languageName: node linkType: hard -"devtools-protocol@npm:0.0.1065144": - version: 0.0.1065144 - resolution: "devtools-protocol@npm:0.0.1065144" - checksum: c21ea807cacecde2493a2d5392a573ddec5fdb9cffafecb2e4a504dda70706a465ab36391bb0d71210d8037905f1c60d629eaadd2c55c438ccb747bab209e377 +"devtools-protocol@npm:0.0.1113774": + version: 0.0.1113774 + resolution: "devtools-protocol@npm:0.0.1113774" + checksum: b1026b0ec1490ab5990ca3b5c6fd8c4c7bf345b7d9f8fc7016071c5d1c8cf49b268b4a6e1799504e2dea45dbed4118b5db37c7f6df0c5586c4781df6b82fe61d languageName: node linkType: hard @@ -18305,11 +18414,11 @@ __metadata: linkType: hard "dns-packet@npm:^5.2.2": - version: 5.3.1 - resolution: "dns-packet@npm:5.3.1" + version: 5.4.0 + resolution: "dns-packet@npm:5.4.0" dependencies: "@leichtgewicht/ip-codec": ^2.0.1 - checksum: 196ff74a0669126cf5fc901a5849b72f625bd7a4cb163b3f4d41fbe19ed0b017cf7674daef5b0acbd448c094fcd795e501d7066f301be428e4acecfcf3c5f336 + checksum: a169963848e8539dfd8a19058562f9e1c15c0f82cbf76fa98942f11c46f3c74e7e7c82e3a8a5182d4c9e6ff19e21be738dbd098a876dde755d3aedd2cc730880 languageName: node linkType: hard @@ -18468,10 +18577,10 @@ __metadata: languageName: node linkType: hard -"dompurify@npm:^2.4.1": - version: 2.4.3 - resolution: "dompurify@npm:2.4.3" - checksum: b440981f2a38cada2085759cc3d1e2f94571afc34343d011a8a6aa1ad91ae6abf651adbfa4994b0e2283f0ce81f7891cdb04b67d0b234c8d190cb70e9691f026 +"dompurify@npm:^2.4.3": + version: 2.4.5 + resolution: "dompurify@npm:2.4.5" + checksum: d6d3c3b320f15cdb5b26aa1902c3275a3ab2c3705a9df4420bb94691d7c4df67959ec7b91e486c308320791b0ee000456f042734c45d76721e61c2768eac706e languageName: node linkType: hard @@ -19650,9 +19759,9 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jsdoc@npm:39.8.0": - version: 39.8.0 - resolution: "eslint-plugin-jsdoc@npm:39.8.0" +"eslint-plugin-jsdoc@npm:40.0.1": + version: 40.0.1 + resolution: "eslint-plugin-jsdoc@npm:40.0.1" dependencies: "@es-joy/jsdoccomment": ~0.36.1 comment-parser: 1.3.1 @@ -19663,7 +19772,7 @@ __metadata: spdx-expression-parse: ^3.0.1 peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: fe2fec06605c9effe30c3c136f91ba5720d0dec519f5d54dc336f86dc3375793053399e9ca37a33e8eb04cc10571ded800c5babe8b09822922209a0b63751855 + checksum: 19c5de2f8d0dec11c981eccce7255a8cc58e37c8d697c75144913879b16a9ea90995764bfeb00cbfc2b0678e28210cbe62a6b7865b05e756e887fffc892baf61 languageName: node linkType: hard @@ -19761,9 +19870,9 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:7.32.1": - version: 7.32.1 - resolution: "eslint-plugin-react@npm:7.32.1" +"eslint-plugin-react@npm:7.32.2": + version: 7.32.2 + resolution: "eslint-plugin-react@npm:7.32.2" dependencies: array-includes: ^3.1.6 array.prototype.flatmap: ^1.3.1 @@ -19782,7 +19891,7 @@ __metadata: string.prototype.matchall: ^4.0.8 peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: e20eab61161a3db6211c2bd1eb9be3e407fd14e72c06c5f39a078b6ac37427b2af6056ee70e3954249bca0a04088ae797a0c8ba909fb8802e29712de2a41262d + checksum: 2232b3b8945aa50b7773919c15cd96892acf35d2f82503667a79e2f55def90f728ed4f0e496f0f157acbe1bd4397c5615b676ae7428fe84488a544ca53feb944 languageName: node linkType: hard @@ -19838,19 +19947,19 @@ __metadata: languageName: node linkType: hard -"eslint-webpack-plugin@npm:3.2.0": - version: 3.2.0 - resolution: "eslint-webpack-plugin@npm:3.2.0" +"eslint-webpack-plugin@npm:4.0.0": + version: 4.0.0 + resolution: "eslint-webpack-plugin@npm:4.0.0" dependencies: - "@types/eslint": ^7.29.0 || ^8.4.1 - jest-worker: ^28.0.2 + "@types/eslint": ^8.4.10 + jest-worker: ^29.4.1 micromatch: ^4.0.5 normalize-path: ^3.0.0 schema-utils: ^4.0.0 peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.0.0 webpack: ^5.0.0 - checksum: 095034c35e773fdb21ec7e597ae1f8a6899679c290db29d8568ca94619e8c7f4971f0f9edccc8a965322ab8af9286c87205985a38f4fdcf17654aee7cd8bb7b5 + checksum: e57a1e6cd23ff72bfdcb96fbf61b8561eb0ed7793ca7922803c4ce9e2aac717168e674d5b08926e6a115126435494adb1f2c9e7cd646b7b56ab3ddf05f8ceec2 languageName: node linkType: hard @@ -20856,6 +20965,13 @@ __metadata: languageName: node linkType: hard +"find-parent-dir@npm:~0.3.0": + version: 0.3.1 + resolution: "find-parent-dir@npm:0.3.1" + checksum: 55e722584760cfbc6611901c7ced5081345cf629e2ecd6a4f6704b13b5a1876c8d9d9db5fd4965ba23e1ecbc24a8b62af40379cfef1ffa0231719b9d924eebdd + languageName: node + linkType: hard + "find-root@npm:^1.1.0": version: 1.1.0 resolution: "find-root@npm:1.1.0" @@ -21007,9 +21123,9 @@ __metadata: languageName: node linkType: hard -"fork-ts-checker-webpack-plugin@npm:7.3.0": - version: 7.3.0 - resolution: "fork-ts-checker-webpack-plugin@npm:7.3.0" +"fork-ts-checker-webpack-plugin@npm:8.0.0": + version: 8.0.0 + resolution: "fork-ts-checker-webpack-plugin@npm:8.0.0" dependencies: "@babel/code-frame": ^7.16.7 chalk: ^4.1.2 @@ -21025,12 +21141,8 @@ __metadata: tapable: ^2.2.1 peerDependencies: typescript: ">3.6.0" - vue-template-compiler: "*" webpack: ^5.11.0 - peerDependenciesMeta: - vue-template-compiler: - optional: true - checksum: 49c2af801e264349a3fdf0afe4ad33065960c43bd7e56c8351a5e0d32c8c54146cc89d6a0b70b1e0f810de96787bd0c7fd275cc8727a9aea1a077c53de99659a + checksum: aad4cbc5b802e6281a2700a379837697c93ad95288468f9595219d91d9c26674736d37852bb4c4341e9122f26181e9e05fc1a362e8d029fdd88e99de7816037b languageName: node linkType: hard @@ -21778,15 +21890,15 @@ __metadata: languageName: node linkType: hard -"glob@npm:9.1.2": - version: 9.1.2 - resolution: "glob@npm:9.1.2" +"glob@npm:9.2.1, glob@npm:^9.2.0": + version: 9.2.1 + resolution: "glob@npm:9.2.1" dependencies: fs.realpath: ^1.0.0 minimatch: ^7.4.1 minipass: ^4.2.4 - path-scurry: ^1.5.0 - checksum: 8c0bcd729b5783c340553966a25728a6c6e53275b825b4bf3be52bc2d6d31ea39d55d3c7e989edfc541f5a0ba7421b8616788f55367dd8551aac6cebbf7491ab + path-scurry: ^1.6.1 + checksum: ef9b1c32491e6b532bdd0d2abcc3c9f48e83446609e11285869156982fc5a756dfbaa6f59f797712343bd1e22500ac15708692806633653fde4ef67c85e2aab7 languageName: node linkType: hard @@ -21803,18 +21915,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:^9.2.0": - version: 9.2.1 - resolution: "glob@npm:9.2.1" - dependencies: - fs.realpath: ^1.0.0 - minimatch: ^7.4.1 - minipass: ^4.2.4 - path-scurry: ^1.6.1 - checksum: ef9b1c32491e6b532bdd0d2abcc3c9f48e83446609e11285869156982fc5a756dfbaa6f59f797712343bd1e22500ac15708692806633653fde4ef67c85e2aab7 - languageName: node - linkType: hard - "global-dirs@npm:^3.0.0": version: 3.0.1 resolution: "global-dirs@npm:3.0.1" @@ -21989,7 +22089,7 @@ __metadata: "@babel/core": 7.20.5 "@babel/plugin-proposal-class-properties": 7.18.6 "@babel/plugin-proposal-nullish-coalescing-operator": 7.18.6 - "@babel/plugin-proposal-object-rest-spread": 7.20.2 + "@babel/plugin-proposal-object-rest-spread": 7.20.7 "@babel/plugin-proposal-optional-chaining": 7.20.7 "@babel/plugin-syntax-dynamic-import": 7.8.3 "@babel/plugin-transform-react-constant-elements": 7.20.2 @@ -22003,37 +22103,37 @@ __metadata: "@betterer/cli": 5.4.0 "@betterer/eslint": 5.4.0 "@betterer/regexp": 5.4.0 - "@daybrush/utils": 1.10.0 - "@emotion/css": 11.10.5 + "@daybrush/utils": 1.10.2 + "@emotion/css": 11.10.6 "@emotion/eslint-plugin": 11.10.0 - "@emotion/react": 11.10.5 - "@grafana/aws-sdk": 0.0.40 + "@emotion/react": 11.10.6 + "@grafana/aws-sdk": 0.0.44 "@grafana/data": "workspace:*" "@grafana/e2e": "workspace:*" "@grafana/e2e-selectors": "workspace:*" "@grafana/eslint-config": 5.1.0 "@grafana/eslint-plugin": "link:./packages/grafana-eslint-rules" "@grafana/experimental": 1.1.0 - "@grafana/faro-core": 1.0.0-beta2 - "@grafana/faro-web-sdk": 1.0.0-beta2 + "@grafana/faro-core": 1.0.2 + "@grafana/faro-web-sdk": 1.0.2 "@grafana/google-sdk": 0.0.4 "@grafana/lezer-logql": 0.1.2 - "@grafana/monaco-logql": ^0.0.6 + "@grafana/monaco-logql": ^0.0.7 "@grafana/runtime": "workspace:*" - "@grafana/scenes": ^0.0.14 + "@grafana/scenes": ^0.0.21 "@grafana/schema": "workspace:*" "@grafana/toolkit": "workspace:*" "@grafana/tsconfig": ^1.2.0-rc1 "@grafana/ui": "workspace:*" "@kusto/monaco-kusto": 5.3.6 - "@leeoniya/ufuzzy": 1.0.2 - "@lezer/common": 1.0.1 - "@lezer/highlight": 1.1.2 - "@lezer/lr": 1.3.1 + "@leeoniya/ufuzzy": 1.0.6 + "@lezer/common": 1.0.2 + "@lezer/highlight": 1.1.3 + "@lezer/lr": 1.3.3 "@opentelemetry/api": 1.4.0 "@opentelemetry/exporter-collector": 0.25.0 "@opentelemetry/semantic-conventions": 1.9.1 - "@pmmmwh/react-refresh-webpack-plugin": 0.5.8 + "@pmmmwh/react-refresh-webpack-plugin": 0.5.10 "@popperjs/core": 2.11.6 "@prometheus-io/lezer-promql": ^0.37.0-rc.1 "@react-aria/button": 3.6.1 @@ -22046,17 +22146,17 @@ __metadata: "@react-stately/collections": 3.4.1 "@react-stately/menu": 3.4.1 "@react-stately/tree": 3.3.1 - "@react-types/button": 3.7.0 + "@react-types/button": 3.7.1 "@react-types/menu": 3.7.2 "@react-types/overlays": 3.6.4 "@react-types/shared": 3.16.0 - "@reduxjs/toolkit": 1.9.1 + "@reduxjs/toolkit": 1.9.3 "@rtsao/plugin-proposal-class-properties": 7.0.1-patch.1 "@sentry/browser": 6.19.7 "@sentry/types": 6.19.7 "@sentry/utils": 6.19.7 - "@swc/core": 1.3.11 - "@swc/helpers": 0.4.12 + "@swc/core": 1.3.38 + "@swc/helpers": 0.4.14 "@testing-library/dom": 8.20.0 "@testing-library/jest-dom": 5.16.5 "@testing-library/react": 12.1.4 @@ -22068,9 +22168,9 @@ __metadata: "@types/d3": 7.4.0 "@types/d3-force": ^3.0.0 "@types/d3-scale-chromatic": 3.0.0 - "@types/debounce-promise": 3.1.5 + "@types/debounce-promise": 3.1.6 "@types/dompurify": ^2 - "@types/eslint": 8.21.0 + "@types/eslint": 8.21.1 "@types/file-saver": 2.0.5 "@types/glob": ^8.0.0 "@types/google.analytics": ^0.0.42 @@ -22078,26 +22178,26 @@ __metadata: "@types/history": 4.7.11 "@types/hoist-non-react-statics": 3.3.1 "@types/jest": 29.2.3 - "@types/jquery": 3.5.14 + "@types/jquery": 3.5.16 "@types/js-yaml": ^4.0.5 "@types/jsurl": ^1.2.28 - "@types/lodash": 4.14.187 + "@types/lodash": 4.14.191 "@types/logfmt": ^1.2.3 - "@types/mousetrap": 1.6.10 - "@types/node": 18.14.0 - "@types/ol-ext": "npm:@siedlerchr/types-ol-ext@3.0.6" - "@types/papaparse": 5.3.5 + "@types/mousetrap": 1.6.11 + "@types/node": 18.14.6 + "@types/ol-ext": "npm:@siedlerchr/types-ol-ext@3.0.9" + "@types/papaparse": 5.3.7 "@types/pluralize": ^0.0.29 "@types/prismjs": 1.26.0 "@types/react": 17.0.42 - "@types/react-beautiful-dnd": 13.1.2 + "@types/react-beautiful-dnd": 13.1.3 "@types/react-dom": 17.0.14 "@types/react-grid-layout": 1.3.2 "@types/react-highlight-words": 0.16.4 - "@types/react-redux": 7.1.24 + "@types/react-redux": 7.1.25 "@types/react-resizable": 3.0.3 "@types/react-router-dom": 5.3.3 - "@types/react-table": 7.7.12 + "@types/react-table": 7.7.14 "@types/react-test-renderer": 17.0.1 "@types/react-transition-group": 4.4.5 "@types/react-virtualized-auto-sizer": 1.0.1 @@ -22112,15 +22212,15 @@ __metadata: "@types/tinycolor2": 1.4.3 "@types/uuid": 9.0.1 "@types/webpack-env": 1.18.0 - "@types/yargs": 17.0.12 + "@types/yargs": 17.0.22 "@typescript-eslint/eslint-plugin": 5.42.0 "@typescript-eslint/parser": 5.42.0 - "@visx/event": 2.17.0 - "@visx/gradient": 2.10.0 - "@visx/group": 2.10.0 + "@visx/event": 3.0.1 + "@visx/gradient": 3.0.0 + "@visx/group": 3.0.0 "@visx/scale": 3.0.0 "@visx/shape": 3.0.0 - "@visx/tooltip": 2.16.0 + "@visx/tooltip": 3.0.0 "@welldone-software/why-did-you-render": 7.0.1 angular: 1.8.3 angular-bindonce: 0.3.1 @@ -22130,7 +22230,7 @@ __metadata: app: "link:./public/app" autoprefixer: 10.4.13 babel-jest: 29.3.1 - babel-loader: 9.1.0 + babel-loader: 9.1.2 babel-plugin-angularjs-annotate: 0.10.0 babel-plugin-macros: 3.1.0 baron: 3.0.3 @@ -22143,11 +22243,11 @@ __metadata: classnames: 2.3.2 codeowners: ^5.1.1 combokeys: ^3.0.0 - comlink: 4.4.0 + comlink: 4.4.1 common-tags: 1.8.2 copy-webpack-plugin: 11.0.0 core-js: 3.28.0 - css-loader: 6.7.1 + css-loader: 6.7.3 css-minimizer-webpack-plugin: 4.2.2 cypress: 9.5.1 d3: 7.8.2 @@ -22156,7 +22256,6 @@ __metadata: dangerously-set-html-content: 1.0.9 date-fns: 2.29.3 debounce-promise: 3.1.2 - dompurify: ^2.4.1 emotion: 11.0.0 esbuild: 0.16.17 esbuild-loader: 2.21.0 @@ -22165,45 +22264,45 @@ __metadata: eslint-config-prettier: 8.6.0 eslint-plugin-import: ^2.26.0 eslint-plugin-jest: 27.2.1 - eslint-plugin-jsdoc: 39.8.0 + eslint-plugin-jsdoc: 40.0.1 eslint-plugin-jsx-a11y: 6.7.1 eslint-plugin-lodash: 7.4.0 - eslint-plugin-react: 7.32.1 + eslint-plugin-react: 7.32.2 eslint-plugin-react-hooks: 4.6.0 - eslint-webpack-plugin: 3.2.0 + eslint-webpack-plugin: 4.0.0 eventemitter3: 5.0.0 expose-loader: 4.0.0 fast-deep-equal: ^3.1.3 fast-json-patch: 3.1.1 file-saver: 2.0.5 - fork-ts-checker-webpack-plugin: 7.3.0 + fork-ts-checker-webpack-plugin: 8.0.0 framework-utils: ^1.1.0 - glob: 9.1.2 + glob: 9.2.1 history: 4.10.1 hoist-non-react-statics: 3.3.2 html-loader: 4.2.0 html-webpack-plugin: 5.5.0 http-server: 14.1.1 - husky: 8.0.1 + husky: 8.0.3 i18next: ^22.0.0 i18next-parser: 6.6.0 - immer: 9.0.16 - immutable: 4.2.2 + immer: 9.0.19 + immutable: 4.2.4 jest: 29.3.1 jest-canvas-mock: 2.4.0 jest-date-mock: 1.0.8 jest-environment-jsdom: 29.3.1 jest-fail-on-console: 3.0.2 - jest-junit: 14.0.1 + jest-junit: 15.0.0 jest-matcher-utils: 29.3.1 - jquery: 3.6.1 + jquery: 3.6.3 js-yaml: ^4.1.0 json-markup: ^1.1.0 json-source-map: 0.6.1 jsurl: ^0.1.5 - kbar: 0.1.0-beta.36 + kbar: 0.1.0-beta.40 lerna: 5.5.4 - lint-staged: 13.1.0 + lint-staged: 13.1.2 lodash: 4.17.21 logfmt: ^1.3.2 lru-cache: 7.17.0 @@ -22211,33 +22310,33 @@ __metadata: memoize-one: 6.0.0 mini-css-extract-plugin: 2.7.2 moment: 2.29.4 - moment-timezone: 0.5.38 + moment-timezone: 0.5.41 monaco-editor: 0.34.0 monaco-promql: 1.7.4 mousetrap: 1.6.5 mousetrap-global-bind: 1.1.0 moveable: 0.43.1 - msw: 0.49.2 + msw: 1.1.0 mutationobserver-shim: 0.3.7 ngtemplate-loader: 2.1.0 node-notifier: 10.0.1 ol: 7.2.2 - ol-ext: 4.0.3 + ol-ext: 4.0.6 papaparse: 5.3.2 pluralize: ^8.0.0 - postcss: 8.4.18 - postcss-loader: 7.0.1 + postcss: 8.4.21 + postcss-loader: 7.0.2 postcss-reporter: 7.0.5 - postcss-scss: 4.0.5 - prettier: 2.8.1 + postcss-scss: 4.0.6 + prettier: 2.8.4 prismjs: 1.29.0 prop-types: 15.8.1 pseudoizer: ^0.1.0 rc-cascader: 3.8.0 - rc-drawer: 6.1.2 - rc-slider: 10.1.0 + rc-drawer: 6.1.3 + rc-slider: 10.1.1 rc-time-picker: 3.7.3 - rc-tree: 5.7.0 + rc-tree: 5.7.2 re-resizable: 6.9.9 react: 17.0.2 react-awesome-query-builder: 5.4.0 @@ -22246,12 +22345,12 @@ __metadata: react-dom: 17.0.2 react-draggable: 4.4.5 react-dropzone: ^14.2.3 - react-enable: ^3.0.1 + react-enable: ^3.1.0 react-grid-layout: 1.3.4 react-highlight-words: 0.20.0 react-hook-form: 7.5.3 react-i18next: ^12.0.0 - react-inlinesvg: 3.0.1 + react-inlinesvg: 3.0.2 react-moveable: 0.46.1 react-popper: 2.3.0 react-popper-tooltip: 4.4.2 @@ -22272,16 +22371,16 @@ __metadata: react-virtualized-auto-sizer: 1.0.7 react-window: 1.8.8 react-window-infinite-loader: 1.0.8 - redux: 4.2.0 + redux: 4.2.1 redux-mock-store: 1.5.4 - redux-thunk: 2.4.1 - regenerator-runtime: 0.13.10 - reselect: 4.1.6 - rimraf: 4.2.0 + redux-thunk: 2.4.2 + regenerator-runtime: 0.13.11 + reselect: 4.1.7 + rimraf: 4.4.0 rst2html: "github:thoward/rst2html#990cb89f2a300cdd9151790be377c4c0840df809" rudder-sdk-js: 2.25.0 rxjs: 7.8.0 - sass: 1.58.2 + sass: 1.58.3 sass-loader: 13.2.0 selecto: 1.22.0 semver: 7.3.8 @@ -22291,8 +22390,8 @@ __metadata: slate-react: 0.22.10 sql-formatter-plus: ^1.3.6 style-loader: 3.3.1 - stylelint: 14.14.0 - stylelint-config-prettier: 9.0.3 + stylelint: 15.2.0 + stylelint-config-prettier: 9.0.5 stylelint-config-sass-guidelines: 9.0.1 symbol-observable: 4.0.0 terser-webpack-plugin: 5.3.6 @@ -22300,7 +22399,7 @@ __metadata: testing-library-selector: 0.2.1 tether-drop: "https://github.com/torkelo/drop" tinycolor2: 1.6.0 - ts-jest: 29.0.3 + ts-jest: 29.0.5 ts-loader: 9.3.1 ts-node: 10.9.1 tslib: 2.5.0 @@ -22311,9 +22410,9 @@ __metadata: vendor: "link:./public/vendor" visjs-network: 4.25.0 wait-on: 7.0.1 - webpack: 5.75.0 + webpack: 5.76.0 webpack-bundle-analyzer: 4.8.0 - webpack-cli: 4.10.0 + webpack-cli: 5.0.1 webpack-dev-server: 4.11.1 webpack-manifest-plugin: 5.0.0 webpack-merge: 5.8.0 @@ -23173,12 +23272,12 @@ __metadata: languageName: node linkType: hard -"husky@npm:8.0.1": - version: 8.0.1 - resolution: "husky@npm:8.0.1" +"husky@npm:8.0.3": + version: 8.0.3 + resolution: "husky@npm:8.0.3" bin: husky: lib/bin.js - checksum: 943a73a13d0201318fd30e83d299bb81d866bd245b69e6277804c3b462638dc1921694cb94c2b8c920a4a187060f7d6058d3365152865406352e934c5fff70dc + checksum: 837bc7e4413e58c1f2946d38fb050f5d7324c6f16b0fd66411ffce5703b294bd21429e8ba58711cd331951ee86ed529c5be4f76805959ff668a337dbfa82a1b0 languageName: node linkType: hard @@ -23306,6 +23405,13 @@ __metadata: languageName: node linkType: hard +"ignore@npm:^5.2.4": + version: 5.2.4 + resolution: "ignore@npm:5.2.4" + checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef + languageName: node + linkType: hard + "image-size@npm:~0.5.0": version: 0.5.5 resolution: "image-size@npm:0.5.5" @@ -23315,7 +23421,14 @@ __metadata: languageName: node linkType: hard -"immer@npm:9.0.16, immer@npm:^9.0.16": +"immer@npm:9.0.19": + version: 9.0.19 + resolution: "immer@npm:9.0.19" + checksum: f02ee53989989c287cd548a3d817fccf0bfe56db919755ee94a72ea3ae78a00363fba93ee6c010fe54a664380c29c53d44ed4091c6a86cae60957ad2cfabc010 + languageName: node + linkType: hard + +"immer@npm:^9.0.16": version: 9.0.16 resolution: "immer@npm:9.0.16" checksum: e9a5ca65c929b329da7a3b7beccf7984271cda7bdd47b2cab619eac3277dcd56598c211b55cc340786b6eff0c06652ac018808d9fd744443f06882364dece6bc @@ -23329,10 +23442,10 @@ __metadata: languageName: node linkType: hard -"immutable@npm:4.2.2": - version: 4.2.2 - resolution: "immutable@npm:4.2.2" - checksum: 4d6437ea9388fe8ceca7eed5c768cf438cda7fa14d2831b87b90aa00cc60d536964d107c255b8a2e5dbf4f44a0e1295afbb9d1f0a65fb4f57b936e71df601862 +"immutable@npm:4.2.4": + version: 4.2.4 + resolution: "immutable@npm:4.2.4" + checksum: 3be84eded37b05e65cad57bfba630bc1bf170c498b7472144bc02d2650cc9baef79daf03574a9c2e41d195ebb55a1c12c9b312f41ee324b653927b24ad8bcaa7 languageName: node linkType: hard @@ -23596,6 +23709,13 @@ __metadata: languageName: node linkType: hard +"interpret@npm:^3.1.1": + version: 3.1.1 + resolution: "interpret@npm:3.1.1" + checksum: 35cebcf48c7351130437596d9ab8c8fe131ce4038da4561e6d665f25640e0034702a031cf7e3a5cea60ac7ac548bf17465e0571ede126f3d3a6933152171ac82 + languageName: node + linkType: hard + "intl-messageformat@npm:^10.1.0": version: 10.1.4 resolution: "intl-messageformat@npm:10.1.4" @@ -25213,15 +25333,15 @@ __metadata: languageName: node linkType: hard -"jest-junit@npm:14.0.1": - version: 14.0.1 - resolution: "jest-junit@npm:14.0.1" +"jest-junit@npm:15.0.0": + version: 15.0.0 + resolution: "jest-junit@npm:15.0.0" dependencies: mkdirp: ^1.0.4 strip-ansi: ^6.0.1 uuid: ^8.3.2 xml: ^1.0.1 - checksum: 2a9ccfecbe4c0df1be24e64b3e12a260356db999b3d821578c325bd34367d2f54b27e9560a8d5abe6c19412400268bf55dd41473565903cb8f616d998f7eb9ac + checksum: e8fe4d2f2ab843383ac41820a6fe495739d154ec435cd44ba590b44ec7fd62095676f3eef13f98392f81d4a3727ea58b4f4fad231fe367ac31243952b9ad716f languageName: node linkType: hard @@ -25683,6 +25803,20 @@ __metadata: languageName: node linkType: hard +"jest-util@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-util@npm:29.5.0" + dependencies: + "@jest/types": ^29.5.0 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: fd9212950d34d2ecad8c990dda0d8ea59a8a554b0c188b53ea5d6c4a0829a64f2e1d49e6e85e812014933d17426d7136da4785f9cf76fff1799de51b88bc85d3 + languageName: node + linkType: hard + "jest-validate@npm:^27.5.1": version: 27.5.1 resolution: "jest-validate@npm:27.5.1" @@ -25786,17 +25920,6 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^28.0.2": - version: 28.1.3 - resolution: "jest-worker@npm:28.1.3" - dependencies: - "@types/node": "*" - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: e921c9a1b8f0909da9ea07dbf3592f95b653aef3a8bb0cbcd20fc7f9a795a1304adecac31eecb308992c167e8d7e75c522061fec38a5928ace0f9571c90169ca - languageName: node - linkType: hard - "jest-worker@npm:^29.1.2": version: 29.2.1 resolution: "jest-worker@npm:29.2.1" @@ -25821,6 +25944,18 @@ __metadata: languageName: node linkType: hard +"jest-worker@npm:^29.4.1": + version: 29.5.0 + resolution: "jest-worker@npm:29.5.0" + dependencies: + "@types/node": "*" + jest-util: ^29.5.0 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 1151a1ae3602b1ea7c42a8f1efe2b5a7bf927039deaa0827bf978880169899b705744e288f80a63603fb3fc2985e0071234986af7dc2c21c7a64333d8777c7c9 + languageName: node + linkType: hard + "jest@npm:27.5.1": version: 27.5.1 resolution: "jest@npm:27.5.1" @@ -25885,10 +26020,10 @@ __metadata: languageName: node linkType: hard -"jquery@npm:3.6.1": - version: 3.6.1 - resolution: "jquery@npm:3.6.1" - checksum: 6177d866a74f1137cad800f142c7cdbd5ab19cd4282546f8bdb4890c9f933b1d542ab96f2aa15d007e43c98de7315b0513e849ec5359d3ac5640f720892fe547 +"jquery@npm:3.6.3": + version: 3.6.3 + resolution: "jquery@npm:3.6.3" + checksum: 0fd366bdcaa0c84a7a8751ce20f8192290141913978b5059574426d9b01f4365daa675f95aab3eec94fd794d27b08d32078a2236bef404b8ba78073009988ce6 languageName: node linkType: hard @@ -26301,11 +26436,11 @@ __metadata: languageName: node linkType: hard -"kbar@npm:0.1.0-beta.36": - version: 0.1.0-beta.36 - resolution: "kbar@npm:0.1.0-beta.36" +"kbar@npm:0.1.0-beta.40": + version: 0.1.0-beta.40 + resolution: "kbar@npm:0.1.0-beta.40" dependencies: - "@reach/portal": ^0.16.0 + "@radix-ui/react-portal": ^1.0.1 command-score: ^0.1.2 fast-equals: ^2.0.3 react-virtual: ^2.8.2 @@ -26313,7 +26448,7 @@ __metadata: peerDependencies: react: ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: 62534a24789bec899432503debf88056b8f66e742c9dab0ecb6a0615f89acfdd14a14a4da5c5d6db77ed81d84d6634dbe82aa948470b166f6819aac551ed63c4 + checksum: 0c2cbe520e48ba210cbcfd04529178a772c112ea8e674953bbb6343f74109bf3fd3cb8d23bb4235093f04018b28e8e2e485852d23c39dfe96eab6189cc82c361 languageName: node linkType: hard @@ -26402,10 +26537,10 @@ __metadata: languageName: node linkType: hard -"known-css-properties@npm:^0.25.0": - version: 0.25.0 - resolution: "known-css-properties@npm:0.25.0" - checksum: 1e6860b9cb8f671fc913f0a94a04c278769d9d8ac69f7975986440ef19825bdc26d8833e59ef7ef7ec3d4984e28e4f73e7bf99b9deb24803841d39135c26a1e6 +"known-css-properties@npm:^0.26.0": + version: 0.26.0 + resolution: "known-css-properties@npm:0.26.0" + checksum: e706f4af9d2683202df9f717e7d713f0f8c3330f155842c40d8f3b2a5837956c34aeb7ba08760977ccde1afce8b5377e29b40eb3e5c0b42bef28ddd108543cfb languageName: node linkType: hard @@ -26627,9 +26762,9 @@ __metadata: languageName: node linkType: hard -"lint-staged@npm:13.1.0": - version: 13.1.0 - resolution: "lint-staged@npm:13.1.0" +"lint-staged@npm:13.1.2": + version: 13.1.2 + resolution: "lint-staged@npm:13.1.2" dependencies: cli-truncate: ^3.1.0 colorette: ^2.0.19 @@ -26646,7 +26781,7 @@ __metadata: yaml: ^2.1.3 bin: lint-staged: bin/lint-staged.js - checksum: adf20c4ca9285c4a93b06598b970d71b04cfe58a1a4c9006f753b83e02c1c622d1866c32a4f1e7e29a98091c501eac3345f7678af247b4f97d5be88b3d8727c1 + checksum: f854ad5c88542b8f06e27f3b4046927a4f3d4a451a04e079526559d819a325762268f65bd2df7156bcc0cb5f531f621c42cdb824b403f537c78305adc9e56a54 languageName: node linkType: hard @@ -26996,6 +27131,15 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + "lru-cache@npm:^6.0.0": version: 6.0.0 resolution: "lru-cache@npm:6.0.0" @@ -27194,12 +27338,12 @@ __metadata: languageName: node linkType: hard -"marked@npm:4.2.0": - version: 4.2.0 - resolution: "marked@npm:4.2.0" +"marked@npm:4.2.12": + version: 4.2.12 + resolution: "marked@npm:4.2.12" bin: marked: bin/marked.js - checksum: d3e3c2d2e192a518060ed6d4a6a78c467d705361ee03f5b3c0ddcf28f530335632340e222662f963935b60f72e40feca992352241bb94c5681106af989337600 + checksum: bd551cd61028ee639d4ca2ccdfcc5a6ba4227c1b143c4538f3cde27f569dcb57df8e6313560394645b418b84a7336c07ab1e438b89b6324c29d7d8cdd3102d63 languageName: node linkType: hard @@ -27402,6 +27546,13 @@ __metadata: languageName: node linkType: hard +"mdn-data@npm:2.0.30": + version: 2.0.30 + resolution: "mdn-data@npm:2.0.30" + checksum: d6ac5ac7439a1607df44b22738ecf83f48e66a0874e4482d6424a61c52da5cde5750f1d1229b6f5fa1b80a492be89465390da685b11f97d62b8adcc6e88189aa + languageName: node + linkType: hard + "mdurl@npm:^1.0.0": version: 1.0.1 resolution: "mdurl@npm:1.0.1" @@ -27560,13 +27711,6 @@ __metadata: languageName: node linkType: hard -"merge-class-names@npm:^1.1.1": - version: 1.4.2 - resolution: "merge-class-names@npm:1.4.2" - checksum: 569c333ab0d7fa1e06ae6e637d58e0d4623d7b165ea78d085c1bbd042568d8793bb7ce54ec55580679416046b11fc6eaf4956d68d19964cb320edc034e182c1d - languageName: node - linkType: hard - "merge-descriptors@npm:1.0.1": version: 1.0.1 resolution: "merge-descriptors@npm:1.0.1" @@ -28408,16 +28552,16 @@ __metadata: languageName: node linkType: hard -"moment-timezone@npm:0.5.38": - version: 0.5.38 - resolution: "moment-timezone@npm:0.5.38" +"moment-timezone@npm:0.5.41": + version: 0.5.41 + resolution: "moment-timezone@npm:0.5.41" dependencies: - moment: ">= 2.9.0" - checksum: ff7077de41f2c41a0026cd2b310154c14df8f918331a4ebe88f5872a599deb5e463b123c96990dc447b7474a81c9f3aef7ac57c3d0dfc3bfb9af2cc5b0bca826 + moment: ^2.29.4 + checksum: 30bf42265f749d4d17e78cf94f49d8354d9fbf2dea060a5b89895979642035734512a23cb7a90c0e93593bc11eb698b78b601b7dd5d9a708eb7c4f733a927a71 languageName: node linkType: hard -"moment@npm:2.29.4, moment@npm:2.x, moment@npm:>= 2.9.0, moment@npm:^2.20.1, moment@npm:^2.29.4": +"moment@npm:2.29.4, moment@npm:2.x, moment@npm:^2.20.1, moment@npm:^2.29.4": version: 2.29.4 resolution: "moment@npm:2.29.4" checksum: 0ec3f9c2bcba38dc2451b1daed5daded747f17610b92427bebe1d08d48d8b7bdd8d9197500b072d14e326dd0ccf3e326b9e3d07c5895d3d49e39b6803b76e80e @@ -28510,9 +28654,9 @@ __metadata: languageName: node linkType: hard -"msw@npm:0.49.2": - version: 0.49.2 - resolution: "msw@npm:0.49.2" +"msw@npm:1.1.0": + version: 1.1.0 + resolution: "msw@npm:1.1.0" dependencies: "@mswjs/cookies": ^0.2.2 "@mswjs/interceptors": ^0.17.5 @@ -28530,7 +28674,7 @@ __metadata: node-fetch: ^2.6.7 outvariant: ^1.3.0 path-to-regexp: ^6.2.0 - strict-event-emitter: ^0.2.6 + strict-event-emitter: ^0.4.3 type-fest: ^2.19.0 yargs: ^17.3.1 peerDependencies: @@ -28540,7 +28684,7 @@ __metadata: optional: true bin: msw: cli/index.js - checksum: 10ec35671e10e53c2a24ca22c5e7a2262d4cdfb409a403a3ffe221150af404805490e7661611a581986e61790bb8996ce8a0f057d521ef359498304c2431234a + checksum: e555547defbc3f07532bdadcbf9f4e3a32b92156d3869e85c9038ecaac220cfc93901727da097b7f9d3ecf9cbbc5a9178c0ecdd3999a9201db4c85c99b92c361 languageName: node linkType: hard @@ -29481,12 +29625,12 @@ __metadata: languageName: node linkType: hard -"ol-ext@npm:4.0.3": - version: 4.0.3 - resolution: "ol-ext@npm:4.0.3" +"ol-ext@npm:4.0.6": + version: 4.0.6 + resolution: "ol-ext@npm:4.0.6" peerDependencies: ol: ">= 5.3.0" - checksum: e190899bb45a0e16b6692b6d7e2810f76b320b8493a8e5d724288c75938b9834ec0b718f2718c92f218f4f30e176e64cd4cd4499366f92c7f42fd34031653ba2 + checksum: 09b0ce83cba9ca4fd59fe01e1ace4154850dd0f286b5795760458f79941ef4068b7bad7a59454a4ca0fa4867d0986bfcb4433f286ec8d06a3612f5bbdc05b9f3 languageName: node linkType: hard @@ -30201,7 +30345,7 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.5.0, path-scurry@npm:^1.6.1": +"path-scurry@npm:^1.6.1": version: 1.6.1 resolution: "path-scurry@npm:1.6.1" dependencies: @@ -30801,17 +30945,17 @@ __metadata: languageName: node linkType: hard -"postcss-loader@npm:7.0.1": - version: 7.0.1 - resolution: "postcss-loader@npm:7.0.1" +"postcss-loader@npm:7.0.2": + version: 7.0.2 + resolution: "postcss-loader@npm:7.0.2" dependencies: cosmiconfig: ^7.0.0 klona: ^2.0.5 - semver: ^7.3.7 + semver: ^7.3.8 peerDependencies: postcss: ^7.0.0 || ^8.0.1 webpack: ^5.0.0 - checksum: 2a3cbcaaade598d4919824d384ae34ffbfc14a9c8db6cc3b154582356f4f44a1c9af9e731b81cf1947b089accf7d0ab7a0c51c717946985f89aa1708d2b4304d + checksum: 2d251537d482eb751f812c96c8b515f46d7c9905cad7afab33f0f34872670619b7440cefc9e2babbf89fb11b4708850d522d79fa5ff788227587645e78f16638 languageName: node linkType: hard @@ -31270,12 +31414,12 @@ __metadata: languageName: node linkType: hard -"postcss-scss@npm:4.0.5": - version: 4.0.5 - resolution: "postcss-scss@npm:4.0.5" +"postcss-scss@npm:4.0.6": + version: 4.0.6 + resolution: "postcss-scss@npm:4.0.6" peerDependencies: - postcss: ^8.3.3 - checksum: 5cba2044db3a57ecec9ac64db28be42e145bae0e1c2e4322ef38674e4302b0854f5e16f91658b2bcff3d0f1dbbfb186a9871f988b16895c51993f431a74ed4db + postcss: ^8.4.19 + checksum: 133a1cba31e2e167f4e841e66ec6a798eaf44c7911f9182ade0b5b1e71a8198814aa390b8c9d5db6b01358115232e5b15b1a4f8c5198acfccfb1f3fdbd328cdf languageName: node linkType: hard @@ -31309,6 +31453,16 @@ __metadata: languageName: node linkType: hard +"postcss-selector-parser@npm:^6.0.11": + version: 6.0.11 + resolution: "postcss-selector-parser@npm:6.0.11" + dependencies: + cssesc: ^3.0.0 + util-deprecate: ^1.0.2 + checksum: 0b01aa9c2d2c8dbeb51e9b204796b678284be9823abc8d6d40a8b16d4149514e922c264a8ed4deb4d6dbced564b9be390f5942c058582d8656351516d6c49cde + languageName: node + linkType: hard + "postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.6": version: 6.0.6 resolution: "postcss-selector-parser@npm:6.0.6" @@ -31375,14 +31529,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.4.18, postcss@npm:^8.2.15, postcss@npm:^8.4.17": - version: 8.4.18 - resolution: "postcss@npm:8.4.18" +"postcss@npm:8.4.21, postcss@npm:^8.4.19, postcss@npm:^8.4.21": + version: 8.4.21 + resolution: "postcss@npm:8.4.21" dependencies: nanoid: ^3.3.4 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: 9349fd99849b2e3d2e134ff949b7770ecb12375f352723ce2bcc06167eba3850ea7844c1b191a85cd915d6a396b4e8ee9a5267e6cc5d8d003d0cbc7a97555d39 + checksum: e39ac60ccd1542d4f9d93d894048aac0d686b3bb38e927d8386005718e6793dbbb46930f0a523fe382f1bbd843c6d980aaea791252bf5e176180e5a4336d9679 languageName: node linkType: hard @@ -31396,6 +31550,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.2.15, postcss@npm:^8.4.17": + version: 8.4.18 + resolution: "postcss@npm:8.4.18" + dependencies: + nanoid: ^3.3.4 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: 9349fd99849b2e3d2e134ff949b7770ecb12375f352723ce2bcc06167eba3850ea7844c1b191a85cd915d6a396b4e8ee9a5267e6cc5d8d003d0cbc7a97555d39 + languageName: node + linkType: hard + "postcss@npm:^8.3.11, postcss@npm:^8.3.5": version: 8.3.11 resolution: "postcss@npm:8.3.11" @@ -31590,12 +31755,12 @@ __metadata: languageName: node linkType: hard -"prettier@npm:2.8.1": - version: 2.8.1 - resolution: "prettier@npm:2.8.1" +"prettier@npm:2.8.4": + version: 2.8.4 + resolution: "prettier@npm:2.8.4" bin: prettier: bin-prettier.js - checksum: 4f21a0f1269f76fb36f54e9a8a1ea4c11e27478958bf860661fb4b6d7ac69aac1581f8724fa98ea3585e56d42a2ea317a17ff6e3324f40cb11ff9e20b73785cc + checksum: c173064bf3df57b6d93d19aa98753b9b9dd7657212e33b41ada8e2e9f9884066bb9ca0b4005b89b3ab137efffdf8fbe0b462785aba20364798ff4303aadda57e languageName: node linkType: hard @@ -32225,9 +32390,9 @@ __metadata: languageName: node linkType: hard -"rc-drawer@npm:6.1.2": - version: 6.1.2 - resolution: "rc-drawer@npm:6.1.2" +"rc-drawer@npm:6.1.3": + version: 6.1.3 + resolution: "rc-drawer@npm:6.1.3" dependencies: "@babel/runtime": ^7.10.1 "@rc-component/portal": ^1.0.0-6 @@ -32237,7 +32402,7 @@ __metadata: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 0d7f5cd56bcad80ebc11dd3d1c5b13ef620e8790fac67af62180938c9baa0e671cbd6aaf9588ebd1978de39a2791dcf4f0da56dd366797bada43d2d31ef575ad + checksum: 09fa3085312f668b27e0a8acae7f560a7d45ad52e4554020a6d3801352331b1173b20f57d32f876cfc1b359bd3088190e90bd7815619144d6d50b83c4ab44196 languageName: node linkType: hard @@ -32317,18 +32482,17 @@ __metadata: languageName: node linkType: hard -"rc-slider@npm:10.1.0": - version: 10.1.0 - resolution: "rc-slider@npm:10.1.0" +"rc-slider@npm:10.1.1": + version: 10.1.1 + resolution: "rc-slider@npm:10.1.1" dependencies: "@babel/runtime": ^7.10.1 classnames: ^2.2.5 - rc-util: ^5.18.1 - shallowequal: ^1.1.0 + rc-util: ^5.27.0 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 002662cd0a59d6e48dd82744dfe2043efffd15229fb39665001bd73d584570458c16c0babcc78dc7b0ccde57d83f86114492348b3e5674a0672c97269957319d + checksum: 8df66142f1be00d31aaa45f3cf266fa30d03b70c74c734502389bbfacdb6741e149cd36dc1d3557d9dbb0194ed2733748366d888651d1120098338086419ba2c languageName: node linkType: hard @@ -32360,7 +32524,23 @@ __metadata: languageName: node linkType: hard -"rc-tree@npm:5.7.0, rc-tree@npm:~5.7.0": +"rc-tree@npm:5.7.2": + version: 5.7.2 + resolution: "rc-tree@npm:5.7.2" + dependencies: + "@babel/runtime": ^7.10.1 + classnames: 2.x + rc-motion: ^2.0.1 + rc-util: ^5.16.1 + rc-virtual-list: ^3.4.8 + peerDependencies: + react: "*" + react-dom: "*" + checksum: 9b465e1937fdd59987d2e69587b10c3d1415072ed6cd8e953d8975c4d31ddfa3f963d6d824b6d5017bd3a4331d9a0af029886a484af70a861ddda02dcfcb964c + languageName: node + linkType: hard + +"rc-tree@npm:~5.7.0": version: 5.7.0 resolution: "rc-tree@npm:5.7.0" dependencies: @@ -32450,7 +32630,7 @@ __metadata: languageName: node linkType: hard -"rc-util@npm:^5.18.1, rc-util@npm:^5.19.2, rc-util@npm:^5.21.0, rc-util@npm:^5.21.2, rc-util@npm:^5.24.4": +"rc-util@npm:^5.19.2, rc-util@npm:^5.21.0, rc-util@npm:^5.21.2, rc-util@npm:^5.24.4": version: 5.24.4 resolution: "rc-util@npm:5.24.4" dependencies: @@ -32478,6 +32658,19 @@ __metadata: languageName: node linkType: hard +"rc-util@npm:^5.27.0": + version: 5.28.0 + resolution: "rc-util@npm:5.28.0" + dependencies: + "@babel/runtime": ^7.18.3 + react-is: ^16.12.0 + peerDependencies: + react: ">=16.9.0" + react-dom: ">=16.9.0" + checksum: e60424c37dad7575bb2429e266a81f96003701d719d1fb40128b42ed1c6972896cec09ece8857b36ce9ac74ba95aa2d0a9bdc0609894ba1b3c12c15504a1a886 + languageName: node + linkType: hard + "rc-virtual-list@npm:^3.4.13": version: 3.4.13 resolution: "rc-virtual-list@npm:3.4.13" @@ -32575,18 +32768,18 @@ __metadata: languageName: node linkType: hard -"react-calendar@npm:3.9.0": - version: 3.9.0 - resolution: "react-calendar@npm:3.9.0" +"react-calendar@npm:4.0.0": + version: 4.0.0 + resolution: "react-calendar@npm:4.0.0" dependencies: "@wojtekmaj/date-utils": ^1.0.2 + clsx: ^1.2.1 get-user-locale: ^1.2.0 - merge-class-names: ^1.1.1 prop-types: ^15.6.0 peerDependencies: - react: ^16.3.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.3.0 || ^17.0.0 || ^18.0.0 - checksum: f178e8afef9e427689472c3792a2e4d60ca959657f12e06ab07a7cc27f64cc5e9531e495d087bfd5c9bc5826f7cec5088fb0e7f15fa4f28482180cc344c8c60f + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: a470ea1eab914cda9f76245060e15129a220c30f2942a28c20b3cb999fd994d0c0fadae849184ba123b3b78541fbb3301c5ac0c44e0bd2ab156bfba8cc587593 languageName: node linkType: hard @@ -32815,18 +33008,18 @@ __metadata: languageName: node linkType: hard -"react-enable@npm:^3.0.1": - version: 3.0.1 - resolution: "react-enable@npm:3.0.1" +"react-enable@npm:^3.1.0": + version: 3.1.0 + resolution: "react-enable@npm:3.1.0" dependencies: "@headlessui/react": ^1.5.0 - "@xstate/react": ^3.0.0 + "@xstate/react": ^3.2.1 tslib: ^1.14.1 - xstate: ^4.31.0 + xstate: ^4.37.0 peerDependencies: react: ^17 || ^18 react-dom: ^17 || ^18 - checksum: 1426b2433785eab34054b82594c085772a8ce334e71ca8d49d4171cd3f37dc8d5273e4717f1c70efb1411ef89220a4bba156a9fae5c6eb2a9a80c178307567f4 + checksum: fc6509bac91bff78529df3699799bb02ce6d5fcc594eea844779834fa8cd8827f328c4456c157e2aca6bebbd0969846e184625f2fa3e2edde97074e19e10d5e0 languageName: node linkType: hard @@ -32931,15 +33124,15 @@ __metadata: languageName: node linkType: hard -"react-inlinesvg@npm:3.0.1": - version: 3.0.1 - resolution: "react-inlinesvg@npm:3.0.1" +"react-inlinesvg@npm:3.0.2": + version: 3.0.2 + resolution: "react-inlinesvg@npm:3.0.2" dependencies: exenv: ^1.2.2 react-from-dom: ^0.6.2 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 756f704bc70dc44b38f446e1d4a92b51dbce42f6b0121b17cdd2255d4403c2428d01b7aac77d7e2120ced476edef839a91ec1454a7a90a1e672974bd542c60b9 + checksum: 05e31af59d19742b63ef91741e3b8974716eae69935420baf3d03c9cdfd234f9b290bb151248d135d70ef54e13fefd66ce45c2d749ca2e319625c0b1c0a0890a languageName: node linkType: hard @@ -33595,12 +33788,12 @@ __metadata: languageName: node linkType: hard -"rechoir@npm:^0.7.0": - version: 0.7.1 - resolution: "rechoir@npm:0.7.1" +"rechoir@npm:^0.8.0": + version: 0.8.0 + resolution: "rechoir@npm:0.8.0" dependencies: - resolve: ^1.9.0 - checksum: 2a04aab4e28c05fcd6ee6768446bc8b859d8f108e71fc7f5bcbc5ef25e53330ce2c11d10f82a24591a2df4c49c4f61feabe1fd11f844c66feedd4cd7bb61146a + resolve: ^1.20.0 + checksum: ad3caed8afdefbc33fbc30e6d22b86c35b3d51c2005546f4e79bcc03c074df804b3640ad18945e6bef9ed12caedc035655ec1082f64a5e94c849ff939dc0a788 languageName: node linkType: hard @@ -33642,16 +33835,7 @@ __metadata: languageName: node linkType: hard -"redux-thunk@npm:2.4.1": - version: 2.4.1 - resolution: "redux-thunk@npm:2.4.1" - peerDependencies: - redux: ^4 - checksum: af5abb425fb9dccda02e5f387d6f3003997f62d906542a3d35fc9420088f550dc1a018bdc246c7d23ee852b4d4ab8b5c64c5be426e45a328d791c4586a3c6b6e - languageName: node - linkType: hard - -"redux-thunk@npm:^2.4.2": +"redux-thunk@npm:2.4.2, redux-thunk@npm:^2.4.2": version: 2.4.2 resolution: "redux-thunk@npm:2.4.2" peerDependencies: @@ -33660,12 +33844,12 @@ __metadata: languageName: node linkType: hard -"redux@npm:4.2.0, redux@npm:^4.2.0": - version: 4.2.0 - resolution: "redux@npm:4.2.0" +"redux@npm:4.2.1": + version: 4.2.1 + resolution: "redux@npm:4.2.1" dependencies: "@babel/runtime": ^7.9.2 - checksum: 75f3955c89b3f18edf5411e5fb482aa2e4f41a416183e8802a6bf6472c4fc3d47675b8b321d147f8af8e0f616436ac507bf5a25f1c4d6180e797b549c7db2c1d + checksum: f63b9060c3a1d930ae775252bb6e579b42415aee7a23c4114e21a0b4ba7ec12f0ec76936c00f546893f06e139819f0e2855e0d55ebfce34ca9c026241a6950dd languageName: node linkType: hard @@ -33678,6 +33862,15 @@ __metadata: languageName: node linkType: hard +"redux@npm:^4.2.0": + version: 4.2.0 + resolution: "redux@npm:4.2.0" + dependencies: + "@babel/runtime": ^7.9.2 + checksum: 75f3955c89b3f18edf5411e5fb482aa2e4f41a416183e8802a6bf6472c4fc3d47675b8b321d147f8af8e0f616436ac507bf5a25f1c4d6180e797b549c7db2c1d + languageName: node + linkType: hard + "refractor@npm:^3.6.0": version: 3.6.0 resolution: "refractor@npm:3.6.0" @@ -33714,10 +33907,10 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:0.13.10, regenerator-runtime@npm:^0.13.10": - version: 0.13.10 - resolution: "regenerator-runtime@npm:0.13.10" - checksum: 09893f5a9e82932642d9a999716b6c626dc53ef2a01307c952ebbf8e011802360163a37c304c18a6c358548be5a72b448e37209954a18696f21e438c81cbb4b9 +"regenerator-runtime@npm:0.13.11, regenerator-runtime@npm:^0.13.11": + version: 0.13.11 + resolution: "regenerator-runtime@npm:0.13.11" + checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 languageName: node linkType: hard @@ -33728,10 +33921,10 @@ __metadata: languageName: node linkType: hard -"regenerator-runtime@npm:^0.13.11": - version: 0.13.11 - resolution: "regenerator-runtime@npm:0.13.11" - checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 +"regenerator-runtime@npm:^0.13.10": + version: 0.13.10 + resolution: "regenerator-runtime@npm:0.13.10" + checksum: 09893f5a9e82932642d9a999716b6c626dc53ef2a01307c952ebbf8e011802360163a37c304c18a6c358548be5a72b448e37209954a18696f21e438c81cbb4b9 languageName: node linkType: hard @@ -34116,14 +34309,7 @@ __metadata: languageName: node linkType: hard -"reselect@npm:4.1.6": - version: 4.1.6 - resolution: "reselect@npm:4.1.6" - checksum: 3ea1058422904063ec93c8f4693fe33dcb2178bbf417ace8db5b2c797a5875cf357d9308d11ed3942ee22507dd34ecfbf1f3a21340a4f31c206cab1d36ceef31 - languageName: node - linkType: hard - -"reselect@npm:^4.1.7": +"reselect@npm:4.1.7, reselect@npm:^4.1.7": version: 4.1.7 resolution: "reselect@npm:4.1.7" checksum: 738d8e2b8f0dca154ad29de6a209c9fbca2d70ae6788fd85df87f2c74b95a65bbf2d16d43a9e2faff39de34d17a29d706ba08a6b2ee5660c09589edbd19af7e1 @@ -34137,12 +34323,12 @@ __metadata: languageName: node linkType: hard -"resolve-as-bin@npm:2.1.0": - version: 2.1.0 - resolution: "resolve-as-bin@npm:2.1.0" +"resolve-bin@npm:1.0.1": + version: 1.0.1 + resolution: "resolve-bin@npm:1.0.1" dependencies: - cross-spawn: ^6.0.5 - checksum: 38cbdc57d50162a6aabca34762932637e9926a5b28e313e2027aa54132fe9894d57a9df061596b4be684b0320ee7ba0aef4537bb3919ee6df753fdc4a8b38222 + find-parent-dir: ~0.3.0 + checksum: 439678433138cbea49b848be68ae24aa2afa1b3bb82c30fa763ebbc5615e8c340debfe635ee902cdbb4be72528e4139e2adb0503370ee755ad3702d03976af4c languageName: node linkType: hard @@ -34208,7 +34394,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.9.0": +"resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0": version: 1.20.0 resolution: "resolve@npm:1.20.0" dependencies: @@ -34267,7 +34453,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.12.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.9.0#~builtin": +"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.12.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin": version: 1.20.0 resolution: "resolve@patch:resolve@npm%3A1.20.0#~builtin::version=1.20.0&hash=c3c19d" dependencies: @@ -34403,14 +34589,14 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:4.2.0": - version: 4.2.0 - resolution: "rimraf@npm:4.2.0" +"rimraf@npm:4.4.0": + version: 4.4.0 + resolution: "rimraf@npm:4.4.0" dependencies: glob: ^9.2.0 bin: rimraf: dist/cjs/src/bin.js - checksum: 885baaec6d8e3a771bb3060f110c29070073a47fdcb26775ae165703173e79e845974dc8ed07e8eb4c3c85f126777968febdb385d0c274ad3b167db326e7f82e + checksum: 0cedaf9d138589d1bb0ab851f05804c6d30827aa66563472b04ab76245f83537e23e7b94f1f79ea6c368c0d84a18fcde6a756fca3a44c967e08792671b3a0a6e languageName: node linkType: hard @@ -34752,16 +34938,16 @@ __metadata: languageName: node linkType: hard -"sass@npm:1.58.2": - version: 1.58.2 - resolution: "sass@npm:1.58.2" +"sass@npm:1.58.3": + version: 1.58.3 + resolution: "sass@npm:1.58.3" dependencies: chokidar: ">=3.0.0 <4.0.0" immutable: ^4.0.0 source-map-js: ">=0.6.2 <2.0.0" bin: sass: sass.js - checksum: e0febe4d274af7b9490b9207ff7f05762d60df6b2ad307f7a823432cb4e1604eced6784ae635a6b80e4a6177c047f5a9623c53a15aaec3b9bf981ea86e8937a9 + checksum: 35a2b98c037ef80fdc93c9b0be846e6ccc7d75596351a37ee79c397e66666d0a754c52c4696e746c0aff32327471e185343ca349e998a58340411adc9d0489a5 languageName: node linkType: hard @@ -35627,7 +35813,7 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:^1.0.2": +"source-map-js@npm:^1.0.1, source-map-js@npm:^1.0.2": version: 1.0.2 resolution: "source-map-js@npm:1.0.2" checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c @@ -36107,7 +36293,7 @@ __metadata: languageName: node linkType: hard -"strict-event-emitter@npm:^0.2.4, strict-event-emitter@npm:^0.2.6": +"strict-event-emitter@npm:^0.2.4": version: 0.2.8 resolution: "strict-event-emitter@npm:0.2.8" dependencies: @@ -36116,6 +36302,13 @@ __metadata: languageName: node linkType: hard +"strict-event-emitter@npm:^0.4.3": + version: 0.4.6 + resolution: "strict-event-emitter@npm:0.4.6" + checksum: 4f4f2909613e7811de789991c06bfb770d6d6987e2ec5c66fa7485d0f07cc4e7e32eba0dcf26cee6d86af6c92946d7f4acdfaff57d0c4114df2cfa1bf0e3c091 + languageName: node + linkType: hard + "string-argv@npm:^0.3.1": version: 0.3.1 resolution: "string-argv@npm:0.3.1" @@ -36509,15 +36702,15 @@ __metadata: languageName: node linkType: hard -"stylelint-config-prettier@npm:9.0.3": - version: 9.0.3 - resolution: "stylelint-config-prettier@npm:9.0.3" +"stylelint-config-prettier@npm:9.0.5": + version: 9.0.5 + resolution: "stylelint-config-prettier@npm:9.0.5" peerDependencies: - stylelint: ">=11.0.0" + stylelint: ">= 11.x < 15" bin: stylelint-config-prettier: bin/check.js stylelint-config-prettier-check: bin/check.js - checksum: 9ff3f719daf3865878615ba52c31de6ef0a0d25d41cb58c41afe2f1c459a838997ff912cc4a5b4d401f92e2193667ff4d140b6d303cf8192e894b5cb454c41b9 + checksum: 3d04e463e0bb7e42a5ddec49eea6ef4ea07705d887e8a3ff1fcb82278a5e2bec1a36b8498ea7ed2d24878de29d7c94ac75b1d3ac4f8b19c3a84970595b29261f languageName: node linkType: hard @@ -36562,15 +36755,19 @@ __metadata: languageName: node linkType: hard -"stylelint@npm:14.14.0": - version: 14.14.0 - resolution: "stylelint@npm:14.14.0" +"stylelint@npm:15.2.0": + version: 15.2.0 + resolution: "stylelint@npm:15.2.0" dependencies: - "@csstools/selector-specificity": ^2.0.2 + "@csstools/css-parser-algorithms": ^2.0.1 + "@csstools/css-tokenizer": ^2.0.1 + "@csstools/media-query-list-parser": ^2.0.1 + "@csstools/selector-specificity": ^2.1.1 balanced-match: ^2.0.0 colord: ^2.9.3 - cosmiconfig: ^7.0.1 + cosmiconfig: ^8.0.0 css-functions-list: ^3.1.0 + css-tree: ^2.3.1 debug: ^4.3.4 fast-glob: ^3.2.12 fastest-levenshtein: ^1.0.16 @@ -36579,21 +36776,21 @@ __metadata: globby: ^11.1.0 globjoin: ^0.1.4 html-tags: ^3.2.0 - ignore: ^5.2.0 + ignore: ^5.2.4 import-lazy: ^4.0.0 imurmurhash: ^0.1.4 is-plain-object: ^5.0.0 - known-css-properties: ^0.25.0 + known-css-properties: ^0.26.0 mathml-tag-names: ^2.1.3 meow: ^9.0.0 micromatch: ^4.0.5 normalize-path: ^3.0.0 picocolors: ^1.0.0 - postcss: ^8.4.17 + postcss: ^8.4.21 postcss-media-query-parser: ^0.2.3 postcss-resolve-nested-selector: ^0.1.1 postcss-safe-parser: ^6.0.0 - postcss-selector-parser: ^6.0.10 + postcss-selector-parser: ^6.0.11 postcss-value-parser: ^4.2.0 resolve-from: ^5.0.0 string-width: ^4.2.3 @@ -36601,12 +36798,12 @@ __metadata: style-search: ^0.1.0 supports-hyperlinks: ^2.3.0 svg-tags: ^1.0.0 - table: ^6.8.0 + table: ^6.8.1 v8-compile-cache: ^2.3.0 - write-file-atomic: ^4.0.2 + write-file-atomic: ^5.0.0 bin: stylelint: bin/stylelint.js - checksum: 3196f5992262d82f3c8dea1d710a3dda1b6c890697eba7df58a3bc8fcd681d509449fa4be3f03e91155f5014df82973b57266ddbc34f41130aa27cc046113b8b + checksum: 2a52d1b36345659e92280317554d82fc621203341d3a6baf1b19f3c28d06a07b8c5f7a25b9be2383f73a4e6a395d69dfbbe4daeca19bd119b88673dd8b6518ac languageName: node linkType: hard @@ -36763,16 +36960,16 @@ __metadata: languageName: node linkType: hard -"table@npm:^6.8.0": - version: 6.8.0 - resolution: "table@npm:6.8.0" +"table@npm:^6.8.1": + version: 6.8.1 + resolution: "table@npm:6.8.1" dependencies: ajv: ^8.0.1 lodash.truncate: ^4.4.2 slice-ansi: ^4.0.0 string-width: ^4.2.3 strip-ansi: ^6.0.1 - checksum: 5b07fe462ee03d2e1fac02cbb578efd2e0b55ac07e3d3db2e950aa9570ade5a4a2b8d3c15e9f25c89e4e50b646bc4269934601ee1eef4ca7968ad31960977690 + checksum: 08249c7046125d9d0a944a6e96cfe9ec66908d6b8a9db125531be6eb05fa0de047fd5542e9d43b4f987057f00a093b276b8d3e19af162a9c40db2681058fd306 languageName: node linkType: hard @@ -37487,14 +37684,14 @@ __metadata: languageName: node linkType: hard -"ts-jest@npm:29.0.3": - version: 29.0.3 - resolution: "ts-jest@npm:29.0.3" +"ts-jest@npm:29.0.5": + version: 29.0.5 + resolution: "ts-jest@npm:29.0.5" dependencies: bs-logger: 0.x fast-json-stable-stringify: 2.x jest-util: ^29.0.0 - json5: ^2.2.1 + json5: ^2.2.3 lodash.memoize: 4.x make-error: 1.x semver: 7.x @@ -37516,7 +37713,7 @@ __metadata: optional: true bin: ts-jest: cli.js - checksum: 541e51776d367fa2279af47f75af94b03e0538f1839ea9983de0f4ad7f188002f6eb1fc72440651d96daa62d25a7bc679a129c14e6ef291277eea9346751d56b + checksum: f60f129c2287f4c963d9ee2677132496c5c5a5d39c27ad234199a1140c26318a7d5bda34890ab0e30636ec42a8de28f84487c09e9dcec639c9c67812b3a38373 languageName: node linkType: hard @@ -37684,7 +37881,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.5.0": +"tslib@npm:2.5.0, tslib@npm:^2.4.1": version: 2.5.0 resolution: "tslib@npm:2.5.0" checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 @@ -38997,10 +39194,10 @@ __metadata: languageName: node linkType: hard -"web-vitals@npm:^3.0.4": - version: 3.0.4 - resolution: "web-vitals@npm:3.0.4" - checksum: b618a8e049e0c64948eea09c372db490802bcc8bcb30230a2bc69d9e243b1a2fa54d0f0ae19d5e63f19381df86db2a9260ca15ef620e10024888eab487a77d56 +"web-vitals@npm:^3.1.1": + version: 3.1.1 + resolution: "web-vitals@npm:3.1.1" + checksum: 26d552d7e0bba470e1426bbf55c3c1a701c683bbde4553791a2c7e1bc3a7b7b29bf66ccf67c74872af3aa39e5668728736b90f8b3fee2910c0c566e7eb1b6096 languageName: node linkType: hard @@ -39059,36 +39256,35 @@ __metadata: languageName: node linkType: hard -"webpack-cli@npm:4.10.0": - version: 4.10.0 - resolution: "webpack-cli@npm:4.10.0" +"webpack-cli@npm:5.0.1": + version: 5.0.1 + resolution: "webpack-cli@npm:5.0.1" dependencies: "@discoveryjs/json-ext": ^0.5.0 - "@webpack-cli/configtest": ^1.2.0 - "@webpack-cli/info": ^1.5.0 - "@webpack-cli/serve": ^1.7.0 + "@webpack-cli/configtest": ^2.0.1 + "@webpack-cli/info": ^2.0.1 + "@webpack-cli/serve": ^2.0.1 colorette: ^2.0.14 - commander: ^7.0.0 + commander: ^9.4.1 cross-spawn: ^7.0.3 + envinfo: ^7.7.3 fastest-levenshtein: ^1.0.12 import-local: ^3.0.2 - interpret: ^2.2.0 - rechoir: ^0.7.0 + interpret: ^3.1.1 + rechoir: ^0.8.0 webpack-merge: ^5.7.3 peerDependencies: - webpack: 4.x.x || 5.x.x + webpack: 5.x.x peerDependenciesMeta: "@webpack-cli/generators": optional: true - "@webpack-cli/migrate": - optional: true webpack-bundle-analyzer: optional: true webpack-dev-server: optional: true bin: webpack-cli: bin/cli.js - checksum: 2ff5355ac348e6b40f2630a203b981728834dca96d6d621be96249764b2d0fc01dd54edfcc37f02214d02935de2cf0eefd6ce689d970d154ef493f01ba922390 + checksum: b1544eea669442e78c3dba9f79c0f8d0136759b8b2fe9cd32c0d410250fd719988ae037778ba88993215d44971169f2c268c0c934068be561711615f1951bd53 languageName: node linkType: hard @@ -39277,9 +39473,9 @@ __metadata: languageName: node linkType: hard -"webpack@npm:5.75.0": - version: 5.75.0 - resolution: "webpack@npm:5.75.0" +"webpack@npm:5.76.0": + version: 5.76.0 + resolution: "webpack@npm:5.76.0" dependencies: "@types/eslint-scope": ^3.7.3 "@types/estree": ^0.0.51 @@ -39310,7 +39506,7 @@ __metadata: optional: true bin: webpack: bin/webpack.js - checksum: 2bcc5f3c195f375944e8af2f00bf2feea39cb9fda5f763b0d1b00077f1c51783db25c94d3fae96a07dead9fa085e6ae7474417e5ab31719c9776ea5969ceb83a + checksum: e897b3b34068222fe910d8894837cbf39f5e66b4772fe8d24dfc0090cd13e19337a3a757a97bc185be6c64d9d5a7b1ae372821b65a6079ce8c7ceba606edb409 languageName: node linkType: hard @@ -39668,13 +39864,13 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^4.0.2": - version: 4.0.2 - resolution: "write-file-atomic@npm:4.0.2" +"write-file-atomic@npm:^5.0.0": + version: 5.0.0 + resolution: "write-file-atomic@npm:5.0.0" dependencies: imurmurhash: ^0.1.4 signal-exit: ^3.0.7 - checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c + checksum: 6ee16b195572386cb1c905f9d29808f77f4de2fd063d74a6f1ab6b566363832d8906a493b764ee715e57ab497271d5fc91642a913724960e8e845adf504a9837 languageName: node linkType: hard @@ -39850,7 +40046,7 @@ __metadata: languageName: node linkType: hard -"xss@npm:1.0.14": +"xss@npm:^1.0.14": version: 1.0.14 resolution: "xss@npm:1.0.14" dependencies: @@ -39862,10 +40058,10 @@ __metadata: languageName: node linkType: hard -"xstate@npm:^4.31.0": - version: 4.36.0 - resolution: "xstate@npm:4.36.0" - checksum: c8c4c7bb02b0a1f402dc967ce29489551457f0bb5e021328b4cddf34d7eb6b66ad5c131003d33808f5a9ef2cbd2f6ae31ac5904314ee5e6adc7616589b746310 +"xstate@npm:^4.37.0": + version: 4.37.0 + resolution: "xstate@npm:4.37.0" + checksum: 8eba107721c91ba08934b68a2881f01dd9ab6f23cc2ebcdd91145ce5999db8f690b38cf1570b928c058755150fc5024bed1cafe731ff7e6750d4e64752a7ab5b languageName: node linkType: hard @@ -39883,6 +40079,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d + languageName: node + linkType: hard + "yallist@npm:^4.0.0": version: 4.0.0 resolution: "yallist@npm:4.0.0"