diff --git a/frontend/src/components/TextToolTip/index.tsx b/frontend/src/components/TextToolTip/index.tsx index 06802b475f..60032ab5c9 100644 --- a/frontend/src/components/TextToolTip/index.tsx +++ b/frontend/src/components/TextToolTip/index.tsx @@ -24,8 +24,11 @@ function TextToolTip({ text, url }: TextToolTipProps): JSX.Element { ); } +TextToolTip.defaultProps = { + url: '', +}; interface TextToolTipProps { - url: string; + url?: string; text: string; } diff --git a/frontend/src/container/GridGraphLayout/utils.ts b/frontend/src/container/GridGraphLayout/utils.ts index c2c762e1f7..0d7320f6f5 100644 --- a/frontend/src/container/GridGraphLayout/utils.ts +++ b/frontend/src/container/GridGraphLayout/utils.ts @@ -36,18 +36,17 @@ export const UpdateDashboard = async ({ nullZeroValues: '', opacity: '', panelTypes: graphType, - queryType: 0, query: { queryType: EQueryType.QUERY_BUILDER, promQL: [ { - name: GetQueryName([]), + name: GetQueryName([]) || '', ...PromQLQueryTemplate, }, ], clickHouse: [ { - name: GetQueryName([]), + name: GetQueryName([]) || '', ...ClickHouseQueryTemplate, }, ], @@ -55,14 +54,14 @@ export const UpdateDashboard = async ({ formulas: [], queryBuilder: [ { - name: GetQueryName([]), + name: GetQueryName([]) || '', ...QueryBuilderQueryTemplate, }, ], }, }, queryData: { - data: [], + data: { queryData: [] }, error: false, errorMessage: '', loading: false, diff --git a/frontend/src/container/ListOfDashboard/ImportJSON/index.tsx b/frontend/src/container/ListOfDashboard/ImportJSON/index.tsx index 99f5fb0eeb..021a5f9805 100644 --- a/frontend/src/container/ListOfDashboard/ImportJSON/index.tsx +++ b/frontend/src/container/ListOfDashboard/ImportJSON/index.tsx @@ -73,10 +73,7 @@ function ImportJSON({ ...e, queryData: { ...e.queryData, - data: e.queryData.data.map((queryData) => ({ - ...queryData, - queryData: [], - })), + data: e.queryData.data, error: false, errorMessage: '', loading: false, diff --git a/frontend/src/container/MetricsApplication/Tabs/DBCall.tsx b/frontend/src/container/MetricsApplication/Tabs/DBCall.tsx index b5466f2b02..60441b7876 100644 --- a/frontend/src/container/MetricsApplication/Tabs/DBCall.tsx +++ b/frontend/src/container/MetricsApplication/Tabs/DBCall.tsx @@ -4,7 +4,7 @@ import React from 'react'; import { useSelector } from 'react-redux'; import { useParams } from 'react-router-dom'; import { AppState } from 'store/reducers'; -import { PromQLWidgets, Widgets } from 'types/api/dashboard/getAll'; +import { PromQLWidgets } from 'types/api/dashboard/getAll'; import MetricReducer from 'types/reducer/metrics'; import { Card, GraphContainer, GraphTitle, Row } from '../styles'; diff --git a/frontend/src/container/MetricsApplication/Tabs/External.tsx b/frontend/src/container/MetricsApplication/Tabs/External.tsx index 2974ba3f38..9811e2f269 100644 --- a/frontend/src/container/MetricsApplication/Tabs/External.tsx +++ b/frontend/src/container/MetricsApplication/Tabs/External.tsx @@ -29,7 +29,7 @@ function External({ getWidget }: ExternalProps): JSX.Element { widget={getWidget([ { query: `max((sum(rate(signoz_external_call_latency_count{service_name="${servicename}", status_code="STATUS_CODE_ERROR"${resourceAttributePromQLQuery}}[1m]) OR rate(signoz_external_call_latency_count{service_name="${servicename}", http_status_code=~"5.."${resourceAttributePromQLQuery}}[1m]) OR vector(0)) by (http_url))*100/sum(rate(signoz_external_call_latency_count{service_name="${servicename}"${resourceAttributePromQLQuery}}[1m])) by (http_url)) < 1000 OR vector(0)`, - legend, + legend: 'External Call Error Percentage', }, ])} yAxisUnit="%" diff --git a/frontend/src/container/MetricsApplication/Tabs/Overview.tsx b/frontend/src/container/MetricsApplication/Tabs/Overview.tsx index a24e67aeb7..a53714d05d 100644 --- a/frontend/src/container/MetricsApplication/Tabs/Overview.tsx +++ b/frontend/src/container/MetricsApplication/Tabs/Overview.tsx @@ -42,7 +42,8 @@ function Application({ getWidget }: DashboardProps): JSX.Element { urlParams.set(METRICS_PAGE_QUERY_PARAM.endTime, tPlusOne.toString()); history.replace( - `${ROUTES.TRACE + `${ + ROUTES.TRACE }?${urlParams.toString()}&selected={"serviceName":["${servicename}"]}&filterToFetchData=["duration","status","serviceName"]&spanAggregateCurrentPage=1&selectedTags=${selectedTraceTags}&&isFilterExclude={"serviceName":false}&userSelectedFilter={"status":["error","ok"],"serviceName":["${servicename}"]}&spanAggregateCurrentPage=1&spanAggregateOrder=ascend`, ); }; @@ -93,7 +94,8 @@ function Application({ getWidget }: DashboardProps): JSX.Element { urlParams.set(METRICS_PAGE_QUERY_PARAM.endTime, tPlusOne.toString()); history.replace( - `${ROUTES.TRACE + `${ + ROUTES.TRACE }?${urlParams.toString()}?selected={"serviceName":["${servicename}"],"status":["error"]}&filterToFetchData=["duration","status","serviceName"]&spanAggregateCurrentPage=1&selectedTags=${selectedTraceTags}&isFilterExclude={"serviceName":false,"status":false}&userSelectedFilter={"serviceName":["${servicename}"],"status":["error"]}&spanAggregateCurrentPage=1&spanAggregateOrder=ascend`, ); }; diff --git a/frontend/src/container/MetricsApplication/index.tsx b/frontend/src/container/MetricsApplication/index.tsx index aeaf4a5664..f6305358b3 100644 --- a/frontend/src/container/MetricsApplication/index.tsx +++ b/frontend/src/container/MetricsApplication/index.tsx @@ -20,7 +20,7 @@ const getWidget = (query: PromQLWidgets['query']): PromQLWidgets => { panelTypes: 'TIME_SERIES', query, queryData: { - data: [], + data: { queryData: [] }, error: false, errorMessage: '', loading: false, diff --git a/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/Options.ts b/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/Options.ts index 80a14f173b..38d9094dcc 100644 --- a/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/Options.ts +++ b/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/Options.ts @@ -5,7 +5,7 @@ export const AggregateFunctions = Object.keys(EAggregateOperator) .map((key) => { return { label: key, - value: EAggregateOperator[key], + value: EAggregateOperator[key as keyof typeof EAggregateOperator], }; }); diff --git a/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/QueryHeader.tsx b/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/QueryHeader.tsx index 9164c532af..6584cdc390 100644 --- a/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/QueryHeader.tsx +++ b/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/QueryHeader.tsx @@ -10,13 +10,21 @@ import React, { useState } from 'react'; import { QueryWrapper } from '../styles'; +interface IQueryHeaderProps { + disabled: boolean; + onDisable: VoidFunction; + name: string; + onDelete: VoidFunction; + children: React.ReactNode; +} + function QueryHeader({ disabled, onDisable, name, onDelete, children, -}): JSX.Element { +}: IQueryHeaderProps): JSX.Element { const [collapse, setCollapse] = useState(false); return ( diff --git a/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/clickHouse/index.tsx b/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/clickHouse/index.tsx index cabd7470b8..b2712c86ae 100644 --- a/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/clickHouse/index.tsx +++ b/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/clickHouse/index.tsx @@ -2,23 +2,31 @@ import { PlusOutlined } from '@ant-design/icons'; import { ClickHouseQueryTemplate } from 'constants/dashboard'; import GetQueryName from 'lib/query/GetQueryName'; import React from 'react'; +import { Query } from 'types/api/dashboard/getAll'; import { WIDGET_CLICKHOUSE_QUERY_KEY_NAME } from '../../constants'; import { QueryButton } from '../../styles'; +import { IHandleUpdatedQuery } from '../../types'; import ClickHouseQueryBuilder from './query'; +import { IClickHouseQueryHandleChange } from './types'; +interface IClickHouseQueryContainerProps { + queryData: Query; + updateQueryData: (args: IHandleUpdatedQuery) => void; + clickHouseQueries: Query['clickHouse']; +} function ClickHouseQueryContainer({ queryData, updateQueryData, clickHouseQueries, -}): JSX.Element | null { +}: IClickHouseQueryContainerProps): JSX.Element | null { const handleClickHouseQueryChange = ({ queryIndex, rawQuery, legend, toggleDisable, toggleDelete, - }): void => { + }: IClickHouseQueryHandleChange): void => { const allQueries = queryData[WIDGET_CLICKHOUSE_QUERY_KEY_NAME]; const currentIndexQuery = allQueries[queryIndex]; @@ -40,7 +48,7 @@ function ClickHouseQueryContainer({ }; const addQueryHandler = (): void => { queryData[WIDGET_CLICKHOUSE_QUERY_KEY_NAME].push({ - name: GetQueryName(queryData[WIDGET_CLICKHOUSE_QUERY_KEY_NAME]), + name: GetQueryName(queryData[WIDGET_CLICKHOUSE_QUERY_KEY_NAME]) || '', ...ClickHouseQueryTemplate, }); updateQueryData({ updatedQuery: { ...queryData } }); diff --git a/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/clickHouse/query.tsx b/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/clickHouse/query.tsx index f51ffbf08b..7e9a3df0c2 100644 --- a/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/clickHouse/query.tsx +++ b/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/clickHouse/query.tsx @@ -1,14 +1,22 @@ import { Input } from 'antd'; import MonacoEditor from 'components/Editor'; import React from 'react'; +import { IClickHouseQuery } from 'types/api/dashboard/getAll'; import QueryHeader from '../QueryHeader'; +import { IClickHouseQueryHandleChange } from './types'; + +interface IClickHouseQueryBuilderProps { + queryData: IClickHouseQuery; + queryIndex: number; + handleQueryChange: (args: IClickHouseQueryHandleChange) => void; +} function ClickHouseQueryBuilder({ queryData, queryIndex, handleQueryChange, -}): JSX.Element | null { +}: IClickHouseQueryBuilderProps): JSX.Element | null { if (queryData === undefined) { return null; } @@ -26,7 +34,6 @@ function ClickHouseQueryBuilder({ > handleQueryChange({ queryIndex, rawQuery: value }) diff --git a/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/clickHouse/types.ts b/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/clickHouse/types.ts new file mode 100644 index 0000000000..6e0d21b206 --- /dev/null +++ b/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/clickHouse/types.ts @@ -0,0 +1,9 @@ +import { IClickHouseQuery } from 'types/api/dashboard/getAll'; + +export interface IClickHouseQueryHandleChange { + queryIndex: number; + rawQuery?: IClickHouseQuery['rawQuery']; + legend?: IClickHouseQuery['legend']; + toggleDisable?: IClickHouseQuery['disabled']; + toggleDelete?: boolean; +} diff --git a/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/index.tsx b/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/index.tsx deleted file mode 100644 index ba01fb0389..0000000000 --- a/frontend/src/container/NewWidget/LeftContainer/QuerySection/QueryBuilder/index.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import { - DeleteOutlined, - DownOutlined, - EyeFilled, - RightOutlined, -} from '@ant-design/icons'; -import { Button, Row } from 'antd'; -import MonacoEditor from 'components/Editor'; -import React, { useState } from 'react'; -import { useSelector } from 'react-redux'; -import { AppState } from 'store/reducers'; -import AppReducer from 'types/reducer/app'; - -import { QueryBuilderWrapper, QueryWrapper } from '../styles'; -import { TQueryCategories } from '../types'; -import PromQLQueryBuilder from './promQL/promQL'; -import MetricsBuilder from './queryBuilder/query'; - -function QueryBuilder({ - name, - onDelete, - queryCategory, - queryData, - updateQueryData, -}: QueryBuilderProps): JSX.Element { - const { isDarkMode } = useSelector((state) => state.app); - const [hideFromUI, setHideFromUI] = useState(false); - const handleHideFromUI = (): void => { - setHideFromUI(!hideFromUI); - }; - const handleClickhouseQueryChange = (clickHouseQuery): void => { - if (clickHouseQuery !== null) { - queryData.clickHouseQuery = clickHouseQuery; - } - updateQueryData(queryData); - }; - const handlePromQLQueryChange = ({ query, legend }): void => { - if (query) queryData.promQL.query = query; - if (legend) queryData.promQL.legend = legend; - - updateQueryData(queryData); - }; - - return ( - - - - -