Compare commits

..

180 Commits

Author SHA1 Message Date
Aditya Singh
0df85ae46b feat: handle number dataType in filters 2025-08-22 16:34:39 +05:30
Aditya Singh
6cb1ffdbc2 Merge branch 'fix/query-builder-filters' of github.com:SigNoz/signoz into feat/custom-destinations 2025-08-22 14:52:19 +05:30
ahrefabhi
83df91bba5 test: fixed querybuilderv2 utils test 2025-08-22 13:22:34 +05:30
ahrefabhi
796497adfc fix: added fix for replacing filters + datetimepicker composite query 2025-08-22 13:12:49 +05:30
ahrefabhi
049f1f396d fix: added fix for replacing filter with the new value 2025-08-22 12:20:03 +05:30
ahrefabhi
4fb993bb6e test: added tests for querycontextUtils + querybuilderv2 utils 2025-08-22 12:08:26 +05:30
ahrefabhi
6251fd42b2 Merge branch 'main' of https://github.com/SigNoz/signoz into fix/query-builder-filters 2025-08-22 11:39:27 +05:30
ahrefabhi
0a3d40806a fix: added fix for multivalue operator without brackets 2025-08-21 15:15:29 +05:30
ahrefabhi
be7b3e7f9b Merge branch 'main' of https://github.com/SigNoz/signoz into fix/query-builder-filters 2025-08-21 15:06:41 +05:30
Aditya Singh
13f2cc8115 feat: show edit only if user has access 2025-08-20 22:40:37 +05:30
Aditya Singh
22a5420340 feat: minor refactor 2025-08-20 21:04:24 +05:30
Aditya Singh
07573e831e Merge branch 'main' of github.com:SigNoz/signoz into feat/custom-destinations 2025-08-20 21:04:09 +05:30
Aditya Singh
42e5aa2dd4 feat: context links tests 2025-08-20 20:57:30 +05:30
Aditya Singh
4e72753c24 feat: breakout test match query 2025-08-20 20:10:24 +05:30
Aditya Singh
6f9ac378e2 feat: breakout test init 2025-08-20 20:00:58 +05:30
Aditya Singh
89135b4d90 feat: format legend name according to existing format 2025-08-20 15:49:13 +05:30
Aditya Singh
f1f446b455 Merge branch 'main' of github.com:SigNoz/signoz into feat/custom-destinations 2025-08-20 14:43:59 +05:30
Aditya Singh
21fb5876c1 Merge branch 'main' of github.com:SigNoz/signoz into feat/custom-destinations 2025-08-18 23:55:32 +05:30
ahrefabhi
e3b0a2e33f fix: added fix for query builder filters 2025-08-18 21:02:52 +05:30
Aditya Singh
b90ab7fe1b feat: pass panel types to substitutevars 2025-08-14 02:00:13 +05:30
Aditya Singh
1915df8ad7 feat: remove consoles 2025-08-13 21:15:00 +05:30
Aditya Singh
eb37dafcd1 feat: refactor 2025-08-13 21:07:46 +05:30
Aditya Singh
c5682b98c5 Merge branch 'main' of github.com:SigNoz/signoz into feat/custom-destinations 2025-08-13 18:19:02 +05:30
Aditya Singh
b14e77a120 Merge branch 'main' of github.com:SigNoz/signoz into feat/custom-destinations 2025-08-12 13:12:40 +05:30
Aditya Singh
75f30e6117 feat: added test cases 2025-08-12 03:06:41 +05:30
Aditya Singh
c53a599b2e feat: minor refactor 2025-08-11 18:59:19 +05:30
Aditya Singh
19216e107c Merge branch 'main' of github.com:SigNoz/signoz into feat/custom-destinations 2025-08-08 18:10:03 +05:30
Aditya Singh
2aa423de52 feat: test fix 2025-08-08 18:08:47 +05:30
Aditya Singh
3f7175daa3 feat: minor fix 2025-08-08 13:58:39 +05:30
Aditya Singh
0d7a6794b4 feat: minor fix 2025-08-08 13:52:56 +05:30
Aditya Singh
312f02c318 Merge branch 'fix/extract-query-params' of github.com:SigNoz/signoz into feat/custom-destinations 2025-08-08 13:51:01 +05:30
Abhi Kumar
0dd085c48e feat: optimize query value comparison in QueryBuilderV2 2025-08-08 13:11:20 +05:30
Aditya Singh
020bf76570 Merge branch 'main' of github.com:SigNoz/signoz into feat/custom-destinations 2025-08-08 10:51:53 +05:30
Aditya Singh
3191f81046 feat: minor fix 2025-08-08 10:50:51 +05:30
Aditya Singh
9d59fb8d05 feat: add substitute var api call to decode vars 2025-08-08 02:50:34 +05:30
Aditya Singh
dfe024e234 feat: minor refactor 2025-08-08 01:24:09 +05:30
Aditya Singh
2f4ae5ad05 feat: add back in breakout 2025-08-07 18:13:30 +05:30
Aditya Singh
68714b14c1 feat: minor refactor 2025-08-07 18:09:44 +05:30
Abhi Kumar
531a0a12dd fix: added fix for extractquerypararms when value is string in multivalue operator 2025-08-07 15:52:56 +05:30
Aditya Singh
9a2c74ccbc feat: minor refactor 2025-08-07 11:19:49 +05:30
Aditya Singh
031575cb27 feat: minor refactor 2025-08-07 10:54:06 +05:30
Aditya Singh
c4eefc4935 feat: change api for breakout opitons 2025-08-07 02:18:24 +05:30
Aditya Singh
db36f0c336 feat: fix breaking changes from qb v5 2025-08-06 23:22:42 +05:30
Aditya Singh
df50184f65 Merge branch 'main' of github.com:SigNoz/signoz into feat/custom-destinations 2025-08-06 13:43:13 +05:30
Aditya Singh
ddacc77100 Merge branch 'feat/drilldowns' of github.com:SigNoz/signoz into feat/custom-destinations 2025-08-06 12:15:23 +05:30
Aditya Singh
f8b16e1034 feat: minor refactor 2025-08-05 22:45:15 +05:30
Aditya Singh
749dff2200 feat: minor refactor 2025-08-05 20:03:33 +05:30
Aditya Singh
de05394859 feat: fix header color 2025-08-05 17:56:41 +05:30
Aditya Singh
a6a9bf5bad Merge branch 'feat/drilldowns' of github.com:SigNoz/signoz into feat/drilldowns 2025-08-05 17:37:50 +05:30
Aditya Singh
e767c229aa Merge branch 'main' of github.com:SigNoz/signoz into feat/drilldowns 2025-08-05 17:37:31 +05:30
Aditya Singh
b9cf516201 feat: aggregation header val 2025-08-05 17:30:34 +05:30
Aditya Singh
f87e80a0f5 Merge branch 'main' into feat/drilldowns 2025-08-05 13:41:29 +05:30
Aditya Singh
f114d0249d feat: revert qbv5 2025-08-05 13:32:35 +05:30
Aditya Singh
b4fbd7c673 feat: snapshot update 2025-08-05 12:01:30 +05:30
Aditya Singh
e25d625c4b feat: minor refactor 2025-08-05 11:39:22 +05:30
Aditya Singh
9ca0cc90b0 Merge branch 'main' of github.com:SigNoz/signoz into feat/drilldowns 2025-08-04 19:58:31 +05:30
Aditya Singh
d8d1c2ea7a feat: handle on save 2025-08-04 18:53:54 +05:30
Aditya Singh
bf1378f144 feat: minor refactor 2025-08-04 13:32:27 +05:30
Aditya Singh
2207643e21 feat: minor refactor 2025-08-04 13:31:00 +05:30
Aditya Singh
2af035d3cf feat: minor refactor 2025-08-04 12:52:37 +05:30
Aditya Singh
acc4db2ce4 feat: add support for field variables 2025-08-03 17:26:35 +05:30
Aditya Singh
f9dd1d6b69 feat: context variables hook added 2025-08-03 16:05:42 +05:30
Aditya Singh
e9c6513328 feat: context links processors 2025-08-03 16:01:33 +05:30
Aditya Singh
fa047ba7db Merge branch 'feat/drilldown-tables-v2' of github.com:SigNoz/signoz into feat/custom-destinations 2025-08-01 18:26:58 +05:30
Aditya Singh
90758dbd32 feat: context menu hook refactor 2025-08-01 15:11:51 +05:30
Aditya Singh
c80f020145 feat: context menu changes init 2025-07-31 20:51:23 +05:30
Aditya Singh
3748b9d24b feat: change contextlinks data structure 2025-07-31 19:06:49 +05:30
Aditya Singh
28370d219e feat: minor refactor 2025-07-31 16:20:42 +05:30
Aditya Singh
a03d2ba961 feat: minor refactor 2025-07-31 02:32:28 +05:30
Aditya Singh
e08045d413 feat: add double way sync on urls and param 2025-07-31 02:11:18 +05:30
Aditya Singh
fd073d9788 feat: update context link modal form init 2025-07-30 21:19:47 +05:30
Aditya Singh
e57a21dd92 feat: context links init 2025-07-30 01:16:27 +05:30
Aditya Singh
53e10602b6 feat: context links init 2025-07-30 01:09:14 +05:30
Aditya Singh
8168d8bea0 feat: context links init 2025-07-30 01:07:36 +05:30
Aditya Singh
b18f998d0e feat: add context links 2025-07-29 14:53:21 +05:30
Aditya Singh
9b559d6251 feat: context menu - increase width and add overlay 2025-07-19 15:16:47 +05:30
Aditya Singh
bdfb712395 feat: add search to breakout and other refactor 2025-07-19 14:39:55 +05:30
Aditya Singh
0d2a4b397a feat: lint fix 2025-07-17 02:03:59 +05:30
Aditya Singh
2c9a51c2ac feat: update click plugin in uplot 2025-07-17 01:43:24 +05:30
Aditya Singh
fb43f12a76 feat: refactor code 2025-07-17 01:05:37 +05:30
Aditya Singh
60e0e84237 feat: drilldown prop drilldowned 2025-07-16 20:29:29 +05:30
Aditya Singh
54d46a1d03 feat: minor refactor 2025-07-16 20:05:26 +05:30
Aditya Singh
73a7246a11 feat: remove unwanted code 2025-07-16 19:47:23 +05:30
Aditya Singh
163d59bf71 feat: add time range to timeseries, bar charts 2025-07-16 17:04:40 +05:30
Aditya Singh
fb672eda11 feat: add drilldown options in uplot 2025-07-16 02:46:42 +05:30
Aditya Singh
43a432b22b feat: add drilldown options in pie chart 2025-07-16 02:20:21 +05:30
Aditya Singh
8107946cb1 feat: added click data utils for uplot and pie charts 2025-07-16 02:16:39 +05:30
Aditya Singh
38ee4aae30 feat: add graph context hook 2025-07-16 02:09:27 +05:30
Aditya Singh
001d9ed9fb feat: fix style 2025-07-16 02:08:44 +05:30
Aditya Singh
e1abae91a3 feat: aggreagate drilldown refactor to use for tables and other panels alike 2025-07-15 20:49:31 +05:30
Aditya Singh
a9ac3b7e15 feat: aggreagate drilldown refactor to use for tables and other panels alike 2025-07-15 19:29:26 +05:30
Aditya Singh
4a98c54e78 feat: minor refactor 2025-07-14 18:06:00 +05:30
Aditya Singh
9ed4a09caf feat: update coordinates fn signature 2025-07-14 16:14:09 +05:30
Aditya Singh
132a31852f fix: remove number data type conversion 2025-07-14 15:08:13 +05:30
Aditya Singh
5686697b6c feat: fix aggreagate context header 2025-07-09 02:43:35 +05:30
Aditya Singh
5f4fc12031 feat: fix datatype 2025-07-09 02:09:24 +05:30
Aditya Singh
fe2c42de90 feat: hide drilldown for non-builder queries 2025-07-09 01:43:25 +05:30
Aditya Singh
d8f2cf1c0e feat: fix metrics view 2025-07-09 01:11:12 +05:30
Aditya Singh
a7e8f31561 feat: style fix 2025-07-08 21:29:58 +05:30
Aditya Singh
d9d6e7b4f1 feat: show reset query 2025-07-08 19:37:43 +05:30
Aditya Singh
f8f1a26a43 feat: style fix 2025-07-08 18:57:19 +05:30
Aditya Singh
79dfd6f17f feat: breakout drilldown option added 2025-07-08 15:31:13 +05:30
Aditya Singh
f386662e00 feat: aggregate col drilldown added 2025-07-03 18:51:36 +05:30
Aditya Singh
b2de302262 feat: context menu config refactor 2025-07-03 14:29:43 +05:30
Aditya Singh
6f63076b8e feat: context menu style fix 2025-07-03 01:24:34 +05:30
Aditya Singh
8007f954e5 feat: use context menu item for filters 2025-07-03 00:54:58 +05:30
Aditya Singh
b39b24c46f feat: context menu style update 2025-07-03 00:53:54 +05:30
Aditya Singh
70472c587d feat: filter drilldown added 2025-07-02 16:02:13 +05:30
Aditya Singh
06e89b7199 feat: added context menu 2025-06-27 11:26:00 +05:30
Aditya Singh
d60ac0d0e1 fix: fix composite query delete on close 2025-06-27 11:25:24 +05:30
Aditya Singh
1e4c213df4 feat: view mode enhancements 2025-06-27 11:24:47 +05:30
SagarRajput-7
9bf112cfcf Merge branch 'main' into feat/query-builder-v2 2025-06-25 16:19:10 +05:30
SagarRajput-7
a611b8f429 feat: new query builder misc fixes (#8359)
* feat: qb fixes

* feat: fixed handlerunquery props

* feat: fixes logs list order by

* feat: fix logs order by issue

* feat: safety check and order by correction

* feat: updated version in new create dashboards

* feat: added new formatOptions for table and fixed the pie chart plotting

* feat: keyboard shortcut overriding issue and pie ch correction in dashboard views

* feat: fixed dashboard data state management across datasource * paneltypes

* feat: fixed explorer pages data management issues

* feat: integrated new backend payload/request diff, to the UI types

* feat: fixed the collapse behaviour of QB - queries

* feat: fix order by and default aggregation to count()
2025-06-25 16:18:15 +05:30
SagarRajput-7
872230169c feat: resolved conflicts 2025-06-25 05:26:52 +05:30
SagarRajput-7
4a28954074 Query builder misc - fixes (#8295)
* feat: trace and logs explorer fixes

* fix: ui fixes

* fix: handle multi arg aggregation

* feat: explorer pages fixes

* feat: added fixes for order by for datasource

* feat: metric order by issue

* feat: support for paneltype selectedview tab switch

* feat: qb v2 compatiblity with url's composite query

* feat: conversion fixes

* feat: where clause and aggregation fix

---------

Co-authored-by: Yunus M <myounis.ar@live.com>
2025-06-25 05:17:57 +05:30
Yunus M
0df2d9e6da feat: fetch more keys is complete list not already fetched 2025-06-25 05:16:45 +05:30
SagarRajput-7
67f412477c feat: query_range migration from v3/v4 -> v5 (#8192)
* feat: query_range migration from v3/v4 -> v5

* feat: cleanup files

* feat: cleanup code

* feat: metric payload improvements

* feat: metric payload improvements

* feat: data retention and qb v2 for dashboard cleanup

* feat: corrected datasource change daata updatation in qb v2

* feat: fix value panel plotting with new query v5

* feat: alert migration

* feat: fixed aggregation css

* feat: explorer pages migration

* feat: trace and logs explorer fixes
2025-06-25 05:16:45 +05:30
Yunus M
43dc060950 fix: responsiveness issues 2025-06-25 05:16:45 +05:30
Yunus M
a21ae43a1f feat: where clause key updates 2025-06-25 05:16:45 +05:30
Yunus M
331a8b386f feat: update styles for light mode 2025-06-25 05:16:45 +05:30
Yunus M
ca6c7afa5c feat: show errors 2025-06-25 05:16:45 +05:30
Yunus M
dc8e5d6df9 feat: update context and show suggestions on select 2025-06-25 05:16:45 +05:30
Yunus M
c68f352aeb feat: add a space after selecting a value from suggestion 2025-06-25 05:16:45 +05:30
Yunus M
7863877a49 feat: improve suggestion ux in query search 2025-06-25 05:16:45 +05:30
Yunus M
76384c2430 feat: ui improvements 2025-06-25 05:16:45 +05:30
Yunus M
4e06d7757b feat: handle close on blur 2025-06-25 05:16:45 +05:30
Yunus M
5c06429ebe feat: query search component clean up 2025-06-25 05:16:45 +05:30
Yunus M
aefc7940a7 feat: handle having option autocomplete ux 2025-06-25 05:16:45 +05:30
Yunus M
0deae0c73b feat: disable clicking on placeholder items in suggestions 2025-06-25 05:16:45 +05:30
Yunus M
a4c16e5847 feat: improve having suggestions 2025-06-25 05:16:45 +05:30
Yunus M
efb741cf35 feat: handle add ons 2025-06-25 05:16:45 +05:30
Yunus M
153f64067c feat: handle list panel type options 2025-06-25 05:16:45 +05:30
Yunus M
c83ae1a485 feat: pass index to query addons 2025-06-25 05:16:45 +05:30
Yunus M
bfd74fb906 feat: update qb elements based on panel type 2025-06-25 05:16:45 +05:30
Yunus M
5d56f05fab feat: hide extra qb elements 2025-06-25 05:16:45 +05:30
Yunus M
57ca53c74c feat: use qb-v2 in explorers and alerts 2025-06-25 05:16:42 +05:30
Yunus M
bde078472b feat: update explorer views 2025-06-25 05:16:09 +05:30
Yunus M
6deb75ff46 feat: update logs, metrics and traces qb 2025-06-25 05:10:59 +05:30
Yunus M
424fd0362d feat: query builder layout updates 2025-06-25 05:10:59 +05:30
Yunus M
1bc51102f6 fix: minor fixes 2025-06-25 05:10:58 +05:30
Yunus M
c1b70c05f1 feat: create separate containers for traces, logs and metrics qbs 2025-06-25 05:10:58 +05:30
Yunus M
8fce0ab1af feat: metrics qb 2025-06-25 05:10:57 +05:30
Yunus M
df1923a7c6 fix: update dropdown css 2025-06-25 05:10:05 +05:30
Yunus M
1e37ae2fd0 feat: remove () from suggestions 2025-06-25 05:10:05 +05:30
Yunus M
7b3ea5cc45 feat: handle parenthesis and conjunction operators 2025-06-25 05:10:05 +05:30
Yunus M
167ddc6c56 feat: support multiple having key value pairs 2025-06-25 05:10:05 +05:30
Yunus M
dbc1e1fc45 feat: move state to context 2025-06-25 05:10:05 +05:30
Yunus M
01e798f3c1 feat: handle having options creation 2025-06-25 05:10:05 +05:30
Yunus M
d9010fb3fc feat: hide already used variables 2025-06-25 05:10:05 +05:30
Yunus M
06363f2e5b fix: show operator suggestions only on manual trigger or valid key 2025-06-25 05:10:05 +05:30
Yunus M
f1853a6bca fix: handle autocomplete 2025-06-25 05:10:05 +05:30
Yunus M
97e9f5dc8d fix: update styles 2025-06-25 05:10:05 +05:30
Yunus M
3b959bd2f6 fix: update css 2025-06-25 05:10:05 +05:30
Yunus M
9662e43418 feat: handle multie select functions 2025-06-25 05:10:05 +05:30
Yunus M
736bb2ebfb feat: handle field suggestions for aggregate operators 2025-06-25 05:10:05 +05:30
Yunus M
879700ea7a feat: support aggregation function with values 2025-06-25 05:10:05 +05:30
Yunus M
438ffe45f2 feat: add groupBy, having, order by, limit and legend format 2025-06-25 05:10:05 +05:30
Yunus M
723b6b6b79 feat: handle multie select values better 2025-06-25 05:10:05 +05:30
Yunus M
d2df098bb3 feat: improve suggestions 2025-06-25 05:10:05 +05:30
Yunus M
196ae10f00 feat: console log context based on cursor position 2025-06-25 05:10:05 +05:30
Yunus M
00eba89e20 fix: handle . notation keywords better 2025-06-25 05:10:05 +05:30
Yunus M
1739a9e27b feat: remove card container above where clause 2025-06-25 05:10:05 +05:30
Yunus M
cfdf714ffa feat: use new qb in logs explorer 2025-06-25 05:10:04 +05:30
Yunus M
49e78b6998 feat: handle parenthesis 2025-06-25 05:10:04 +05:30
Yunus M
762c658c10 feat: handle value selection 2025-06-25 05:10:04 +05:30
Yunus M
48e7e33dea feat: styling updates 2025-06-25 05:10:04 +05:30
Yunus M
dc4996c127 feat: handle string and number values correctly 2025-06-25 05:10:04 +05:30
Yunus M
d95f7b976c feat: handle async value fetching 2025-06-25 05:10:04 +05:30
Yunus M
9a47883064 feat: update the context with additonal properties 2025-06-25 05:10:04 +05:30
Yunus M
39a90fd33c feat: styling updates 2025-06-25 05:10:04 +05:30
Yunus M
722c3482d2 feat: update theme and syntax highlighting 2025-06-25 05:10:04 +05:30
Yunus M
60e84e6681 feat: handle context switch 2025-06-25 05:10:04 +05:30
Yunus M
8d1fa84e6a feat: handle multiple spaces 2025-06-25 05:10:04 +05:30
Yunus M
6c22197bf4 feat: integrate the apis 2025-06-25 05:10:04 +05:30
Yunus M
f6c426d0cc feat: update context logic and return auto-suggestions based on context 2025-06-25 05:10:04 +05:30
Yunus M
e21757b2bd feat: add apis and hooks 2025-06-25 05:10:04 +05:30
Yunus M
a87fbabbe7 feat: update context to recognise conjunction operator 2025-06-25 05:10:04 +05:30
Yunus M
b2847cb05b feat: add codemirror 2025-06-25 05:10:00 +05:30
Yunus M
0b575b41a1 feat: add types, base components 2025-06-25 05:08:52 +05:30
Yunus M
0a3fd7a7dc feat: add antlr4, parser files and grammar 2025-06-25 05:08:52 +05:30
348 changed files with 10547 additions and 7064 deletions

View File

@@ -40,7 +40,7 @@ services:
timeout: 5s
retries: 3
schema-migrator-sync:
image: signoz/signoz-schema-migrator:v0.129.2
image: signoz/signoz-schema-migrator:v0.129.0
container_name: schema-migrator-sync
command:
- sync
@@ -53,7 +53,7 @@ services:
condition: service_healthy
restart: on-failure
schema-migrator-async:
image: signoz/signoz-schema-migrator:v0.129.2
image: signoz/signoz-schema-migrator:v0.129.0
container_name: schema-migrator-async
command:
- async

View File

@@ -174,7 +174,7 @@ services:
# - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml
signoz:
!!merge <<: *db-depend
image: signoz/signoz:v0.93.0
image: signoz/signoz:v0.92.1
command:
- --config=/root/config/prometheus.yml
ports:
@@ -207,7 +207,7 @@ services:
retries: 3
otel-collector:
!!merge <<: *db-depend
image: signoz/signoz-otel-collector:v0.129.2
image: signoz/signoz-otel-collector:v0.129.0
command:
- --config=/etc/otel-collector-config.yaml
- --manager-config=/etc/manager-config.yaml
@@ -231,7 +231,7 @@ services:
- signoz
schema-migrator:
!!merge <<: *common
image: signoz/signoz-schema-migrator:v0.129.2
image: signoz/signoz-schema-migrator:v0.129.0
deploy:
restart_policy:
condition: on-failure

View File

@@ -115,7 +115,7 @@ services:
# - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml
signoz:
!!merge <<: *db-depend
image: signoz/signoz:v0.93.0
image: signoz/signoz:v0.92.1
command:
- --config=/root/config/prometheus.yml
ports:
@@ -148,7 +148,7 @@ services:
retries: 3
otel-collector:
!!merge <<: *db-depend
image: signoz/signoz-otel-collector:v0.129.2
image: signoz/signoz-otel-collector:v0.129.0
command:
- --config=/etc/otel-collector-config.yaml
- --manager-config=/etc/manager-config.yaml
@@ -174,7 +174,7 @@ services:
- signoz
schema-migrator:
!!merge <<: *common
image: signoz/signoz-schema-migrator:v0.129.2
image: signoz/signoz-schema-migrator:v0.129.0
deploy:
restart_policy:
condition: on-failure

View File

@@ -177,7 +177,7 @@ services:
# - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml
signoz:
!!merge <<: *db-depend
image: signoz/signoz:${VERSION:-v0.93.0}
image: signoz/signoz:${VERSION:-v0.92.1}
container_name: signoz
command:
- --config=/root/config/prometheus.yml
@@ -211,7 +211,7 @@ services:
# TODO: support otel-collector multiple replicas. Nginx/Traefik for loadbalancing?
otel-collector:
!!merge <<: *db-depend
image: signoz/signoz-otel-collector:${OTELCOL_TAG:-v0.129.2}
image: signoz/signoz-otel-collector:${OTELCOL_TAG:-v0.129.0}
container_name: signoz-otel-collector
command:
- --config=/etc/otel-collector-config.yaml
@@ -237,7 +237,7 @@ services:
condition: service_healthy
schema-migrator-sync:
!!merge <<: *common
image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.129.2}
image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.129.0}
container_name: schema-migrator-sync
command:
- sync
@@ -248,7 +248,7 @@ services:
condition: service_healthy
schema-migrator-async:
!!merge <<: *db-depend
image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.129.2}
image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.129.0}
container_name: schema-migrator-async
command:
- async

View File

@@ -110,7 +110,7 @@ services:
# - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml
signoz:
!!merge <<: *db-depend
image: signoz/signoz:${VERSION:-v0.93.0}
image: signoz/signoz:${VERSION:-v0.92.1}
container_name: signoz
command:
- --config=/root/config/prometheus.yml
@@ -143,7 +143,7 @@ services:
retries: 3
otel-collector:
!!merge <<: *db-depend
image: signoz/signoz-otel-collector:${OTELCOL_TAG:-v0.129.2}
image: signoz/signoz-otel-collector:${OTELCOL_TAG:-v0.129.0}
container_name: signoz-otel-collector
command:
- --config=/etc/otel-collector-config.yaml
@@ -165,7 +165,7 @@ services:
condition: service_healthy
schema-migrator-sync:
!!merge <<: *common
image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.129.2}
image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.129.0}
container_name: schema-migrator-sync
command:
- sync
@@ -177,7 +177,7 @@ services:
restart: on-failure
schema-migrator-async:
!!merge <<: *db-depend
image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.129.2}
image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.129.0}
container_name: schema-migrator-async
command:
- async

View File

@@ -16,7 +16,6 @@ const config: Config.InitialOptions = {
'ts-jest': {
useESM: true,
isolatedModules: true,
tsconfig: '<rootDir>/tsconfig.jest.json',
},
},
testMatch: ['<rootDir>/src/**/*?(*.)(test).(ts|js)?(x)'],
@@ -26,7 +25,7 @@ const config: Config.InitialOptions = {
'^.+\\.(js|jsx)$': 'babel-jest',
},
transformIgnorePatterns: [
'node_modules/(?!(lodash-es|react-dnd|core-dnd|@react-dnd|dnd-core|react-dnd-html5-backend|axios|@signozhq/design-tokens|@signozhq/table|@signozhq/calendar|@signozhq/input|@signozhq/popover|@signozhq/button|@signozhq/sonner|@signozhq/*|date-fns|d3-interpolate|d3-color|api|@codemirror|@lezer|@marijn)/)',
'node_modules/(?!(lodash-es|react-dnd|core-dnd|@react-dnd|dnd-core|react-dnd-html5-backend|axios|@signozhq/design-tokens|d3-interpolate|d3-color|api|@codemirror|@lezer|@marijn)/)',
],
setupFilesAfterEnv: ['<rootDir>jest.setup.ts'],
testPathIgnorePatterns: ['/node_modules/', '/public/'],

View File

@@ -43,17 +43,11 @@
"@radix-ui/react-tooltip": "1.0.7",
"@sentry/react": "8.41.0",
"@sentry/webpack-plugin": "2.22.6",
"@signozhq/badge": "0.0.2",
"@signozhq/calendar": "0.0.0",
"@signozhq/design-tokens": "1.1.4",
"@signozhq/input": "0.0.2",
"@signozhq/popover": "0.0.0",
"@signozhq/sonner": "0.1.0",
"@signozhq/table": "0.3.4",
"@tanstack/react-table": "8.20.6",
"@tanstack/react-virtual": "3.11.2",
"@uiw/codemirror-theme-copilot": "4.23.11",
"@uiw/codemirror-theme-github": "4.24.1",
"@uiw/codemirror-theme-copilot": "4.23.11",
"@uiw/react-codemirror": "4.23.10",
"@uiw/react-md-editor": "3.23.5",
"@visx/group": "3.3.0",
@@ -98,7 +92,6 @@
"i18next-http-backend": "^1.3.2",
"jest": "^27.5.1",
"js-base64": "^3.7.2",
"kbar": "0.1.0-beta.48",
"less": "^4.1.2",
"less-loader": "^10.2.0",
"lodash-es": "^4.17.21",

View File

