From 6bc2f9125cca5eaefee2950ab11d2b9a4c9b8295 Mon Sep 17 00:00:00 2001 From: rahulkeswani101 Date: Mon, 2 Sep 2024 09:54:49 +0530 Subject: [PATCH 01/50] feat: added view logs button for error and latency chart --- .../MetricsApplication/Tabs/Overview.tsx | 86 +++++++++++++------ .../GraphControlsPanel.styles.scss | 26 ++++++ .../GraphControlsPanel/GraphControlsPanel.tsx | 42 +++++++++ .../Tabs/Overview/ServiceOverview.tsx | 22 +++-- .../container/MetricsApplication/Tabs/util.ts | 53 ++++++++++-- 5 files changed, 187 insertions(+), 42 deletions(-) create mode 100644 frontend/src/container/MetricsApplication/Tabs/Overview/GraphControlsPanel/GraphControlsPanel.styles.scss create mode 100644 frontend/src/container/MetricsApplication/Tabs/Overview/GraphControlsPanel/GraphControlsPanel.tsx diff --git a/frontend/src/container/MetricsApplication/Tabs/Overview.tsx b/frontend/src/container/MetricsApplication/Tabs/Overview.tsx index 241395b23a..25f6f72a55 100644 --- a/frontend/src/container/MetricsApplication/Tabs/Overview.tsx +++ b/frontend/src/container/MetricsApplication/Tabs/Overview.tsx @@ -38,6 +38,7 @@ import { } from '../MetricsPageQueries/OverviewQueries'; import { Col, ColApDexContainer, ColErrorContainer, Row } from '../styles'; import ApDex from './Overview/ApDex'; +import GraphControlsPanel from './Overview/GraphControlsPanel/GraphControlsPanel'; import ServiceOverview from './Overview/ServiceOverview'; import TopLevelOperation from './Overview/TopLevelOperations'; import TopOperation from './Overview/TopOperation'; @@ -48,6 +49,7 @@ import { handleNonInQueryRange, onGraphClickHandler, onViewTracePopupClick, + useGetAPMToLogsQueries, useGetAPMToTracesQueries, } from './util'; @@ -194,33 +196,57 @@ function Application(): JSX.Element { [dispatch, pathname, urlQuery], ); - const onErrorTrackHandler = ( - timestamp: number, - apmToTraceQuery: Query, - ): (() => void) => (): void => { - const currentTime = timestamp; - const tPlusOne = timestamp + 60 * 1000; + const onErrorTrackHandler = useCallback( + ( + timestamp: number, + apmToTraceQuery: Query, + isViewLogsClicked?: boolean, + ): (() => void) => (): void => { + const currentTime = timestamp; + const tPlusOne = timestamp + 60 * 1000; - const urlParams = new URLSearchParams(search); - urlParams.set(QueryParams.startTime, currentTime.toString()); - urlParams.set(QueryParams.endTime, tPlusOne.toString()); + const urlParams = new URLSearchParams(search); + urlParams.set(QueryParams.startTime, currentTime.toString()); + urlParams.set(QueryParams.endTime, tPlusOne.toString()); - const avialableParams = routeConfig[ROUTES.TRACE]; - const queryString = getQueryString(avialableParams, urlParams); + const avialableParams = routeConfig[ROUTES.TRACE]; + const queryString = getQueryString(avialableParams, urlParams); - const JSONCompositeQuery = encodeURIComponent( - JSON.stringify(apmToTraceQuery), - ); + const JSONCompositeQuery = encodeURIComponent( + JSON.stringify(apmToTraceQuery), + ); - const newTraceExplorerPath = `${ - ROUTES.TRACES_EXPLORER - }?${urlParams.toString()}&selected={"serviceName":["${servicename}"]}&filterToFetchData=["duration","status","serviceName"]&spanAggregateCurrentPage=1&selectedTags=${selectedTraceTags}&${ - QueryParams.compositeQuery - }=${JSONCompositeQuery}&${queryString.join('&')}`; + const basePath = isViewLogsClicked + ? ROUTES.LOGS_EXPLORER + : ROUTES.TRACES_EXPLORER; + const newPath = `${basePath}?${urlParams.toString()}&selected={"serviceName":["${servicename}"]}&filterToFetchData=["duration","status","serviceName"]&spanAggregateCurrentPage=1&selectedTags=${selectedTraceTags}&${ + QueryParams.compositeQuery + }=${JSONCompositeQuery}&${queryString.join('&')}`; - history.push(newTraceExplorerPath); - }; + history.push(newPath); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [], + ); + const logErrorQuery = useGetAPMToLogsQueries({ + servicename, + filters: [ + { + id: uuid().slice(0, 8), + key: { + key: 'hasError', + dataType: DataTypes.bool, + type: 'tag', + isColumn: true, + isJSON: false, + id: 'hasError--bool--tag--true', + }, + op: '=', + value: ['true'], + }, + ], + }); const errorTrackQuery = useGetAPMToTracesQueries({ servicename, filters: [ @@ -304,14 +330,18 @@ function Application(): JSX.Element { /> - + onViewLogsClick={onErrorTrackHandler( + selectedTimeStamp, + logErrorQuery, + true, + )} + onViewTracesClick={onErrorTrackHandler( + selectedTimeStamp, + errorTrackQuery, + )} + /> void; + onViewTracesClick: () => void; +} + +function GraphControlsPanel({ + id, + onViewLogsClick, + onViewTracesClick, +}: GraphControlsPanelProps): JSX.Element { + return ( +
+ + +
+ ); +} + +export default GraphControlsPanel; diff --git a/frontend/src/container/MetricsApplication/Tabs/Overview/ServiceOverview.tsx b/frontend/src/container/MetricsApplication/Tabs/Overview/ServiceOverview.tsx index 9651e16d3a..0b7d86d660 100644 --- a/frontend/src/container/MetricsApplication/Tabs/Overview/ServiceOverview.tsx +++ b/frontend/src/container/MetricsApplication/Tabs/Overview/ServiceOverview.tsx @@ -19,13 +19,14 @@ import { useParams } from 'react-router-dom'; import { EQueryType } from 'types/common/dashboard'; import { v4 as uuid } from 'uuid'; -import { Button } from '../styles'; import { IServiceName } from '../types'; import { handleNonInQueryRange, onViewTracePopupClick, + useGetAPMToLogsQueries, useGetAPMToTracesQueries, } from '../util'; +import GraphControlsPanel from './GraphControlsPanel/GraphControlsPanel'; function ServiceOverview({ onDragSelect, @@ -75,21 +76,26 @@ function ServiceOverview({ const apmToTraceQuery = useGetAPMToTracesQueries({ servicename }); + const apmToLogQuery = useGetAPMToLogsQueries({ servicename }); + return ( <> - + /> {topLevelOperationsIsLoading && ( diff --git a/frontend/src/container/MetricsApplication/Tabs/util.ts b/frontend/src/container/MetricsApplication/Tabs/util.ts index 6832fe9d02..a9d04d361d 100644 --- a/frontend/src/container/MetricsApplication/Tabs/util.ts +++ b/frontend/src/container/MetricsApplication/Tabs/util.ts @@ -5,6 +5,7 @@ import { routeConfig } from 'container/SideNav/config'; import { getQueryString } from 'container/SideNav/helper'; import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder'; import history from 'lib/history'; +import { prepareQueryWithDefaultTimestamp } from 'pages/LogsExplorer/utils'; import { traceFilterKeys } from 'pages/TracesExplorer/Filter/filterUtils'; import { Dispatch, SetStateAction, useMemo } from 'react'; import { @@ -31,12 +32,14 @@ interface OnViewTracePopupClickProps { selectedTraceTags: string; timestamp: number; apmToTraceQuery: Query; + isViewLogsClicked?: boolean; } export function onViewTracePopupClick({ selectedTraceTags, servicename, timestamp, apmToTraceQuery, + isViewLogsClicked, }: OnViewTracePopupClickProps): VoidFunction { return (): void => { const currentTime = timestamp; @@ -53,13 +56,14 @@ export function onViewTracePopupClick({ JSON.stringify(apmToTraceQuery), ); - const newTraceExplorerPath = `${ - ROUTES.TRACES_EXPLORER - }?${urlParams.toString()}&selected={"serviceName":["${servicename}"]}&filterToFetchData=["duration","status","serviceName"]&spanAggregateCurrentPage=1&selectedTags=${selectedTraceTags}&${ + const basePath = isViewLogsClicked + ? ROUTES.LOGS_EXPLORER + : ROUTES.TRACES_EXPLORER; + const newPath = `${basePath}?${urlParams.toString()}&selected={"serviceName":["${servicename}"]}&filterToFetchData=["duration","status","serviceName"]&spanAggregateCurrentPage=1&selectedTags=${selectedTraceTags}&${ QueryParams.compositeQuery }=${JSONCompositeQuery}&${queryString.join('&')}`; - history.push(newTraceExplorerPath); + history.push(newPath); }; } @@ -79,7 +83,7 @@ export function onGraphClickHandler( if (xValue) { if (buttonElement) { - buttonElement.style.display = 'block'; + buttonElement.style.display = 'flex'; buttonElement.style.left = `${mouseX}px`; buttonElement.style.top = `${mouseY}px`; setSelectedTimeStamp(xValue); @@ -106,12 +110,13 @@ export function handleQueryChange( attributeKeys: BaseAutocompleteData, serviceAttribute: string, filters?: TagFilterItem[], + logs?: boolean, ): Query { const filterItem: TagFilterItem[] = [ { id: uuid().slice(0, 8), key: attributeKeys, - op: 'in', + op: logs ? '=' : 'in', value: serviceAttribute, }, ]; @@ -130,6 +135,42 @@ export function handleQueryChange( }; } +export function useGetAPMToLogsQueries({ + servicename, + filters, +}: { + servicename: string; + filters?: TagFilterItem[]; +}): Query { + const finalFilters: TagFilterItem[] = []; + const { updateAllQueriesOperators } = useQueryBuilder(); + let updatedQuery = updateAllQueriesOperators( + initialQueriesMap.logs, + PANEL_TYPES.LIST, + DataSource.LOGS, + ); + const serviceName = { + id: 'service.name--string--resource--true', + dataType: DataTypes.String, + isColumn: true, + key: 'service.name', + type: 'resource', + isJSON: false, + }; + + if (filters?.length) { + finalFilters.push(...filters); + } + updatedQuery = prepareQueryWithDefaultTimestamp(updatedQuery); + return handleQueryChange( + updatedQuery, + serviceName, + servicename, + finalFilters, + true, + ); +} + export function useGetAPMToTracesQueries({ servicename, isExternalCall, From 6c06fea1aa3736d4634f903ef4db3d575733ac7e Mon Sep 17 00:00:00 2001 From: rahulkeswani101 Date: Mon, 2 Sep 2024 13:43:54 +0530 Subject: [PATCH 02/50] style: remove unused CSS --- .../Overview/GraphControlsPanel/GraphControlsPanel.styles.scss | 1 - frontend/src/container/MetricsApplication/Tabs/util.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/frontend/src/container/MetricsApplication/Tabs/Overview/GraphControlsPanel/GraphControlsPanel.styles.scss b/frontend/src/container/MetricsApplication/Tabs/Overview/GraphControlsPanel/GraphControlsPanel.styles.scss index 9ace0dc0dd..c42014485d 100644 --- a/frontend/src/container/MetricsApplication/Tabs/Overview/GraphControlsPanel/GraphControlsPanel.styles.scss +++ b/frontend/src/container/MetricsApplication/Tabs/Overview/GraphControlsPanel/GraphControlsPanel.styles.scss @@ -2,7 +2,6 @@ position: absolute; z-index: 999; display: none; - flex-direction: column; width: 110px; padding: 5px; border-radius: 5px; diff --git a/frontend/src/container/MetricsApplication/Tabs/util.ts b/frontend/src/container/MetricsApplication/Tabs/util.ts index a9d04d361d..cb771581cd 100644 --- a/frontend/src/container/MetricsApplication/Tabs/util.ts +++ b/frontend/src/container/MetricsApplication/Tabs/util.ts @@ -83,7 +83,7 @@ export function onGraphClickHandler( if (xValue) { if (buttonElement) { - buttonElement.style.display = 'flex'; + buttonElement.style.display = 'block'; buttonElement.style.left = `${mouseX}px`; buttonElement.style.top = `${mouseY}px`; setSelectedTimeStamp(xValue); From ed4613cb1b9c36359a3d557f5f7f61ca7390c43b Mon Sep 17 00:00:00 2001 From: rahulkeswani101 Date: Wed, 4 Sep 2024 15:35:01 +0530 Subject: [PATCH 03/50] feat: added severity text as a filter and removed relative time param from url --- .../container/MetricsApplication/Tabs/Overview.tsx | 12 ++++++------ .../src/container/MetricsApplication/Tabs/util.ts | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/frontend/src/container/MetricsApplication/Tabs/Overview.tsx b/frontend/src/container/MetricsApplication/Tabs/Overview.tsx index 25f6f72a55..32a819e375 100644 --- a/frontend/src/container/MetricsApplication/Tabs/Overview.tsx +++ b/frontend/src/container/MetricsApplication/Tabs/Overview.tsx @@ -208,7 +208,7 @@ function Application(): JSX.Element { const urlParams = new URLSearchParams(search); urlParams.set(QueryParams.startTime, currentTime.toString()); urlParams.set(QueryParams.endTime, tPlusOne.toString()); - + urlParams.delete('relativeTime'); const avialableParams = routeConfig[ROUTES.TRACE]; const queryString = getQueryString(avialableParams, urlParams); @@ -235,15 +235,15 @@ function Application(): JSX.Element { { id: uuid().slice(0, 8), key: { - key: 'hasError', - dataType: DataTypes.bool, - type: 'tag', + key: 'severity_text', + dataType: DataTypes.String, + type: '', isColumn: true, isJSON: false, - id: 'hasError--bool--tag--true', + id: 'severity_text--string----true', }, op: '=', - value: ['true'], + value: 'ERROR', }, ], }); diff --git a/frontend/src/container/MetricsApplication/Tabs/util.ts b/frontend/src/container/MetricsApplication/Tabs/util.ts index cb771581cd..6835080349 100644 --- a/frontend/src/container/MetricsApplication/Tabs/util.ts +++ b/frontend/src/container/MetricsApplication/Tabs/util.ts @@ -49,6 +49,7 @@ export function onViewTracePopupClick({ const urlParams = new URLSearchParams(window.location.search); urlParams.set(QueryParams.startTime, currentTime.toString()); urlParams.set(QueryParams.endTime, tPlusOne.toString()); + urlParams.delete('relativeTime'); const avialableParams = routeConfig[ROUTES.TRACE]; const queryString = getQueryString(avialableParams, urlParams); From bfb63ca8c420ac027b3848276a5039bcc2bb227e Mon Sep 17 00:00:00 2001 From: rahulkeswani101 Date: Sun, 8 Sep 2024 22:22:39 +0530 Subject: [PATCH 04/50] fix: custom end time issue while navigating to a different page --- frontend/src/container/MetricsApplication/Tabs/Overview.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/container/MetricsApplication/Tabs/Overview.tsx b/frontend/src/container/MetricsApplication/Tabs/Overview.tsx index 32a819e375..f94d5fc865 100644 --- a/frontend/src/container/MetricsApplication/Tabs/Overview.tsx +++ b/frontend/src/container/MetricsApplication/Tabs/Overview.tsx @@ -203,7 +203,7 @@ function Application(): JSX.Element { isViewLogsClicked?: boolean, ): (() => void) => (): void => { const currentTime = timestamp; - const tPlusOne = timestamp + 60 * 1000; + const tPlusOne = timestamp + 60; const urlParams = new URLSearchParams(search); urlParams.set(QueryParams.startTime, currentTime.toString()); @@ -242,8 +242,8 @@ function Application(): JSX.Element { isJSON: false, id: 'severity_text--string----true', }, - op: '=', - value: 'ERROR', + op: 'in', + value: ['ERROR', 'FATAL'], }, ], }); From 540a2c6712e18cef0cd429d5b4713f33ef94e261 Mon Sep 17 00:00:00 2001 From: rahulkeswani101 Date: Mon, 16 Sep 2024 15:49:55 +0530 Subject: [PATCH 05/50] feat: added all values for severity text when we are navigating from error panel to logs --- frontend/src/container/MetricsApplication/Tabs/Overview.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/container/MetricsApplication/Tabs/Overview.tsx b/frontend/src/container/MetricsApplication/Tabs/Overview.tsx index f94d5fc865..5fb101deac 100644 --- a/frontend/src/container/MetricsApplication/Tabs/Overview.tsx +++ b/frontend/src/container/MetricsApplication/Tabs/Overview.tsx @@ -243,7 +243,7 @@ function Application(): JSX.Element { id: 'severity_text--string----true', }, op: 'in', - value: ['ERROR', 'FATAL'], + value: ['ERROR', 'FATAL', 'error', 'fatal'], }, ], }); From fc8391c5aabc75146ad145065920cd3e65f72d8d Mon Sep 17 00:00:00 2001 From: Raj Kamal Singh <1133322+raj-k-singh@users.noreply.github.com> Date: Thu, 26 Sep 2024 15:26:14 +0530 Subject: [PATCH 06/50] Feat: logs filter suggestions higher rank for special resource attribs like service.name and env etc (#6060) * chore: upgrade signoz-otel-collector dependency to v0.102.10 * feat: first stab at ranking resource attribs higher * chore: add test todo for validating resource attribs get ranked higher in logs filter suggestions * chore: add test validating higher ranking for special resource attribs * chore: some cleanup * chore: some more cleanup --- go.mod | 2 +- go.sum | 2 + .../clickhouseReader/filter_suggestions.go | 78 ++++++++++++++----- .../integration/filter_suggestions_test.go | 56 +++++++++++++ 4 files changed, 117 insertions(+), 21 deletions(-) diff --git a/go.mod b/go.mod index 9d61916d42..6f523045d1 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/ClickHouse/clickhouse-go/v2 v2.23.2 github.com/DATA-DOG/go-sqlmock v1.5.2 github.com/SigNoz/govaluate v0.0.0-20240203125216-988004ccc7fd - github.com/SigNoz/signoz-otel-collector v0.102.2 + github.com/SigNoz/signoz-otel-collector v0.102.10 github.com/SigNoz/zap_otlp/zap_otlp_encoder v0.0.0-20230822164844-1b861a431974 github.com/SigNoz/zap_otlp/zap_otlp_sync v0.0.0-20230822164844-1b861a431974 github.com/antonmedv/expr v1.15.3 diff --git a/go.sum b/go.sum index a442200b0e..c557bc6f87 100644 --- a/go.sum +++ b/go.sum @@ -66,6 +66,8 @@ github.com/SigNoz/prometheus v1.11.1 h1:roM8ugYf4UxaeKKujEeBvoX7ybq3IrS+TB26KiRt github.com/SigNoz/prometheus v1.11.1/go.mod h1:uv4mQwZQtx7y4GQ6EdHOi8Wsk07uHNn2XHd1zM85m6I= github.com/SigNoz/signoz-otel-collector v0.102.2 h1:SmjsBZjMjTVVpuOlfJXlsDJQbdefQP/9Wz3CyzSuZuU= github.com/SigNoz/signoz-otel-collector v0.102.2/go.mod h1:ISAXYhZenojCWg6CdDJtPMpfS6Zwc08+uoxH25tc6Y0= +github.com/SigNoz/signoz-otel-collector v0.102.10 h1:1zjU31OcRZL6fS0IIag8LA8bdhP4S28dzovDwuOg7Lg= +github.com/SigNoz/signoz-otel-collector v0.102.10/go.mod h1:APoBVD4aRu9vIny1vdzZSi2wPY3elyjHA/I/rh1hKfs= github.com/SigNoz/zap_otlp v0.1.0 h1:T7rRcFN87GavY8lDGZj0Z3Xv6OhJA6Pj3I9dNPmqvRc= github.com/SigNoz/zap_otlp v0.1.0/go.mod h1:lcHvbDbRgvDnPxo9lDlaL1JK2PyOyouP/C3ynnYIvyo= github.com/SigNoz/zap_otlp/zap_otlp_encoder v0.0.0-20230822164844-1b861a431974 h1:PKVgdf83Yw+lZJbFtNGBgqXiXNf3+kOXW2qZ7Ms7OaY= diff --git a/pkg/query-service/app/clickhouseReader/filter_suggestions.go b/pkg/query-service/app/clickhouseReader/filter_suggestions.go index 1b80ccbef4..fe78fc5555 100644 --- a/pkg/query-service/app/clickhouseReader/filter_suggestions.go +++ b/pkg/query-service/app/clickhouseReader/filter_suggestions.go @@ -8,6 +8,7 @@ import ( "slices" "strings" + "github.com/SigNoz/signoz-otel-collector/exporter/clickhouselogsexporter/logsv2" "go.signoz.io/signoz/pkg/query-service/model" v3 "go.signoz.io/signoz/pkg/query-service/model/v3" "go.uber.org/zap" @@ -36,26 +37,7 @@ func (r *ClickHouseReader) GetQBFilterSuggestionsForLogs( suggestions.AttributeKeys = attribKeysResp.AttributeKeys // Rank suggested attributes - slices.SortFunc(suggestions.AttributeKeys, func(a v3.AttributeKey, b v3.AttributeKey) int { - - // Higher score => higher rank - attribKeyScore := func(a v3.AttributeKey) int { - - // Scoring criteria is expected to get more sophisticated in follow up changes - if a.Type == v3.AttributeKeyTypeResource { - return 2 - } - - if a.Type == v3.AttributeKeyTypeTag { - return 1 - } - - return 0 - } - - // To sort in descending order of score the return value must be negative when a > b - return attribKeyScore(b) - attribKeyScore(a) - }) + attribRanker.sort(suggestions.AttributeKeys) // Put together suggested example queries. @@ -268,3 +250,59 @@ func (r *ClickHouseReader) getValuesForLogAttributes( return result, nil } + +var attribRanker = newRankingStrategy() + +func newRankingStrategy() attribRankingStrategy { + // Some special resource attributes should get ranked above all others. + interestingResourceAttrsInDescRank := []string{ + "service", "service.name", "env", "k8s.namespace.name", + } + + // Synonyms of interesting attributes should come next + resourceHierarchy := logsv2.ResourceHierarchy() + for _, attr := range []string{ + "service.name", + "deployment.environment", + "k8s.namespace.name", + "k8s.pod.name", + "k8s.container.name", + "k8s.node.name", + } { + interestingResourceAttrsInDescRank = append( + interestingResourceAttrsInDescRank, resourceHierarchy.Synonyms(attr)..., + ) + } + + interestingResourceAttrsInAscRank := interestingResourceAttrsInDescRank[:] + slices.Reverse(interestingResourceAttrsInAscRank) + + return attribRankingStrategy{ + interestingResourceAttrsInAscRank: interestingResourceAttrsInAscRank, + } +} + +type attribRankingStrategy struct { + interestingResourceAttrsInAscRank []string +} + +// The higher the score, the higher the rank +func (s *attribRankingStrategy) score(attrib v3.AttributeKey) int { + if attrib.Type == v3.AttributeKeyTypeResource { + // 3 + (-1) if attrib.Key is not an interesting resource attribute + return 3 + slices.Index(s.interestingResourceAttrsInAscRank, attrib.Key) + } + + if attrib.Type == v3.AttributeKeyTypeTag { + return 1 + } + + return 0 +} + +func (s *attribRankingStrategy) sort(attribKeys []v3.AttributeKey) { + slices.SortFunc(attribKeys, func(a v3.AttributeKey, b v3.AttributeKey) int { + // To sort in descending order of score the return value must be negative when a > b + return s.score(b) - s.score(a) + }) +} diff --git a/pkg/query-service/tests/integration/filter_suggestions_test.go b/pkg/query-service/tests/integration/filter_suggestions_test.go index a1f56115c5..6c8224be50 100644 --- a/pkg/query-service/tests/integration/filter_suggestions_test.go +++ b/pkg/query-service/tests/integration/filter_suggestions_test.go @@ -138,6 +138,62 @@ func TestLogsFilterSuggestionsWithExistingFilter(t *testing.T) { } } +func TestResourceAttribsRankedHigherInLogsFilterSuggestions(t *testing.T) { + require := require.New(t) + + tagKeys := []v3.AttributeKey{} + for _, k := range []string{"user_id", "user_email"} { + tagKeys = append(tagKeys, v3.AttributeKey{ + Key: k, + Type: v3.AttributeKeyTypeTag, + DataType: v3.AttributeKeyDataTypeString, + IsColumn: false, + }) + } + + specialResourceAttrKeys := []v3.AttributeKey{} + for _, k := range []string{"service", "env"} { + specialResourceAttrKeys = append(specialResourceAttrKeys, v3.AttributeKey{ + Key: k, + Type: v3.AttributeKeyTypeResource, + DataType: v3.AttributeKeyDataTypeString, + IsColumn: false, + }) + } + + otherResourceAttrKeys := []v3.AttributeKey{} + for _, k := range []string{"container_name", "container_id"} { + otherResourceAttrKeys = append(otherResourceAttrKeys, v3.AttributeKey{ + Key: k, + Type: v3.AttributeKeyTypeResource, + DataType: v3.AttributeKeyDataTypeString, + IsColumn: false, + }) + } + + tb := NewFilterSuggestionsTestBed(t) + + mockAttrKeysInDB := append(tagKeys, otherResourceAttrKeys...) + mockAttrKeysInDB = append(mockAttrKeysInDB, specialResourceAttrKeys...) + + tb.mockAttribKeysQueryResponse(mockAttrKeysInDB) + + expectedTopSuggestions := append(specialResourceAttrKeys, otherResourceAttrKeys...) + expectedTopSuggestions = append(expectedTopSuggestions, tagKeys...) + + tb.mockAttribValuesQueryResponse( + expectedTopSuggestions[:2], [][]string{{"test"}, {"test"}}, + ) + + suggestionsQueryParams := map[string]string{"examplesLimit": "2"} + suggestionsResp := tb.GetQBFilterSuggestionsForLogs(suggestionsQueryParams) + + require.Equal( + expectedTopSuggestions, + suggestionsResp.AttributeKeys[:len(expectedTopSuggestions)], + ) +} + // Mocks response for CH queries made by reader.GetLogAttributeKeys func (tb *FilterSuggestionsTestBed) mockAttribKeysQueryResponse( attribsToReturn []v3.AttributeKey, From 6e3141a4ce28ffb5d4e2c763f2dad9aa3935e546 Mon Sep 17 00:00:00 2001 From: rahulkeswani101 Date: Thu, 26 Sep 2024 16:12:49 +0530 Subject: [PATCH 07/50] feat: added blur event to having input in query section (#5684) * feat: added blur event to having input in query section * feat: added a error message for incomplete having clause and improved handleBlur * feat: added focus event to remove error message --------- Co-authored-by: Srikanth Chekuri --- .../filters/HavingFilter/HavingFilter.tsx | 79 +++++++++++++------ 1 file changed, 56 insertions(+), 23 deletions(-) diff --git a/frontend/src/container/QueryBuilder/filters/HavingFilter/HavingFilter.tsx b/frontend/src/container/QueryBuilder/filters/HavingFilter/HavingFilter.tsx index 7d11d018cc..3eab3e50ee 100644 --- a/frontend/src/container/QueryBuilder/filters/HavingFilter/HavingFilter.tsx +++ b/frontend/src/container/QueryBuilder/filters/HavingFilter/HavingFilter.tsx @@ -1,3 +1,4 @@ +import { Color } from '@signozhq/design-tokens'; import { Select } from 'antd'; import { ENTITY_VERSION_V4 } from 'constants/app'; // ** Constants @@ -34,6 +35,7 @@ export function HavingFilter({ const [currentFormValue, setCurrentFormValue] = useState( initialHavingValues, ); + const [errorMessage, setErrorMessage] = useState(null); const { isMulti } = useTagValidation( currentFormValue.op, @@ -198,6 +200,29 @@ export function HavingFilter({ resetChanges(); }; + const handleFocus = useCallback(() => { + setErrorMessage(null); + }, []); + + const handleBlur = useCallback((): void => { + if (searchText) { + const { columnName, op, value } = getHavingObject(searchText); + const isCompleteHavingClause = + columnName && op && value.every((v) => v !== ''); + + if (isCompleteHavingClause && isValidHavingValue(searchText)) { + setLocalValues((prev) => { + const updatedValues = [...prev, searchText]; + onChange(updatedValues.map(transformFromStringToHaving)); + return updatedValues; + }); + setSearchText(''); + } else { + setErrorMessage('Invalid HAVING clause'); + } + } + }, [searchText, onChange]); + useEffect(() => { parseSearchText(searchText); }, [searchText, parseSearchText]); @@ -209,28 +234,36 @@ export function HavingFilter({ const isMetricsDataSource = query.dataSource === DataSource.METRICS; return ( - + <> + + {errorMessage && ( +
{errorMessage}
+ )} + ); } From f4fbe62169e549b503100c5251580a32e3a9af3e Mon Sep 17 00:00:00 2001 From: rahulkeswani101 Date: Thu, 26 Sep 2024 17:26:14 +0530 Subject: [PATCH 08/50] feat: added new function to decide new path based on button clicked --- .../MetricsApplication/Tabs/Overview.tsx | 17 ++++++---- .../container/MetricsApplication/Tabs/util.ts | 34 +++++++++++++++---- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/frontend/src/container/MetricsApplication/Tabs/Overview.tsx b/frontend/src/container/MetricsApplication/Tabs/Overview.tsx index 5fb101deac..a8d40f3dd9 100644 --- a/frontend/src/container/MetricsApplication/Tabs/Overview.tsx +++ b/frontend/src/container/MetricsApplication/Tabs/Overview.tsx @@ -46,6 +46,7 @@ import TopOperationMetrics from './Overview/TopOperationMetrics'; import { Button, Card } from './styles'; import { IServiceName } from './types'; import { + generateExplorerPath, handleNonInQueryRange, onGraphClickHandler, onViewTracePopupClick, @@ -208,7 +209,7 @@ function Application(): JSX.Element { const urlParams = new URLSearchParams(search); urlParams.set(QueryParams.startTime, currentTime.toString()); urlParams.set(QueryParams.endTime, tPlusOne.toString()); - urlParams.delete('relativeTime'); + urlParams.delete(QueryParams.relativeTime); const avialableParams = routeConfig[ROUTES.TRACE]; const queryString = getQueryString(avialableParams, urlParams); @@ -216,12 +217,14 @@ function Application(): JSX.Element { JSON.stringify(apmToTraceQuery), ); - const basePath = isViewLogsClicked - ? ROUTES.LOGS_EXPLORER - : ROUTES.TRACES_EXPLORER; - const newPath = `${basePath}?${urlParams.toString()}&selected={"serviceName":["${servicename}"]}&filterToFetchData=["duration","status","serviceName"]&spanAggregateCurrentPage=1&selectedTags=${selectedTraceTags}&${ - QueryParams.compositeQuery - }=${JSONCompositeQuery}&${queryString.join('&')}`; + const newPath = generateExplorerPath( + isViewLogsClicked, + urlParams, + servicename, + selectedTraceTags, + JSONCompositeQuery, + queryString, + ); history.push(newPath); }, diff --git a/frontend/src/container/MetricsApplication/Tabs/util.ts b/frontend/src/container/MetricsApplication/Tabs/util.ts index d58554e2d7..c13c0857e5 100644 --- a/frontend/src/container/MetricsApplication/Tabs/util.ts +++ b/frontend/src/container/MetricsApplication/Tabs/util.ts @@ -36,6 +36,24 @@ interface OnViewTracePopupClickProps { apmToTraceQuery: Query; isViewLogsClicked?: boolean; } + +export function generateExplorerPath( + isViewLogsClicked: boolean | undefined, + urlParams: URLSearchParams, + servicename: string | undefined, + selectedTraceTags: string, + JSONCompositeQuery: string, + queryString: string[], +): string { + const basePath = isViewLogsClicked + ? ROUTES.LOGS_EXPLORER + : ROUTES.TRACES_EXPLORER; + + return `${basePath}?${urlParams.toString()}&selected={"serviceName":["${servicename}"]}&filterToFetchData=["duration","status","serviceName"]&spanAggregateCurrentPage=1&selectedTags=${selectedTraceTags}&${ + QueryParams.compositeQuery + }=${JSONCompositeQuery}&${queryString.join('&')}`; +} + export function onViewTracePopupClick({ selectedTraceTags, servicename, @@ -51,7 +69,7 @@ export function onViewTracePopupClick({ const urlParams = new URLSearchParams(window.location.search); urlParams.set(QueryParams.startTime, currentTime.toString()); urlParams.set(QueryParams.endTime, tPlusOne.toString()); - urlParams.delete('relativeTime'); + urlParams.delete(QueryParams.relativeTime); const avialableParams = routeConfig[ROUTES.TRACE]; const queryString = getQueryString(avialableParams, urlParams); @@ -59,12 +77,14 @@ export function onViewTracePopupClick({ JSON.stringify(apmToTraceQuery), ); - const basePath = isViewLogsClicked - ? ROUTES.LOGS_EXPLORER - : ROUTES.TRACES_EXPLORER; - const newPath = `${basePath}?${urlParams.toString()}&selected={"serviceName":["${servicename}"]}&filterToFetchData=["duration","status","serviceName"]&spanAggregateCurrentPage=1&selectedTags=${selectedTraceTags}&${ - QueryParams.compositeQuery - }=${JSONCompositeQuery}&${queryString.join('&')}`; + const newPath = generateExplorerPath( + isViewLogsClicked, + urlParams, + servicename, + selectedTraceTags, + JSONCompositeQuery, + queryString, + ); history.push(newPath); }; From 7a125e31ecf8c9733370ac62d9449598a3de66cf Mon Sep 17 00:00:00 2001 From: Vishal Sharma Date: Thu, 26 Sep 2024 17:33:21 +0530 Subject: [PATCH 09/50] chore: remove slack connect and call help (#6044) * chore: remove slack connect and call help --- frontend/src/pages/Support/Support.tsx | 36 -------------------------- 1 file changed, 36 deletions(-) diff --git a/frontend/src/pages/Support/Support.tsx b/frontend/src/pages/Support/Support.tsx index 9d3d8fff8f..668ac34143 100644 --- a/frontend/src/pages/Support/Support.tsx +++ b/frontend/src/pages/Support/Support.tsx @@ -10,8 +10,6 @@ import useLicense from 'hooks/useLicense'; import { useNotifications } from 'hooks/useNotifications'; import { Book, - Cable, - Calendar, CreditCard, Github, MessageSquare, @@ -78,22 +76,6 @@ const supportChannels = [ url: '', btnText: 'Launch chat', }, - { - key: 'schedule_call', - name: 'Schedule a call', - icon: , - title: 'Schedule a call with the founders.', - url: 'https://calendly.com/vishal-signoz/30min', - btnText: 'Schedule call', - }, - { - key: 'slack_connect', - name: 'Slack Connect', - icon: , - title: 'Get a dedicated support channel for your team.', - url: '', - btnText: 'Request Slack connect', - }, ]; export default function Support(): JSX.Element { @@ -122,20 +104,6 @@ export default function Support(): JSX.Element { // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - const handleSlackConnectRequest = (): void => { - const recipient = 'support@signoz.io'; - const subject = 'Slack Connect Request'; - const body = `I'd like to request a dedicated Slack Connect channel for me and my team. Users (emails) to include besides mine:`; - - // Create the mailto link - const mailtoLink = `mailto:${recipient}?subject=${encodeURIComponent( - subject, - )}&body=${encodeURIComponent(body)}`; - - // Open the default email client - window.location.href = mailtoLink; - }; - const isPremiumChatSupportEnabled = useFeatureFlags(FeatureKeys.PREMIUM_SUPPORT)?.active || false; @@ -214,15 +182,11 @@ export default function Support(): JSX.Element { case channelsMap.documentation: case channelsMap.github: case channelsMap.slack_community: - case channelsMap.schedule_call: handleChannelWithRedirects(channel.url); break; case channelsMap.chat: handleChat(); break; - case channelsMap.slack_connect: - handleSlackConnectRequest(); - break; default: handleChannelWithRedirects('https://signoz.io/slack'); break; From ef4b70f67b014393483c0adb079a2c732c323d9e Mon Sep 17 00:00:00 2001 From: Vikrant Gupta Date: Thu, 26 Sep 2024 19:06:22 +0530 Subject: [PATCH 10/50] fix: intermittent undefined page in trace details page (#6084) --- .../TracesExplorer/ListView/index.tsx | 21 ++----------------- .../TracesExplorer/ListView/utils.tsx | 18 ++++++++-------- 2 files changed, 11 insertions(+), 28 deletions(-) diff --git a/frontend/src/container/TracesExplorer/ListView/index.tsx b/frontend/src/container/TracesExplorer/ListView/index.tsx index 810ffb8241..c22623772b 100644 --- a/frontend/src/container/TracesExplorer/ListView/index.tsx +++ b/frontend/src/container/TracesExplorer/ListView/index.tsx @@ -14,9 +14,8 @@ import { Pagination } from 'hooks/queryPagination'; import useDragColumns from 'hooks/useDragColumns'; import { getDraggedColumns } from 'hooks/useDragColumns/utils'; import useUrlQueryData from 'hooks/useUrlQueryData'; -import history from 'lib/history'; import { RowData } from 'lib/query/createTableColumnsFromQuery'; -import { HTMLAttributes, memo, useCallback, useMemo } from 'react'; +import { memo, useCallback, useMemo } from 'react'; import { useSelector } from 'react-redux'; import { AppState } from 'store/reducers'; import { DataSource } from 'types/common/queryBuilder'; @@ -25,7 +24,7 @@ import { GlobalReducer } from 'types/reducer/globalTime'; import { TracesLoading } from '../TraceLoading/TraceLoading'; import { defaultSelectedColumns, PER_PAGE_OPTIONS } from './configs'; import { Container, ErrorText, tableStyles } from './styles'; -import { getListColumns, getTraceLink, transformDataWithDate } from './utils'; +import { getListColumns, transformDataWithDate } from './utils'; interface ListViewProps { isFilterApplied: boolean; @@ -108,21 +107,6 @@ function ListView({ isFilterApplied }: ListViewProps): JSX.Element { [queryTableData], ); - const handleRow = useCallback( - (record: RowData): HTMLAttributes => ({ - onClick: (event): void => { - event.preventDefault(); - event.stopPropagation(); - if (event.metaKey || event.ctrlKey) { - window.open(getTraceLink(record), '_blank'); - } else { - history.push(getTraceLink(record)); - } - }, - }), - [], - ); - const handleDragColumn = useCallback( (fromIndex: number, toIndex: number) => onDragColumns(columns, fromIndex, toIndex), @@ -169,7 +153,6 @@ function ListView({ isFilterApplied }: ListViewProps): JSX.Element { style={tableStyles} dataSource={transformedQueryTableData} columns={columns} - onRow={handleRow} onDragColumn={handleDragColumn} /> )} diff --git a/frontend/src/container/TracesExplorer/ListView/utils.tsx b/frontend/src/container/TracesExplorer/ListView/utils.tsx index a6201436d1..dc0e3808ae 100644 --- a/frontend/src/container/TracesExplorer/ListView/utils.tsx +++ b/frontend/src/container/TracesExplorer/ListView/utils.tsx @@ -47,11 +47,11 @@ export const getListColumns = ( key: 'date', title: 'Timestamp', width: 145, - render: (item): JSX.Element => { + render: (value, item): JSX.Element => { const date = - typeof item === 'string' - ? dayjs(item).format('YYYY-MM-DD HH:mm:ss.SSS') - : dayjs(item / 1e6).format('YYYY-MM-DD HH:mm:ss.SSS'); + typeof value === 'string' + ? dayjs(value).format('YYYY-MM-DD HH:mm:ss.SSS') + : dayjs(value / 1e6).format('YYYY-MM-DD HH:mm:ss.SSS'); return ( {date} @@ -67,10 +67,10 @@ export const getListColumns = ( dataIndex: key, key: `${key}-${dataType}-${type}`, width: 145, - render: (value): JSX.Element => { + render: (value, item): JSX.Element => { if (value === '') { return ( - + N/A ); @@ -78,7 +78,7 @@ export const getListColumns = ( if (key === 'httpMethod' || key === 'responseStatusCode') { return ( - + {value} @@ -88,14 +88,14 @@ export const getListColumns = ( if (key === 'durationNano') { return ( - + {getMs(value)}ms ); } return ( - + {value} ); From 44a3469b9b974f188019ba4c37d2966452171371 Mon Sep 17 00:00:00 2001 From: Sudeep MP Date: Thu, 26 Sep 2024 16:14:34 +0100 Subject: [PATCH 11/50] =?UTF-8?q?style:=20enhance=20FAQ=20container=20styl?= =?UTF-8?q?ing=20and=20adjust=20layout=20for=20customer=20s=E2=80=A6=20(#5?= =?UTF-8?q?999)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * style: enhance FAQ container styling and adjust layout for customer stories fixed the button casing faq layout shift issue due to parent flex centered * style: add dark theme support to WorkspaceLocked styles * refactor: moved inline styles to class --- .../WorkspaceLocked.styles.scss | 29 +++++++++++++++++++ .../pages/WorkspaceLocked/WorkspaceLocked.tsx | 28 +++++++++++++----- 2 files changed, 50 insertions(+), 7 deletions(-) diff --git a/frontend/src/pages/WorkspaceLocked/WorkspaceLocked.styles.scss b/frontend/src/pages/WorkspaceLocked/WorkspaceLocked.styles.scss index 131601bfb0..d2317c8c68 100644 --- a/frontend/src/pages/WorkspaceLocked/WorkspaceLocked.styles.scss +++ b/frontend/src/pages/WorkspaceLocked/WorkspaceLocked.styles.scss @@ -1,4 +1,5 @@ $light-theme: 'lightMode'; +$dark-theme: 'darkMode'; @keyframes gradientFlow { 0% { @@ -147,6 +148,34 @@ $light-theme: 'lightMode'; animation: gradientFlow 24s ease infinite; margin-bottom: 18px; } + + &__faq-container { + width: 100%; + + .ant-collapse, + .ant-collapse-item, + .ant-collapse-content-active { + .#{$dark-theme} & { + border-color: var(--bg-slate-400); + } + } + } + + &__customer-stories { + &__left-container, + &__right-container { + display: flex; + flex-direction: column; + } + + &__left-container { + align-items: flex-end; + } + + &__right-container { + align-items: flex-start; + } + } } .contact-us { diff --git a/frontend/src/pages/WorkspaceLocked/WorkspaceLocked.tsx b/frontend/src/pages/WorkspaceLocked/WorkspaceLocked.tsx index 84d977ae81..052d8dcbc5 100644 --- a/frontend/src/pages/WorkspaceLocked/WorkspaceLocked.tsx +++ b/frontend/src/pages/WorkspaceLocked/WorkspaceLocked.tsx @@ -187,8 +187,18 @@ export default function WorkspaceBlocked(): JSX.Element { children: ( {/* #FIXME: please suggest if there is any better way to loop in different columns to get the masonry layout */} - {renderCustomerStories((index) => index % 2 === 0)} - {renderCustomerStories((index) => index % 2 !== 0)} + + {renderCustomerStories((index) => index % 2 === 0)} + + + {renderCustomerStories((index) => index % 2 !== 0)} + {isAdmin && ( @@ -218,8 +228,12 @@ export default function WorkspaceBlocked(): JSX.Element { label: t('faqs'), children: ( - - + + {isAdmin && ( @@ -340,9 +354,9 @@ export default function WorkspaceBlocked(): JSX.Element { )} - +
- +
)} From 9b42326f80d7e92a1486e7829524f5e2735b88af Mon Sep 17 00:00:00 2001 From: Sudeep MP Date: Thu, 26 Sep 2024 19:00:58 +0100 Subject: [PATCH 12/50] chore(trial end): analytics events added (#6048) --- .../WorkspaceLocked/CustomerStoryCard.tsx | 1 + .../pages/WorkspaceLocked/WorkspaceLocked.tsx | 36 ++++++++++++++++--- .../WorkspaceLocked/workspaceLocked.data.ts | 22 ++++++------ 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/frontend/src/pages/WorkspaceLocked/CustomerStoryCard.tsx b/frontend/src/pages/WorkspaceLocked/CustomerStoryCard.tsx index c22401f7c4..68df0f5d7c 100644 --- a/frontend/src/pages/WorkspaceLocked/CustomerStoryCard.tsx +++ b/frontend/src/pages/WorkspaceLocked/CustomerStoryCard.tsx @@ -32,4 +32,5 @@ function CustomerStoryCard({ ); } + export default CustomerStoryCard; diff --git a/frontend/src/pages/WorkspaceLocked/WorkspaceLocked.tsx b/frontend/src/pages/WorkspaceLocked/WorkspaceLocked.tsx index 052d8dcbc5..7b6b5af294 100644 --- a/frontend/src/pages/WorkspaceLocked/WorkspaceLocked.tsx +++ b/frontend/src/pages/WorkspaceLocked/WorkspaceLocked.tsx @@ -54,6 +54,23 @@ export default function WorkspaceBlocked(): JSX.Element { data: licensesData, } = useLicense(); + useEffect((): void => { + logEvent('Trial: Blocker Screen Viewed', {}); + }, []); + + const handleContactUsClick = (): void => { + logEvent('Trial: Contact Us CTA Clicked', {}); + }; + + const handleTabClick = (key: string): void => { + logEvent('Trial: Blocked Screen Tabs Clicked', { tabKey: key }); + }; + + const handleCollapseChange = (key: string | string[]): void => { + const lastKey = Array.isArray(key) ? key.slice(-1)[0] : key; + logEvent('Trial: Blocker Screen Tab FAQ Item Clicked', { panelKey: lastKey }); + }; + useEffect(() => { if (!isFetchingLicenseData) { const shouldBlockWorkspace = licensesData?.payload?.workSpaceBlock; @@ -135,7 +152,7 @@ export default function WorkspaceBlocked(): JSX.Element { const tabItems: TabsProps['items'] = [ { - key: '1', + key: 'whyChooseSignoz', label: t('whyChooseSignoz'), children: ( @@ -182,7 +199,7 @@ export default function WorkspaceBlocked(): JSX.Element { ), }, { - key: '2', + key: 'youAreInGoodCompany', label: t('youAreInGoodCompany'), children: ( @@ -224,7 +241,7 @@ export default function WorkspaceBlocked(): JSX.Element { // children: 'Our Pricing', // }, { - key: '4', + key: 'faqs', label: t('faqs'), children: ( @@ -234,7 +251,11 @@ export default function WorkspaceBlocked(): JSX.Element { direction="vertical" className="workspace-locked__faq-container" > - + {isAdmin && ( @@ -355,7 +377,11 @@ export default function WorkspaceBlocked(): JSX.Element { )}
- +
)} diff --git a/frontend/src/pages/WorkspaceLocked/workspaceLocked.data.ts b/frontend/src/pages/WorkspaceLocked/workspaceLocked.data.ts index 0f4d07b96e..bebcdaf64a 100644 --- a/frontend/src/pages/WorkspaceLocked/workspaceLocked.data.ts +++ b/frontend/src/pages/WorkspaceLocked/workspaceLocked.data.ts @@ -42,7 +42,7 @@ export const enterpriseGradeValuesData = [ export const customerStoriesData = [ { - key: 'c-story-1', + key: 'story-subomi-oluwalana', avatar: 'https://signoz.io/img/users/subomi-oluwalana.webp', personName: 'Subomi Oluwalana', role: 'Founder & CEO at Convoy', @@ -53,7 +53,7 @@ export const customerStoriesData = [ 'https://www.linkedin.com/feed/update/urn:li:activity:7212117589068591105/', }, { - key: 'c-story-2', + key: 'story-dhruv-garg', avatar: 'https://signoz.io/img/users/dhruv-garg.webp', personName: 'Dhruv Garg', role: 'Tech Lead at Nudge', @@ -64,7 +64,7 @@ export const customerStoriesData = [ 'https://www.linkedin.com/posts/dhruv-garg79_signoz-docker-kubernetes-activity-7205163679028240384-Otlb/', }, { - key: 'c-story-3', + key: 'story-vivek-bhakta', avatar: 'https://signoz.io/img/users/vivek-bhakta.webp', personName: 'Vivek Bhakta', role: 'CTO at Wombo AI', @@ -74,7 +74,7 @@ export const customerStoriesData = [ link: 'https://x.com/notorious_VB/status/1701773119696904242', }, { - key: 'c-story-4', + key: 'story-pranay-narang', avatar: 'https://signoz.io/img/users/pranay-narang.webp', personName: 'Pranay Narang', role: 'Engineering at Azodha', @@ -84,7 +84,7 @@ export const customerStoriesData = [ link: 'https://x.com/PranayNarang/status/1676247073396752387', }, { - key: 'c-story-4', + key: 'story-Sheheryar-Sewani', avatar: 'https://signoz.io/img/users/shey.webp', personName: 'Sheheryar Sewani', role: 'Seasoned Rails Dev & Founder', @@ -95,7 +95,7 @@ export const customerStoriesData = [ 'https://www.linkedin.com/feed/update/urn:li:activity:7181011853915926528/', }, { - key: 'c-story-5', + key: 'story-daniel-schell', avatar: 'https://signoz.io/img/users/daniel.webp', personName: 'Daniel Schell', role: 'Founder & CTO at Airlockdigital', @@ -115,7 +115,7 @@ export const customerStoriesData = [ link: 'https://x.com/gofrendiasgard/status/1680139003658641408', }, { - key: 'c-story-7', + key: 'story-anselm-eickhoff', avatar: 'https://signoz.io/img/users/anselm.jpg', personName: 'Anselm Eickhoff', role: 'Software Architect', @@ -129,26 +129,26 @@ export const customerStoriesData = [ export const faqData = [ { - key: '1', + key: 'signoz-cloud-vs-community', label: 'What is the difference between SigNoz Cloud(Teams) and Community Edition?', children: 'You can self-host and manage the community edition yourself. You should choose SigNoz Cloud if you don’t want to worry about managing the SigNoz cluster. There are some exclusive features like SSO & SAML support, which come with SigNoz cloud offering. Our team also offers support on the initial configuration of dashboards & alerts and advises on best practices for setting up your observability stack in the SigNoz cloud offering.', }, { - key: '2', + key: 'calc-for-metrics', label: 'How are number of samples calculated for metrics pricing?', children: "If a timeseries sends data every 30s, then it will generate 2 samples per min. So, if you have 10,000 time series sending data every 30s then you will be sending 20,000 samples per min to SigNoz. This will be around 864 mn samples per month and would cost 86.4 USD/month. Here's an explainer video on how metrics pricing is calculated - Link: https://vimeo.com/973012522", }, { - key: '3', + key: 'enterprise-support-plans', label: 'Do you offer enterprise support plans?', children: 'Yes, feel free to reach out to us on hello@signoz.io if you need a dedicated support plan or paid support for setting up your initial SigNoz setup.', }, { - key: '4', + key: 'who-should-use-enterprise-plans', label: 'Who should use Enterprise plans?', children: 'Teams which need enterprise support or features like SSO, Audit logs, etc. may find our enterprise plans valuable.', From 88ace79a644a12a3b32684c524ec81eca1cb137f Mon Sep 17 00:00:00 2001 From: rahulkeswani101 Date: Fri, 27 Sep 2024 00:22:42 +0530 Subject: [PATCH 13/50] feat: added meta tag to prevent page indexing (#5793) * feat: added meta tag to prevent page indexing * chore: revert to previous version --------- Co-authored-by: Pranay Prateek --- frontend/src/index.html.ejs | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/index.html.ejs b/frontend/src/index.html.ejs index f77e50f2b2..d08079587b 100644 --- a/frontend/src/index.html.ejs +++ b/frontend/src/index.html.ejs @@ -49,6 +49,7 @@ /> + From e4d1452f5ff63483b95c913cae37442b286e9aae Mon Sep 17 00:00:00 2001 From: Raj Kamal Singh <1133322+raj-k-singh@users.noreply.github.com> Date: Fri, 27 Sep 2024 10:40:02 +0530 Subject: [PATCH 14/50] Feat: use new logspipelineprocessor for generating logs pipeline collector conf (#6080) * chore: update logs pipeline prefix for generated collector config * chore: some cleanup * chore: some more cleanup * chore: some more cleanup --- .../logparsingpipeline/collector_config.go | 67 +++++++++++-------- .../collector_config_test.go | 4 +- .../app/logparsingpipeline/preview.go | 4 +- pkg/query-service/constants/constants.go | 4 +- 4 files changed, 46 insertions(+), 33 deletions(-) diff --git a/pkg/query-service/app/logparsingpipeline/collector_config.go b/pkg/query-service/app/logparsingpipeline/collector_config.go index 49f697fbd3..4b8da7b18a 100644 --- a/pkg/query-service/app/logparsingpipeline/collector_config.go +++ b/pkg/query-service/app/logparsingpipeline/collector_config.go @@ -19,24 +19,28 @@ var lockLogsPipelineSpec sync.RWMutex // check if the processors already exist // if yes then update the processor. // if something doesn't exists then remove it. -func buildLogParsingProcessors(agentConf, parsingProcessors map[string]interface{}) error { +func updateProcessorConfigsInCollectorConf( + collectorConf map[string]interface{}, + signozPipelineProcessors map[string]interface{}, +) error { agentProcessors := map[string]interface{}{} - if agentConf["processors"] != nil { - agentProcessors = (agentConf["processors"]).(map[string]interface{}) + if collectorConf["processors"] != nil { + agentProcessors = (collectorConf["processors"]).(map[string]interface{}) } exists := map[string]struct{}{} - for key, params := range parsingProcessors { + for key, params := range signozPipelineProcessors { agentProcessors[key] = params exists[key] = struct{}{} } - // remove the old unwanted processors + // remove the old unwanted pipeline processors for k := range agentProcessors { - if _, ok := exists[k]; !ok && strings.HasPrefix(k, constants.LogsPPLPfx) { + _, isInDesiredPipelineProcs := exists[k] + if hasSignozPipelineProcessorPrefix(k) && !isInDesiredPipelineProcs { delete(agentProcessors, k) } } - agentConf["processors"] = agentProcessors + collectorConf["processors"] = agentProcessors return nil } @@ -65,21 +69,24 @@ func getOtelPipelineFromConfig(config map[string]interface{}) (*otelPipeline, er return &p, nil } -func buildLogsProcessors(current []string, logsParserPipeline []string) ([]string, error) { +func buildCollectorPipelineProcessorsList( + currentCollectorProcessors []string, + signozPipelineProcessorNames []string, +) ([]string, error) { lockLogsPipelineSpec.Lock() defer lockLogsPipelineSpec.Unlock() exists := map[string]struct{}{} - for _, v := range logsParserPipeline { + for _, v := range signozPipelineProcessorNames { exists[v] = struct{}{} } // removed the old processors which are not used var pipeline []string - for _, v := range current { - k := v - if _, ok := exists[k]; ok || !strings.HasPrefix(k, constants.LogsPPLPfx) { - pipeline = append(pipeline, v) + for _, procName := range currentCollectorProcessors { + _, isInDesiredPipelineProcs := exists[procName] + if isInDesiredPipelineProcs || !hasSignozPipelineProcessorPrefix(procName) { + pipeline = append(pipeline, procName) } } @@ -96,7 +103,7 @@ func buildLogsProcessors(current []string, logsParserPipeline []string) ([]strin existingVsSpec := map[int]int{} // go through plan and map its elements to current positions in effective config - for i, m := range logsParserPipeline { + for i, m := range signozPipelineProcessorNames { if loc, ok := existing[m]; ok { specVsExistingMap[i] = loc existingVsSpec[loc] = i @@ -106,11 +113,11 @@ func buildLogsProcessors(current []string, logsParserPipeline []string) ([]strin lastMatched := 0 newPipeline := []string{} - for i := 0; i < len(logsParserPipeline); i++ { - m := logsParserPipeline[i] + for i := 0; i < len(signozPipelineProcessorNames); i++ { + m := signozPipelineProcessorNames[i] if loc, ok := specVsExistingMap[i]; ok { for j := lastMatched; j < loc; j++ { - if strings.HasPrefix(pipeline[j], constants.LogsPPLPfx) { + if hasSignozPipelineProcessorPrefix(pipeline[j]) { delete(specVsExistingMap, existingVsSpec[j]) } else { newPipeline = append(newPipeline, pipeline[j]) @@ -159,13 +166,13 @@ func GenerateCollectorConfigWithPipelines( config []byte, pipelines []Pipeline, ) ([]byte, *coreModel.ApiError) { - var c map[string]interface{} - err := yaml.Unmarshal([]byte(config), &c) + var collectorConf map[string]interface{} + err := yaml.Unmarshal([]byte(config), &collectorConf) if err != nil { return nil, coreModel.BadRequest(err) } - processors, procNames, err := PreparePipelineProcessor(pipelines) + signozPipelineProcessors, signozPipelineProcNames, err := PreparePipelineProcessor(pipelines) if err != nil { return nil, coreModel.BadRequest(errors.Wrap( err, "could not prepare otel collector processors for log pipelines", @@ -174,8 +181,8 @@ func GenerateCollectorConfigWithPipelines( // Escape any `$`s as `$$` in config generated for pipelines, to ensure any occurrences // like $data do not end up being treated as env vars when loading collector config. - for _, procName := range procNames { - procConf := processors[procName] + for _, procName := range signozPipelineProcNames { + procConf := signozPipelineProcessors[procName] serializedProcConf, err := yaml.Marshal(procConf) if err != nil { return nil, coreModel.InternalError(fmt.Errorf( @@ -194,14 +201,14 @@ func GenerateCollectorConfigWithPipelines( )) } - processors[procName] = escapedConf + signozPipelineProcessors[procName] = escapedConf } // Add processors to unmarshaled collector config `c` - buildLogParsingProcessors(c, processors) + updateProcessorConfigsInCollectorConf(collectorConf, signozPipelineProcessors) // build the new processor list in service.pipelines.logs - p, err := getOtelPipelineFromConfig(c) + p, err := getOtelPipelineFromConfig(collectorConf) if err != nil { return nil, coreModel.BadRequest(err) } @@ -211,16 +218,20 @@ func GenerateCollectorConfigWithPipelines( )) } - updatedProcessorList, _ := buildLogsProcessors(p.Pipelines.Logs.Processors, procNames) + updatedProcessorList, _ := buildCollectorPipelineProcessorsList(p.Pipelines.Logs.Processors, signozPipelineProcNames) p.Pipelines.Logs.Processors = updatedProcessorList // add the new processor to the data ( no checks required as the keys will exists) - c["service"].(map[string]interface{})["pipelines"].(map[string]interface{})["logs"] = p.Pipelines.Logs + collectorConf["service"].(map[string]interface{})["pipelines"].(map[string]interface{})["logs"] = p.Pipelines.Logs - updatedConf, err := yaml.Marshal(c) + updatedConf, err := yaml.Marshal(collectorConf) if err != nil { return nil, coreModel.BadRequest(err) } return updatedConf, nil } + +func hasSignozPipelineProcessorPrefix(procName string) bool { + return strings.HasPrefix(procName, constants.LogsPPLPfx) || strings.HasPrefix(procName, constants.OldLogsPPLPfx) +} diff --git a/pkg/query-service/app/logparsingpipeline/collector_config_test.go b/pkg/query-service/app/logparsingpipeline/collector_config_test.go index f5ba7a352b..2f2d898416 100644 --- a/pkg/query-service/app/logparsingpipeline/collector_config_test.go +++ b/pkg/query-service/app/logparsingpipeline/collector_config_test.go @@ -94,7 +94,7 @@ var buildProcessorTestData = []struct { func TestBuildLogParsingProcessors(t *testing.T) { for _, test := range buildProcessorTestData { Convey(test.Name, t, func() { - err := buildLogParsingProcessors(test.agentConf, test.pipelineProcessor) + err := updateProcessorConfigsInCollectorConf(test.agentConf, test.pipelineProcessor) So(err, ShouldBeNil) So(test.agentConf, ShouldResemble, test.outputConf) }) @@ -200,7 +200,7 @@ var BuildLogsPipelineTestData = []struct { func TestBuildLogsPipeline(t *testing.T) { for _, test := range BuildLogsPipelineTestData { Convey(test.Name, t, func() { - v, err := buildLogsProcessors(test.currentPipeline, test.logsPipeline) + v, err := buildCollectorPipelineProcessorsList(test.currentPipeline, test.logsPipeline) So(err, ShouldBeNil) fmt.Println(test.Name, "\n", test.currentPipeline, "\n", v, "\n", test.expectedPipeline) So(v, ShouldResemble, test.expectedPipeline) diff --git a/pkg/query-service/app/logparsingpipeline/preview.go b/pkg/query-service/app/logparsingpipeline/preview.go index b37295eb96..548c1ee2f5 100644 --- a/pkg/query-service/app/logparsingpipeline/preview.go +++ b/pkg/query-service/app/logparsingpipeline/preview.go @@ -7,7 +7,7 @@ import ( "time" _ "github.com/SigNoz/signoz-otel-collector/pkg/parser/grok" - "github.com/open-telemetry/opentelemetry-collector-contrib/processor/logstransformprocessor" + "github.com/SigNoz/signoz-otel-collector/processor/signozlogspipelineprocessor" "github.com/pkg/errors" "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/plog" @@ -42,7 +42,7 @@ func SimulatePipelinesProcessing( simulatorInputPLogs := SignozLogsToPLogs(logs) processorFactories, err := processor.MakeFactoryMap( - logstransformprocessor.NewFactory(), + signozlogspipelineprocessor.NewFactory(), ) if err != nil { return nil, nil, model.InternalError(errors.Wrap( diff --git a/pkg/query-service/constants/constants.go b/pkg/query-service/constants/constants.go index 78ee31e1a1..541d46d5ca 100644 --- a/pkg/query-service/constants/constants.go +++ b/pkg/query-service/constants/constants.go @@ -341,7 +341,9 @@ var ReservedColumnTargetAliases = map[string]struct{}{ } // logsPPLPfx is a short constant for logsPipelinePrefix -const LogsPPLPfx = "logstransform/pipeline_" +// TODO(Raj): Remove old prefix after new processor based pipelines have been rolled out +const LogsPPLPfx = "signozlogspipeline/pipeline_" +const OldLogsPPLPfx = "logstransform/pipeline_" const IntegrationPipelineIdPrefix = "integration" From 717545e14c06195e497411314b1f80a938f87867 Mon Sep 17 00:00:00 2001 From: Yunus M Date: Fri, 27 Sep 2024 12:08:25 +0530 Subject: [PATCH 15/50] feat: remove sidebar dock option (#6083) * feat: remove sidebar doc option * feat: remove all references of sidebar collapse --- frontend/src/constants/app.ts | 1 - .../constants/shortcuts/globalShortcuts.ts | 6 -- .../container/AppLayout/AppLayout.styles.scss | 6 -- frontend/src/container/AppLayout/index.tsx | 62 ++-------------- .../src/container/SideNav/SideNav.styles.scss | 37 ---------- frontend/src/container/SideNav/SideNav.tsx | 37 ++-------- .../TracesExplorer/TracesExplorer.styles.scss | 1 + frontend/src/store/actions/app/index.ts | 1 - .../src/store/actions/app/sideBarCollapse.ts | 16 ----- frontend/src/store/actions/index.ts | 1 - frontend/src/store/reducers/app.ts | 10 --- frontend/src/types/actions/app.ts | 6 -- frontend/src/types/reducer/app.ts | 1 - frontend/tests/auth.json | 70 +++++++++---------- 14 files changed, 43 insertions(+), 212 deletions(-) delete mode 100644 frontend/src/store/actions/app/index.ts delete mode 100644 frontend/src/store/actions/app/sideBarCollapse.ts diff --git a/frontend/src/constants/app.ts b/frontend/src/constants/app.ts index d260806856..c82e2a34e8 100644 --- a/frontend/src/constants/app.ts +++ b/frontend/src/constants/app.ts @@ -6,7 +6,6 @@ export const AUTH0_REDIRECT_PATH = '/redirect'; export const DEFAULT_AUTH0_APP_REDIRECTION_PATH = ROUTES.APPLICATION; -export const IS_SIDEBAR_COLLAPSED = 'isSideBarCollapsed'; export const INVITE_MEMBERS_HASH = '#invite-team-members'; export const SIGNOZ_UPGRADE_PLAN_URL = diff --git a/frontend/src/constants/shortcuts/globalShortcuts.ts b/frontend/src/constants/shortcuts/globalShortcuts.ts index 4ab7752fac..8b68b7195e 100644 --- a/frontend/src/constants/shortcuts/globalShortcuts.ts +++ b/frontend/src/constants/shortcuts/globalShortcuts.ts @@ -1,8 +1,4 @@ -import { getUserOperatingSystem, UserOperatingSystem } from 'utils/getUserOS'; - -const userOS = getUserOperatingSystem(); export const GlobalShortcuts = { - SidebarCollapse: '\\+meta', NavigateToServices: 's+shift', NavigateToTraces: 't+shift', NavigateToLogs: 'l+shift', @@ -13,7 +9,6 @@ export const GlobalShortcuts = { }; export const GlobalShortcutsName = { - SidebarCollapse: `${userOS === UserOperatingSystem.MACOS ? 'cmd' : 'ctrl'}+\\`, NavigateToServices: 'shift+s', NavigateToTraces: 'shift+t', NavigateToLogs: 'shift+l', @@ -24,7 +19,6 @@ export const GlobalShortcutsName = { }; export const GlobalShortcutsDescription = { - SidebarCollapse: 'Collpase the sidebar', NavigateToServices: 'Navigate to Services page', NavigateToTraces: 'Navigate to Traces page', NavigateToLogs: 'Navigate to logs page', diff --git a/frontend/src/container/AppLayout/AppLayout.styles.scss b/frontend/src/container/AppLayout/AppLayout.styles.scss index 2ae1531c79..a991f08351 100644 --- a/frontend/src/container/AppLayout/AppLayout.styles.scss +++ b/frontend/src/container/AppLayout/AppLayout.styles.scss @@ -16,12 +16,6 @@ width: 100%; } } - - &.docked { - .app-content { - width: calc(100% - 240px); - } - } } .chat-support-gateway { diff --git a/frontend/src/container/AppLayout/index.tsx b/frontend/src/container/AppLayout/index.tsx index 4cf2e0f5bb..4f5a3c43d7 100644 --- a/frontend/src/container/AppLayout/index.tsx +++ b/frontend/src/container/AppLayout/index.tsx @@ -5,13 +5,11 @@ import './AppLayout.styles.scss'; import * as Sentry from '@sentry/react'; import { Flex } from 'antd'; -import getLocalStorageKey from 'api/browser/localstorage/get'; import getUserLatestVersion from 'api/user/getLatestVersion'; import getUserVersion from 'api/user/getVersion'; import cx from 'classnames'; import ChatSupportGateway from 'components/ChatSupportGateway/ChatSupportGateway'; import OverlayScrollbar from 'components/OverlayScrollbar/OverlayScrollbar'; -import { IS_SIDEBAR_COLLAPSED } from 'constants/app'; import { FeatureKeys } from 'constants/features'; import ROUTES from 'constants/routes'; import SideNav from 'container/SideNav'; @@ -22,22 +20,13 @@ import useLicense from 'hooks/useLicense'; import { useNotifications } from 'hooks/useNotifications'; import history from 'lib/history'; import ErrorBoundaryFallback from 'pages/ErrorBoundaryFallback/ErrorBoundaryFallback'; -import { - ReactNode, - useCallback, - useEffect, - useLayoutEffect, - useMemo, - useRef, - useState, -} from 'react'; +import { ReactNode, useEffect, useMemo, useRef, useState } from 'react'; import { Helmet } from 'react-helmet-async'; import { useTranslation } from 'react-i18next'; import { useQueries } from 'react-query'; import { useDispatch, useSelector } from 'react-redux'; import { useLocation } from 'react-router-dom'; import { Dispatch } from 'redux'; -import { sideBarCollapse } from 'store/actions'; import { AppState } from 'store/reducers'; import AppActions from 'types/actions'; import { @@ -59,10 +48,6 @@ function AppLayout(props: AppLayoutProps): JSX.Element { (state) => state.app, ); - const [collapsed, setCollapsed] = useState( - getLocalStorageKey(IS_SIDEBAR_COLLAPSED) === 'true', - ); - const { notifications } = useNotifications(); const isDarkMode = useIsDarkMode(); @@ -117,14 +102,6 @@ function AppLayout(props: AppLayoutProps): JSX.Element { const latestCurrentCounter = useRef(0); const latestVersionCounter = useRef(0); - const onCollapse = useCallback(() => { - setCollapsed((collapsed) => !collapsed); - }, []); - - useLayoutEffect(() => { - dispatch(sideBarCollapse(collapsed)); - }, [collapsed, dispatch]); - useEffect(() => { if ( getUserLatestVersionResponse.isFetched && @@ -279,23 +256,8 @@ function AppLayout(props: AppLayoutProps): JSX.Element { } }, [isDarkMode]); - const isSideNavCollapsed = getLocalStorageKey(IS_SIDEBAR_COLLAPSED); - - /** - * Note: Right now we don't have a page-level method to pass the sidebar collapse state. - * Since the use case for overriding is not widely needed, we are setting it here - * so that the workspace locked page will have an expanded sidebar regardless of how users - * have set it or what is stored in localStorage. This will not affect the localStorage config. - */ - const isWorkspaceLocked = pathname === ROUTES.WORKSPACE_LOCKED; - return ( - + {pageTitle} @@ -321,25 +283,11 @@ function AppLayout(props: AppLayoutProps): JSX.Element { )} - + {isToDisplayLayout && !renderFullScreen && ( - + )} -
+
}> diff --git a/frontend/src/container/SideNav/SideNav.styles.scss b/frontend/src/container/SideNav/SideNav.styles.scss index 2f5167f104..1a148e2469 100644 --- a/frontend/src/container/SideNav/SideNav.styles.scss +++ b/frontend/src/container/SideNav/SideNav.styles.scss @@ -3,10 +3,6 @@ height: 100%; position: relative; z-index: 1; - - &.docked { - width: 240px; - } } .sideNav { @@ -229,39 +225,6 @@ display: block; } } - - &.docked { - flex: 0 0 240px; - max-width: 240px; - min-width: 240px; - width: 240px; - - .secondary-nav-items { - width: 240px; - } - - .brand { - justify-content: space-between; - } - - .get-started-nav-items { - .get-started-btn { - justify-content: flex-start; - } - } - - .collapse-expand-handlers { - display: block; - } - - .nav-item-label { - display: block; - } - - .nav-item-beta { - display: block; - } - } } .lightMode { diff --git a/frontend/src/container/SideNav/SideNav.tsx b/frontend/src/container/SideNav/SideNav.tsx index 1ba863d8ec..16787bc3d8 100644 --- a/frontend/src/container/SideNav/SideNav.tsx +++ b/frontend/src/container/SideNav/SideNav.tsx @@ -3,7 +3,7 @@ import './SideNav.styles.scss'; import { Color } from '@signozhq/design-tokens'; -import { Button, Tooltip } from 'antd'; +import { Button } from 'antd'; import logEvent from 'api/common/logEvent'; import cx from 'classnames'; import { FeatureKeys } from 'constants/features'; @@ -16,9 +16,6 @@ import history from 'lib/history'; import { AlertTriangle, CheckSquare, - ChevronLeftCircle, - ChevronRightCircle, - PanelRight, RocketIcon, UserCircle, } from 'lucide-react'; @@ -55,13 +52,9 @@ interface UserManagementMenuItems { function SideNav({ licenseData, isFetching, - onCollapse, - collapsed, }: { licenseData: any; isFetching: boolean; - onCollapse: () => void; - collapsed: boolean; }): JSX.Element { const [menuItems, setMenuItems] = useState(defaultMenuItems); @@ -330,8 +323,6 @@ function SideNav({ }; useEffect(() => { - registerShortcut(GlobalShortcuts.SidebarCollapse, onCollapse); - registerShortcut(GlobalShortcuts.NavigateToServices, () => onClickHandler(ROUTES.APPLICATION, null), ); @@ -359,7 +350,6 @@ function SideNav({ ); return (): void => { - deregisterShortcut(GlobalShortcuts.SidebarCollapse); deregisterShortcut(GlobalShortcuts.NavigateToServices); deregisterShortcut(GlobalShortcuts.NavigateToTraces); deregisterShortcut(GlobalShortcuts.NavigateToLogs); @@ -368,11 +358,11 @@ function SideNav({ deregisterShortcut(GlobalShortcuts.NavigateToExceptions); deregisterShortcut(GlobalShortcuts.NavigateToMessagingQueues); }; - }, [deregisterShortcut, onClickHandler, onCollapse, registerShortcut]); + }, [deregisterShortcut, onClickHandler, registerShortcut]); return ( -
-
+
+
{licenseTag}
)}
- - -
{isCloudUserVal && ( @@ -504,14 +483,6 @@ function SideNav({ }} /> )} - -
- {collapsed ? ( - - ) : ( - - )} -
diff --git a/frontend/src/pages/TracesExplorer/TracesExplorer.styles.scss b/frontend/src/pages/TracesExplorer/TracesExplorer.styles.scss index cf6eb52b10..4323f901d5 100644 --- a/frontend/src/pages/TracesExplorer/TracesExplorer.styles.scss +++ b/frontend/src/pages/TracesExplorer/TracesExplorer.styles.scss @@ -1,6 +1,7 @@ .trace-explorer-header { display: flex; justify-content: space-between; + align-items: center; .trace-explorer-run-query { display: flex; diff --git a/frontend/src/store/actions/app/index.ts b/frontend/src/store/actions/app/index.ts deleted file mode 100644 index cb2a26f9e6..0000000000 --- a/frontend/src/store/actions/app/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './sideBarCollapse'; diff --git a/frontend/src/store/actions/app/sideBarCollapse.ts b/frontend/src/store/actions/app/sideBarCollapse.ts deleted file mode 100644 index c99d79b6fb..0000000000 --- a/frontend/src/store/actions/app/sideBarCollapse.ts +++ /dev/null @@ -1,16 +0,0 @@ -import setLocalStorageKey from 'api/browser/localstorage/set'; -import { IS_SIDEBAR_COLLAPSED } from 'constants/app'; -import { Dispatch } from 'redux'; -import AppActions from 'types/actions'; - -export const sideBarCollapse = ( - collapseState: boolean, -): ((dispatch: Dispatch) => void) => { - setLocalStorageKey(IS_SIDEBAR_COLLAPSED, `${collapseState}`); - return (dispatch: Dispatch): void => { - dispatch({ - type: 'SIDEBAR_COLLAPSE', - payload: collapseState, - }); - }; -}; diff --git a/frontend/src/store/actions/index.ts b/frontend/src/store/actions/index.ts index 3074cdb3a2..f50fb7477c 100644 --- a/frontend/src/store/actions/index.ts +++ b/frontend/src/store/actions/index.ts @@ -1,4 +1,3 @@ -export * from './app'; export * from './global'; export * from './metrics'; export * from './serviceMap'; diff --git a/frontend/src/store/reducers/app.ts b/frontend/src/store/reducers/app.ts index 4db3965cad..bdb80d2565 100644 --- a/frontend/src/store/reducers/app.ts +++ b/frontend/src/store/reducers/app.ts @@ -1,11 +1,9 @@ import getLocalStorageKey from 'api/browser/localstorage/get'; -import { IS_SIDEBAR_COLLAPSED } from 'constants/app'; import { LOCALSTORAGE } from 'constants/localStorage'; import { getInitialUserTokenRefreshToken } from 'store/utils'; import { AppAction, LOGGED_IN, - SIDEBAR_COLLAPSE, UPDATE_CONFIGS, UPDATE_CURRENT_ERROR, UPDATE_CURRENT_VERSION, @@ -44,7 +42,6 @@ const getInitialUser = (): User | null => { const InitialValue: InitialValueTypes = { isLoggedIn: getLocalStorageKey(LOCALSTORAGE.IS_LOGGED_IN) === 'true', - isSideBarCollapsed: getLocalStorageKey(IS_SIDEBAR_COLLAPSED) === 'true', currentVersion: '', latestVersion: '', featureResponse: { @@ -76,13 +73,6 @@ const appReducer = ( }; } - case SIDEBAR_COLLAPSE: { - return { - ...state, - isSideBarCollapsed: action.payload, - }; - } - case UPDATE_FEATURE_FLAG_RESPONSE: { return { ...state, diff --git a/frontend/src/types/actions/app.ts b/frontend/src/types/actions/app.ts index 78a5da72ad..54b1992af2 100644 --- a/frontend/src/types/actions/app.ts +++ b/frontend/src/types/actions/app.ts @@ -34,11 +34,6 @@ export interface LoggedInUser { }; } -export interface SideBarCollapse { - type: typeof SIDEBAR_COLLAPSE; - payload: boolean; -} - export interface UpdateAppVersion { type: typeof UPDATE_CURRENT_VERSION; payload: { @@ -137,7 +132,6 @@ export interface UpdateFeatureFlag { export type AppAction = | LoggedInUser - | SideBarCollapse | UpdateAppVersion | UpdateLatestVersion | UpdateVersionError diff --git a/frontend/src/types/reducer/app.ts b/frontend/src/types/reducer/app.ts index 545cff7156..c51defcfb0 100644 --- a/frontend/src/types/reducer/app.ts +++ b/frontend/src/types/reducer/app.ts @@ -17,7 +17,6 @@ export interface User { export default interface AppReducer { isLoggedIn: boolean; - isSideBarCollapsed: boolean; currentVersion: string; latestVersion: string; isCurrentVersionError: boolean; diff --git a/frontend/tests/auth.json b/frontend/tests/auth.json index 2dd3d40466..0de47618ab 100644 --- a/frontend/tests/auth.json +++ b/frontend/tests/auth.json @@ -1,38 +1,34 @@ { - "cookies": [], - "origins": [ - { - "origin": "http://localhost:3301", - "localStorage": [ - { - "name": "isSideBarCollapsed", - "value": "false" - }, - { - "name": "metricsTimeDurations", - "value": "{}" - }, - { - "name": "i18nextLng", - "value": "en-US" - }, - { - "name": "reactQueryDevtoolsSortFn", - "value": "\"Status > Last Updated\"" - }, - { - "name": "AUTH_TOKEN", - "value": "authtoken" - }, - { - "name": "IS_LOGGED_IN", - "value": "true" - }, - { - "name": "REFRESH_AUTH_TOKEN", - "value": "refreshJwt" - } - ] - } - ] -} \ No newline at end of file + "cookies": [], + "origins": [ + { + "origin": "http://localhost:3301", + "localStorage": [ + { + "name": "metricsTimeDurations", + "value": "{}" + }, + { + "name": "i18nextLng", + "value": "en-US" + }, + { + "name": "reactQueryDevtoolsSortFn", + "value": "\"Status > Last Updated\"" + }, + { + "name": "AUTH_TOKEN", + "value": "authtoken" + }, + { + "name": "IS_LOGGED_IN", + "value": "true" + }, + { + "name": "REFRESH_AUTH_TOKEN", + "value": "refreshJwt" + } + ] + } + ] +} From 4c95df44d5f0edeb48d449778b1c065416465cc6 Mon Sep 17 00:00:00 2001 From: Vishal Sharma Date: Fri, 27 Sep 2024 18:20:17 +0530 Subject: [PATCH 16/50] chore: update trial end workspace event (#6088) --- frontend/src/pages/WorkspaceLocked/WorkspaceLocked.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/frontend/src/pages/WorkspaceLocked/WorkspaceLocked.tsx b/frontend/src/pages/WorkspaceLocked/WorkspaceLocked.tsx index 7b6b5af294..602e666137 100644 --- a/frontend/src/pages/WorkspaceLocked/WorkspaceLocked.tsx +++ b/frontend/src/pages/WorkspaceLocked/WorkspaceLocked.tsx @@ -55,20 +55,22 @@ export default function WorkspaceBlocked(): JSX.Element { } = useLicense(); useEffect((): void => { - logEvent('Trial: Blocker Screen Viewed', {}); + logEvent('Workspace Blocked: Screen Viewed', {}); }, []); const handleContactUsClick = (): void => { - logEvent('Trial: Contact Us CTA Clicked', {}); + logEvent('Workspace Blocked: Contact Us Clicked', {}); }; const handleTabClick = (key: string): void => { - logEvent('Trial: Blocked Screen Tabs Clicked', { tabKey: key }); + logEvent('Workspace Blocked: Screen Tabs Clicked', { tabKey: key }); }; const handleCollapseChange = (key: string | string[]): void => { const lastKey = Array.isArray(key) ? key.slice(-1)[0] : key; - logEvent('Trial: Blocker Screen Tab FAQ Item Clicked', { panelKey: lastKey }); + logEvent('Workspace Blocked: Screen Tab FAQ Item Clicked', { + panelKey: lastKey, + }); }; useEffect(() => { From 794d6fc0cae6bc887935f8657f42f6471dc59c15 Mon Sep 17 00:00:00 2001 From: rahulkeswani101 Date: Mon, 30 Sep 2024 11:30:41 +0530 Subject: [PATCH 17/50] feat: added a new logo for sidebar and login page (#6005) * feat: added a new logo for sidebar and login page * chore: removed the signoz-signup.svg * feat: updated the svg * feat: updated the svg --- frontend/public/Logos/signoz-brand-logo.svg | 18 +++++++----------- frontend/public/favicon.ico | Bin 2218 -> 12870 bytes frontend/public/signoz-signup.svg | 9 --------- .../components/WelcomeLeftContainer/index.tsx | 2 +- 4 files changed, 8 insertions(+), 21 deletions(-) delete mode 100644 frontend/public/signoz-signup.svg diff --git a/frontend/public/Logos/signoz-brand-logo.svg b/frontend/public/Logos/signoz-brand-logo.svg index aaa8a77669..a9cce28993 100644 --- a/frontend/public/Logos/signoz-brand-logo.svg +++ b/frontend/public/Logos/signoz-brand-logo.svg @@ -1,11 +1,7 @@ - - - - - - - - - - - + + + + + + + diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico index 98a6d5f7dc1fa355104d4436132c1df3c5c6d61f..b83e8b561082fe946c7424cecd6babbd0b87b74a 100644 GIT binary patch literal 12870 zcmV-MGP%u(P)l!r*1ZzT8_xCUt78ep7J2ME5#2cX!kjo@^P&WH+%;%AQ!+E48n zP|@jb6&t6={zyQ3Y;6dR_NYW9j?w~tUmG+b;h9Tv^S)=Vsaoq_t7_kSu7c46C+D?y z?W*tqCvlTEmf?|Oda19l?RN>gMCUKRukSorAX+MfUp)yP06j~GS zohwjVg_itB>h!EoP|?4>5$}2E9p4GQ;nMC@HpZK!>sB8`w1(HOpQ4BPcvuQ4irAUb zTXU~3QftT8F0#^}=z4;zIW8dTB__rYmn1d;a5c+#Z{`h2n+o*nxQI1rE%uLBRfcuA zA_SeZ!%U!T$}yLs@GkuBo}`{j&@iRB%8K{!+;Xr`3^V`uQ2u50favlA*RS6|`>T+h zlap^9F~2__xKz6YXwmnjw+u^D%MULwv*&8Ogkyw5m-Y_>64*yb;YB7~SA@4xhMa1v zF4Sfy@DEcCH=x#h;ceqWP)1dy4Gaefn~BBnSQVkCc}GnshJG#NVc7ZYUHSR`3}>IG z-&P^hlan9MFK_MHHb!R(0A4e?rhV#6VBB~~052MGglUdx90E$KBWWP3eo>9u5T2OY z)_QOgUzm_1lGWd#3|Az)r3*uEp{nOWrf3YHm}m|($;{UDOw@R@D)^IGDQ}}kqL2bn zJD9J_Z&&tBiQIbO*Kl|hvWue%z2^}eUJ!<80+)cI@UU4u3uTObG&V@mKd?GgD1m34 z3ihDZ-RUcf)UFv|WL zUr+U~zf02&H3k*$^_rcN5w6A~7^i>7xQ-)&l(8gWUVhE}lsZ;u)2~5J=2V)KL!#@( z$$pMP08^6zw}2(vaT;oAAsD5ajK?c#U)-jr{OWK|G@gt)?7(MjSv33xVM;Bl|QHpQzr=5iQ|M>lc( z<58Mg30e0ZJrABUzo=KtD*hB|X} zOb|-~=2|w(Ex`rJsKcE#Na?X)55pW{s?5xe>(B~L>Y8J91ZF!1KTR;_4sis|q1FUD zGO(#cgKH>wdyXleX!>T4lH_GJwKgAkjH6`7O$G&Pg2nXnjRXOC;s(Wpm0?It2HbLSDX9vRet>V)(n}OwF?xnGi>^s85jh!<;mivJ0A0g% zgoAwr@*`h?b-9?Q_K7^v<4Hi)i0FO!$YVN3K#Lo2;VKtyT(n|0>|YgO@6CnHJc@$^ zB(yQ5V!w^5i4T_Bu*V_}NGiW2jlEQ$&c0)VC$wqM!`7c

H?^HyH1+0#K?Q_5Rkr zaD_sRo9I{q7inONtHJp=4bqcaLnR$*vgRdAb3D1IF%zP#nN>|N|AI>9O%RUbwsn+= zq`i1RQv@^ui%M>-;+8IszveMD&5G+Zgf&Q#c~1SM`cNF_whK7Jd6n}<`M~fAp3vqO zehMqxL`lW7dB}_{>X|b-{7DbKg8z_2s08&z*E$la6sDi2Fo&0@_;MC`R?(Ej2G8Yi zg?W_`!I?pCxw07Zr0}e;OaX*hO3+x6IaKv9k^wn24y$fhl7ChYfCXyI5d>^W9@9Vo zV7}g0eX6IS9|LAeVL<4RnD@0FjPY7Du(mze+ZZUQKAA(gWwJBKkfDjUXl?0)>A)b1 zQ(8sUz>Mh_WfX3yTjLr1SOB-=h=isDvhSr*&l2Fdg(_{o(Av~0y;N3e`z~CkoLp&f zk5w_Qfi_%t5?);UD*bkZdJHO2RaDFF%n!tgiPQT~WOCMNr6DMl9BuS{>g8y~G2wuu zIvA=#y6y!+)Z`FhgRVNaFGT>ro*FjMfXQh@*aKk3J zr7j#etTJ4wZ!#C2%#Gd3@QxlVz_Q$G34?1q#-JiGb9+3wH%Vn;?qRMc1FM^j~I??9EEWeI3A ziv@DFlbxe0WW`PD%1#`pwYeJ4L2%l+7O-)mrl`*@lmXG>HfM;o zV5pvK1kQ&zn`r|(!5B6h0%0V1?2|_N*_@*zte&c% zBk6RLhiGy|*8+GK$}*O3Ud7ZvmB(5$tVW3*OZ+QUOn1z%Oufdy9eWX&VRPn=?$8`z zkUb`_tK01s9>QMlBBFSo8n{B$fvfoHs2O-OaEtG}MAB1+xna*Vs(J+fXpkj`39_WZ zf1--e;&d1ye28@n;%7l0Xtnw7kCn7>#`4722l-}ar< zx`Y#t1iWV*jB|@PCz82JU{sEu^vqLAY6?xY`HEMrwG_V-gh)k!471P>%vW zhJdI!2^P;3R;!sxqd;?KC;3oD3Y>Og-~#R`J+2w1ZLhu6C{iJ{v1&iMp*7Y{m4H(w zvsR`W=*^50vLPHRv&JqKn8OCcG-i#n!oE3lavO8AEL7J?Om^`RXrMKj>sodySLOr@ zU}=>n?)y@~Nt$wdbirdmc$Kx~5{URxX*1QVfcw}?5S>&U_O?CgjDLw6IfbM$VYgDq$B{1DC8mmauG-GxrfET(teJV1v2~u^xD}y6fxO6OcR4f~Ot@!c z-i1;+c~lLg1Zl@wDUQx@OHUn2>R>z$*{9AETjo$Gu8(saihA+Jq;Jy=iQKCm5!Mtlb@tr@S^z&PZHr|=% zskfW4NY$|E3~|kiHq1`mr9u{w#|FDT)Yv4CTBh$jQ$$+Q2-zXqryr509#SCd5Nia5 z1O|4C4N3G?&1B;@V7&DKa&b*sK=J&kSfZ*irahQzFst-Ryl4gfDW^8di~p zb_!Y(9M>WEqH@gB&pbg~xH<#pYzXX&z`ksP$oY%eBw?+S#SMd>uFf@EP>KR$?(^~$ zBxk;n=(rQ-Re~n0JGar^AKgTIzP(098}DGs0XZun+eI!>XXDWK$w-w$x>=hUWATnr z{--EplzD!6KPn{sz$G+XeljgsaVj0~+*M;0()(N#bHxQTxPOZm107lt zFA$=Zr6DI2Lz*nww2abRBZDY5ni3IQib7&m4=~`6W0Y0YLl~b4<&$<1n$MI`#EaJ3 z@^uefOtLB~;)SmstB7pvCV-vWY3Dy&L%Y85MOBI(R|Id$P^An96t1>q_Amm+ z5l{+0PT&=dqMS6eznOCKcy>JN_^!?yOT-2?L95lPSumi~v+h*c65t9{7x^oc*DZfK z%O71v)L?o0)JGoZj<0`#c7Ed;C<56;Q9>bp*&Wm?^7n)CKF5;uZ&qend~Bh#`I({b zfW^kb${_E)GsD}RH1qQx(&+w8rko3q% zFQ9b)W~tnqFk|R(!j!@0F#%&$F(8!s8PUTb4Q)0Gk(!(})?TZ$ZCo(#h?zn#CyJcH z{H=T8tB79v_BjeD9^vnIe*GHR_IFpZ?AoTtR}3S;Fzh%{k0{MA$Z#|9lJkk5bYci@ z+@lwV9^6cOzWQm}d;2}!GRF#?L*fe0vMJ^KW)_<;=4Gj}#U_^OWjTX;}i{u3UA0KRB3 zcdxyO__?R|l;O}+-j6aqPks7Q+Vitp%u;I=K!dh&gQAK2m{@)iEj;7RG(7g?o)X5E zJH{|IjY|(~qTSbjigy3g8Xb(TjTS8omfB!s6~i3-4}I@n)1ZN|uIu_r`9_AYH5tOD zrv=;!31&Z*xaA|wi}w+G;4uMx#geC=eLRSL1Y=k{*i%1FR2Js&74T$}uX0$hyLy=l9D}_%O%l(U0zEc(!gwh7ahzCPk%E_oOTX9(#LGt?2j%d zf!qK54>QHxq(R^2w9P;}#F{eTgI|6j9sG*7%WX~%qd)iL- zU-2ij_h;+K*L0OtJIMq00IWIxGdT1}S$M%GI6Z#(yp}(o62^H>`(5#tomX8%qfDhs zw{v{qq8w8QmiFd<4m{~pTKf8T)8McpLlHf1sY+3?0G2|~Rq#n0w?z`Zpn~TpMwMDT zga@i(n>7MeWmv4n1TTf83RTiFsdDyVstk5zw2DxO%ALRW^7CjWTP7n;m=ahia|zn| zT?uE09>ohT`mE*-F6eRWY(C|TgSBya$L>#GL^JDeQk?CIB69Rss$7INGSn&1_1O1) zzNeI)V)D4;zvf_XN}*W)B%rdsKmfw`{KJ$&4s!uE$D`jK3U|~*5U(2&7VnOzdp(-cQ;GiW`l);A{*;9bG z*S0D0+^m>FD#%hHzwsy~xs-Ij}Amd9{=ubpVS7+^+) zE~A4~%}W>y*sZ;9rV6Ne6WJ$6SQf9=GWmIxNP_|xCvd1_)Cv@)t|C{)Y^d6C^BUUn zj+f^gW1FJi(2_e%>?ZQ-ME*iQm;9oHqnE#fi!x>_V%+Ce;15S}bDlX-TyXx!vk@Gu z3K*nfC@>E5UIh=?v5mI;mzU?UtRCCGD&^9mlp|=wzN#73G&kacKsE{DvX3-F@LBov z^mC3EU!U5n&8?ZbLsN<}2*>){qNopjk@=Wo#}0h@rq%S|RhQV}#}c>`Yn)KeD9c4l z@E)2XG%I+jPhhF$WT72qD=d_`(cjf%&-RIOQk_ySJWjaSx_;uDOc#Wo0;(FOP}G93@9y{3)ItM;`8T9E=T4Ih#_Z)Qp%mL`7gh zCNE`<+dReUf)8AIDeb=Pma*PiWWld{J0RWFVesSc2{0DYMgokr16XWLHPXQ+L~7N( z26ih?n4X^ZAF=>nJr)j10KezGueZhG1*VEJ@RR$8SQ9tnp-|8!+}3 zoD?dWl}Yx4!<#`@#Vlo0BDPrX6?qQhvEy@%2S4{=8r{1|3KZFZOesa6h#lm*WAETm z%jX30eYfADb~4CU)I230yYyvm`Hh+SBT>v8FF8dMP~0V^9?Tl#bLZ8Nm<_`67)JN} zO155m<@h!;Nubxgja`Ut=$@*CcGp6 z(`#3k{G!wY%Rr)3J}C1S$!2$x;ix*D&b}YNvagIg)|G&6caP=sw9=bBY~twUp@>JS zj9;gicor`~wb+zmkULPgs+71Wri^F$hA+tOpWHH57K2mHpzbLvuzH}zKx0Byhm}ax z2{cP2^?OPljW}qox5HR~ap7fif}_LC)R(W)GPzRQ+~J`@RI(tMkYBP>0&;FmDGQgtVJn z4WLV#owZvQN}@#K13Bodx6H{Q##wgzy1$AEQj*IyJhhoHr^j|2?j}gN$}}>x7;4qr zW_Gu)`Fv4GwAm_|PJRJrg{Xv!Y;-3WpNb_gFVt(5+?3NhPZY@)H`I)>#lGwvG|oE; zj&}EKDzsJxKD$?3I>AAisJ%1Ti5?v0i!A)pv`R%qx^+ zn5rIPw{~OhjM;g&O=5=cRfUfe_Iyg2{oC*2(Y7DLv%z~8aiGQGl#pMQ^sKzM3GuP* z(XJgWYgMGHVZxXCRBoI+>Wi~n9NJ0Xx4LiX=)SdInw*S|#R!MiaW22qA*cxvMTgq^K)H1o^b^PKkM zTQSkD+tzU`7)3%_Cb&vv_V@Xi*?7Cw+mN_b7j}t@#Iod)Ae4EMg)7hOwc$$M_tPKb z1ahM&)saTk8@if#f36dc(D2$@G=)OB|QP^q+v?Lc1ElX!Dxs*!l?sfkt z`%}xB{g~a>?ptp}A3?JURCggvE35dt_@PJg@a+FQhv1acXYRS19?D2!(@MT!5w3%O zxJi*EB(26rKraurBuzHf%d9P6XPezIP4|85lHPzqAsOR`@4TA20}nPQXxejEci@B% z>ri%n=Q?WVtPfams%84d^|cjVeMZMRj$}+-b0u~6-d*Zu2^)??pm9G_Ww3JZ zeAu4v-XssL{z6X~@hsE1Z@Gdb9Ne6cgI%E1X&usn+V1bH)>Vcs=mp1}Ob0%9Rg}TY zHA{VL+gJXZ{H|k3x#mOH{dXNTlu`thZUE7nCj5A~5n*Sd(m3ig$q?oNF{SO1$wVk$o=|dr)@?7+)cb4Tq+N}f*-R;`OTRwJSPnf^068t&+f3DLB zG2O$Gu^iJniVWMXpV^byAJ*+RgZf5N(V<+v3CllD;9a@As8?_9oi=&e!KD&AZ2D*y*`vlDy|j zR93)8CBUr$w+E**U@Js2?YQ>C3SGa?tUL^7$2Qvh!E;F-*hFP!&|rqC$r)4{-GK** zyeB86&pv&uLCjkg`q=;dqamPm#P?P&cnorC2NpPbsWItz?#`gks9#<+p!^P`%q_s3i*AAO^*Khl5LwKK%WmEkCpWuf(==^*d{xIefdw zw&W%|zkj0~^vu&ZEk3v>Kz(2C5j^pQM&-)w$#K!zrZ+aqWs<_Ycw!+f_}3@Q5r((j zzCIjf?D*;TXw!%Okh;zPf(00?aAk_g*C@Hiq9shL{uA-pmrz=Gz}N+V`+ji;-E-Ob zl9izg6LK3oQKokDVHwgjpbvmmRS`}WR2jH=gUMIk>-*_v9q+qLQ}`AFFz5kz0h4$@ z$t{+UJwqkPlLq&hOry$8MCE&4d@wJ4?S-`DjB|TzrngWzvl{+HP9h)NtnC(v7-<`% zgrWSeOKEZ^7Opsr4ms!DTJM_e9S>I-C0^Y3x1Xe`oX7Zl%>f+u)zfVLpQZmmS z&pM%tdk6#AMcUouu=?HaD@P@?E3=3yJXMOm+EWwUeD>1UyoDb1nhWPwN_pOREz!-_ zX2slX_e2(@=$%fsIDDU28LcSnpy$6#Gx$YMd**NSkno7xzE3-E`yNew?XM&kCv}aL zEt*IWpf2^{QmRR(pHJ!3*F>A+0{GU?eVDf2aE%HN@U1M$))3fzO+_KeH-piYi%9&O zS*h?%F(MQTuvOI4&#E_lwt$DtW19O0tHMkv#-@t`X7bT$-DH9+-eQW+%qh9$SB?s=+>ZSBSJUYKUatXcWZt67H%D0;Wi`5bpH(wxkf(eXE_*5+m}_1KJn<>o z#)89+QkW|=cC>RF?cVS++J4J7Gttv^>w9`Ym8VeTl18evSvx_?%|PnCZ#;nxb)Q*(&E!?-g%CfIO)j2eDu}N(5T!S zc;6=7lcm7ch;8$>qMTAqHpO&Na^gxL&ALn1aML^XEC}*3!L~>*m+^VQX|JW>zdc(O z5$BGf?%QwpB29hyN|NdA0US>Khk&{P79|XHb%<`fLgWkO{9X{hCE7MsHl?`7AOYO`|zXru^;%$vECA8Xw(Nr z-@Tq@Ze2?=KmQTUOm8zKH(p}KX4mhRWXRcv-%xBbdqr?r@Doosjut-WOd3A@6eAf? zwwvn}dv04t+y3WOr1RzCg+i>$Dl{1}qj-d_{gt{)V(eI|`4&o223zE}MN@M>JA28s zY#hM2b&#+zx$ilm?E%WqSfV)e~B4X%*f@V4*K`6qu~>d<+7%0&@8lT zAG1k9fv4?%dsPnJtJQinS<8a)fUPm8FsqVlkp1o(YE!#efCX@0X=u}i#J&61>%E5- zYiuWnCV0>C6kBhK+uUrNmR>W=#e+QVG1TQk<>sT}B^n3V;)~r(gwikIWbvu1Xvr%t zq;ZNF_mBrR)AoyBtoKSqD$RU6J55##oV7|v}MNI#%t7Q77HO+pt z6u0iHLQ0(~Gb$*jWY*@5rWC3|ZiP*8Z@TUI5wjhvumaXq+8GjZchu;mpBLIUx+cqO z^BfiXNIaQ*PLpg=8F{H7vzM}>JD)RS+iGBqu${Lv)5jfa*YKieoJxyUuA+q}of?qU zD#hQI@;Iy$_c*d40j}viR)EBYjD_wFW+`MgJKLL~Y5P|`l_BZ}<%UB>j>W!6&f|~f z7i>52B)45C2Ht8+#$-uI{9U}ZI2!ZwDl)TAig}|#5^Q~FP+ay@UR^FhvLc?Hh%XZ| zaP&)=3NVA7JMB}>*;A6)t0}{7+{Zojs35TH{Qgb6>y{gHf$}I?@RXBi(F<15#8Xc0 zdxvAa*osJ4Li~(>nDKus=kXmO8fskL@BQa>wC4vmsX>&4)&ncMOf3ULy58* zCbS4yyl((WwUYyrjrvBp?_#FwGdmFwE_BUNp!@~YMure3fQFs9lI34%>*2u{dS>^S$Z zPC}WcyV$y!E3P--Gz`S zLL-I{cY34JtA#)w*nRV4Qv#T>Ht!+dI{|SP*k5-_v#3cP`<&v6#SN?#jaUI1g3so7 zIXx>uJ(gP69|2R+ln#BZSUrXVxdnko`AFAEY!0kTE;*96Q}Dnx{?^)+ z?<*`G6{tr7g*~ff{Dna=(%~y*iu#L%ceWq6C3&6g)i5?F_h+H^K ztL`3XrjNK$;|L5u;V6C!JVjO4V~%gdK~PSKSySZsl^x4GD;a1mSpWQy;tB#7Py+&F zM@$m`JsL1eQ>z3sQ?+#Z2X(qKfkvpmd9&=o!=o`wyNYu%c%adpFw|t3v(0WM9zPndHTnWYx-#HFZqKBUCA5`-uh_24 z5eqD2VWWBMGAfl;In$~e|5->)IU9u?2nU}q4Z&}QbU{Ji?JfPLyWNFe7ioW z7LW3}|8+oA|3HU&N&_bkS%x7YuF+Jv-)YK-DJ;#z%$~d8jHb)I@k{*WW~p8fiervt z^Z_gc%YcdcX6hd8IE+z@M|+;6hbE`ks;;VgH<;Lj0D{#&K?37|*H(+b@iuIBy*h94 zw-TtpbxS{T=2W2^MM7JdUg4VkXW*L)UytuRPMKBa-!=>fUH6NT`geqLyIzOr)xp0T zFCiyaYB3g~I%H(Xn``YNnTseC8n9Mxas?y5F=PbA09?m)z@*JH8tWsX8pqmFirEtf z>!{Y^%JZNdA*icHDWMe8q`3m@IR1#F{w7p~%n{fTYa;hRR_=2mh#lCc%X*Skuwj@F z*+B5P5EwZgN{rWlKhP*{yQ0SOJ)poep*0F{bFYJ6#}-dkyX$|~cwu!pct}55LUHwQ z@=frlQ5gKqcnQI}(3#F@X=DB2^o`{cVF8E>5@lI(mIO=JBYf>Lh@^W{t7M8G@AyD> z4fhiLcp@w$;DH(mqu3%6_r9T|0&vBL=67yZ@sc zPxE<(^47=#bITLm2Hh%&0y@Gt^f;fdFzXigxatAGIcWlMcm{gy@Poiza}k3u-+dH) zfFXqGZ_r=1Pfl)S+XJ3G!f~^IA}-n6uU7?P>8ja_*E29e441KpH=<~3xL!@>@ZV~n zNChM56E9x|!-X>wl-G4GJ6yui(~baf3tXp`3v`x~2!zwi6@1dCRZQbW@muq^aN9W1 z97mX_g7WQnhsJ!;*2U}BKiX&SZzhW16F~^pYoeo`MHno05&TTl&cpqp;i_DB>GX}f z00)d?l)ZFw2ct1evvd;tAubyXHX)9k*{s;Yeoh=4kYk=;l}*GVtZw(XpzSsLB!)m6 zWr)-<5XvO>8RN%nppUJm2oGN3{UxuEl={%O;Nj&0-5N(8|1UZa_qD;MR0txqD1tzV zxno~!*R!BmgYtG%k(mB-?mK6uEvyn$GOknG^i7RT=$u{g<6RYJ2w0G;vt)7D{q!kC6wwgYKeH!!Rk;*W?8HAPg8IWalDki+eJoDCtV~q zaCE-TeG7*rRwWQ-u>ynDI{kMfC7p2>4|s*b`MI!02#qoO#%?UNwC$@p8o~J_5y2Cz z@8ZJiDXd;YYFmDcBLg6(jTwyr<0(DJ5;vNbgfMU2N3uwyI+hc=B8+c^0Dlp-$Uf&3!F$dKc{t7dD+jEq{^+^tI zh>)(_24<+MMkQ@q;)YNW#5^XR&9xfi>&Fq~G$xY}t;m`=e@{KLtxx80P5I|W(2l7M zwh}gXtQhLYP{r4Pk17xdfv6EKnUXt{XoO;?XNN#oB4c5IgrGW%5#{y}tU*z%iL%-g z_dNxt1Uyy9lgLwg@LSo4bS*>^S9q1Gq#y+p6pF}`UUo1n3iw6#j?4XsP)N~G?)&8; z&G`}>O5aFes>crw0`0t9U%SY18*3rN9|Trcqy}w{TgB=+CJ5M;G>QjuY2c%=ZfTd+ zSbS<@1IJPoKTa#g9h1kCiu>$;#lZ9kq9H8=hIjP5&*nF%#;8hKstmxng8}A$F3+;x zP*pbTktuM2uD22et40p)g+yxp#1=X5Ev*tyGM7u_Q0U4dW65CO{6Av5MJF( zxOq<;Wtd>G9(3cRO0=T_N0p+&pq%U2)jWQYttjat5hP^R6vV68&Z&-&e* z>qzC3OV+QysFnX5g_Oti6K3T;}s4UY6iQrI~t`GaxW93P#{IVVd4vAAh+lw zt^)^vPD0VO%dLWp=}41J#yJWjn3_LPt3K3?Q@SuWwrm0C||Agrnw@vyC1ApCIDKzr;@ z{I9PO_2-=6E@FF0PAE|MN%h)EKQ<63!W-$xuZ9V#Q<>K z)}_6@IWW~9#cz0Qo18o^%lLiy?J_%qDTI=I0*@lTP|fKnAdTRutztYQLN6Tb9nvV! z!;sPAM7$4u=?+v4u1XCsz&?j0`;B`7@<1HoYhGO`+HBYSCKYkrssM2WuH_-N?bB42 zIium9w)5%+IaNO|m zb4NrjvuqyQX^#XfglE&r2LkQ7Nnt&?}U2t5G9tp7CbWL#esiXKqG2(_(6!D2g z*)tfq#;*VCp38J&|Nvkp*uFS7XOW%A_2)M=(q#*&W)O(KdTnJ%Ov!vO2 zi%F>$ngbbX$sm{K5%xGds zWm?XZYHtJodT2+DvfL>{4^`>Z{?=GL1#3e0YOL@c<WXEMdMg_8~PI%ZQnhQHq#hjEP|~<6>-M35DEnpg{Szl0E9yT%=rR<%LhP-UD$Hi25v~u4muLR#^zJfUY-NbY-Kxnasb#S zznLQ7QlT4L_Ecn+yl!Sr%B?V+-hmgKzK!^e&u!jRk&DB{qUCA2GHH!sH~4QmwK`9v zAxk9H5XFj&2@lMrF9-HvC(Z|xrOv3zz7wrQ{0TH9viZoRg*uuD1ZARe{-h9+otbtx+9;9OIGh>b-Hz~XO$>j0#=i)Ci7_V zmq=8Y#iChBy>y(Fp%kH9p?ifZI+E6nOepB-U6`r7QTeNxW~5ZVq}Cm=(RJix&bsis z3t5T)LO_VVN$ac0Bhv>Z@8v?1b9aY|tPxe3OnnZe%S;_%DqUwp*Lu}PVv9yv03lbSKgRj0UU-fD&on5i{^?7N;`fNH$Jkqpn_K)D6V=WF?TXDSTMipc^t8RoFF}j#$NYh)fDg48%D$zUL+*V zjIDfkV3O_GAtyz98A;ZH)xJjpMn^WgZeHb1YaG_Vh;{Gln;BvEwW6`*=Z)51X4)DX zzrr?DlmS7QF?>rKUte;+E*>h=J+Iha(9z(8Ytgo}MkhFrSfy5b`UKT>+#Ua3iJmEr z4wMeMU?#lsQ2zDF;l0<-wDInYkD=6qf@CYbl5kg<^}6a~x8Dprwf)#zz0>;8VpFWP ze(&h_Q_jjIrFQ!@w=0Em$VEHj=v^OTW7H@WnP*LnR`eA6?`(LOdKb{7+vUYOn!oRD zT{^$S#U%O6Gk5qBJ&-1TXL5tC8Ks1kvS$5QV*4&+1TUptCV{zOwU8XZKKhxsz z+a8MS+G6aLW4)$|;>t@24V{!Dg#i`b9J(_paBTHS+<8GpfEjydtQz>31bCW!N*#u8~ z;yU3n&?0!5)JJaqEofuX*lU;n5LU+L3Ur$u3ob1mj`5Lnb~eR6 z4?1mkjb4d9yL)QYN6`8`UXZi%7mhn#B!w@Q{ozBk$h@|iUE(R9D^xzQ*Nr?_F5M z@BPhD`it4*TB0bPSbr@{wIDs*PGq1nB*FKi)@RXZNnw}G3D^9o$H^kc4E3%hmKlpL zw|yn;WlBU6s2Y6YC-t)GF4830@LTC={b>5M!r^RwJy`^VG;-K}-fyu7Y;qDwOhZ_=(Whc7I=ykW^k^t(pAZYB8YZ=6KT zE4~mjz;3Zk2c5G@tq?WZTOvkf=qE4yThFGSP3RLdeA`J8-=AgWkQ#-LZdTEwtu@t# zaS1iaoGCejtbunu-Ho?_rHl>2X6q-h`=5@W(>k{hY`Wt9!c3m>HS2d6ve%u6S`c+i z=*Zg@zwIVRggg=t&SxeX?`w5{&l<3cYk!REPvz2aeqnUD04#*X7(rM#+_4Z24h*yh zf^ZO2B|_jEO6LdffE|Qji83n0g**z&|Rqvre6@s+}Og{ z(#Q&hg)pW@keLw%i#m)kM+I`ZY#bUL5fNd`+@#@zY2(l^#;cSMupv<1baW34XVGvt zLa1Ljiyp$o;SRwl2VlxKTG9Vv{$3M@3#2m{fn0#G!XiP~8JJP}!RLR>QKmmPa1(i6 zttkm3DnB5uOctFR#ioP5cZFt$F!tT@ApOh7)g7h)#vFsiT3KK*P;nL85=M|e_#9#K z=m4^_%Pq5g54SviXi?mVAb=T6hd&?93gHHaGSC6kUzmQOAsqBSKL(Ap@(Zvqv9d6? uFrisM=9VAgVuPY78rk;r(5lZh-F<01)j-gjze_#Qy@RF0k_e diff --git a/frontend/public/signoz-signup.svg b/frontend/public/signoz-signup.svg deleted file mode 100644 index 67c45b1c23..0000000000 --- a/frontend/public/signoz-signup.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/frontend/src/components/WelcomeLeftContainer/index.tsx b/frontend/src/components/WelcomeLeftContainer/index.tsx index 3e8ec68e42..ea238723ae 100644 --- a/frontend/src/components/WelcomeLeftContainer/index.tsx +++ b/frontend/src/components/WelcomeLeftContainer/index.tsx @@ -16,7 +16,7 @@ function WelcomeLeftContainer({ - + SigNoz {t('monitor_signup')} From 5a0a7c2c6031d8e69bad334e27973bf6da8a052e Mon Sep 17 00:00:00 2001 From: SagarRajput-7 <162284829+SagarRajput-7@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:48:48 +0530 Subject: [PATCH 18/50] fix: restricted column long value to 3 line and line clamped (#6056) * fix: restricted column long value to 3 line and line clamped * fix: added tooltip prop as prop for generic component and passed style from consumer * fix: comment resolved * fix: refactored styles * fix: updated snapshot * fix: removed console log --- .../GridTableComponent.styles.scss | 5 ++ .../container/GridTableComponent/index.tsx | 28 ++++++- .../LogsPanelComponent.styles.scss | 3 +- .../TablePanelWrapper.test.tsx.snap | 84 +++++++++++++++---- .../TracesTableComponent.styles.scss | 3 +- .../LineClampedText/LineClampedText.tsx | 17 +++- 6 files changed, 118 insertions(+), 22 deletions(-) create mode 100644 frontend/src/container/GridTableComponent/GridTableComponent.styles.scss diff --git a/frontend/src/container/GridTableComponent/GridTableComponent.styles.scss b/frontend/src/container/GridTableComponent/GridTableComponent.styles.scss new file mode 100644 index 0000000000..80491e991a --- /dev/null +++ b/frontend/src/container/GridTableComponent/GridTableComponent.styles.scss @@ -0,0 +1,5 @@ +.long-text-tooltip { + max-width: 500px; + max-height: 500px; + overflow-y: auto; +} diff --git a/frontend/src/container/GridTableComponent/index.tsx b/frontend/src/container/GridTableComponent/index.tsx index fbd3892c48..dfa90b8255 100644 --- a/frontend/src/container/GridTableComponent/index.tsx +++ b/frontend/src/container/GridTableComponent/index.tsx @@ -1,3 +1,5 @@ +import './GridTableComponent.styles.scss'; + import { ExclamationCircleFilled } from '@ant-design/icons'; import { Space, Tooltip } from 'antd'; import { getYAxisFormattedValue } from 'components/Graph/yAxisConfig'; @@ -5,6 +7,7 @@ import { Events } from 'constants/events'; import { QueryTable } from 'container/QueryTable'; import { RowData } from 'lib/query/createTableColumnsFromQuery'; import { cloneDeep, get, isEmpty } from 'lodash-es'; +import LineClampedText from 'periscope/components/LineClampedText/LineClampedText'; import { memo, ReactNode, useCallback, useEffect, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { eventEmitter } from 'utils/getEventEmitter'; @@ -116,7 +119,16 @@ function GridTableComponent({ } > - {text} + + {hasMultipleMatches && ( @@ -127,7 +139,19 @@ function GridTableComponent({ ); } } - return

{text}
; + return ( +
+ +
+ ); }, })); diff --git a/frontend/src/container/LogsPanelTable/LogsPanelComponent.styles.scss b/frontend/src/container/LogsPanelTable/LogsPanelComponent.styles.scss index b355c90551..99f93a7935 100644 --- a/frontend/src/container/LogsPanelTable/LogsPanelComponent.styles.scss +++ b/frontend/src/container/LogsPanelTable/LogsPanelComponent.styles.scss @@ -63,8 +63,7 @@ height: 40px; justify-content: end; padding: 0 8px; - margin-top: 12px; - margin-bottom: 2px; + margin: 12px 0 2px; } } diff --git a/frontend/src/container/PanelWrapper/__tests__/__snapshots__/TablePanelWrapper.test.tsx.snap b/frontend/src/container/PanelWrapper/__tests__/__snapshots__/TablePanelWrapper.test.tsx.snap index 1a930f740c..6de3e82778 100644 --- a/frontend/src/container/PanelWrapper/__tests__/__snapshots__/TablePanelWrapper.test.tsx.snap +++ b/frontend/src/container/PanelWrapper/__tests__/__snapshots__/TablePanelWrapper.test.tsx.snap @@ -266,14 +266,22 @@ exports[`Table panel wrappper tests table should render fine with the query resp class="ant-table-cell" >
- demo-app +
+ demo-app +
- 4.35 s +
+ 4.35 s +
@@ -284,14 +292,22 @@ exports[`Table panel wrappper tests table should render fine with the query resp class="ant-table-cell" >
- customer +
+ customer +
- 431 ms +
+ 431 ms +
@@ -302,14 +318,22 @@ exports[`Table panel wrappper tests table should render fine with the query resp class="ant-table-cell" >
- mysql +
+ mysql +
- 431 ms +
+ 431 ms +
@@ -320,14 +344,22 @@ exports[`Table panel wrappper tests table should render fine with the query resp class="ant-table-cell" >
- frontend +
+ frontend +
- 287 ms +
+ 287 ms +
@@ -338,14 +370,22 @@ exports[`Table panel wrappper tests table should render fine with the query resp class="ant-table-cell" >
- driver +
+ driver +
- 230 ms +
+ 230 ms +
@@ -356,14 +396,22 @@ exports[`Table panel wrappper tests table should render fine with the query resp class="ant-table-cell" >
- route +
+ route +
- 66.4 ms +
+ 66.4 ms +
@@ -374,14 +422,22 @@ exports[`Table panel wrappper tests table should render fine with the query resp class="ant-table-cell" >
- redis +
+ redis +
- 31.3 ms +
+ 31.3 ms +
diff --git a/frontend/src/container/TracesTableComponent/TracesTableComponent.styles.scss b/frontend/src/container/TracesTableComponent/TracesTableComponent.styles.scss index c59bf3c5ad..30f90d4a09 100644 --- a/frontend/src/container/TracesTableComponent/TracesTableComponent.styles.scss +++ b/frontend/src/container/TracesTableComponent/TracesTableComponent.styles.scss @@ -52,8 +52,7 @@ height: 40px; justify-content: end; padding: 0 8px; - margin-top: 12px; - margin-bottom: 2px; + margin: 12px 0 2px; } } diff --git a/frontend/src/periscope/components/LineClampedText/LineClampedText.tsx b/frontend/src/periscope/components/LineClampedText/LineClampedText.tsx index 6b90704b0c..9c77d514e0 100644 --- a/frontend/src/periscope/components/LineClampedText/LineClampedText.tsx +++ b/frontend/src/periscope/components/LineClampedText/LineClampedText.tsx @@ -1,14 +1,16 @@ import './LineClampedText.styles.scss'; -import { Tooltip } from 'antd'; +import { Tooltip, TooltipProps } from 'antd'; import { useEffect, useRef, useState } from 'react'; function LineClampedText({ text, lines, + tooltipProps, }: { text: string; lines?: number; + tooltipProps?: TooltipProps; }): JSX.Element { const [isOverflowing, setIsOverflowing] = useState(false); const textRef = useRef(null); @@ -42,11 +44,22 @@ function LineClampedText({
); - return isOverflowing ? {content} : content; + return isOverflowing ? ( + + {content} + + ) : ( + content + ); } LineClampedText.defaultProps = { lines: 1, + tooltipProps: {}, }; export default LineClampedText; From 3b7455ac4cfbfdac281d4abee2590c70d3861258 Mon Sep 17 00:00:00 2001 From: Yunus M Date: Mon, 30 Sep 2024 12:41:11 +0530 Subject: [PATCH 19/50] fix: wait for licenseData to resolve before the check to show chat support (#6091) --- frontend/src/AppRoutes/index.tsx | 56 +++++++++++++++++--------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/frontend/src/AppRoutes/index.tsx b/frontend/src/AppRoutes/index.tsx index 8400afbde3..846ec02ac4 100644 --- a/frontend/src/AppRoutes/index.tsx +++ b/frontend/src/AppRoutes/index.tsx @@ -12,6 +12,7 @@ import useAnalytics from 'hooks/analytics/useAnalytics'; import { KeyboardHotkeysProvider } from 'hooks/hotkeys/useKeyboardHotkeys'; import { useIsDarkMode, useThemeConfig } from 'hooks/useDarkMode'; import { THEME_MODE } from 'hooks/useDarkMode/constant'; +import useFeatureFlags from 'hooks/useFeatureFlag'; import useGetFeatureFlag from 'hooks/useGetFeatureFlag'; import useLicense, { LICENSE_PLAN_KEY } from 'hooks/useLicense'; import { NotificationProvider } from 'hooks/useNotifications'; @@ -58,23 +59,16 @@ function App(): JSX.Element { const isDarkMode = useIsDarkMode(); + const isOnboardingEnabled = + useFeatureFlags(FeatureKeys.ONBOARDING)?.active || false; + + const isChatSupportEnabled = + useFeatureFlags(FeatureKeys.CHAT_SUPPORT)?.active || false; + + const isPremiumSupportEnabled = + useFeatureFlags(FeatureKeys.PREMIUM_SUPPORT)?.active || false; + const featureResponse = useGetFeatureFlag((allFlags) => { - const isOnboardingEnabled = - allFlags.find((flag) => flag.name === FeatureKeys.ONBOARDING)?.active || - false; - - const isChatSupportEnabled = - allFlags.find((flag) => flag.name === FeatureKeys.CHAT_SUPPORT)?.active || - false; - - const isPremiumSupportEnabled = - allFlags.find((flag) => flag.name === FeatureKeys.PREMIUM_SUPPORT)?.active || - false; - - const showAddCreditCardModal = - !isPremiumSupportEnabled && - !licenseData?.payload?.trialConvertedToSubscription; - dispatch({ type: UPDATE_FEATURE_FLAG_RESPONSE, payload: { @@ -90,16 +84,6 @@ function App(): JSX.Element { setRoutes(newRoutes); } - - if (isLoggedInState && isChatSupportEnabled && !showAddCreditCardModal) { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - window.Intercom('boot', { - app_id: process.env.INTERCOM_APP_ID, - email: user?.email || '', - name: user?.name || '', - }); - } }); const isOnBasicPlan = @@ -201,6 +185,26 @@ function App(): JSX.Element { // eslint-disable-next-line react-hooks/exhaustive-deps }, [pathname]); + useEffect(() => { + const showAddCreditCardModal = + !isPremiumSupportEnabled && + !licenseData?.payload?.trialConvertedToSubscription; + + if (isLoggedInState && isChatSupportEnabled && !showAddCreditCardModal) { + window.Intercom('boot', { + app_id: process.env.INTERCOM_APP_ID, + email: user?.email || '', + name: user?.name || '', + }); + } + }, [ + isLoggedInState, + isChatSupportEnabled, + user, + licenseData, + isPremiumSupportEnabled, + ]); + useEffect(() => { if (user && user?.email && user?.userId && user?.name) { try { From bc8891d2f851bcb32e6e622ec66db33e5a3fe4b6 Mon Sep 17 00:00:00 2001 From: Prashant Shahi Date: Mon, 30 Sep 2024 18:02:56 +0530 Subject: [PATCH 20/50] Sync/post release v0.55 (#6092) --- .../clickhouse-setup/docker-compose.yaml | 10 +++++----- .../clickhouse-setup/otel-collector-config.yaml | 1 + .../docker/clickhouse-setup/docker-compose-core.yaml | 4 ++-- .../clickhouse-setup/docker-compose-local.yaml | 2 +- .../clickhouse-setup/docker-compose.testing.yaml | 12 ++++++------ deploy/docker/clickhouse-setup/docker-compose.yaml | 12 ++++++------ .../clickhouse-setup/otel-collector-config.yaml | 1 + go.mod | 2 +- go.sum | 4 ---- .../tests/test-deploy/docker-compose.yaml | 6 +++--- .../tests/test-deploy/otel-collector-config.yaml | 1 + 11 files changed, 27 insertions(+), 28 deletions(-) diff --git a/deploy/docker-swarm/clickhouse-setup/docker-compose.yaml b/deploy/docker-swarm/clickhouse-setup/docker-compose.yaml index c584bb50e7..c8d9e54421 100644 --- a/deploy/docker-swarm/clickhouse-setup/docker-compose.yaml +++ b/deploy/docker-swarm/clickhouse-setup/docker-compose.yaml @@ -146,11 +146,11 @@ services: condition: on-failure query-service: - image: signoz/query-service:0.49.1 + image: signoz/query-service:0.55.0 command: [ "-config=/root/config/prometheus.yml", - # "--prefer-delta=true" + "--use-logs-new-schema=true" ] # ports: # - "6060:6060" # pprof port @@ -186,7 +186,7 @@ services: <<: *db-depend frontend: - image: signoz/frontend:0.48.0 + image: signoz/frontend:0.55.0 deploy: restart_policy: condition: on-failure @@ -199,7 +199,7 @@ services: - ../common/nginx-config.conf:/etc/nginx/conf.d/default.conf otel-collector: - image: signoz/signoz-otel-collector:0.102.2 + image: signoz/signoz-otel-collector:0.102.10 command: [ "--config=/etc/otel-collector-config.yaml", @@ -238,7 +238,7 @@ services: - query-service otel-collector-migrator: - image: signoz/signoz-schema-migrator:0.102.2 + image: signoz/signoz-schema-migrator:0.102.10 deploy: restart_policy: condition: on-failure diff --git a/deploy/docker-swarm/clickhouse-setup/otel-collector-config.yaml b/deploy/docker-swarm/clickhouse-setup/otel-collector-config.yaml index afa8291358..a0859ef633 100644 --- a/deploy/docker-swarm/clickhouse-setup/otel-collector-config.yaml +++ b/deploy/docker-swarm/clickhouse-setup/otel-collector-config.yaml @@ -144,6 +144,7 @@ exporters: dsn: tcp://clickhouse:9000/signoz_logs docker_multi_node_cluster: ${DOCKER_MULTI_NODE_CLUSTER} timeout: 10s + use_new_schema: true extensions: health_check: endpoint: 0.0.0.0:13133 diff --git a/deploy/docker/clickhouse-setup/docker-compose-core.yaml b/deploy/docker/clickhouse-setup/docker-compose-core.yaml index 17f7c3e4a3..7a2bcdfa75 100644 --- a/deploy/docker/clickhouse-setup/docker-compose-core.yaml +++ b/deploy/docker/clickhouse-setup/docker-compose-core.yaml @@ -66,7 +66,7 @@ services: - --storage.path=/data otel-collector-migrator: - image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.2} + image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.10} container_name: otel-migrator command: - "--dsn=tcp://clickhouse:9000" @@ -81,7 +81,7 @@ services: # Notes for Maintainers/Contributors who will change Line Numbers of Frontend & Query-Section. Please Update Line Numbers in `./scripts/commentLinesForSetup.sh` & `./CONTRIBUTING.md` otel-collector: container_name: signoz-otel-collector - image: signoz/signoz-otel-collector:0.102.2 + image: signoz/signoz-otel-collector:0.102.10 command: [ "--config=/etc/otel-collector-config.yaml", diff --git a/deploy/docker/clickhouse-setup/docker-compose-local.yaml b/deploy/docker/clickhouse-setup/docker-compose-local.yaml index 248c7bf9f6..7effc129fe 100644 --- a/deploy/docker/clickhouse-setup/docker-compose-local.yaml +++ b/deploy/docker/clickhouse-setup/docker-compose-local.yaml @@ -25,7 +25,7 @@ services: command: [ "-config=/root/config/prometheus.yml", - # "--prefer-delta=true" + "--use-logs-new-schema=true" ] ports: - "6060:6060" diff --git a/deploy/docker/clickhouse-setup/docker-compose.testing.yaml b/deploy/docker/clickhouse-setup/docker-compose.testing.yaml index 8d4564af31..174f0914a9 100644 --- a/deploy/docker/clickhouse-setup/docker-compose.testing.yaml +++ b/deploy/docker/clickhouse-setup/docker-compose.testing.yaml @@ -164,13 +164,13 @@ services: # Notes for Maintainers/Contributors who will change Line Numbers of Frontend & Query-Section. Please Update Line Numbers in `./scripts/commentLinesForSetup.sh` & `./CONTRIBUTING.md` query-service: - image: signoz/query-service:${DOCKER_TAG:-0.49.1} + image: signoz/query-service:${DOCKER_TAG:-0.55.0} container_name: signoz-query-service command: [ "-config=/root/config/prometheus.yml", - "-gateway-url=https://api.staging.signoz.cloud" - # "--prefer-delta=true" + "-gateway-url=https://api.staging.signoz.cloud", + "--use-logs-new-schema=true" ] # ports: # - "6060:6060" # pprof port @@ -204,7 +204,7 @@ services: <<: *db-depend frontend: - image: signoz/frontend:${DOCKER_TAG:-0.49.1} + image: signoz/frontend:${DOCKER_TAG:-0.55.0} container_name: signoz-frontend restart: on-failure depends_on: @@ -216,7 +216,7 @@ services: - ../common/nginx-config.conf:/etc/nginx/conf.d/default.conf otel-collector-migrator: - image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.2} + image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.10} container_name: otel-migrator command: - "--dsn=tcp://clickhouse:9000" @@ -230,7 +230,7 @@ services: otel-collector: - image: signoz/signoz-otel-collector:${OTELCOL_TAG:-0.102.2} + image: signoz/signoz-otel-collector:${OTELCOL_TAG:-0.102.10} container_name: signoz-otel-collector command: [ diff --git a/deploy/docker/clickhouse-setup/docker-compose.yaml b/deploy/docker/clickhouse-setup/docker-compose.yaml index 17a975e5a6..0c333899aa 100644 --- a/deploy/docker/clickhouse-setup/docker-compose.yaml +++ b/deploy/docker/clickhouse-setup/docker-compose.yaml @@ -164,12 +164,12 @@ services: # Notes for Maintainers/Contributors who will change Line Numbers of Frontend & Query-Section. Please Update Line Numbers in `./scripts/commentLinesForSetup.sh` & `./CONTRIBUTING.md` query-service: - image: signoz/query-service:${DOCKER_TAG:-0.49.1} + image: signoz/query-service:${DOCKER_TAG:-0.55.0} container_name: signoz-query-service command: [ - "-config=/root/config/prometheus.yml" - # "--prefer-delta=true" + "-config=/root/config/prometheus.yml", + "--use-logs-new-schema=true" ] # ports: # - "6060:6060" # pprof port @@ -203,7 +203,7 @@ services: <<: *db-depend frontend: - image: signoz/frontend:${DOCKER_TAG:-0.49.1} + image: signoz/frontend:${DOCKER_TAG:-0.55.0} container_name: signoz-frontend restart: on-failure depends_on: @@ -215,7 +215,7 @@ services: - ../common/nginx-config.conf:/etc/nginx/conf.d/default.conf otel-collector-migrator: - image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.2} + image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.10} container_name: otel-migrator command: - "--dsn=tcp://clickhouse:9000" @@ -229,7 +229,7 @@ services: otel-collector: - image: signoz/signoz-otel-collector:${OTELCOL_TAG:-0.102.2} + image: signoz/signoz-otel-collector:${OTELCOL_TAG:-0.102.10} container_name: signoz-otel-collector command: [ diff --git a/deploy/docker/clickhouse-setup/otel-collector-config.yaml b/deploy/docker/clickhouse-setup/otel-collector-config.yaml index 6f30d42ad1..72e4f3dcc7 100644 --- a/deploy/docker/clickhouse-setup/otel-collector-config.yaml +++ b/deploy/docker/clickhouse-setup/otel-collector-config.yaml @@ -154,6 +154,7 @@ exporters: dsn: tcp://clickhouse:9000/signoz_logs docker_multi_node_cluster: ${DOCKER_MULTI_NODE_CLUSTER} timeout: 10s + use_new_schema: true # logging: {} service: diff --git a/go.mod b/go.mod index 6f523045d1..628384c2fe 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,6 @@ require ( github.com/mailru/easyjson v0.7.7 github.com/mattn/go-sqlite3 v2.0.3+incompatible github.com/minio/minio-go/v6 v6.0.57 - github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c github.com/oklog/oklog v0.3.2 github.com/open-telemetry/opamp-go v0.5.0 github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.102.0 @@ -141,6 +140,7 @@ require ( github.com/minio/sha256-simd v0.1.1 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect diff --git a/go.sum b/go.sum index c557bc6f87..332f4507e1 100644 --- a/go.sum +++ b/go.sum @@ -64,8 +64,6 @@ github.com/SigNoz/govaluate v0.0.0-20240203125216-988004ccc7fd h1:Bk43AsDYe0fhkb github.com/SigNoz/govaluate v0.0.0-20240203125216-988004ccc7fd/go.mod h1:nxRcH/OEdM8QxzH37xkGzomr1O0JpYBRS6pwjsWW6Pc= github.com/SigNoz/prometheus v1.11.1 h1:roM8ugYf4UxaeKKujEeBvoX7ybq3IrS+TB26KiRtIJg= github.com/SigNoz/prometheus v1.11.1/go.mod h1:uv4mQwZQtx7y4GQ6EdHOi8Wsk07uHNn2XHd1zM85m6I= -github.com/SigNoz/signoz-otel-collector v0.102.2 h1:SmjsBZjMjTVVpuOlfJXlsDJQbdefQP/9Wz3CyzSuZuU= -github.com/SigNoz/signoz-otel-collector v0.102.2/go.mod h1:ISAXYhZenojCWg6CdDJtPMpfS6Zwc08+uoxH25tc6Y0= github.com/SigNoz/signoz-otel-collector v0.102.10 h1:1zjU31OcRZL6fS0IIag8LA8bdhP4S28dzovDwuOg7Lg= github.com/SigNoz/signoz-otel-collector v0.102.10/go.mod h1:APoBVD4aRu9vIny1vdzZSi2wPY3elyjHA/I/rh1hKfs= github.com/SigNoz/zap_otlp v0.1.0 h1:T7rRcFN87GavY8lDGZj0Z3Xv6OhJA6Pj3I9dNPmqvRc= @@ -716,8 +714,6 @@ github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/srikanthccv/ClickHouse-go-mock v0.8.0 h1:DeeM8XLbTFl6sjYPPwazPEXx7kmRV8TgPFVkt1SqT0Y= -github.com/srikanthccv/ClickHouse-go-mock v0.8.0/go.mod h1:pgJm+apjvi7FHxEdgw1Bt4MRbUYpVxyhKQ/59Wkig24= github.com/srikanthccv/ClickHouse-go-mock v0.9.0 h1:XKr1Tb7GL1HlifKH874QGR3R6l0e6takXasROUiZawU= github.com/srikanthccv/ClickHouse-go-mock v0.9.0/go.mod h1:pgJm+apjvi7FHxEdgw1Bt4MRbUYpVxyhKQ/59Wkig24= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= diff --git a/pkg/query-service/tests/test-deploy/docker-compose.yaml b/pkg/query-service/tests/test-deploy/docker-compose.yaml index 05c3cddf15..1b4cdf6f0d 100644 --- a/pkg/query-service/tests/test-deploy/docker-compose.yaml +++ b/pkg/query-service/tests/test-deploy/docker-compose.yaml @@ -158,7 +158,7 @@ services: command: [ "-config=/root/config/prometheus.yml", - # "--prefer-delta=true" + "--use-logs-new-schema=true" ] # ports: # - "6060:6060" # pprof port @@ -192,7 +192,7 @@ services: <<: *db-depend otel-collector-migrator: - image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.2} + image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.10} container_name: otel-migrator command: - "--dsn=tcp://clickhouse:9000" @@ -205,7 +205,7 @@ services: # condition: service_healthy otel-collector: - image: signoz/signoz-otel-collector:0.102.2 + image: signoz/signoz-otel-collector:0.102.10 container_name: signoz-otel-collector command: [ diff --git a/pkg/query-service/tests/test-deploy/otel-collector-config.yaml b/pkg/query-service/tests/test-deploy/otel-collector-config.yaml index 589598c383..52f9e2be94 100644 --- a/pkg/query-service/tests/test-deploy/otel-collector-config.yaml +++ b/pkg/query-service/tests/test-deploy/otel-collector-config.yaml @@ -115,6 +115,7 @@ exporters: dsn: tcp://clickhouse:9000/signoz_logs docker_multi_node_cluster: ${DOCKER_MULTI_NODE_CLUSTER} timeout: 10s + use_new_schema: true # logging: {} service: From 1411ae41c357c42a918be81d7f86f7ff8ab62e56 Mon Sep 17 00:00:00 2001 From: Raj Kamal Singh <1133322+raj-k-singh@users.noreply.github.com> Date: Mon, 30 Sep 2024 23:46:34 +0530 Subject: [PATCH 21/50] =?UTF-8?q?Revert=20"Feat:=20use=20new=20logspipelin?= =?UTF-8?q?eprocessor=20for=20generating=20logs=20pipeline=20coll=E2=80=A6?= =?UTF-8?q?"=20(#6099)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit e4d1452f5ff63483b95c913cae37442b286e9aae. --- .../logparsingpipeline/collector_config.go | 67 ++++++++----------- .../collector_config_test.go | 4 +- .../app/logparsingpipeline/preview.go | 4 +- pkg/query-service/constants/constants.go | 4 +- 4 files changed, 33 insertions(+), 46 deletions(-) diff --git a/pkg/query-service/app/logparsingpipeline/collector_config.go b/pkg/query-service/app/logparsingpipeline/collector_config.go index 4b8da7b18a..49f697fbd3 100644 --- a/pkg/query-service/app/logparsingpipeline/collector_config.go +++ b/pkg/query-service/app/logparsingpipeline/collector_config.go @@ -19,28 +19,24 @@ var lockLogsPipelineSpec sync.RWMutex // check if the processors already exist // if yes then update the processor. // if something doesn't exists then remove it. -func updateProcessorConfigsInCollectorConf( - collectorConf map[string]interface{}, - signozPipelineProcessors map[string]interface{}, -) error { +func buildLogParsingProcessors(agentConf, parsingProcessors map[string]interface{}) error { agentProcessors := map[string]interface{}{} - if collectorConf["processors"] != nil { - agentProcessors = (collectorConf["processors"]).(map[string]interface{}) + if agentConf["processors"] != nil { + agentProcessors = (agentConf["processors"]).(map[string]interface{}) } exists := map[string]struct{}{} - for key, params := range signozPipelineProcessors { + for key, params := range parsingProcessors { agentProcessors[key] = params exists[key] = struct{}{} } - // remove the old unwanted pipeline processors + // remove the old unwanted processors for k := range agentProcessors { - _, isInDesiredPipelineProcs := exists[k] - if hasSignozPipelineProcessorPrefix(k) && !isInDesiredPipelineProcs { + if _, ok := exists[k]; !ok && strings.HasPrefix(k, constants.LogsPPLPfx) { delete(agentProcessors, k) } } - collectorConf["processors"] = agentProcessors + agentConf["processors"] = agentProcessors return nil } @@ -69,24 +65,21 @@ func getOtelPipelineFromConfig(config map[string]interface{}) (*otelPipeline, er return &p, nil } -func buildCollectorPipelineProcessorsList( - currentCollectorProcessors []string, - signozPipelineProcessorNames []string, -) ([]string, error) { +func buildLogsProcessors(current []string, logsParserPipeline []string) ([]string, error) { lockLogsPipelineSpec.Lock() defer lockLogsPipelineSpec.Unlock() exists := map[string]struct{}{} - for _, v := range signozPipelineProcessorNames { + for _, v := range logsParserPipeline { exists[v] = struct{}{} } // removed the old processors which are not used var pipeline []string - for _, procName := range currentCollectorProcessors { - _, isInDesiredPipelineProcs := exists[procName] - if isInDesiredPipelineProcs || !hasSignozPipelineProcessorPrefix(procName) { - pipeline = append(pipeline, procName) + for _, v := range current { + k := v + if _, ok := exists[k]; ok || !strings.HasPrefix(k, constants.LogsPPLPfx) { + pipeline = append(pipeline, v) } } @@ -103,7 +96,7 @@ func buildCollectorPipelineProcessorsList( existingVsSpec := map[int]int{} // go through plan and map its elements to current positions in effective config - for i, m := range signozPipelineProcessorNames { + for i, m := range logsParserPipeline { if loc, ok := existing[m]; ok { specVsExistingMap[i] = loc existingVsSpec[loc] = i @@ -113,11 +106,11 @@ func buildCollectorPipelineProcessorsList( lastMatched := 0 newPipeline := []string{} - for i := 0; i < len(signozPipelineProcessorNames); i++ { - m := signozPipelineProcessorNames[i] + for i := 0; i < len(logsParserPipeline); i++ { + m := logsParserPipeline[i] if loc, ok := specVsExistingMap[i]; ok { for j := lastMatched; j < loc; j++ { - if hasSignozPipelineProcessorPrefix(pipeline[j]) { + if strings.HasPrefix(pipeline[j], constants.LogsPPLPfx) { delete(specVsExistingMap, existingVsSpec[j]) } else { newPipeline = append(newPipeline, pipeline[j]) @@ -166,13 +159,13 @@ func GenerateCollectorConfigWithPipelines( config []byte, pipelines []Pipeline, ) ([]byte, *coreModel.ApiError) { - var collectorConf map[string]interface{} - err := yaml.Unmarshal([]byte(config), &collectorConf) + var c map[string]interface{} + err := yaml.Unmarshal([]byte(config), &c) if err != nil { return nil, coreModel.BadRequest(err) } - signozPipelineProcessors, signozPipelineProcNames, err := PreparePipelineProcessor(pipelines) + processors, procNames, err := PreparePipelineProcessor(pipelines) if err != nil { return nil, coreModel.BadRequest(errors.Wrap( err, "could not prepare otel collector processors for log pipelines", @@ -181,8 +174,8 @@ func GenerateCollectorConfigWithPipelines( // Escape any `$`s as `$$` in config generated for pipelines, to ensure any occurrences // like $data do not end up being treated as env vars when loading collector config. - for _, procName := range signozPipelineProcNames { - procConf := signozPipelineProcessors[procName] + for _, procName := range procNames { + procConf := processors[procName] serializedProcConf, err := yaml.Marshal(procConf) if err != nil { return nil, coreModel.InternalError(fmt.Errorf( @@ -201,14 +194,14 @@ func GenerateCollectorConfigWithPipelines( )) } - signozPipelineProcessors[procName] = escapedConf + processors[procName] = escapedConf } // Add processors to unmarshaled collector config `c` - updateProcessorConfigsInCollectorConf(collectorConf, signozPipelineProcessors) + buildLogParsingProcessors(c, processors) // build the new processor list in service.pipelines.logs - p, err := getOtelPipelineFromConfig(collectorConf) + p, err := getOtelPipelineFromConfig(c) if err != nil { return nil, coreModel.BadRequest(err) } @@ -218,20 +211,16 @@ func GenerateCollectorConfigWithPipelines( )) } - updatedProcessorList, _ := buildCollectorPipelineProcessorsList(p.Pipelines.Logs.Processors, signozPipelineProcNames) + updatedProcessorList, _ := buildLogsProcessors(p.Pipelines.Logs.Processors, procNames) p.Pipelines.Logs.Processors = updatedProcessorList // add the new processor to the data ( no checks required as the keys will exists) - collectorConf["service"].(map[string]interface{})["pipelines"].(map[string]interface{})["logs"] = p.Pipelines.Logs + c["service"].(map[string]interface{})["pipelines"].(map[string]interface{})["logs"] = p.Pipelines.Logs - updatedConf, err := yaml.Marshal(collectorConf) + updatedConf, err := yaml.Marshal(c) if err != nil { return nil, coreModel.BadRequest(err) } return updatedConf, nil } - -func hasSignozPipelineProcessorPrefix(procName string) bool { - return strings.HasPrefix(procName, constants.LogsPPLPfx) || strings.HasPrefix(procName, constants.OldLogsPPLPfx) -} diff --git a/pkg/query-service/app/logparsingpipeline/collector_config_test.go b/pkg/query-service/app/logparsingpipeline/collector_config_test.go index 2f2d898416..f5ba7a352b 100644 --- a/pkg/query-service/app/logparsingpipeline/collector_config_test.go +++ b/pkg/query-service/app/logparsingpipeline/collector_config_test.go @@ -94,7 +94,7 @@ var buildProcessorTestData = []struct { func TestBuildLogParsingProcessors(t *testing.T) { for _, test := range buildProcessorTestData { Convey(test.Name, t, func() { - err := updateProcessorConfigsInCollectorConf(test.agentConf, test.pipelineProcessor) + err := buildLogParsingProcessors(test.agentConf, test.pipelineProcessor) So(err, ShouldBeNil) So(test.agentConf, ShouldResemble, test.outputConf) }) @@ -200,7 +200,7 @@ var BuildLogsPipelineTestData = []struct { func TestBuildLogsPipeline(t *testing.T) { for _, test := range BuildLogsPipelineTestData { Convey(test.Name, t, func() { - v, err := buildCollectorPipelineProcessorsList(test.currentPipeline, test.logsPipeline) + v, err := buildLogsProcessors(test.currentPipeline, test.logsPipeline) So(err, ShouldBeNil) fmt.Println(test.Name, "\n", test.currentPipeline, "\n", v, "\n", test.expectedPipeline) So(v, ShouldResemble, test.expectedPipeline) diff --git a/pkg/query-service/app/logparsingpipeline/preview.go b/pkg/query-service/app/logparsingpipeline/preview.go index 548c1ee2f5..b37295eb96 100644 --- a/pkg/query-service/app/logparsingpipeline/preview.go +++ b/pkg/query-service/app/logparsingpipeline/preview.go @@ -7,7 +7,7 @@ import ( "time" _ "github.com/SigNoz/signoz-otel-collector/pkg/parser/grok" - "github.com/SigNoz/signoz-otel-collector/processor/signozlogspipelineprocessor" + "github.com/open-telemetry/opentelemetry-collector-contrib/processor/logstransformprocessor" "github.com/pkg/errors" "go.opentelemetry.io/collector/pdata/pcommon" "go.opentelemetry.io/collector/pdata/plog" @@ -42,7 +42,7 @@ func SimulatePipelinesProcessing( simulatorInputPLogs := SignozLogsToPLogs(logs) processorFactories, err := processor.MakeFactoryMap( - signozlogspipelineprocessor.NewFactory(), + logstransformprocessor.NewFactory(), ) if err != nil { return nil, nil, model.InternalError(errors.Wrap( diff --git a/pkg/query-service/constants/constants.go b/pkg/query-service/constants/constants.go index 541d46d5ca..78ee31e1a1 100644 --- a/pkg/query-service/constants/constants.go +++ b/pkg/query-service/constants/constants.go @@ -341,9 +341,7 @@ var ReservedColumnTargetAliases = map[string]struct{}{ } // logsPPLPfx is a short constant for logsPipelinePrefix -// TODO(Raj): Remove old prefix after new processor based pipelines have been rolled out -const LogsPPLPfx = "signozlogspipeline/pipeline_" -const OldLogsPPLPfx = "logstransform/pipeline_" +const LogsPPLPfx = "logstransform/pipeline_" const IntegrationPipelineIdPrefix = "integration" From 266ed58908402553898cd7571c03d9810a02ba2a Mon Sep 17 00:00:00 2001 From: Shaheer Kochai Date: Tue, 1 Oct 2024 12:17:15 +0430 Subject: [PATCH 22/50] feat: add expand/collapse button to the top in trace details (#5980) * feat: add expand/collapse button to the top in trace details * fix: make the trace details collapsed sidebar match the design * fix: failing test by modifying the expand button class name --- frontend/src/container/AppLayout/index.tsx | 23 +++++++++---------- .../TraceDetail/SelectedSpanDetails/index.tsx | 23 +++++++++++-------- .../TraceDetail/TraceDetails.styles.scss | 6 +++++ frontend/src/container/TraceDetail/index.tsx | 20 +++++++++++----- frontend/src/container/TraceDetail/styles.ts | 2 ++ .../TraceDetail/__test__/TraceDetail.test.tsx | 4 +--- 6 files changed, 47 insertions(+), 31 deletions(-) diff --git a/frontend/src/container/AppLayout/index.tsx b/frontend/src/container/AppLayout/index.tsx index 4f5a3c43d7..9193decd6b 100644 --- a/frontend/src/container/AppLayout/index.tsx +++ b/frontend/src/container/AppLayout/index.tsx @@ -232,19 +232,16 @@ function AppLayout(props: AppLayoutProps): JSX.Element { const isDashboardListView = (): boolean => routeKey === 'ALL_DASHBOARD'; const isAlertHistory = (): boolean => routeKey === 'ALERT_HISTORY'; const isAlertOverview = (): boolean => routeKey === 'ALERT_OVERVIEW'; - const isDashboardView = (): boolean => { - /** - * need to match using regex here as the getRoute function will not work for - * routes with id - */ - const regex = /^\/dashboard\/[a-zA-Z0-9_-]+$/; - return regex.test(pathname); - }; + const isPathMatch = (regex: RegExp): boolean => regex.test(pathname); - const isDashboardWidgetView = (): boolean => { - const regex = /^\/dashboard\/[a-zA-Z0-9_-]+\/new$/; - return regex.test(pathname); - }; + const isDashboardView = (): boolean => + isPathMatch(/^\/dashboard\/[a-zA-Z0-9_-]+$/); + + const isDashboardWidgetView = (): boolean => + isPathMatch(/^\/dashboard\/[a-zA-Z0-9_-]+\/new$/); + + const isTraceDetailsView = (): boolean => + isPathMatch(/^\/trace\/[a-zA-Z0-9]+(\?.*)?$/); useEffect(() => { if (isDarkMode) { @@ -304,6 +301,8 @@ function AppLayout(props: AppLayoutProps): JSX.Element { isMessagingQueues() ? 0 : '0 1rem', + + ...(isTraceDetailsView() ? { marginRight: 0 } : {}), }} > {isToDisplayLayout && !renderFullScreen && } diff --git a/frontend/src/container/TraceDetail/SelectedSpanDetails/index.tsx b/frontend/src/container/TraceDetail/SelectedSpanDetails/index.tsx index 39e180ee12..d8eb1a6972 100644 --- a/frontend/src/container/TraceDetail/SelectedSpanDetails/index.tsx +++ b/frontend/src/container/TraceDetail/SelectedSpanDetails/index.tsx @@ -1,4 +1,4 @@ -import { Button, Modal, Tabs, Tooltip, Typography } from 'antd'; +import { Button, Modal, Row, Tabs, Tooltip, Typography } from 'antd'; import Editor from 'components/Editor'; import { StyledSpace } from 'components/Styled'; import { QueryParams } from 'constants/query'; @@ -6,7 +6,8 @@ import ROUTES from 'constants/routes'; import { useIsDarkMode } from 'hooks/useDarkMode'; import createQueryParams from 'lib/createQueryParams'; import history from 'lib/history'; -import { useState } from 'react'; +import { PanelRight } from 'lucide-react'; +import { Dispatch, SetStateAction, useState } from 'react'; import { useSelector } from 'react-redux'; import { useParams } from 'react-router-dom'; import { AppState } from 'store/reducers'; @@ -28,6 +29,7 @@ function SelectedSpanDetails(props: SelectedSpanDetailsProps): JSX.Element { firstSpanStartTime, traceStartTime = minTime, traceEndTime = maxTime, + setCollapsed, } = props; const { id: traceId } = useParams(); @@ -96,14 +98,14 @@ function SelectedSpanDetails(props: SelectedSpanDetailsProps): JSX.Element { styledclass={[styles.selectedSpanDetailsContainer, styles.overflow]} direction="vertical" > - - Details for selected Span - + + Details for selected Span + diff --git a/frontend/src/container/QueryBuilder/components/Query/Query.tsx b/frontend/src/container/QueryBuilder/components/Query/Query.tsx index 453cf063f8..e35086f3b0 100644 --- a/frontend/src/container/QueryBuilder/components/Query/Query.tsx +++ b/frontend/src/container/QueryBuilder/components/Query/Query.tsx @@ -333,7 +333,7 @@ export const Query = memo(function Query({ const isVersionV4 = version && version === ENTITY_VERSION_V4; return ( - + Date: Mon, 7 Oct 2024 09:57:46 +0430 Subject: [PATCH 35/50] fix: fix incorrect alert history state (#5898) * fix: on unmount remove the alert disabled state * fix: get updated alert state from response and fix the alert state mismatch issue --- .../ActionButtons/ActionButtons.tsx | 27 ++++++++++++++++--- .../AlertDetails/AlertHeader/AlertHeader.tsx | 14 +++------- frontend/src/pages/AlertDetails/hooks.tsx | 20 +++++++------- frontend/src/providers/Alert.tsx | 19 ++++++------- 4 files changed, 45 insertions(+), 35 deletions(-) diff --git a/frontend/src/pages/AlertDetails/AlertHeader/ActionButtons/ActionButtons.tsx b/frontend/src/pages/AlertDetails/AlertHeader/ActionButtons/ActionButtons.tsx index 186a34676b..2f37c4fc9d 100644 --- a/frontend/src/pages/AlertDetails/AlertHeader/ActionButtons/ActionButtons.tsx +++ b/frontend/src/pages/AlertDetails/AlertHeader/ActionButtons/ActionButtons.tsx @@ -15,7 +15,7 @@ import { } from 'pages/AlertDetails/hooks'; import CopyToClipboard from 'periscope/components/CopyToClipboard'; import { useAlertRule } from 'providers/Alert'; -import React from 'react'; +import React, { useEffect, useState } from 'react'; import { CSSProperties } from 'styled-components'; import { AlertDef } from 'types/api/alerts/def'; @@ -32,7 +32,7 @@ function AlertActionButtons({ ruleId: string; alertDetails: AlertHeaderProps['alertDetails']; }): JSX.Element { - const { isAlertRuleDisabled } = useAlertRule(); + const { alertRuleState, setAlertRuleState } = useAlertRule(); const { handleAlertStateToggle } = useAlertRuleStatusToggle({ ruleId }); const { handleAlertDuplicate } = useAlertRuleDuplicate({ @@ -79,13 +79,32 @@ function AlertActionButtons({ ); const isDarkMode = useIsDarkMode(); + // state for immediate UI feedback rather than waiting for onSuccess of handleAlertStateTiggle to updating the alertRuleState + const [isAlertRuleDisabled, setIsAlertRuleDisabled] = useState< + undefined | boolean + >(undefined); + + useEffect(() => { + if (alertRuleState === undefined) { + setAlertRuleState(alertDetails.state); + setIsAlertRuleDisabled(alertDetails.state === 'disabled'); + } + }, [setAlertRuleState, alertRuleState, alertDetails.state]); + + // on unmount remove the alert state + // eslint-disable-next-line react-hooks/exhaustive-deps + useEffect(() => (): void => setAlertRuleState(undefined), []); + return (
- + {isAlertRuleDisabled !== undefined && ( { + setIsAlertRuleDisabled((prev) => !prev); + handleAlertStateToggle(); + }} checked={!isAlertRuleDisabled} /> )} diff --git a/frontend/src/pages/AlertDetails/AlertHeader/AlertHeader.tsx b/frontend/src/pages/AlertDetails/AlertHeader/AlertHeader.tsx index 073b84382b..04edd6a8b0 100644 --- a/frontend/src/pages/AlertDetails/AlertHeader/AlertHeader.tsx +++ b/frontend/src/pages/AlertDetails/AlertHeader/AlertHeader.tsx @@ -2,7 +2,7 @@ import './AlertHeader.styles.scss'; import LineClampedText from 'periscope/components/LineClampedText/LineClampedText'; import { useAlertRule } from 'providers/Alert'; -import { useEffect, useMemo } from 'react'; +import { useMemo } from 'react'; import AlertActionButtons from './ActionButtons/ActionButtons'; import AlertLabels from './AlertLabels/AlertLabels'; @@ -19,7 +19,7 @@ export type AlertHeaderProps = { }; }; function AlertHeader({ alertDetails }: AlertHeaderProps): JSX.Element { - const { state, alert, labels, disabled } = alertDetails; + const { state, alert, labels } = alertDetails; const labelsWithoutSeverity = useMemo( () => @@ -29,20 +29,14 @@ function AlertHeader({ alertDetails }: AlertHeaderProps): JSX.Element { [labels], ); - const { isAlertRuleDisabled, setIsAlertRuleDisabled } = useAlertRule(); - - useEffect(() => { - if (isAlertRuleDisabled === undefined) { - setIsAlertRuleDisabled(disabled); - } - }, [disabled, setIsAlertRuleDisabled, isAlertRuleDisabled]); + const { alertRuleState } = useAlertRule(); return (
- +
diff --git a/frontend/src/pages/AlertDetails/hooks.tsx b/frontend/src/pages/AlertDetails/hooks.tsx index c9257ad47b..da02f10b40 100644 --- a/frontend/src/pages/AlertDetails/hooks.tsx +++ b/frontend/src/pages/AlertDetails/hooks.tsx @@ -161,7 +161,6 @@ export const useGetAlertRuleDetails = (): Props => { id: parseInt(ruleId || '', 10), }), enabled: isValidRuleId, - refetchOnMount: false, refetchOnWindowFocus: false, }); @@ -369,9 +368,9 @@ export const useAlertRuleStatusToggle = ({ }: { ruleId: string; }): { - handleAlertStateToggle: (state: boolean) => void; + handleAlertStateToggle: () => void; } => { - const { isAlertRuleDisabled, setIsAlertRuleDisabled } = useAlertRule(); + const { alertRuleState, setAlertRuleState } = useAlertRule(); const { notifications } = useNotifications(); const queryClient = useQueryClient(); @@ -381,16 +380,17 @@ export const useAlertRuleStatusToggle = ({ [REACT_QUERY_KEY.TOGGLE_ALERT_STATE, ruleId], patchAlert, { - onMutate: () => { - setIsAlertRuleDisabled((prev) => !prev); - }, - onSuccess: () => { + onSuccess: (data) => { + setAlertRuleState(data?.payload?.state); + notifications.success({ - message: `Alert has been ${isAlertRuleDisabled ? 'enabled' : 'disabled'}.`, + message: `Alert has been ${ + data?.payload?.state === 'disabled' ? 'disabled' : 'enabled' + }.`, }); }, onError: (error) => { - queryClient.refetchQueries([REACT_QUERY_KEY.ALERT_RULE_DETAILS]); + queryClient.refetchQueries([REACT_QUERY_KEY.ALERT_RULE_DETAILS, ruleId]); handleError(error); }, }, @@ -399,7 +399,7 @@ export const useAlertRuleStatusToggle = ({ const handleAlertStateToggle = (): void => { const args = { id: parseInt(ruleId, 10), - data: { disabled: !isAlertRuleDisabled }, + data: { disabled: alertRuleState !== 'disabled' }, }; toggleAlertState(args); }; diff --git a/frontend/src/providers/Alert.tsx b/frontend/src/providers/Alert.tsx index 337eec9ba5..328c8e8aee 100644 --- a/frontend/src/providers/Alert.tsx +++ b/frontend/src/providers/Alert.tsx @@ -1,10 +1,8 @@ import React, { createContext, useContext, useState } from 'react'; interface AlertRuleContextType { - isAlertRuleDisabled: boolean | undefined; - setIsAlertRuleDisabled: React.Dispatch< - React.SetStateAction - >; + alertRuleState: string | undefined; + setAlertRuleState: React.Dispatch>; } const AlertRuleContext = createContext( @@ -16,15 +14,14 @@ function AlertRuleProvider({ }: { children: React.ReactNode; }): JSX.Element { - const [isAlertRuleDisabled, setIsAlertRuleDisabled] = useState< - boolean | undefined - >(undefined); - - const value = React.useMemo( - () => ({ isAlertRuleDisabled, setIsAlertRuleDisabled }), - [isAlertRuleDisabled], + const [alertRuleState, setAlertRuleState] = useState( + undefined, ); + const value = React.useMemo(() => ({ alertRuleState, setAlertRuleState }), [ + alertRuleState, + ]); + return ( {children} From ae5e63cc6405f71cc76401cc71a24112c92ca2c0 Mon Sep 17 00:00:00 2001 From: rahulkeswani101 Date: Mon, 7 Oct 2024 12:14:09 +0530 Subject: [PATCH 36/50] fix: updated the triggered alert list code (#6127) --- .../src/container/TriggeredAlerts/Filter.tsx | 18 +++++----- .../TriggeredAlerts/TriggeredAlert.tsx | 20 +++++++---- .../src/container/TriggeredAlerts/index.tsx | 33 +++++++++++++++++-- 3 files changed, 52 insertions(+), 19 deletions(-) diff --git a/frontend/src/container/TriggeredAlerts/Filter.tsx b/frontend/src/container/TriggeredAlerts/Filter.tsx index e7ebdb0d76..b71aa8298b 100644 --- a/frontend/src/container/TriggeredAlerts/Filter.tsx +++ b/frontend/src/container/TriggeredAlerts/Filter.tsx @@ -2,7 +2,7 @@ import type { SelectProps } from 'antd'; import { Tag, Tooltip } from 'antd'; import { BaseOptionType } from 'antd/es/select'; -import { Dispatch, SetStateAction, useCallback, useMemo, useRef } from 'react'; +import { useCallback, useMemo, useRef } from 'react'; import { Alerts } from 'types/api/alerts/getTriggered'; import { Container, Select } from './styles'; @@ -31,8 +31,8 @@ function TextOverflowTooltip({ } function Filter({ - setSelectedFilter, - setSelectedGroup, + onSelectedFilterChange, + onSelectedGroupChange, allAlerts, selectedGroup, selectedFilter, @@ -40,27 +40,27 @@ function Filter({ const onChangeSelectGroupHandler = useCallback( (value: unknown) => { if (typeof value === 'object' && Array.isArray(value)) { - setSelectedGroup( + onSelectedGroupChange( value.map((e) => ({ value: e, })), ); } }, - [setSelectedGroup], + [onSelectedGroupChange], ); const onChangeSelectedFilterHandler = useCallback( (value: unknown) => { if (typeof value === 'object' && Array.isArray(value)) { - setSelectedFilter( + onSelectedFilterChange( value.map((e) => ({ value: e, })), ); } }, - [setSelectedFilter], + [onSelectedFilterChange], ); const uniqueLabels: Array = useMemo(() => { @@ -122,8 +122,8 @@ function Filter({ } interface FilterProps { - setSelectedFilter: Dispatch>>; - setSelectedGroup: Dispatch>>; + onSelectedFilterChange: (value: Array) => void; + onSelectedGroupChange: (value: Array) => void; allAlerts: Alerts[]; selectedGroup: Array; selectedFilter: Array; diff --git a/frontend/src/container/TriggeredAlerts/TriggeredAlert.tsx b/frontend/src/container/TriggeredAlerts/TriggeredAlert.tsx index 18d40b7a4b..24e4a3ef39 100644 --- a/frontend/src/container/TriggeredAlerts/TriggeredAlert.tsx +++ b/frontend/src/container/TriggeredAlerts/TriggeredAlert.tsx @@ -1,4 +1,3 @@ -import { useState } from 'react'; import { Alerts } from 'types/api/alerts/getTriggered'; import Filter, { Value } from './Filter'; @@ -6,18 +5,21 @@ import FilteredTable from './FilteredTable'; import NoFilterTable from './NoFilterTable'; import { NoTableContainer } from './styles'; -function TriggeredAlerts({ allAlerts }: TriggeredAlertsProps): JSX.Element { - const [selectedGroup, setSelectedGroup] = useState([]); - const [selectedFilter, setSelectedFilter] = useState([]); - +function TriggeredAlerts({ + allAlerts, + selectedFilter, + selectedGroup, + onSelectedFilterChange, + onSelectedGroupChange, +}: TriggeredAlertsProps): JSX.Element { return (
{selectedFilter.length === 0 && selectedGroup.length === 0 ? ( @@ -45,6 +47,10 @@ function TriggeredAlerts({ allAlerts }: TriggeredAlertsProps): JSX.Element { interface TriggeredAlertsProps { allAlerts: Alerts[]; + selectedFilter: Array; + selectedGroup: Array; + onSelectedFilterChange: (value: Array) => void; + onSelectedGroupChange: (value: Array) => void; } export default TriggeredAlerts; diff --git a/frontend/src/container/TriggeredAlerts/index.tsx b/frontend/src/container/TriggeredAlerts/index.tsx index d76945edd5..0dd8641e84 100644 --- a/frontend/src/container/TriggeredAlerts/index.tsx +++ b/frontend/src/container/TriggeredAlerts/index.tsx @@ -4,14 +4,17 @@ import Spinner from 'components/Spinner'; import { REACT_QUERY_KEY } from 'constants/reactQueryKeys'; import useAxiosError from 'hooks/useAxiosError'; import { isUndefined } from 'lodash-es'; -import { useEffect, useRef } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; import { useQuery } from 'react-query'; import { useSelector } from 'react-redux'; import { AppState } from 'store/reducers'; +import { Value } from './Filter'; import TriggerComponent from './TriggeredAlert'; function TriggeredAlerts(): JSX.Element { + const [selectedGroup, setSelectedGroup] = useState([]); + const [selectedFilter, setSelectedFilter] = useState([]); const userId = useSelector( (state) => state.app.user?.userId, ); @@ -34,6 +37,14 @@ function TriggeredAlerts(): JSX.Element { }, ); + const handleSelectedFilterChange = useCallback((newFilter: Value[]) => { + setSelectedFilter(newFilter); + }, []); + + const handleSelectedGroupChange = useCallback((newGroup: Value[]) => { + setSelectedGroup(newGroup); + }, []); + useEffect(() => { if (!hasLoggedEvent.current && !isUndefined(alertsResponse.data?.payload)) { logEvent('Alert: Triggered alert list page visited', { @@ -44,14 +55,30 @@ function TriggeredAlerts(): JSX.Element { }, [alertsResponse.data?.payload]); if (alertsResponse.error) { - return ; + return ( + + ); } if (alertsResponse.isFetching || alertsResponse?.data?.payload === undefined) { return ; } - return ; + return ( + + ); } export default TriggeredAlerts; From 76e7de3aeda1f40c11d04f79e5973966b1c21789 Mon Sep 17 00:00:00 2001 From: Sergei Zobov Date: Mon, 7 Oct 2024 14:54:50 +0200 Subject: [PATCH 37/50] docker setup: docker compose without testing app (#5839) I preserved the existing interfaces, so: `docker compose -f docker/clickhouse-setup/docker-compose.yaml up -d`, would run the same set of services (with the testing app). The interface that was added is: `docker compose -f docker/clickhouse-setup/docker-compose-minimal.yaml up -d`, which won't run testing app. --- .../clickhouse-setup/docker-compose-core.yaml | 29 +- .../docker-compose-minimal.yaml | 279 ++++++++++++++++ .../docker-compose.testing.yaml | 29 +- .../clickhouse-setup/docker-compose.yaml | 310 +----------------- .../test-app-docker-compose.yaml | 26 ++ 5 files changed, 314 insertions(+), 359 deletions(-) create mode 100644 deploy/docker/clickhouse-setup/docker-compose-minimal.yaml create mode 100644 deploy/docker/clickhouse-setup/test-app-docker-compose.yaml diff --git a/deploy/docker/clickhouse-setup/docker-compose-core.yaml b/deploy/docker/clickhouse-setup/docker-compose-core.yaml index 7a2bcdfa75..5309d80cb9 100644 --- a/deploy/docker/clickhouse-setup/docker-compose-core.yaml +++ b/deploy/docker/clickhouse-setup/docker-compose-core.yaml @@ -1,5 +1,8 @@ version: "2.4" +include: + - test-app-docker-compose.yaml + services: zookeeper-1: image: bitnami/zookeeper:3.7.1 @@ -128,29 +131,3 @@ services: depends_on: - otel-collector restart: on-failure - - hotrod: - image: jaegertracing/example-hotrod:1.30 - container_name: hotrod - logging: - options: - max-size: 50m - max-file: "3" - command: [ "all" ] - environment: - - JAEGER_ENDPOINT=http://otel-collector:14268/api/traces - - load-hotrod: - image: "signoz/locust:1.2.3" - container_name: load-hotrod - hostname: load-hotrod - environment: - ATTACKED_HOST: http://hotrod:8080 - LOCUST_MODE: standalone - NO_PROXY: standalone - TASK_DELAY_FROM: 5 - TASK_DELAY_TO: 30 - QUIET_MODE: "${QUIET_MODE:-false}" - LOCUST_OPTS: "--headless -u 10 -r 1" - volumes: - - ../common/locust-scripts:/locust diff --git a/deploy/docker/clickhouse-setup/docker-compose-minimal.yaml b/deploy/docker/clickhouse-setup/docker-compose-minimal.yaml new file mode 100644 index 0000000000..508ba58030 --- /dev/null +++ b/deploy/docker/clickhouse-setup/docker-compose-minimal.yaml @@ -0,0 +1,279 @@ +x-clickhouse-defaults: &clickhouse-defaults + restart: on-failure + # addding non LTS version due to this fix https://github.com/ClickHouse/ClickHouse/commit/32caf8716352f45c1b617274c7508c86b7d1afab + image: clickhouse/clickhouse-server:24.1.2-alpine + tty: true + depends_on: + - zookeeper-1 + # - zookeeper-2 + # - zookeeper-3 + logging: + options: + max-size: 50m + max-file: "3" + healthcheck: + # "clickhouse", "client", "-u ${CLICKHOUSE_USER}", "--password ${CLICKHOUSE_PASSWORD}", "-q 'SELECT 1'" + test: + [ + "CMD", + "wget", + "--spider", + "-q", + "0.0.0.0:8123/ping" + ] + interval: 30s + timeout: 5s + retries: 3 + ulimits: + nproc: 65535 + nofile: + soft: 262144 + hard: 262144 + +x-db-depend: &db-depend + depends_on: + clickhouse: + condition: service_healthy + otel-collector-migrator: + condition: service_completed_successfully + # clickhouse-2: + # condition: service_healthy + # clickhouse-3: + # condition: service_healthy + +services: + + zookeeper-1: + image: bitnami/zookeeper:3.7.1 + container_name: signoz-zookeeper-1 + hostname: zookeeper-1 + user: root + ports: + - "2181:2181" + - "2888:2888" + - "3888:3888" + volumes: + - ./data/zookeeper-1:/bitnami/zookeeper + environment: + - ZOO_SERVER_ID=1 + # - ZOO_SERVERS=0.0.0.0:2888:3888,zookeeper-2:2888:3888,zookeeper-3:2888:3888 + - ALLOW_ANONYMOUS_LOGIN=yes + - ZOO_AUTOPURGE_INTERVAL=1 + + # zookeeper-2: + # image: bitnami/zookeeper:3.7.0 + # container_name: signoz-zookeeper-2 + # hostname: zookeeper-2 + # user: root + # ports: + # - "2182:2181" + # - "2889:2888" + # - "3889:3888" + # volumes: + # - ./data/zookeeper-2:/bitnami/zookeeper + # environment: + # - ZOO_SERVER_ID=2 + # - ZOO_SERVERS=zookeeper-1:2888:3888,0.0.0.0:2888:3888,zookeeper-3:2888:3888 + # - ALLOW_ANONYMOUS_LOGIN=yes + # - ZOO_AUTOPURGE_INTERVAL=1 + + # zookeeper-3: + # image: bitnami/zookeeper:3.7.0 + # container_name: signoz-zookeeper-3 + # hostname: zookeeper-3 + # user: root + # ports: + # - "2183:2181" + # - "2890:2888" + # - "3890:3888" + # volumes: + # - ./data/zookeeper-3:/bitnami/zookeeper + # environment: + # - ZOO_SERVER_ID=3 + # - ZOO_SERVERS=zookeeper-1:2888:3888,zookeeper-2:2888:3888,0.0.0.0:2888:3888 + # - ALLOW_ANONYMOUS_LOGIN=yes + # - ZOO_AUTOPURGE_INTERVAL=1 + + clickhouse: + <<: *clickhouse-defaults + container_name: signoz-clickhouse + hostname: clickhouse + ports: + - "9000:9000" + - "8123:8123" + - "9181:9181" + volumes: + - ./clickhouse-config.xml:/etc/clickhouse-server/config.xml + - ./clickhouse-users.xml:/etc/clickhouse-server/users.xml + - ./custom-function.xml:/etc/clickhouse-server/custom-function.xml + - ./clickhouse-cluster.xml:/etc/clickhouse-server/config.d/cluster.xml + # - ./clickhouse-storage.xml:/etc/clickhouse-server/config.d/storage.xml + - ./data/clickhouse/:/var/lib/clickhouse/ + - ./user_scripts:/var/lib/clickhouse/user_scripts/ + + # clickhouse-2: + # <<: *clickhouse-defaults + # container_name: signoz-clickhouse-2 + # hostname: clickhouse-2 + # ports: + # - "9001:9000" + # - "8124:8123" + # - "9182:9181" + # volumes: + # - ./clickhouse-config.xml:/etc/clickhouse-server/config.xml + # - ./clickhouse-users.xml:/etc/clickhouse-server/users.xml + # - ./custom-function.xml:/etc/clickhouse-server/custom-function.xml + # - ./clickhouse-cluster.xml:/etc/clickhouse-server/config.d/cluster.xml + # # - ./clickhouse-storage.xml:/etc/clickhouse-server/config.d/storage.xml + # - ./data/clickhouse-2/:/var/lib/clickhouse/ + # - ./user_scripts:/var/lib/clickhouse/user_scripts/ + + + # clickhouse-3: + # <<: *clickhouse-defaults + # container_name: signoz-clickhouse-3 + # hostname: clickhouse-3 + # ports: + # - "9002:9000" + # - "8125:8123" + # - "9183:9181" + # volumes: + # - ./clickhouse-config.xml:/etc/clickhouse-server/config.xml + # - ./clickhouse-users.xml:/etc/clickhouse-server/users.xml + # - ./custom-function.xml:/etc/clickhouse-server/custom-function.xml + # - ./clickhouse-cluster.xml:/etc/clickhouse-server/config.d/cluster.xml + # # - ./clickhouse-storage.xml:/etc/clickhouse-server/config.d/storage.xml + # - ./data/clickhouse-3/:/var/lib/clickhouse/ + # - ./user_scripts:/var/lib/clickhouse/user_scripts/ + + alertmanager: + image: signoz/alertmanager:${ALERTMANAGER_TAG:-0.23.5} + container_name: signoz-alertmanager + volumes: + - ./data/alertmanager:/data + depends_on: + query-service: + condition: service_healthy + restart: on-failure + command: + - --queryService.url=http://query-service:8085 + - --storage.path=/data + + # Notes for Maintainers/Contributors who will change Line Numbers of Frontend & Query-Section. Please Update Line Numbers in `./scripts/commentLinesForSetup.sh` & `./CONTRIBUTING.md` + + query-service: + image: signoz/query-service:${DOCKER_TAG:-0.55.0} + container_name: signoz-query-service + command: + [ + "-config=/root/config/prometheus.yml", + "--use-logs-new-schema=true" + ] + # ports: + # - "6060:6060" # pprof port + # - "8080:8080" # query-service port + volumes: + - ./prometheus.yml:/root/config/prometheus.yml + - ../dashboards:/root/config/dashboards + - ./data/signoz/:/var/lib/signoz/ + environment: + - ClickHouseUrl=tcp://clickhouse:9000 + - ALERTMANAGER_API_PREFIX=http://alertmanager:9093/api/ + - SIGNOZ_LOCAL_DB_PATH=/var/lib/signoz/signoz.db + - DASHBOARDS_PATH=/root/config/dashboards + - STORAGE=clickhouse + - GODEBUG=netdns=go + - TELEMETRY_ENABLED=true + - DEPLOYMENT_TYPE=docker-standalone-amd + restart: on-failure + healthcheck: + test: + [ + "CMD", + "wget", + "--spider", + "-q", + "localhost:8080/api/v1/health" + ] + interval: 30s + timeout: 5s + retries: 3 + <<: *db-depend + + frontend: + image: signoz/frontend:${DOCKER_TAG:-0.55.0} + container_name: signoz-frontend + restart: on-failure + depends_on: + - alertmanager + - query-service + ports: + - "3301:3301" + volumes: + - ../common/nginx-config.conf:/etc/nginx/conf.d/default.conf + + otel-collector-migrator: + image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.10} + container_name: otel-migrator + command: + - "--dsn=tcp://clickhouse:9000" + depends_on: + clickhouse: + condition: service_healthy + # clickhouse-2: + # condition: service_healthy + # clickhouse-3: + # condition: service_healthy + + + otel-collector: + image: signoz/signoz-otel-collector:${OTELCOL_TAG:-0.102.10} + container_name: signoz-otel-collector + command: + [ + "--config=/etc/otel-collector-config.yaml", + "--manager-config=/etc/manager-config.yaml", + "--copy-path=/var/tmp/collector-config.yaml", + "--feature-gates=-pkg.translator.prometheus.NormalizeName" + ] + user: root # required for reading docker container logs + volumes: + - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml + - ./otel-collector-opamp-config.yaml:/etc/manager-config.yaml + - /var/lib/docker/containers:/var/lib/docker/containers:ro + - /:/hostfs:ro + environment: + - OTEL_RESOURCE_ATTRIBUTES=host.name=signoz-host,os.type=linux + - DOCKER_MULTI_NODE_CLUSTER=false + - LOW_CARDINAL_EXCEPTION_GROUPING=false + ports: + # - "1777:1777" # pprof extension + - "4317:4317" # OTLP gRPC receiver + - "4318:4318" # OTLP HTTP receiver + # - "8888:8888" # OtelCollector internal metrics + # - "8889:8889" # signoz spanmetrics exposed by the agent + # - "9411:9411" # Zipkin port + # - "13133:13133" # health check extension + # - "14250:14250" # Jaeger gRPC + # - "14268:14268" # Jaeger thrift HTTP + # - "55678:55678" # OpenCensus receiver + # - "55679:55679" # zPages extension + restart: on-failure + depends_on: + clickhouse: + condition: service_healthy + otel-collector-migrator: + condition: service_completed_successfully + query-service: + condition: service_healthy + + logspout: + image: "gliderlabs/logspout:v3.2.14" + container_name: signoz-logspout + volumes: + - /etc/hostname:/etc/host_hostname:ro + - /var/run/docker.sock:/var/run/docker.sock + command: syslog+tcp://otel-collector:2255 + depends_on: + - otel-collector + restart: on-failure diff --git a/deploy/docker/clickhouse-setup/docker-compose.testing.yaml b/deploy/docker/clickhouse-setup/docker-compose.testing.yaml index 174f0914a9..bfdd578dcc 100644 --- a/deploy/docker/clickhouse-setup/docker-compose.testing.yaml +++ b/deploy/docker/clickhouse-setup/docker-compose.testing.yaml @@ -1,5 +1,8 @@ version: "2.4" +include: + - test-app-docker-compose.yaml + x-clickhouse-defaults: &clickhouse-defaults restart: on-failure # addding non LTS version due to this fix https://github.com/ClickHouse/ClickHouse/commit/32caf8716352f45c1b617274c7508c86b7d1afab @@ -280,29 +283,3 @@ services: depends_on: - otel-collector restart: on-failure - - hotrod: - image: jaegertracing/example-hotrod:1.30 - container_name: hotrod - logging: - options: - max-size: 50m - max-file: "3" - command: [ "all" ] - environment: - - JAEGER_ENDPOINT=http://otel-collector:14268/api/traces - - load-hotrod: - image: "signoz/locust:1.2.3" - container_name: load-hotrod - hostname: load-hotrod - environment: - ATTACKED_HOST: http://hotrod:8080 - LOCUST_MODE: standalone - NO_PROXY: standalone - TASK_DELAY_FROM: 5 - TASK_DELAY_TO: 30 - QUIET_MODE: "${QUIET_MODE:-false}" - LOCUST_OPTS: "--headless -u 10 -r 1" - volumes: - - ../common/locust-scripts:/locust diff --git a/deploy/docker/clickhouse-setup/docker-compose.yaml b/deploy/docker/clickhouse-setup/docker-compose.yaml index 0c333899aa..251ca25344 100644 --- a/deploy/docker/clickhouse-setup/docker-compose.yaml +++ b/deploy/docker/clickhouse-setup/docker-compose.yaml @@ -1,307 +1,3 @@ -version: "2.4" - -x-clickhouse-defaults: &clickhouse-defaults - restart: on-failure - # addding non LTS version due to this fix https://github.com/ClickHouse/ClickHouse/commit/32caf8716352f45c1b617274c7508c86b7d1afab - image: clickhouse/clickhouse-server:24.1.2-alpine - tty: true - depends_on: - - zookeeper-1 - # - zookeeper-2 - # - zookeeper-3 - logging: - options: - max-size: 50m - max-file: "3" - healthcheck: - # "clickhouse", "client", "-u ${CLICKHOUSE_USER}", "--password ${CLICKHOUSE_PASSWORD}", "-q 'SELECT 1'" - test: - [ - "CMD", - "wget", - "--spider", - "-q", - "0.0.0.0:8123/ping" - ] - interval: 30s - timeout: 5s - retries: 3 - ulimits: - nproc: 65535 - nofile: - soft: 262144 - hard: 262144 - -x-db-depend: &db-depend - depends_on: - clickhouse: - condition: service_healthy - otel-collector-migrator: - condition: service_completed_successfully - # clickhouse-2: - # condition: service_healthy - # clickhouse-3: - # condition: service_healthy - -services: - - zookeeper-1: - image: bitnami/zookeeper:3.7.1 - container_name: signoz-zookeeper-1 - hostname: zookeeper-1 - user: root - ports: - - "2181:2181" - - "2888:2888" - - "3888:3888" - volumes: - - ./data/zookeeper-1:/bitnami/zookeeper - environment: - - ZOO_SERVER_ID=1 - # - ZOO_SERVERS=0.0.0.0:2888:3888,zookeeper-2:2888:3888,zookeeper-3:2888:3888 - - ALLOW_ANONYMOUS_LOGIN=yes - - ZOO_AUTOPURGE_INTERVAL=1 - - # zookeeper-2: - # image: bitnami/zookeeper:3.7.0 - # container_name: signoz-zookeeper-2 - # hostname: zookeeper-2 - # user: root - # ports: - # - "2182:2181" - # - "2889:2888" - # - "3889:3888" - # volumes: - # - ./data/zookeeper-2:/bitnami/zookeeper - # environment: - # - ZOO_SERVER_ID=2 - # - ZOO_SERVERS=zookeeper-1:2888:3888,0.0.0.0:2888:3888,zookeeper-3:2888:3888 - # - ALLOW_ANONYMOUS_LOGIN=yes - # - ZOO_AUTOPURGE_INTERVAL=1 - - # zookeeper-3: - # image: bitnami/zookeeper:3.7.0 - # container_name: signoz-zookeeper-3 - # hostname: zookeeper-3 - # user: root - # ports: - # - "2183:2181" - # - "2890:2888" - # - "3890:3888" - # volumes: - # - ./data/zookeeper-3:/bitnami/zookeeper - # environment: - # - ZOO_SERVER_ID=3 - # - ZOO_SERVERS=zookeeper-1:2888:3888,zookeeper-2:2888:3888,0.0.0.0:2888:3888 - # - ALLOW_ANONYMOUS_LOGIN=yes - # - ZOO_AUTOPURGE_INTERVAL=1 - - clickhouse: - <<: *clickhouse-defaults - container_name: signoz-clickhouse - hostname: clickhouse - ports: - - "9000:9000" - - "8123:8123" - - "9181:9181" - volumes: - - ./clickhouse-config.xml:/etc/clickhouse-server/config.xml - - ./clickhouse-users.xml:/etc/clickhouse-server/users.xml - - ./custom-function.xml:/etc/clickhouse-server/custom-function.xml - - ./clickhouse-cluster.xml:/etc/clickhouse-server/config.d/cluster.xml - # - ./clickhouse-storage.xml:/etc/clickhouse-server/config.d/storage.xml - - ./data/clickhouse/:/var/lib/clickhouse/ - - ./user_scripts:/var/lib/clickhouse/user_scripts/ - - # clickhouse-2: - # <<: *clickhouse-defaults - # container_name: signoz-clickhouse-2 - # hostname: clickhouse-2 - # ports: - # - "9001:9000" - # - "8124:8123" - # - "9182:9181" - # volumes: - # - ./clickhouse-config.xml:/etc/clickhouse-server/config.xml - # - ./clickhouse-users.xml:/etc/clickhouse-server/users.xml - # - ./custom-function.xml:/etc/clickhouse-server/custom-function.xml - # - ./clickhouse-cluster.xml:/etc/clickhouse-server/config.d/cluster.xml - # # - ./clickhouse-storage.xml:/etc/clickhouse-server/config.d/storage.xml - # - ./data/clickhouse-2/:/var/lib/clickhouse/ - # - ./user_scripts:/var/lib/clickhouse/user_scripts/ - - - # clickhouse-3: - # <<: *clickhouse-defaults - # container_name: signoz-clickhouse-3 - # hostname: clickhouse-3 - # ports: - # - "9002:9000" - # - "8125:8123" - # - "9183:9181" - # volumes: - # - ./clickhouse-config.xml:/etc/clickhouse-server/config.xml - # - ./clickhouse-users.xml:/etc/clickhouse-server/users.xml - # - ./custom-function.xml:/etc/clickhouse-server/custom-function.xml - # - ./clickhouse-cluster.xml:/etc/clickhouse-server/config.d/cluster.xml - # # - ./clickhouse-storage.xml:/etc/clickhouse-server/config.d/storage.xml - # - ./data/clickhouse-3/:/var/lib/clickhouse/ - # - ./user_scripts:/var/lib/clickhouse/user_scripts/ - - alertmanager: - image: signoz/alertmanager:${ALERTMANAGER_TAG:-0.23.5} - container_name: signoz-alertmanager - volumes: - - ./data/alertmanager:/data - depends_on: - query-service: - condition: service_healthy - restart: on-failure - command: - - --queryService.url=http://query-service:8085 - - --storage.path=/data - - # Notes for Maintainers/Contributors who will change Line Numbers of Frontend & Query-Section. Please Update Line Numbers in `./scripts/commentLinesForSetup.sh` & `./CONTRIBUTING.md` - - query-service: - image: signoz/query-service:${DOCKER_TAG:-0.55.0} - container_name: signoz-query-service - command: - [ - "-config=/root/config/prometheus.yml", - "--use-logs-new-schema=true" - ] - # ports: - # - "6060:6060" # pprof port - # - "8080:8080" # query-service port - volumes: - - ./prometheus.yml:/root/config/prometheus.yml - - ../dashboards:/root/config/dashboards - - ./data/signoz/:/var/lib/signoz/ - environment: - - ClickHouseUrl=tcp://clickhouse:9000 - - ALERTMANAGER_API_PREFIX=http://alertmanager:9093/api/ - - SIGNOZ_LOCAL_DB_PATH=/var/lib/signoz/signoz.db - - DASHBOARDS_PATH=/root/config/dashboards - - STORAGE=clickhouse - - GODEBUG=netdns=go - - TELEMETRY_ENABLED=true - - DEPLOYMENT_TYPE=docker-standalone-amd - restart: on-failure - healthcheck: - test: - [ - "CMD", - "wget", - "--spider", - "-q", - "localhost:8080/api/v1/health" - ] - interval: 30s - timeout: 5s - retries: 3 - <<: *db-depend - - frontend: - image: signoz/frontend:${DOCKER_TAG:-0.55.0} - container_name: signoz-frontend - restart: on-failure - depends_on: - - alertmanager - - query-service - ports: - - "3301:3301" - volumes: - - ../common/nginx-config.conf:/etc/nginx/conf.d/default.conf - - otel-collector-migrator: - image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.10} - container_name: otel-migrator - command: - - "--dsn=tcp://clickhouse:9000" - depends_on: - clickhouse: - condition: service_healthy - # clickhouse-2: - # condition: service_healthy - # clickhouse-3: - # condition: service_healthy - - - otel-collector: - image: signoz/signoz-otel-collector:${OTELCOL_TAG:-0.102.10} - container_name: signoz-otel-collector - command: - [ - "--config=/etc/otel-collector-config.yaml", - "--manager-config=/etc/manager-config.yaml", - "--copy-path=/var/tmp/collector-config.yaml", - "--feature-gates=-pkg.translator.prometheus.NormalizeName" - ] - user: root # required for reading docker container logs - volumes: - - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml - - ./otel-collector-opamp-config.yaml:/etc/manager-config.yaml - - /var/lib/docker/containers:/var/lib/docker/containers:ro - - /:/hostfs:ro - environment: - - OTEL_RESOURCE_ATTRIBUTES=host.name=signoz-host,os.type=linux - - DOCKER_MULTI_NODE_CLUSTER=false - - LOW_CARDINAL_EXCEPTION_GROUPING=false - ports: - # - "1777:1777" # pprof extension - - "4317:4317" # OTLP gRPC receiver - - "4318:4318" # OTLP HTTP receiver - # - "8888:8888" # OtelCollector internal metrics - # - "8889:8889" # signoz spanmetrics exposed by the agent - # - "9411:9411" # Zipkin port - # - "13133:13133" # health check extension - # - "14250:14250" # Jaeger gRPC - # - "14268:14268" # Jaeger thrift HTTP - # - "55678:55678" # OpenCensus receiver - # - "55679:55679" # zPages extension - restart: on-failure - depends_on: - clickhouse: - condition: service_healthy - otel-collector-migrator: - condition: service_completed_successfully - query-service: - condition: service_healthy - - logspout: - image: "gliderlabs/logspout:v3.2.14" - container_name: signoz-logspout - volumes: - - /etc/hostname:/etc/host_hostname:ro - - /var/run/docker.sock:/var/run/docker.sock - command: syslog+tcp://otel-collector:2255 - depends_on: - - otel-collector - restart: on-failure - - hotrod: - image: jaegertracing/example-hotrod:1.30 - container_name: hotrod - logging: - options: - max-size: 50m - max-file: "3" - command: [ "all" ] - environment: - - JAEGER_ENDPOINT=http://otel-collector:14268/api/traces - - load-hotrod: - image: "signoz/locust:1.2.3" - container_name: load-hotrod - hostname: load-hotrod - environment: - ATTACKED_HOST: http://hotrod:8080 - LOCUST_MODE: standalone - NO_PROXY: standalone - TASK_DELAY_FROM: 5 - TASK_DELAY_TO: 30 - QUIET_MODE: "${QUIET_MODE:-false}" - LOCUST_OPTS: "--headless -u 10 -r 1" - volumes: - - ../common/locust-scripts:/locust +include: + - test-app-docker-compose.yaml + - docker-compose-minimal.yaml diff --git a/deploy/docker/clickhouse-setup/test-app-docker-compose.yaml b/deploy/docker/clickhouse-setup/test-app-docker-compose.yaml new file mode 100644 index 0000000000..c043d75d74 --- /dev/null +++ b/deploy/docker/clickhouse-setup/test-app-docker-compose.yaml @@ -0,0 +1,26 @@ +services: + hotrod: + image: jaegertracing/example-hotrod:1.30 + container_name: hotrod + logging: + options: + max-size: 50m + max-file: "3" + command: [ "all" ] + environment: + - JAEGER_ENDPOINT=http://otel-collector:14268/api/traces + + load-hotrod: + image: "signoz/locust:1.2.3" + container_name: load-hotrod + hostname: load-hotrod + environment: + ATTACKED_HOST: http://hotrod:8080 + LOCUST_MODE: standalone + NO_PROXY: standalone + TASK_DELAY_FROM: 5 + TASK_DELAY_TO: 30 + QUIET_MODE: "${QUIET_MODE:-false}" + LOCUST_OPTS: "--headless -u 10 -r 1" + volumes: + - ../common/locust-scripts:/locust From 4356ddae8c678c8017c7b59c6390d6376c1d486f Mon Sep 17 00:00:00 2001 From: Srikanth Chekuri Date: Tue, 8 Oct 2024 13:33:33 +0530 Subject: [PATCH 38/50] chore: keep anomaly response sync with v4 query range (#6113) --- ee/query-service/app/api/queryrange.go | 9 ++++----- pkg/query-service/model/v3/v3.go | 1 - 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/ee/query-service/app/api/queryrange.go b/ee/query-service/app/api/queryrange.go index d4f3eb975a..f5ad490ed5 100644 --- a/ee/query-service/app/api/queryrange.go +++ b/ee/query-service/app/api/queryrange.go @@ -106,12 +106,11 @@ func (aH *APIHandler) queryRangeV4(w http.ResponseWriter, r *http.Request) { RespondError(w, &model.ApiError{Typ: model.ErrorInternal, Err: err}, nil) return } - uniqueResults := make(map[string]*v3.Result) - for _, anomaly := range anomalies.Results { - uniqueResults[anomaly.QueryName] = anomaly - uniqueResults[anomaly.QueryName].IsAnomaly = true + resp := v3.QueryRangeResponse{ + Result: anomalies.Results, + ResultType: "anomaly", } - aH.Respond(w, uniqueResults) + aH.Respond(w, resp) } else { r.Body = io.NopCloser(bytes.NewBuffer(bodyBytes)) aH.QueryRangeV4(w, r) diff --git a/pkg/query-service/model/v3/v3.go b/pkg/query-service/model/v3/v3.go index 2d99118533..9770df4108 100644 --- a/pkg/query-service/model/v3/v3.go +++ b/pkg/query-service/model/v3/v3.go @@ -1158,7 +1158,6 @@ type Result struct { AnomalyScores []*Series `json:"anomalyScores,omitempty"` List []*Row `json:"list,omitempty"` Table *Table `json:"table,omitempty"` - IsAnomaly bool `json:"isAnomaly,omitempty"` } type Series struct { From 4aeed392d761fc2de7d46e45198f2fd165e53f17 Mon Sep 17 00:00:00 2001 From: Srikanth Chekuri Date: Tue, 8 Oct 2024 19:35:38 +0530 Subject: [PATCH 39/50] chore: do not materialize ttl after modify (#6106) --- .../app/clickhouseReader/reader.go | 69 +++++++++++++------ 1 file changed, 49 insertions(+), 20 deletions(-) diff --git a/pkg/query-service/app/clickhouseReader/reader.go b/pkg/query-service/app/clickhouseReader/reader.go index b3aee7ca60..58852611c9 100644 --- a/pkg/query-service/app/clickhouseReader/reader.go +++ b/pkg/query-service/app/clickhouseReader/reader.go @@ -53,21 +53,31 @@ import ( ) const ( - primaryNamespace = "clickhouse" - archiveNamespace = "clickhouse-archive" - signozTraceDBName = "signoz_traces" - signozHistoryDBName = "signoz_analytics" - ruleStateHistoryTableName = "distributed_rule_state_history_v0" - signozDurationMVTable = "distributed_durationSort" - signozUsageExplorerTable = "distributed_usage_explorer" - signozSpansTable = "distributed_signoz_spans" - signozErrorIndexTable = "distributed_signoz_error_index_v2" - signozTraceTableName = "distributed_signoz_index_v2" - signozTraceLocalTableName = "signoz_index_v2" - signozMetricDBName = "signoz_metrics" + primaryNamespace = "clickhouse" + archiveNamespace = "clickhouse-archive" + signozTraceDBName = "signoz_traces" + signozHistoryDBName = "signoz_analytics" + ruleStateHistoryTableName = "distributed_rule_state_history_v0" + signozDurationMVTable = "distributed_durationSort" + signozUsageExplorerTable = "distributed_usage_explorer" + signozSpansTable = "distributed_signoz_spans" + signozErrorIndexTable = "distributed_signoz_error_index_v2" + signozTraceTableName = "distributed_signoz_index_v2" + signozTraceLocalTableName = "signoz_index_v2" + signozMetricDBName = "signoz_metrics" + signozSampleLocalTableName = "samples_v4" signozSampleTableName = "distributed_samples_v4" + signozSamplesAgg5mLocalTableName = "samples_v4_agg_5m" + signozSamplesAgg5mTableName = "distributed_samples_v4_agg_5m" + + signozSamplesAgg30mLocalTableName = "samples_v4_agg_30m" + signozSamplesAgg30mTableName = "distributed_samples_v4_agg_30m" + + signozExpHistLocalTableName = "exp_hist" + signozExpHistTableName = "distributed_exp_hist" + signozTSLocalTableNameV4 = "time_series_v4" signozTSTableNameV4 = "distributed_time_series_v4" @@ -77,6 +87,9 @@ const ( signozTSLocalTableNameV41Day = "time_series_v4_1day" signozTSTableNameV41Day = "distributed_time_series_v4_1day" + signozTSLocalTableNameV41Week = "time_series_v4_1week" + signozTSTableNameV41Week = "distributed_time_series_v4_1week" + minTimespanForProgressiveSearch = time.Hour minTimespanForProgressiveSearchMargin = time.Minute maxProgressiveSteps = 4 @@ -2115,8 +2128,15 @@ func (r *ClickHouseReader) SetTTL(ctx context.Context, switch params.Type { case constants.TraceTTL: - tableNameArray := []string{signozTraceDBName + "." + signozTraceTableName, signozTraceDBName + "." + signozDurationMVTable, signozTraceDBName + "." + signozSpansTable, signozTraceDBName + "." + signozErrorIndexTable, signozTraceDBName + "." + signozUsageExplorerTable, signozTraceDBName + "." + defaultDependencyGraphTable} - for _, tableName := range tableNameArray { + tableNames := []string{ + signozTraceDBName + "." + signozTraceTableName, + signozTraceDBName + "." + signozDurationMVTable, + signozTraceDBName + "." + signozSpansTable, + signozTraceDBName + "." + signozErrorIndexTable, + signozTraceDBName + "." + signozUsageExplorerTable, + signozTraceDBName + "." + defaultDependencyGraphTable, + } + for _, tableName := range tableNames { tableName := getLocalTableName(tableName) statusItem, err := r.checkTTLStatusItem(ctx, tableName) if err != nil { @@ -2126,7 +2146,7 @@ func (r *ClickHouseReader) SetTTL(ctx context.Context, return nil, &model.ApiError{Typ: model.ErrorConflict, Err: fmt.Errorf("TTL is already running")} } } - for _, tableName := range tableNameArray { + for _, tableName := range tableNames { tableName := getLocalTableName(tableName) // TODO: DB queries should be implemented with transactional statements but currently clickhouse doesn't support them. Issue: https://github.com/ClickHouse/ClickHouse/issues/22086 go func(tableName string) { @@ -2155,7 +2175,7 @@ func (r *ClickHouseReader) SetTTL(ctx context.Context, } return } - req += " SETTINGS distributed_ddl_task_timeout = -1;" + req += " SETTINGS materialize_ttl_after_modify=0;" zap.L().Error("Executing TTL request: ", zap.String("request", req)) statusItem, _ := r.checkTTLStatusItem(ctx, tableName) if err := r.db.Exec(context.Background(), req); err != nil { @@ -2176,7 +2196,16 @@ func (r *ClickHouseReader) SetTTL(ctx context.Context, } case constants.MetricsTTL: - tableNames := []string{signozMetricDBName + "." + signozSampleLocalTableName, signozMetricDBName + "." + signozTSLocalTableNameV4, signozMetricDBName + "." + signozTSLocalTableNameV46Hrs, signozMetricDBName + "." + signozTSLocalTableNameV41Day} + tableNames := []string{ + signozMetricDBName + "." + signozSampleLocalTableName, + signozMetricDBName + "." + signozSamplesAgg5mLocalTableName, + signozMetricDBName + "." + signozSamplesAgg30mLocalTableName, + signozMetricDBName + "." + signozExpHistLocalTableName, + signozMetricDBName + "." + signozTSLocalTableNameV4, + signozMetricDBName + "." + signozTSLocalTableNameV46Hrs, + signozMetricDBName + "." + signozTSLocalTableNameV41Day, + signozMetricDBName + "." + signozTSLocalTableNameV41Week, + } for _, tableName := range tableNames { statusItem, err := r.checkTTLStatusItem(ctx, tableName) if err != nil { @@ -2193,7 +2222,7 @@ func (r *ClickHouseReader) SetTTL(ctx context.Context, return } timeColumn := "timestamp_ms" - if strings.Contains(tableName, "v4") { + if strings.Contains(tableName, "v4") || strings.Contains(tableName, "exp_hist") { timeColumn = "unix_milli" } @@ -2218,7 +2247,7 @@ func (r *ClickHouseReader) SetTTL(ctx context.Context, } return } - req += " SETTINGS distributed_ddl_task_timeout = -1" + req += " SETTINGS materialize_ttl_after_modify=0" zap.L().Info("Executing TTL request: ", zap.String("request", req)) statusItem, _ := r.checkTTLStatusItem(ctx, tableName) if err := r.db.Exec(ctx, req); err != nil { @@ -2279,7 +2308,7 @@ func (r *ClickHouseReader) SetTTL(ctx context.Context, } return } - req += " SETTINGS distributed_ddl_task_timeout = -1" + req += " SETTINGS materialize_ttl_after_modify=0" zap.L().Info("Executing TTL request: ", zap.String("request", req)) statusItem, _ := r.checkTTLStatusItem(ctx, tableName) if err := r.db.Exec(ctx, req); err != nil { From f1ce82ac254979588fa666e8850e91e09deddb55 Mon Sep 17 00:00:00 2001 From: Shaheer Kochai Date: Wed, 9 Oct 2024 09:29:44 +0430 Subject: [PATCH 40/50] feat: client side query builder search (#5891) * feat: build client side QB search * feat: query builder light mode support + overall UI improvements * fix: preserve the alert rule labels in context * feat: get labels and all possible values from /timeline API * chore: remove unnecessary dropdownRender and optional fields from AttributeKey * chore: merge the styles of .tag * chore: use the correct type for attributeKeys * chore: use the correct values for alert rule state in the context --- .../ClientSideQBSearch.styles.scss | 5 + .../ClientSideQBSearch/ClientSideQBSearch.tsx | 654 ++++++++++++++++++ .../Timeline/Table/Table.styles.scss | 4 +- .../AlertHistory/Timeline/Table/Table.tsx | 17 +- .../Timeline/Table/useTimelineTable.tsx | 79 ++- .../QueryBuilderSearchV2.styles.scss | 2 +- .../Suggestions.styles.scss | 5 + .../container/QueryBuilder/filters/utils.ts | 18 + .../AlertHeader/AlertLabels/AlertLabels.tsx | 2 +- frontend/src/pages/AlertDetails/hooks.tsx | 10 +- frontend/src/providers/Alert.tsx | 10 +- frontend/src/types/api/alerts/def.ts | 7 +- 12 files changed, 796 insertions(+), 17 deletions(-) create mode 100644 frontend/src/components/ClientSideQBSearch/ClientSideQBSearch.styles.scss create mode 100644 frontend/src/components/ClientSideQBSearch/ClientSideQBSearch.tsx diff --git a/frontend/src/components/ClientSideQBSearch/ClientSideQBSearch.styles.scss b/frontend/src/components/ClientSideQBSearch/ClientSideQBSearch.styles.scss new file mode 100644 index 0000000000..bb1fa9678c --- /dev/null +++ b/frontend/src/components/ClientSideQBSearch/ClientSideQBSearch.styles.scss @@ -0,0 +1,5 @@ +.client-side-qb-search { + .ant-select-selection-search { + width: max-content !important; + } +} diff --git a/frontend/src/components/ClientSideQBSearch/ClientSideQBSearch.tsx b/frontend/src/components/ClientSideQBSearch/ClientSideQBSearch.tsx new file mode 100644 index 0000000000..1a6d501ff6 --- /dev/null +++ b/frontend/src/components/ClientSideQBSearch/ClientSideQBSearch.tsx @@ -0,0 +1,654 @@ +/* eslint-disable sonarjs/cognitive-complexity */ + +import './ClientSideQBSearch.styles.scss'; + +import { Color } from '@signozhq/design-tokens'; +import { Select, Tag, Tooltip } from 'antd'; +import { + OPERATORS, + QUERY_BUILDER_OPERATORS_BY_TYPES, + QUERY_BUILDER_SEARCH_VALUES, +} from 'constants/queryBuilder'; +import { CustomTagProps } from 'container/QueryBuilder/filters/QueryBuilderSearch'; +import { selectStyle } from 'container/QueryBuilder/filters/QueryBuilderSearch/config'; +import { PLACEHOLDER } from 'container/QueryBuilder/filters/QueryBuilderSearch/constant'; +import { TypographyText } from 'container/QueryBuilder/filters/QueryBuilderSearch/style'; +import { + checkCommaInValue, + getOperatorFromValue, + getOperatorValue, + getTagToken, + isInNInOperator, +} from 'container/QueryBuilder/filters/QueryBuilderSearch/utils'; +import { + DropdownState, + ITag, + Option, +} from 'container/QueryBuilder/filters/QueryBuilderSearchV2/QueryBuilderSearchV2'; +import Suggestions from 'container/QueryBuilder/filters/QueryBuilderSearchV2/Suggestions'; +import { WhereClauseConfig } from 'hooks/queryBuilder/useAutoComplete'; +import { validationMapper } from 'hooks/queryBuilder/useIsValidTag'; +import { operatorTypeMapper } from 'hooks/queryBuilder/useOperatorType'; +import { useIsDarkMode } from 'hooks/useDarkMode'; +import { isArray, isEmpty, isEqual, isObject } from 'lodash-es'; +import { ChevronDown, ChevronUp } from 'lucide-react'; +import type { BaseSelectRef } from 'rc-select'; +import { + KeyboardEvent, + useCallback, + useEffect, + useMemo, + useRef, + useState, +} from 'react'; +import { + BaseAutocompleteData, + DataTypes, +} from 'types/api/queryBuilder/queryAutocompleteResponse'; +import { + IBuilderQuery, + TagFilter, +} from 'types/api/queryBuilder/queryBuilderData'; +import { popupContainer } from 'utils/selectPopupContainer'; +import { v4 as uuid } from 'uuid'; + +export interface AttributeKey { + key: string; +} + +export interface AttributeValuesMap { + [key: string]: AttributeValue; +} + +interface ClientSideQBSearchProps { + filters: TagFilter; + onChange: (value: TagFilter) => void; + whereClauseConfig?: WhereClauseConfig; + placeholder?: string; + className?: string; + suffixIcon?: React.ReactNode; + attributeValuesMap?: AttributeValuesMap; + attributeKeys: AttributeKey[]; +} + +interface AttributeValue { + stringAttributeValues: string[] | []; + numberAttributeValues: number[] | []; + boolAttributeValues: boolean[] | []; +} + +function ClientSideQBSearch( + props: ClientSideQBSearchProps, +): React.ReactElement { + const { + onChange, + placeholder, + className, + suffixIcon, + whereClauseConfig, + attributeValuesMap, + attributeKeys, + filters, + } = props; + + const isDarkMode = useIsDarkMode(); + + const selectRef = useRef(null); + + const [isOpen, setIsOpen] = useState(false); + + // create the tags from the initial query here, this should only be computed on the first load as post that tags and query will be always in sync. + const [tags, setTags] = useState(filters.items as ITag[]); + + // this will maintain the current state of in process filter item + const [currentFilterItem, setCurrentFilterItem] = useState(); + + const [currentState, setCurrentState] = useState( + DropdownState.ATTRIBUTE_KEY, + ); + + // to maintain the current running state until the tokenization happens for the tag + const [searchValue, setSearchValue] = useState(''); + + const [dropdownOptions, setDropdownOptions] = useState([]); + + const attributeValues = useMemo(() => { + if (currentFilterItem?.key?.key) { + return attributeValuesMap?.[currentFilterItem.key.key]; + } + return { + stringAttributeValues: [], + numberAttributeValues: [], + boolAttributeValues: [], + }; + }, [attributeValuesMap, currentFilterItem?.key?.key]); + + const handleDropdownSelect = useCallback( + (value: string) => { + let parsedValue: BaseAutocompleteData | string; + + try { + parsedValue = JSON.parse(value); + } catch { + parsedValue = value; + } + if (currentState === DropdownState.ATTRIBUTE_KEY) { + setCurrentFilterItem((prev) => ({ + ...prev, + key: parsedValue as BaseAutocompleteData, + op: '', + value: '', + })); + setCurrentState(DropdownState.OPERATOR); + setSearchValue((parsedValue as BaseAutocompleteData)?.key); + } else if (currentState === DropdownState.OPERATOR) { + if (value === OPERATORS.EXISTS || value === OPERATORS.NOT_EXISTS) { + setTags((prev) => [ + ...prev, + { + key: currentFilterItem?.key, + op: value, + value: '', + } as ITag, + ]); + setCurrentFilterItem(undefined); + setSearchValue(''); + setCurrentState(DropdownState.ATTRIBUTE_KEY); + } else { + setCurrentFilterItem((prev) => ({ + key: prev?.key as BaseAutocompleteData, + op: value as string, + value: '', + })); + setCurrentState(DropdownState.ATTRIBUTE_VALUE); + setSearchValue(`${currentFilterItem?.key?.key} ${value}`); + } + } else if (currentState === DropdownState.ATTRIBUTE_VALUE) { + const operatorType = + operatorTypeMapper[currentFilterItem?.op || ''] || 'NOT_VALID'; + const isMulti = operatorType === QUERY_BUILDER_SEARCH_VALUES.MULTIPLY; + + if (isMulti) { + const { tagKey, tagOperator, tagValue } = getTagToken(searchValue); + // this condition takes care of adding the IN/NIN multi values when pressed enter on an already existing value. + // not the best interaction but in sync with what we have today! + if (tagValue.includes(String(value))) { + setSearchValue(''); + setCurrentState(DropdownState.ATTRIBUTE_KEY); + setCurrentFilterItem(undefined); + setTags((prev) => [ + ...prev, + { + key: currentFilterItem?.key, + op: currentFilterItem?.op, + value: tagValue, + } as ITag, + ]); + return; + } + // this is for adding subsequent comma seperated values + const newSearch = [...tagValue]; + newSearch[newSearch.length === 0 ? 0 : newSearch.length - 1] = value; + const newSearchValue = newSearch.join(','); + setSearchValue(`${tagKey} ${tagOperator} ${newSearchValue},`); + } else { + setSearchValue(''); + setCurrentState(DropdownState.ATTRIBUTE_KEY); + setCurrentFilterItem(undefined); + setTags((prev) => [ + ...prev, + { + key: currentFilterItem?.key, + op: currentFilterItem?.op, + value, + } as ITag, + ]); + } + } + }, + [currentFilterItem?.key, currentFilterItem?.op, currentState, searchValue], + ); + + const handleSearch = useCallback((value: string) => { + setSearchValue(value); + }, []); + + const onInputKeyDownHandler = useCallback( + (event: KeyboardEvent): void => { + if (event.key === 'Backspace' && !searchValue) { + event.stopPropagation(); + setTags((prev) => prev.slice(0, -1)); + } + }, + [searchValue], + ); + + const handleOnBlur = useCallback((): void => { + if (searchValue) { + const operatorType = + operatorTypeMapper[currentFilterItem?.op || ''] || 'NOT_VALID'; + // if key is added and operator is not present then convert to body CONTAINS key + if ( + currentFilterItem?.key && + isEmpty(currentFilterItem?.op) && + whereClauseConfig?.customKey === 'body' && + whereClauseConfig?.customOp === OPERATORS.CONTAINS + ) { + setTags((prev) => [ + ...prev, + { + key: { + key: 'body', + dataType: DataTypes.String, + type: '', + isColumn: true, + isJSON: false, + id: 'body--string----true', + }, + op: OPERATORS.CONTAINS, + value: currentFilterItem?.key?.key, + }, + ]); + setCurrentFilterItem(undefined); + setSearchValue(''); + setCurrentState(DropdownState.ATTRIBUTE_KEY); + } else if ( + currentFilterItem?.op === OPERATORS.EXISTS || + currentFilterItem?.op === OPERATORS.NOT_EXISTS + ) { + // is exists and not exists operator is present then convert directly to tag! no need of value here + setTags((prev) => [ + ...prev, + { + key: currentFilterItem?.key, + op: currentFilterItem?.op, + value: '', + }, + ]); + setCurrentFilterItem(undefined); + setSearchValue(''); + setCurrentState(DropdownState.ATTRIBUTE_KEY); + } else if ( + // if the current state is in sync with the kind of operator used then convert into a tag + validationMapper[operatorType]?.( + isArray(currentFilterItem?.value) + ? currentFilterItem?.value.length || 0 + : 1, + ) + ) { + setTags((prev) => [ + ...prev, + { + key: currentFilterItem?.key as BaseAutocompleteData, + op: currentFilterItem?.op as string, + value: currentFilterItem?.value || '', + }, + ]); + setCurrentFilterItem(undefined); + setSearchValue(''); + setCurrentState(DropdownState.ATTRIBUTE_KEY); + } + } + }, [ + currentFilterItem?.key, + currentFilterItem?.op, + currentFilterItem?.value, + searchValue, + whereClauseConfig?.customKey, + whereClauseConfig?.customOp, + ]); + + // this useEffect takes care of tokenisation based on the search state + useEffect(() => { + // if there is no search value reset to the default state + if (!searchValue) { + setCurrentFilterItem(undefined); + setCurrentState(DropdownState.ATTRIBUTE_KEY); + } + + // split the current search value based on delimiters + const { tagKey, tagOperator, tagValue } = getTagToken(searchValue); + + if ( + // Case 1 - if key is defined but the search text doesn't match with the set key, + // can happen when user selects from dropdown and then deletes a few characters + currentFilterItem?.key && + currentFilterItem?.key?.key !== tagKey.split(' ')[0] + ) { + setCurrentFilterItem(undefined); + setCurrentState(DropdownState.ATTRIBUTE_KEY); + } else if (tagOperator && isEmpty(currentFilterItem?.op)) { + // Case 2 -> key is set and now typing for the operator + if ( + tagOperator === OPERATORS.EXISTS || + tagOperator === OPERATORS.NOT_EXISTS + ) { + setTags((prev) => [ + ...prev, + { + key: currentFilterItem?.key, + op: tagOperator, + value: '', + } as ITag, + ]); + setCurrentFilterItem(undefined); + setSearchValue(''); + setCurrentState(DropdownState.ATTRIBUTE_KEY); + } else { + setCurrentFilterItem((prev) => ({ + key: prev?.key as BaseAutocompleteData, + op: tagOperator, + value: '', + })); + + setCurrentState(DropdownState.ATTRIBUTE_VALUE); + } + } else if ( + // Case 3 -> selected operator from dropdown and then erased a part of it + !isEmpty(currentFilterItem?.op) && + tagOperator !== currentFilterItem?.op + ) { + setCurrentFilterItem((prev) => ({ + key: prev?.key as BaseAutocompleteData, + op: '', + value: '', + })); + setCurrentState(DropdownState.OPERATOR); + } else if (currentState === DropdownState.ATTRIBUTE_VALUE) { + // Case 4 -> the final value state where we set the current filter values and the tokenisation happens on either + // dropdown click or blur event + const currentValue = { + key: currentFilterItem?.key as BaseAutocompleteData, + op: currentFilterItem?.op as string, + value: tagValue, + }; + if (!isEqual(currentValue, currentFilterItem)) { + setCurrentFilterItem((prev) => ({ + key: prev?.key as BaseAutocompleteData, + op: prev?.op as string, + value: tagValue, + })); + } + } + }, [ + currentFilterItem, + currentFilterItem?.key, + currentFilterItem?.op, + searchValue, + currentState, + ]); + + // the useEffect takes care of setting the dropdown values correctly on change of the current state + useEffect(() => { + if (currentState === DropdownState.ATTRIBUTE_KEY) { + const filteredAttributeKeys = attributeKeys.filter((key) => + key.key.startsWith(searchValue), + ); + setDropdownOptions( + filteredAttributeKeys?.map( + (key) => + ({ + label: key.key, + value: key, + } as Option), + ) || [], + ); + } + if (currentState === DropdownState.OPERATOR) { + const keyOperator = searchValue.split(' '); + const partialOperator = keyOperator?.[1]; + const strippedKey = keyOperator?.[0]; + + let operatorOptions; + if (currentFilterItem?.key?.dataType) { + operatorOptions = QUERY_BUILDER_OPERATORS_BY_TYPES[ + currentFilterItem.key + .dataType as keyof typeof QUERY_BUILDER_OPERATORS_BY_TYPES + ].map((operator) => ({ + label: operator, + value: operator, + })); + + if (partialOperator) { + operatorOptions = operatorOptions.filter((op) => + op.label.startsWith(partialOperator.toLocaleUpperCase()), + ); + } + setDropdownOptions(operatorOptions); + } else if (strippedKey.endsWith('[*]') && strippedKey.startsWith('body.')) { + operatorOptions = [OPERATORS.HAS, OPERATORS.NHAS].map((operator) => ({ + label: operator, + value: operator, + })); + setDropdownOptions(operatorOptions); + } else { + operatorOptions = QUERY_BUILDER_OPERATORS_BY_TYPES.universal.map( + (operator) => ({ + label: operator, + value: operator, + }), + ); + + if (partialOperator) { + operatorOptions = operatorOptions.filter((op) => + op.label.startsWith(partialOperator.toLocaleUpperCase()), + ); + } + setDropdownOptions(operatorOptions); + } + } + + if (currentState === DropdownState.ATTRIBUTE_VALUE) { + const values: Array = []; + const { tagValue } = getTagToken(searchValue); + if (isArray(tagValue)) { + if (!isEmpty(tagValue[tagValue.length - 1])) + values.push(tagValue[tagValue.length - 1]); + } else if (!isEmpty(tagValue)) values.push(tagValue); + + const currentAttributeValues = + attributeValues?.stringAttributeValues || + attributeValues?.numberAttributeValues || + attributeValues?.boolAttributeValues || + []; + + values.push(...currentAttributeValues); + + if (attributeValuesMap) { + setDropdownOptions( + values.map( + (val) => + ({ + label: checkCommaInValue(String(val)), + value: val, + } as Option), + ), + ); + } else { + // If attributeValuesMap is not provided, don't set dropdown options + setDropdownOptions([]); + } + } + }, [ + attributeValues, + currentFilterItem?.key?.dataType, + currentState, + attributeKeys, + searchValue, + attributeValuesMap, + ]); + + useEffect(() => { + const filterTags: IBuilderQuery['filters'] = { + op: 'AND', + items: [], + }; + tags.forEach((tag) => { + const computedTagValue = + tag.value && + Array.isArray(tag.value) && + tag.value[tag.value.length - 1] === '' + ? tag.value?.slice(0, -1) + : tag.value ?? ''; + filterTags.items.push({ + id: tag.id || uuid().slice(0, 8), + key: tag.key, + op: getOperatorValue(tag.op), + value: computedTagValue, + }); + }); + + if (!isEqual(filters, filterTags)) { + onChange(filterTags); + setTags( + filterTags.items.map((tag) => ({ + ...tag, + op: getOperatorFromValue(tag.op), + })) as ITag[], + ); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [tags]); + + const queryTags = useMemo( + () => tags.map((tag) => `${tag.key.key} ${tag.op} ${tag.value}`), + [tags], + ); + + const onTagRender = ({ + value, + closable, + onClose, + }: CustomTagProps): React.ReactElement => { + const { tagOperator } = getTagToken(value); + const isInNin = isInNInOperator(tagOperator); + const chipValue = isInNin + ? value?.trim()?.replace(/,\s*$/, '') + : value?.trim(); + + const indexInQueryTags = queryTags.findIndex((qTag) => isEqual(qTag, value)); + const tagDetails = tags[indexInQueryTags]; + + const onCloseHandler = (): void => { + onClose(); + setSearchValue(''); + setTags((prev) => prev.filter((t) => !isEqual(t, tagDetails))); + }; + + const tagEditHandler = (value: string): void => { + setCurrentFilterItem(tagDetails); + setSearchValue(value); + setCurrentState(DropdownState.ATTRIBUTE_VALUE); + setTags((prev) => prev.filter((t) => !isEqual(t, tagDetails))); + }; + + const isDisabled = !!searchValue; + + return ( + + + + { + if (!isDisabled) tagEditHandler(value); + }} + > + {chipValue} + + + + + ); + }; + + const suffixIconContent = useMemo(() => { + if (suffixIcon) { + return suffixIcon; + } + return isOpen ? ( + + ) : ( + + ); + }, [isDarkMode, isOpen, suffixIcon]); + + return ( +
+ +
+ ); +} + +ClientSideQBSearch.defaultProps = { + placeholder: PLACEHOLDER, + className: '', + suffixIcon: null, + whereClauseConfig: {}, + attributeValuesMap: {}, +}; + +export default ClientSideQBSearch; diff --git a/frontend/src/container/AlertHistory/Timeline/Table/Table.styles.scss b/frontend/src/container/AlertHistory/Timeline/Table/Table.styles.scss index 26e2266ef6..5a143dd1b8 100644 --- a/frontend/src/container/AlertHistory/Timeline/Table/Table.styles.scss +++ b/frontend/src/container/AlertHistory/Timeline/Table/Table.styles.scss @@ -109,8 +109,8 @@ } .alert-rule { - &-value, - &-created-at { + &__value, + &__created-at { color: var(--text-ink-400); } } diff --git a/frontend/src/container/AlertHistory/Timeline/Table/Table.tsx b/frontend/src/container/AlertHistory/Timeline/Table/Table.tsx index f3144b88e6..be5c7ae9c3 100644 --- a/frontend/src/container/AlertHistory/Timeline/Table/Table.tsx +++ b/frontend/src/container/AlertHistory/Timeline/Table/Table.tsx @@ -1,16 +1,20 @@ import './Table.styles.scss'; import { Table } from 'antd'; +import { initialFilters } from 'constants/queryBuilder'; import { useGetAlertRuleDetailsTimelineTable, useTimelineTable, } from 'pages/AlertDetails/hooks'; -import { useMemo } from 'react'; +import { useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; +import { TagFilter } from 'types/api/queryBuilder/queryBuilderData'; import { timelineTableColumns } from './useTimelineTable'; function TimelineTable(): JSX.Element { + const [filters, setFilters] = useState(initialFilters); + const { isLoading, isRefetching, @@ -18,13 +22,14 @@ function TimelineTable(): JSX.Element { data, isValidRuleId, ruleId, - } = useGetAlertRuleDetailsTimelineTable(); + } = useGetAlertRuleDetailsTimelineTable({ filters }); - const { timelineData, totalItems } = useMemo(() => { + const { timelineData, totalItems, labels } = useMemo(() => { const response = data?.payload?.data; return { timelineData: response?.items, totalItems: response?.total, + labels: response?.labels, }; }, [data?.payload?.data]); @@ -42,7 +47,11 @@ function TimelineTable(): JSX.Element {
`${row.fingerprint}-${row.value}-${row.unixMilli}`} - columns={timelineTableColumns()} + columns={timelineTableColumns({ + filters, + labels: labels ?? {}, + setFilters, + })} dataSource={timelineData} pagination={paginationConfig} size="middle" diff --git a/frontend/src/container/AlertHistory/Timeline/Table/useTimelineTable.tsx b/frontend/src/container/AlertHistory/Timeline/Table/useTimelineTable.tsx index 1eb43fc417..5c67caa984 100644 --- a/frontend/src/container/AlertHistory/Timeline/Table/useTimelineTable.tsx +++ b/frontend/src/container/AlertHistory/Timeline/Table/useTimelineTable.tsx @@ -1,13 +1,84 @@ import { EllipsisOutlined } from '@ant-design/icons'; +import { Color } from '@signozhq/design-tokens'; import { Button } from 'antd'; import { ColumnsType } from 'antd/es/table'; +import ClientSideQBSearch, { + AttributeKey, +} from 'components/ClientSideQBSearch/ClientSideQBSearch'; import { ConditionalAlertPopover } from 'container/AlertHistory/AlertPopover/AlertPopover'; -import AlertLabels from 'pages/AlertDetails/AlertHeader/AlertLabels/AlertLabels'; +import { transformKeyValuesToAttributeValuesMap } from 'container/QueryBuilder/filters/utils'; +import { useIsDarkMode } from 'hooks/useDarkMode'; +import { Search } from 'lucide-react'; +import AlertLabels, { + AlertLabelsProps, +} from 'pages/AlertDetails/AlertHeader/AlertLabels/AlertLabels'; import AlertState from 'pages/AlertDetails/AlertHeader/AlertState/AlertState'; +import { useMemo } from 'react'; import { AlertRuleTimelineTableResponse } from 'types/api/alerts/def'; +import { TagFilter } from 'types/api/queryBuilder/queryBuilderData'; import { formatEpochTimestamp } from 'utils/timeUtils'; -export const timelineTableColumns = (): ColumnsType => [ +const transformLabelsToQbKeys = ( + labels: AlertRuleTimelineTableResponse['labels'], +): AttributeKey[] => Object.keys(labels).flatMap((key) => [{ key }]); + +function LabelFilter({ + filters, + setFilters, + labels, +}: { + setFilters: (filters: TagFilter) => void; + filters: TagFilter; + labels: AlertLabelsProps['labels']; +}): JSX.Element | null { + const isDarkMode = useIsDarkMode(); + + const { transformedKeys, attributesMap } = useMemo( + () => ({ + transformedKeys: transformLabelsToQbKeys(labels || {}), + attributesMap: transformKeyValuesToAttributeValuesMap(labels), + }), + [labels], + ); + + const handleSearch = (tagFilters: TagFilter): void => { + const tagFiltersLength = tagFilters.items.length; + + if ( + (!tagFiltersLength && (!filters || !filters.items.length)) || + tagFiltersLength === filters?.items.length + ) { + return; + } + setFilters(tagFilters); + }; + + return ( + + } + /> + ); +} + +export const timelineTableColumns = ({ + filters, + labels, + setFilters, +}: { + filters: TagFilter; + labels: AlertLabelsProps['labels']; + setFilters: (filters: TagFilter) => void; +}): ColumnsType => [ { title: 'STATE', dataIndex: 'state', @@ -20,7 +91,9 @@ export const timelineTableColumns = (): ColumnsType + ), dataIndex: 'labels', render: (labels): JSX.Element => (
diff --git a/frontend/src/container/QueryBuilder/filters/QueryBuilderSearchV2/QueryBuilderSearchV2.styles.scss b/frontend/src/container/QueryBuilder/filters/QueryBuilderSearchV2/QueryBuilderSearchV2.styles.scss index 624546fed5..7aee4f9414 100644 --- a/frontend/src/container/QueryBuilder/filters/QueryBuilderSearchV2/QueryBuilderSearchV2.styles.scss +++ b/frontend/src/container/QueryBuilder/filters/QueryBuilderSearchV2/QueryBuilderSearchV2.styles.scss @@ -334,8 +334,8 @@ .qb-search-bar-tokenised-tags { .ant-tag { - border: 1px solid var(--bg-slate-100); background: var(--bg-vanilla-300); + border: 1px solid var(--bg-slate-100); box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.1); .ant-typography { diff --git a/frontend/src/container/QueryBuilder/filters/QueryBuilderSearchV2/Suggestions.styles.scss b/frontend/src/container/QueryBuilder/filters/QueryBuilderSearchV2/Suggestions.styles.scss index 153f32e5ee..1b434316e5 100644 --- a/frontend/src/container/QueryBuilder/filters/QueryBuilderSearchV2/Suggestions.styles.scss +++ b/frontend/src/container/QueryBuilder/filters/QueryBuilderSearchV2/Suggestions.styles.scss @@ -13,6 +13,7 @@ width: 5px; border-radius: 50%; background-color: var(--bg-slate-300); + flex-shrink: 0; } .option { @@ -207,6 +208,10 @@ background: var(--bg-vanilla-300); } } + + .value { + color: var(--bg-ink-100); + } } } .option:hover { diff --git a/frontend/src/container/QueryBuilder/filters/utils.ts b/frontend/src/container/QueryBuilder/filters/utils.ts index 7e4c12d9d0..ff52e7cb70 100644 --- a/frontend/src/container/QueryBuilder/filters/utils.ts +++ b/frontend/src/container/QueryBuilder/filters/utils.ts @@ -1,3 +1,4 @@ +import { AttributeValuesMap } from 'components/ClientSideQBSearch/ClientSideQBSearch'; import { HAVING_FILTER_REGEXP } from 'constants/regExp'; import { IOption } from 'hooks/useResourceAttribute/types'; import uniqWith from 'lodash-es/unionWith'; @@ -92,3 +93,20 @@ export const getValidOrderByResult = (result: IOption[]): IOption[] => return acc; }, []); + +export const transformKeyValuesToAttributeValuesMap = ( + attributeValuesMap: Record, +): AttributeValuesMap => + Object.fromEntries( + Object.entries(attributeValuesMap || {}).map(([key, values]) => [ + key, + { + stringAttributeValues: + typeof values[0] === 'string' ? (values as string[]) : [], + numberAttributeValues: + typeof values[0] === 'number' ? (values as number[]) : [], + boolAttributeValues: + typeof values[0] === 'boolean' ? (values as boolean[]) : [], + }, + ]), + ); diff --git a/frontend/src/pages/AlertDetails/AlertHeader/AlertLabels/AlertLabels.tsx b/frontend/src/pages/AlertDetails/AlertHeader/AlertLabels/AlertLabels.tsx index bdc5eaa019..4386417219 100644 --- a/frontend/src/pages/AlertDetails/AlertHeader/AlertLabels/AlertLabels.tsx +++ b/frontend/src/pages/AlertDetails/AlertHeader/AlertLabels/AlertLabels.tsx @@ -4,7 +4,7 @@ import KeyValueLabel from 'periscope/components/KeyValueLabel'; import SeeMore from 'periscope/components/SeeMore'; // eslint-disable-next-line @typescript-eslint/no-explicit-any -type AlertLabelsProps = { +export type AlertLabelsProps = { labels: Record; initialCount?: number; }; diff --git a/frontend/src/pages/AlertDetails/hooks.tsx b/frontend/src/pages/AlertDetails/hooks.tsx index da02f10b40..8a630a6374 100644 --- a/frontend/src/pages/AlertDetails/hooks.tsx +++ b/frontend/src/pages/AlertDetails/hooks.tsx @@ -43,6 +43,7 @@ import { AlertRuleTopContributorsPayload, } from 'types/api/alerts/def'; import { PayloadProps } from 'types/api/alerts/get'; +import { TagFilter } from 'types/api/queryBuilder/queryBuilderData'; import { nanoToMilli } from 'utils/timeUtils'; export const useAlertHistoryQueryParams = (): { @@ -249,7 +250,11 @@ type GetAlertRuleDetailsTimelineTableProps = GetAlertRuleDetailsApiProps & { | undefined; }; -export const useGetAlertRuleDetailsTimelineTable = (): GetAlertRuleDetailsTimelineTableProps => { +export const useGetAlertRuleDetailsTimelineTable = ({ + filters, +}: { + filters: TagFilter; +}): GetAlertRuleDetailsTimelineTableProps => { const { ruleId, startTime, endTime, params } = useAlertHistoryQueryParams(); const { updatedOrder, offset } = useMemo( () => ({ @@ -273,6 +278,7 @@ export const useGetAlertRuleDetailsTimelineTable = (): GetAlertRuleDetailsTimeli timelineFilter, updatedOrder, offset, + JSON.stringify(filters.items), ], { queryFn: () => @@ -283,7 +289,7 @@ export const useGetAlertRuleDetailsTimelineTable = (): GetAlertRuleDetailsTimeli limit: TIMELINE_TABLE_PAGE_SIZE, order: updatedOrder, offset, - + filters, ...(timelineFilter && timelineFilter !== TimelineFilter.ALL ? { state: timelineFilter === TimelineFilter.FIRED ? 'firing' : 'normal', diff --git a/frontend/src/providers/Alert.tsx b/frontend/src/providers/Alert.tsx index 328c8e8aee..50b6584491 100644 --- a/frontend/src/providers/Alert.tsx +++ b/frontend/src/providers/Alert.tsx @@ -18,9 +18,13 @@ function AlertRuleProvider({ undefined, ); - const value = React.useMemo(() => ({ alertRuleState, setAlertRuleState }), [ - alertRuleState, - ]); + const value = React.useMemo( + () => ({ + alertRuleState, + setAlertRuleState, + }), + [alertRuleState], + ); return ( diff --git a/frontend/src/types/api/alerts/def.ts b/frontend/src/types/api/alerts/def.ts index cd26d9864b..2897b6219b 100644 --- a/frontend/src/types/api/alerts/def.ts +++ b/frontend/src/types/api/alerts/def.ts @@ -1,3 +1,4 @@ +import { AlertLabelsProps } from 'pages/AlertDetails/AlertHeader/AlertLabels/AlertLabels'; import { ICompositeMetricQuery } from 'types/api/alerts/compositeQuery'; // default match type for threshold @@ -96,7 +97,11 @@ export interface AlertRuleTimelineTableResponse { relatedLogsLink: string; } export type AlertRuleTimelineTableResponsePayload = { - data: { items: AlertRuleTimelineTableResponse[]; total: number }; + data: { + items: AlertRuleTimelineTableResponse[]; + total: number; + labels: AlertLabelsProps['labels']; + }; }; type AlertState = 'firing' | 'normal' | 'no-data' | 'muted'; From 137059ded6c4c4c514479655024546f4235d840e Mon Sep 17 00:00:00 2001 From: Vikrant Gupta Date: Wed, 9 Oct 2024 11:26:55 +0530 Subject: [PATCH 41/50] chore: added some easter eggs (#6136) * chore: added easter egg * chore: show all --- frontend/src/AppRoutes/index.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frontend/src/AppRoutes/index.tsx b/frontend/src/AppRoutes/index.tsx index d98742c87d..8cb2bf0a8b 100644 --- a/frontend/src/AppRoutes/index.tsx +++ b/frontend/src/AppRoutes/index.tsx @@ -232,6 +232,10 @@ function App(): JSX.Element { // eslint-disable-next-line react-hooks/exhaustive-deps }, [user]); + useEffect(() => { + console.info('We are hiring! https://jobs.gem.com/signoz'); + }, []); + return ( From a24fb5d84fd45daed675e9896cd6b84682178ca3 Mon Sep 17 00:00:00 2001 From: SagarRajput-7 <162284829+SagarRajput-7@users.noreply.github.com> Date: Wed, 9 Oct 2024 11:27:47 +0530 Subject: [PATCH 42/50] fix: hide PromQL from table panel type (#6117) * fix: hide PromQL from table panel type * fix: handled switch back to query tab if promql was selected earlier * fix: made a constant for panel-type to query-type --- .../LeftContainer/QuerySection/index.tsx | 144 +++++++++--------- frontend/src/container/NewWidget/utils.ts | 41 +++++ 2 files changed, 112 insertions(+), 73 deletions(-) diff --git a/frontend/src/container/NewWidget/LeftContainer/QuerySection/index.tsx b/frontend/src/container/NewWidget/LeftContainer/QuerySection/index.tsx index 38fe984165..71d259784a 100644 --- a/frontend/src/container/NewWidget/LeftContainer/QuerySection/index.tsx +++ b/frontend/src/container/NewWidget/LeftContainer/QuerySection/index.tsx @@ -1,14 +1,17 @@ import './QuerySection.styles.scss'; import { Color } from '@signozhq/design-tokens'; -import { Button, Tabs, Tooltip, Typography } from 'antd'; +import { Button, Tabs, Typography } from 'antd'; import logEvent from 'api/common/logEvent'; import PromQLIcon from 'assets/Dashboard/PromQl'; import LaunchChatSupport from 'components/LaunchChatSupport/LaunchChatSupport'; import TextToolTip from 'components/TextToolTip'; import { PANEL_TYPES } from 'constants/queryBuilder'; import { QBShortcuts } from 'constants/shortcuts/QBShortcuts'; -import { getDefaultWidgetData } from 'container/NewWidget/utils'; +import { + getDefaultWidgetData, + PANEL_TYPE_TO_QUERY_TYPES, +} from 'container/NewWidget/utils'; import { QueryBuilder } from 'container/QueryBuilder'; import { QueryBuilderProps } from 'container/QueryBuilder/QueryBuilder.interfaces'; import { useKeyboardHotkeys } from 'hooks/hotkeys/useKeyboardHotkeys'; @@ -112,16 +115,18 @@ function QuerySection({ ], ); - const handleQueryCategoryChange = (qCategory: string): void => { - const currentQueryType = qCategory; - - featureResponse.refetch().then(() => { - handleStageQuery({ - ...currentQuery, - queryType: currentQueryType as EQueryType, + const handleQueryCategoryChange = useCallback( + (qCategory: string): void => { + const currentQueryType = qCategory; + featureResponse.refetch().then(() => { + handleStageQuery({ + ...currentQuery, + queryType: currentQueryType as EQueryType, + }); }); - }); - }; + }, + [currentQuery, featureResponse, handleStageQuery], + ); const handleRunQuery = (): void => { const widgetId = urlQuery.get('widgetId'); @@ -147,72 +152,55 @@ function QuerySection({ return config; }, []); - const listItems = [ - { - key: EQueryType.QUERY_BUILDER, - label: ( - - ), - tab: Query Builder, - children: ( - - ), - }, - ]; + const items = useMemo(() => { + const supportedQueryTypes = PANEL_TYPE_TO_QUERY_TYPES[selectedGraph] || []; - const items = [ - { - key: EQueryType.QUERY_BUILDER, + const queryTypeComponents = { + [EQueryType.QUERY_BUILDER]: { + icon: , + label: 'Query Builder', + component: ( + + ), + }, + [EQueryType.CLICKHOUSE]: { + icon: , + label: 'ClickHouse Query', + component: , + }, + [EQueryType.PROM]: { + icon: ( + + ), + label: 'PromQL', + component: , + }, + }; + + return supportedQueryTypes.map((queryType) => ({ + key: queryType, label: ( ), - tab: Query Builder, - children: ( - - ), - }, - { - key: EQueryType.CLICKHOUSE, - label: ( - - ), - tab: ClickHouse Query, - children: , - }, - { - key: EQueryType.PROM, - label: ( - - - - ), - tab: PromQL, - children: , - }, - ]; + tab: {queryTypeComponents[queryType].label}, + children: queryTypeComponents[queryType].component, + })); + }, [ + selectedGraph, + filterConfigs, + selectedDashboard?.data?.version, + isDarkMode, + ]); useEffect(() => { registerShortcut(QBShortcuts.StageAndRunQuery, handleRunQuery); @@ -223,6 +211,16 @@ function QuerySection({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [handleRunQuery]); + useEffect(() => { + // switch to query builder if query type is not supported + if ( + selectedGraph === PANEL_TYPES.TABLE && + currentQuery.queryType === EQueryType.PROM + ) { + handleQueryCategoryChange(EQueryType.QUERY_BUILDER); + } + }, [currentQuery, handleQueryCategoryChange, selectedGraph]); + return (
} - items={selectedGraph === PANEL_TYPES.LIST ? listItems : items} + items={items} />
); diff --git a/frontend/src/container/NewWidget/utils.ts b/frontend/src/container/NewWidget/utils.ts index 22d4fa763b..cd684cad78 100644 --- a/frontend/src/container/NewWidget/utils.ts +++ b/frontend/src/container/NewWidget/utils.ts @@ -11,6 +11,7 @@ import { import { cloneDeep, isEqual, set, unset } from 'lodash-es'; import { Widgets } from 'types/api/dashboard/getAll'; import { IBuilderQuery, Query } from 'types/api/queryBuilder/queryBuilderData'; +import { EQueryType } from 'types/common/dashboard'; import { DataSource } from 'types/common/queryBuilder'; export const getIsQueryModified = ( @@ -492,3 +493,43 @@ export const getDefaultWidgetData = ( ...listViewInitialTraceQuery.builder.queryData[0].selectColumns, ], }); + +export const PANEL_TYPE_TO_QUERY_TYPES: Record = { + [PANEL_TYPES.TIME_SERIES]: [ + EQueryType.QUERY_BUILDER, + EQueryType.CLICKHOUSE, + EQueryType.PROM, + ], + [PANEL_TYPES.TABLE]: [EQueryType.QUERY_BUILDER, EQueryType.CLICKHOUSE], + [PANEL_TYPES.VALUE]: [ + EQueryType.QUERY_BUILDER, + EQueryType.CLICKHOUSE, + EQueryType.PROM, + ], + [PANEL_TYPES.LIST]: [EQueryType.QUERY_BUILDER], + [PANEL_TYPES.TRACE]: [ + EQueryType.QUERY_BUILDER, + EQueryType.CLICKHOUSE, + EQueryType.PROM, + ], + [PANEL_TYPES.BAR]: [ + EQueryType.QUERY_BUILDER, + EQueryType.CLICKHOUSE, + EQueryType.PROM, + ], + [PANEL_TYPES.PIE]: [ + EQueryType.QUERY_BUILDER, + EQueryType.CLICKHOUSE, + EQueryType.PROM, + ], + [PANEL_TYPES.HISTOGRAM]: [ + EQueryType.QUERY_BUILDER, + EQueryType.CLICKHOUSE, + EQueryType.PROM, + ], + [PANEL_TYPES.EMPTY_WIDGET]: [ + EQueryType.QUERY_BUILDER, + EQueryType.CLICKHOUSE, + EQueryType.PROM, + ], +}; From 4b79d3b7853cf52e8bbc4d88a785c1f4ea750810 Mon Sep 17 00:00:00 2001 From: Vikrant Gupta Date: Wed, 9 Oct 2024 11:41:38 +0530 Subject: [PATCH 43/50] fix: incorrect query being generated from traces page (#6130) --- .../filters/QueryBuilderSearchV2/QueryBuilderSearchV2.tsx | 4 ++-- .../src/container/TraceDetail/SelectedSpanDetails/config.ts | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/frontend/src/container/QueryBuilder/filters/QueryBuilderSearchV2/QueryBuilderSearchV2.tsx b/frontend/src/container/QueryBuilder/filters/QueryBuilderSearchV2/QueryBuilderSearchV2.tsx index 0925c10d97..d07ba7169c 100644 --- a/frontend/src/container/QueryBuilder/filters/QueryBuilderSearchV2/QueryBuilderSearchV2.tsx +++ b/frontend/src/container/QueryBuilder/filters/QueryBuilderSearchV2/QueryBuilderSearchV2.tsx @@ -244,7 +244,7 @@ function QueryBuilderSearchV2( isFetching: isFetchingSuggestions, } = useGetAttributeSuggestions( { - searchText: searchValue.split(' ')[0], + searchText: searchValue?.split(' ')[0], dataSource: query.dataSource, filters: query.filters, }, @@ -691,7 +691,7 @@ function QueryBuilderSearchV2( } } if (currentState === DropdownState.OPERATOR) { - const keyOperator = searchValue.split(' '); + const keyOperator = searchValue?.split(' '); const partialOperator = keyOperator?.[1]; const strippedKey = keyOperator?.[0]; diff --git a/frontend/src/container/TraceDetail/SelectedSpanDetails/config.ts b/frontend/src/container/TraceDetail/SelectedSpanDetails/config.ts index 145b79f2ff..2b6dd6ffea 100644 --- a/frontend/src/container/TraceDetail/SelectedSpanDetails/config.ts +++ b/frontend/src/container/TraceDetail/SelectedSpanDetails/config.ts @@ -1,4 +1,5 @@ import { initialAutocompleteData, OPERATORS } from 'constants/queryBuilder'; +import { getOperatorValue } from 'container/QueryBuilder/filters/QueryBuilderSearch/utils'; import getStep from 'lib/getStep'; import { BaseAutocompleteData, @@ -27,7 +28,8 @@ export const getTraceToLogsQuery = ( items: [ { id: uuid(), - op: OPERATORS.IN, + // for generating query we use in instead of IN + op: getOperatorValue(OPERATORS.IN), value: traceId, key, }, From b03fadc2ec6c927c50254e11671c203415e05ca5 Mon Sep 17 00:00:00 2001 From: SagarRajput-7 <162284829+SagarRajput-7@users.noreply.github.com> Date: Wed, 9 Oct 2024 13:31:59 +0530 Subject: [PATCH 44/50] chore: hide promql from panel type - pie (#6140) --- .../NewWidget/LeftContainer/QuerySection/index.tsx | 2 +- frontend/src/container/NewWidget/utils.ts | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/frontend/src/container/NewWidget/LeftContainer/QuerySection/index.tsx b/frontend/src/container/NewWidget/LeftContainer/QuerySection/index.tsx index 71d259784a..d98bd25e1c 100644 --- a/frontend/src/container/NewWidget/LeftContainer/QuerySection/index.tsx +++ b/frontend/src/container/NewWidget/LeftContainer/QuerySection/index.tsx @@ -214,7 +214,7 @@ function QuerySection({ useEffect(() => { // switch to query builder if query type is not supported if ( - selectedGraph === PANEL_TYPES.TABLE && + (selectedGraph === PANEL_TYPES.TABLE || selectedGraph === PANEL_TYPES.PIE) && currentQuery.queryType === EQueryType.PROM ) { handleQueryCategoryChange(EQueryType.QUERY_BUILDER); diff --git a/frontend/src/container/NewWidget/utils.ts b/frontend/src/container/NewWidget/utils.ts index cd684cad78..f8eef3157d 100644 --- a/frontend/src/container/NewWidget/utils.ts +++ b/frontend/src/container/NewWidget/utils.ts @@ -517,11 +517,7 @@ export const PANEL_TYPE_TO_QUERY_TYPES: Record = { EQueryType.CLICKHOUSE, EQueryType.PROM, ], - [PANEL_TYPES.PIE]: [ - EQueryType.QUERY_BUILDER, - EQueryType.CLICKHOUSE, - EQueryType.PROM, - ], + [PANEL_TYPES.PIE]: [EQueryType.QUERY_BUILDER, EQueryType.CLICKHOUSE], [PANEL_TYPES.HISTOGRAM]: [ EQueryType.QUERY_BUILDER, EQueryType.CLICKHOUSE, From 78a924d378a54aa13e51b5c40494cc109cbc2c63 Mon Sep 17 00:00:00 2001 From: Abhishek Mehandiratta <36722596+abhi12299@users.noreply.github.com> Date: Wed, 9 Oct 2024 13:32:17 +0530 Subject: [PATCH 45/50] fix(dashboard): initial title value in rename modal set to currently selected dashboard (#5821) Co-authored-by: Srikanth Chekuri Co-authored-by: SagarRajput-7 <162284829+SagarRajput-7@users.noreply.github.com> --- .../NewDashboard/DashboardDescription/index.tsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/frontend/src/container/NewDashboard/DashboardDescription/index.tsx b/frontend/src/container/NewDashboard/DashboardDescription/index.tsx index ea59dc4bcf..d6f63165d5 100644 --- a/frontend/src/container/NewDashboard/DashboardDescription/index.tsx +++ b/frontend/src/container/NewDashboard/DashboardDescription/index.tsx @@ -182,6 +182,15 @@ function DashboardDescription(props: DashboardDescriptionProps): JSX.Element { const { t } = useTranslation(['dashboard', 'common']); + // used to set the initial value for the updatedTitle + // the context value is sometimes not available during the initial render + // due to which the updatedTitle is set to some previous value + useEffect(() => { + if (selectedDashboard) { + setUpdatedTitle(selectedDashboard.data.title); + } + }, [selectedDashboard]); + useEffect(() => { if (state.error) { notifications.error({ From 440fd4e02b2d8c13d8b4827abdfe609755cba990 Mon Sep 17 00:00:00 2001 From: SagarRajput-7 <162284829+SagarRajput-7@users.noreply.github.com> Date: Wed, 9 Oct 2024 13:33:14 +0530 Subject: [PATCH 46/50] feat: added info funct for panels in dashaboard layout for showing description (#6133) * feat: added info funct for panels in dashaboard layout for showing description * feat: position description info next to title * feat: replaced error info icon --- .../WidgetHeader/WidgetHeader.styles.scss | 22 +++++++++++++ .../GridCardLayout/WidgetHeader/index.tsx | 32 +++++++++++++------ 2 files changed, 44 insertions(+), 10 deletions(-) diff --git a/frontend/src/container/GridCardLayout/WidgetHeader/WidgetHeader.styles.scss b/frontend/src/container/GridCardLayout/WidgetHeader/WidgetHeader.styles.scss index 11659e9a3e..1af189fc15 100644 --- a/frontend/src/container/GridCardLayout/WidgetHeader/WidgetHeader.styles.scss +++ b/frontend/src/container/GridCardLayout/WidgetHeader/WidgetHeader.styles.scss @@ -20,6 +20,14 @@ } } +.widget-header-title-container { + display: flex; + align-items: center; + gap: 8px; + overflow: hidden; + text-overflow: ellipsis; +} + .widget-header-title { max-width: 80%; } @@ -58,3 +66,17 @@ } } } + +.long-tooltip { + .ant-tooltip-content { + max-height: 500px; + overflow: auto; + } + &.ant-tooltip { + max-width: 500px; + } +} + +.info-tooltip { + cursor: pointer; +} diff --git a/frontend/src/container/GridCardLayout/WidgetHeader/index.tsx b/frontend/src/container/GridCardLayout/WidgetHeader/index.tsx index d4aa6a4c09..6d7839aa4f 100644 --- a/frontend/src/container/GridCardLayout/WidgetHeader/index.tsx +++ b/frontend/src/container/GridCardLayout/WidgetHeader/index.tsx @@ -6,8 +6,8 @@ import { CopyOutlined, DeleteOutlined, EditFilled, - ExclamationCircleOutlined, FullscreenOutlined, + InfoCircleOutlined, MoreOutlined, SearchOutlined, WarningOutlined, @@ -21,7 +21,7 @@ import useComponentPermission from 'hooks/useComponentPermission'; import history from 'lib/history'; import { RowData } from 'lib/query/createTableColumnsFromQuery'; import { isEmpty } from 'lodash-es'; -import { X } from 'lucide-react'; +import { CircleX, X } from 'lucide-react'; import { unparse } from 'papaparse'; import { ReactNode, useCallback, useMemo, useState } from 'react'; import { UseQueryResult } from 'react-query'; @@ -234,13 +234,25 @@ function WidgetHeader({ /> ) : ( <> - - {title} - +
+ + {title} + + {widget.description && ( + + + + )} +
{threshold}
{isFetchingResponse && !queryResponse.isError && ( @@ -252,7 +264,7 @@ function WidgetHeader({ placement={errorTooltipPosition} className="widget-api-actions" > - + )} From 2230ca174086a4af3fa34757242d5964e233822f Mon Sep 17 00:00:00 2001 From: Nityananda Gohain Date: Wed, 9 Oct 2024 20:03:26 +0530 Subject: [PATCH 47/50] fix: enrich attributes regardless if it is materialized (#6000) * fix: enrich attributes regardless if it is materialized * feat: take care of same key name with different type and datatype * fix: makeLinks updated with new logic for logs * fix: clean up PrepareFilters and make it generic --- pkg/query-service/app/logs/v3/enrich_query.go | 30 +++---- .../app/logs/v3/enrich_query_test.go | 90 ++++++++++++++++--- pkg/query-service/contextlinks/links.go | 23 ++++- pkg/query-service/model/logs.go | 7 +- pkg/query-service/model/v3/v3.go | 8 ++ pkg/query-service/utils/logs.go | 33 +++++++ pkg/query-service/utils/logs_test.go | 57 +++++++++++- 7 files changed, 213 insertions(+), 35 deletions(-) diff --git a/pkg/query-service/app/logs/v3/enrich_query.go b/pkg/query-service/app/logs/v3/enrich_query.go index b8ed0ff801..49ff422fd5 100644 --- a/pkg/query-service/app/logs/v3/enrich_query.go +++ b/pkg/query-service/app/logs/v3/enrich_query.go @@ -7,6 +7,7 @@ import ( "go.signoz.io/signoz/pkg/query-service/constants" v3 "go.signoz.io/signoz/pkg/query-service/model/v3" + "go.signoz.io/signoz/pkg/query-service/utils" ) func EnrichmentRequired(params *v3.QueryRangeParamsV3) bool { @@ -61,26 +62,23 @@ func EnrichmentRequired(params *v3.QueryRangeParamsV3) bool { return false } +// if the field is timestamp/id/value we don't need to enrich +// if the field is static we don't need to enrich +// for all others we need to enrich +// an attribute/resource can be materialized/dematerialized +// but the query should work regardless and shouldn't fail func isEnriched(field v3.AttributeKey) bool { // if it is timestamp/id dont check if field.Key == "timestamp" || field.Key == "id" || field.Key == constants.SigNozOrderByValue { return true } - if field.IsColumn { + // don't need to enrich the static fields as they will be always used a column + if _, ok := constants.StaticFieldsLogsV3[field.Key]; ok && field.IsColumn { return true } - if field.Type == v3.AttributeKeyTypeUnspecified || field.DataType == v3.AttributeKeyDataTypeUnspecified { - return false - } - - // try to enrich all attributes which doesn't have isColumn = true - if !field.IsColumn { - return false - } - - return true + return false } func Enrich(params *v3.QueryRangeParamsV3, fields map[string]v3.AttributeKey) { @@ -144,13 +142,9 @@ func enrichFieldWithMetadata(field v3.AttributeKey, fields map[string]v3.Attribu } // check if the field is present in the fields map - if existingField, ok := fields[field.Key]; ok { - // don't update if type is not the same - if (field.Type == "" && field.DataType == "") || - (field.Type == existingField.Type && field.DataType == existingField.DataType) || - (field.Type == "" && field.DataType == existingField.DataType) || - (field.DataType == "" && field.Type == existingField.Type) { - return existingField + for _, key := range utils.GenerateLogEnrichmentKeys(field) { + if val, ok := fields[key]; ok { + return val } } diff --git a/pkg/query-service/app/logs/v3/enrich_query_test.go b/pkg/query-service/app/logs/v3/enrich_query_test.go index 32d714925c..20b5d90487 100644 --- a/pkg/query-service/app/logs/v3/enrich_query_test.go +++ b/pkg/query-service/app/logs/v3/enrich_query_test.go @@ -51,7 +51,7 @@ var testEnrichmentRequiredData = []struct { EnrichmentRequired: true, }, { - Name: "filter enrichment not required", + Name: "filter enrichment required", Params: v3.QueryRangeParamsV3{ CompositeQuery: &v3.CompositeQuery{ BuilderQueries: map[string]*v3.BuilderQuery{ @@ -87,7 +87,7 @@ var testEnrichmentRequiredData = []struct { EnrichmentRequired: true, }, { - Name: "filter enrichment not required required json", + Name: "filter enrichment required required json", Params: v3.QueryRangeParamsV3{ CompositeQuery: &v3.CompositeQuery{ BuilderQueries: map[string]*v3.BuilderQuery{ @@ -105,7 +105,7 @@ var testEnrichmentRequiredData = []struct { EnrichmentRequired: true, }, { - Name: "groupBy enrichment not required", + Name: "groupBy enrichment required", Params: v3.QueryRangeParamsV3{ CompositeQuery: &v3.CompositeQuery{ BuilderQueries: map[string]*v3.BuilderQuery{ @@ -194,8 +194,9 @@ var testEnrichmentRequiredData = []struct { QueryName: "test", Expression: "test", DataSource: v3.DataSourceLogs, - GroupBy: []v3.AttributeKey{{Key: "trace_id", DataType: v3.AttributeKeyDataTypeString, Type: v3.AttributeKeyTypeTag}}, - OrderBy: []v3.OrderBy{{ColumnName: "#SIGNOZ_VALUE", Order: "ASC"}}, + // here we have to fallback to trace_id attribute instead of column + GroupBy: []v3.AttributeKey{{Key: "trace_id", DataType: v3.AttributeKeyDataTypeString, Type: v3.AttributeKeyTypeTag}}, + OrderBy: []v3.OrderBy{{ColumnName: "#SIGNOZ_VALUE", Order: "ASC"}}, }, }, }, @@ -241,17 +242,17 @@ var testEnrichParamsData = []struct { }, }, Fields: map[string]v3.AttributeKey{ - "test": { + "test##tag##int64": { Key: "test", Type: v3.AttributeKeyTypeTag, DataType: v3.AttributeKeyDataTypeInt64, }, - "user_name": { + "user_name##tag##string": { Key: "user_name", Type: v3.AttributeKeyTypeTag, DataType: v3.AttributeKeyDataTypeString, }, - "response_time": { + "response_time##tag##int64": { Key: "response_time", Type: v3.AttributeKeyTypeTag, DataType: v3.AttributeKeyDataTypeInt64, @@ -302,18 +303,18 @@ var testEnrichParamsData = []struct { }, }, Fields: map[string]v3.AttributeKey{ - "method.name": { + "method.name##tag##string": { Key: "method.name", Type: v3.AttributeKeyTypeTag, DataType: v3.AttributeKeyDataTypeString, IsColumn: true, }, - "service.name": { + "service.name##tag##string": { Key: "service.name", Type: v3.AttributeKeyTypeTag, DataType: v3.AttributeKeyDataTypeString, }, - "host.name": { + "host.name##tag##string": { Key: "host.name", Type: v3.AttributeKeyTypeTag, DataType: v3.AttributeKeyDataTypeString, @@ -365,7 +366,7 @@ var testEnrichParamsData = []struct { }, }, Fields: map[string]v3.AttributeKey{ - "test": { + "test##tag##string": { Key: "test", Type: v3.AttributeKeyTypeTag, DataType: v3.AttributeKeyDataTypeString, @@ -393,6 +394,71 @@ var testEnrichParamsData = []struct { }, }, }, + { + Name: "Enrich if an attribute/resource attribute is materialized/dematerialized", + Params: v3.QueryRangeParamsV3{ + CompositeQuery: &v3.CompositeQuery{ + BuilderQueries: map[string]*v3.BuilderQuery{ + "test": { + QueryName: "test", + Expression: "test", + DataSource: v3.DataSourceLogs, + AggregateAttribute: v3.AttributeKey{ + Key: "mat_resource", + Type: v3.AttributeKeyTypeResource, + DataType: v3.AttributeKeyDataTypeInt64, + IsColumn: true, + }, + Filters: &v3.FilterSet{Operator: "AND", Items: []v3.FilterItem{ + {Key: v3.AttributeKey{Key: "mat_attr", Type: v3.AttributeKeyTypeTag, IsColumn: true}, Value: "test", Operator: "="}, + {Key: v3.AttributeKey{Key: "normal_attr", DataType: v3.AttributeKeyDataTypeString, IsColumn: false}, Value: "test1", Operator: "="}, + }}, + }, + }, + }, + }, + Fields: map[string]v3.AttributeKey{ + "mat_resource##resource##int64": { + Key: "mat_resource", + Type: v3.AttributeKeyTypeResource, + DataType: v3.AttributeKeyDataTypeInt64, + IsColumn: false, + }, + "mat_attr##tag##string": { + Key: "mat_attr", + Type: v3.AttributeKeyTypeTag, + DataType: v3.AttributeKeyDataTypeString, + IsColumn: false, + }, + "normal_attr##tag##string": { + Key: "normal_attr", + Type: v3.AttributeKeyTypeTag, + DataType: v3.AttributeKeyDataTypeString, + IsColumn: true, + }, + }, + Result: v3.QueryRangeParamsV3{ + CompositeQuery: &v3.CompositeQuery{ + BuilderQueries: map[string]*v3.BuilderQuery{ + "test": { + QueryName: "test", + Expression: "test", + DataSource: v3.DataSourceLogs, + AggregateAttribute: v3.AttributeKey{ + Key: "mat_resource", + Type: v3.AttributeKeyTypeResource, + DataType: v3.AttributeKeyDataTypeInt64, + IsColumn: false, + }, + Filters: &v3.FilterSet{Operator: "AND", Items: []v3.FilterItem{ + {Key: v3.AttributeKey{Key: "mat_attr", Type: v3.AttributeKeyTypeTag, DataType: v3.AttributeKeyDataTypeString, IsColumn: false}, Value: "test", Operator: "="}, + {Key: v3.AttributeKey{Key: "normal_attr", Type: v3.AttributeKeyTypeTag, DataType: v3.AttributeKeyDataTypeString, IsColumn: true}, Value: "test1", Operator: "="}, + }}, + }, + }, + }, + }, + }, } func TestEnrichParams(t *testing.T) { diff --git a/pkg/query-service/contextlinks/links.go b/pkg/query-service/contextlinks/links.go index d0d8400e74..260745eda3 100644 --- a/pkg/query-service/contextlinks/links.go +++ b/pkg/query-service/contextlinks/links.go @@ -8,6 +8,7 @@ import ( tracesV3 "go.signoz.io/signoz/pkg/query-service/app/traces/v3" v3 "go.signoz.io/signoz/pkg/query-service/model/v3" + "go.signoz.io/signoz/pkg/query-service/utils" ) func PrepareLinksToTraces(start, end time.Time, filterItems []v3.FilterItem) string { @@ -178,8 +179,26 @@ func PrepareFilters(labels map[string]string, whereClauseItems []v3.FilterItem, for key, value := range labels { if _, ok := added[key]; !ok { // start by taking the attribute key from the keys map, if not present, create a new one - attributeKey, ok := keys[key] - if !ok { + var attributeKey v3.AttributeKey + var attrFound bool + + // as of now this logic will only apply for logs + for _, tKey := range utils.GenerateLogEnrichmentKeys(v3.AttributeKey{Key: key}) { + if val, ok := keys[tKey]; ok { + attributeKey = val + attrFound = true + break + } + } + + // check if the attribute key is directly present, as of now this will always be false for logs + // as for logs it will be satisfied in the condition above + if !attrFound { + attributeKey, attrFound = keys[key] + } + + // if the attribute key is not present, create a new one + if !attrFound { attributeKey = v3.AttributeKey{Key: key} } diff --git a/pkg/query-service/model/logs.go b/pkg/query-service/model/logs.go index 0319581516..c6a9276008 100644 --- a/pkg/query-service/model/logs.go +++ b/pkg/query-service/model/logs.go @@ -49,7 +49,8 @@ func GetLogFieldsV3(ctx context.Context, queryRangeParams *v3.QueryRangeParamsV3 if pass { continue } - data[selectedField.Name] = v3.AttributeKey{ + name := selectedField.Name + "##" + fieldType.String() + "##" + strings.ToLower(selectedField.DataType) + data[name] = v3.AttributeKey{ Key: selectedField.Name, Type: fieldType, DataType: v3.AttributeKeyDataType(strings.ToLower(selectedField.DataType)), @@ -61,12 +62,14 @@ func GetLogFieldsV3(ctx context.Context, queryRangeParams *v3.QueryRangeParamsV3 if pass { continue } - data[interestingField.Name] = v3.AttributeKey{ + name := interestingField.Name + "##" + fieldType.String() + "##" + strings.ToLower(interestingField.DataType) + data[name] = v3.AttributeKey{ Key: interestingField.Name, Type: fieldType, DataType: v3.AttributeKeyDataType(strings.ToLower(interestingField.DataType)), IsColumn: false, } + } break } diff --git a/pkg/query-service/model/v3/v3.go b/pkg/query-service/model/v3/v3.go index 9770df4108..a58575cd08 100644 --- a/pkg/query-service/model/v3/v3.go +++ b/pkg/query-service/model/v3/v3.go @@ -287,6 +287,10 @@ func (q AttributeKeyDataType) Validate() error { } } +func (q AttributeKeyDataType) String() string { + return string(q) +} + // FilterAttributeValueRequest is a request to fetch possible attribute values // for a selected aggregate operator, aggregate attribute, filter attribute key // and search text. @@ -317,6 +321,10 @@ const ( AttributeKeyTypeResource AttributeKeyType = "resource" ) +func (t AttributeKeyType) String() string { + return string(t) +} + type AttributeKey struct { Key string `json:"key"` DataType AttributeKeyDataType `json:"dataType"` diff --git a/pkg/query-service/utils/logs.go b/pkg/query-service/utils/logs.go index 2f536ef857..8efa026b52 100644 --- a/pkg/query-service/utils/logs.go +++ b/pkg/query-service/utils/logs.go @@ -1,5 +1,7 @@ package utils +import v3 "go.signoz.io/signoz/pkg/query-service/model/v3" + const HOUR_NANO = int64(3600000000000) type LogsListTsRange struct { @@ -36,3 +38,34 @@ func GetLogsListTsRanges(start, end int64) []LogsListTsRange { } return result } + +// This tries to see all possible fields that it can fall back to if some meta is missing +// check Test_GenerateLogEnrichmentKeys for example +func GenerateLogEnrichmentKeys(field v3.AttributeKey) []string { + names := []string{} + if field.Type != v3.AttributeKeyTypeUnspecified && field.DataType != v3.AttributeKeyDataTypeUnspecified { + names = append(names, field.Key+"##"+field.Type.String()+"##"+field.DataType.String()) + return names + } + + types := []v3.AttributeKeyType{} + dTypes := []v3.AttributeKeyDataType{} + if field.Type != v3.AttributeKeyTypeUnspecified { + types = append(types, field.Type) + } else { + types = append(types, v3.AttributeKeyTypeTag, v3.AttributeKeyTypeResource) + } + if field.DataType != v3.AttributeKeyDataTypeUnspecified { + dTypes = append(dTypes, field.DataType) + } else { + dTypes = append(dTypes, v3.AttributeKeyDataTypeFloat64, v3.AttributeKeyDataTypeInt64, v3.AttributeKeyDataTypeString, v3.AttributeKeyDataTypeBool) + } + + for _, t := range types { + for _, d := range dTypes { + names = append(names, field.Key+"##"+t.String()+"##"+d.String()) + } + } + + return names +} diff --git a/pkg/query-service/utils/logs_test.go b/pkg/query-service/utils/logs_test.go index 939fa5fa1b..e1efd813d1 100644 --- a/pkg/query-service/utils/logs_test.go +++ b/pkg/query-service/utils/logs_test.go @@ -1,6 +1,11 @@ package utils -import "testing" +import ( + "reflect" + "testing" + + v3 "go.signoz.io/signoz/pkg/query-service/model/v3" +) func TestLogsListTsRange(t *testing.T) { startEndData := []struct { @@ -47,3 +52,53 @@ func TestLogsListTsRange(t *testing.T) { } } } + +func Test_GenerateLogEnrichmentKeys(t *testing.T) { + type args struct { + field v3.AttributeKey + } + tests := []struct { + name string + args args + want []string + }{ + { + name: "all are present", + args: args{ + field: v3.AttributeKey{ + Key: "data", + DataType: v3.AttributeKeyDataTypeString, + Type: v3.AttributeKeyTypeTag, + }, + }, + want: []string{"data##tag##string"}, + }, + { + name: "type present", + args: args{ + field: v3.AttributeKey{ + Key: "data", + Type: v3.AttributeKeyTypeTag, + }, + }, + want: []string{"data##tag##float64", "data##tag##int64", "data##tag##string", "data##tag##bool"}, + }, + { + name: "dataType present", + args: args{ + field: v3.AttributeKey{ + Key: "data", + DataType: v3.AttributeKeyDataTypeString, + }, + }, + want: []string{"data##tag##string", "data##resource##string"}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := GenerateLogEnrichmentKeys(tt.args.field); !reflect.DeepEqual(got, tt.want) { + t.Errorf("generateLogEnrichmentKeys() = %v, want %v", got, tt.want) + } + }) + } +} From 3bbbc759d36c7fe92c3e7c7761654a782c7c7d91 Mon Sep 17 00:00:00 2001 From: Srikanth Chekuri Date: Thu, 10 Oct 2024 14:10:28 +0530 Subject: [PATCH 48/50] chore: bump SigNoz/prometheus (#6095) --- ee/query-service/main.go | 6 + go.mod | 78 +++--- go.sum | 234 ++++++++++-------- .../app/clickhouseReader/reader.go | 1 + pkg/query-service/main.go | 5 + pkg/query-service/pqlEngine/engine.go | 1 + 6 files changed, 182 insertions(+), 143 deletions(-) diff --git a/ee/query-service/main.go b/ee/query-service/main.go index 75a49500d0..41cc69aa49 100644 --- a/ee/query-service/main.go +++ b/ee/query-service/main.go @@ -20,6 +20,8 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" + prommodel "github.com/prometheus/common/model" + zapotlpencoder "github.com/SigNoz/zap_otlp/zap_otlp_encoder" zapotlpsync "github.com/SigNoz/zap_otlp/zap_otlp_sync" @@ -77,6 +79,10 @@ func initZapLog(enableQueryServiceLogOTLPExport bool) *zap.Logger { return logger } +func init() { + prommodel.NameValidationScheme = prommodel.UTF8Validation +} + func main() { var promConfigPath, skipTopLvlOpsPath string diff --git a/go.mod b/go.mod index 628384c2fe..983c58ce34 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,11 @@ module go.signoz.io/signoz -go 1.21.3 +go 1.22.0 + +toolchain go1.22.7 require ( - github.com/ClickHouse/clickhouse-go/v2 v2.23.2 + github.com/ClickHouse/clickhouse-go/v2 v2.25.0 github.com/DATA-DOG/go-sqlmock v1.5.2 github.com/SigNoz/govaluate v0.0.0-20240203125216-988004ccc7fd github.com/SigNoz/signoz-otel-collector v0.102.10 @@ -37,7 +39,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 - github.com/prometheus/common v0.55.0 + github.com/prometheus/common v0.59.1 github.com/prometheus/prometheus v2.5.0+incompatible github.com/rs/cors v1.11.0 github.com/russellhaering/gosaml2 v0.9.0 @@ -57,41 +59,44 @@ require ( go.opentelemetry.io/collector/exporter v0.103.0 go.opentelemetry.io/collector/extension v0.103.0 go.opentelemetry.io/collector/otelcol v0.103.0 - go.opentelemetry.io/collector/pdata v1.10.0 + go.opentelemetry.io/collector/pdata v1.14.1 go.opentelemetry.io/collector/processor v0.103.0 go.opentelemetry.io/collector/receiver v0.103.0 go.opentelemetry.io/collector/service v0.103.0 go.opentelemetry.io/contrib/bridges/otelzap v0.0.0-20240820072021-3fab5f5f20fb go.opentelemetry.io/contrib/config v0.8.0 - go.opentelemetry.io/otel v1.28.0 + go.opentelemetry.io/otel v1.29.0 go.opentelemetry.io/otel/log v0.4.0 - go.opentelemetry.io/otel/metric v1.28.0 - go.opentelemetry.io/otel/sdk v1.28.0 - go.opentelemetry.io/otel/trace v1.28.0 + go.opentelemetry.io/otel/metric v1.29.0 + go.opentelemetry.io/otel/sdk v1.29.0 + go.opentelemetry.io/otel/trace v1.29.0 go.uber.org/multierr v1.11.0 go.uber.org/zap v1.27.0 - golang.org/x/crypto v0.24.0 + golang.org/x/crypto v0.26.0 golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 - golang.org/x/net v0.26.0 - golang.org/x/oauth2 v0.21.0 - golang.org/x/text v0.16.0 - google.golang.org/grpc v1.65.0 + golang.org/x/net v0.28.0 + golang.org/x/oauth2 v0.23.0 + golang.org/x/text v0.18.0 + google.golang.org/grpc v1.66.0 google.golang.org/protobuf v1.34.2 gopkg.in/segmentio/analytics-go.v3 v3.1.0 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 - k8s.io/apimachinery v0.29.3 + k8s.io/apimachinery v0.31.0 ) require ( - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.8.0 // indirect + cloud.google.com/go/auth v0.9.3 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect + cloud.google.com/go/compute/metadata v0.5.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect github.com/ClickHouse/ch-go v0.61.5 // indirect - github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 // indirect + github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30 // indirect github.com/andybalholm/brotli v1.1.0 // indirect - github.com/aws/aws-sdk-go v1.53.16 // indirect + github.com/aws/aws-sdk-go v1.55.5 // indirect github.com/beevik/etree v1.1.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect @@ -117,10 +122,12 @@ require ( github.com/golang-jwt/jwt/v5 v5.2.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.4 // indirect + github.com/google/s2a-go v0.1.8 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect github.com/gopherjs/gopherjs v1.17.2 // indirect github.com/gosimple/unidecode v1.0.0 // indirect github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect github.com/hashicorp/go-version v1.7.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect @@ -128,7 +135,7 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect github.com/jtolds/gls v4.20.0+incompatible // indirect - github.com/klauspost/compress v1.17.8 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/klauspost/cpuid v1.2.3 // indirect github.com/knadh/koanf/v2 v2.1.1 // indirect github.com/kylelemons/godebug v1.1.0 // indirect @@ -153,7 +160,7 @@ require ( github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/prometheus/client_golang v1.19.1 // indirect + github.com/prometheus/client_golang v1.20.4 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common/sigv4 v0.1.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect @@ -181,16 +188,16 @@ require ( go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.103.0 // indirect go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.103.0 // indirect go.opentelemetry.io/collector/featuregate v1.13.0 // indirect - go.opentelemetry.io/collector/semconv v0.103.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0 // indirect + go.opentelemetry.io/collector/semconv v0.108.1 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect go.opentelemetry.io/contrib/propagators/b3 v1.27.0 // indirect go.opentelemetry.io/otel/bridge/opencensus v1.27.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.4.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.28.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0 // indirect go.opentelemetry.io/otel/exporters/prometheus v0.50.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.28.0 // indirect go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0 // indirect @@ -198,15 +205,16 @@ require ( go.opentelemetry.io/otel/sdk/metric v1.28.0 // indirect go.opentelemetry.io/proto/otlp v1.3.1 // indirect go.uber.org/atomic v1.11.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/time v0.5.0 // indirect + golang.org/x/sys v0.25.0 // indirect + golang.org/x/time v0.6.0 // indirect gonum.org/v1/gonum v0.15.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect + google.golang.org/api v0.195.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect - k8s.io/client-go v0.29.3 // indirect - k8s.io/klog/v2 v2.120.1 // indirect - k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 // indirect + k8s.io/client-go v0.31.0 // indirect + k8s.io/klog/v2 v2.130.1 // indirect + k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect ) -replace github.com/prometheus/prometheus => github.com/SigNoz/prometheus v1.11.1 +replace github.com/prometheus/prometheus => github.com/SigNoz/prometheus v1.12.0 diff --git a/go.sum b/go.sum index 332f4507e1..3a8da03859 100644 --- a/go.sum +++ b/go.sum @@ -13,12 +13,18 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/auth v0.9.3 h1:VOEUIAADkkLtyfr3BLa3R8Ed/j6w1jTBmARx+wb5w5U= +cloud.google.com/go/auth v0.9.3/go.mod h1:7z6VY+7h3KUdRov5F1i8NDP5ZzWKYmEPO842BgCsmTk= +cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY= +cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= +cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= @@ -34,12 +40,12 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7 filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 h1:E+OJmp2tPvt1W+amx48v1eqbjDYsgN+RzP4q16yV5eM= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1/go.mod h1:a6xsAQUZg+VsS3TJ05SRp524Hs4pZ/AeFSr5ENf0Yjo= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0 h1:U2rTu3Ef+7w9FHKIAXM6ZyqF3UOWJZ12zIm8zECAFfg= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.6.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.8.0 h1:jBQA3cKT4L2rWMpgE7Yt3Hwh2aUj8KXjIGLxjHeYNNo= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.8.0/go.mod h1:4OG6tQ9EOP/MT0NMjDlRzWoVFxfu9rN9B2X+tlSVktg= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0 h1:nyQWyZvwGTvunIMxi1Y9uXkcyr+I7TeNrr/foo4Kpk8= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0/go.mod h1:l38EPgmsp71HHLq9j7De57JcKOWPyhrsW1Awm1JS6K0= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 h1:tfLQ34V6F7tVSwoTf/4lH5sE0o6eCJuNDTmH09nDpbc= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.7.0 h1:LkHbJbgF3YyvC53aqYGR+wWQDn2Rdp9AQdGndf9QvY4= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.7.0/go.mod h1:QyiQdW4f4/BIfB8ZutZ2s+28RAgfa/pT+zS++ZHyM1I= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 h1:bXwSugBiSbgtz7rOtbfGf+woewp4f06orW9OP5BjHLA= @@ -50,8 +56,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ClickHouse/ch-go v0.61.5 h1:zwR8QbYI0tsMiEcze/uIMK+Tz1D3XZXLdNrlaOpeEI4= github.com/ClickHouse/ch-go v0.61.5/go.mod h1:s1LJW/F/LcFs5HJnuogFMta50kKDO0lf9zzfrbl0RQg= -github.com/ClickHouse/clickhouse-go/v2 v2.23.2 h1:+DAKPMnxLS7pduQZsrJc8OhdLS2L9MfDEJ2TS+hpYDM= -github.com/ClickHouse/clickhouse-go/v2 v2.23.2/go.mod h1:aNap51J1OM3yxQJRgM+AlP/MPkGBCL8A74uQThoQhR0= +github.com/ClickHouse/clickhouse-go/v2 v2.25.0 h1:rKscwqgQHzWBTZySZDcHKxgs0Ad+xFULfZvo26W5UlY= +github.com/ClickHouse/clickhouse-go/v2 v2.25.0/go.mod h1:iDTViXk2Fgvf1jn2dbJd1ys+fBkdD1UMRnXlwmhijhQ= github.com/Code-Hex/go-generics-cache v1.5.1 h1:6vhZGc5M7Y/YD8cIUcY8kcuQLB4cHR7U+0KMqAA0KcU= github.com/Code-Hex/go-generics-cache v1.5.1/go.mod h1:qxcC9kRVrct9rHeiYpFWSoW1vxyillCVzX13KZG8dl4= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= @@ -62,8 +68,8 @@ github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/SigNoz/govaluate v0.0.0-20240203125216-988004ccc7fd h1:Bk43AsDYe0fhkbj57eGXx8H3ZJ4zhmQXBnrW523ktj8= github.com/SigNoz/govaluate v0.0.0-20240203125216-988004ccc7fd/go.mod h1:nxRcH/OEdM8QxzH37xkGzomr1O0JpYBRS6pwjsWW6Pc= -github.com/SigNoz/prometheus v1.11.1 h1:roM8ugYf4UxaeKKujEeBvoX7ybq3IrS+TB26KiRtIJg= -github.com/SigNoz/prometheus v1.11.1/go.mod h1:uv4mQwZQtx7y4GQ6EdHOi8Wsk07uHNn2XHd1zM85m6I= +github.com/SigNoz/prometheus v1.12.0 h1:+BXeIHyMOOWWa+xjhJ+x80JFva7r1WzWIfIhQ5PUmIE= +github.com/SigNoz/prometheus v1.12.0/go.mod h1:EqNM27OwmPfqMUk+E+XG1L9rfDFcyXnzzDrg0EPOfxA= github.com/SigNoz/signoz-otel-collector v0.102.10 h1:1zjU31OcRZL6fS0IIag8LA8bdhP4S28dzovDwuOg7Lg= github.com/SigNoz/signoz-otel-collector v0.102.10/go.mod h1:APoBVD4aRu9vIny1vdzZSi2wPY3elyjHA/I/rh1hKfs= github.com/SigNoz/zap_otlp v0.1.0 h1:T7rRcFN87GavY8lDGZj0Z3Xv6OhJA6Pj3I9dNPmqvRc= @@ -77,8 +83,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 h1:ez/4by2iGztzR4L0zgAOR8lTQK9VlyBVVd7G4omaOQs= -github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30 h1:t3eaIm0rUkzbrIewtiFmMK5RXHej2XnoXNhxVsAYUfg= +github.com/alecthomas/units v0.0.0-20240626203959-61d1e3462e30/go.mod h1:fvzegU4vN3H1qMT+8wDmzjAcDONcgo2/SZ/TyfdUOFs= github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= @@ -93,8 +99,8 @@ github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgI github.com/auth0/go-jwt-middleware v1.0.1 h1:/fsQ4vRr4zod1wKReUH+0A3ySRjGiT9G34kypO/EKwI= github.com/auth0/go-jwt-middleware v1.0.1/go.mod h1:YSeUX3z6+TF2H+7padiEqNJ73Zy9vXW72U//IgN0BIM= github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/aws/aws-sdk-go v1.53.16 h1:8oZjKQO/ml1WLUZw5hvF7pvYjPf8o9f57Wldoy/q9Qc= -github.com/aws/aws-sdk-go v1.53.16/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= +github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aws/aws-sdk-go-v2 v1.9.2/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2/config v1.8.3/go.mod h1:4AEiLtAb8kLs7vgw2ZV3p2VZ1+hBavOc84hqxVNpCyw= github.com/aws/aws-sdk-go-v2/credentials v1.4.3/go.mod h1:FNNC6nQZQUuyhq5aE5c7ata8o9e4ECGmS4lAXC7o1mQ= @@ -147,12 +153,12 @@ github.com/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE= github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/digitalocean/godo v1.117.0 h1:WVlTe09melDYTd7VCVyvHcNWbgB+uI1O115+5LOtdSw= -github.com/digitalocean/godo v1.117.0/go.mod h1:Vk0vpCot2HOAJwc5WE8wljZGtJ3ZtWIc8MQ8rF38sdo= +github.com/digitalocean/godo v1.122.0 h1:ziytLQi8QKtDp2K1A+YrYl2dWLHLh2uaMzWvcz9HkKg= +github.com/digitalocean/godo v1.122.0/go.mod h1:WQVH83OHUy6gC4gXpEVQKtxTd4L5oCp+5OialidkPLY= github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/docker v26.1.3+incompatible h1:lLCzRbrVZrljpVNobJu1J2FHk8V0s4BawoZippkc+xo= -github.com/docker/docker v26.1.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v27.2.0+incompatible h1:Rk9nIVdfH3+Vz4cyI/uhbINhEZ/oLmc+CBXmH6fbNk4= +github.com/docker/docker v27.2.0+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -168,11 +174,11 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.12.0 h1:4X+VP1GHd1Mhj6IB5mMeGbLCleqxjletLK6K0rbxyZI= -github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0= +github.com/envoyproxy/go-control-plane v0.13.0 h1:HzkeUz1Knt+3bK+8LG1bxOO/jzWZmdxpwC51i202les= +github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnvMg4d7nvT/wl9WgVXn3Q8= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= -github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= +github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= +github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= github.com/expr-lang/expr v1.16.9 h1:WUAzmR0JNI9JCiF0/ewwHB1gmcGw5wW7nWt8gc6PpCI= github.com/expr-lang/expr v1.16.9/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= github.com/facette/natsort v0.0.0-20181210072756-2cd4dd1e2dcb h1:IT4JYU7k4ikYg1SCxNI1/Tieq/NFvh6dzLdgi7eu0tM= @@ -192,6 +198,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-co-op/gocron v1.30.1 h1:tjWUvJl5KrcwpkEkSXFSQFr4F9h5SfV/m4+RX0cV2fs= github.com/go-co-op/gocron v1.30.1/go.mod h1:39f6KNSGVOU1LO/ZOoZfcSxwlsJDQOKSu8erN0SH48Y= @@ -242,8 +250,8 @@ github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg78 github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-viper/mapstructure/v2 v2.0.0 h1:dhn8MZ1gZ0mzeodTG3jt5Vj/o87xZKuNAprG2mQfMfc= github.com/go-viper/mapstructure/v2 v2.0.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= -github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg= -github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= +github.com/go-zookeeper/zk v1.0.4 h1:DPzxraQx7OrPyXq2phlGlNSIyWEsAox0RJmjTseMV6I= +github.com/go-zookeeper/zk v1.0.4/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= @@ -322,13 +330,17 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= +github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= +github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gophercloud/gophercloud v1.12.0 h1:Jrz16vPAL93l80q16fp8NplrTCp93y7rZh2P3Q4Yq7g= -github.com/gophercloud/gophercloud v1.12.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= +github.com/gophercloud/gophercloud v1.14.0 h1:Bt9zQDhPrbd4qX7EILGmy+i7GP35cc+AAL2+wIJpUE8= +github.com/gophercloud/gophercloud v1.14.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= @@ -348,11 +360,11 @@ github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc h1:GN2Lv3MGO7AS6PrR github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc/go.mod h1:+JKpmjMGhpgPL+rXZ5nsZieVzvarn86asRlBg4uNGnk= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= github.com/hashicorp/consul/api v1.13.0/go.mod h1:ZlVrynguJKcYr54zGaDbaL3fOvKC9m72FhPvA8T35KQ= -github.com/hashicorp/consul/api v1.29.1 h1:UEwOjYJrd3lG1x5w7HxDRMGiAUPrb3f103EoeKuuEcc= -github.com/hashicorp/consul/api v1.29.1/go.mod h1:lumfRkY/coLuqMICkI7Fh3ylMG31mQSRZyef2c5YvJI= +github.com/hashicorp/consul/api v1.29.4 h1:P6slzxDLBOxUSj3fWo2o65VuKtbtOXFi7TSSgtXutuE= +github.com/hashicorp/consul/api v1.29.4/go.mod h1:HUlfw+l2Zy68ceJavv2zAyArl2fqhGWnMycyt56sBgg= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/cronexpr v1.1.2 h1:wG/ZYIKT+RT3QkOdgYc+xsKWVRgnxJ1OJtjjy84fJ9A= github.com/hashicorp/cronexpr v1.1.2/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4= @@ -400,8 +412,8 @@ github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/nomad/api v0.0.0-20240604134157-e73d8bb1140d h1:KHq+mAzWSkumj4PDoXc5VZbycPGcmYu8tohgVLQ6SIc= -github.com/hashicorp/nomad/api v0.0.0-20240604134157-e73d8bb1140d/go.mod h1:svtxn6QnrQ69P23VvIWMR34tg3vmwLz4UdUzm1dSCgE= +github.com/hashicorp/nomad/api v0.0.0-20240717122358-3d93bd3778f3 h1:fgVfQ4AC1avVOnu2cfms8VAiD8lUq3vWI8mTocOXN/w= +github.com/hashicorp/nomad/api v0.0.0-20240717122358-3d93bd3778f3/go.mod h1:svtxn6QnrQ69P23VvIWMR34tg3vmwLz4UdUzm1dSCgE= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= @@ -409,8 +421,8 @@ github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoI github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/hetznercloud/hcloud-go/v2 v2.9.0 h1:s0N6R7Zoi2DPfMtUF5o9VeUBzTtHVY6MIkHOQnfu/AY= -github.com/hetznercloud/hcloud-go/v2 v2.9.0/go.mod h1:qtW/TuU7Bs16ibXl/ktJarWqU2LwHr7eGlwoilHxtgg= +github.com/hetznercloud/hcloud-go/v2 v2.13.1 h1:jq0GP4QaYE5d8xR/Zw17s9qoaESRJMXfGmtD1a/qckQ= +github.com/hetznercloud/hcloud-go/v2 v2.13.1/go.mod h1:dhix40Br3fDiBhwaSG/zgaYOFFddpfBm/6R1Zz0IiF0= github.com/hjson/hjson-go/v4 v4.0.0 h1:wlm6IYYqHjOdXH1gHev4VoXCaW20HdQAGCxdOEEg2cs= github.com/hjson/hjson-go/v4 v4.0.0/go.mod h1:KaYt3bTw3zhBjYqnXkYywcYctk0A2nxeEFTse3rH13E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= @@ -420,8 +432,8 @@ github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/ionos-cloud/sdk-go/v6 v6.1.11 h1:J/uRN4UWO3wCyGOeDdMKv8LWRzKu6UIkLEaes38Kzh8= -github.com/ionos-cloud/sdk-go/v6 v6.1.11/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k= +github.com/ionos-cloud/sdk-go/v6 v6.2.1 h1:mxxN+frNVmbFrmmFfXnBC3g2USYJrl6mc1LW2iNYbFY= +github.com/ionos-cloud/sdk-go/v6 v6.2.1/go.mod h1:SXrO9OGyWjd2rZhAhEpdYN6VUAODzzqRdqA9BCviQtI= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= @@ -452,8 +464,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kisielk/sqlstruct v0.0.0-20201105191214-5f3e10d3ab46/go.mod h1:yyMNCyc/Ib3bDTKd379tNMpB/7/H5TjM2Y9QJ5THLbE= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= -github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid v1.2.3 h1:CCtW0xUnWGVINKvE/WWOYKdsPV6mawAtvQuSl8guwQs= github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/knadh/koanf v1.5.0 h1:q2TSd/3Pyc/5yP9ldIrSdIz26MCcyNQzW0pEAugLPNs= @@ -484,8 +496,8 @@ github.com/leodido/ragel-machinery v0.0.0-20190525184631-5f46317e436b/go.mod h1: github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/linode/linodego v1.35.0 h1:rIhUeCHBLEDlkoRnOTwzSGzljQ3ksXwLxacmXnrV+Do= -github.com/linode/linodego v1.35.0/go.mod h1:JxuhOEAMfSxun6RU5/MgTKH2GGTmFrhKRj3wL1NFin0= +github.com/linode/linodego v1.40.0 h1:7ESY0PwK94hoggoCtIroT1Xk6b1flrFBNZ6KwqbTqlI= +github.com/linode/linodego v1.40.0/go.mod h1:NsUw4l8QrLdIofRg1NYFBbW5ZERnmbZykVBszPZLORM= github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c h1:VtwQ41oftZwlMnOEbMWQtSEUgU64U4s+GHk7hZK+jtY= github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= @@ -510,8 +522,8 @@ github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.59 h1:C9EXc/UToRwKLhK5wKU/I4QVsBUc8kE6MkHBkeypWZs= -github.com/miekg/dns v1.1.59/go.mod h1:nZpewl5p6IvctfgrckopVx2OlSEHPRO/U4SYkRklrEk= +github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ= +github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ= github.com/minio/md5-simd v1.1.0 h1:QPfiOqlZH+Cj9teu0t9b1nTBfPbyTl16Of5MeuShdK4= github.com/minio/md5-simd v1.1.0/go.mod h1:XpBqgZULrMYD3R+M28PcmP0CkI7PEMzB3U77ZrKZ0Gw= github.com/minio/minio-go/v6 v6.0.57 h1:ixPkbKkyD7IhnluRgQpGSpHdpvNVaW6OD5R9IAO/9Tw= @@ -571,9 +583,8 @@ github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3 github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= -github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= -github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/open-telemetry/opamp-go v0.5.0 h1:2YFbb6G4qBkq3yTRdVb5Nfz9hKHW/ldUyex352e1J7g= github.com/open-telemetry/opamp-go v0.5.0/go.mod h1:IMdeuHGVc5CjKSu5/oNV0o+UmiXuahoHvoZ4GOmAI9M= github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.102.0 h1:7QHxeMnKzMXMw9oh5lnOHakfPpGSglxiZfbYUn6l6yc= @@ -596,8 +607,8 @@ github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQ github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/ovh/go-ovh v1.5.1 h1:P8O+7H+NQuFK9P/j4sFW5C0fvSS2DnHYGPwdVCp45wI= -github.com/ovh/go-ovh v1.5.1/go.mod h1:cTVDnl94z4tl8pP1uZ/8jlVxntjSIf09bNcQ5TJSC7c= +github.com/ovh/go-ovh v1.6.0 h1:ixLOwxQdzYDx296sXcgS35TOPEahJkpjMGtzPadCjQI= +github.com/ovh/go-ovh v1.6.0/go.mod h1:cTVDnl94z4tl8pP1uZ/8jlVxntjSIf09bNcQ5TJSC7c= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= @@ -618,6 +629,8 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE 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/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -630,8 +643,8 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= -github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= +github.com/prometheus/client_golang v1.20.4 h1:Tgh3Yr67PaOv/uTqloMsCEdeuFTatm5zIq5+qNN23vI= +github.com/prometheus/client_golang v1.20.4/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -642,8 +655,8 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= -github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= +github.com/prometheus/common v0.59.1 h1:LXb1quJHWm1P6wq/U824uxYi4Sg0oGvNeUm1z5dJoX0= +github.com/prometheus/common v0.59.1/go.mod h1:GpWM7dewqmVYcd7SmRaiWVe9SSqjf0UrwnYnpEZNuT0= github.com/prometheus/common/sigv4 v0.1.0 h1:qoVebwtwwEhS85Czm2dSROY5fTo2PAPEVdDeppTwGX4= github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -674,8 +687,8 @@ github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFo github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM= github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= -github.com/scaleway/scaleway-sdk-go v1.0.0-beta.27 h1:yGAraK1uUjlhSXgNMIy8o/J4LFNcy7yeipBqt9N9mVg= -github.com/scaleway/scaleway-sdk-go v1.0.0-beta.27/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.30 h1:yoKAVkEVwAqbGbR8n87rHQ1dulL25rKloGadb3vm770= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.30/go.mod h1:sH0u6fq6x4R5M7WxkoQFY/o7UaiItec0o1LinLCJNq8= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys= github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= @@ -732,6 +745,7 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= @@ -747,6 +761,8 @@ github.com/vjeantet/grok v1.0.1 h1:2rhIR7J4gThTgcZ1m2JY4TrJZNgjn985U28kT2wQrJ4= github.com/vjeantet/grok v1.0.1/go.mod h1:ax1aAchzC6/QMXMcyzHQGZWaW1l195+uMYIkCWPCNIo= github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs= github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= @@ -819,30 +835,30 @@ go.opentelemetry.io/collector/featuregate v1.13.0 h1:rc84eCf5hesXQ8/bP6Zc15wqthb go.opentelemetry.io/collector/featuregate v1.13.0/go.mod h1:PsOINaGgTiFc+Tzu2K/X2jP+Ngmlp7YKGV1XrnBkH7U= go.opentelemetry.io/collector/otelcol v0.103.0 h1:Skqnc2mxDdk3eiYioUuG7ST6ur5k83SOv7mIBt60fBw= go.opentelemetry.io/collector/otelcol v0.103.0/go.mod h1:iJF3ghCv+nRZI6+hI7z3kGRZrgH///Fd9tNXY82X90g= -go.opentelemetry.io/collector/pdata v1.10.0 h1:oLyPLGvPTQrcRT64ZVruwvmH/u3SHTfNo01pteS4WOE= -go.opentelemetry.io/collector/pdata v1.10.0/go.mod h1:IHxHsp+Jq/xfjORQMDJjSH6jvedOSTOyu3nbxqhWSYE= +go.opentelemetry.io/collector/pdata v1.14.1 h1:wXZjtQA7Vy5HFqco+yA95ENyMQU5heBB1IxMHQf6mUk= +go.opentelemetry.io/collector/pdata v1.14.1/go.mod h1:z1dTjwwtcoXxZx2/nkHysjxMeaxe9pEmYTEr4SMNIx8= go.opentelemetry.io/collector/pdata/testdata v0.103.0 h1:iI6NOE0L2je/bxlWzAWHQ/yCtnGupgv42Hl9Al1q/g4= go.opentelemetry.io/collector/pdata/testdata v0.103.0/go.mod h1:tLzRhb/h37/9wFRQVr+CxjKi5qmhSRpCAiOlhwRkeEk= go.opentelemetry.io/collector/processor v0.103.0 h1:YZ+LRuHKtOam7SCeLkJAP6bS1d6XxeYP22OyMN3VP0s= go.opentelemetry.io/collector/processor v0.103.0/go.mod h1:/mxyh0NpJgpZycm7iHDpM7i5PdtWvKKdCZf0cyADJfU= go.opentelemetry.io/collector/receiver v0.103.0 h1:V3JBKkX+7e/NYpDDZVyeu2VQB1/lLFuoJFPfupdCcZs= go.opentelemetry.io/collector/receiver v0.103.0/go.mod h1:Yybv4ynKFdMOYViWWPMmjkugR89FSQN0P37wP6mX6qM= -go.opentelemetry.io/collector/semconv v0.103.0 h1:5tlVoZlo9USHAU2Bz4YrEste0Vm5AMufXkYJhAVve1Q= -go.opentelemetry.io/collector/semconv v0.103.0/go.mod h1:yMVUCNoQPZVq/IPfrHrnntZTWsLf5YGZ7qwKulIl5hw= +go.opentelemetry.io/collector/semconv v0.108.1 h1:Txk9tauUnamZaxS5vlf1O0uZ4VD6nioRBR0nX8L/fU4= +go.opentelemetry.io/collector/semconv v0.108.1/go.mod h1:zCJ5njhWpejR+A40kiEoeFm1xq1uzyZwMnRNX6/D82A= go.opentelemetry.io/collector/service v0.103.0 h1:e4Eri4jo+YOuEK0+/JE9SUdT/NZaJ2jz/ROJlmLn96s= go.opentelemetry.io/collector/service v0.103.0/go.mod h1:p1mlniiC1MuPN5FANYJYgf5V5CGFP0hNqWfI8t7Aw8M= go.opentelemetry.io/contrib/bridges/otelzap v0.0.0-20240820072021-3fab5f5f20fb h1:ZqncifxU0B1q64FRbhKxsJugRsrEToakmYUsgQ5tGbY= go.opentelemetry.io/contrib/bridges/otelzap v0.0.0-20240820072021-3fab5f5f20fb/go.mod h1:mzv0k5dTnSUE5/ZerXUwGiNKzcPJTakuCh6Wm1emNvU= go.opentelemetry.io/contrib/config v0.8.0 h1:OD7aDMhL+2EpzdSHfkDmcdD/uUA+PgKM5faFyF9XFT0= go.opentelemetry.io/contrib/config v0.8.0/go.mod h1:dGeVZWE//3wrxYHHP0iCBYJU1QmOmPcbV+FNB7pjDYI= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0 h1:9l89oX4ba9kHbBol3Xin3leYJ+252h0zszDtBwyKe2A= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0/go.mod h1:XLZfZboOJWHNKUv7eH0inh0E9VV6eWDFB/9yJyTLPp0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= go.opentelemetry.io/contrib/propagators/b3 v1.27.0 h1:IjgxbomVrV9za6bRi8fWCNXENs0co37SZedQilP2hm0= go.opentelemetry.io/contrib/propagators/b3 v1.27.0/go.mod h1:Dv9obQz25lCisDvvs4dy28UPh974CxkahRDUPsY7y9E= go.opentelemetry.io/contrib/zpages v0.52.0 h1:MPgkMy0Cp3O5EdfVXP0ss3ujhEibysTM4eszx7E7d+E= go.opentelemetry.io/contrib/zpages v0.52.0/go.mod h1:fqG5AFdoYru3A3DnhibVuaaEfQV2WKxE7fYE1jgDRwk= -go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= -go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= +go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw= +go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= go.opentelemetry.io/otel/bridge/opencensus v1.27.0 h1:ao9aGGHd+G4YfjBpGs6vbkvt5hoC67STlJA9fCnOAcs= go.opentelemetry.io/otel/bridge/opencensus v1.27.0/go.mod h1:uRvWtAAXzyVOST0WMPX5JHGBaAvBws+2F8PcC5gMnTk= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.4.0 h1:zBPZAISA9NOc5cE8zydqDiS0itvg/P/0Hn9m72a5gvM= @@ -851,12 +867,12 @@ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0 h1:U2g go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0/go.mod h1:yeGZANgEcpdx/WK0IvvRFC+2oLiMS2u4L/0Rj2M2Qr0= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.28.0 h1:aLmmtjRke7LPDQ3lvpFz+kNEH43faFhzW7v8BFIEydg= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.28.0/go.mod h1:TC1pyCt6G9Sjb4bQpShH+P5R53pO6ZuGnHuuln9xMeE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 h1:R3X6ZXmNPRR8ul6i3WgFURCHzaXjHdm0karRG/+dj3s= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0/go.mod h1:QWFXnDavXWwMx2EEcZsf3yxgEKAqsxQ+Syjp+seyInw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0 h1:j9+03ymgYhPKmeXGk5Zu+cIZOlVzd9Zv7QIiyItjFBU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0/go.mod h1:Y5+XiUG4Emn1hTfciPzGPJaSI+RpDts6BnCIir0SLqk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 h1:dIIDULZJpgdiHz5tXrTgKIMLkus6jEFa7x5SOKcyR7E= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0/go.mod h1:jlRVBe7+Z1wyxFSUs48L6OBQZ5JwH2Hg/Vbl+t9rAgI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0 h1:nSiV3s7wiCam610XcLbYOmMfJxB9gO4uK3Xgv5gmTgg= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.29.0/go.mod h1:hKn/e/Nmd19/x1gvIHwtOwVWM+VhuITSWip3JUDghj0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0 h1:JAv0Jwtl01UFiyWZEMiJZBiTlv5A50zNs8lsthXqIio= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.29.0/go.mod h1:QNKLmUEAq2QUbPQUfvw4fmv0bgbK7UlOSFCnXyfvSNc= go.opentelemetry.io/otel/exporters/prometheus v0.50.0 h1:2Ewsda6hejmbhGFyUvWZjUThC98Cf8Zy6g0zkIimOng= go.opentelemetry.io/otel/exporters/prometheus v0.50.0/go.mod h1:pMm5PkUo5YwbLiuEf7t2xg4wbP0/eSJrMxIMxKosynY= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.28.0 h1:BJee2iLkfRfl9lc7aFmBwkWxY/RI1RDdXepSF6y8TPE= @@ -865,16 +881,16 @@ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0 h1:EVSnY9JbEEW92bE go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.28.0/go.mod h1:Ea1N1QQryNXpCD0I1fdLibBAIpQuBkznMmkdKrapk1Y= go.opentelemetry.io/otel/log v0.4.0 h1:/vZ+3Utqh18e8TPjuc3ecg284078KWrR8BRz+PQAj3o= go.opentelemetry.io/otel/log v0.4.0/go.mod h1:DhGnQvky7pHy82MIRV43iXh3FlKN8UUKftn0KbLOq6I= -go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= -go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= -go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= -go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= +go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= +go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= +go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo= +go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok= go.opentelemetry.io/otel/sdk/log v0.4.0 h1:1mMI22L82zLqf6KtkjrRy5BbagOTWdJsqMY/HSqILAA= go.opentelemetry.io/otel/sdk/log v0.4.0/go.mod h1:AYJ9FVF0hNOgAVzUG/ybg/QttnXhUePWAupmCqtdESo= go.opentelemetry.io/otel/sdk/metric v1.28.0 h1:OkuaKgKrgAbYrrY0t92c+cC+2F6hsFNnCQArXCKlg08= go.opentelemetry.io/otel/sdk/metric v1.28.0/go.mod h1:cWPjykihLAPvXKi4iZc1dpER3Jdq2Z0YLse3moQUCpg= -go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= -go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= +go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= +go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= @@ -898,8 +914,8 @@ golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -934,8 +950,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= -golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= +golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -977,16 +993,16 @@ golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= -golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= +golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -998,8 +1014,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1063,11 +1079,11 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= +golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1077,13 +1093,13 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= +golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -1130,8 +1146,8 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= -golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= +golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= +golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1154,6 +1170,8 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.195.0 h1:Ude4N8FvTKnnQJHU48RFI40jOBgIrL8Zqr3/QeST6yU= +google.golang.org/api v0.195.0/go.mod h1:DOGRWuv3P8TU8Lnz7uQc4hyNqrBpMtD9ppW3wBJurgc= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1192,10 +1210,10 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 h1:0+ozOGcrp+Y8Aq8TLNN2Aliibms5LEzsq99ZZmAGYm0= -google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094/go.mod h1:fJ/e3If/Q67Mj99hin0hMhiNyCRmt6BQ2aWIJshUSJw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed h1:3RgNmBoI9MZhsj3QxC+AP/qQhNwpCLOvYDYYsFrhFt0= +google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:OCdP9MfskevB/rbYvHTsXTtKC+3bHWajPdoKgjcYkfo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -1213,8 +1231,8 @@ google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= -google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= +google.golang.org/grpc v1.66.0 h1:DibZuoBznOxbDQxRINckZcUvnCEvrW9pcWIE2yF9r1c= +google.golang.org/grpc v1.66.0/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1269,18 +1287,18 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.29.3 h1:2ORfZ7+bGC3YJqGpV0KSDDEVf8hdGQ6A03/50vj8pmw= -k8s.io/api v0.29.3/go.mod h1:y2yg2NTyHUUkIoTC+phinTnEa3KFM6RZ3szxt014a80= -k8s.io/apimachinery v0.29.3 h1:2tbx+5L7RNvqJjn7RIuIKu9XTsIZ9Z5wX2G22XAa5EU= -k8s.io/apimachinery v0.29.3/go.mod h1:hx/S4V2PNW4OMg3WizRrHutyB5la0iCUbZym+W0EQIU= -k8s.io/client-go v0.29.3 h1:R/zaZbEAxqComZ9FHeQwOh3Y1ZUs7FaHKZdQtIc2WZg= -k8s.io/client-go v0.29.3/go.mod h1:tkDisCvgPfiRpxGnOORfkljmS+UrW+WtXAy2fTvXJB0= -k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw= -k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/api v0.31.0 h1:b9LiSjR2ym/SzTOlfMHm1tr7/21aD7fSkqgD/CVJBCo= +k8s.io/api v0.31.0/go.mod h1:0YiFF+JfFxMM6+1hQei8FY8M7s1Mth+z/q7eF1aJkTE= +k8s.io/apimachinery v0.31.0 h1:m9jOiSr3FoSSL5WO9bjm1n6B9KROYYgNZOb4tyZ1lBc= +k8s.io/apimachinery v0.31.0/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/client-go v0.31.0 h1:QqEJzNjbN2Yv1H79SsS+SWnXkBgVu4Pj3CJQgbx0gI8= +k8s.io/client-go v0.31.0/go.mod h1:Y9wvC76g4fLjmU0BA+rV+h2cncoadjvjjkkIGoTLcGU= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= -k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0 h1:jgGTlFYnhF1PM1Ax/lAlxUPE+KfCIXHaathvJg1C3ak= -k8s.io/utils v0.0.0-20240502163921-fe8a2dddb1d0/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/pkg/query-service/app/clickhouseReader/reader.go b/pkg/query-service/app/clickhouseReader/reader.go index 58852611c9..18078c0931 100644 --- a/pkg/query-service/app/clickhouseReader/reader.go +++ b/pkg/query-service/app/clickhouseReader/reader.go @@ -280,6 +280,7 @@ func (r *ClickHouseReader) Start(readerReady chan bool) { "", time.Duration(1*time.Minute), nil, + false, ) cfg := struct { diff --git a/pkg/query-service/main.go b/pkg/query-service/main.go index d1b191f248..cd6a542220 100644 --- a/pkg/query-service/main.go +++ b/pkg/query-service/main.go @@ -8,6 +8,7 @@ import ( "syscall" "time" + prommodel "github.com/prometheus/common/model" "go.signoz.io/signoz/pkg/query-service/app" "go.signoz.io/signoz/pkg/query-service/auth" "go.signoz.io/signoz/pkg/query-service/constants" @@ -27,6 +28,10 @@ func initZapLog() *zap.Logger { return logger } +func init() { + prommodel.NameValidationScheme = prommodel.UTF8Validation +} + func main() { var promConfigPath, skipTopLvlOpsPath string diff --git a/pkg/query-service/pqlEngine/engine.go b/pkg/query-service/pqlEngine/engine.go index 0ecb7fc766..7362e8f0c9 100644 --- a/pkg/query-service/pqlEngine/engine.go +++ b/pkg/query-service/pqlEngine/engine.go @@ -76,6 +76,7 @@ func NewPqlEngine(config *pconfig.Config) (*PqlEngine, error) { "", time.Duration(1*time.Minute), nil, + false, ) fanoutStorage := pstorage.NewFanout(logger, remoteStorage) From b70d50f2b3f56a24ddb9650853a3df8690c9127c Mon Sep 17 00:00:00 2001 From: Prashant Shahi Date: Thu, 10 Oct 2024 15:34:29 +0530 Subject: [PATCH 49/50] chore: pin versions: SigNoz 0.56.0, OtelCollector 0.102.12, Alertmanager 0.23.7 Signed-off-by: Prashant Shahi --- .../docker-swarm/clickhouse-setup/docker-compose.yaml | 10 +++++----- .../docker/clickhouse-setup/docker-compose-core.yaml | 6 +++--- .../clickhouse-setup/docker-compose-minimal.yaml | 10 +++++----- .../clickhouse-setup/docker-compose.testing.yaml | 10 +++++----- go.mod | 2 +- go.sum | 4 ++-- pkg/query-service/README.md | 2 +- .../tests/test-deploy/docker-compose.yaml | 6 +++--- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/deploy/docker-swarm/clickhouse-setup/docker-compose.yaml b/deploy/docker-swarm/clickhouse-setup/docker-compose.yaml index c8d9e54421..b979a05607 100644 --- a/deploy/docker-swarm/clickhouse-setup/docker-compose.yaml +++ b/deploy/docker-swarm/clickhouse-setup/docker-compose.yaml @@ -133,7 +133,7 @@ services: # - ./data/clickhouse-3/:/var/lib/clickhouse/ alertmanager: - image: signoz/alertmanager:0.23.5 + image: signoz/alertmanager:0.23.7 volumes: - ./data/alertmanager:/data command: @@ -146,7 +146,7 @@ services: condition: on-failure query-service: - image: signoz/query-service:0.55.0 + image: signoz/query-service:0.56.0 command: [ "-config=/root/config/prometheus.yml", @@ -186,7 +186,7 @@ services: <<: *db-depend frontend: - image: signoz/frontend:0.55.0 + image: signoz/frontend:0.56.0 deploy: restart_policy: condition: on-failure @@ -199,7 +199,7 @@ services: - ../common/nginx-config.conf:/etc/nginx/conf.d/default.conf otel-collector: - image: signoz/signoz-otel-collector:0.102.10 + image: signoz/signoz-otel-collector:0.102.12 command: [ "--config=/etc/otel-collector-config.yaml", @@ -238,7 +238,7 @@ services: - query-service otel-collector-migrator: - image: signoz/signoz-schema-migrator:0.102.10 + image: signoz/signoz-schema-migrator:0.102.12 deploy: restart_policy: condition: on-failure diff --git a/deploy/docker/clickhouse-setup/docker-compose-core.yaml b/deploy/docker/clickhouse-setup/docker-compose-core.yaml index 5309d80cb9..9a7c69d693 100644 --- a/deploy/docker/clickhouse-setup/docker-compose-core.yaml +++ b/deploy/docker/clickhouse-setup/docker-compose-core.yaml @@ -57,7 +57,7 @@ services: alertmanager: container_name: signoz-alertmanager - image: signoz/alertmanager:0.23.5 + image: signoz/alertmanager:0.23.7 volumes: - ./data/alertmanager:/data depends_on: @@ -69,7 +69,7 @@ services: - --storage.path=/data otel-collector-migrator: - image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.10} + image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.12} container_name: otel-migrator command: - "--dsn=tcp://clickhouse:9000" @@ -84,7 +84,7 @@ services: # Notes for Maintainers/Contributors who will change Line Numbers of Frontend & Query-Section. Please Update Line Numbers in `./scripts/commentLinesForSetup.sh` & `./CONTRIBUTING.md` otel-collector: container_name: signoz-otel-collector - image: signoz/signoz-otel-collector:0.102.10 + image: signoz/signoz-otel-collector:0.102.12 command: [ "--config=/etc/otel-collector-config.yaml", diff --git a/deploy/docker/clickhouse-setup/docker-compose-minimal.yaml b/deploy/docker/clickhouse-setup/docker-compose-minimal.yaml index 508ba58030..3091a2ec11 100644 --- a/deploy/docker/clickhouse-setup/docker-compose-minimal.yaml +++ b/deploy/docker/clickhouse-setup/docker-compose-minimal.yaml @@ -147,7 +147,7 @@ services: # - ./user_scripts:/var/lib/clickhouse/user_scripts/ alertmanager: - image: signoz/alertmanager:${ALERTMANAGER_TAG:-0.23.5} + image: signoz/alertmanager:${ALERTMANAGER_TAG:-0.23.7} container_name: signoz-alertmanager volumes: - ./data/alertmanager:/data @@ -162,7 +162,7 @@ services: # Notes for Maintainers/Contributors who will change Line Numbers of Frontend & Query-Section. Please Update Line Numbers in `./scripts/commentLinesForSetup.sh` & `./CONTRIBUTING.md` query-service: - image: signoz/query-service:${DOCKER_TAG:-0.55.0} + image: signoz/query-service:${DOCKER_TAG:-0.56.0} container_name: signoz-query-service command: [ @@ -201,7 +201,7 @@ services: <<: *db-depend frontend: - image: signoz/frontend:${DOCKER_TAG:-0.55.0} + image: signoz/frontend:${DOCKER_TAG:-0.56.0} container_name: signoz-frontend restart: on-failure depends_on: @@ -213,7 +213,7 @@ services: - ../common/nginx-config.conf:/etc/nginx/conf.d/default.conf otel-collector-migrator: - image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.10} + image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.12} container_name: otel-migrator command: - "--dsn=tcp://clickhouse:9000" @@ -227,7 +227,7 @@ services: otel-collector: - image: signoz/signoz-otel-collector:${OTELCOL_TAG:-0.102.10} + image: signoz/signoz-otel-collector:${OTELCOL_TAG:-0.102.12} container_name: signoz-otel-collector command: [ diff --git a/deploy/docker/clickhouse-setup/docker-compose.testing.yaml b/deploy/docker/clickhouse-setup/docker-compose.testing.yaml index bfdd578dcc..847e0e1d8f 100644 --- a/deploy/docker/clickhouse-setup/docker-compose.testing.yaml +++ b/deploy/docker/clickhouse-setup/docker-compose.testing.yaml @@ -152,7 +152,7 @@ services: # - ./user_scripts:/var/lib/clickhouse/user_scripts/ alertmanager: - image: signoz/alertmanager:${ALERTMANAGER_TAG:-0.23.5} + image: signoz/alertmanager:${ALERTMANAGER_TAG:-0.23.7} container_name: signoz-alertmanager volumes: - ./data/alertmanager:/data @@ -167,7 +167,7 @@ services: # Notes for Maintainers/Contributors who will change Line Numbers of Frontend & Query-Section. Please Update Line Numbers in `./scripts/commentLinesForSetup.sh` & `./CONTRIBUTING.md` query-service: - image: signoz/query-service:${DOCKER_TAG:-0.55.0} + image: signoz/query-service:${DOCKER_TAG:-0.56.0} container_name: signoz-query-service command: [ @@ -207,7 +207,7 @@ services: <<: *db-depend frontend: - image: signoz/frontend:${DOCKER_TAG:-0.55.0} + image: signoz/frontend:${DOCKER_TAG:-0.56.0} container_name: signoz-frontend restart: on-failure depends_on: @@ -219,7 +219,7 @@ services: - ../common/nginx-config.conf:/etc/nginx/conf.d/default.conf otel-collector-migrator: - image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.10} + image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.12} container_name: otel-migrator command: - "--dsn=tcp://clickhouse:9000" @@ -233,7 +233,7 @@ services: otel-collector: - image: signoz/signoz-otel-collector:${OTELCOL_TAG:-0.102.10} + image: signoz/signoz-otel-collector:${OTELCOL_TAG:-0.102.12} container_name: signoz-otel-collector command: [ diff --git a/go.mod b/go.mod index 983c58ce34..04ec7d710a 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/ClickHouse/clickhouse-go/v2 v2.25.0 github.com/DATA-DOG/go-sqlmock v1.5.2 github.com/SigNoz/govaluate v0.0.0-20240203125216-988004ccc7fd - github.com/SigNoz/signoz-otel-collector v0.102.10 + github.com/SigNoz/signoz-otel-collector v0.102.12 github.com/SigNoz/zap_otlp/zap_otlp_encoder v0.0.0-20230822164844-1b861a431974 github.com/SigNoz/zap_otlp/zap_otlp_sync v0.0.0-20230822164844-1b861a431974 github.com/antonmedv/expr v1.15.3 diff --git a/go.sum b/go.sum index 3a8da03859..0b935bba50 100644 --- a/go.sum +++ b/go.sum @@ -70,8 +70,8 @@ github.com/SigNoz/govaluate v0.0.0-20240203125216-988004ccc7fd h1:Bk43AsDYe0fhkb github.com/SigNoz/govaluate v0.0.0-20240203125216-988004ccc7fd/go.mod h1:nxRcH/OEdM8QxzH37xkGzomr1O0JpYBRS6pwjsWW6Pc= github.com/SigNoz/prometheus v1.12.0 h1:+BXeIHyMOOWWa+xjhJ+x80JFva7r1WzWIfIhQ5PUmIE= github.com/SigNoz/prometheus v1.12.0/go.mod h1:EqNM27OwmPfqMUk+E+XG1L9rfDFcyXnzzDrg0EPOfxA= -github.com/SigNoz/signoz-otel-collector v0.102.10 h1:1zjU31OcRZL6fS0IIag8LA8bdhP4S28dzovDwuOg7Lg= -github.com/SigNoz/signoz-otel-collector v0.102.10/go.mod h1:APoBVD4aRu9vIny1vdzZSi2wPY3elyjHA/I/rh1hKfs= +github.com/SigNoz/signoz-otel-collector v0.102.12 h1:5yY0IBtNz6SHMzKzwHmKfIx99Ij8mr72nDI2Xi08pDQ= +github.com/SigNoz/signoz-otel-collector v0.102.12/go.mod h1:tcNyU+NSn7ZkzZcLa+k+dJIPOPV+CjHn3+z1SICAfdA= github.com/SigNoz/zap_otlp v0.1.0 h1:T7rRcFN87GavY8lDGZj0Z3Xv6OhJA6Pj3I9dNPmqvRc= github.com/SigNoz/zap_otlp v0.1.0/go.mod h1:lcHvbDbRgvDnPxo9lDlaL1JK2PyOyouP/C3ynnYIvyo= github.com/SigNoz/zap_otlp/zap_otlp_encoder v0.0.0-20230822164844-1b861a431974 h1:PKVgdf83Yw+lZJbFtNGBgqXiXNf3+kOXW2qZ7Ms7OaY= diff --git a/pkg/query-service/README.md b/pkg/query-service/README.md index 83925eece7..0087230d8d 100644 --- a/pkg/query-service/README.md +++ b/pkg/query-service/README.md @@ -13,7 +13,7 @@ https://github.com/SigNoz/signoz/blob/main/CONTRIBUTING.md#to-run-clickhouse-set - Change the alertmanager section in `signoz/deploy/docker/clickhouse-setup/docker-compose.yaml` as follows: ```console alertmanager: - image: signoz/alertmanager:0.23.5 + image: signoz/alertmanager:0.23.7 volumes: - ./data/alertmanager:/data expose: diff --git a/pkg/query-service/tests/test-deploy/docker-compose.yaml b/pkg/query-service/tests/test-deploy/docker-compose.yaml index 1b4cdf6f0d..4a705970b9 100644 --- a/pkg/query-service/tests/test-deploy/docker-compose.yaml +++ b/pkg/query-service/tests/test-deploy/docker-compose.yaml @@ -138,7 +138,7 @@ services: # - ./data/clickhouse-3/:/var/lib/clickhouse/ alertmanager: - image: signoz/alertmanager:0.23.5 + image: signoz/alertmanager:0.23.7 container_name: signoz-alertmanager volumes: - ./data/alertmanager:/data @@ -192,7 +192,7 @@ services: <<: *db-depend otel-collector-migrator: - image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.10} + image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.12} container_name: otel-migrator command: - "--dsn=tcp://clickhouse:9000" @@ -205,7 +205,7 @@ services: # condition: service_healthy otel-collector: - image: signoz/signoz-otel-collector:0.102.10 + image: signoz/signoz-otel-collector:0.102.12 container_name: signoz-otel-collector command: [ From 5588c7dd3fe30f6ba194b074e838c0cb07b8662b Mon Sep 17 00:00:00 2001 From: Prashant Shahi Date: Thu, 10 Oct 2024 19:41:47 +0530 Subject: [PATCH 50/50] revert(signoz): pin versions: Schema Migrator 0.102.10 Signed-off-by: Prashant Shahi --- deploy/docker-swarm/clickhouse-setup/docker-compose.yaml | 2 +- deploy/docker/clickhouse-setup/docker-compose-core.yaml | 2 +- deploy/docker/clickhouse-setup/docker-compose-minimal.yaml | 2 +- deploy/docker/clickhouse-setup/docker-compose.testing.yaml | 2 +- pkg/query-service/tests/test-deploy/docker-compose.yaml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/deploy/docker-swarm/clickhouse-setup/docker-compose.yaml b/deploy/docker-swarm/clickhouse-setup/docker-compose.yaml index b979a05607..a36fa711a4 100644 --- a/deploy/docker-swarm/clickhouse-setup/docker-compose.yaml +++ b/deploy/docker-swarm/clickhouse-setup/docker-compose.yaml @@ -238,7 +238,7 @@ services: - query-service otel-collector-migrator: - image: signoz/signoz-schema-migrator:0.102.12 + image: signoz/signoz-schema-migrator:0.102.10 deploy: restart_policy: condition: on-failure diff --git a/deploy/docker/clickhouse-setup/docker-compose-core.yaml b/deploy/docker/clickhouse-setup/docker-compose-core.yaml index 9a7c69d693..0e902a9e28 100644 --- a/deploy/docker/clickhouse-setup/docker-compose-core.yaml +++ b/deploy/docker/clickhouse-setup/docker-compose-core.yaml @@ -69,7 +69,7 @@ services: - --storage.path=/data otel-collector-migrator: - image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.12} + image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.10} container_name: otel-migrator command: - "--dsn=tcp://clickhouse:9000" diff --git a/deploy/docker/clickhouse-setup/docker-compose-minimal.yaml b/deploy/docker/clickhouse-setup/docker-compose-minimal.yaml index 3091a2ec11..e12fb3831c 100644 --- a/deploy/docker/clickhouse-setup/docker-compose-minimal.yaml +++ b/deploy/docker/clickhouse-setup/docker-compose-minimal.yaml @@ -213,7 +213,7 @@ services: - ../common/nginx-config.conf:/etc/nginx/conf.d/default.conf otel-collector-migrator: - image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.12} + image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.10} container_name: otel-migrator command: - "--dsn=tcp://clickhouse:9000" diff --git a/deploy/docker/clickhouse-setup/docker-compose.testing.yaml b/deploy/docker/clickhouse-setup/docker-compose.testing.yaml index 847e0e1d8f..2bf0996da4 100644 --- a/deploy/docker/clickhouse-setup/docker-compose.testing.yaml +++ b/deploy/docker/clickhouse-setup/docker-compose.testing.yaml @@ -219,7 +219,7 @@ services: - ../common/nginx-config.conf:/etc/nginx/conf.d/default.conf otel-collector-migrator: - image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.12} + image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.10} container_name: otel-migrator command: - "--dsn=tcp://clickhouse:9000" diff --git a/pkg/query-service/tests/test-deploy/docker-compose.yaml b/pkg/query-service/tests/test-deploy/docker-compose.yaml index 4a705970b9..562f19d83a 100644 --- a/pkg/query-service/tests/test-deploy/docker-compose.yaml +++ b/pkg/query-service/tests/test-deploy/docker-compose.yaml @@ -192,7 +192,7 @@ services: <<: *db-depend otel-collector-migrator: - image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.12} + image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-0.102.10} container_name: otel-migrator command: - "--dsn=tcp://clickhouse:9000"