@@ -4,7 +4,6 @@ import getLocalStorageApi from 'api/browser/localstorage/get';
import setLocalStorageApi from 'api/browser/localstorage/set';
import logEvent from 'api/common/logEvent';
import AppLoading from 'components/AppLoading/AppLoading';
import KBarCommandPalette from 'components/KBarCommandPalette/KBarCommandPalette';
import NotFound from 'components/NotFound';
import Spinner from 'components/Spinner';
import UserpilotRouteTracker from 'components/UserpilotRouteTracker/UserpilotRouteTracker';
@@ -26,7 +25,6 @@ import { useAppContext } from 'providers/App/App';
import { IUser } from 'providers/App/types';
import { DashboardProvider } from 'providers/Dashboard/Dashboard';
import { ErrorModalProvider } from 'providers/ErrorModalProvider';
import { KBarCommandPaletteProvider } from 'providers/KBarCommandPaletteProvider';
import { QueryBuilderProvider } from 'providers/QueryBuilder';
import { Suspense, useCallback, useEffect, useState } from 'react';
import { Route, Router, Switch } from 'react-router-dom';
@@ -370,42 +368,39 @@ function App(): JSX.Element {
<ConfigProvider theme={themeConfig}>
<Router history={history}>
<CompatRouter>
<KBarCommandPaletteProvider>
<UserpilotRouteTracker />
<KBarCommandPalette />
<NotificationProvider>
<ErrorModalProvider>
<PrivateRoute>
<ResourceProvider>
<QueryBuilderProvider>
<DashboardProvider>
<KeyboardHotkeysProvider>
<AlertRuleProvider>
<AppLayout>
<Suspense fallback={<Spinner size="large" tip="Loading..." />}>
<Switch>
{routes.map(({ path, component, exact }) => (
<Route
key={`${path}`}
exact={exact}
path={path}
component={component}
/>
))}
<Route exact path="/" component={Home} />
<Route path="*" component={NotFound} />
</Switch>
</Suspense>
</AppLayout>
</AlertRuleProvider>
</KeyboardHotkeysProvider>
</DashboardProvider>
</QueryBuilderProvider>
</ResourceProvider>
</PrivateRoute>
</ErrorModalProvider>
</NotificationProvider>
</KBarCommandPaletteProvider>
<UserpilotRouteTracker />
<NotificationProvider>
<ErrorModalProvider>
<PrivateRoute>
<ResourceProvider>
<QueryBuilderProvider>
<DashboardProvider>
<KeyboardHotkeysProvider>
<AlertRuleProvider>
<AppLayout>
<Suspense fallback={<Spinner size="large" tip="Loading..." />}>
<Switch>
{routes.map(({ path, component, exact }) => (
<Route
key={`${path}`}
exact={exact}
path={path}
component={component}
/>
))}
<Route exact path="/" component={Home} />
<Route path="*" component={NotFound} />
</Switch>
</Suspense>
</AppLayout>
</AlertRuleProvider>
</KeyboardHotkeysProvider>
</DashboardProvider>
</QueryBuilderProvider>
</ResourceProvider>
</PrivateRoute>
</ErrorModalProvider>
</NotificationProvider>
</CompatRouter>
</Router>
</ConfigProvider>

View File

@@ -1,284 +0,0 @@
/* eslint-disable sonarjs/no-duplicate-string */
import { SuccessResponse } from 'types/api';
import {
MetricRangePayloadV5,
QueryBuilderFormula,
QueryRangeRequestV5,
QueryRangeResponseV5,
RequestType,
ScalarData,
TelemetryFieldKey,
TimeSeries,
TimeSeriesData,
TimeSeriesValue,
} from 'types/api/v5/queryRange';
import { convertV5ResponseToLegacy } from './convertV5Response';
describe('convertV5ResponseToLegacy', () => {
function makeBaseSuccess<T>(
payload: T,
params: QueryRangeRequestV5,
): SuccessResponse<T, QueryRangeRequestV5> {
return {
statusCode: 200,
message: 'success',
payload,
error: null,
params,
};
}
function makeBaseParams(
requestType: RequestType,
queries: QueryRangeRequestV5['compositeQuery']['queries'],
): QueryRangeRequestV5 {
return {
schemaVersion: 'v1',
start: 1,
end: 2,
requestType,
compositeQuery: { queries },
variables: {},
formatOptions: { formatTableResultForUI: false, fillGaps: false },
};
}
it('converts time_series response into legacy series structure', () => {
const timeSeries: TimeSeriesData = {
queryName: 'A',
aggregations: [
{
index: 0,
alias: '__result_0',
meta: {},
series: [
({
labels: [
{
key: ({ name: 'service.name' } as unknown) as TelemetryFieldKey,
value: 'adservice',
},
],
values: [
({ timestamp: 1000, value: 10 } as unknown) as TimeSeriesValue,
({ timestamp: 2000, value: 12 } as unknown) as TimeSeriesValue,
],
} as unknown) as TimeSeries,
],
},
],
};
const v5Data: QueryRangeResponseV5 = {
type: 'time_series',
data: { results: [timeSeries] },
meta: { rowsScanned: 0, bytesScanned: 0, durationMs: 0 },
};
const params = makeBaseParams('time_series', [
{
type: 'builder_query',
spec: {
name: 'A',
signal: 'traces',
stepInterval: 60,
disabled: false,
aggregations: [{ expression: 'count()' }],
},
},
]);
const input: SuccessResponse<
MetricRangePayloadV5,
QueryRangeRequestV5
> = makeBaseSuccess({ data: v5Data }, params);
const legendMap = { A: '{{service.name}}' };
const result = convertV5ResponseToLegacy(input, legendMap, false);
expect(result.payload.data.resultType).toBe('time_series');
expect(result.payload.data.result).toHaveLength(1);
const q = result.payload.data.result[0];
expect(q.queryName).toBe('A');
expect(q.legend).toBe('{{service.name}}');
expect(q.series?.[0]).toEqual(
expect.objectContaining({
labels: { 'service.name': 'adservice' },
values: [
{ timestamp: 1000, value: '10' },
{ timestamp: 2000, value: '12' },
],
metaData: expect.objectContaining({
alias: '__result_0',
index: 0,
queryName: 'A',
}),
}),
);
});
it('converts scalar to legacy table (formatForWeb=false) with names/ids resolved from aggregations', () => {
const scalar: ScalarData = {
columns: [
// group column
({
name: 'service.name',
queryName: 'A',
aggregationIndex: 0,
columnType: 'group',
} as unknown) as ScalarData['columns'][number],
// aggregation 0
({
name: '__result_0',
queryName: 'A',
aggregationIndex: 0,
columnType: 'aggregation',
} as unknown) as ScalarData['columns'][number],
// aggregation 1
({
name: '__result_1',
queryName: 'A',
aggregationIndex: 1,
columnType: 'aggregation',
} as unknown) as ScalarData['columns'][number],
// formula F1
({
name: '__result',
queryName: 'F1',
aggregationIndex: 0,
columnType: 'aggregation',
} as unknown) as ScalarData['columns'][number],
],
data: [['adservice', 606, 1.452, 151.5]],
};
const v5Data: QueryRangeResponseV5 = {
type: 'scalar',
data: { results: [scalar] },
meta: { rowsScanned: 0, bytesScanned: 0, durationMs: 0 },
};
const params = makeBaseParams('scalar', [
{
type: 'builder_query',
spec: {
name: 'A',
signal: 'traces',
stepInterval: 60,
disabled: false,
aggregations: [
{ expression: 'count()' },
{ expression: 'avg(app.ads.count)', alias: 'avg' },
],
},
},
{
type: 'builder_formula',
spec: ({
name: 'F1',
expression: 'A * 0.25',
} as unknown) as QueryBuilderFormula,
},
]);
const input: SuccessResponse<
MetricRangePayloadV5,
QueryRangeRequestV5
> = makeBaseSuccess({ data: v5Data }, params);
const legendMap = { A: '{{service.name}}', F1: '' };
const result = convertV5ResponseToLegacy(input, legendMap, false);
expect(result.payload.data.resultType).toBe('scalar');
const [tableEntry] = result.payload.data.result;
expect(tableEntry.table?.columns).toEqual([
{
name: 'service.name',
queryName: 'A',
isValueColumn: false,
id: 'service.name',
},
{ name: 'count()', queryName: 'A', isValueColumn: true, id: 'A.count()' },
{
name: 'avg',
queryName: 'A',
isValueColumn: true,
id: 'A.avg(app.ads.count)',
},
{ name: 'F1', queryName: 'F1', isValueColumn: true, id: 'F1' },
]);
expect(tableEntry.table?.rows?.[0]).toEqual({
data: {
'service.name': 'adservice',
'A.count()': 606,
'A.avg(app.ads.count)': 1.452,
F1: 151.5,
},
});
});
it('converts scalar with formatForWeb=true to UI-friendly table', () => {
const scalar: ScalarData = {
columns: [
{
name: 'service.name',
queryName: 'A',
aggregationIndex: 0,
columnType: 'group',
} as any,
{
name: '__result_0',
queryName: 'A',
aggregationIndex: 0,
columnType: 'aggregation',
} as any,
],
data: [['adservice', 580]],
};
const v5Data: QueryRangeResponseV5 = {
type: 'scalar',
data: { results: [scalar] },
meta: { rowsScanned: 0, bytesScanned: 0, durationMs: 0 },
};
const params = makeBaseParams('scalar', [
{
type: 'builder_query',
spec: {
name: 'A',
signal: 'traces',
stepInterval: 60,
disabled: false,
aggregations: [{ expression: 'count()' }],
},
},
]);
const input: SuccessResponse<
MetricRangePayloadV5,
QueryRangeRequestV5
> = makeBaseSuccess({ data: v5Data }, params);
const legendMap = { A: '{{service.name}}' };
const result = convertV5ResponseToLegacy(input, legendMap, true);
expect(result.payload.data.resultType).toBe('scalar');
const [tableEntry] = result.payload.data.result;
expect(tableEntry.table?.columns).toEqual([
{
name: 'service.name',
queryName: 'A',
isValueColumn: false,
id: 'service.name',
},
// Single aggregation: name resolves to legend, id resolves to queryName
{ name: '{{service.name}}', queryName: 'A', isValueColumn: true, id: 'A' },
]);
expect(tableEntry.table?.rows?.[0]).toEqual({
data: {
'service.name': 'adservice',
A: 580,
},
});
});
});

View File

@@ -1,633 +0,0 @@
/* eslint-disable sonarjs/no-duplicate-string, simple-import-sort/imports, @typescript-eslint/indent, no-mixed-spaces-and-tabs */
import { PANEL_TYPES } from 'constants/queryBuilder';
import {
IBuilderFormula,
IBuilderQuery,
} from 'types/api/queryBuilder/queryBuilderData';
import { GetQueryResultsProps } from 'lib/dashboard/getQueryResults';
import {
ClickHouseQuery,
LogAggregation,
LogBuilderQuery,
MetricBuilderQuery,
PromQuery,
QueryBuilderFormula as V5QueryBuilderFormula,
QueryEnvelope,
QueryRangePayloadV5,
} from 'types/api/v5/queryRange';
import { EQueryType } from 'types/common/dashboard';
import { DataSource } from 'types/common/queryBuilder';
import { DataTypes } from 'types/api/queryBuilder/queryAutocompleteResponse';
import { prepareQueryRangePayloadV5 } from './prepareQueryRangePayloadV5';
jest.mock('lib/getStartEndRangeTime', () => ({
__esModule: true,
default: jest.fn(() => ({ start: '100', end: '200' })),
}));
describe('prepareQueryRangePayloadV5', () => {
const start = 1_710_000_000; // seconds
const end = 1_710_000_600; // seconds
const baseBuilderQuery = (
overrides?: Partial<IBuilderQuery>,
): IBuilderQuery => ({
queryName: 'A',
dataSource: DataSource.METRICS,
aggregations: [
{
metricName: 'cpu_usage',
temporality: '',
timeAggregation: 'sum',
spaceAggregation: 'avg',
reduceTo: 'avg',
},
],
timeAggregation: 'sum',
spaceAggregation: 'avg',
temporality: '',
functions: [
{
name: 'timeShift',
args: [{ value: '5m' }],
},
],
filter: { expression: '' },
filters: { items: [], op: 'AND' },
groupBy: [],
expression: 'A',
disabled: false,
having: [],
limit: null,
stepInterval: 600,
orderBy: [],
reduceTo: 'avg',
legend: 'Legend A',
...overrides,
});
const baseFormula = (
overrides?: Partial<IBuilderFormula>,
): IBuilderFormula => ({
expression: 'A + 1',
disabled: false,
queryName: 'F1',
legend: 'Formula Legend',
limit: undefined,
having: [],
stepInterval: undefined,
orderBy: [],
...overrides,
});
it('builds payload for builder queries with formulas and variables', () => {
const props: GetQueryResultsProps = {
query: {
queryType: EQueryType.QUERY_BUILDER,
id: 'q1',
unit: undefined,
promql: [],
clickhouse_sql: [],
builder: {
queryData: [baseBuilderQuery()],
queryFormulas: [baseFormula()],
},
},
graphType: PANEL_TYPES.TIME_SERIES,
selectedTime: 'GLOBAL_TIME',
start,
end,
variables: { svc: 'api', count: 5, flag: true },
fillGaps: true,
};
const result = prepareQueryRangePayloadV5(props);
expect(result).toEqual(
expect.objectContaining({
legendMap: { A: 'Legend A', F1: 'Formula Legend' },
queryPayload: expect.objectContaining({
compositeQuery: expect.objectContaining({
queries: expect.arrayContaining([
expect.objectContaining({
type: 'builder_query',
spec: expect.objectContaining({
name: 'A',
signal: 'metrics',
stepInterval: 600,
functions: [{ name: 'timeShift', args: [{ value: '5m' }] }],
aggregations: [
expect.objectContaining({
metricName: 'cpu_usage',
timeAggregation: 'sum',
spaceAggregation: 'avg',
reduceTo: undefined,
}),
],
}),
}),
expect.objectContaining({
type: 'builder_formula',
spec: expect.objectContaining({
name: 'F1',
expression: 'A + 1',
legend: 'Formula Legend',
}),
}),
]),
}),
requestType: 'time_series',
formatOptions: expect.objectContaining({
formatTableResultForUI: false,
fillGaps: true,
}),
start: start * 1000,
end: end * 1000,
variables: expect.objectContaining({
svc: { value: 'api' },
count: { value: 5 },
flag: { value: true },
}),
}),
}),
);
// Legend map combines builder and formulas
expect(result.legendMap).toEqual({ A: 'Legend A', F1: 'Formula Legend' });
const payload: QueryRangePayloadV5 = result.queryPayload;
expect(payload.schemaVersion).toBe('v1');
expect(payload.start).toBe(start * 1000);
expect(payload.end).toBe(end * 1000);
expect(payload.requestType).toBe('time_series');
expect(payload.formatOptions?.formatTableResultForUI).toBe(false);
expect(payload.formatOptions?.fillGaps).toBe(true);
// Variables mapped as { key: { value } }
expect(payload.variables).toEqual({
svc: { value: 'api' },
count: { value: 5 },
flag: { value: true },
});
// Queries include one builder_query and one builder_formula
expect(payload.compositeQuery.queries).toHaveLength(2);
const builderQuery = payload.compositeQuery.queries.find(
(q) => q.type === 'builder_query',
) as QueryEnvelope;
const builderSpec = builderQuery.spec as MetricBuilderQuery;
expect(builderSpec.name).toBe('A');
expect(builderSpec.signal).toBe('metrics');
expect(builderSpec.aggregations?.[0]).toMatchObject({
metricName: 'cpu_usage',
timeAggregation: 'sum',
spaceAggregation: 'avg',
});
// reduceTo should not be present for non-scalar panels
expect(builderSpec.aggregations?.[0].reduceTo).toBeUndefined();
// functions should be preserved/normalized
expect(builderSpec.functions?.[0]?.name).toBe('timeShift');
const formulaQuery = payload.compositeQuery.queries.find(
(q) => q.type === 'builder_formula',
) as QueryEnvelope;
const formulaSpec = formulaQuery.spec as V5QueryBuilderFormula;
expect(formulaSpec.name).toBe('F1');
expect(formulaSpec.expression).toBe('A + 1');
expect(formulaSpec.legend).toBe('Formula Legend');
});
it('builds payload for PromQL queries and respects originalGraphType for formatting', () => {
const props: GetQueryResultsProps = {
query: {
queryType: EQueryType.PROM,
id: 'q2',
unit: undefined,
promql: [
{
name: 'A',
query: 'up',
disabled: false,
legend: 'LP',
},
],
clickhouse_sql: [],
builder: { queryData: [], queryFormulas: [] },
},
graphType: PANEL_TYPES.TIME_SERIES,
originalGraphType: PANEL_TYPES.TABLE,
selectedTime: 'GLOBAL_TIME',
start,
end,
};
const result = prepareQueryRangePayloadV5(props);
expect(result).toEqual(
expect.objectContaining({
legendMap: { A: 'LP' },
queryPayload: expect.objectContaining({
compositeQuery: expect.objectContaining({
queries: [
{
type: 'promql',
spec: expect.objectContaining({
name: 'A',
query: 'up',
legend: 'LP',
stats: false,
}),
},
],
}),
requestType: 'time_series',
formatOptions: expect.objectContaining({
formatTableResultForUI: true,
fillGaps: false,
}),
start: start * 1000,
end: end * 1000,
variables: {},
}),
}),
);
expect(result.legendMap).toEqual({ A: 'LP' });
const payload: QueryRangePayloadV5 = result.queryPayload;
expect(payload.requestType).toBe('time_series');
expect(payload.formatOptions?.formatTableResultForUI).toBe(true);
expect(payload.compositeQuery.queries).toHaveLength(1);
const prom = payload.compositeQuery.queries[0];
expect(prom.type).toBe('promql');
const promSpec = prom.spec as PromQuery;
expect(promSpec.name).toBe('A');
expect(promSpec.query).toBe('up');
expect(promSpec.legend).toBe('LP');
expect(promSpec.stats).toBe(false);
});
it('builds payload for ClickHouse queries and maps requestType from panel', () => {
const props: GetQueryResultsProps = {
query: {
queryType: EQueryType.CLICKHOUSE,
id: 'q3',
unit: undefined,
promql: [],
clickhouse_sql: [
{
name: 'Q',
query: 'SELECT 1',
disabled: false,
legend: 'LC',
},
],
builder: { queryData: [], queryFormulas: [] },
},
graphType: PANEL_TYPES.TABLE,
selectedTime: 'GLOBAL_TIME',
start,
end,
};
const result = prepareQueryRangePayloadV5(props);
expect(result).toEqual(
expect.objectContaining({
legendMap: { Q: 'LC' },
queryPayload: expect.objectContaining({
compositeQuery: expect.objectContaining({
queries: [
{
type: 'clickhouse_sql',
spec: expect.objectContaining({
name: 'Q',
query: 'SELECT 1',
legend: 'LC',
}),
},
],
}),
requestType: 'scalar',
formatOptions: expect.objectContaining({
formatTableResultForUI: true,
fillGaps: false,
}),
start: start * 1000,
end: end * 1000,
variables: {},
}),
}),
);
expect(result.legendMap).toEqual({ Q: 'LC' });
const payload: QueryRangePayloadV5 = result.queryPayload;
expect(payload.requestType).toBe('scalar');
expect(payload.compositeQuery.queries).toHaveLength(1);
const ch = payload.compositeQuery.queries[0];
expect(ch.type).toBe('clickhouse_sql');
const chSpec = ch.spec as ClickHouseQuery;
expect(chSpec.name).toBe('Q');
expect(chSpec.query).toBe('SELECT 1');
expect(chSpec.legend).toBe('LC');
});
it('uses getStartEndRangeTime when start/end are not provided', () => {
const props: GetQueryResultsProps = {
query: {
queryType: EQueryType.QUERY_BUILDER,
id: 'q4',
unit: undefined,
promql: [],
clickhouse_sql: [],
builder: { queryData: [], queryFormulas: [] },
},
graphType: PANEL_TYPES.TIME_SERIES,
selectedTime: 'GLOBAL_TIME',
};
const result = prepareQueryRangePayloadV5(props);
expect(result).toEqual(
expect.objectContaining({
legendMap: {},
queryPayload: expect.objectContaining({
compositeQuery: { queries: [] },
requestType: 'time_series',
formatOptions: expect.objectContaining({
formatTableResultForUI: false,
fillGaps: false,
}),
start: 100 * 1000,
end: 200 * 1000,
variables: {},
}),
}),
);
const payload: QueryRangePayloadV5 = result.queryPayload;
expect(payload.start).toBe(100 * 1000);
expect(payload.end).toBe(200 * 1000);
});
it('includes reduceTo for metrics in scalar panels (TABLE)', () => {
const props: GetQueryResultsProps = {
query: {
queryType: EQueryType.QUERY_BUILDER,
id: 'q5',
unit: undefined,
promql: [],
clickhouse_sql: [],
builder: {
queryData: [baseBuilderQuery()],
queryFormulas: [],
},
},
graphType: PANEL_TYPES.TABLE,
selectedTime: 'GLOBAL_TIME',
start,
end,
};
const result = prepareQueryRangePayloadV5(props);
expect(result).toEqual(
expect.objectContaining({
legendMap: { A: 'Legend A' },
queryPayload: expect.objectContaining({
compositeQuery: expect.objectContaining({
queries: [
{
type: 'builder_query',
spec: expect.objectContaining({
name: 'A',
signal: 'metrics',
stepInterval: 600,
functions: [{ name: 'timeShift', args: [{ value: '5m' }] }],
aggregations: [
expect.objectContaining({
metricName: 'cpu_usage',
timeAggregation: 'sum',
spaceAggregation: 'avg',
reduceTo: 'avg',
temporality: undefined,
}),
],
}),
},
],
}),
requestType: 'scalar',
formatOptions: expect.objectContaining({
formatTableResultForUI: true,
fillGaps: false,
}),
start: start * 1000,
end: end * 1000,
variables: {},
}),
}),
);
const payload: QueryRangePayloadV5 = result.queryPayload;
const builderQuery = payload.compositeQuery.queries.find(
(q) => q.type === 'builder_query',
) as QueryEnvelope;
const builderSpec = builderQuery.spec as MetricBuilderQuery;
expect(builderSpec.aggregations?.[0].reduceTo).toBe('avg');
});
it('omits aggregations for raw request type (LIST panel)', () => {
const logAgg: LogAggregation[] = [{ expression: 'count()' }];
const logsQuery = baseBuilderQuery({
dataSource: DataSource.LOGS,
aggregations: logAgg,
} as Partial<IBuilderQuery>);
const props: GetQueryResultsProps = {
query: {
queryType: EQueryType.QUERY_BUILDER,
id: 'q6',
unit: undefined,
promql: [],
clickhouse_sql: [],
builder: {
queryData: [logsQuery],
queryFormulas: [],
},
},
graphType: PANEL_TYPES.LIST,
selectedTime: 'GLOBAL_TIME',
start,
end,
};
const result = prepareQueryRangePayloadV5(props);
expect(result).toEqual(
expect.objectContaining({
legendMap: { A: 'Legend A' },
queryPayload: expect.objectContaining({
compositeQuery: expect.objectContaining({
queries: [
{
type: 'builder_query',
spec: expect.objectContaining({
name: 'A',
signal: 'logs',
stepInterval: 600,
functions: [{ name: 'timeShift', args: [{ value: '5m' }] }],
aggregations: undefined,
}),
},
],
}),
requestType: 'raw',
formatOptions: expect.objectContaining({
formatTableResultForUI: false,
fillGaps: false,
}),
start: start * 1000,
end: end * 1000,
variables: {},
}),
}),
);
const payload: QueryRangePayloadV5 = result.queryPayload;
expect(payload.requestType).toBe('raw');
const builderQuery = payload.compositeQuery.queries.find(
(q) => q.type === 'builder_query',
) as QueryEnvelope;
// For RAW request type, aggregations should be omitted
const logSpec = builderQuery.spec as LogBuilderQuery;
expect(logSpec.aggregations).toBeUndefined();
});
it('maps groupBy, order, having, aggregations and filter for logs builder query', () => {
const getStartEndRangeTime = jest.requireMock('lib/getStartEndRangeTime')
.default as jest.Mock;
getStartEndRangeTime.mockReturnValueOnce({
start: '1754623641',
end: '1754645241',
});
const props: GetQueryResultsProps = {
query: {
queryType: EQueryType.QUERY_BUILDER,
id: 'e643e387-1996-4449-97b6-9ef4498a0573',
unit: undefined,
promql: [{ name: 'A', query: '', legend: '', disabled: false }],
clickhouse_sql: [{ name: 'A', legend: '', disabled: false, query: '' }],
builder: {
queryData: [
{
dataSource: DataSource.LOGS,
queryName: 'A',
aggregateOperator: 'count',
aggregateAttribute: {
key: '',
dataType: DataTypes.EMPTY,
type: '',
},
timeAggregation: 'rate',
spaceAggregation: 'sum',
filter: { expression: "service.name = 'adservice'" },
aggregations: [
{ expression: 'count() as cnt avg(code.lineno) ' } as LogAggregation,
],
functions: [],
filters: {
items: [
{
id: '14c790ec-54d1-42f0-a889-3b4f0fb79852',
op: '=',
key: { id: 'service.name', key: 'service.name', type: '' },
value: 'adservice',
},
],
op: 'AND',
},
expression: 'A',
disabled: false,
stepInterval: 80,
having: { expression: 'count() > 0' },
limit: 600,
orderBy: [{ columnName: 'service.name', order: 'desc' }],
groupBy: [
{
key: 'service.name',
type: '',
},
],
legend: '{{service.name}}',
reduceTo: 'avg',
offset: 0,
pageSize: 100,
},
],
queryFormulas: [],
},
},
graphType: PANEL_TYPES.TIME_SERIES,
selectedTime: 'GLOBAL_TIME',
globalSelectedInterval: 'custom' as never,
variables: {},
};
const result = prepareQueryRangePayloadV5(props);
expect(result).toEqual(
expect.objectContaining({
legendMap: { A: '{{service.name}}' },
queryPayload: expect.objectContaining({
schemaVersion: 'v1',
start: 1754623641000,
end: 1754645241000,
requestType: 'time_series',
compositeQuery: expect.objectContaining({
queries: [
{
type: 'builder_query',
spec: expect.objectContaining({
name: 'A',
signal: 'logs',
stepInterval: 80,
disabled: false,
filter: { expression: "service.name = 'adservice'" },
groupBy: [
{
name: 'service.name',
fieldDataType: '',
fieldContext: '',
},
],
limit: 600,
order: [
{
key: { name: 'service.name' },
direction: 'desc',
},
],
legend: '{{service.name}}',
having: { expression: 'count() > 0' },
aggregations: [
{ expression: 'count()', alias: 'cnt' },
{ expression: 'avg(code.lineno)' },
],
}),
},
],
}),
formatOptions: { formatTableResultForUI: false, fillGaps: false },
variables: {},
}),
}),
);
});
});

View File

@@ -66,46 +66,9 @@ function getSignalType(dataSource: string): 'traces' | 'logs' | 'metrics' {
return 'metrics';
}
function isDeprecatedField(fieldName: string): boolean {
const deprecatedIntrinsicFields = [
'traceID',
'spanID',
'parentSpanID',
'spanKind',
'durationNano',
'statusCode',
'statusMessage',
'statusCodeString',
];
const deprecatedCalculatedFields = [
'responseStatusCode',
'externalHttpUrl',
'httpUrl',
'externalHttpMethod',
'httpMethod',
'httpHost',
'dbName',
'dbOperation',
'hasError',
'isRemote',
'serviceName',
'httpRoute',
'msgSystem',
'msgOperation',
'dbSystem',
'rpcSystem',
'rpcService',
'rpcMethod',
'peerService',
];
return (
deprecatedIntrinsicFields.includes(fieldName) ||
deprecatedCalculatedFields.includes(fieldName)
);
}
/**
* Creates base spec for builder queries
*/
function createBaseSpec(
queryData: IBuilderQuery,
requestType: RequestType,
@@ -117,7 +80,7 @@ function createBaseSpec(
)[])?.filter((c) => ('key' in c ? c?.key : c?.name));
return {
stepInterval: queryData?.stepInterval || null,
stepInterval: queryData?.stepInterval || undefined,
disabled: queryData.disabled,
filter: queryData?.filter?.expression ? queryData.filter : undefined,
groupBy:
@@ -125,8 +88,8 @@ function createBaseSpec(
? queryData.groupBy.map(
(item: any): GroupByKey => ({
name: item.key,
fieldDataType: item?.dataType || '',
fieldContext: item?.type || '',
fieldDataType: item?.dataType,
fieldContext: item?.type,
description: item?.description,
unit: item?.unit,
signal: item?.signal,
@@ -177,33 +140,19 @@ function createBaseSpec(
selectFields: isEmpty(nonEmptySelectColumns)
? undefined
: nonEmptySelectColumns?.map(
(column: any): TelemetryFieldKey => {
const fieldName = column.name ?? column.key;
const isDeprecated = isDeprecatedField(fieldName);
const fieldObj: TelemetryFieldKey = {
name: fieldName,
fieldDataType:
column?.fieldDataType ?? (column?.dataType as FieldDataType),
signal: column?.signal ?? undefined,
};
// Only add fieldContext if the field is NOT deprecated
if (!isDeprecated && fieldName !== 'name') {
fieldObj.fieldContext =
column?.fieldContext ?? (column?.type as FieldContext);
}
return fieldObj;
},
(column: any): TelemetryFieldKey => ({
name: column.name ?? column.key,
fieldDataType:
column?.fieldDataType ?? (column?.dataType as FieldDataType),
fieldContext: column?.fieldContext ?? (column?.type as FieldContext),
signal: column?.signal ?? undefined,
}),
),
};
}
// Utility to parse aggregation expressions with optional alias
export function parseAggregations(
expression: string,
availableAlias?: string,
): { expression: string; alias?: string }[] {
const result: { expression: string; alias?: string }[] = [];
// Matches function calls like "count()" or "sum(field)" with optional alias like "as 'alias'"
@@ -212,7 +161,7 @@ export function parseAggregations(
let match = regex.exec(expression);
while (match !== null) {
const expr = match[1];
let alias = match[2] || availableAlias; // Use provided alias or availableAlias if not matched
let alias = match[2];
if (alias) {
// Remove quotes if present
alias = alias.replace(/^['"]|['"]$/g, '');
@@ -263,14 +212,9 @@ export function createAggregation(
}
if (queryData.aggregations?.length > 0) {
return queryData.aggregations.flatMap(
(agg: { expression: string; alias?: string }) => {
const parsedAggregations = parseAggregations(agg.expression, agg?.alias);
return isEmpty(parsedAggregations)
? [{ expression: 'count()' }]
: parsedAggregations;
},
);
return isEmpty(parseAggregations(queryData.aggregations?.[0].expression))
? [{ expression: 'count()' }]
: parseAggregations(queryData.aggregations?.[0].expression);
}
return [{ expression: 'count()' }];

View File

@@ -1,16 +1,14 @@
import { render, screen } from '@testing-library/react';
import getLocal from '../../../api/browser/localstorage/get';
import AppLoading from '../AppLoading';
jest.mock('../../../api/browser/localstorage/get', () => ({
// Mock the localStorage API
const mockGet = jest.fn();
jest.mock('api/browser/localstorage/get', () => ({
__esModule: true,
default: jest.fn(),
default: mockGet,
}));
// Access the mocked function
const mockGet = (getLocal as unknown) as jest.Mock;
describe('AppLoading', () => {
const SIGNOZ_TEXT = 'SigNoz';
const TAGLINE_TEXT =

View File

@@ -32,6 +32,8 @@ export const celeryAllStateWidgetData = (
aggregateAttribute: {
dataType: DataTypes.String,
id: '------false',
isColumn: false,
isJSON: false,
key: '',
type: '',
},
@@ -48,6 +50,8 @@ export const celeryAllStateWidgetData = (
{
dataType: DataTypes.String,
id: 'celery.state--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.state',
type: 'tag',
},
@@ -84,6 +88,7 @@ export const celeryRetryStateWidgetData = (
aggregateAttribute: {
dataType: DataTypes.String,
id: '------false',
isColumn: false,
key: '',
type: '',
},
@@ -98,6 +103,8 @@ export const celeryRetryStateWidgetData = (
key: {
dataType: DataTypes.String,
id: 'celery.state--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.state',
type: 'tag',
},
@@ -112,6 +119,8 @@ export const celeryRetryStateWidgetData = (
{
dataType: DataTypes.String,
id: 'celery.hostname--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.hostname',
type: 'tag',
},
@@ -144,6 +153,8 @@ export const celeryFailedStateWidgetData = (
aggregateAttribute: {
dataType: DataTypes.String,
id: '------false',
isColumn: false,
isJSON: false,
key: '',
type: '',
},
@@ -158,6 +169,8 @@ export const celeryFailedStateWidgetData = (
key: {
dataType: DataTypes.String,
id: 'celery.state--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.state',
type: 'tag',
},
@@ -172,6 +185,8 @@ export const celeryFailedStateWidgetData = (
{
dataType: DataTypes.String,
id: 'celery.hostname--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.hostname',
type: 'tag',
},
@@ -204,6 +219,8 @@ export const celerySuccessStateWidgetData = (
aggregateAttribute: {
dataType: DataTypes.String,
id: '------false',
isColumn: false,
isJSON: false,
key: '',
type: '',
},
@@ -218,6 +235,8 @@ export const celerySuccessStateWidgetData = (
key: {
dataType: DataTypes.String,
id: 'celery.state--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.state',
type: 'tag',
},
@@ -232,6 +251,8 @@ export const celerySuccessStateWidgetData = (
{
dataType: DataTypes.String,
id: 'celery.hostname--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.hostname',
type: 'tag',
},
@@ -263,6 +284,7 @@ export const celeryTasksByWorkerWidgetData = (
aggregateAttribute: {
dataType: DataTypes.String,
id: '------false',
isColumn: false,
key: '',
type: '',
},
@@ -279,6 +301,8 @@ export const celeryTasksByWorkerWidgetData = (
{
dataType: DataTypes.String,
id: 'celery.hostname--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.hostname',
type: 'tag',
},
@@ -314,6 +338,8 @@ export const celeryErrorByWorkerWidgetData = (
aggregateAttribute: {
dataType: 'string',
id: 'span_id--string----true',
isColumn: true,
isJSON: false,
key: 'span_id',
type: '',
},
@@ -327,6 +353,8 @@ export const celeryErrorByWorkerWidgetData = (
key: {
dataType: DataTypes.bool,
id: 'has_error--bool----true',
isColumn: true,
isJSON: false,
key: 'has_error',
type: '',
},
@@ -345,6 +373,8 @@ export const celeryErrorByWorkerWidgetData = (
groupBy: [
{
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: 'celery.hostname',
type: 'tag',
id: 'celery.hostname--string--tag--false',
@@ -360,6 +390,8 @@ export const celeryErrorByWorkerWidgetData = (
aggregateAttribute: {
dataType: 'string',
id: 'span_id--string----true',
isColumn: true,
isJSON: false,
key: 'span_id',
type: '',
},
@@ -379,6 +411,8 @@ export const celeryErrorByWorkerWidgetData = (
groupBy: [
{
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: 'celery.hostname',
type: 'tag',
id: 'celery.hostname--string--tag--false',
@@ -411,6 +445,8 @@ export const celeryLatencyByWorkerWidgetData = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'duration_nano--float64----true',
isColumn: true,
isJSON: false,
key: 'duration_nano',
type: '',
},
@@ -427,6 +463,8 @@ export const celeryLatencyByWorkerWidgetData = (
{
dataType: DataTypes.String,
id: 'celery.hostname--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.hostname',
type: 'tag',
},
@@ -460,6 +498,8 @@ export const celeryActiveTasksWidgetData = (
dataType: DataTypes.Float64,
id:
'flower_worker_number_of_currently_executing_tasks--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: 'flower_worker_number_of_currently_executing_tasks',
type: 'Gauge',
},
@@ -476,6 +516,8 @@ export const celeryActiveTasksWidgetData = (
{
dataType: DataTypes.String,
id: 'worker--string--tag--false',
isColumn: false,
isJSON: false,
key: 'worker',
type: 'tag',
},
@@ -509,6 +551,8 @@ export const celeryTaskLatencyWidgetData = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'duration_nano--float64----true',
isColumn: true,
isJSON: false,
key: 'duration_nano',
type: '',
},
@@ -525,6 +569,8 @@ export const celeryTaskLatencyWidgetData = (
{
dataType: DataTypes.String,
id: 'celery.task_name--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.task_name',
type: 'tag',
},
@@ -560,6 +606,8 @@ export const celerySlowestTasksTableWidgetData = getWidgetQueryBuilder(
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'duration_nano--float64----true',
isColumn: true,
isJSON: false,
key: 'duration_nano',
type: '',
},
@@ -576,6 +624,8 @@ export const celerySlowestTasksTableWidgetData = getWidgetQueryBuilder(
{
dataType: DataTypes.String,
id: 'celery.task_name--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.task_name',
type: 'tag',
},
@@ -610,6 +660,8 @@ export const celeryRetryTasksTableWidgetData = getWidgetQueryBuilder(
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'duration_nano--float64----true',
isColumn: true,
isJSON: false,
key: 'duration_nano',
type: '',
},
@@ -624,6 +676,8 @@ export const celeryRetryTasksTableWidgetData = getWidgetQueryBuilder(
key: {
dataType: DataTypes.String,
id: 'celery.state--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.state',
type: 'tag',
},
@@ -638,6 +692,8 @@ export const celeryRetryTasksTableWidgetData = getWidgetQueryBuilder(
{
dataType: DataTypes.String,
id: 'celery.task_name--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.task_name',
type: 'tag',
},
@@ -673,6 +729,8 @@ export const celeryFailedTasksTableWidgetData = getWidgetQueryBuilder(
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'duration_nano--float64----true',
isColumn: true,
isJSON: false,
key: 'duration_nano',
type: '',
},
@@ -687,6 +745,8 @@ export const celeryFailedTasksTableWidgetData = getWidgetQueryBuilder(
key: {
dataType: DataTypes.String,
id: 'celery.state--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.state',
type: 'tag',
},
@@ -701,6 +761,8 @@ export const celeryFailedTasksTableWidgetData = getWidgetQueryBuilder(
{
dataType: DataTypes.String,
id: 'celery.task_name--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.task_name',
type: 'tag',
},
@@ -734,6 +796,8 @@ export const celerySuccessTasksTableWidgetData = getWidgetQueryBuilder(
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'duration_nano--float64----true',
isColumn: true,
isJSON: false,
key: 'duration_nano',
type: '',
},
@@ -748,6 +812,8 @@ export const celerySuccessTasksTableWidgetData = getWidgetQueryBuilder(
key: {
dataType: DataTypes.String,
id: 'celery.state--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.state',
type: 'tag',
},
@@ -762,6 +828,8 @@ export const celerySuccessTasksTableWidgetData = getWidgetQueryBuilder(
{
dataType: DataTypes.String,
id: 'celery.task_name--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.task_name',
type: 'tag',
},
@@ -801,6 +869,8 @@ export const celeryTimeSeriesTablesWidgetData = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'duration_nano--float64----true',
isColumn: true,
isJSON: false,
key: 'duration_nano',
type: '',
},
@@ -815,6 +885,8 @@ export const celeryTimeSeriesTablesWidgetData = (
key: {
dataType: DataTypes.String,
id: `${entity}--string--tag--false`,
isColumn: false,
isJSON: false,
key: `${entity}`,
type: 'tag',
},
@@ -829,6 +901,8 @@ export const celeryTimeSeriesTablesWidgetData = (
{
dataType: DataTypes.String,
id: 'celery.task_name--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.task_name',
type: 'tag',
},
@@ -859,6 +933,8 @@ export const celeryAllStateCountWidgetData = getWidgetQueryBuilder(
aggregateAttribute: {
dataType: DataTypes.String,
id: 'span_id--string----true',
isColumn: true,
isJSON: false,
key: 'span_id',
type: '',
},
@@ -896,6 +972,8 @@ export const celerySuccessStateCountWidgetData = getWidgetQueryBuilder(
aggregateAttribute: {
dataType: DataTypes.String,
id: 'span_id--string----true',
isColumn: true,
isJSON: false,
key: 'span_id',
type: '',
},
@@ -910,6 +988,8 @@ export const celerySuccessStateCountWidgetData = getWidgetQueryBuilder(
key: {
dataType: DataTypes.String,
id: 'celery.state--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.state',
type: 'tag',
},
@@ -945,6 +1025,8 @@ export const celeryFailedStateCountWidgetData = getWidgetQueryBuilder(
aggregateAttribute: {
dataType: DataTypes.String,
id: 'span_id--string----true',
isColumn: true,
isJSON: false,
key: 'span_id',
type: '',
},
@@ -959,6 +1041,8 @@ export const celeryFailedStateCountWidgetData = getWidgetQueryBuilder(
key: {
dataType: DataTypes.String,
id: 'celery.state--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.state',
type: 'tag',
},
@@ -994,6 +1078,7 @@ export const celeryRetryStateCountWidgetData = getWidgetQueryBuilder(
aggregateAttribute: {
dataType: DataTypes.String,
id: 'span_id--string----true',
isColumn: true,
key: 'span_id',
type: '',
},
@@ -1008,6 +1093,8 @@ export const celeryRetryStateCountWidgetData = getWidgetQueryBuilder(
key: {
dataType: DataTypes.String,
id: 'celery.state--string--tag--false',
isColumn: false,
isJSON: false,
key: 'celery.state',
type: 'tag',
},

View File

@@ -39,6 +39,8 @@ export function getFiltersFromQueryParams(
key,
dataType: DataTypes.String,
type: 'tag',
isColumn: false,
isJSON: false,
id: `${key}--string--tag--false`,
},
op: '=',
@@ -98,7 +100,8 @@ export const createFiltersFromData = (
key: string;
dataType: DataTypes;
type: string;
isColumn: boolean;
isJSON: boolean;
id: string;
};
op: string;
@@ -116,6 +119,8 @@ export const createFiltersFromData = (
key,
dataType: DataTypes.String,
type: 'tag',
isColumn: false,
isJSON: false,
id: `${key}--string--tag--false`,
},
op: '=',

View File

@@ -241,6 +241,8 @@ function ClientSideQBSearch(
key: 'body',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
id: 'body--string----true',
},
op: OPERATORS.CONTAINS,

View File

@@ -1,16 +1,6 @@
.custom-time-picker {
display: flex;
flex-direction: column;
.timeSelection-input {
&:hover {
border-color: #1d212d !important;
}
}
.time-input-suffix {
display: flex;
}
}
.time-options-container {
@@ -145,7 +135,6 @@
align-items: center;
color: var(--bg-vanilla-400);
gap: 6px;
.timezone {
display: flex;
align-items: center;
@@ -174,27 +163,6 @@
cursor: pointer;
}
.time-input-suffix-icon-badge {
display: flex;
align-items: center;
justify-content: center;
padding: 0 4px;
border-radius: 2px;
background: rgba(171, 189, 255, 0.04);
color: var(--bg-vanilla-100);
font-size: 12px;
font-weight: 400;
line-height: 16px;
letter-spacing: -0.06px;
cursor: pointer;
height: 20px;
width: 20px;
&:hover {
background: rgba(171, 189, 255, 0.08);
}
}
.lightMode {
.date-time-popover__footer {
border-color: var(--bg-vanilla-400);
@@ -212,26 +180,8 @@
}
}
}
.custom-time-picker {
.timeSelection-input {
&:hover {
border-color: var(--bg-vanilla-300) !important;
}
}
}
.timezone-badge {
color: var(--bg-ink-100);
background: rgb(179 179 179 / 15%);
}
.time-input-suffix-icon-badge {
color: var(--bg-ink-100);
background: rgb(179 179 179 / 15%);
&:hover {
background: rgb(179 179 179 / 20%);
}
}
}

View File

@@ -5,12 +5,13 @@ import './CustomTimePicker.styles.scss';
import { Input, Popover, Tooltip, Typography } from 'antd';
import logEvent from 'api/common/logEvent';
import cx from 'classnames';
import { DATE_TIME_FORMATS } from 'constants/dateTimeFormats';
import { DateTimeRangeType } from 'container/TopNav/CustomDateTimeModal';
import {
CustomTimeType,
FixedDurationSuggestionOptions,
Options,
RelativeDurationSuggestionOptions,
Time,
} from 'container/TopNav/DateTimeSelectionV2/config';
import dayjs from 'dayjs';
import { isValidTimeFormat } from 'lib/getMinMax';
@@ -27,10 +28,7 @@ import {
useMemo,
useState,
} from 'react';
import { useSelector } from 'react-redux';
import { useLocation } from 'react-router-dom';
import { AppState } from 'store/reducers';
import { GlobalReducer } from 'types/reducer/globalTime';
import { popupContainer } from 'utils/selectPopupContainer';
import CustomTimePickerPopoverContent from './CustomTimePickerPopoverContent';
@@ -60,6 +58,10 @@ interface CustomTimePickerProps {
setCustomDTPickerVisible?: Dispatch<SetStateAction<boolean>>;
onCustomDateHandler?: (dateTimeRange: DateTimeRangeType) => void;
handleGoLive?: () => void;
onTimeChange?: (
interval: Time | CustomTimeType,
dateTimeRange?: [number, number],
) => void;
}
function CustomTimePicker({
@@ -77,16 +79,13 @@ function CustomTimePicker({
setCustomDTPickerVisible,
onCustomDateHandler,
handleGoLive,
onTimeChange,
}: CustomTimePickerProps): JSX.Element {
const [
selectedTimePlaceholderValue,
setSelectedTimePlaceholderValue,
] = useState('Select / Enter Time Range');
const { maxTime, minTime } = useSelector<AppState, GlobalReducer>(
(state) => state.globalTime,
);
const [inputValue, setInputValue] = useState('');
const [inputStatus, setInputStatus] = useState<'' | 'error' | 'success'>('');
const [inputErrorMessage, setInputErrorMessage] = useState<string | null>(
@@ -257,11 +256,6 @@ function CustomTimePicker({
};
const handleSelect = (label: string, value: string): void => {
if (label === 'Custom') {
setCustomDTPickerVisible?.(true);
return;
}
onSelect(value);
setSelectedTimePlaceholderValue(label);
setInputStatus('');
@@ -324,105 +318,84 @@ function CustomTimePicker({
);
};
const getTooltipTitle = (): string => {
if (selectedTime === 'custom' && inputValue === '' && !open) {
return `${dayjs(minTime / 1000_000)
.tz(timezone.value)
.format(DATE_TIME_FORMATS.DD_MMM_YYYY_HH_MM_SS)} - ${dayjs(
maxTime / 1000_000,
)
.tz(timezone.value)
.format(DATE_TIME_FORMATS.DD_MMM_YYYY_HH_MM_SS)}`;
}
return '';
};
return (
<div className="custom-time-picker">
<Tooltip title={getTooltipTitle()} placement="top">
<Popover
className={cx(
'timeSelection-input-container',
selectedTime === 'custom' && inputValue === '' ? 'custom-time' : '',
)}
placement="bottomRight"
getPopupContainer={popupContainer}
rootClassName="date-time-root"
content={
newPopover ? (
<CustomTimePickerPopoverContent
setIsOpen={setOpen}
customDateTimeVisible={defaultTo(customDateTimeVisible, false)}
setCustomDTPickerVisible={defaultTo(setCustomDTPickerVisible, noop)}
onCustomDateHandler={defaultTo(onCustomDateHandler, noop)}
onSelectHandler={handleSelect}
handleGoLive={defaultTo(handleGoLive, noop)}
options={items}
selectedTime={selectedTime}
activeView={activeView}
setActiveView={setActiveView}
setIsOpenedFromFooter={setIsOpenedFromFooter}
isOpenedFromFooter={isOpenedFromFooter}
/>
<Popover
className={cx(
'timeSelection-input-container',
selectedTime === 'custom' && inputValue === '' ? 'custom-time' : '',
)}
placement="bottomRight"
getPopupContainer={popupContainer}
rootClassName="date-time-root"
content={
newPopover ? (
<CustomTimePickerPopoverContent
setIsOpen={setOpen}
customDateTimeVisible={defaultTo(customDateTimeVisible, false)}
setCustomDTPickerVisible={defaultTo(setCustomDTPickerVisible, noop)}
onCustomDateHandler={defaultTo(onCustomDateHandler, noop)}
onSelectHandler={handleSelect}
handleGoLive={defaultTo(handleGoLive, noop)}
options={items}
selectedTime={selectedTime}
activeView={activeView}
setActiveView={setActiveView}
setIsOpenedFromFooter={setIsOpenedFromFooter}
isOpenedFromFooter={isOpenedFromFooter}
onTimeChange={onTimeChange}
/>
) : (
content
)
}
arrow={false}
trigger="click"
open={open}
onOpenChange={handleOpenChange}
style={{
padding: 0,
}}
>
<Input
className="timeSelection-input"
type="text"
status={inputValue && inputStatus === 'error' ? 'error' : ''}
placeholder={
isInputFocused
? 'Time Format (1m or 2h or 3d or 4w)'
: selectedTimePlaceholderValue
}
value={inputValue}
onFocus={handleFocus}
onBlur={handleBlur}
onChange={handleInputChange}
data-1p-ignore
prefix={
inputValue && inputStatus === 'success' ? (
<CheckCircle size={14} color="#51E7A8" />
) : (
content
<Tooltip title="Enter time in format (e.g., 1m, 2h, 3d, 4w)">
<Clock size={14} />
</Tooltip>
)
}
arrow={false}
trigger="click"
open={open}
onOpenChange={handleOpenChange}
style={{
padding: 0,
}}
>
<Input
className="timeSelection-input"
type="text"
status={inputValue && inputStatus === 'error' ? 'error' : ''}
placeholder={
isInputFocused
? 'Time Format (1m or 2h or 3d or 4w)'
: selectedTimePlaceholderValue
}
value={inputValue}
onFocus={handleFocus}
onClick={handleFocus}
onBlur={handleBlur}
onChange={handleInputChange}
data-1p-ignore
prefix={
<div className="time-input-prefix">
{inputValue && inputStatus === 'success' ? (
<CheckCircle size={14} color="#51E7A8" />
) : (
<Tooltip title="Enter time in format (e.g., 1m, 2h, 3d, 4w)">
<Clock size={14} className="cursor-pointer" />
</Tooltip>
)}
</div>
}
suffix={
<div className="time-input-suffix">
{!!isTimezoneOverridden && activeTimezoneOffset && (
<div className="timezone-badge" onClick={handleTimezoneHintClick}>
<span>{activeTimezoneOffset}</span>
</div>
)}
<ChevronDown
size={14}
className="cursor-pointer time-input-suffix-icon-badge"
onClick={(e): void => {
e.stopPropagation();
handleViewChange('datetime');
}}
/>
</div>
}
/>
</Popover>
</Tooltip>
suffix={
<>
{!!isTimezoneOverridden && activeTimezoneOffset && (
<div className="timezone-badge" onClick={handleTimezoneHintClick}>
<span>{activeTimezoneOffset}</span>
</div>
)}
<ChevronDown
size={14}
onClick={(): void => handleViewChange('datetime')}
/>
</>
}
/>
</Popover>
{inputStatus === 'error' && inputErrorMessage && (
<Typography.Title level={5} className="valid-format-error">
{inputErrorMessage}
@@ -441,4 +414,5 @@ CustomTimePicker.defaultProps = {
onCustomDateHandler: noop,
handleGoLive: noop,
onCustomTimeStatusUpdate: noop,
onTimeChange: undefined,
};

View File

@@ -4,22 +4,21 @@ import { Color } from '@signozhq/design-tokens';
import { Button } from 'antd';
import logEvent from 'api/common/logEvent';
import cx from 'classnames';
import DatePickerV2 from 'components/DatePickerV2/DatePickerV2';
import { DATE_TIME_FORMATS } from 'constants/dateTimeFormats';
import ROUTES from 'constants/routes';
import { DateTimeRangeType } from 'container/TopNav/CustomDateTimeModal';
import {
CustomTimeType,
LexicalContext,
Option,
RelativeDurationSuggestionOptions,
Time,
} from 'container/TopNav/DateTimeSelectionV2/config';
import dayjs from 'dayjs';
import { Clock, PenLine } from 'lucide-react';
import { useTimezone } from 'providers/Timezone';
import { Dispatch, SetStateAction, useEffect, useMemo, useState } from 'react';
import { Dispatch, SetStateAction, useMemo } from 'react';
import { useLocation } from 'react-router-dom';
import { getCustomTimeRanges } from 'utils/customTimeRangeUtils';
import RangePickerModal from './RangePickerModal';
import TimezonePicker from './TimezonePicker';
interface CustomTimePickerPopoverContentProps {
@@ -38,14 +37,10 @@ interface CustomTimePickerPopoverContentProps {
setActiveView: Dispatch<SetStateAction<'datetime' | 'timezone'>>;
isOpenedFromFooter: boolean;
setIsOpenedFromFooter: Dispatch<SetStateAction<boolean>>;
}
interface RecentlyUsedDateTimeRange {
label: string;
value: number;
timestamp: number;
from: string;
to: string;
onTimeChange?: (
interval: Time | CustomTimeType,
dateTimeRange?: [number, number],
) => void;
}
// eslint-disable-next-line sonarjs/cognitive-complexity
@@ -62,42 +57,16 @@ function CustomTimePickerPopoverContent({
setActiveView,
isOpenedFromFooter,
setIsOpenedFromFooter,
onTimeChange,
}: CustomTimePickerPopoverContentProps): JSX.Element {
const { pathname } = useLocation();
const isLogsExplorerPage = useMemo(() => pathname === ROUTES.LOGS_EXPLORER, [
pathname,
]);
const { timezone } = useTimezone();
const activeTimezoneOffset = timezone.offset;
const [recentlyUsedTimeRanges, setRecentlyUsedTimeRanges] = useState<
RecentlyUsedDateTimeRange[]
>([]);
useEffect(() => {
if (!customDateTimeVisible) {
const customTimeRanges = getCustomTimeRanges();
const formattedCustomTimeRanges: RecentlyUsedDateTimeRange[] = customTimeRanges.map(
(range) => ({
label: `${dayjs(range.from)
.tz(timezone.value)
.format(DATE_TIME_FORMATS.DD_MMM_YYYY_HH_MM_SS)} - ${dayjs(range.to)
.tz(timezone.value)
.format(DATE_TIME_FORMATS.DD_MMM_YYYY_HH_MM_SS)}`,
from: range.from,
to: range.to,
value: range.timestamp,
timestamp: range.timestamp,
}),
);
setRecentlyUsedTimeRanges(formattedCustomTimeRanges);
}
}, [customDateTimeVisible, timezone.value]);
function getTimeChips(options: Option[]): JSX.Element {
return (
<div className="relative-date-time-section">
@@ -143,77 +112,50 @@ function CustomTimePickerPopoverContent({
return (
<>
<div className="date-time-popover">
{!customDateTimeVisible && (
<div className="date-time-options">
{isLogsExplorerPage && (
<Button className="data-time-live" type="text" onClick={handleGoLive}>
Live
</Button>
)}
{options.map((option) => (
<Button
type="text"
key={option.label + option.value}
onClick={(): void => {
onSelectHandler(option.label, option.value);
}}
className={cx(
'date-time-options-btn',
customDateTimeVisible
? option.value === 'custom' && 'active'
: selectedTime === option.value && 'active',
)}
>
{option.label}
</Button>
))}
</div>
)}
<div className="date-time-options">
{isLogsExplorerPage && (
<Button className="data-time-live" type="text" onClick={handleGoLive}>
Live
</Button>
)}
{options.map((option) => (
<Button
type="text"
key={option.label + option.value}
onClick={(): void => {
onSelectHandler(option.label, option.value);
}}
className={cx(
'date-time-options-btn',
customDateTimeVisible
? option.value === 'custom' && 'active'
: selectedTime === option.value && 'active',
)}
>
{option.label}
</Button>
))}
</div>
<div
className={cx(
'relative-date-time',
customDateTimeVisible ? 'date-picker' : 'relative-times',
selectedTime === 'custom' || customDateTimeVisible
? 'date-picker'
: 'relative-times',
)}
>
{customDateTimeVisible ? (
<DatePickerV2
onSetCustomDTPickerVisible={setCustomDTPickerVisible}
{selectedTime === 'custom' || customDateTimeVisible ? (
<RangePickerModal
setCustomDTPickerVisible={setCustomDTPickerVisible}
setIsOpen={setIsOpen}
onCustomDateHandler={onCustomDateHandler}
selectedTime={selectedTime}
onTimeChange={onTimeChange}
/>
) : (
<div className="time-selector-container">
<div className="relative-times-container">
<div className="time-heading">RELATIVE TIMES</div>
<div>{getTimeChips(RelativeDurationSuggestionOptions)}</div>
</div>
<div className="recently-used-container">
<div className="time-heading">RECENTLY USED</div>
<div className="recently-used-range">
{recentlyUsedTimeRanges.map((range: RecentlyUsedDateTimeRange) => (
<div
className="recently-used-range-item"
role="button"
tabIndex={0}
onKeyDown={(e): void => {
if (e.key === 'Enter' || e.key === ' ') {
onCustomDateHandler([dayjs(range.from), dayjs(range.to)]);
setIsOpen(false);
}
}}
key={range.value}
onClick={(): void => {
onCustomDateHandler([dayjs(range.from), dayjs(range.to)]);
setIsOpen(false);
}}
>
{range.label}
</div>
))}
</div>
</div>
<div className="relative-times-container">
<div className="time-heading">RELATIVE TIMES</div>
<div>{getTimeChips(RelativeDurationSuggestionOptions)}</div>
</div>
)}
</div>
@@ -247,4 +189,8 @@ function CustomTimePickerPopoverContent({
);
}
CustomTimePickerPopoverContent.defaultProps = {
onTimeChange: undefined,
};
export default CustomTimePickerPopoverContent;

View File

@@ -1,114 +0,0 @@
.date-picker-v2-container {
display: flex;
flex-direction: row;
}
.custom-date-time-picker-v2 {
padding: 12px;
.periscope-calendar {
border-radius: 4px;
border: none !important;
background: none !important;
padding: 8px 0 !important;
}
.periscope-calendar-day {
background: none !important;
&.periscope-calendar-today {
&.text-accent-foreground {
color: var(--bg-vanilla-100) !important;
}
}
button {
&:hover {
background-color: var(--bg-robin-500) !important;
color: var(--bg-vanilla-100) !important;
}
}
}
.custom-time-selector {
display: flex;
flex-direction: row;
gap: 16px;
align-items: center;
justify-content: space-between;
.time-input {
border-radius: 4px;
border: none !important;
background: none !important;
padding: 8px 4px !important;
color: var(--bg-vanilla-100) !important;
&::-webkit-calendar-picker-indicator {
display: none !important;
-webkit-appearance: none;
appearance: none;
}
&:focus {
border: none !important;
outline: none !important;
box-shadow: none !important;
}
&:focus-visible {
border: none !important;
outline: none !important;
box-shadow: none !important;
}
}
}
.custom-date-time-picker-footer {
display: flex;
flex-direction: row;
gap: 8px;
align-items: center;
justify-content: flex-end;
margin-top: 16px;
.next-btn {
width: 80px;
}
.clear-btn {
width: 80px;
}
}
}
.invalid-date-range-tooltip {
.ant-tooltip-inner {
color: var(--bg-sakura-500) !important;
}
}
.lightMode {
.custom-date-time-picker-v2 {
.periscope-calendar-day {
&.periscope-calendar-today {
&.text-accent-foreground {
color: var(--bg-ink-500) !important;
}
}
button {
&:hover {
background-color: var(--bg-robin-500) !important;
color: var(--bg-ink-500) !important;
}
}
}
.custom-time-selector {
.time-input {
color: var(--bg-ink-500) !important;
}
}
}
}

View File

@@ -1,311 +0,0 @@
import './DatePickerV2.styles.scss';
import { Calendar } from '@signozhq/calendar';
import { Input } from '@signozhq/input';
import { Button, Tooltip } from 'antd';
import cx from 'classnames';
import { DateTimeRangeType } from 'container/TopNav/CustomDateTimeModal';
import { LexicalContext } from 'container/TopNav/DateTimeSelectionV2/config';
import dayjs, { Dayjs } from 'dayjs';
import { CornerUpLeft, MoveRight } from 'lucide-react';
import { useTimezone } from 'providers/Timezone';
import { useRef, useState } from 'react';
import { useSelector } from 'react-redux';
import { AppState } from 'store/reducers';
import { GlobalReducer } from 'types/reducer/globalTime';
import { addCustomTimeRange } from 'utils/customTimeRangeUtils';
function DatePickerV2({
onSetCustomDTPickerVisible,
setIsOpen,
onCustomDateHandler,
}: {
onSetCustomDTPickerVisible: (visible: boolean) => void;
setIsOpen: (isOpen: boolean) => void;
onCustomDateHandler: (
dateTimeRange: DateTimeRangeType,
lexicalContext?: LexicalContext,
) => void;
}): JSX.Element {
const { maxTime, minTime } = useSelector<AppState, GlobalReducer>(
(state) => state.globalTime,
);
const timeInputRef = useRef<HTMLInputElement>(null);
const { timezone } = useTimezone();
const [selectedDateTimeFor, setSelectedDateTimeFor] = useState<'to' | 'from'>(
'from',
);
const [selectedFromDateTime, setSelectedFromDateTime] = useState<Dayjs | null>(
dayjs(minTime / 1000_000).tz(timezone.value),
);
const [selectedToDateTime, setSelectedToDateTime] = useState<Dayjs | null>(
dayjs(maxTime / 1000_000).tz(timezone.value),
);
const handleNext = (): void => {
if (selectedDateTimeFor === 'to') {
onCustomDateHandler([selectedFromDateTime, selectedToDateTime]);
addCustomTimeRange([selectedFromDateTime, selectedToDateTime]);
setIsOpen(false);
onSetCustomDTPickerVisible(false);
setSelectedDateTimeFor('from');
} else {
setSelectedDateTimeFor('to');
}
};
const handleDateChange = (date: Date | undefined): void => {
if (!date) {
return;
}
if (selectedDateTimeFor === 'from') {
const prevFromDateTime = selectedFromDateTime;
const newDate = dayjs(date);
const updatedFromDateTime = prevFromDateTime
? prevFromDateTime
.year(newDate.year())
.month(newDate.month())
.date(newDate.date())
: dayjs(date).tz(timezone.value);
setSelectedFromDateTime(updatedFromDateTime);
} else {
// eslint-disable-next-line sonarjs/no-identical-functions
setSelectedToDateTime((prev) => {
const newDate = dayjs(date);
// Update only the date part, keeping time from existing state
return prev
? prev.year(newDate.year()).month(newDate.month()).date(newDate.date())
: dayjs(date).tz(timezone.value);
});
}
// focus the time input
timeInputRef?.current?.focus();
};
const handleTimeChange = (time: string): void => {
// time should have format HH:mm:ss
if (!/^\d{2}:\d{2}:\d{2}$/.test(time)) {
return;
}
if (selectedDateTimeFor === 'from') {
setSelectedFromDateTime((prev) => {
if (prev) {
return prev
.set('hour', parseInt(time.split(':')[0], 10))
.set('minute', parseInt(time.split(':')[1], 10))
.set('second', parseInt(time.split(':')[2], 10));
}
return prev;
});
}
if (selectedDateTimeFor === 'to') {
// eslint-disable-next-line sonarjs/no-identical-functions
setSelectedToDateTime((prev) => {
if (prev) {
return prev
.set('hour', parseInt(time.split(':')[0], 10))
.set('minute', parseInt(time.split(':')[1], 10))
.set('second', parseInt(time.split(':')[2], 10));
}
return prev;
});
}
};
const getDefaultMonth = (): Date => {
let defaultDate = null;
if (selectedDateTimeFor === 'from') {
defaultDate = selectedFromDateTime?.toDate();
} else if (selectedDateTimeFor === 'to') {
defaultDate = selectedToDateTime?.toDate();
}
return defaultDate ?? new Date();
};
const isValidRange = (): boolean => {
if (selectedDateTimeFor === 'to') {
return selectedToDateTime?.isAfter(selectedFromDateTime) ?? false;
}
return true;
};
const handleBack = (): void => {
setSelectedDateTimeFor('from');
};
const handleHideCustomDTPicker = (): void => {
onSetCustomDTPickerVisible(false);
};
const handleSelectDateTimeFor = (selectedDateTimeFor: 'to' | 'from'): void => {
setSelectedDateTimeFor(selectedDateTimeFor);
};
return (
<div className="date-picker-v2-container">
<div className="date-time-custom-options-container">
<div
className="back-btn"
onClick={handleHideCustomDTPicker}
role="button"
tabIndex={0}
onKeyDown={(e): void => {
if (e.key === 'Enter') {
handleHideCustomDTPicker();
}
}}
>
<CornerUpLeft size={16} />
<span>Back</span>
</div>
<div className="date-time-custom-options">
<div
role="button"
tabIndex={0}
onKeyDown={(e): void => {
if (e.key === 'Enter') {
handleSelectDateTimeFor('from');
}
}}
className={cx(
'date-time-custom-option-from',
selectedDateTimeFor === 'from' && 'active',
)}
onClick={(): void => {
handleSelectDateTimeFor('from');
}}
>
<div className="date-time-custom-option-from-title">FROM</div>
<div className="date-time-custom-option-from-value">
{selectedFromDateTime?.format('YYYY-MM-DD HH:mm:ss')}
</div>
</div>
<div
role="button"
tabIndex={0}
onKeyDown={(e): void => {
if (e.key === 'Enter') {
handleSelectDateTimeFor('to');
}
}}
className={cx(
'date-time-custom-option-to',
selectedDateTimeFor === 'to' && 'active',
)}
onClick={(): void => {
handleSelectDateTimeFor('to');
}}
>
<div className="date-time-custom-option-to-title">TO</div>
<div className="date-time-custom-option-to-value">
{selectedToDateTime?.format('YYYY-MM-DD HH:mm:ss')}
</div>
</div>
</div>
</div>
<div className="custom-date-time-picker-v2">
<Calendar
mode="single"
required
selected={
selectedDateTimeFor === 'from'
? selectedFromDateTime?.toDate()
: selectedToDateTime?.toDate()
}
key={selectedDateTimeFor + selectedDateTimeFor}
onSelect={handleDateChange}
defaultMonth={getDefaultMonth()}
disabled={(current): boolean => {
if (selectedDateTimeFor === 'to') {
// disable dates after today and before selectedFromDateTime
const currentDay = dayjs(current);
return currentDay.isAfter(dayjs()) || false;
}
if (selectedDateTimeFor === 'from') {
// disable dates after selectedToDateTime
return dayjs(current).isAfter(dayjs()) || false;
}
return false;
}}
className="rounded-md border"
navLayout="after"
/>
<div className="custom-time-selector">
<label className="text-xs font-normal block" htmlFor="time-picker">
Timestamp
</label>
<MoveRight size={16} />
<div className="time-input-container">
<Input
type="time"
ref={timeInputRef}
className="time-input"
value={
selectedDateTimeFor === 'from'
? selectedFromDateTime?.format('HH:mm:ss')
: selectedToDateTime?.format('HH:mm:ss')
}
onChange={(e): void => handleTimeChange(e.target.value)}
step="1"
/>
</div>
</div>
<div className="custom-date-time-picker-footer">
{selectedDateTimeFor === 'to' && (
<Button
className="periscope-btn secondary clear-btn"
type="default"
onClick={handleBack}
>
Back
</Button>
)}
<Tooltip
title={
!isValidRange() ? 'Invalid range: TO date should be after FROM date' : ''
}
overlayClassName="invalid-date-range-tooltip"
>
<Button
className="periscope-btn primary next-btn"
type="primary"
onClick={handleNext}
disabled={!isValidRange()}
>
{selectedDateTimeFor === 'from' ? 'Next' : 'Apply'}
</Button>
</Tooltip>
</div>
</div>
</div>
);
}
export default DatePickerV2;

View File

@@ -55,31 +55,37 @@ export const selectedColumns: BaseAutocompleteData[] = [
key: 'timestamp',
dataType: DataTypes.String,
type: 'tag',
isColumn: true,
},
{
key: 'serviceName',
dataType: DataTypes.String,
type: 'tag',
isColumn: true,
},
{
key: 'name',
dataType: DataTypes.String,
type: 'tag',
isColumn: true,
},
{
key: 'durationNano',
dataType: DataTypes.Float64,
type: 'tag',
isColumn: true,
},
{
key: 'httpMethod',
dataType: DataTypes.String,
type: 'tag',
isColumn: true,
},
{
key: 'responseStatusCode',
dataType: DataTypes.String,
type: 'tag',
isColumn: true,
},
];
@@ -102,7 +108,9 @@ export const getHostTracesQueryPayload = (
id: '------false',
dataType: DataTypes.EMPTY,
key: '',
isColumn: false,
type: '',
isJSON: false,
},
timeAggregation: 'rate',
spaceAggregation: 'sum',
@@ -146,6 +154,8 @@ export const getHostTracesQueryPayload = (
key: 'serviceName',
dataType: 'string',
type: 'tag',
isColumn: true,
isJSON: false,
id: 'serviceName--string--tag--true',
isIndexed: false,
},
@@ -153,6 +163,8 @@ export const getHostTracesQueryPayload = (
key: 'name',
dataType: 'string',
type: 'tag',
isColumn: true,
isJSON: false,
id: 'name--string--tag--true',
isIndexed: false,
},
@@ -160,6 +172,8 @@ export const getHostTracesQueryPayload = (
key: 'durationNano',
dataType: 'float64',
type: 'tag',
isColumn: true,
isJSON: false,
id: 'durationNano--float64--tag--true',
isIndexed: false,
},
@@ -167,6 +181,8 @@ export const getHostTracesQueryPayload = (
key: 'httpMethod',
dataType: 'string',
type: 'tag',
isColumn: true,
isJSON: false,
id: 'httpMethod--string--tag--true',
isIndexed: false,
},
@@ -174,6 +190,8 @@ export const getHostTracesQueryPayload = (
key: 'responseStatusCode',
dataType: 'string',
type: 'tag',
isColumn: true,
isJSON: false,
id: 'responseStatusCode--string--tag--true',
isIndexed: false,
},

View File

@@ -169,6 +169,7 @@
box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.1);
}
}
.ant-drawer-close {
padding: 0px;
}

View File

@@ -119,6 +119,8 @@ function HostMetricsDetails({
key: 'host.name',
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'host.name--string--resource--false',
},
op: '=',

View File

@@ -26,7 +26,9 @@ export const getHostLogsQueryPayload = (
id: '------false',
dataType: DataTypes.String,
key: '',
isColumn: false,
type: '',
isJSON: false,
},
timeAggregation: 'rate',
spaceAggregation: 'sum',

View File

@@ -1,50 +0,0 @@
import { Badge } from '@signozhq/badge';
type BadgeColor =
| 'vanilla'
| 'robin'
| 'forest'
| 'amber'
| 'sienna'
| 'cherry'
| 'sakura'
| 'aqua';
interface HttpStatusBadgeProps {
statusCode: string | number;
}
function getStatusCodeColor(statusCode: number): BadgeColor {
if (statusCode >= 200 && statusCode < 300) {
return 'forest'; // Success - green
}
if (statusCode >= 300 && statusCode < 400) {
return 'robin'; // Redirect - blue
}
if (statusCode >= 400 && statusCode < 500) {
return 'amber'; // Client error - amber
}
if (statusCode >= 500) {
return 'cherry'; // Server error - red
}
if (statusCode >= 100 && statusCode < 200) {
return 'vanilla'; // Informational - neutral
}
return 'robin'; // Default fallback
}
function HttpStatusBadge({
statusCode,
}: HttpStatusBadgeProps): JSX.Element | null {
const numericStatusCode = Number(statusCode);
if (!numericStatusCode || numericStatusCode <= 0) {
return null;
}
const color = getStatusCodeColor(numericStatusCode);
return <Badge color={color}>{statusCode}</Badge>;
}
export default HttpStatusBadge;

View File

@@ -17,7 +17,7 @@ function InputWithLabel({
closeIcon,
}: {
label: string;
initialValue?: string | number | null;
initialValue?: string | number;
placeholder: string;
type?: string;
onClose?: () => void;

View File

@@ -1,152 +0,0 @@
.kbar-command-palette__positioner {
position: fixed;
inset: 0;
display: flex;
align-items: flex-start;
justify-content: center;
padding: 1rem;
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(6px);
z-index: 50;
}
.kbar-command-palette__animator {
width: 100%;
max-width: 600px;
}
.kbar-command-palette__card {
background: var(--bg-ink-500);
color: var(--text-vanilla-100);
border-radius: 3px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);
overflow: hidden;
display: flex;
flex-direction: column;
}
.kbar-command-palette__search {
padding: 12px 16px;
font-size: 13px;
border: none;
border-bottom: 1px solid var(--border-ink-200);
color: var(--text-vanilla-100);
outline: none;
background-color: var(--bg-ink-500);
}
.kbar-command-palette__section {
padding: 8px 16px 4px;
font-size: 12px;
font-weight: 600;
color: var(--text-robin-500);
font-family: 'Inter', sans-serif;
text-transform: uppercase;
letter-spacing: 0.02em;
}
.kbar-command-palette__item {
display: flex;
align-items: center;
gap: 8px;
padding: 10px 16px;
font-size: 13px;
cursor: pointer;
transition: background 0.15s ease;
}
.kbar-command-palette__item:hover,
.kbar-command-palette__item--active {
background: var(--bg-ink-400);
}
.kbar-command-palette__icon {
flex-shrink: 0;
width: 18px;
height: 18px;
color: #444;
}
.kbar-command-palette__shortcut {
margin-left: auto;
display: flex;
gap: 4px;
}
.kbar-command-palette__key {
padding: 2px 6px;
font-size: 12px;
border-radius: 4px;
background: var(--bg-ink-300);
color: var(--text-vanilla-300);
text-transform: uppercase;
font-family: 'Space Mono', monospace;
}
.kbar-command-palette__results-container {
div {
&::-webkit-scrollbar {
width: 0.3rem;
height: 0.3rem;
}
&::-webkit-scrollbar-track {
background: transparent;
}
&::-webkit-scrollbar-thumb {
background: var(--bg-slate-300);
}
&::-webkit-scrollbar-thumb:hover {
background: var(--bg-slate-200);
}
}
}
.lightMode {
.kbar-command-palette__positioner {
background: rgba(0, 0, 0, 0.5);
}
.kbar-command-palette__card {
background: #fff;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.15);
}
.kbar-command-palette__search {
border-bottom: 1px solid #e5e5e5;
color: var(--text-ink-500);
background-color: var(--bg-vanilla-100);
}
.kbar-command-palette__item {
color: var(--text-ink-500);
}
.kbar-command-palette__item:hover,
.kbar-command-palette__item--active {
background: #f5f5f5;
}
.kbar-command-palette__icon {
color: #444;
}
.kbar-command-palette__key {
background: #eee;
color: #555;
}
.kbar-command-palette__results-container {
div {
&::-webkit-scrollbar-thumb {
background: var(--bg-vanilla-300);
}
&::-webkit-scrollbar-thumb:hover {
background: var(--bg-vanilla-300);
}
}
}
}

View File

@@ -1,69 +0,0 @@
import './KBarCommandPalette.scss';
import {
KBarAnimator,
KBarPortal,
KBarPositioner,
KBarResults,
KBarSearch,
useMatches,
} from 'kbar';
function Results(): JSX.Element {
const { results } = useMatches();
const renderResults = ({
item,
active,
}: {
item: any;
active: boolean;
}): JSX.Element =>
typeof item === 'string' ? (
<div className="kbar-command-palette__section">{item}</div>
) : (
<div
className={`kbar-command-palette__item ${
active ? 'kbar-command-palette__item--active' : ''
}`}
>
{item.icon}
<span>{item.name}</span>
{item.shortcut?.length ? (
<span className="kbar-command-palette__shortcut">
{item.shortcut.map((sc: string) => (
<kbd key={sc} className="kbar-command-palette__key">
{sc}
</kbd>
))}
</span>
) : null}
</div>
);
return (
<div className="kbar-command-palette__results-container">
<KBarResults items={results} onRender={renderResults} />
</div>
);
}
function KBarCommandPalette(): JSX.Element {
return (
<KBarPortal>
<KBarPositioner className="kbar-command-palette__positioner">
<KBarAnimator className="kbar-command-palette__animator">
<div className="kbar-command-palette__card">
<KBarSearch
className="kbar-command-palette__search"
placeholder="Search or type a command..."
/>
<Results />
</div>
</KBarAnimator>
</KBarPositioner>
</KBarPortal>
);
}
export default KBarCommandPalette;

View File

@@ -10,7 +10,11 @@ import { VIEWS } from './constants';
export type LogDetailProps = {
log: ILog | null;
selectedTab: VIEWS;
onGroupByAttribute?: (fieldKey: string, dataType?: DataTypes) => Promise<void>;
onGroupByAttribute?: (
fieldKey: string,
isJSON?: boolean,
dataType?: DataTypes,
) => Promise<void>;
isListViewPanel?: boolean;
listViewPanelSelectedFields?: IField[] | null;
} & Pick<AddToQueryHOCProps, 'onAddToQuery'> &

View File

@@ -23,7 +23,6 @@ import {
} from 'container/LogDetailedView/utils';
import useInitialQuery from 'container/LogsExplorerContext/useInitialQuery';
import { useOptionsMenu } from 'container/OptionsMenu';
import { useCopyLogLink } from 'hooks/logs/useCopyLogLink';
import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder';
import { useIsDarkMode } from 'hooks/useDarkMode';
import { useNotifications } from 'hooks/useNotifications';
@@ -40,7 +39,7 @@ import {
TextSelect,
X,
} from 'lucide-react';
import { useCallback, useMemo, useState } from 'react';
import { useMemo, useState } from 'react';
import { useSelector } from 'react-redux';
import { useCopyToClipboard, useLocation } from 'react-use';
import { AppState } from 'store/reducers';
@@ -95,8 +94,6 @@ function LogDetailInner({
const { notifications } = useNotifications();
const { onLogCopy } = useCopyLogLink(log?.id);
const LogJsonData = log ? aggregateAttributesResourcesToString(log) : '';
const handleModeChange = (e: RadioChangeEvent): void => {
@@ -149,34 +146,6 @@ function LogDetailInner({
safeNavigate(`${ROUTES.LOGS_EXPLORER}?${createQueryParams(queryParams)}`);
};
const handleQueryExpressionChange = useCallback(
(value: string, queryIndex: number) => {
// update the query at the given index
setContextQuery((prev) => {
if (!prev) return prev;
return {
...prev,
builder: {
...prev.builder,
queryData: prev.builder.queryData.map((query, idx) =>
idx === queryIndex
? {
...query,
filter: {
...query.filter,
expression: value,
},
}
: query,
),
},
};
});
},
[],
);
const handleRunQuery = (expression: string): void => {
let updatedContextQuery = cloneDeep(contextQuery);
@@ -336,19 +305,11 @@ function LogDetailInner({
onClick={handleFilterVisible}
/>
)}
<Tooltip title="Copy Log Link" placement="left" aria-label="Copy Log Link">
<Button
className="action-btn"
icon={<Copy size={16} />}
onClick={onLogCopy}
/>
</Tooltip>
</div>
{isFilterVisible && contextQuery?.builder.queryData[0] && (
<div className="log-detail-drawer-query-container">
<QuerySearch
onChange={(value): void => handleQueryExpressionChange(value, 0)}
onChange={(): void => {}}
dataSource={DataSource.LOGS}
queryData={contextQuery?.builder.queryData[0]}
onRun={handleRunQuery}

View File

@@ -17,7 +17,7 @@ function AddToQueryHOC({
}: AddToQueryHOCProps): JSX.Element {
const handleQueryAdd = (event: MouseEvent<HTMLDivElement>): void => {
event.stopPropagation();
onAddToQuery(fieldKey, fieldValue, OPERATORS['='], dataType);
onAddToQuery(fieldKey, fieldValue, OPERATORS['='], undefined, dataType);
};
const popOverContent = useMemo(() => <span>Add to query: {fieldKey}</span>, [
@@ -41,6 +41,7 @@ export interface AddToQueryHOCProps {
fieldKey: string,
fieldValue: string,
operator: string,
isJSON?: boolean,
dataType?: DataTypes,
) => void;
fontSize: FontSize;

View File

@@ -56,8 +56,6 @@ export const useTableView = (props: UseTableViewProps): UseTableViewResult => {
.map(({ name }) => ({
title: name,
dataIndex: name,
accessorKey: name,
id: name.toLowerCase().replace(/\./g, '_'),
key: name,
render: (field): ColumnTypeRender<Record<string, unknown>> => ({
props: {
@@ -85,10 +83,7 @@ export const useTableView = (props: UseTableViewProps): UseTableViewResult => {
// We do not need any title and data index for the log state indicator
title: '',
dataIndex: '',
// eslint-disable-next-line sonarjs/no-duplicate-string
key: 'state-indicator',
accessorKey: 'state-indicator',
id: 'state-indicator',
render: (_, item): ColumnTypeRender<Record<string, unknown>> => ({
children: (
<div className={cx('state-indicator', fontSize)}>
@@ -106,8 +101,6 @@ export const useTableView = (props: UseTableViewProps): UseTableViewResult => {
title: 'timestamp',
dataIndex: 'timestamp',
key: 'timestamp',
accessorKey: 'timestamp',
id: 'timestamp',
// https://github.com/ant-design/ant-design/discussions/36886
render: (
field: string | number,
@@ -142,8 +135,6 @@ export const useTableView = (props: UseTableViewProps): UseTableViewResult => {
title: 'body',
dataIndex: 'body',
key: 'body',
accessorKey: 'body',
id: 'body',
render: (
field: string | number,
): ColumnTypeRender<Record<string, unknown>> => ({

View File

@@ -160,7 +160,7 @@ const MetricsAggregateSection = memo(function MetricsAggregateSection({
label="Seconds"
placeholder="Auto"
labelAfter
initialValue={query?.stepInterval ?? null}
initialValue={query?.stepInterval ?? undefined}
/>
</div>
</div>
@@ -283,7 +283,7 @@ const MetricsAggregateSection = memo(function MetricsAggregateSection({
label="Seconds"
placeholder="Auto"
labelAfter
initialValue={query?.stepInterval ?? null}
initialValue={query?.stepInterval ?? undefined}
className="histogram-every-input"
/>
</div>

View File

@@ -81,7 +81,9 @@ function QueryAggregationOptions({
<div className="query-aggregation-interval-input-container">
<InputWithLabel
initialValue={queryData?.stepInterval ? queryData?.stepInterval : null}
initialValue={
queryData?.stepInterval ? queryData?.stepInterval : undefined
}
className="query-aggregation-interval-input"
label="Seconds"
placeholder="Auto"

View File

@@ -154,23 +154,15 @@ function QueryAggregationSelect({
const isDarkMode = useIsDarkMode();
const { setAggregationOptions } = useQueryBuilderV2Context();
const formatAggregations = useCallback(
(aggregations: any[] | undefined): string =>
aggregations
?.map(({ expression, alias }: any) =>
alias ? `${expression} as ${alias}` : expression,
)
.join(' ') || '',
[],
);
const [input, setInput] = useState(
formatAggregations(queryData?.aggregations),
queryData?.aggregations?.map((i: any) => i.expression).join(' ') || '',
);
useEffect(() => {
setInput(formatAggregations(queryData?.aggregations));
}, [queryData?.aggregations, formatAggregations]);
setInput(
queryData?.aggregations?.map((i: any) => i.expression).join(' ') || '',
);
}, [queryData?.aggregations]);
const [cursorPos, setCursorPos] = useState(0);
const [functionArgPairs, setFunctionArgPairs] = useState<

View File

@@ -1292,7 +1292,7 @@ function QuerySearch({
if (onRun && typeof onRun === 'function') {
onRun(query);
} else {
handleRunQuery();
handleRunQuery(true, true);
}
return true;
},

View File

@@ -1,5 +1,4 @@
/* eslint-disable sonarjs/no-duplicate-string */
/* eslint-disable import/no-unresolved */
import { negateOperator, OPERATORS } from 'constants/antlrQueryConstants';
import { TagFilter } from 'types/api/queryBuilder/queryBuilderData';
import { extractQueryPairs } from 'utils/queryContextUtils';
@@ -9,6 +8,15 @@ import {
convertFiltersToExpressionWithExistingQuery,
} from '../utils';
jest.mock('utils/queryContextUtils', () => ({
extractQueryPairs: jest.fn(),
}));
// Type the mocked functions
const mockExtractQueryPairs = extractQueryPairs as jest.MockedFunction<
typeof extractQueryPairs
>;
describe('convertFiltersToExpression', () => {
beforeEach(() => {
jest.clearAllMocks();
@@ -596,6 +604,25 @@ describe('convertFiltersToExpression', () => {
const existingQuery = "service.name = 'old-service'";
mockExtractQueryPairs.mockReturnValue([
{
key: 'service.name',
operator: OPERATORS['='],
value: "'old-service'",
hasNegation: false,
isMultiValue: false,
isComplete: true,
position: {
keyStart: 0,
keyEnd: 11,
operatorStart: 13,
operatorEnd: 13,
valueStart: 15,
valueEnd: 28,
},
},
]);
const result = convertFiltersToExpressionWithExistingQuery(
filters,
existingQuery,
@@ -604,15 +631,8 @@ describe('convertFiltersToExpression', () => {
expect(result.filters).toBeDefined();
expect(result.filter).toBeDefined();
expect(result.filter.expression).toBe("service.name = 'updated-service'");
// Ensure parser can parse the existing query
expect(extractQueryPairs(existingQuery)).toEqual(
expect.arrayContaining([
expect.objectContaining({
key: 'service.name',
operator: '=',
value: "'old-service'",
}),
]),
expect(mockExtractQueryPairs).toHaveBeenCalledWith(
"service.name = 'old-service'",
);
});
@@ -631,6 +651,34 @@ describe('convertFiltersToExpression', () => {
const existingQuery = "service.name IN ['old-service']";
mockExtractQueryPairs.mockReturnValue([
{
key: 'service.name',
operator: 'IN',
value: "['old-service']",
valueList: ["'old-service'"],
valuesPosition: [
{
start: 17,
end: 29,
},
],
hasNegation: false,
isMultiValue: true,
position: {
keyStart: 0,
keyEnd: 11,
operatorStart: 13,
operatorEnd: 14,
valueStart: 16,
valueEnd: 30,
negationStart: 0,
negationEnd: 0,
},
isComplete: true,
},
]);
const result = convertFiltersToExpressionWithExistingQuery(
filters,
existingQuery,
@@ -658,6 +706,25 @@ describe('convertFiltersToExpression', () => {
const existingQuery = "service.name = 'old-service'";
mockExtractQueryPairs.mockReturnValue([
{
key: 'service.name',
operator: OPERATORS['='],
value: "'old-service'",
hasNegation: false,
isMultiValue: false,
isComplete: true,
position: {
keyStart: 0,
keyEnd: 11,
operatorStart: 13,
operatorEnd: 13,
valueStart: 15,
valueEnd: 28,
},
},
]);
const result = convertFiltersToExpressionWithExistingQuery(
filters,
existingQuery,
@@ -684,6 +751,25 @@ describe('convertFiltersToExpression', () => {
const existingQuery = "service.name != 'old-service'";
mockExtractQueryPairs.mockReturnValue([
{
key: 'service.name',
operator: OPERATORS['!='],
value: "'old-service'",
hasNegation: false,
isMultiValue: false,
isComplete: true,
position: {
keyStart: 0,
keyEnd: 11,
operatorStart: 13,
operatorEnd: 14,
valueStart: 16,
valueEnd: 28,
},
},
]);
const result = convertFiltersToExpressionWithExistingQuery(
filters,
existingQuery,
@@ -710,6 +796,25 @@ describe('convertFiltersToExpression', () => {
const existingQuery = "service.name = 'old-service'";
mockExtractQueryPairs.mockReturnValue([
{
key: 'service.name',
operator: OPERATORS['='],
value: "'old-service'",
hasNegation: false,
isMultiValue: false,
isComplete: true,
position: {
keyStart: 0,
keyEnd: 11,
operatorStart: 13,
operatorEnd: 13,
valueStart: 15,
valueEnd: 28,
},
},
]);
const result = convertFiltersToExpressionWithExistingQuery(
filters,
existingQuery,
@@ -736,6 +841,25 @@ describe('convertFiltersToExpression', () => {
const existingQuery = "status = 'success'";
mockExtractQueryPairs.mockReturnValue([
{
key: 'status',
operator: OPERATORS['='],
value: "'success'",
hasNegation: false,
isMultiValue: false,
isComplete: true,
position: {
keyStart: 0,
keyEnd: 6,
operatorStart: 7,
operatorEnd: 7,
valueStart: 9,
valueEnd: 19,
},
},
]);
const result = convertFiltersToExpressionWithExistingQuery(
filters,
existingQuery,
@@ -760,6 +884,25 @@ describe('convertFiltersToExpression', () => {
const existingQuery = "service.name = 'old-service'";
mockExtractQueryPairs.mockReturnValue([
{
key: 'service.name',
operator: OPERATORS['='],
value: "'old-service'",
hasNegation: false,
isMultiValue: false,
isComplete: true,
position: {
keyStart: 0,
keyEnd: 11,
operatorStart: 13,
operatorEnd: 13,
valueStart: 15,
valueEnd: 28,
},
},
]);
const result = convertFiltersToExpressionWithExistingQuery(
filters,
existingQuery,

View File

@@ -133,6 +133,8 @@ function OtherFilters({
{
key: filter.key,
dataType: filter.dataType,
isColumn: filter.isColumn,
isJSON: filter.isJSON,
type: filter.type,
},
]);

View File

@@ -10,6 +10,8 @@ export const QuickFiltersConfig = [
key: 'deployment.environment',
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
},
defaultOpen: true,
},
@@ -20,6 +22,8 @@ export const QuickFiltersConfig = [
key: 'service.name',
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
},
defaultOpen: false,
},

View File

@@ -53,6 +53,8 @@ export const getFilterConfig = (
key: att.key,
dataType: att.dataType,
type: att.type,
isColumn: att.isColumn,
isJSON: att.isJSON,
},
defaultOpen: index < 2,
} as IQuickFiltersConfig),

View File

@@ -39,8 +39,6 @@ export const DATE_TIME_FORMATS = {
MONTH_DATETIME_SECONDS: 'MMM DD YYYY HH:mm:ss',
MONTH_DATETIME_FULL: 'MMMM DD, YYYY HH:mm',
MONTH_DATETIME_FULL_SECONDS: 'MMM DD, YYYY, HH:mm:ss',
DD_MMM_YYYY_HH_MM: 'DD MMM YYYY, HH:mm',
DD_MMM_YYYY_HH_MM_SS: 'DD MMM YYYY, HH:mm:ss',
// Ordinal formats (1st, 2nd, 3rd, etc)
ORDINAL_DATE: 'Do MMM YYYY',

View File

@@ -32,6 +32,4 @@ export enum LOCALSTORAGE {
BANNER_DISMISSED = 'BANNER_DISMISSED',
QUICK_FILTERS_SETTINGS_ANNOUNCEMENT = 'QUICK_FILTERS_SETTINGS_ANNOUNCEMENT',
FUNNEL_STEPS = 'FUNNEL_STEPS',
LAST_USED_CUSTOM_TIME_RANGES = 'LAST_USED_CUSTOM_TIME_RANGES',
SHOW_FREQUENCY_CHART = 'SHOW_FREQUENCY_CHART',
}

View File

@@ -46,6 +46,7 @@ export enum QueryParams {
msgSystem = 'msgSystem',
destination = 'destination',
kindString = 'kindString',
summaryFilters = 'summaryFilters',
tab = 'tab',
thresholds = 'thresholds',
selectedExplorerView = 'selectedExplorerView',

View File

@@ -55,8 +55,8 @@ export const selectValueDivider = '__';
export const baseAutoCompleteIdKeysOrder: (keyof Omit<
BaseAutocompleteData,
'id' | 'isIndexed'
>)[] = ['key', 'dataType', 'type'];
'id' | 'isJSON' | 'isIndexed'
>)[] = ['key', 'dataType', 'type', 'isColumn'];
export const autocompleteType: Record<AutocompleteType, AutocompleteType> = {
resource: 'resource',
@@ -150,12 +150,14 @@ export const initialHavingValues: HavingForm = {
export const initialAutocompleteData: BaseAutocompleteData = {
id: createIdFromObjectFields(
{ dataType: null, key: '', type: null },
{ dataType: null, key: '', isColumn: null, type: null },
baseAutoCompleteIdKeysOrder,
),
dataType: DataTypes.EMPTY,
key: '',
isColumn: false,
type: '',
isJSON: false,
};
export const initialFilters: TagFilter = {
@@ -187,7 +189,7 @@ export const initialQueryBuilderFormValues: IBuilderQuery = {
sourceNames: alphabet,
}),
disabled: false,
stepInterval: null,
stepInterval: undefined,
having: [],
limit: null,
orderBy: [],
@@ -235,7 +237,7 @@ export const initialQueryBuilderFormMeterValues: IBuilderQuery = {
sourceNames: alphabet,
}),
disabled: false,
stepInterval: null,
stepInterval: undefined,
having: [],
limit: null,
orderBy: [],

View File

@@ -7,7 +7,6 @@ export const GlobalShortcuts = {
NavigateToExceptions: 'e+shift',
NavigateToMessagingQueues: 'm+shift',
ToggleSidebar: 'b+shift',
NavigateToHome: 'h+shift',
};
export const GlobalShortcutsName = {
@@ -19,17 +18,15 @@ export const GlobalShortcutsName = {
NavigateToExceptions: 'shift+e',
NavigateToMessagingQueues: 'shift+m',
ToggleSidebar: 'shift+b',
NavigateToHome: 'shift+h',
};
export const GlobalShortcutsDescription = {
NavigateToHome: 'Navigate to Home',
NavigateToServices: 'Navigate to Services page',
NavigateToTraces: 'Navigate to Traces Explorer',
NavigateToLogs: 'Navigate to Logs Explorer',
NavigateToDashboards: 'Navigate to Dashboards List',
NavigateToAlerts: 'Navigate to Alerts List',
NavigateToExceptions: 'Navigate to Exceptions List',
NavigateToMessagingQueues: 'Navigate to Messaging Queues',
NavigateToTraces: 'Navigate to Traces page',
NavigateToLogs: 'Navigate to logs page',
NavigateToDashboards: 'Navigate to dashboards page',
NavigateToAlerts: 'Navigate to alerts page',
NavigateToExceptions: 'Navigate to Exceptions page',
NavigateToMessagingQueues: 'Navigate to Messaging Queues page',
ToggleSidebar: 'Toggle sidebar visibility',
};

View File

@@ -10,9 +10,9 @@ export const LogsExplorerShortcuts = {
export const LogsExplorerShortcutsName = {
StageAndRunQuery: `${
userOS === UserOperatingSystem.MACOS ? 'cmd' : 'ctrl'
} + enter`,
}+enter`,
FocusTheSearchBar: 's',
ShowAllFilters: `${userOS === UserOperatingSystem.MACOS ? 'cmd' : 'ctrl'} + /`,
ShowAllFilters: `${userOS === UserOperatingSystem.MACOS ? 'cmd' : 'ctrl'}+/`,
};
export const LogsExplorerShortcutsDescription = {

View File

@@ -56,6 +56,8 @@ describe('API Monitoring Utils', () => {
const groupBy = [
{
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
// eslint-disable-next-line sonarjs/no-duplicate-string
key: 'http.method',
type: '',
@@ -70,6 +72,8 @@ describe('API Monitoring Utils', () => {
id: 'test-filter',
key: {
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'test-key',
type: '',
},
@@ -140,6 +144,8 @@ describe('API Monitoring Utils', () => {
[
{
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'custom.field',
type: '',
},
@@ -174,18 +180,24 @@ describe('API Monitoring Utils', () => {
id: 'group-by-1',
key: 'http.method',
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
type: '',
},
{
id: 'group-by-2',
key: 'http.status_code',
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
type: '',
},
{
id: 'group-by-3',
key: 'service.name',
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
type: 'tag',
},
];
@@ -246,6 +258,8 @@ describe('API Monitoring Utils', () => {
id: 'group-by-1',
key: 'http.method',
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
type: '',
},
];
@@ -267,6 +281,7 @@ describe('API Monitoring Utils', () => {
expect(knownField).toBeDefined();
if (knownField && knownField.key) {
expect(knownField.key.dataType).toBe(DataTypes.String);
expect(knownField.key.isColumn).toBe(true);
}
// Should include the unknown field
@@ -415,6 +430,8 @@ describe('API Monitoring Utils', () => {
id: 'test-filter',
key: {
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'test-key',
type: '',
},
@@ -526,6 +543,8 @@ describe('API Monitoring Utils', () => {
id: 'test-filter',
key: {
dataType: 'string',
isColumn: true,
isJSON: false,
key: 'test.key',
type: '',
},
@@ -1382,6 +1401,8 @@ describe('API Monitoring Utils', () => {
id: 'custom-filter',
key: {
dataType: 'string',
isColumn: true,
isJSON: false,
key: 'custom.key',
type: '',
},

View File

@@ -32,6 +32,8 @@ import { SPAN_ATTRIBUTES } from './constants';
const httpUrlKey = {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.URL_PATH,
type: 'tag',
};

View File

@@ -58,6 +58,8 @@ function TopErrors({
id: '92b8a1c1',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.URL_PATH,
type: 'tag',
},

View File

@@ -99,6 +99,8 @@ function DomainList(): JSX.Element {
key: 'kind_string',
dataType: 'string',
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',

View File

@@ -123,6 +123,8 @@ describe('AllEndPoints', () => {
{
key: 'http.status_code',
dataType: 'string',
isColumn: true,
isJSON: false,
type: '',
},
],

View File

@@ -76,6 +76,8 @@ jest.mock(
key: 'test.key',
dataType: DataTypes.String,
type: 'tag',
isColumn: false,
isJSON: false,
},
op: '=',
value: 'test-value',
@@ -333,6 +335,8 @@ describe('EndPointDetails Component', () => {
key: 'service.name',
dataType: DataTypes.String,
type: 'tag',
isColumn: false,
isJSON: false,
},
op: '=',
value: 'test-service',

View File

@@ -172,6 +172,8 @@ describe('StatusCodeBarCharts', () => {
key: {
dataType: 'string',
id: 'response_status_code--string--tag--false',
isColumn: false,
isJSON: false,
key: 'response_status_code',
type: 'tag',
},
@@ -183,6 +185,8 @@ describe('StatusCodeBarCharts', () => {
key: {
dataType: 'string',
id: 'response_status_code--string--tag--false',
isColumn: false,
isJSON: false,
key: 'response_status_code',
type: 'tag',
},

View File

@@ -43,6 +43,8 @@ export const ApiMonitoringQuickFiltersConfig: IQuickFiltersConfig[] = [
key: 'deployment.environment',
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
},
dataSource: DataSource.TRACES,
defaultOpen: true,
@@ -54,6 +56,8 @@ export const ApiMonitoringQuickFiltersConfig: IQuickFiltersConfig[] = [
key: 'service.name',
dataType: DataTypes.String,
type: 'resource',
isColumn: true,
isJSON: false,
},
dataSource: DataSource.TRACES,
defaultOpen: true,
@@ -65,6 +69,8 @@ export const ApiMonitoringQuickFiltersConfig: IQuickFiltersConfig[] = [
key: 'rpc.method',
dataType: DataTypes.String,
type: 'tag',
isColumn: true,
isJSON: false,
},
dataSource: DataSource.TRACES,
defaultOpen: true,
@@ -249,16 +255,22 @@ export const hardcodedAttributeKeys: BaseAutocompleteData[] = [
key: 'deployment.environment',
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
},
{
key: 'service.name',
dataType: DataTypes.String,
type: 'resource',
isColumn: true,
isJSON: false,
},
{
key: 'rpc.method',
dataType: DataTypes.String,
type: 'tag',
isColumn: true,
isJSON: false,
},
];
@@ -340,6 +352,8 @@ export const getDomainMetricsQueryPayload = (
aggregateOperator: 'count',
aggregateAttribute: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.URL_PATH,
type: 'tag',
},
@@ -352,6 +366,8 @@ export const getDomainMetricsQueryPayload = (
id: '4c57937c',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -378,6 +394,8 @@ export const getDomainMetricsQueryPayload = (
aggregateOperator: 'p99',
aggregateAttribute: {
dataType: DataTypes.Float64,
isColumn: true,
isJSON: false,
key: 'duration_nano',
type: '',
},
@@ -390,6 +408,8 @@ export const getDomainMetricsQueryPayload = (
id: '2cf675cd',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -417,6 +437,7 @@ export const getDomainMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.String,
id: '------false',
isColumn: false,
key: '',
type: '',
},
@@ -429,6 +450,8 @@ export const getDomainMetricsQueryPayload = (
id: '3db0f605',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -439,6 +462,8 @@ export const getDomainMetricsQueryPayload = (
id: '6096f745',
key: {
dataType: DataTypes.bool,
isColumn: true,
isJSON: false,
key: 'has_error',
type: '',
},
@@ -466,6 +491,7 @@ export const getDomainMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.String,
id: 'timestamp------false',
isColumn: false,
key: 'timestamp',
type: '',
},
@@ -478,6 +504,8 @@ export const getDomainMetricsQueryPayload = (
id: '8ff8dea1',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -611,6 +639,8 @@ export const getEndPointsQueryPayload = (
{
aggregateAttribute: {
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'span_id',
type: '',
},
@@ -624,6 +654,8 @@ export const getEndPointsQueryPayload = (
id: 'ec316e57',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -636,6 +668,8 @@ export const getEndPointsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -658,6 +692,8 @@ export const getEndPointsQueryPayload = (
{
aggregateAttribute: {
dataType: DataTypes.Float64,
isColumn: true,
isJSON: false,
key: 'duration_nano',
type: '',
},
@@ -671,6 +707,8 @@ export const getEndPointsQueryPayload = (
id: '46d57857',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -683,6 +721,8 @@ export const getEndPointsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -706,6 +746,7 @@ export const getEndPointsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.String,
id: 'timestamp------false',
isColumn: false,
key: 'timestamp',
type: '',
},
@@ -719,6 +760,8 @@ export const getEndPointsQueryPayload = (
id: '4a237616',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -731,6 +774,8 @@ export const getEndPointsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -753,6 +798,8 @@ export const getEndPointsQueryPayload = (
{
aggregateAttribute: {
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'span_id',
type: '',
},
@@ -766,6 +813,8 @@ export const getEndPointsQueryPayload = (
id: 'f162de1e',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -776,6 +825,8 @@ export const getEndPointsQueryPayload = (
id: '3df0ac1d',
key: {
dataType: DataTypes.bool,
isColumn: true,
isJSON: false,
key: 'has_error',
type: '',
},
@@ -788,6 +839,8 @@ export const getEndPointsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -866,7 +919,9 @@ export const getTopErrorsQueryPayload = (
id: '------false',
dataType: DataTypes.String,
key: '',
isColumn: false,
type: '',
isJSON: false,
},
timeAggregation: 'rate',
spaceAggregation: 'sum',
@@ -880,6 +935,8 @@ export const getTopErrorsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -890,6 +947,8 @@ export const getTopErrorsQueryPayload = (
key: SPAN_ATTRIBUTES.URL_PATH,
dataType: DataTypes.String,
type: 'tag',
isColumn: false,
isJSON: false,
},
op: 'exists',
value: '',
@@ -902,6 +961,8 @@ export const getTopErrorsQueryPayload = (
key: 'status_message',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: 'exists',
value: '',
@@ -914,6 +975,8 @@ export const getTopErrorsQueryPayload = (
key: SPAN_ATTRIBUTES.SERVER_NAME,
dataType: DataTypes.String,
type: 'tag',
isColumn: false,
isJSON: false,
},
op: '=',
value: domainName,
@@ -924,6 +987,8 @@ export const getTopErrorsQueryPayload = (
key: 'has_error',
dataType: DataTypes.bool,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: true,
@@ -947,9 +1012,13 @@ export const getTopErrorsQueryPayload = (
key: SPAN_ATTRIBUTES.URL_PATH,
dataType: DataTypes.String,
type: 'tag',
isColumn: false,
isJSON: false,
},
{
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'response_status_code',
type: '',
id: 'response_status_code--string----true',
@@ -958,6 +1027,8 @@ export const getTopErrorsQueryPayload = (
key: 'status_message',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
],
legend: '',
@@ -1333,6 +1404,8 @@ export const getTopErrorsCoRelationQueryFilters = (
key: 'http.url',
dataType: DataTypes.String,
type: 'tag',
isColumn: false,
isJSON: false,
id: 'http.url--string--tag--false',
},
op: '=',
@@ -1344,6 +1417,8 @@ export const getTopErrorsCoRelationQueryFilters = (
key: 'has_error',
dataType: DataTypes.bool,
type: '',
isColumn: false,
isJSON: false,
},
op: '=',
value: 'true',
@@ -1354,6 +1429,8 @@ export const getTopErrorsCoRelationQueryFilters = (
key: 'net.peer.name',
dataType: DataTypes.String,
type: '',
isColumn: false,
isJSON: false,
},
op: '=',
value: domainName,
@@ -1364,6 +1441,8 @@ export const getTopErrorsCoRelationQueryFilters = (
key: 'response_status_code',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
id: 'response_status_code--string----true',
},
op: '=',
@@ -1472,6 +1551,8 @@ export const getEndPointDetailsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.String,
id: '------false',
isColumn: false,
isJSON: false,
key: '',
type: '',
},
@@ -1485,6 +1566,8 @@ export const getEndPointDetailsQueryPayload = (
id: '874562e1',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -1497,6 +1580,8 @@ export const getEndPointDetailsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -1520,6 +1605,8 @@ export const getEndPointDetailsQueryPayload = (
{
aggregateAttribute: {
dataType: DataTypes.Float64,
isColumn: true,
isJSON: false,
key: 'duration_nano',
type: '',
},
@@ -1533,6 +1620,8 @@ export const getEndPointDetailsQueryPayload = (
id: '0c5564e0',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -1545,6 +1634,8 @@ export const getEndPointDetailsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -1568,6 +1659,8 @@ export const getEndPointDetailsQueryPayload = (
{
aggregateAttribute: {
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'span_id',
type: '',
},
@@ -1581,6 +1674,8 @@ export const getEndPointDetailsQueryPayload = (
id: '0d656701',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -1591,6 +1686,8 @@ export const getEndPointDetailsQueryPayload = (
id: '83ef9a1b',
key: {
dataType: DataTypes.bool,
isColumn: true,
isJSON: false,
key: 'has_error',
type: '',
},
@@ -1603,6 +1700,8 @@ export const getEndPointDetailsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -1627,6 +1726,7 @@ export const getEndPointDetailsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.String,
id: 'timestamp------false',
isColumn: false,
key: 'timestamp',
type: '',
},
@@ -1640,6 +1740,8 @@ export const getEndPointDetailsQueryPayload = (
id: '918f5b99',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -1652,6 +1754,8 @@ export const getEndPointDetailsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -1675,6 +1779,8 @@ export const getEndPointDetailsQueryPayload = (
{
aggregateAttribute: {
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'span_id',
type: '',
},
@@ -1688,6 +1794,8 @@ export const getEndPointDetailsQueryPayload = (
id: 'b355d1aa',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -1700,6 +1808,8 @@ export const getEndPointDetailsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -1764,6 +1874,8 @@ export const getEndPointDetailsQueryPayload = (
{
aggregateAttribute: {
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'span_id',
type: '',
},
@@ -1777,6 +1889,8 @@ export const getEndPointDetailsQueryPayload = (
id: '23450eb8',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -1789,6 +1903,8 @@ export const getEndPointDetailsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -1801,6 +1917,8 @@ export const getEndPointDetailsQueryPayload = (
groupBy: [
{
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'response_status_code',
type: '',
},
@@ -1818,6 +1936,8 @@ export const getEndPointDetailsQueryPayload = (
{
aggregateAttribute: {
dataType: DataTypes.Float64,
isColumn: true,
isJSON: false,
key: 'duration_nano',
type: '',
},
@@ -1831,6 +1951,8 @@ export const getEndPointDetailsQueryPayload = (
id: '2687dc18',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -1843,6 +1965,8 @@ export const getEndPointDetailsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -1855,6 +1979,8 @@ export const getEndPointDetailsQueryPayload = (
groupBy: [
{
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'response_status_code',
type: '',
},
@@ -1876,6 +2002,7 @@ export const getEndPointDetailsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.String,
id: '------false',
isColumn: false,
key: '',
type: '',
},
@@ -1889,6 +2016,8 @@ export const getEndPointDetailsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'net.peer.name--string--tag--false',
isColumn: false,
isJSON: false,
key: 'net.peer.name',
type: 'tag',
},
@@ -1901,6 +2030,8 @@ export const getEndPointDetailsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -1918,6 +2049,8 @@ export const getEndPointDetailsQueryPayload = (
groupBy: [
{
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'response_status_code',
type: '',
id: 'response_status_code--string----true',
@@ -1967,6 +2100,7 @@ export const getEndPointDetailsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.String,
key: '',
isColumn: false,
type: '',
},
timeAggregation: 'count',
@@ -1980,6 +2114,8 @@ export const getEndPointDetailsQueryPayload = (
key: SPAN_ATTRIBUTES.SERVER_NAME,
dataType: DataTypes.String,
type: 'tag',
isColumn: false,
isJSON: false,
},
op: '=',
value: domainName,
@@ -1990,6 +2126,8 @@ export const getEndPointDetailsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -2010,6 +2148,8 @@ export const getEndPointDetailsQueryPayload = (
key: SPAN_ATTRIBUTES.URL_PATH,
dataType: DataTypes.String,
type: 'tag',
isColumn: false,
isJSON: false,
},
],
reduceTo: 'avg',
@@ -2051,6 +2191,8 @@ export const getEndPointDetailsQueryPayload = (
{
aggregateAttribute: {
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'span_id',
type: '',
},
@@ -2064,6 +2206,8 @@ export const getEndPointDetailsQueryPayload = (
id: 'b78ff216',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -2076,6 +2220,8 @@ export const getEndPointDetailsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -2089,6 +2235,8 @@ export const getEndPointDetailsQueryPayload = (
{
dataType: DataTypes.String,
id: 'service.name--string--resource--true',
isColumn: true,
isJSON: false,
key: 'service.name',
type: 'resource',
},
@@ -2106,6 +2254,8 @@ export const getEndPointDetailsQueryPayload = (
{
aggregateAttribute: {
dataType: DataTypes.Float64,
isColumn: true,
isJSON: false,
key: 'duration_nano',
type: '',
},
@@ -2119,6 +2269,8 @@ export const getEndPointDetailsQueryPayload = (
id: 'a9024472',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -2131,6 +2283,8 @@ export const getEndPointDetailsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -2144,6 +2298,8 @@ export const getEndPointDetailsQueryPayload = (
{
dataType: DataTypes.String,
id: 'service.name--string--resource--true',
isColumn: true,
isJSON: false,
key: 'service.name',
type: 'resource',
},
@@ -2162,6 +2318,7 @@ export const getEndPointDetailsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.String,
id: '------false',
isColumn: false,
key: '',
type: '',
},
@@ -2175,6 +2332,8 @@ export const getEndPointDetailsQueryPayload = (
id: '1b6c062d',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -2187,6 +2346,8 @@ export const getEndPointDetailsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -2200,6 +2361,8 @@ export const getEndPointDetailsQueryPayload = (
{
dataType: DataTypes.String,
id: 'service.name--string--resource--true',
isColumn: true,
isJSON: false,
key: 'service.name',
type: 'resource',
},
@@ -2217,6 +2380,8 @@ export const getEndPointDetailsQueryPayload = (
{
aggregateAttribute: {
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'span_id',
type: '',
},
@@ -2230,6 +2395,8 @@ export const getEndPointDetailsQueryPayload = (
id: 'd14792a8',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -2239,6 +2406,9 @@ export const getEndPointDetailsQueryPayload = (
{
id: '3212bf1a',
key: {
dataType: DataTypes.bool,
isColumn: true,
isJSON: false,
key: 'has_error',
type: '',
},
@@ -2251,6 +2421,8 @@ export const getEndPointDetailsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -2264,6 +2436,8 @@ export const getEndPointDetailsQueryPayload = (
{
dataType: DataTypes.String,
id: 'service.name--string--resource--true',
isColumn: true,
isJSON: false,
key: 'service.name',
type: 'resource',
},
@@ -2323,6 +2497,7 @@ export const getEndPointDetailsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.String,
id: '------false',
isColumn: false,
key: '',
type: '',
},
@@ -2336,6 +2511,8 @@ export const getEndPointDetailsQueryPayload = (
id: 'c6724407',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -2348,6 +2525,8 @@ export const getEndPointDetailsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -2360,6 +2539,8 @@ export const getEndPointDetailsQueryPayload = (
groupBy: [
{
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'response_status_code',
type: '',
},
@@ -2411,6 +2592,8 @@ export const getEndPointDetailsQueryPayload = (
{
aggregateAttribute: {
dataType: DataTypes.Float64,
isColumn: true,
isJSON: false,
key: 'duration_nano',
type: '',
},
@@ -2424,6 +2607,8 @@ export const getEndPointDetailsQueryPayload = (
id: 'aae93366',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -2436,6 +2621,8 @@ export const getEndPointDetailsQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -2448,6 +2635,8 @@ export const getEndPointDetailsQueryPayload = (
groupBy: [
{
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'response_status_code',
type: '',
},
@@ -2510,6 +2699,7 @@ export const getEndPointZeroStateQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.String,
key: '',
isColumn: false,
type: '',
},
timeAggregation: 'count',
@@ -2523,6 +2713,8 @@ export const getEndPointZeroStateQueryPayload = (
key: SPAN_ATTRIBUTES.SERVER_NAME,
dataType: DataTypes.String,
type: 'tag',
isColumn: false,
isJSON: false,
},
op: '=',
value: domainName,
@@ -2533,6 +2725,8 @@ export const getEndPointZeroStateQueryPayload = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -2552,6 +2746,8 @@ export const getEndPointZeroStateQueryPayload = (
key: SPAN_ATTRIBUTES.URL_PATH,
dataType: DataTypes.String,
type: 'tag',
isColumn: false,
isJSON: false,
},
],
reduceTo: 'avg',
@@ -3084,6 +3280,7 @@ export const getStatusCodeBarChartWidgetData = (
aggregateAttribute: {
dataType: DataTypes.String,
id: '------false',
isColumn: false,
key: '',
type: '',
},
@@ -3097,6 +3294,8 @@ export const getStatusCodeBarChartWidgetData = (
id: 'c6724407',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -3109,6 +3308,8 @@ export const getStatusCodeBarChartWidgetData = (
id: '8b1be6f0',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.URL_PATH,
type: 'tag',
},
@@ -3226,6 +3427,8 @@ export const getAllEndpointsWidgetData = (
{
aggregateAttribute: {
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'span_id',
type: '',
},
@@ -3239,6 +3442,8 @@ export const getAllEndpointsWidgetData = (
id: 'ec316e57',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -3251,6 +3456,8 @@ export const getAllEndpointsWidgetData = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -3276,6 +3483,8 @@ export const getAllEndpointsWidgetData = (
{
aggregateAttribute: {
dataType: DataTypes.Float64,
isColumn: true,
isJSON: false,
key: 'duration_nano',
type: '',
},
@@ -3289,6 +3498,8 @@ export const getAllEndpointsWidgetData = (
id: '46d57857',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -3301,6 +3512,8 @@ export const getAllEndpointsWidgetData = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -3327,6 +3540,7 @@ export const getAllEndpointsWidgetData = (
aggregateAttribute: {
dataType: DataTypes.String,
id: 'timestamp------false',
isColumn: false,
key: 'timestamp',
type: '',
},
@@ -3340,6 +3554,8 @@ export const getAllEndpointsWidgetData = (
id: '4a237616',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -3352,6 +3568,8 @@ export const getAllEndpointsWidgetData = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -3377,6 +3595,8 @@ export const getAllEndpointsWidgetData = (
{
aggregateAttribute: {
dataType: DataTypes.String,
isColumn: true,
isJSON: false,
key: 'span_id',
type: '',
},
@@ -3390,6 +3610,8 @@ export const getAllEndpointsWidgetData = (
id: 'f162de1e',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -3400,11 +3622,13 @@ export const getAllEndpointsWidgetData = (
id: '3df0ac1d',
key: {
dataType: DataTypes.bool,
isColumn: true,
isJSON: false,
key: 'has_error',
type: '',
},
op: '=',
value: true,
value: 'true',
},
{
id: '212678b9',
@@ -3412,6 +3636,8 @@ export const getAllEndpointsWidgetData = (
key: 'kind_string',
dataType: DataTypes.String,
type: '',
isColumn: true,
isJSON: false,
},
op: '=',
value: 'Client',
@@ -3547,6 +3773,8 @@ export const getGroupByFiltersFromGroupByValues = (
id: groupByAttribute?.id || v4(),
key: {
dataType: groupByAttribute?.dataType || DataTypes.String,
isColumn: groupByAttribute?.isColumn || true,
isJSON: groupByAttribute?.isJSON || false,
key: groupByAttribute?.key || key,
type: groupByAttribute?.type || '',
},
@@ -3582,6 +3810,7 @@ export const getRateOverTimeWidgetData = (
aggregateAttribute: {
dataType: DataTypes.String,
id: '------false',
isColumn: false,
key: '',
type: '',
},
@@ -3595,6 +3824,8 @@ export const getRateOverTimeWidgetData = (
id: '3c76fe0b',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -3643,6 +3874,8 @@ export const getLatencyOverTimeWidgetData = (
{
aggregateAttribute: {
dataType: DataTypes.Float64,
isColumn: true,
isJSON: false,
key: 'duration_nano',
type: '',
},
@@ -3656,6 +3889,8 @@ export const getLatencyOverTimeWidgetData = (
id: '63adb3ff',
key: {
dataType: DataTypes.String,
isColumn: false,
isJSON: false,
key: SPAN_ATTRIBUTES.SERVER_NAME,
type: 'tag',
},
@@ -3765,6 +4000,8 @@ export const getCustomFiltersForBarChart = (
key: {
dataType: DataTypes.String,
id: 'response_status_code--string--tag--false',
isColumn: false,
isJSON: false,
key: 'response_status_code',
type: 'tag',
},
@@ -3776,6 +4013,8 @@ export const getCustomFiltersForBarChart = (
key: {
dataType: DataTypes.String,
id: 'response_status_code--string--tag--false',
isColumn: false,
isJSON: false,
key: 'response_status_code',
type: 'tag',
},

View File

@@ -4,7 +4,6 @@
import './AppLayout.styles.scss';
import * as Sentry from '@sentry/react';
import { Toaster } from '@signozhq/sonner';
import { Flex } from 'antd';
import getLocalStorageApi from 'api/browser/localstorage/get';
import setLocalStorageApi from 'api/browser/localstorage/set';
@@ -669,18 +668,6 @@ function AppLayout(props: AppLayoutProps): JSX.Element {
</div>
);
const { registerShortcut, deregisterShortcut } = useKeyboardHotkeys();
const { updateUserPreferenceInContext } = useAppContext();
const { mutate: updateUserPreferenceMutation } = useMutation(
updateUserPreference,
{
onError: (error) => {
showErrorNotification(notifications, error as AxiosError);
},
},
);
const sideNavPinnedPreference = userPreferences?.find(
(preference) => preference.name === USER_PREFERENCES.SIDENAV_PINNED,
)?.value as boolean;
@@ -710,6 +697,18 @@ function AppLayout(props: AppLayoutProps): JSX.Element {
? sideNavPinnedPreference
: getSidebarStateFromLocalStorage();
const { registerShortcut, deregisterShortcut } = useKeyboardHotkeys();
const { updateUserPreferenceInContext } = useAppContext();
const { mutate: updateUserPreferenceMutation } = useMutation(
updateUserPreference,
{
onError: (error) => {
showErrorNotification(notifications, error as AxiosError);
},
},
);
const handleToggleSidebar = useCallback((): void => {
const newState = !isSideNavPinned;
@@ -853,8 +852,6 @@ function AppLayout(props: AppLayoutProps): JSX.Element {
{showChangelogModal && changelog && (
<ChangelogModal changelog={changelog} onClose={toggleChangelogModal} />
)}
<Toaster />
</Layout>
);
}

View File

@@ -1,6 +1,6 @@
.explorer-options-container {
position: fixed;
bottom: 0px;
bottom: 8px;
left: calc(50% + 240px);
transform: translate(calc(-50% - 120px), 0);
transition: left 0.2s linear;
@@ -74,7 +74,6 @@
display: flex;
gap: 16px;
z-index: 1;
.ant-select-selector {
padding: 0 !important;
}

View File

@@ -27,7 +27,7 @@
}
.explorer-show-btn {
border-radius: 6px 6px 0px 0px;
border-radius: 10px 10px 0px 0px;
border: 1px solid var(--bg-slate-400);
background: rgba(22, 24, 29, 0.4);
box-shadow: 0px 4px 16px 0px rgba(0, 0, 0, 0.25);

View File

@@ -34,7 +34,7 @@ function ExplorerOrderBy({ query, onChange }: OrderByFilterProps): JSX.Element {
const keysOptions = createOptions(data?.payload?.attributeKeys || []);
const customOptions = createOptions([
{ key: 'timestamp', type: '', dataType: DataTypes.EMPTY },
{ key: 'timestamp', isColumn: true, type: '', dataType: DataTypes.EMPTY },
]);
const baseOptions = [

View File

@@ -142,6 +142,7 @@ function ChartPreview({
return false;
}
}, [query]);
const queryResponse = useGetQueryRange(
{
query: query || initialQueriesMap.metrics,

View File

@@ -864,7 +864,7 @@ function FormAlertRules({
queryCategory={currentQuery.queryType}
setQueryCategory={onQueryCategoryChange}
alertType={alertType || AlertTypes.METRICS_BASED_ALERT}
runQuery={(): void => handleRunQuery()}
runQuery={(): void => handleRunQuery(true, true)}
alertDef={alertDef}
panelType={panelType || PANEL_TYPES.TIME_SERIES}
key={currentQuery.queryType}

View File

@@ -4,7 +4,9 @@
overflow-y: hidden;
.full-view-header-container {
height: 40px;
display: flex;
flex-direction: column;
gap: 16px;
}
.graph-container {

View File

@@ -1,3 +1,4 @@
/* eslint-disable sonarjs/cognitive-complexity */
import './WidgetFullView.styles.scss';
import {
@@ -8,24 +9,31 @@ import {
import { Button, Input, Spin } from 'antd';
import cx from 'classnames';
import { ToggleGraphProps } from 'components/Graph/types';
import OverlayScrollbar from 'components/OverlayScrollbar/OverlayScrollbar';
import { QueryBuilderV2 } from 'components/QueryBuilderV2/QueryBuilderV2';
import Spinner from 'components/Spinner';
import TimePreference from 'components/TimePreferenceDropDown';
import { ENTITY_VERSION_V5 } from 'constants/app';
import { QueryParams } from 'constants/query';
import { PANEL_TYPES } from 'constants/queryBuilder';
import useDrilldown from 'container/GridCardLayout/GridCard/FullView/useDrilldown';
import { populateMultipleResults } from 'container/NewWidget/LeftContainer/WidgetGraph/util';
import {
timeItems,
timePreferance,
} from 'container/NewWidget/RightContainer/timeItems';
import PanelWrapper from 'container/PanelWrapper/PanelWrapper';
import RightToolbarActions from 'container/QueryBuilder/components/ToolbarActions/RightToolbarActions';
import { useGetQueryRange } from 'hooks/queryBuilder/useGetQueryRange';
import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder';
import { useChartMutable } from 'hooks/useChartMutable';
import useComponentPermission from 'hooks/useComponentPermission';
import { useSafeNavigate } from 'hooks/useSafeNavigate';
import useUrlQuery from 'hooks/useUrlQuery';
import { getDashboardVariables } from 'lib/dashbaordVariables/getDashboardVariables';
import { GetQueryResultsProps } from 'lib/dashboard/getQueryResults';
import GetMinMax from 'lib/getMinMax';
import { useAppContext } from 'providers/App/App';
import { useDashboard } from 'providers/Dashboard/Dashboard';
import { useCallback, useEffect, useRef, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux';
@@ -52,6 +60,7 @@ function FullView({
onClickHandler,
customOnDragSelect,
setCurrentGraphRef,
enableDrillDown = false,
}: FullViewProps): JSX.Element {
const { safeNavigate } = useSafeNavigate();
const { selectedTime: globalSelectedTime } = useSelector<
@@ -63,12 +72,16 @@ function FullView({
const location = useLocation();
const fullViewRef = useRef<HTMLDivElement>(null);
const { handleRunQuery } = useQueryBuilder();
useEffect(() => {
setCurrentGraphRef(fullViewRef);
}, [setCurrentGraphRef]);
const { selectedDashboard, isDashboardLocked } = useDashboard();
const { user } = useAppContext();
const [editWidget] = useComponentPermission(['edit_widget'], user.role);
const getSelectedTime = useCallback(
() =>
@@ -114,6 +127,13 @@ function FullView({
};
});
const { dashboardEditView, handleResetQuery, showResetQuery } = useDrilldown({
enableDrillDown,
widget,
setRequestData,
selectedDashboard,
});
useEffect(() => {
setRequestData((prev) => ({
...prev,
@@ -204,71 +224,117 @@ function FullView({
return (
<div className="full-view-container">
<div className="full-view-header-container">
{fullViewOptions && (
<TimeContainer $panelType={widget.panelTypes}>
{response.isFetching && (
<Spin spinning indicator={<LoadingOutlined spin />} />
<OverlayScrollbar>
<>
<div className="full-view-header-container">
{fullViewOptions && (
<TimeContainer $panelType={widget.panelTypes}>
{enableDrillDown && (
<div className="drildown-options-container">
{showResetQuery && (
<Button type="link" onClick={handleResetQuery}>
Reset Query
</Button>
)}
{editWidget && (
<Button
className="switch-edit-btn"
disabled={response.isFetching || response.isLoading}
onClick={(): void => {
if (dashboardEditView) {
safeNavigate(dashboardEditView);
}
}}
>
Switch to Edit Mode
</Button>
)}
</div>
)}
<div className="time-container">
{response.isFetching && (
<Spin spinning indicator={<LoadingOutlined spin />} />
)}
<TimePreference
selectedTime={selectedTime}
setSelectedTime={setSelectedTime}
/>
<Button
style={{
marginLeft: '4px',
}}
onClick={(): void => {
response.refetch();
}}
type="primary"
icon={<SyncOutlined />}
/>
</div>
</TimeContainer>
)}
<TimePreference
selectedTime={selectedTime}
setSelectedTime={setSelectedTime}
/>
<Button
style={{
marginLeft: '4px',
}}
onClick={(): void => {
response.refetch();
}}
type="primary"
icon={<SyncOutlined />}
/>
</TimeContainer>
)}
</div>
{enableDrillDown && (
<>
<QueryBuilderV2
panelType={widget.panelTypes}
version={selectedDashboard?.data?.version || 'v3'}
isListViewPanel={widget.panelTypes === PANEL_TYPES.LIST}
// filterConfigs={filterConfigs}
// queryComponents={queryComponents}
/>
<RightToolbarActions
onStageRunQuery={(): void => {
handleRunQuery(true, true);
}}
/>
</>
)}
</div>
<div
className={cx('graph-container', {
disabled: isDashboardLocked,
'height-widget': widget?.mergeAllActiveQueries || widget?.stackedBarChart,
'list-graph-container': isListView,
})}
ref={fullViewRef}
>
<GraphContainer
style={{
height: isListView ? '100%' : '90%',
}}
isGraphLegendToggleAvailable={canModifyChart}
>
{isTablePanel && (
<Input
addonBefore={<SearchOutlined size={14} />}
className="global-search"
placeholder="Search..."
allowClear
key={widget.id}
onChange={(e): void => {
setSearchTerm(e.target.value || '');
<div
className={cx('graph-container', {
disabled: isDashboardLocked,
'height-widget':
widget?.mergeAllActiveQueries || widget?.stackedBarChart,
'list-graph-container': isListView,
})}
ref={fullViewRef}
>
<GraphContainer
style={{
height: isListView ? '100%' : '90%',
}}
/>
)}
<PanelWrapper
queryResponse={response}
widget={widget}
setRequestData={setRequestData}
isFullViewMode
onToggleModelHandler={onToggleModelHandler}
setGraphVisibility={setGraphsVisibilityStates}
graphVisibility={graphsVisibilityStates}
onDragSelect={customOnDragSelect ?? onDragSelect}
tableProcessedDataRef={tableProcessedDataRef}
searchTerm={searchTerm}
onClickHandler={onClickHandler}
/>
</GraphContainer>
</div>
isGraphLegendToggleAvailable={canModifyChart}
>
{isTablePanel && (
<Input
addonBefore={<SearchOutlined size={14} />}
className="global-search"
placeholder="Search..."
allowClear
key={widget.id}
onChange={(e): void => {
setSearchTerm(e.target.value || '');
}}
/>
)}
<PanelWrapper
queryResponse={response}
widget={widget}
setRequestData={setRequestData}
isFullViewMode
onToggleModelHandler={onToggleModelHandler}
setGraphVisibility={setGraphsVisibilityStates}
graphVisibility={graphsVisibilityStates}
onDragSelect={customOnDragSelect ?? onDragSelect}
tableProcessedDataRef={tableProcessedDataRef}
searchTerm={searchTerm}
onClickHandler={onClickHandler}
enableDrillDown={enableDrillDown}
/>
</GraphContainer>
</div>
</>
</OverlayScrollbar>
</div>
);
}

View File

@@ -18,6 +18,7 @@ export const NotFoundContainer = styled.div`
export const TimeContainer = styled.div<Props>`
display: flex;
justify-content: flex-end;
gap: 16px;
align-items: center;
${({ $panelType }): FlattenSimpleInterpolation =>
$panelType === PANEL_TYPES.TABLE
@@ -25,6 +26,10 @@ export const TimeContainer = styled.div<Props>`
margin-bottom: 1rem;
`
: css``}
.time-container {
display: flex;
}
`;
export const GraphContainer = styled.div<GraphContainerProps>`

View File

@@ -59,6 +59,7 @@ export interface FullViewProps {
isDependedDataLoaded?: boolean;
onToggleModelHandler?: GraphManagerProps['onToggleModelHandler'];
setCurrentGraphRef: Dispatch<SetStateAction<RefObject<HTMLDivElement> | null>>;
enableDrillDown?: boolean;
}
export interface GraphManagerProps extends UplotProps {

View File

@@ -0,0 +1,84 @@
import { useGetCompositeQueryParam } from 'hooks/queryBuilder/useGetCompositeQueryParam';
import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder';
import { GetQueryResultsProps } from 'lib/dashboard/getQueryResults';
import {
Dispatch,
SetStateAction,
useCallback,
useEffect,
useMemo,
useRef,
} from 'react';
import { Dashboard, Widgets } from 'types/api/dashboard/getAll';
import { generateExportToDashboardLink } from 'utils/dashboard/generateExportToDashboardLink';
export interface DrilldownQueryProps {
widget: Widgets;
setRequestData: Dispatch<SetStateAction<GetQueryResultsProps>>;
enableDrillDown: boolean;
selectedDashboard: Dashboard | undefined;
}
export interface UseDrilldownReturn {
dashboardEditView: string;
handleResetQuery: () => void;
showResetQuery: boolean;
}
const useDrilldown = ({
enableDrillDown,
widget,
setRequestData,
selectedDashboard,
}: DrilldownQueryProps): UseDrilldownReturn => {
const isMounted = useRef(false);
const { redirectWithQueryBuilderData, currentQuery } = useQueryBuilder();
const compositeQuery = useGetCompositeQueryParam();
useEffect(() => {
if (enableDrillDown && !!compositeQuery) {
setRequestData((prev) => ({
...prev,
query: compositeQuery,
}));
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [currentQuery, compositeQuery]);
// update composite query with widget query if composite query is not present in url.
// Composite query should be in the url if switch to edit mode is clicked or drilldown happens from dashboard.
useEffect(() => {
if (enableDrillDown && !isMounted.current) {
redirectWithQueryBuilderData(compositeQuery || widget.query);
}
isMounted.current = true;
}, [widget, enableDrillDown, compositeQuery, redirectWithQueryBuilderData]);
const dashboardEditView = selectedDashboard?.id
? generateExportToDashboardLink({
query: currentQuery,
panelType: widget.panelTypes,
dashboardId: selectedDashboard?.id || '',
widgetId: widget.id,
})
: '';
const showResetQuery = useMemo(
() =>
JSON.stringify(widget.query?.builder) !==
JSON.stringify(compositeQuery?.builder),
[widget.query, compositeQuery],
);
const handleResetQuery = useCallback((): void => {
redirectWithQueryBuilderData(widget.query);
}, [redirectWithQueryBuilderData, widget.query]);
return {
dashboardEditView,
handleResetQuery,
showResetQuery,
};
};
export default useDrilldown;

View File

@@ -65,6 +65,8 @@ const mockProps: WidgetGraphComponentProps = {
aggregateAttribute: {
dataType: DataTypes.String,
id: 'span_id--string----true',
isColumn: true,
isJSON: false,
key: 'span_id',
type: '',
},

View File

@@ -62,6 +62,7 @@ function WidgetGraphComponent({
customErrorMessage,
customOnRowClick,
customTimeRangeWindowForCoRelation,
enableDrillDown,
}: WidgetGraphComponentProps): JSX.Element {
const { safeNavigate } = useSafeNavigate();
const [deleteModal, setDeleteModal] = useState(false);
@@ -236,6 +237,7 @@ function WidgetGraphComponent({
const onToggleModelHandler = (): void => {
const existingSearchParams = new URLSearchParams(search);
existingSearchParams.delete(QueryParams.expandedWidgetId);
existingSearchParams.delete(QueryParams.compositeQuery);
const updatedQueryParams = Object.fromEntries(existingSearchParams.entries());
if (queryResponse.data?.payload) {
const {
@@ -364,6 +366,7 @@ function WidgetGraphComponent({
onClickHandler={onClickHandler ?? graphClickHandler}
customOnDragSelect={customOnDragSelect}
setCurrentGraphRef={setCurrentGraphRef}
enableDrillDown={enableDrillDown}
/>
</Modal>
@@ -414,6 +417,7 @@ function WidgetGraphComponent({
onOpenTraceBtnClick={onOpenTraceBtnClick}
customSeries={customSeries}
customOnRowClick={customOnRowClick}
enableDrillDown={enableDrillDown}
/>
</div>
)}
@@ -426,6 +430,7 @@ WidgetGraphComponent.defaultProps = {
setLayout: undefined,
onClickHandler: undefined,
customTimeRangeWindowForCoRelation: undefined,
enableDrillDown: false,
};
export default WidgetGraphComponent;

View File

@@ -53,6 +53,7 @@ function GridCardGraph({
customTimeRange,
customOnRowClick,
customTimeRangeWindowForCoRelation,
enableDrillDown,
}: GridCardGraphProps): JSX.Element {
const dispatch = useDispatch();
const [errorMessage, setErrorMessage] = useState<string>();
@@ -317,6 +318,7 @@ function GridCardGraph({
customErrorMessage={isInternalServerError ? customErrorMessage : undefined}
customOnRowClick={customOnRowClick}
customTimeRangeWindowForCoRelation={customTimeRangeWindowForCoRelation}
enableDrillDown={enableDrillDown}
/>
)}
</div>
@@ -332,6 +334,7 @@ GridCardGraph.defaultProps = {
version: 'v3',
analyticsEvent: undefined,
customTimeRangeWindowForCoRelation: undefined,
enableDrillDown: false,
};
export default memo(GridCardGraph);

View File

@@ -41,6 +41,7 @@ export interface WidgetGraphComponentProps {
customErrorMessage?: string;
customOnRowClick?: (record: RowData) => void;
customTimeRangeWindowForCoRelation?: string | undefined;
enableDrillDown?: boolean;
}
export interface GridCardGraphProps {
@@ -69,6 +70,7 @@ export interface GridCardGraphProps {
};
customOnRowClick?: (record: RowData) => void;
customTimeRangeWindowForCoRelation?: string | undefined;
enableDrillDown?: boolean;
}
export interface GetGraphVisibilityStateOnLegendClickProps {

View File

@@ -53,11 +53,12 @@ import { WidgetRowHeader } from './WidgetRow';
interface GraphLayoutProps {
handle: FullScreenHandle;
enableDrillDown?: boolean;
}
// eslint-disable-next-line sonarjs/cognitive-complexity
function GraphLayout(props: GraphLayoutProps): JSX.Element {
const { handle } = props;
const { handle, enableDrillDown = false } = props;
const { safeNavigate } = useSafeNavigate();
const {
selectedDashboard,
@@ -584,6 +585,7 @@ function GraphLayout(props: GraphLayoutProps): JSX.Element {
version={ENTITY_VERSION_V5}
onDragSelect={onDragSelect}
dataAvailable={checkIfDataExists}
enableDrillDown={enableDrillDown}
/>
</Card>
</CardContainer>
@@ -670,3 +672,7 @@ function GraphLayout(props: GraphLayoutProps): JSX.Element {
}
export default GraphLayout;
GraphLayout.defaultProps = {
enableDrillDown: false,
};

View File

@@ -2,16 +2,16 @@ import { Query } from 'types/api/queryBuilder/queryBuilderData';
import { EQueryType } from 'types/common/dashboard';
import { DataSource } from 'types/common/queryBuilder';
import { getBarStepIntervalPoints, updateBarStepInterval } from '../utils';
import { getStepIntervalPoints, updateStepInterval } from '../utils';
describe('GridCardLayout Utils', () => {
describe('getBarStepIntervalPoints', () => {
describe('getStepIntervalPoints', () => {
it('should return 60 points for duration <= 1 hour', () => {
// 30 minutes in milliseconds
const start = Date.now();
const end = start + 30 * 60 * 1000;
expect(getBarStepIntervalPoints(start, end)).toBe(60);
expect(getStepIntervalPoints(start, end)).toBe(60);
});
it('should return 60 points for exactly 1 hour', () => {
@@ -19,7 +19,7 @@ describe('GridCardLayout Utils', () => {
const start = Date.now();
const end = start + 60 * 60 * 1000;
expect(getBarStepIntervalPoints(start, end)).toBe(60);
expect(getStepIntervalPoints(start, end)).toBe(60);
});
it('should return 120 points for duration <= 3 hours', () => {
@@ -27,7 +27,7 @@ describe('GridCardLayout Utils', () => {
const start = Date.now();
const end = start + 2 * 60 * 60 * 1000;
expect(getBarStepIntervalPoints(start, end)).toBe(120);
expect(getStepIntervalPoints(start, end)).toBe(120);
});
it('should return 120 points for exactly 3 hours', () => {
@@ -35,7 +35,7 @@ describe('GridCardLayout Utils', () => {
const start = Date.now();
const end = start + 3 * 60 * 60 * 1000;
expect(getBarStepIntervalPoints(start, end)).toBe(120);
expect(getStepIntervalPoints(start, end)).toBe(120);
});
it('should return 180 points for duration <= 5 hours', () => {
@@ -43,7 +43,7 @@ describe('GridCardLayout Utils', () => {
const start = Date.now();
const end = start + 4 * 60 * 60 * 1000;
expect(getBarStepIntervalPoints(start, end)).toBe(180);
expect(getStepIntervalPoints(start, end)).toBe(180);
});
it('should return 180 points for exactly 5 hours', () => {
@@ -51,7 +51,7 @@ describe('GridCardLayout Utils', () => {
const start = Date.now();
const end = start + 5 * 60 * 60 * 1000;
expect(getBarStepIntervalPoints(start, end)).toBe(180);
expect(getStepIntervalPoints(start, end)).toBe(180);
});
it('should calculate dynamic interval for duration > 5 hours', () => {
@@ -59,7 +59,7 @@ describe('GridCardLayout Utils', () => {
const start = Date.now();
const end = start + 10 * 60 * 60 * 1000;
const result = getBarStepIntervalPoints(start, end);
const result = getStepIntervalPoints(start, end);
// For 10 hours (600 minutes), interval should be ceil(600/80) = 8, rounded to 10, then * 60 = 600
expect(result).toBe(600);
@@ -70,7 +70,7 @@ describe('GridCardLayout Utils', () => {
const start = Date.now();
const end = start + 7 * 24 * 60 * 60 * 1000;
const result = getBarStepIntervalPoints(start, end);
const result = getStepIntervalPoints(start, end);
// For 7 days (10080 minutes), interval should be ceil(10080/80) = 126, rounded to 130, then * 60 = 7800
expect(result).toBe(7800);
@@ -81,7 +81,7 @@ describe('GridCardLayout Utils', () => {
const start = Date.now();
const end = start + 12 * 60 * 60 * 1000;
const result = getBarStepIntervalPoints(start, end);
const result = getStepIntervalPoints(start, end);
// For 12 hours (720 minutes), interval should be ceil(720/80) = 9, rounded to 10, then * 60 = 600
expect(result).toBe(600);
@@ -92,24 +92,24 @@ describe('GridCardLayout Utils', () => {
const start = Date.now();
const end = start + 1 * 60 * 1000;
expect(getBarStepIntervalPoints(start, end)).toBe(60);
expect(getStepIntervalPoints(start, end)).toBe(60);
});
it('should handle zero duration', () => {
const start = Date.now();
const end = start;
expect(getBarStepIntervalPoints(start, end)).toBe(60);
expect(getStepIntervalPoints(start, end)).toBe(60);
});
});
describe('updateBarStepInterval', () => {
describe('updateStepInterval', () => {
const mockQuery: Query = {
queryType: EQueryType.QUERY_BUILDER,
builder: {
queryData: [
{
stepInterval: null,
stepInterval: 60,
aggregateOperator: 'avg',
dataSource: DataSource.METRICS,
queryName: 'A',
@@ -142,7 +142,7 @@ describe('GridCardLayout Utils', () => {
const minTime = Date.now();
const maxTime = minTime + 2 * 60 * 60 * 1000;
const result = updateBarStepInterval(mockQuery, minTime, maxTime);
const result = updateStepInterval(mockQuery, minTime, maxTime);
expect(result.builder.queryData[0].stepInterval).toBe(120);
});
@@ -151,7 +151,7 @@ describe('GridCardLayout Utils', () => {
const minTime = Date.now();
const maxTime = minTime + 1 * 60 * 60 * 1000;
const result = updateBarStepInterval(mockQuery, minTime, maxTime);
const result = updateStepInterval(mockQuery, minTime, maxTime);
expect(result.builder.queryData[0].aggregateOperator).toBe('avg');
expect(result.builder.queryData[0].queryName).toBe('A');
@@ -177,7 +177,7 @@ describe('GridCardLayout Utils', () => {
const minTime = Date.now();
const maxTime = minTime + 4 * 60 * 60 * 1000;
const result = updateBarStepInterval(multiQueryMock, minTime, maxTime);
const result = updateStepInterval(multiQueryMock, minTime, maxTime);
expect(result.builder.queryData).toHaveLength(2);
expect(result.builder.queryData[0].stepInterval).toBe(180);
@@ -201,11 +201,7 @@ describe('GridCardLayout Utils', () => {
const minTime = Date.now();
const maxTime = minTime + 1 * 60 * 60 * 1000;
const result = updateBarStepInterval(
queryWithUndefinedStep,
minTime,
maxTime,
);
const result = updateStepInterval(queryWithUndefinedStep, minTime, maxTime);
expect(result.builder.queryData[0].stepInterval).toBe(60);
});
@@ -214,7 +210,7 @@ describe('GridCardLayout Utils', () => {
const minTime = Date.now();
const maxTime = minTime; // Same time = 0 duration
const result = updateBarStepInterval(mockQuery, minTime, maxTime);
const result = updateStepInterval(mockQuery, minTime, maxTime);
expect(result.builder.queryData[0].stepInterval).toBe(60);
});
@@ -223,66 +219,10 @@ describe('GridCardLayout Utils', () => {
const minTime = Date.now();
const maxTime = minTime + 30 * 24 * 60 * 60 * 1000; // 30 days
const result = updateBarStepInterval(mockQuery, minTime, maxTime);
const result = updateStepInterval(mockQuery, minTime, maxTime);
// Should calculate appropriate interval for 30 days
expect(result.builder.queryData[0].stepInterval).toBeGreaterThan(180);
});
it('should handle stepInterval as 0', () => {
const queryWithZeroStep: Query = {
...mockQuery,
builder: {
queryData: [
{
...mockQuery.builder.queryData[0],
stepInterval: 0,
},
],
queryFormulas: [],
},
};
const minTime = Date.now();
let maxTime = minTime + 1 * 60 * 60 * 1000;
const result = updateBarStepInterval(queryWithZeroStep, minTime, maxTime);
expect(result.builder.queryData[0].stepInterval).toBe(60);
maxTime = minTime + 30 * 24 * 60 * 60 * 1000; // 30 days
const result1 = updateBarStepInterval(queryWithZeroStep, minTime, maxTime);
expect(result1.builder.queryData[0].stepInterval).toBe(32400);
});
it('should respect user entered inputs', () => {
const queryWithUserStep: Query = {
...mockQuery,
builder: {
queryData: [
{
...mockQuery.builder.queryData[0],
stepInterval: 120,
},
],
queryFormulas: [],
},
};
const minTime = Date.now();
let maxTime = minTime + 1 * 60 * 60 * 1000;
const result = updateBarStepInterval(queryWithUserStep, minTime, maxTime);
expect(result.builder.queryData[0].stepInterval).toBe(120); // not 60
maxTime = minTime + 30 * 24 * 60 * 60 * 1000; // 30 days
const result1 = updateBarStepInterval(queryWithUserStep, minTime, maxTime);
expect(result1.builder.queryData[0].stepInterval).toBe(120); // not 32400
});
});
});

View File

@@ -4,10 +4,17 @@ import GraphLayoutContainer from './GridCardLayout';
interface GridGraphProps {
handle: FullScreenHandle;
enableDrillDown?: boolean;
}
function GridGraph(props: GridGraphProps): JSX.Element {
const { handle } = props;
return <GraphLayoutContainer handle={handle} />;
const { handle, enableDrillDown = false } = props;
return (
<GraphLayoutContainer handle={handle} enableDrillDown={enableDrillDown} />
);
}
export default GridGraph;
GridGraph.defaultProps = {
enableDrillDown: false,
};

View File

@@ -53,7 +53,10 @@ function useUpdatedQuery(): UseUpdatedQueryResult {
const queryResult = await queryRangeMutation.mutateAsync(queryPayload);
// Map query data from API response
return mapQueryDataFromApi(queryResult.data.compositeQuery);
return mapQueryDataFromApi(
queryResult.data.compositeQuery,
widgetConfig?.query,
);
},
[globalSelectedInterval, queryRangeMutation],
);

View File

@@ -57,8 +57,6 @@ export const hasColumnWidthsChanged = (
* Calculates the step interval in uPlot points (1 minute = 60 points)
* based on the time duration between two timestamps in nanoseconds.
*
* NOTE: This function is specifically designed for BAR visualization panels only.
*
* Conversion logic:
* - <= 1 hr → 1 min (60 points)
* - <= 3 hr → 2 min (120 points)
@@ -69,7 +67,7 @@ export const hasColumnWidthsChanged = (
* @param endNano - end time in nanoseconds
* @returns stepInterval in uPlot points
*/
export function getBarStepIntervalPoints(
export function getStepIntervalPoints(
startNano: number,
endNano: number,
): number {
@@ -94,18 +92,18 @@ export function getBarStepIntervalPoints(
return roundedInterval * 60; // convert min to points
}
export function updateBarStepInterval(
export function updateStepInterval(
query: Query,
minTime: number,
maxTime: number,
): Query {
const stepIntervalPoints = getBarStepIntervalPoints(minTime, maxTime);
const stepIntervalPoints = getStepIntervalPoints(minTime, maxTime);
// if user haven't enter anything manually, that is we have default value of 60 then do the interval adjustment for bar otherwise apply the user's value
const getBarSteps = (queryData: IBuilderQuery): number | null =>
!queryData.stepInterval
? stepIntervalPoints || null
: queryData?.stepInterval;
const getSteps = (queryData: IBuilderQuery): number =>
queryData?.stepInterval === 60
? stepIntervalPoints || 60
: queryData?.stepInterval || 60;
return {
...query,
@@ -114,7 +112,7 @@ export function updateBarStepInterval(
queryData: [
...(query?.builder?.queryData ?? []).map((queryData) => ({
...queryData,
stepInterval: getBarSteps(queryData),
stepInterval: getSteps(queryData),
})),
],
},

View File

@@ -105,6 +105,8 @@ export const widgetQueryWithLegend = {
aggregateAttribute: {
dataType: 'float64',
id: 'signoz_latency--float64--ExponentialHistogram--true',
isColumn: true,
isJSON: false,
key: 'signoz_latency',
type: 'ExponentialHistogram',
},
@@ -124,6 +126,8 @@ export const widgetQueryWithLegend = {
groupBy: [
{
dataType: 'string',
isColumn: false,
isJSON: false,
key: 'service_name',
type: 'tag',
id: 'service_name--string--tag--false',
@@ -139,6 +143,8 @@ export const widgetQueryWithLegend = {
aggregateAttribute: {
dataType: 'float64',
id: 'system_disk_operations--float64--Sum--true',
isColumn: true,
isJSON: false,
key: 'system_disk_operations',
type: 'Sum',
},

View File

@@ -46,6 +46,7 @@ function GridTableComponent({
onOpenTraceBtnClick,
customOnRowClick,
widgetId,
panelType,
...props
}: GridTableComponentProps): JSX.Element {
const { t } = useTranslation(['valueGraph']);
@@ -266,6 +267,7 @@ function GridTableComponent({
dataSource={dataSource}
sticky={sticky}
widgetId={widgetId}
panelType={panelType}
onRow={
openTracesButton || customOnRowClick
? (record): React.HTMLAttributes<HTMLElement> => ({

View File

@@ -1,4 +1,5 @@
import { TableProps } from 'antd';
import { PANEL_TYPES } from 'constants/queryBuilder';
import { LogsExplorerTableProps } from 'container/LogsExplorerTable/LogsExplorerTable.interfaces';
import {
ThresholdOperators,
@@ -6,7 +7,7 @@ import {
} from 'container/NewWidget/RightContainer/Threshold/types';
import { QueryTableProps } from 'container/QueryTable/QueryTable.intefaces';
import { RowData } from 'lib/query/createTableColumnsFromQuery';
import { ColumnUnit } from 'types/api/dashboard/getAll';
import { ColumnUnit, ContextLinksData } from 'types/api/dashboard/getAll';
import { Query } from 'types/api/queryBuilder/queryBuilderData';
export type GridTableComponentProps = {
@@ -22,6 +23,9 @@ export type GridTableComponentProps = {
widgetId?: string;
renderColumnCell?: QueryTableProps['renderColumnCell'];
customColTitles?: Record<string, string>;
enableDrillDown?: boolean;
contextLinks?: ContextLinksData;
panelType?: PANEL_TYPES;
} & Pick<LogsExplorerTableProps, 'data'> &
Omit<TableProps<RowData>, 'columns' | 'dataSource'>;

View File

@@ -1,5 +1,5 @@
/* eslint-disable sonarjs/cognitive-complexity */
import { ColumnsType, ColumnType } from 'antd/es/table';
import { ColumnType } from 'antd/es/table';
import { convertUnit } from 'container/NewWidget/RightContainer/dataFormatCategories';
import { ThresholdProps } from 'container/NewWidget/RightContainer/Threshold/types';
import { QUERY_TABLE_CONFIG } from 'container/QueryTable/config';
@@ -9,6 +9,12 @@ import { isEmpty, isNaN } from 'lodash-es';
import { Query } from 'types/api/queryBuilder/queryBuilderData';
import { EQueryType } from 'types/common/dashboard';
// Custom column type that extends ColumnType to include isValueColumn
export interface CustomDataColumnType<T> extends ColumnType<T> {
isValueColumn?: boolean;
queryName?: string;
}
// Helper function to evaluate the condition based on the operator
function evaluateCondition(
operator: string | undefined,
@@ -180,9 +186,9 @@ export function createColumnsAndDataSource(
data: TableData,
currentQuery: Query,
renderColumnCell?: QueryTableProps['renderColumnCell'],
): { columns: ColumnsType<RowData>; dataSource: RowData[] } {
const columns: ColumnsType<RowData> =
data.columns?.reduce<ColumnsType<RowData>>((acc, item) => {
): { columns: CustomDataColumnType<RowData>[]; dataSource: RowData[] } {
const columns: CustomDataColumnType<RowData>[] =
data.columns?.reduce<CustomDataColumnType<RowData>[]>((acc, item) => {
// is the column is the value column then we need to check for the available legend
const legend = item.isValueColumn
? getQueryLegend(currentQuery, item.queryName)
@@ -193,11 +199,13 @@ export function createColumnsAndDataSource(
(query) => query.queryName === item.queryName,
)?.aggregations?.length || 0;
const column: ColumnType<RowData> = {
const column: CustomDataColumnType<RowData> = {
dataIndex: item.id || item.name,
// if no legend present then rely on the column name value
title: !isNewAggregation && !isEmpty(legend) ? legend : item.name,
width: QUERY_TABLE_CONFIG.width,
isValueColumn: item.isValueColumn,
queryName: item.queryName,
render: renderColumnCell && renderColumnCell[item.name],
sorter: (a: RowData, b: RowData): number => sortFunction(a, b, item),
};

View File

@@ -220,10 +220,18 @@ function ServiceMetrics({
() =>
getQueryRangeRequestData({
topLevelOperations,
minTime: timeRange.startTime * 1e6,
maxTime: timeRange.endTime * 1e6,
globalSelectedInterval,
dotMetricsEnabled,
}),
[globalSelectedInterval, topLevelOperations, dotMetricsEnabled],
[
globalSelectedInterval,
timeRange.endTime,
timeRange.startTime,
topLevelOperations,
dotMetricsEnabled,
],
);
const dataQueries = useGetQueriesRange(

View File

@@ -182,6 +182,8 @@ export const HostsQuickFiltersConfig: IQuickFiltersConfig[] = [
key: 'host_name',
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
},
aggregateOperator: 'noop',
aggregateAttribute: 'system_cpu_load_average_15m',
@@ -195,6 +197,8 @@ export const HostsQuickFiltersConfig: IQuickFiltersConfig[] = [
key: 'os_type',
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
},
aggregateOperator: 'noop',
aggregateAttribute: 'system_cpu_load_average_15m',
@@ -226,6 +230,8 @@ export function GetHostsQuickFiltersConfig(
key: hostNameKey,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
},
aggregateOperator: 'noop',
aggregateAttribute: metricName,
@@ -239,6 +245,8 @@ export function GetHostsQuickFiltersConfig(
key: osTypeKey,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
},
aggregateOperator: 'noop',
aggregateAttribute: metricName,
@@ -252,6 +260,8 @@ export function GetHostsQuickFiltersConfig(
key: environmentKey,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
},
defaultOpen: true,
},

View File

@@ -122,6 +122,8 @@ function ClusterDetails({
key: QUERY_KEYS.K8S_CLUSTER_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s_cluster_name--string--resource--false',
},
op: '=',
@@ -148,6 +150,8 @@ function ClusterDetails({
key: QUERY_KEYS.K8S_OBJECT_KIND,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s.object.kind--string--resource--false',
},
op: '=',
@@ -159,6 +163,8 @@ function ClusterDetails({
key: QUERY_KEYS.K8S_OBJECT_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s.object.name--string--resource--false',
},
op: '=',

View File

@@ -147,6 +147,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_cpu_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodCpuUtilizationKey,
type: 'Gauge',
},
@@ -161,6 +163,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -186,6 +190,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_cpu_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodCpuUtilizationKey,
type: 'Gauge',
},
@@ -200,6 +206,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -225,6 +233,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_cpu_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodCpuUtilizationKey,
type: 'Gauge',
},
@@ -239,6 +249,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -264,6 +276,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_allocatable_cpu--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeAllocatableCpuKey,
type: 'Gauge',
},
@@ -278,6 +292,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -336,6 +352,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemoryUsageKey,
type: 'Gauge',
},
@@ -350,6 +368,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -375,6 +395,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemoryUsageKey,
type: 'Gauge',
},
@@ -389,6 +411,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -414,6 +438,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemoryUsageKey,
type: 'Gauge',
},
@@ -428,6 +454,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -453,6 +481,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_allocatable_memory--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeAllocatableMemoryKey,
type: 'Gauge',
},
@@ -467,6 +497,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -525,6 +557,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_condition_ready--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeConditionReadyKey,
type: 'Gauge',
},
@@ -539,6 +573,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -553,6 +589,8 @@ export const getClusterMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -610,6 +648,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_condition_ready--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeConditionReadyKey,
type: 'Gauge',
},
@@ -624,6 +664,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -638,6 +680,8 @@ export const getClusterMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -695,6 +739,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_deployment_available--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sDeploymentAvailableKey,
type: 'Gauge',
},
@@ -709,6 +755,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -723,12 +771,16 @@ export const getClusterMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_deployment_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sDeploymentNameKey,
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -747,6 +799,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_deployment_desired--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sDeploymentDesiredKey,
type: 'Gauge',
},
@@ -761,6 +815,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -775,12 +831,16 @@ export const getClusterMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_deployment_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sDeploymentNameKey,
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -844,6 +904,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_statefulset_current_pods--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sStatefulsetCurrentPodsKey,
type: 'Gauge',
},
@@ -858,6 +920,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -872,12 +936,16 @@ export const getClusterMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_statefulset_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sStatefulsetNameKey,
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -896,6 +964,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_statefulset_desired_pods--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sStatefulsetDesiredPodsKey,
type: 'Gauge',
},
@@ -910,6 +980,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -924,12 +996,16 @@ export const getClusterMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_statefulset_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sStatefulsetNameKey,
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -948,6 +1024,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_statefulset_ready_pods--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sStatefulsetReadyPodsKey,
type: 'Gauge',
},
@@ -962,6 +1040,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -976,12 +1056,16 @@ export const getClusterMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_statefulset_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sStatefulsetNameKey,
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1000,6 +1084,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_statefulset_updated_pods--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sStatefulsetUpdatedPodsKey,
type: 'Gauge',
},
@@ -1014,6 +1100,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -1028,12 +1116,16 @@ export const getClusterMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_statefulset_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sStatefulsetNameKey,
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1121,6 +1213,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_daemonset_current_scheduled_nodes--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sDaemonsetCurrentScheduledNodesKey,
type: 'Gauge',
},
@@ -1135,6 +1229,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -1149,6 +1245,8 @@ export const getClusterMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_daemonset_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sDaemonsetNameKey,
type: 'tag',
},
@@ -1167,6 +1265,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_daemonset_desired_scheduled_nodes--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sDaemonsetDesiredScheduledNodesKey,
type: 'Gauge',
},
@@ -1181,6 +1281,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -1195,6 +1297,8 @@ export const getClusterMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_daemonset_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sDaemonsetNameKey,
type: 'tag',
},
@@ -1213,6 +1317,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_daemonset_ready_nodes--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sDaemonsetReadyNodesKey,
type: 'Gauge',
},
@@ -1227,6 +1333,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -1241,6 +1349,8 @@ export const getClusterMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_daemonset_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sDaemonsetNameKey,
type: 'tag',
},
@@ -1316,6 +1426,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_job_active_pods--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sJobActivePodsKey,
type: 'Gauge',
},
@@ -1330,6 +1442,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -1344,12 +1458,16 @@ export const getClusterMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_job_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sJobNameKey,
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1368,6 +1486,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_job_successful_pods--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sJobSuccessfulPodsKey,
type: 'Gauge',
},
@@ -1382,6 +1502,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -1396,12 +1518,16 @@ export const getClusterMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_job_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sJobNameKey,
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1420,6 +1546,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_job_failed_pods--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sJobFailedPodsKey,
type: 'Gauge',
},
@@ -1434,6 +1562,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -1448,12 +1578,16 @@ export const getClusterMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_job_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sJobNameKey,
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1472,6 +1606,8 @@ export const getClusterMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_job_desired_successful_pods--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sJobDesiredSuccessfulPodsKey,
type: 'Gauge',
},
@@ -1486,6 +1622,8 @@ export const getClusterMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -1500,12 +1638,16 @@ export const getClusterMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_job_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sJobNameKey,
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},

View File

@@ -121,6 +121,8 @@ function DaemonSetDetails({
key: QUERY_KEYS.K8S_DAEMON_SET_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s_daemonSet_name--string--resource--false',
},
op: '=',
@@ -132,6 +134,8 @@ function DaemonSetDetails({
key: QUERY_KEYS.K8S_NAMESPACE_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s_daemonSet_name--string--resource--false',
},
op: '=',
@@ -162,6 +166,8 @@ function DaemonSetDetails({
key: QUERY_KEYS.K8S_OBJECT_KIND,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s.object.kind--string--resource--false',
},
op: '=',
@@ -173,6 +179,8 @@ function DaemonSetDetails({
key: QUERY_KEYS.K8S_OBJECT_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s.object.name--string--resource--false',
},
op: '=',

View File

@@ -85,6 +85,8 @@ export const getDaemonSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_cpu_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodCpuUtilizationKey,
type: 'Gauge',
},
@@ -99,6 +101,8 @@ export const getDaemonSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_daemonset_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sDaemonSetNameKey,
type: 'tag',
},
@@ -110,6 +114,8 @@ export const getDaemonSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -135,6 +141,8 @@ export const getDaemonSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_container_cpu_request--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sContainerCpuRequestKey,
type: 'Gauge',
},
@@ -149,6 +157,8 @@ export const getDaemonSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -160,6 +170,8 @@ export const getDaemonSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -185,6 +197,8 @@ export const getDaemonSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_container_cpu_limit--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sContainerCpuLimitKey,
type: 'Gauge',
},
@@ -199,6 +213,8 @@ export const getDaemonSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -210,6 +226,8 @@ export const getDaemonSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -268,6 +286,8 @@ export const getDaemonSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemoryUsageKey,
type: 'Gauge',
},
@@ -282,6 +302,8 @@ export const getDaemonSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_daemonset_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sDaemonSetNameKey,
type: 'tag',
},
@@ -293,6 +315,8 @@ export const getDaemonSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -318,6 +342,8 @@ export const getDaemonSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_container_memory_request--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sContainerMemoryRequestKey,
type: 'Gauge',
},
@@ -332,6 +358,8 @@ export const getDaemonSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -343,6 +371,8 @@ export const getDaemonSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -368,6 +398,8 @@ export const getDaemonSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_container_memory_limit--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sContainerMemoryLimitKey,
type: 'Gauge',
},
@@ -382,6 +414,8 @@ export const getDaemonSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -393,6 +427,8 @@ export const getDaemonSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -451,6 +487,8 @@ export const getDaemonSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_network_io--float64--Sum--true',
isColumn: true,
isJSON: false,
key: k8sPodNetworkIoKey,
type: 'Sum',
},
@@ -465,6 +503,8 @@ export const getDaemonSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_daemonset_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sDaemonSetNameKey,
type: 'tag',
},
@@ -476,6 +516,8 @@ export const getDaemonSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -490,12 +532,16 @@ export const getDaemonSetMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'direction--string--tag--false',
isColumn: false,
isJSON: false,
key: 'direction',
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'interface--string--tag--false',
isColumn: false,
isJSON: false,
key: 'interface',
type: 'tag',
},
@@ -547,6 +593,8 @@ export const getDaemonSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_network_errors--float64--Sum--true',
isColumn: true,
isJSON: false,
key: k8sPodNetworkErrorsKey,
type: 'Sum',
},
@@ -561,6 +609,8 @@ export const getDaemonSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_daemonset_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sDaemonSetNameKey,
type: 'tag',
},
@@ -572,6 +622,8 @@ export const getDaemonSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -586,12 +638,16 @@ export const getDaemonSetMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'direction--string--tag--false',
isColumn: false,
isJSON: false,
key: 'direction',
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'interface--string--tag--false',
isColumn: false,
isJSON: false,
key: 'interface',
type: 'tag',
},

View File

@@ -125,6 +125,8 @@ function DeploymentDetails({
key: QUERY_KEYS.K8S_DEPLOYMENT_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s_deployment_name--string--resource--false',
},
op: '=',
@@ -136,6 +138,8 @@ function DeploymentDetails({
key: QUERY_KEYS.K8S_NAMESPACE_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s_deployment_name--string--resource--false',
},
op: '=',
@@ -166,6 +170,8 @@ function DeploymentDetails({
key: QUERY_KEYS.K8S_OBJECT_KIND,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s.object.kind--string--resource--false',
},
op: '=',
@@ -177,6 +183,8 @@ function DeploymentDetails({
key: QUERY_KEYS.K8S_OBJECT_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s.object.name--string--resource--false',
},
op: '=',

View File

@@ -81,6 +81,8 @@ export const getDeploymentMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_cpu_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodCpuUtilizationKey,
type: 'Gauge',
},
@@ -95,6 +97,8 @@ export const getDeploymentMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_deployment_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sDeploymentNameKey,
type: 'tag',
},
@@ -120,6 +124,8 @@ export const getDeploymentMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_container_cpu_request--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sContainerCpuRequestKey,
type: 'Gauge',
},
@@ -134,6 +140,8 @@ export const getDeploymentMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -159,6 +167,8 @@ export const getDeploymentMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_container_cpu_limit--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sContainerCpuLimitKey,
type: 'Gauge',
},
@@ -173,6 +183,8 @@ export const getDeploymentMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -231,6 +243,8 @@ export const getDeploymentMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemoryUsageKey,
type: 'Gauge',
},
@@ -245,6 +259,8 @@ export const getDeploymentMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_deployment_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sDeploymentNameKey,
type: 'tag',
},
@@ -270,6 +286,8 @@ export const getDeploymentMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_container_memory_request--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sContainerMemoryRequestKey,
type: 'Gauge',
},
@@ -284,6 +302,8 @@ export const getDeploymentMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -309,6 +329,8 @@ export const getDeploymentMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_container_memory_limit--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sContainerMemoryLimitKey,
type: 'Gauge',
},
@@ -323,6 +345,8 @@ export const getDeploymentMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -381,6 +405,8 @@ export const getDeploymentMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_network_io--float64--Sum--true',
isColumn: true,
isJSON: false,
key: k8sPodNetworkIoKey,
type: 'Sum',
},
@@ -395,6 +421,8 @@ export const getDeploymentMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_deployment_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sDeploymentNameKey,
type: 'tag',
},
@@ -409,12 +437,16 @@ export const getDeploymentMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'direction--string--tag--false',
isColumn: false,
isJSON: false,
key: 'direction',
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'interface--string--tag--false',
isColumn: false,
isJSON: false,
key: 'interface',
type: 'tag',
},
@@ -466,6 +498,8 @@ export const getDeploymentMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_network_errors--float64--Sum--true',
isColumn: true,
isJSON: false,
key: k8sPodNetworkErrorsKey,
type: 'Sum',
},
@@ -480,6 +514,8 @@ export const getDeploymentMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_deployment_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sDeploymentNameKey,
type: 'tag',
},
@@ -494,12 +530,16 @@ export const getDeploymentMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'direction--string--tag--false',
isColumn: false,
isJSON: false,
key: 'direction',
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'interface--string--tag--false',
isColumn: false,
isJSON: false,
key: 'interface',
type: 'tag',
},

View File

@@ -93,8 +93,10 @@ const mockFilters: IBuilderQuery['filters'] = {
key: {
id: 'pod-name',
dataType: DataTypes.String,
isColumn: true,
key: 'pod-name',
type: 'tag',
isJSON: false,
isIndexed: false,
},
op: '=',

View File

@@ -99,8 +99,10 @@ const mockTracesFilters: IBuilderQuery['filters'] = {
key: {
id: 'service-name',
dataType: DataTypes.String,
isColumn: true,
key: 'service.name',
type: 'tag',
isJSON: false,
isIndexed: false,
},
op: '=',

View File

@@ -54,7 +54,9 @@ export const getEntityEventsOrLogsQueryPayload = (
id: '------false',
dataType: DataTypes.String,
key: '',
isColumn: false,
type: '',
isJSON: false,
},
timeAggregation: 'rate',
spaceAggregation: 'sum',
@@ -156,31 +158,37 @@ export const selectedEntityTracesColumns: BaseAutocompleteData[] = [
key: 'timestamp',
dataType: DataTypes.String,
type: 'tag',
isColumn: true,
},
{
key: 'serviceName',
dataType: DataTypes.String,
type: 'tag',
isColumn: true,
},
{
key: 'name',
dataType: DataTypes.String,
type: 'tag',
isColumn: true,
},
{
key: 'durationNano',
dataType: DataTypes.Float64,
type: 'tag',
isColumn: true,
},
{
key: 'httpMethod',
dataType: DataTypes.String,
type: 'tag',
isColumn: true,
},
{
key: 'responseStatusCode',
dataType: DataTypes.String,
type: 'tag',
isColumn: true,
},
];
@@ -203,7 +211,9 @@ export const getEntityTracesQueryPayload = (
id: '------false',
dataType: DataTypes.EMPTY,
key: '',
isColumn: false,
type: '',
isJSON: false,
},
timeAggregation: 'rate',
spaceAggregation: 'sum',
@@ -247,6 +257,8 @@ export const getEntityTracesQueryPayload = (
key: 'serviceName',
dataType: 'string',
type: 'tag',
isColumn: true,
isJSON: false,
id: 'serviceName--string--tag--true',
isIndexed: false,
},
@@ -254,6 +266,8 @@ export const getEntityTracesQueryPayload = (
key: 'name',
dataType: 'string',
type: 'tag',
isColumn: true,
isJSON: false,
id: 'name--string--tag--true',
isIndexed: false,
},
@@ -261,6 +275,8 @@ export const getEntityTracesQueryPayload = (
key: 'durationNano',
dataType: 'float64',
type: 'tag',
isColumn: true,
isJSON: false,
id: 'durationNano--float64--tag--true',
isIndexed: false,
},
@@ -268,6 +284,8 @@ export const getEntityTracesQueryPayload = (
key: 'httpMethod',
dataType: 'string',
type: 'tag',
isColumn: true,
isJSON: false,
id: 'httpMethod--string--tag--true',
isIndexed: false,
},
@@ -275,6 +293,8 @@ export const getEntityTracesQueryPayload = (
key: 'responseStatusCode',
dataType: 'string',
type: 'tag',
isColumn: true,
isJSON: false,
id: 'responseStatusCode--string--tag--true',
isIndexed: false,
},

View File

@@ -118,6 +118,8 @@ function JobDetails({
key: QUERY_KEYS.K8S_JOB_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s_job_name--string--resource--false',
},
op: '=',
@@ -129,6 +131,8 @@ function JobDetails({
key: QUERY_KEYS.K8S_NAMESPACE_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s_job_name--string--resource--false',
},
op: '=',
@@ -155,6 +159,8 @@ function JobDetails({
key: QUERY_KEYS.K8S_OBJECT_KIND,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s.object.kind--string--resource--false',
},
op: '=',
@@ -166,6 +172,8 @@ function JobDetails({
key: QUERY_KEYS.K8S_OBJECT_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s.object.name--string--resource--false',
},
op: '=',

View File

@@ -60,6 +60,8 @@ export const getJobMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_cpu_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodCpuUtilizationKey,
type: 'Gauge',
},
@@ -74,6 +76,8 @@ export const getJobMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_job_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sJobNameKey,
type: 'tag',
},
@@ -85,6 +89,8 @@ export const getJobMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -143,6 +149,8 @@ export const getJobMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemoryUsageKey,
type: 'Gauge',
},
@@ -157,6 +165,8 @@ export const getJobMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_job_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sJobNameKey,
type: 'tag',
},
@@ -168,6 +178,8 @@ export const getJobMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -226,6 +238,8 @@ export const getJobMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_network_io--float64--Sum--true',
isColumn: true,
isJSON: false,
key: k8sPodNetworkIoKey,
type: 'Sum',
},
@@ -240,6 +254,8 @@ export const getJobMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_job_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sJobNameKey,
type: 'tag',
},
@@ -251,6 +267,8 @@ export const getJobMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -265,12 +283,16 @@ export const getJobMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'direction--string--tag--false',
isColumn: false,
isJSON: false,
key: 'direction',
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'interface--string--tag--false',
isColumn: false,
isJSON: false,
key: 'interface',
type: 'tag',
},
@@ -322,6 +344,8 @@ export const getJobMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_network_errors--float64--Sum--true',
isColumn: true,
isJSON: false,
key: k8sPodNetworkErrorsKey,
type: 'Sum',
},
@@ -336,6 +360,8 @@ export const getJobMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_job_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sJobNameKey,
type: 'tag',
},
@@ -347,6 +373,8 @@ export const getJobMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -361,12 +389,16 @@ export const getJobMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'direction--string--tag--false',
isColumn: false,
isJSON: false,
key: 'direction',
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'interface--string--tag--false',
isColumn: false,
isJSON: false,
key: 'interface',
type: 'tag',
},

View File

@@ -122,6 +122,8 @@ function NamespaceDetails({
key: QUERY_KEYS.K8S_NAMESPACE_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s_namespace_name--string--resource--false',
},
op: '=',
@@ -148,6 +150,8 @@ function NamespaceDetails({
key: QUERY_KEYS.K8S_OBJECT_KIND,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s.object.kind--string--resource--false',
},
op: '=',
@@ -159,6 +163,8 @@ function NamespaceDetails({
key: QUERY_KEYS.K8S_OBJECT_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s.object.name--string--resource--false',
},
op: '=',

View File

@@ -155,6 +155,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sPodCpuUtilizationKey,
isColumn: true,
isJSON: false,
key: k8sPodCpuUtilizationKey,
type: 'Gauge',
},
@@ -169,6 +171,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -194,6 +198,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sContainerCpuRequestKey,
isColumn: true,
isJSON: false,
key: k8sContainerCpuRequestKey,
type: 'Gauge',
},
@@ -208,6 +214,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -233,6 +241,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sPodCpuUtilizationKey,
isColumn: true,
isJSON: false,
key: k8sPodCpuUtilizationKey,
type: 'Gauge',
},
@@ -247,6 +257,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -272,6 +284,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sPodCpuUtilizationKey,
isColumn: true,
isJSON: false,
key: k8sPodCpuUtilizationKey,
type: 'Gauge',
},
@@ -286,6 +300,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -344,6 +360,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sPodMemoryUsageKey,
isColumn: true,
isJSON: false,
key: k8sPodMemoryUsageKey,
type: 'Gauge',
},
@@ -358,6 +376,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -383,6 +403,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sContainerMemoryRequestKey,
isColumn: true,
isJSON: false,
key: k8sContainerMemoryRequestKey,
type: 'Gauge',
},
@@ -397,6 +419,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -422,6 +446,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sPodMemoryWorkingSetKey,
isColumn: true,
isJSON: false,
key: k8sPodMemoryWorkingSetKey,
type: 'Gauge',
},
@@ -436,6 +462,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -461,6 +489,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sPodMemoryRssKey,
isColumn: true,
isJSON: false,
key: k8sPodMemoryRssKey,
type: 'Gauge',
},
@@ -475,6 +505,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -500,6 +532,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sPodMemoryUsageKey,
isColumn: true,
isJSON: false,
key: k8sPodMemoryUsageKey,
type: 'Gauge',
},
@@ -514,6 +548,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -539,6 +575,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sPodMemoryUsageKey,
isColumn: true,
isJSON: false,
key: k8sPodMemoryUsageKey,
type: 'Gauge',
},
@@ -553,6 +591,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -611,6 +651,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sPodCpuUtilizationKey,
isColumn: true,
isJSON: false,
key: k8sPodCpuUtilizationKey,
type: 'Gauge',
},
@@ -625,6 +667,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -639,6 +683,8 @@ export const getNamespaceMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: k8sPodNameKey,
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -690,6 +736,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sPodMemoryUsageKey,
isColumn: true,
isJSON: false,
key: k8sPodMemoryUsageKey,
type: 'Gauge',
},
@@ -704,6 +752,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -718,6 +768,8 @@ export const getNamespaceMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: k8sPodNameKey,
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -769,6 +821,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sPodNetworkIoKey,
isColumn: true,
isJSON: false,
key: k8sPodNetworkIoKey,
type: 'Sum',
},
@@ -783,6 +837,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -797,12 +853,16 @@ export const getNamespaceMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'interface',
isColumn: false,
isJSON: false,
key: 'interface',
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'direction',
isColumn: false,
isJSON: false,
key: 'direction',
type: 'tag',
},
@@ -854,6 +914,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.String,
id: k8sPodNetworkErrorsKey,
isColumn: true,
isJSON: false,
key: k8sPodNetworkErrorsKey,
type: 'Sum',
},
@@ -868,6 +930,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -882,12 +946,16 @@ export const getNamespaceMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'interface',
isColumn: false,
isJSON: false,
key: 'interface',
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'direction',
isColumn: false,
isJSON: false,
key: 'direction',
type: 'tag',
},
@@ -939,6 +1007,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sStatefulsetCurrentPodsKey,
isColumn: true,
isJSON: false,
key: k8sStatefulsetCurrentPodsKey,
type: 'Gauge',
},
@@ -953,6 +1023,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sStatefulsetNameKey,
isColumn: false,
isJSON: false,
key: k8sStatefulsetNameKey,
type: 'tag',
},
@@ -967,6 +1039,8 @@ export const getNamespaceMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: k8sStatefulsetNameKey,
isColumn: false,
isJSON: false,
key: k8sStatefulsetNameKey,
type: 'tag',
},
@@ -985,6 +1059,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sStatefulsetDesiredPodsKey,
isColumn: true,
isJSON: false,
key: k8sStatefulsetDesiredPodsKey,
type: 'Gauge',
},
@@ -999,6 +1075,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1013,6 +1091,8 @@ export const getNamespaceMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: k8sStatefulsetNameKey,
isColumn: false,
isJSON: false,
key: k8sStatefulsetNameKey,
type: 'tag',
},
@@ -1031,6 +1111,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sStatefulsetUpdatedPodsKey,
isColumn: true,
isJSON: false,
key: k8sStatefulsetUpdatedPodsKey,
type: 'Gauge',
},
@@ -1045,6 +1127,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1059,6 +1143,8 @@ export const getNamespaceMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: k8sStatefulsetNameKey,
isColumn: false,
isJSON: false,
key: k8sStatefulsetNameKey,
type: 'tag',
},
@@ -1110,6 +1196,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sReplicasetDesiredKey,
isColumn: true,
isJSON: false,
key: k8sReplicasetDesiredKey,
type: 'Gauge',
},
@@ -1124,6 +1212,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1138,6 +1228,8 @@ export const getNamespaceMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: k8sReplicasetNameKey,
isColumn: false,
isJSON: false,
key: k8sReplicasetNameKey,
type: 'tag',
},
@@ -1162,6 +1254,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sReplicasetAvailableKey,
isColumn: true,
isJSON: false,
key: k8sReplicasetAvailableKey,
type: 'Gauge',
},
@@ -1176,6 +1270,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1190,6 +1286,8 @@ export const getNamespaceMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: k8sReplicasetNameKey,
isColumn: false,
isJSON: false,
key: k8sReplicasetNameKey,
type: 'tag',
},
@@ -1247,6 +1345,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sDaemonsetDesiredScheduledNamespacesKey,
isColumn: true,
isJSON: false,
key: k8sDaemonsetDesiredScheduledNamespacesKey,
type: 'Gauge',
},
@@ -1261,6 +1361,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1275,6 +1377,8 @@ export const getNamespaceMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: k8sDaemonsetNameKey,
isColumn: false,
isJSON: false,
key: k8sDaemonsetNameKey,
type: 'tag',
},
@@ -1293,6 +1397,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sDaemonsetCurrentScheduledNamespacesKey,
isColumn: true,
isJSON: false,
key: k8sDaemonsetCurrentScheduledNamespacesKey,
type: 'Gauge',
},
@@ -1307,6 +1413,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1321,6 +1429,8 @@ export const getNamespaceMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: k8sDaemonsetNameKey,
isColumn: false,
isJSON: false,
key: k8sDaemonsetNameKey,
type: 'tag',
},
@@ -1339,6 +1449,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sDaemonsetReadyNamespacesKey,
isColumn: true,
isJSON: false,
key: k8sDaemonsetReadyNamespacesKey,
type: 'Gauge',
},
@@ -1353,6 +1465,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1367,6 +1481,8 @@ export const getNamespaceMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: k8sDaemonsetNameKey,
isColumn: false,
isJSON: false,
key: k8sDaemonsetNameKey,
type: 'tag',
},
@@ -1385,6 +1501,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sDaemonsetMisscheduledNamespacesKey,
isColumn: true,
isJSON: false,
key: k8sDaemonsetMisscheduledNamespacesKey,
type: 'Gauge',
},
@@ -1399,6 +1517,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1413,6 +1533,8 @@ export const getNamespaceMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: k8sDaemonsetNameKey,
isColumn: false,
isJSON: false,
key: k8sDaemonsetNameKey,
type: 'tag',
},
@@ -1464,6 +1586,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sDeploymentDesiredKey,
isColumn: true,
isJSON: false,
key: k8sDeploymentDesiredKey,
type: 'Gauge',
},
@@ -1478,6 +1602,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1492,6 +1618,8 @@ export const getNamespaceMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: k8sDeploymentNameKey,
isColumn: false,
isJSON: false,
key: k8sDeploymentNameKey,
type: 'tag',
},
@@ -1510,6 +1638,8 @@ export const getNamespaceMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: k8sDeploymentAvailableKey,
isColumn: true,
isJSON: false,
key: k8sDeploymentAvailableKey,
type: 'Gauge',
},
@@ -1524,6 +1654,8 @@ export const getNamespaceMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: k8sNamespaceNameKey,
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1538,6 +1670,8 @@ export const getNamespaceMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: k8sDeploymentNameKey,
isColumn: false,
isJSON: false,
key: k8sDeploymentNameKey,
type: 'tag',
},

View File

@@ -122,6 +122,8 @@ function NodeDetails({
key: QUERY_KEYS.K8S_NODE_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s_node_name--string--resource--false',
},
op: '=',
@@ -148,6 +150,8 @@ function NodeDetails({
key: QUERY_KEYS.K8S_OBJECT_KIND,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s.object.kind--string--resource--false',
},
op: '=',
@@ -159,6 +163,8 @@ function NodeDetails({
key: QUERY_KEYS.K8S_OBJECT_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s.object.name--string--resource--false',
},
op: '=',

View File

@@ -148,6 +148,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_cpu_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeCpuUtilizationKey,
type: 'Gauge',
},
@@ -162,6 +164,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -187,6 +191,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_allocatable_cpu--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeAllocatableCpuKey,
type: 'Gauge',
},
@@ -201,6 +207,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -226,6 +234,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_container_cpu_request--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sContainerCpuRequestKey,
type: 'Gauge',
},
@@ -240,6 +250,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -265,6 +277,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_cpu_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeCpuUtilizationKey,
type: 'Gauge',
},
@@ -279,6 +293,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -304,6 +320,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_cpu_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeCpuUtilizationKey,
type: 'Gauge',
},
@@ -318,6 +336,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -376,6 +396,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_memory_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeMemoryUsageKey,
type: 'Gauge',
},
@@ -390,6 +412,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -415,6 +439,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_allocatable_memory--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeAllocatableMemoryKey,
type: 'Gauge',
},
@@ -429,6 +455,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -454,6 +482,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_container_memory_request--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sContainerMemoryRequestKey,
type: 'Gauge',
},
@@ -468,6 +498,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -493,6 +525,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_memory_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeMemoryUsageKey,
type: 'Gauge',
},
@@ -507,6 +541,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -532,6 +568,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_memory_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeMemoryUsageKey,
type: 'Gauge',
},
@@ -546,6 +584,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -571,6 +611,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_memory_working_set--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeMemoryWorkingSetKey,
type: 'Gauge',
},
@@ -585,6 +627,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -610,6 +654,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_memory_rss--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeMemoryRssKey,
type: 'Gauge',
},
@@ -624,6 +670,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -682,6 +730,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_cpu_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeCpuUtilizationKey,
type: 'Gauge',
},
@@ -696,6 +746,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -721,6 +773,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_allocatable_cpu--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeAllocatableCpuKey,
type: 'Gauge',
},
@@ -735,6 +789,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -760,6 +816,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_container_cpu_request--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sContainerCpuRequestKey,
type: 'Gauge',
},
@@ -774,6 +832,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -845,6 +905,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_memory_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeMemoryUsageKey,
type: 'Gauge',
},
@@ -859,6 +921,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -884,6 +948,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_allocatable_memory--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeAllocatableMemoryKey,
type: 'Gauge',
},
@@ -898,6 +964,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -923,6 +991,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_container_memory_request--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sContainerMemoryRequestKey,
type: 'Gauge',
},
@@ -937,6 +1007,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -1008,6 +1080,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_cpu_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodCpuUtilizationKey,
type: 'Gauge',
},
@@ -1022,6 +1096,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -1036,6 +1112,8 @@ export const getNodeMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -1087,6 +1165,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemoryUsageKey,
type: 'Gauge',
},
@@ -1101,6 +1181,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -1115,6 +1197,8 @@ export const getNodeMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -1166,6 +1250,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_network_errors--float64--Sum--true',
isColumn: true,
isJSON: false,
key: k8sNodeNetworkErrorsKey,
type: 'Sum',
},
@@ -1180,6 +1266,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -1194,12 +1282,16 @@ export const getNodeMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'direction--string--tag--false',
isColumn: false,
isJSON: false,
key: 'direction',
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'interface--string--tag--false',
isColumn: false,
isJSON: false,
key: 'interface',
type: 'tag',
},
@@ -1251,6 +1343,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_network_io--float64--Sum--true',
isColumn: true,
isJSON: false,
key: k8sNodeNetworkIoKey,
type: 'Sum',
},
@@ -1265,6 +1359,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -1279,12 +1375,16 @@ export const getNodeMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'direction--string--tag--false',
isColumn: false,
isJSON: false,
key: 'direction',
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'interface--string--tag--false',
isColumn: false,
isJSON: false,
key: 'interface',
type: 'tag',
},
@@ -1336,6 +1436,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_filesystem_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeFilesystemUsageKey,
type: 'Gauge',
},
@@ -1350,6 +1452,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -1375,6 +1479,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_filesystem_capacity--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeFilesystemCapacityKey,
type: 'Gauge',
},
@@ -1389,6 +1495,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -1414,6 +1522,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_filesystem_available--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeFilesystemAvailableKey,
type: 'Gauge',
},
@@ -1428,6 +1538,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -1486,6 +1598,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_filesystem_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeFilesystemUsageKey,
type: 'Gauge',
},
@@ -1500,6 +1614,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},
@@ -1525,6 +1641,8 @@ export const getNodeMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_node_filesystem_capacity--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sNodeFilesystemCapacityKey,
type: 'Gauge',
},
@@ -1539,6 +1657,8 @@ export const getNodeMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_node_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNodeNameKey,
type: 'tag',
},

View File

@@ -126,6 +126,8 @@ function PodDetails({
key: QUERY_KEYS.K8S_POD_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s_pod_name--string--resource--false',
},
op: '=',
@@ -137,6 +139,8 @@ function PodDetails({
key: QUERY_KEYS.K8S_NAMESPACE_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s_pod_name--string--resource--false',
},
op: '=',
@@ -163,6 +167,8 @@ function PodDetails({
key: QUERY_KEYS.K8S_OBJECT_KIND,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s.object.kind--string--resource--false',
},
op: '=',
@@ -174,6 +180,8 @@ function PodDetails({
key: QUERY_KEYS.K8S_OBJECT_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s.object.name--string--resource--false',
},
op: '=',

View File

@@ -187,6 +187,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_cpu_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodCpuUtilKey,
type: 'Gauge',
},
@@ -201,6 +203,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -212,6 +216,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -237,6 +243,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_cpu_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodCpuUtilKey,
type: 'Gauge',
},
@@ -251,6 +259,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -262,6 +272,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -287,6 +299,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_cpu_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodCpuUtilKey,
type: 'Gauge',
},
@@ -301,6 +315,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -312,6 +328,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -370,6 +388,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_cpu_request_utilization--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodCpuReqUtilKey,
type: 'Gauge',
},
@@ -384,6 +404,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -395,6 +417,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -420,6 +444,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_cpu_limit_utilization--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodCpuLimitUtilKey,
type: 'Gauge',
},
@@ -434,6 +460,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -445,6 +473,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -470,6 +500,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_cpu_request_utilization--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodCpuReqUtilKey,
type: 'Gauge',
},
@@ -484,6 +516,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -495,6 +529,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -520,6 +556,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_cpu_request_utilization--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodCpuReqUtilKey,
type: 'Gauge',
},
@@ -534,6 +572,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -545,6 +585,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -570,6 +612,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_cpu_limit_utilization--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodCpuLimitUtilKey,
type: 'Gauge',
},
@@ -584,6 +628,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -595,6 +641,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -620,6 +668,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_cpu_limit_utilization--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodCpuLimitUtilKey,
type: 'Gauge',
},
@@ -634,6 +684,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -645,6 +697,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -703,6 +757,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemUsageKey,
type: 'Gauge',
},
@@ -717,6 +773,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -728,6 +786,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -753,6 +813,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemUsageKey,
type: 'Gauge',
},
@@ -767,6 +829,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -778,6 +842,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -803,6 +869,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemUsageKey,
type: 'Gauge',
},
@@ -817,6 +885,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -828,6 +898,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -886,6 +958,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_request_utilization--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemReqUtilKey,
type: 'Gauge',
},
@@ -900,6 +974,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -911,6 +987,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -936,6 +1014,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_limit_utilization--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemLimitUtilKey,
type: 'Gauge',
},
@@ -950,6 +1030,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -961,6 +1043,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -986,6 +1070,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_request_utilization--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemReqUtilKey,
type: 'Gauge',
},
@@ -1000,6 +1086,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1011,6 +1099,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -1036,6 +1126,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_limit_utilization--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemLimitUtilKey,
type: 'Gauge',
},
@@ -1050,6 +1142,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1061,6 +1155,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -1086,6 +1182,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_request_utilization--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemReqUtilKey,
type: 'Gauge',
},
@@ -1100,6 +1198,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1111,6 +1211,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -1136,6 +1238,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_limit_utilization--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemLimitUtilKey,
type: 'Gauge',
},
@@ -1150,6 +1254,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1161,6 +1267,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -1219,6 +1327,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_rss--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemRssKey,
type: 'Gauge',
},
@@ -1233,6 +1343,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1244,6 +1356,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -1269,6 +1383,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_working_set--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemWorkingSetKey,
type: 'Gauge',
},
@@ -1283,6 +1399,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1294,6 +1412,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -1359,6 +1479,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_memory_major_page_faults--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodMemMajorPFKey,
type: 'Gauge',
},
@@ -1373,6 +1495,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1384,6 +1508,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -1442,6 +1568,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'container_cpu_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: containerCpuUtilKey,
type: 'Gauge',
},
@@ -1456,6 +1584,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1467,6 +1597,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -1481,6 +1613,8 @@ export const getPodMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_container_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sContainerNameKey,
type: 'tag',
},
@@ -1532,6 +1666,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'container_cpu_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: containerCpuUtilKey,
type: 'Gauge',
},
@@ -1546,6 +1682,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1557,6 +1695,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -1571,6 +1711,8 @@ export const getPodMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_container_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sContainerNameKey,
type: 'tag',
},
@@ -1589,6 +1731,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_container_cpu_request--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sContainerCpuRequestKey,
type: 'Gauge',
},
@@ -1603,6 +1747,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1614,6 +1760,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -1628,6 +1776,8 @@ export const getPodMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_container_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sContainerNameKey,
type: 'tag',
},
@@ -1646,6 +1796,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_container_cpu_limit--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sContainerCpuLimitKey,
type: 'Gauge',
},
@@ -1660,6 +1812,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1671,6 +1825,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -1685,6 +1841,8 @@ export const getPodMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_container_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sContainerNameKey,
type: 'tag',
},
@@ -1749,6 +1907,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'container_memory_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: containerMemUsageKey,
type: 'Gauge',
},
@@ -1763,6 +1923,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1774,6 +1936,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -1788,6 +1952,8 @@ export const getPodMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_container_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sContainerNameKey,
type: 'tag',
},
@@ -1806,6 +1972,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'container_memory_working_set--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: containerMemWorkingSetKey,
type: 'Gauge',
},
@@ -1820,6 +1988,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1831,6 +2001,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -1845,6 +2017,8 @@ export const getPodMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_container_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sContainerNameKey,
type: 'tag',
},
@@ -1863,6 +2037,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'container_memory_rss--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: containerMemRssKey,
type: 'Gauge',
},
@@ -1877,6 +2053,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1888,6 +2066,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -1902,6 +2082,8 @@ export const getPodMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_container_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sContainerNameKey,
type: 'tag',
},
@@ -1953,6 +2135,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'container_memory_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: containerMemUsageKey,
type: 'Gauge',
},
@@ -1967,6 +2151,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -1978,6 +2164,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -1992,6 +2180,8 @@ export const getPodMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_container_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sContainerNameKey,
type: 'tag',
},
@@ -2010,6 +2200,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_container_memory_request--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sContainerMemoryRequestKey,
type: 'Gauge',
},
@@ -2024,6 +2216,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -2035,6 +2229,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -2049,6 +2245,8 @@ export const getPodMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_container_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sContainerNameKey,
type: 'tag',
},
@@ -2067,6 +2265,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_container_memory_limit--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sContainerMemoryLimitKey,
type: 'Gauge',
},
@@ -2081,6 +2281,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -2092,6 +2294,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -2106,6 +2310,8 @@ export const getPodMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'k8s_container_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sContainerNameKey,
type: 'tag',
},
@@ -2170,6 +2376,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_network_io--float64--Sum--true',
isColumn: true,
isJSON: false,
key: k8sPodNetworkIoKey,
type: 'Sum',
},
@@ -2184,6 +2392,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -2195,6 +2405,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -2209,12 +2421,16 @@ export const getPodMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'interface--string--tag--false',
isColumn: false,
isJSON: false,
key: 'interface',
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'direction--string--tag--false',
isColumn: false,
isJSON: false,
key: 'direction',
type: 'tag',
},
@@ -2266,6 +2482,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_network_errors--float64--Sum--true',
isColumn: true,
isJSON: false,
key: k8sPodNetworkErrorsKey,
type: 'Sum',
},
@@ -2280,6 +2498,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -2291,6 +2511,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -2305,12 +2527,16 @@ export const getPodMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'interface--string--tag--false',
isColumn: false,
isJSON: false,
key: 'interface',
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'direction--string--tag--false',
isColumn: false,
isJSON: false,
key: 'direction',
type: 'tag',
},
@@ -2362,6 +2588,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_filesystem_capacity--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodFilesystemCapacityKey,
type: 'Gauge',
},
@@ -2376,6 +2604,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -2387,6 +2617,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -2412,6 +2644,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_filesystem_available--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodFilesystemAvailableKey,
type: 'Gauge',
},
@@ -2426,6 +2660,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -2437,6 +2673,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -2462,6 +2700,8 @@ export const getPodMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_pod_filesystem_usage--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sPodFilesystemUsageKey,
type: 'Gauge',
},
@@ -2476,6 +2716,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -2487,6 +2729,8 @@ export const getPodMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_pod_name--string--tag--false',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},

View File

@@ -121,6 +121,8 @@ function StatefulSetDetails({
key: QUERY_KEYS.K8S_STATEFUL_SET_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s_statefulset_name--string--resource--false',
},
op: '=',
@@ -132,6 +134,8 @@ function StatefulSetDetails({
key: QUERY_KEYS.K8S_NAMESPACE_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s_namespace_name--string--resource--false',
},
op: '=',
@@ -162,6 +166,8 @@ function StatefulSetDetails({
key: QUERY_KEYS.K8S_OBJECT_KIND,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s.object.kind--string--resource--false',
},
op: '=',
@@ -173,6 +179,8 @@ function StatefulSetDetails({
key: QUERY_KEYS.K8S_OBJECT_NAME,
dataType: DataTypes.String,
type: 'resource',
isColumn: false,
isJSON: false,
id: 'k8s.object.name--string--resource--false',
},
op: '=',

View File

@@ -98,6 +98,8 @@ export const getStatefulSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'cpu_usage',
isColumn: true,
isJSON: false,
key: k8sPodCpuUtilKey,
type: 'Gauge',
},
@@ -112,6 +114,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ss_name',
isColumn: false,
isJSON: false,
key: k8sStatefulSetNameKey,
type: 'tag',
},
@@ -123,6 +127,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ns_name',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -148,6 +154,8 @@ export const getStatefulSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'cpu_request',
isColumn: true,
isJSON: false,
key: k8sContainerCpuRequestKey,
type: 'Gauge',
},
@@ -162,6 +170,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'pod_name',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -173,6 +183,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ns_name',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -198,6 +210,8 @@ export const getStatefulSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'cpu_limit',
isColumn: true,
isJSON: false,
key: k8sContainerCpuLimitKey,
type: 'Gauge',
},
@@ -212,6 +226,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'pod_name',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -223,6 +239,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ns_name',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -267,6 +285,8 @@ export const getStatefulSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'cpu_req_util',
isColumn: true,
isJSON: false,
key: k8sPodCpuReqUtilKey,
type: 'Gauge',
},
@@ -281,6 +301,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ss_name',
isColumn: false,
isJSON: false,
key: k8sStatefulSetNameKey,
type: 'tag',
},
@@ -292,6 +314,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ns_name',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -317,6 +341,8 @@ export const getStatefulSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'cpu_limit_util',
isColumn: true,
isJSON: false,
key: k8sPodCpuLimitUtilKey,
type: 'Gauge',
},
@@ -331,6 +357,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ss_name',
isColumn: false,
isJSON: false,
key: k8sStatefulSetNameKey,
type: 'tag',
},
@@ -342,6 +370,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ns_name',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -386,6 +416,8 @@ export const getStatefulSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'mem_usage',
isColumn: true,
isJSON: false,
key: k8sPodMemUsageKey,
type: 'Gauge',
},
@@ -400,6 +432,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ss_name',
isColumn: false,
isJSON: false,
key: k8sStatefulSetNameKey,
type: 'tag',
},
@@ -411,6 +445,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ns_name',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -436,6 +472,8 @@ export const getStatefulSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'mem_request',
isColumn: true,
isJSON: false,
key: k8sContainerMemRequestKey,
type: 'Gauge',
},
@@ -450,6 +488,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'pod_name',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -461,6 +501,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ns_name',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -486,6 +528,8 @@ export const getStatefulSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'mem_limit',
isColumn: true,
isJSON: false,
key: k8sContainerMemLimitKey,
type: 'Gauge',
},
@@ -500,6 +544,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'pod_name',
isColumn: false,
isJSON: false,
key: k8sPodNameKey,
type: 'tag',
},
@@ -511,6 +557,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ns_name',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -555,6 +603,8 @@ export const getStatefulSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'mem_req_util',
isColumn: true,
isJSON: false,
key: k8sPodMemReqUtilKey,
type: 'Gauge',
},
@@ -569,6 +619,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ss_name',
isColumn: false,
isJSON: false,
key: k8sStatefulSetNameKey,
type: 'tag',
},
@@ -580,6 +632,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ns_name',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -605,6 +659,8 @@ export const getStatefulSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'mem_limit_util',
isColumn: true,
isJSON: false,
key: k8sPodMemLimitUtilKey,
type: 'Gauge',
},
@@ -619,6 +675,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ss_name',
isColumn: false,
isJSON: false,
key: k8sStatefulSetNameKey,
type: 'tag',
},
@@ -630,6 +688,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ns_name',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -674,6 +734,8 @@ export const getStatefulSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'net_io',
isColumn: true,
isJSON: false,
key: k8sPodNetworkIoKey,
type: 'Sum',
},
@@ -688,6 +750,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ss_name',
isColumn: false,
isJSON: false,
key: k8sStatefulSetNameKey,
type: 'tag',
},
@@ -699,6 +763,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ns_name',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -713,12 +779,16 @@ export const getStatefulSetMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'direction',
isColumn: false,
isJSON: false,
key: 'direction',
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'interface',
isColumn: false,
isJSON: false,
key: 'interface',
type: 'tag',
},
@@ -756,6 +826,8 @@ export const getStatefulSetMetricsQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'net_err',
isColumn: true,
isJSON: false,
key: k8sPodNetworkErrorsKey,
type: 'Sum',
},
@@ -770,6 +842,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ss_name',
isColumn: false,
isJSON: false,
key: k8sStatefulSetNameKey,
type: 'tag',
},
@@ -781,6 +855,8 @@ export const getStatefulSetMetricsQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'ns_name',
isColumn: false,
isJSON: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -795,12 +871,16 @@ export const getStatefulSetMetricsQueryPayload = (
{
dataType: DataTypes.String,
id: 'direction',
isColumn: false,
isJSON: false,
key: 'direction',
type: 'tag',
},
{
dataType: DataTypes.String,
id: 'interface',
isColumn: false,
isJSON: false,
key: 'interface',
type: 'tag',
},

View File

@@ -78,6 +78,8 @@ export const getVolumeQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_volume_available--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sVolumeAvailableKey,
type: 'Gauge',
},
@@ -92,6 +94,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -103,6 +106,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -114,6 +118,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_volume_type--string--tag--false',
isColumn: false,
key: k8sVolumeTypeKey,
type: 'tag',
},
@@ -125,6 +130,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_persistentvolumeclaim_name--string--tag--false',
isColumn: false,
key: k8sPVCNameKey,
type: 'tag',
},
@@ -169,6 +175,8 @@ export const getVolumeQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_volume_capacity--float64--Gauge--true',
isColumn: true,
isJSON: false,
key: k8sVolumeCapacityKey,
type: 'Gauge',
},
@@ -183,6 +191,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -194,6 +203,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -205,6 +215,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_volume_type--string--tag--false',
isColumn: false,
key: k8sVolumeTypeKey,
type: 'tag',
},
@@ -216,6 +227,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_persistentvolumeclaim_name--string--tag--false',
isColumn: false,
key: k8sPVCNameKey,
type: 'tag',
},
@@ -260,6 +272,7 @@ export const getVolumeQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_volume_inodes_used--float64----true',
isColumn: true,
key: k8sVolumeInodesUsedKey,
type: '',
},
@@ -274,6 +287,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -285,6 +299,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -296,6 +311,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_volume_type--string--tag--false',
isColumn: false,
key: k8sVolumeTypeKey,
type: 'tag',
},
@@ -307,6 +323,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_persistentvolumeclaim_name--string--tag--false',
isColumn: false,
key: k8sPVCNameKey,
type: 'tag',
},
@@ -351,6 +368,7 @@ export const getVolumeQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_volume_inodes--float64----true',
isColumn: true,
key: k8sVolumeInodesKey,
type: '',
},
@@ -365,6 +383,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -376,6 +395,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -387,6 +407,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_volume_type--string--tag--false',
isColumn: false,
key: k8sVolumeTypeKey,
type: 'tag',
},
@@ -398,6 +419,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_persistentvolumeclaim_name--string--tag--false',
isColumn: false,
key: k8sPVCNameKey,
type: 'tag',
},
@@ -442,6 +464,7 @@ export const getVolumeQueryPayload = (
aggregateAttribute: {
dataType: DataTypes.Float64,
id: 'k8s_volume_inodes_free--float64----true',
isColumn: true,
key: k8sVolumeInodesFreeKey,
type: '',
},
@@ -456,6 +479,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_cluster_name--string--tag--false',
isColumn: false,
key: k8sClusterNameKey,
type: 'tag',
},
@@ -467,6 +491,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_namespace_name--string--tag--false',
isColumn: false,
key: k8sNamespaceNameKey,
type: 'tag',
},
@@ -478,6 +503,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_volume_type--string--tag--false',
isColumn: false,
key: k8sVolumeTypeKey,
type: 'tag',
},
@@ -489,6 +515,7 @@ export const getVolumeQueryPayload = (
key: {
dataType: DataTypes.String,
id: 'k8s_persistentvolumeclaim_name--string--tag--false',
isColumn: false,
key: k8sPVCNameKey,
type: 'tag',
},

Some files were not shown because too many files have changed in this diff Show More