Compare commits

..

1 Commits

Author SHA1 Message Date
Nikhil Soni
cd00d71478 fix: handle url.full and http.url in third-party API endpoint count
Use two queries combined via formula to count distinct endpoints
across both semconv versions (url.full and http.url).
This avoids missing count for endpoint if only url.full is used.

Alternative a simple coalesce in count_distinct would have fixed
this but it would require substantial query builder refactoring
since it's not supported currently.
2026-01-27 15:29:44 +05:30
1793 changed files with 18563 additions and 66375 deletions

View File

@@ -41,23 +41,31 @@ services:
interval: 30s interval: 30s
timeout: 5s timeout: 5s
retries: 3 retries: 3
telemetrystore-migrator: schema-migrator-sync:
image: signoz/signoz-otel-collector:v0.142.0 image: signoz/signoz-schema-migrator:v0.129.12
container_name: telemetrystore-migrator container_name: schema-migrator-sync
environment:
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_DSN=tcp://clickhouse:9000
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_CLUSTER=cluster
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_REPLICATION=true
- SIGNOZ_OTEL_COLLECTOR_TIMEOUT=10m
entrypoint:
- /bin/sh
command: command:
- -c - sync
- | - --cluster-name=cluster
/signoz-otel-collector migrate bootstrap && - --dsn=tcp://clickhouse:9000
/signoz-otel-collector migrate sync up && - --replication=true
/signoz-otel-collector migrate async up - --up=
depends_on: depends_on:
clickhouse: clickhouse:
condition: service_healthy condition: service_healthy
restart: on-failure restart: on-failure
schema-migrator-async:
image: signoz/signoz-schema-migrator:v0.129.12
container_name: schema-migrator-async
command:
- async
- --cluster-name=cluster
- --dsn=tcp://clickhouse:9000
- --replication=true
- --up=
depends_on:
clickhouse:
condition: service_healthy
schema-migrator-sync:
condition: service_completed_successfully
restart: on-failure

View File

@@ -1,23 +1,15 @@
services: services:
signoz-otel-collector: signoz-otel-collector:
image: signoz/signoz-otel-collector:v0.142.0 image: signoz/signoz-otel-collector:v0.129.6
container_name: signoz-otel-collector-dev container_name: signoz-otel-collector-dev
entrypoint:
- /bin/sh
command: command:
- -c - --config=/etc/otel-collector-config.yaml
- | - --feature-gates=-pkg.translator.prometheus.NormalizeName
/signoz-otel-collector migrate sync check &&
/signoz-otel-collector --config=/etc/otel-collector-config.yaml
volumes: volumes:
- ./otel-collector-config.yaml:/etc/otel-collector-config.yaml - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
environment: environment:
- OTEL_RESOURCE_ATTRIBUTES=host.name=signoz-host,os.type=linux - OTEL_RESOURCE_ATTRIBUTES=host.name=signoz-host,os.type=linux
- LOW_CARDINAL_EXCEPTION_GROUPING=false - LOW_CARDINAL_EXCEPTION_GROUPING=false
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_DSN=tcp://clickhouse:9000
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_CLUSTER=cluster
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_REPLICATION=true
- SIGNOZ_OTEL_COLLECTOR_TIMEOUT=10m
ports: ports:
- "4317:4317" # OTLP gRPC receiver - "4317:4317" # OTLP gRPC receiver
- "4318:4318" # OTLP HTTP receiver - "4318:4318" # OTLP HTTP receiver

13
.github/CODEOWNERS vendored
View File

@@ -43,12 +43,6 @@
/pkg/analytics/ @vikrantgupta25 /pkg/analytics/ @vikrantgupta25
/pkg/statsreporter/ @vikrantgupta25 /pkg/statsreporter/ @vikrantgupta25
# Emailing Owners
/pkg/emailing/ @vikrantgupta25
/pkg/types/emailtypes/ @vikrantgupta25
/templates/email/ @vikrantgupta25
# Querier Owners # Querier Owners
/pkg/querier/ @srikanthccv /pkg/querier/ @srikanthccv
@@ -116,7 +110,6 @@
# Dashboard Owners # Dashboard Owners
/frontend/src/hooks/dashboard/ @SigNoz/pulse-frontend /frontend/src/hooks/dashboard/ @SigNoz/pulse-frontend
/frontend/src/providers/Dashboard/ @SigNoz/pulse-frontend
## Dashboard Types ## Dashboard Types
@@ -138,9 +131,3 @@
/frontend/src/pages/PublicDashboard/ @SigNoz/pulse-frontend /frontend/src/pages/PublicDashboard/ @SigNoz/pulse-frontend
/frontend/src/container/PublicDashboardContainer/ @SigNoz/pulse-frontend /frontend/src/container/PublicDashboardContainer/ @SigNoz/pulse-frontend
## Dashboard Libs + Components
/frontend/src/lib/uPlotV2/ @SigNoz/pulse-frontend
/frontend/src/lib/dashboard/ @SigNoz/pulse-frontend
/frontend/src/lib/dashboardVariables/ @SigNoz/pulse-frontend
/frontend/src/components/NewSelect/ @SigNoz/pulse-frontend

View File

@@ -70,7 +70,6 @@ jobs:
echo 'PYLON_APP_ID="${{ secrets.PYLON_APP_ID }}"' >> frontend/.env echo 'PYLON_APP_ID="${{ secrets.PYLON_APP_ID }}"' >> frontend/.env
echo 'APPCUES_APP_ID="${{ secrets.APPCUES_APP_ID }}"' >> frontend/.env echo 'APPCUES_APP_ID="${{ secrets.APPCUES_APP_ID }}"' >> frontend/.env
echo 'PYLON_IDENTITY_SECRET="${{ secrets.PYLON_IDENTITY_SECRET }}"' >> frontend/.env echo 'PYLON_IDENTITY_SECRET="${{ secrets.PYLON_IDENTITY_SECRET }}"' >> frontend/.env
echo 'DOCS_BASE_URL="https://signoz.io"' >> frontend/.env
- name: cache-dotenv - name: cache-dotenv
uses: actions/cache@v4 uses: actions/cache@v4
with: with:

View File

@@ -69,7 +69,6 @@ jobs:
echo 'PYLON_APP_ID="${{ secrets.NP_PYLON_APP_ID }}"' >> frontend/.env echo 'PYLON_APP_ID="${{ secrets.NP_PYLON_APP_ID }}"' >> frontend/.env
echo 'APPCUES_APP_ID="${{ secrets.NP_APPCUES_APP_ID }}"' >> frontend/.env echo 'APPCUES_APP_ID="${{ secrets.NP_APPCUES_APP_ID }}"' >> frontend/.env
echo 'PYLON_IDENTITY_SECRET="${{ secrets.NP_PYLON_IDENTITY_SECRET }}"' >> frontend/.env echo 'PYLON_IDENTITY_SECRET="${{ secrets.NP_PYLON_IDENTITY_SECRET }}"' >> frontend/.env
echo 'DOCS_BASE_URL="https://staging.signoz.io"' >> frontend/.env
- name: cache-dotenv - name: cache-dotenv
uses: actions/cache@v4 uses: actions/cache@v4
with: with:

View File

@@ -93,13 +93,3 @@ jobs:
run: | run: |
go run cmd/enterprise/*.go generate openapi go run cmd/enterprise/*.go generate openapi
git diff --compact-summary --exit-code || (echo; echo "Unexpected difference in openapi spec. Run go run cmd/enterprise/*.go generate openapi locally and commit."; exit 1) git diff --compact-summary --exit-code || (echo; echo "Unexpected difference in openapi spec. Run go run cmd/enterprise/*.go generate openapi locally and commit."; exit 1)
- name: node-install
uses: actions/setup-node@v5
with:
node-version: "22"
- name: install-frontend
run: cd frontend && yarn install
- name: generate-api-clients
run: |
cd frontend && yarn generate:api
git diff --compact-summary --exit-code || (echo; echo "Unexpected difference in generated api clients. Run yarn generate:api in frontend/ locally and commit."; exit 1)

View File

@@ -3,8 +3,8 @@ name: gor-signoz-community
on: on:
push: push:
tags: tags:
- "v[0-9]+.[0-9]+.[0-9]+" - 'v[0-9]+.[0-9]+.[0-9]+'
- "v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+" - 'v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+'
permissions: permissions:
contents: write contents: write
@@ -21,10 +21,6 @@ jobs:
shell: bash shell: bash
run: | run: |
echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_ENV echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
- name: node-setup
uses: actions/setup-node@v5
with:
node-version: "22"
- name: build-frontend - name: build-frontend
run: make js-build run: make js-build
- name: upload-frontend-artifact - name: upload-frontend-artifact
@@ -93,7 +89,7 @@ jobs:
uses: goreleaser/goreleaser-action@v6 uses: goreleaser/goreleaser-action@v6
with: with:
distribution: goreleaser-pro distribution: goreleaser-pro
version: "~> v2" version: '~> v2'
args: release --config ${{ env.CONFIG_PATH }} --clean --split args: release --config ${{ env.CONFIG_PATH }} --clean --split
workdir: . workdir: .
env: env:
@@ -151,7 +147,7 @@ jobs:
if: steps.cache-linux.outputs.cache-hit == 'true' && steps.cache-darwin.outputs.cache-hit == 'true' # only run if caches hit if: steps.cache-linux.outputs.cache-hit == 'true' && steps.cache-darwin.outputs.cache-hit == 'true' # only run if caches hit
with: with:
distribution: goreleaser-pro distribution: goreleaser-pro
version: "~> v2" version: '~> v2'
args: continue --merge args: continue --merge
workdir: . workdir: .
env: env:

View File

@@ -3,8 +3,8 @@ name: gor-signoz
on: on:
push: push:
tags: tags:
- "v[0-9]+.[0-9]+.[0-9]+" - 'v[0-9]+.[0-9]+.[0-9]+'
- "v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+" - 'v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+'
permissions: permissions:
contents: write contents: write
@@ -36,13 +36,8 @@ jobs:
echo 'PYLON_APP_ID="${{ secrets.PYLON_APP_ID }}"' >> .env echo 'PYLON_APP_ID="${{ secrets.PYLON_APP_ID }}"' >> .env
echo 'APPCUES_APP_ID="${{ secrets.APPCUES_APP_ID }}"' >> .env echo 'APPCUES_APP_ID="${{ secrets.APPCUES_APP_ID }}"' >> .env
echo 'PYLON_IDENTITY_SECRET="${{ secrets.PYLON_IDENTITY_SECRET }}"' >> .env echo 'PYLON_IDENTITY_SECRET="${{ secrets.PYLON_IDENTITY_SECRET }}"' >> .env
echo 'DOCS_BASE_URL="https://signoz.io"' >> .env
- name: node-setup
uses: actions/setup-node@v5
with:
node-version: "22"
- name: build-frontend - name: build-frontend
run: make js-build run: make js-build
- name: upload-frontend-artifact - name: upload-frontend-artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
@@ -109,7 +104,7 @@ jobs:
uses: goreleaser/goreleaser-action@v6 uses: goreleaser/goreleaser-action@v6
with: with:
distribution: goreleaser-pro distribution: goreleaser-pro
version: "~> v2" version: '~> v2'
args: release --config ${{ env.CONFIG_PATH }} --clean --split args: release --config ${{ env.CONFIG_PATH }} --clean --split
workdir: . workdir: .
env: env:
@@ -166,7 +161,7 @@ jobs:
if: steps.cache-linux.outputs.cache-hit == 'true' && steps.cache-darwin.outputs.cache-hit == 'true' # only run if caches hit if: steps.cache-linux.outputs.cache-hit == 'true' && steps.cache-darwin.outputs.cache-hit == 'true' # only run if caches hit
with: with:
distribution: goreleaser-pro distribution: goreleaser-pro
version: "~> v2" version: '~> v2'
args: continue --merge args: continue --merge
workdir: . workdir: .
env: env:

View File

@@ -42,21 +42,18 @@ jobs:
- callbackauthn - callbackauthn
- cloudintegrations - cloudintegrations
- dashboard - dashboard
- logspipelines
- preference
- querier - querier
- role
- ttl - ttl
- alerts - preference
- ingestionkeys - logspipelines
sqlstore-provider: sqlstore-provider:
- postgres - postgres
- sqlite - sqlite
clickhouse-version: clickhouse-version:
- 25.5.6 - 25.5.6
- 25.12.5 - 25.10.1
schema-migrator-version: schema-migrator-version:
- v0.142.0 - v0.129.7
postgres-version: postgres-version:
- 15 - 15
if: | if: |

8
.gitignore vendored
View File

@@ -1,11 +1,8 @@
node_modules node_modules
# editor
.vscode .vscode
!.vscode/settings.json !.vscode/settings.json
.zed
.idea
deploy/docker/environment_tiny/common_test deploy/docker/environment_tiny/common_test
frontend/node_modules frontend/node_modules
@@ -34,6 +31,8 @@ frontend/yarn-debug.log*
frontend/yarn-error.log* frontend/yarn-error.log*
frontend/src/constants/env.ts frontend/src/constants/env.ts
.idea
**/build **/build
**/storage **/storage
**/locust-scripts/__pycache__/ **/locust-scripts/__pycache__/
@@ -58,6 +57,7 @@ bin/
.local/ .local/
*/query-service/queries.active */query-service/queries.active
ee/query-service/db ee/query-service/db
# e2e # e2e
e2e/node_modules/ e2e/node_modules/
@@ -230,3 +230,5 @@ cython_debug/
pyrightconfig.json pyrightconfig.json
# cursor files
frontend/.cursor/

10
.vscode/settings.json vendored
View File

@@ -1,7 +1,5 @@
{ {
"eslint.workingDirectories": [ "eslint.workingDirectories": ["./frontend"],
"./frontend"
],
"editor.formatOnSave": true, "editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode", "editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": { "editor.codeActionsOnSave": {
@@ -11,11 +9,5 @@
"[go]": { "[go]": {
"editor.formatOnSave": true, "editor.formatOnSave": true,
"editor.defaultFormatter": "golang.go" "editor.defaultFormatter": "golang.go"
},
"[sql]": {
"editor.defaultFormatter": "adpyke.vscode-sql-formatter"
},
"[html]": {
"editor.defaultFormatter": "vscode.html-language-features"
} }
} }

View File

@@ -176,6 +176,25 @@ Wir haben Benchmarks veröffentlicht, die Loki mit SigNoz vergleichen. Schauen S
Wir ❤️ Beiträge zum Projekt, egal ob große oder kleine. Bitte lies dir zuerst die [CONTRIBUTING.md](CONTRIBUTING.md), durch, bevor du anfängst, Beiträge zu SigNoz zu machen. Wir ❤️ Beiträge zum Projekt, egal ob große oder kleine. Bitte lies dir zuerst die [CONTRIBUTING.md](CONTRIBUTING.md), durch, bevor du anfängst, Beiträge zu SigNoz zu machen.
Du bist dir nicht sicher, wie du anfangen sollst? Schreib uns einfach auf dem #contributing Kanal in unserer [slack community](https://signoz.io/slack) Du bist dir nicht sicher, wie du anfangen sollst? Schreib uns einfach auf dem #contributing Kanal in unserer [slack community](https://signoz.io/slack)
### Unsere Projektbetreuer
#### Backend
- [Ankit Nayan](https://github.com/ankitnayan)
- [Nityananda Gohain](https://github.com/nityanandagohain)
- [Srikanth Chekuri](https://github.com/srikanthccv)
- [Vishal Sharma](https://github.com/makeavish)
#### Frontend
- [Palash Gupta](https://github.com/palashgdev)
- [Yunus M](https://github.com/YounixM)
- [Rajat Dabade](https://github.com/Rajat-Dabade)
#### DevOps
- [Prashant Shahi](https://github.com/prashant-shahi)
<br /><br /> <br /><br />
## Dokumentation ## Dokumentation

View File

@@ -66,17 +66,6 @@ Read [more](https://signoz.io/metrics-and-dashboards/).
![metrics-n-dashboards-cover](https://github.com/user-attachments/assets/a536fd71-1d2c-4681-aa7e-516d754c47a5) ![metrics-n-dashboards-cover](https://github.com/user-attachments/assets/a536fd71-1d2c-4681-aa7e-516d754c47a5)
### LLM Observability
Monitor and debug your LLM applications with comprehensive observability. Track LLM calls, analyze token usage, monitor performance, and gain insights into your AI application's behavior in production.
SigNoz LLM observability helps you understand how your language models are performing, identify issues with prompts and responses, track token usage and costs, and optimize your AI applications for better performance and reliability.
[Get started with LLM Observability →](https://signoz.io/docs/llm-observability/)
![llm-observability-cover](https://github.com/user-attachments/assets/a6cc0ca3-59df-48f9-9c16-7c843fccff96)
### Alerts ### Alerts
Use alerts in SigNoz to get notified when anything unusual happens in your application. You can set alerts on any type of telemetry signal (logs, metrics, traces), create thresholds and set up a notification channel to get notified. Advanced features like alert history and anomaly detection can help you create smarter alerts. Use alerts in SigNoz to get notified when anything unusual happens in your application. You can set alerts on any type of telemetry signal (logs, metrics, traces), create thresholds and set up a notification channel to get notified. Advanced features like alert history and anomaly detection can help you create smarter alerts.
@@ -221,6 +210,34 @@ We ❤️ contributions big or small. Please read [CONTRIBUTING.md](CONTRIBUTING
Not sure how to get started? Just ping us on `#contributing` in our [slack community](https://signoz.io/slack) Not sure how to get started? Just ping us on `#contributing` in our [slack community](https://signoz.io/slack)
### Project maintainers
#### Backend
- [Ankit Nayan](https://github.com/ankitnayan)
- [Nityananda Gohain](https://github.com/nityanandagohain)
- [Srikanth Chekuri](https://github.com/srikanthccv)
- [Vishal Sharma](https://github.com/makeavish)
- [Shivanshu Raj Shrivastava](https://github.com/shivanshuraj1333)
- [Ekansh Gupta](https://github.com/eKuG)
- [Aniket Agarwal](https://github.com/aniketio-ctrl)
#### Frontend
- [Yunus M](https://github.com/YounixM)
- [Vikrant Gupta](https://github.com/vikrantgupta25)
- [Sagar Rajput](https://github.com/SagarRajput-7)
- [Shaheer Kochai](https://github.com/ahmadshaheer)
- [Amlan Kumar Nandy](https://github.com/amlannandy)
- [Sahil Khan](https://github.com/sawhil)
- [Aditya Singh](https://github.com/aks07)
- [Abhi Kumar](https://github.com/ahrefabhi)
#### DevOps
- [Prashant Shahi](https://github.com/prashant-shahi)
- [Vibhu Pandey](https://github.com/therealpandey)
<br /><br /> <br /><br />

View File

@@ -187,6 +187,25 @@ Jaeger 仅仅是一个分布式追踪系统。 但是 SigNoz 可以提供 metric
如果你不知道如何开始? 只需要在 [slack 社区](https://signoz.io/slack) 通过 `#contributing` 频道联系我们。 如果你不知道如何开始? 只需要在 [slack 社区](https://signoz.io/slack) 通过 `#contributing` 频道联系我们。
### 项目维护人员
#### 后端
- [Ankit Nayan](https://github.com/ankitnayan)
- [Nityananda Gohain](https://github.com/nityanandagohain)
- [Srikanth Chekuri](https://github.com/srikanthccv)
- [Vishal Sharma](https://github.com/makeavish)
#### 前端
- [Palash Gupta](https://github.com/palashgdev)
- [Yunus M](https://github.com/YounixM)
- [Rajat Dabade](https://github.com/Rajat-Dabade)
#### 运维开发
- [Prashant Shahi](https://github.com/prashant-shahi)
<br /><br /> <br /><br />
## 文档 ## 文档

View File

@@ -18,6 +18,7 @@ import (
"github.com/SigNoz/signoz/pkg/modules/dashboard" "github.com/SigNoz/signoz/pkg/modules/dashboard"
"github.com/SigNoz/signoz/pkg/modules/dashboard/impldashboard" "github.com/SigNoz/signoz/pkg/modules/dashboard/impldashboard"
"github.com/SigNoz/signoz/pkg/modules/organization" "github.com/SigNoz/signoz/pkg/modules/organization"
"github.com/SigNoz/signoz/pkg/modules/role"
"github.com/SigNoz/signoz/pkg/querier" "github.com/SigNoz/signoz/pkg/querier"
"github.com/SigNoz/signoz/pkg/query-service/app" "github.com/SigNoz/signoz/pkg/query-service/app"
"github.com/SigNoz/signoz/pkg/queryparser" "github.com/SigNoz/signoz/pkg/queryparser"
@@ -76,18 +77,15 @@ func runServer(ctx context.Context, config signoz.Config, logger *slog.Logger) e
func(ctx context.Context, providerSettings factory.ProviderSettings, store authtypes.AuthNStore, licensing licensing.Licensing) (map[authtypes.AuthNProvider]authn.AuthN, error) { func(ctx context.Context, providerSettings factory.ProviderSettings, store authtypes.AuthNStore, licensing licensing.Licensing) (map[authtypes.AuthNProvider]authn.AuthN, error) {
return signoz.NewAuthNs(ctx, providerSettings, store, licensing) return signoz.NewAuthNs(ctx, providerSettings, store, licensing)
}, },
func(ctx context.Context, sqlstore sqlstore.SQLStore, _ licensing.Licensing, _ dashboard.Module) factory.ProviderFactory[authz.AuthZ, authz.Config] { func(ctx context.Context, sqlstore sqlstore.SQLStore) factory.ProviderFactory[authz.AuthZ, authz.Config] {
return openfgaauthz.NewProviderFactory(sqlstore, openfgaschema.NewSchema().Get(ctx)) return openfgaauthz.NewProviderFactory(sqlstore, openfgaschema.NewSchema().Get(ctx))
}, },
func(store sqlstore.SQLStore, settings factory.ProviderSettings, analytics analytics.Analytics, orgGetter organization.Getter, queryParser queryparser.QueryParser, _ querier.Querier, _ licensing.Licensing) dashboard.Module { func(store sqlstore.SQLStore, settings factory.ProviderSettings, analytics analytics.Analytics, orgGetter organization.Getter, _ role.Module, queryParser queryparser.QueryParser, _ querier.Querier, _ licensing.Licensing) dashboard.Module {
return impldashboard.NewModule(impldashboard.NewStore(store), settings, analytics, orgGetter, queryParser) return impldashboard.NewModule(impldashboard.NewStore(store), settings, analytics, orgGetter, queryParser)
}, },
func(_ licensing.Licensing) factory.ProviderFactory[gateway.Gateway, gateway.Config] { func(_ licensing.Licensing) factory.ProviderFactory[gateway.Gateway, gateway.Config] {
return noopgateway.NewProviderFactory() return noopgateway.NewProviderFactory()
}, },
func(ps factory.ProviderSettings, q querier.Querier, a analytics.Analytics) querier.Handler {
return querier.NewHandler(ps, q, a)
},
) )
if err != nil { if err != nil {
logger.ErrorContext(ctx, "failed to create signoz", "error", err) logger.ErrorContext(ctx, "failed to create signoz", "error", err)

View File

@@ -9,7 +9,6 @@ import (
"github.com/SigNoz/signoz/ee/authn/callbackauthn/oidccallbackauthn" "github.com/SigNoz/signoz/ee/authn/callbackauthn/oidccallbackauthn"
"github.com/SigNoz/signoz/ee/authn/callbackauthn/samlcallbackauthn" "github.com/SigNoz/signoz/ee/authn/callbackauthn/samlcallbackauthn"
"github.com/SigNoz/signoz/ee/authz/openfgaauthz" "github.com/SigNoz/signoz/ee/authz/openfgaauthz"
eequerier "github.com/SigNoz/signoz/ee/querier"
"github.com/SigNoz/signoz/ee/authz/openfgaschema" "github.com/SigNoz/signoz/ee/authz/openfgaschema"
"github.com/SigNoz/signoz/ee/gateway/httpgateway" "github.com/SigNoz/signoz/ee/gateway/httpgateway"
enterpriselicensing "github.com/SigNoz/signoz/ee/licensing" enterpriselicensing "github.com/SigNoz/signoz/ee/licensing"
@@ -29,6 +28,7 @@ import (
"github.com/SigNoz/signoz/pkg/modules/dashboard" "github.com/SigNoz/signoz/pkg/modules/dashboard"
pkgimpldashboard "github.com/SigNoz/signoz/pkg/modules/dashboard/impldashboard" pkgimpldashboard "github.com/SigNoz/signoz/pkg/modules/dashboard/impldashboard"
"github.com/SigNoz/signoz/pkg/modules/organization" "github.com/SigNoz/signoz/pkg/modules/organization"
"github.com/SigNoz/signoz/pkg/modules/role"
"github.com/SigNoz/signoz/pkg/querier" "github.com/SigNoz/signoz/pkg/querier"
"github.com/SigNoz/signoz/pkg/queryparser" "github.com/SigNoz/signoz/pkg/queryparser"
"github.com/SigNoz/signoz/pkg/signoz" "github.com/SigNoz/signoz/pkg/signoz"
@@ -116,21 +116,16 @@ func runServer(ctx context.Context, config signoz.Config, logger *slog.Logger) e
return authNs, nil return authNs, nil
}, },
func(ctx context.Context, sqlstore sqlstore.SQLStore, licensing licensing.Licensing, dashboardModule dashboard.Module) factory.ProviderFactory[authz.AuthZ, authz.Config] { func(ctx context.Context, sqlstore sqlstore.SQLStore) factory.ProviderFactory[authz.AuthZ, authz.Config] {
return openfgaauthz.NewProviderFactory(sqlstore, openfgaschema.NewSchema().Get(ctx), licensing, dashboardModule) return openfgaauthz.NewProviderFactory(sqlstore, openfgaschema.NewSchema().Get(ctx))
}, },
func(store sqlstore.SQLStore, settings factory.ProviderSettings, analytics analytics.Analytics, orgGetter organization.Getter, queryParser queryparser.QueryParser, querier querier.Querier, licensing licensing.Licensing) dashboard.Module { func(store sqlstore.SQLStore, settings factory.ProviderSettings, analytics analytics.Analytics, orgGetter organization.Getter, role role.Module, queryParser queryparser.QueryParser, querier querier.Querier, licensing licensing.Licensing) dashboard.Module {
return impldashboard.NewModule(pkgimpldashboard.NewStore(store), settings, analytics, orgGetter, queryParser, querier, licensing) return impldashboard.NewModule(pkgimpldashboard.NewStore(store), settings, analytics, orgGetter, role, queryParser, querier, licensing)
}, },
func(licensing licensing.Licensing) factory.ProviderFactory[gateway.Gateway, gateway.Config] { func(licensing licensing.Licensing) factory.ProviderFactory[gateway.Gateway, gateway.Config] {
return httpgateway.NewProviderFactory(licensing) return httpgateway.NewProviderFactory(licensing)
}, },
func(ps factory.ProviderSettings, q querier.Querier, a analytics.Analytics) querier.Handler {
communityHandler := querier.NewHandler(ps, q, a)
return eequerier.NewHandler(ps, q, communityHandler)
},
) )
if err != nil { if err != nil {
logger.ErrorContext(ctx, "failed to create signoz", "error", err) logger.ErrorContext(ctx, "failed to create signoz", "error", err)
return err return err

View File

@@ -193,15 +193,6 @@ emailing:
templates: templates:
# The directory containing the email templates. This directory should contain a list of files defined at pkg/types/emailtypes/template.go. # The directory containing the email templates. This directory should contain a list of files defined at pkg/types/emailtypes/template.go.
directory: /opt/signoz/conf/templates/email directory: /opt/signoz/conf/templates/email
format:
header:
enabled: false
logo_url: ""
help:
enabled: false
email: ""
footer:
enabled: false
smtp: smtp:
# The SMTP server address. # The SMTP server address.
address: localhost:25 address: localhost:25
@@ -294,29 +285,9 @@ flagger:
config: config:
boolean: boolean:
use_span_metrics: true use_span_metrics: true
interpolation_enabled: false
kafka_span_eval: false kafka_span_eval: false
string: string:
float: float:
integer: integer:
object: object:
##################### User #####################
user:
password:
reset:
# Whether to allow users to reset their password themselves.
allow_self: true
# The duration within which a user can reset their password.
max_token_lifetime: 6h
root:
# Whether to enable the root user. When enabled, a root user is provisioned
# on startup using the email and password below. The root user cannot be
# deleted, updated, or have their password changed through the UI.
enabled: false
# The email address of the root user.
email: ""
# The password of the root user. Must meet password requirements.
password: ""
# The name of the organization to create or look up for the root user.
org:
name: default

View File

@@ -61,6 +61,7 @@ x-db-depend: &db-depend
- clickhouse - clickhouse
- clickhouse-2 - clickhouse-2
- clickhouse-3 - clickhouse-3
- schema-migrator
services: services:
init-clickhouse: init-clickhouse:
!!merge <<: *common !!merge <<: *common
@@ -135,17 +136,12 @@ services:
# - "9000:9000" # - "9000:9000"
# - "8123:8123" # - "8123:8123"
# - "9181:9181" # - "9181:9181"
configs:
- source: clickhouse-config
target: /etc/clickhouse-server/config.xml
- source: clickhouse-users
target: /etc/clickhouse-server/users.xml
- source: clickhouse-custom-function
target: /etc/clickhouse-server/custom-function.xml
- source: clickhouse-cluster
target: /etc/clickhouse-server/config.d/cluster.ha.xml
volumes: volumes:
- ../common/clickhouse/config.xml:/etc/clickhouse-server/config.xml
- ../common/clickhouse/users.xml:/etc/clickhouse-server/users.xml
- ../common/clickhouse/custom-function.xml:/etc/clickhouse-server/custom-function.xml
- ../common/clickhouse/user_scripts:/var/lib/clickhouse/user_scripts/ - ../common/clickhouse/user_scripts:/var/lib/clickhouse/user_scripts/
- ../common/clickhouse/cluster.ha.xml:/etc/clickhouse-server/config.d/cluster.xml
- ./clickhouse-setup/data/clickhouse/:/var/lib/clickhouse/ - ./clickhouse-setup/data/clickhouse/:/var/lib/clickhouse/
# - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml # - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml
clickhouse-2: clickhouse-2:
@@ -155,17 +151,12 @@ services:
# - "9001:9000" # - "9001:9000"
# - "8124:8123" # - "8124:8123"
# - "9182:9181" # - "9182:9181"
configs:
- source: clickhouse-config
target: /etc/clickhouse-server/config.xml
- source: clickhouse-users
target: /etc/clickhouse-server/users.xml
- source: clickhouse-custom-function
target: /etc/clickhouse-server/custom-function.xml
- source: clickhouse-cluster
target: /etc/clickhouse-server/config.d/cluster.ha.xml
volumes: volumes:
- ../common/clickhouse/config.xml:/etc/clickhouse-server/config.xml
- ../common/clickhouse/users.xml:/etc/clickhouse-server/users.xml
- ../common/clickhouse/custom-function.xml:/etc/clickhouse-server/custom-function.xml
- ../common/clickhouse/user_scripts:/var/lib/clickhouse/user_scripts/ - ../common/clickhouse/user_scripts:/var/lib/clickhouse/user_scripts/
- ../common/clickhouse/cluster.ha.xml:/etc/clickhouse-server/config.d/cluster.xml
- ./clickhouse-setup/data/clickhouse-2/:/var/lib/clickhouse/ - ./clickhouse-setup/data/clickhouse-2/:/var/lib/clickhouse/
# - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml # - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml
clickhouse-3: clickhouse-3:
@@ -175,32 +166,37 @@ services:
# - "9002:9000" # - "9002:9000"
# - "8125:8123" # - "8125:8123"
# - "9183:9181" # - "9183:9181"
configs:
- source: clickhouse-config
target: /etc/clickhouse-server/config.xml
- source: clickhouse-users
target: /etc/clickhouse-server/users.xml
- source: clickhouse-custom-function
target: /etc/clickhouse-server/custom-function.xml
- source: clickhouse-cluster
target: /etc/clickhouse-server/config.d/cluster.ha.xml
volumes: volumes:
- ../common/clickhouse/config.xml:/etc/clickhouse-server/config.xml
- ../common/clickhouse/users.xml:/etc/clickhouse-server/users.xml
- ../common/clickhouse/custom-function.xml:/etc/clickhouse-server/custom-function.xml
- ../common/clickhouse/user_scripts:/var/lib/clickhouse/user_scripts/ - ../common/clickhouse/user_scripts:/var/lib/clickhouse/user_scripts/
- ../common/clickhouse/cluster.ha.xml:/etc/clickhouse-server/config.d/cluster.xml
- ./clickhouse-setup/data/clickhouse-3/:/var/lib/clickhouse/ - ./clickhouse-setup/data/clickhouse-3/:/var/lib/clickhouse/
# - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml # - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml
signoz: signoz:
!!merge <<: *db-depend !!merge <<: *db-depend
image: signoz/signoz:v0.112.1 image: signoz/signoz:v0.108.0
command:
- --config=/root/config/prometheus.yml
ports: ports:
- "8080:8080" # signoz port - "8080:8080" # signoz port
# - "6060:6060" # pprof port # - "6060:6060" # pprof port
volumes: volumes:
- ../common/signoz/prometheus.yml:/root/config/prometheus.yml
- ../common/dashboards:/root/config/dashboards
- ./clickhouse-setup/data/signoz/:/var/lib/signoz/ - ./clickhouse-setup/data/signoz/:/var/lib/signoz/
environment: environment:
- SIGNOZ_ALERTMANAGER_PROVIDER=signoz - SIGNOZ_ALERTMANAGER_PROVIDER=signoz
- SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://clickhouse:9000 - SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://clickhouse:9000
- SIGNOZ_SQLSTORE_SQLITE_PATH=/var/lib/signoz/signoz.db - SIGNOZ_SQLSTORE_SQLITE_PATH=/var/lib/signoz/signoz.db
- DASHBOARDS_PATH=/root/config/dashboards
- STORAGE=clickhouse
- GODEBUG=netdns=go
- TELEMETRY_ENABLED=true
- DEPLOYMENT_TYPE=docker-swarm
- SIGNOZ_TOKENIZER_JWT_SECRET=secret - SIGNOZ_TOKENIZER_JWT_SECRET=secret
- DOT_METRICS_ENABLED=true
healthcheck: healthcheck:
test: test:
- CMD - CMD
@@ -213,48 +209,41 @@ services:
retries: 3 retries: 3
otel-collector: otel-collector:
!!merge <<: *db-depend !!merge <<: *db-depend
image: signoz/signoz-otel-collector:v0.142.1 image: signoz/signoz-otel-collector:v0.129.12
entrypoint:
- /bin/sh
command: command:
- -c - --config=/etc/otel-collector-config.yaml
- | - --manager-config=/etc/manager-config.yaml
/signoz-otel-collector migrate sync check && - --copy-path=/var/tmp/collector-config.yaml
/signoz-otel-collector --config=/etc/otel-collector-config.yaml --manager-config=/etc/manager-config.yaml --copy-path=/var/tmp/collector-config.yaml - --feature-gates=-pkg.translator.prometheus.NormalizeName
configs: volumes:
- source: otel-collector-config - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
target: /etc/otel-collector-config.yaml - ../common/signoz/otel-collector-opamp-config.yaml:/etc/manager-config.yaml
- source: otel-manager-config
target: /etc/manager-config.yaml
environment: environment:
- OTEL_RESOURCE_ATTRIBUTES=host.name={{.Node.Hostname}},os.type={{.Node.Platform.OS}} - OTEL_RESOURCE_ATTRIBUTES=host.name={{.Node.Hostname}},os.type={{.Node.Platform.OS}}
- LOW_CARDINAL_EXCEPTION_GROUPING=false - LOW_CARDINAL_EXCEPTION_GROUPING=false
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_DSN=tcp://clickhouse:9000
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_CLUSTER=cluster
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_REPLICATION=true
- SIGNOZ_OTEL_COLLECTOR_TIMEOUT=10m
ports: ports:
# - "1777:1777" # pprof extension # - "1777:1777" # pprof extension
- "4317:4317" # OTLP gRPC receiver - "4317:4317" # OTLP gRPC receiver
- "4318:4318" # OTLP HTTP receiver - "4318:4318" # OTLP HTTP receiver
deploy: deploy:
replicas: 3 replicas: 3
signoz-telemetrystore-migrator: depends_on:
!!merge <<: *db-depend - clickhouse
image: signoz/signoz-otel-collector:${OTELCOL_TAG:-v0.142.0} - schema-migrator
environment: - signoz
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_DSN=tcp://clickhouse:9000 schema-migrator:
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_CLUSTER=cluster !!merge <<: *common
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_REPLICATION=true image: signoz/signoz-schema-migrator:v0.129.12
- SIGNOZ_OTEL_COLLECTOR_TIMEOUT=10m deploy:
entrypoint: restart_policy:
- /bin/sh condition: on-failure
delay: 5s
entrypoint: sh
command: command:
- -c - -c
- | - "/signoz-schema-migrator sync --dsn=tcp://clickhouse:9000 --up= && /signoz-schema-migrator async --dsn=tcp://clickhouse:9000 --up="
/signoz-otel-collector migrate bootstrap && depends_on:
/signoz-otel-collector migrate sync up && - clickhouse
/signoz-otel-collector migrate async up
networks: networks:
signoz-net: signoz-net:
name: signoz-net name: signoz-net
@@ -273,16 +262,3 @@ volumes:
name: signoz-zookeeper-2 name: signoz-zookeeper-2
zookeeper-3: zookeeper-3:
name: signoz-zookeeper-3 name: signoz-zookeeper-3
configs:
clickhouse-config:
file: ../common/clickhouse/config.xml
clickhouse-users:
file: ../common/clickhouse/users.xml
clickhouse-custom-function:
file: ../common/clickhouse/custom-function.xml
clickhouse-cluster:
file: ../common/clickhouse/cluster.ha.xml
otel-collector-config:
file: ./otel-collector-config.yaml
otel-manager-config:
file: ../common/signoz/otel-collector-opamp-config.yaml

View File

@@ -58,6 +58,7 @@ x-db-depend: &db-depend
!!merge <<: *common !!merge <<: *common
depends_on: depends_on:
- clickhouse - clickhouse
- schema-migrator
services: services:
init-clickhouse: init-clickhouse:
!!merge <<: *common !!merge <<: *common
@@ -113,20 +114,30 @@ services:
target: /etc/clickhouse-server/config.d/cluster.xml target: /etc/clickhouse-server/config.d/cluster.xml
volumes: volumes:
- clickhouse:/var/lib/clickhouse/ - clickhouse:/var/lib/clickhouse/
- ../common/clickhouse/user_scripts:/var/lib/clickhouse/user_scripts/
# - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml # - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml
signoz: signoz:
!!merge <<: *db-depend !!merge <<: *db-depend
image: signoz/signoz:v0.112.1 image: signoz/signoz:v0.108.0
command:
- --config=/root/config/prometheus.yml
ports: ports:
- "8080:8080" # signoz port - "8080:8080" # signoz port
# - "6060:6060" # pprof port
volumes: volumes:
- sqlite:/var/lib/signoz/ - sqlite:/var/lib/signoz/
configs:
- source: signoz-prometheus-config
target: /root/config/prometheus.yml
environment: environment:
- SIGNOZ_ALERTMANAGER_PROVIDER=signoz - SIGNOZ_ALERTMANAGER_PROVIDER=signoz
- SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://clickhouse:9000 - SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://clickhouse:9000
- SIGNOZ_SQLSTORE_SQLITE_PATH=/var/lib/signoz/signoz.db - SIGNOZ_SQLSTORE_SQLITE_PATH=/var/lib/signoz/signoz.db
- SIGNOZ_TOKENIZER_JWT_SECRET=secret - DASHBOARDS_PATH=/root/config/dashboards
- STORAGE=clickhouse
- GODEBUG=netdns=go
- TELEMETRY_ENABLED=true
- DEPLOYMENT_TYPE=docker-swarm
- DOT_METRICS_ENABLED=true
healthcheck: healthcheck:
test: test:
- CMD - CMD
@@ -139,14 +150,12 @@ services:
retries: 3 retries: 3
otel-collector: otel-collector:
!!merge <<: *db-depend !!merge <<: *db-depend
image: signoz/signoz-otel-collector:v0.142.1 image: signoz/signoz-otel-collector:v0.129.12
entrypoint:
- /bin/sh
command: command:
- -c - --config=/etc/otel-collector-config.yaml
- | - --manager-config=/etc/manager-config.yaml
/signoz-otel-collector migrate sync check && - --copy-path=/var/tmp/collector-config.yaml
/signoz-otel-collector --config=/etc/otel-collector-config.yaml --manager-config=/etc/manager-config.yaml --copy-path=/var/tmp/collector-config.yaml - --feature-gates=-pkg.translator.prometheus.NormalizeName
configs: configs:
- source: otel-collector-config - source: otel-collector-config
target: /etc/otel-collector-config.yaml target: /etc/otel-collector-config.yaml
@@ -155,32 +164,29 @@ services:
environment: environment:
- OTEL_RESOURCE_ATTRIBUTES=host.name={{.Node.Hostname}},os.type={{.Node.Platform.OS}} - OTEL_RESOURCE_ATTRIBUTES=host.name={{.Node.Hostname}},os.type={{.Node.Platform.OS}}
- LOW_CARDINAL_EXCEPTION_GROUPING=false - LOW_CARDINAL_EXCEPTION_GROUPING=false
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_DSN=tcp://clickhouse:9000
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_CLUSTER=cluster
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_REPLICATION=true
- SIGNOZ_OTEL_COLLECTOR_TIMEOUT=10m
ports: ports:
# - "1777:1777" # pprof extension # - "1777:1777" # pprof extension
- "4317:4317" # OTLP gRPC receiver - "4317:4317" # OTLP gRPC receiver
- "4318:4318" # OTLP HTTP receiver - "4318:4318" # OTLP HTTP receiver
deploy: deploy:
replicas: 3 replicas: 3
signoz-telemetrystore-migrator: depends_on:
!!merge <<: *db-depend - clickhouse
image: signoz/signoz-otel-collector:${OTELCOL_TAG:-v0.142.0} - schema-migrator
environment: - signoz
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_DSN=tcp://clickhouse:9000 schema-migrator:
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_CLUSTER=cluster !!merge <<: *common
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_REPLICATION=true image: signoz/signoz-schema-migrator:v0.129.12
- SIGNOZ_OTEL_COLLECTOR_TIMEOUT=10m deploy:
entrypoint: restart_policy:
- /bin/sh condition: on-failure
delay: 5s
entrypoint: sh
command: command:
- -c - -c
- | - "/signoz-schema-migrator sync --dsn=tcp://clickhouse:9000 --up= && /signoz-schema-migrator async --dsn=tcp://clickhouse:9000 --up="
/signoz-otel-collector migrate bootstrap && depends_on:
/signoz-otel-collector migrate sync up && - clickhouse
/signoz-otel-collector migrate async up
networks: networks:
signoz-net: signoz-net:
name: signoz-net name: signoz-net
@@ -200,6 +206,14 @@ configs:
file: ../common/clickhouse/custom-function.xml file: ../common/clickhouse/custom-function.xml
clickhouse-cluster: clickhouse-cluster:
file: ../common/clickhouse/cluster.xml file: ../common/clickhouse/cluster.xml
signoz-prometheus-config:
file: ../common/signoz/prometheus.yml
# If you have multiple dashboard files, you can list them individually:
# dashboard-foo:
# file: ../common/dashboards/foo.json
# dashboard-bar:
# file: ../common/dashboards/bar.json
otel-collector-config: otel-collector-config:
file: ./otel-collector-config.yaml file: ./otel-collector-config.yaml
otel-manager-config: otel-manager-config:

View File

@@ -62,10 +62,8 @@ x-db-depend: &db-depend
depends_on: depends_on:
clickhouse: clickhouse:
condition: service_healthy condition: service_healthy
clickhouse-2: schema-migrator-sync:
condition: service_healthy condition: service_completed_successfully
clickhouse-3:
condition: service_healthy
services: services:
init-clickhouse: init-clickhouse:
!!merge <<: *common !!merge <<: *common
@@ -181,17 +179,27 @@ services:
# - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml # - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml
signoz: signoz:
!!merge <<: *db-depend !!merge <<: *db-depend
image: signoz/signoz:${VERSION:-v0.112.1} image: signoz/signoz:${VERSION:-v0.108.0}
container_name: signoz container_name: signoz
command:
- --config=/root/config/prometheus.yml
ports: ports:
- "8080:8080" # signoz port - "8080:8080" # signoz port
# - "6060:6060" # pprof port
volumes: volumes:
- ../common/signoz/prometheus.yml:/root/config/prometheus.yml
- ../common/dashboards:/root/config/dashboards
- sqlite:/var/lib/signoz/ - sqlite:/var/lib/signoz/
environment: environment:
- SIGNOZ_ALERTMANAGER_PROVIDER=signoz - SIGNOZ_ALERTMANAGER_PROVIDER=signoz
- SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://clickhouse:9000 - SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://clickhouse:9000
- SIGNOZ_SQLSTORE_SQLITE_PATH=/var/lib/signoz/signoz.db - SIGNOZ_SQLSTORE_SQLITE_PATH=/var/lib/signoz/signoz.db
- SIGNOZ_TOKENIZER_JWT_SECRET=secret - DASHBOARDS_PATH=/root/config/dashboards
- STORAGE=clickhouse
- GODEBUG=netdns=go
- TELEMETRY_ENABLED=true
- DEPLOYMENT_TYPE=docker-standalone-amd
- DOT_METRICS_ENABLED=true
healthcheck: healthcheck:
test: test:
- CMD - CMD
@@ -202,48 +210,52 @@ services:
interval: 30s interval: 30s
timeout: 5s timeout: 5s
retries: 3 retries: 3
# TODO: support otel-collector multiple replicas. Nginx/Traefik for loadbalancing?
otel-collector: otel-collector:
!!merge <<: *db-depend !!merge <<: *db-depend
image: signoz/signoz-otel-collector:${OTELCOL_TAG:-v0.142.1} image: signoz/signoz-otel-collector:${OTELCOL_TAG:-v0.129.12}
container_name: signoz-otel-collector container_name: signoz-otel-collector
entrypoint:
- /bin/sh
command: command:
- -c - --config=/etc/otel-collector-config.yaml
- | - --manager-config=/etc/manager-config.yaml
/signoz-otel-collector migrate sync check && - --copy-path=/var/tmp/collector-config.yaml
/signoz-otel-collector --config=/etc/otel-collector-config.yaml --manager-config=/etc/manager-config.yaml --copy-path=/var/tmp/collector-config.yaml - --feature-gates=-pkg.translator.prometheus.NormalizeName
volumes: volumes:
- ./otel-collector-config.yaml:/etc/otel-collector-config.yaml - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
- ../common/signoz/otel-collector-opamp-config.yaml:/etc/manager-config.yaml - ../common/signoz/otel-collector-opamp-config.yaml:/etc/manager-config.yaml
environment: environment:
- OTEL_RESOURCE_ATTRIBUTES=host.name=signoz-host,os.type=linux - OTEL_RESOURCE_ATTRIBUTES=host.name=signoz-host,os.type=linux
- LOW_CARDINAL_EXCEPTION_GROUPING=false - LOW_CARDINAL_EXCEPTION_GROUPING=false
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_DSN=tcp://clickhouse:9000
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_CLUSTER=cluster
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_REPLICATION=true
- SIGNOZ_OTEL_COLLECTOR_TIMEOUT=10m
ports: ports:
# - "1777:1777" # pprof extension # - "1777:1777" # pprof extension
- "4317:4317" # OTLP gRPC receiver - "4317:4317" # OTLP gRPC receiver
- "4318:4318" # OTLP HTTP receiver - "4318:4318" # OTLP HTTP receiver
signoz-telemetrystore-migrator: depends_on:
!!merge <<: *db-depend clickhouse:
image: signoz/signoz-otel-collector:${OTELCOL_TAG:-v0.142.0} condition: service_healthy
container_name: signoz-telemetrystore-migrator schema-migrator-sync:
environment: condition: service_completed_successfully
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_DSN=tcp://clickhouse:9000 signoz:
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_CLUSTER=cluster condition: service_healthy
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_REPLICATION=true schema-migrator-sync:
- SIGNOZ_OTEL_COLLECTOR_TIMEOUT=10m !!merge <<: *common
entrypoint: image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.129.12}
- /bin/sh container_name: schema-migrator-sync
command: command:
- -c - sync
- | - --dsn=tcp://clickhouse:9000
/signoz-otel-collector migrate bootstrap && - --up=
/signoz-otel-collector migrate sync up && depends_on:
/signoz-otel-collector migrate async up clickhouse:
condition: service_healthy
schema-migrator-async:
!!merge <<: *db-depend
image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.129.12}
container_name: schema-migrator-async
command:
- async
- --dsn=tcp://clickhouse:9000
- --up=
restart: on-failure restart: on-failure
networks: networks:
signoz-net: signoz-net:

View File

@@ -57,6 +57,8 @@ x-db-depend: &db-depend
depends_on: depends_on:
clickhouse: clickhouse:
condition: service_healthy condition: service_healthy
schema-migrator-sync:
condition: service_completed_successfully
services: services:
init-clickhouse: init-clickhouse:
!!merge <<: *common !!merge <<: *common
@@ -109,17 +111,27 @@ services:
# - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml # - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml
signoz: signoz:
!!merge <<: *db-depend !!merge <<: *db-depend
image: signoz/signoz:${VERSION:-v0.112.1} image: signoz/signoz:${VERSION:-v0.108.0}
container_name: signoz container_name: signoz
command:
- --config=/root/config/prometheus.yml
ports: ports:
- "8080:8080" # signoz port - "8080:8080" # signoz port
# - "6060:6060" # pprof port
volumes: volumes:
- ../common/signoz/prometheus.yml:/root/config/prometheus.yml
- ../common/dashboards:/root/config/dashboards
- sqlite:/var/lib/signoz/ - sqlite:/var/lib/signoz/
environment: environment:
- SIGNOZ_ALERTMANAGER_PROVIDER=signoz - SIGNOZ_ALERTMANAGER_PROVIDER=signoz
- SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://clickhouse:9000 - SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://clickhouse:9000
- SIGNOZ_SQLSTORE_SQLITE_PATH=/var/lib/signoz/signoz.db - SIGNOZ_SQLSTORE_SQLITE_PATH=/var/lib/signoz/signoz.db
- SIGNOZ_TOKENIZER_JWT_SECRET=secret - DASHBOARDS_PATH=/root/config/dashboards
- STORAGE=clickhouse
- GODEBUG=netdns=go
- TELEMETRY_ENABLED=true
- DEPLOYMENT_TYPE=docker-standalone-amd
- DOT_METRICS_ENABLED=true
healthcheck: healthcheck:
test: test:
- CMD - CMD
@@ -132,46 +144,46 @@ services:
retries: 3 retries: 3
otel-collector: otel-collector:
!!merge <<: *db-depend !!merge <<: *db-depend
image: signoz/signoz-otel-collector:${OTELCOL_TAG:-v0.142.1} image: signoz/signoz-otel-collector:${OTELCOL_TAG:-v0.129.12}
container_name: signoz-otel-collector container_name: signoz-otel-collector
entrypoint:
- /bin/sh
command: command:
- -c - --config=/etc/otel-collector-config.yaml
- | - --manager-config=/etc/manager-config.yaml
/signoz-otel-collector migrate sync check && - --copy-path=/var/tmp/collector-config.yaml
/signoz-otel-collector --config=/etc/otel-collector-config.yaml --manager-config=/etc/manager-config.yaml --copy-path=/var/tmp/collector-config.yaml - --feature-gates=-pkg.translator.prometheus.NormalizeName
volumes: volumes:
- ./otel-collector-config.yaml:/etc/otel-collector-config.yaml - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
- ../common/signoz/otel-collector-opamp-config.yaml:/etc/manager-config.yaml - ../common/signoz/otel-collector-opamp-config.yaml:/etc/manager-config.yaml
environment: environment:
- OTEL_RESOURCE_ATTRIBUTES=host.name=signoz-host,os.type=linux - OTEL_RESOURCE_ATTRIBUTES=host.name=signoz-host,os.type=linux
- LOW_CARDINAL_EXCEPTION_GROUPING=false - LOW_CARDINAL_EXCEPTION_GROUPING=false
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_DSN=tcp://clickhouse:9000
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_CLUSTER=cluster
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_REPLICATION=true
- SIGNOZ_OTEL_COLLECTOR_TIMEOUT=10m
ports: ports:
# - "1777:1777" # pprof extension # - "1777:1777" # pprof extension
- "4317:4317" # OTLP gRPC receiver - "4317:4317" # OTLP gRPC receiver
- "4318:4318" # OTLP HTTP receiver - "4318:4318" # OTLP HTTP receiver
signoz-telemetrystore-migrator: depends_on:
!!merge <<: *db-depend signoz:
image: signoz/signoz-otel-collector:${OTELCOL_TAG:-v0.142.0} condition: service_healthy
container_name: signoz-telemetrystore-migrator schema-migrator-sync:
environment: !!merge <<: *common
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_DSN=tcp://clickhouse:9000 image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.129.12}
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_CLUSTER=cluster container_name: schema-migrator-sync
- SIGNOZ_OTEL_COLLECTOR_CLICKHOUSE_REPLICATION=true
- SIGNOZ_OTEL_COLLECTOR_TIMEOUT=10m
entrypoint:
- /bin/sh
command: command:
- -c - sync
- | - --dsn=tcp://clickhouse:9000
/signoz-otel-collector migrate bootstrap && - --up=
/signoz-otel-collector migrate sync up && depends_on:
/signoz-otel-collector migrate async up clickhouse:
condition: service_healthy
restart: on-failure
schema-migrator-async:
!!merge <<: *db-depend
image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.129.12}
container_name: schema-migrator-async
command:
- async
- --dsn=tcp://clickhouse:9000
- --up=
restart: on-failure restart: on-failure
networks: networks:
signoz-net: signoz-net:

File diff suppressed because it is too large Load Diff

View File

@@ -155,7 +155,6 @@ The `handler.New` function ties the HTTP handler to OpenAPI metadata via `OpenAP
- **Request / RequestContentType**: - **Request / RequestContentType**:
- `Request` is a Go type that describes the request body or form. - `Request` is a Go type that describes the request body or form.
- `RequestContentType` is usually `"application/json"` or `"application/x-www-form-urlencoded"` (for callbacks like SAML). - `RequestContentType` is usually `"application/json"` or `"application/x-www-form-urlencoded"` (for callbacks like SAML).
- **RequestExamples**: An array of `handler.OpenAPIExample` that provide concrete request payloads in the generated spec. See [Adding request examples](#adding-request-examples) below.
- **Response / ResponseContentType**: - **Response / ResponseContentType**:
- `Response` is the Go type for the successful response payload. - `Response` is the Go type for the successful response payload.
- `ResponseContentType` is usually `"application/json"`; use `""` for responses without a body. - `ResponseContentType` is usually `"application/json"`; use `""` for responses without a body.
@@ -173,170 +172,8 @@ See existing examples in:
- `addUserRoutes` (for typical JSON request/response) - `addUserRoutes` (for typical JSON request/response)
- `addSessionRoutes` (for form-encoded and redirect flows) - `addSessionRoutes` (for form-encoded and redirect flows)
## OpenAPI schema details for request/response types
The OpenAPI spec is generated from the Go types you pass as `Request` and `Response` in `OpenAPIDef`. The following struct tags and interfaces control how those types appear in the generated schema.
### Adding request examples
Use the `RequestExamples` field in `OpenAPIDef` to provide concrete request payloads. Each example is a `handler.OpenAPIExample`:
```go
type OpenAPIExample struct {
Name string // unique key for the example (e.g. "traces_time_series")
Summary string // short description shown in docs (e.g. "Time series: count spans grouped by service")
Description string // optional longer description
Value any // the example payload, typically map[string]any
}
```
For reference, see `pkg/apiserver/signozapiserver/querier.go` which defines examples inline for the `/api/v5/query_range` endpoint:
```go
if err := router.Handle("/api/v5/query_range", handler.New(provider.authZ.ViewAccess(provider.querierHandler.QueryRange), handler.OpenAPIDef{
ID: "QueryRangeV5",
Tags: []string{"querier"},
Summary: "Query range",
Description: "Execute a composite query over a time range.",
Request: new(qbtypes.QueryRangeRequest),
RequestContentType: "application/json",
RequestExamples: []handler.OpenAPIExample{
{
Name: "traces_time_series",
Summary: "Time series: count spans grouped by service",
Value: map[string]any{
"schemaVersion": "v1",
"start": 1640995200000,
"end": 1640998800000,
"requestType": "time_series",
"compositeQuery": map[string]any{
"queries": []any{
map[string]any{
"type": "builder_query",
"spec": map[string]any{
"name": "A",
"signal": "traces",
// ...
},
},
},
},
},
},
// ... more examples
},
// ...
})).Methods(http.MethodPost).GetError(); err != nil {
return err
}
```
### `required` tag
Use `required:"true"` on struct fields where the property is expected to be **present** in the JSON payload. This is different from the zero value, a field can have its zero value (e.g. `0`, `""`, `false`) and still be required. The `required` tag means the key itself must exist in the JSON object.
```go
type ListItem struct {
...
}
type ListResponse struct {
List []ListItem `json:"list" required:"true" nullable:"true"`
Total uint64 `json:"total" required:"true"`
}
```
In this example, a response like `{"list": null, "total": 0}` is valid. Both keys are present (satisfying `required`), `total` has its zero value, and `list` is null (allowed by `nullable`). But `{"total": 0}` would violate the schema because the `list` key is missing.
### `nullable` tag
Use `nullable:"true"` on struct fields that can be `null` in the JSON payload. This is especially important for **slice and map fields** because in Go, the zero value for these types is `nil`, which serializes to `null` in JSON (not `[]` or `{}`).
Be explicit about the distinction:
- **Nullable list** (`nullable:"true"`): the field can be `null`. Use this when the Go code may return `nil` for the slice.
- **Non-nullable list** (no `nullable` tag): the field is always an array, never `null`. Ensure the Go code initializes it to an empty slice (e.g. `make([]T, 0)`) before serializing.
```go
// Non-nullable: Go code must ensure this is always an initialized slice.
type NonNullableExample struct {
Items []Item `json:"items" required:"true"`
}
```
When defining your types, ask yourself: "Can this field be `null` in the JSON response, or is it always an array/object?" If the Go code ever returns a `nil` slice or map, mark it `nullable:"true"`.
### `Enum()` method
For types that have a fixed set of acceptable values, implement the `Enum() []any` method. This generates an `enum` constraint in the JSON schema so the OpenAPI spec accurately restricts the values.
```go
type Signal struct {
valuer.String
}
var (
SignalTraces = Signal{valuer.NewString("traces")}
SignalLogs = Signal{valuer.NewString("logs")}
SignalMetrics = Signal{valuer.NewString("metrics")}
)
func (Signal) Enum() []any {
return []any{
SignalTraces,
SignalLogs,
SignalMetrics,
}
}
```
This produces the following in the generated OpenAPI spec:
```yaml
Signal:
enum:
- traces
- logs
- metrics
type: string
```
Every type with a known set of values **must** implement `Enum()`. Without it, the JSON schema will only show the base type (e.g. `string`) with no value constraints.
### `JSONSchema()` method (custom schema)
For types that need a completely custom JSON schema (for example, a field that accepts either a string or a number), implement the `jsonschema.Exposer` interface:
```go
var _ jsonschema.Exposer = Step{}
func (Step) JSONSchema() (jsonschema.Schema, error) {
s := jsonschema.Schema{}
s.WithDescription("Step interval. Accepts a duration string or seconds.")
strSchema := jsonschema.Schema{}
strSchema.WithType(jsonschema.String.Type())
strSchema.WithExamples("60s", "5m", "1h")
numSchema := jsonschema.Schema{}
numSchema.WithType(jsonschema.Number.Type())
numSchema.WithExamples(60, 300, 3600)
s.OneOf = []jsonschema.SchemaOrBool{
strSchema.ToSchemaOrBool(),
numSchema.ToSchemaOrBool(),
}
return s, nil
}
```
## What should I remember? ## What should I remember?
- **Keep handlers thin**: focus on HTTP concerns and delegate logic to modules/services. - **Keep handlers thin**: focus on HTTP concerns and delegate logic to modules/services.
- **Always register routes through `signozapiserver`** using `handler.New` and a complete `OpenAPIDef`. - **Always register routes through `signozapiserver`** using `handler.New` and a complete `OpenAPIDef`.
- **Choose accurate request/response types** from the `types` packages so OpenAPI schemas are correct. - **Choose accurate request/response types** from the `types` packages so OpenAPI schemas are correct.
- **Add `required:"true"`** on fields where the key must be present in the JSON (this is about key presence, not about the zero value).
- **Add `nullable:"true"`** on fields that can be `null`. Pay special attention to slices and maps -- in Go these default to `nil` which serializes to `null`. If the field should always be an array, initialize it and do not mark it nullable.
- **Implement `Enum()`** on every type that has a fixed set of acceptable values so the JSON schema generates proper `enum` constraints.
- **Add request examples** via `RequestExamples` in `OpenAPIDef` for any non-trivial endpoint. See `pkg/apiserver/signozapiserver/querier.go` for reference.

View File

@@ -24,7 +24,7 @@ The configuration file is a JSON array containing data source objects. Each obje
| `label` | `string` | Display name shown to users (e.g., `"AWS EC2"`) | | `label` | `string` | Display name shown to users (e.g., `"AWS EC2"`) |
| `tags` | `string[]` | Array of category tags for grouping (e.g., `["AWS"]`, `["database"]`) | | `tags` | `string[]` | Array of category tags for grouping (e.g., `["AWS"]`, `["database"]`) |
| `module` | `string` | Destination module after onboarding completion | | `module` | `string` | Destination module after onboarding completion |
| `imgUrl` | `string` | Path to the logo/icon **(SVG required)** (e.g., `"/Logos/ec2.svg"`) | | `imgUrl` | `string` | Path to the logo/icon (e.g., `"/Logos/ec2.svg"`) |
### Optional Keys ### Optional Keys

View File

@@ -2,18 +2,12 @@ package openfgaauthz
import ( import (
"context" "context"
"slices"
"github.com/SigNoz/signoz/ee/authz/openfgaserver"
"github.com/SigNoz/signoz/pkg/authz" "github.com/SigNoz/signoz/pkg/authz"
"github.com/SigNoz/signoz/pkg/authz/authzstore/sqlauthzstore"
pkgopenfgaauthz "github.com/SigNoz/signoz/pkg/authz/openfgaauthz" pkgopenfgaauthz "github.com/SigNoz/signoz/pkg/authz/openfgaauthz"
"github.com/SigNoz/signoz/pkg/errors"
"github.com/SigNoz/signoz/pkg/factory" "github.com/SigNoz/signoz/pkg/factory"
"github.com/SigNoz/signoz/pkg/licensing"
"github.com/SigNoz/signoz/pkg/sqlstore" "github.com/SigNoz/signoz/pkg/sqlstore"
"github.com/SigNoz/signoz/pkg/types/authtypes" "github.com/SigNoz/signoz/pkg/types/authtypes"
"github.com/SigNoz/signoz/pkg/types/roletypes"
"github.com/SigNoz/signoz/pkg/valuer" "github.com/SigNoz/signoz/pkg/valuer"
openfgav1 "github.com/openfga/api/proto/openfga/v1" openfgav1 "github.com/openfga/api/proto/openfga/v1"
openfgapkgtransformer "github.com/openfga/language/pkg/go/transformer" openfgapkgtransformer "github.com/openfga/language/pkg/go/transformer"
@@ -21,223 +15,50 @@ import (
type provider struct { type provider struct {
pkgAuthzService authz.AuthZ pkgAuthzService authz.AuthZ
openfgaServer *openfgaserver.Server
licensing licensing.Licensing
store roletypes.Store
registry []authz.RegisterTypeable
} }
func NewProviderFactory(sqlstore sqlstore.SQLStore, openfgaSchema []openfgapkgtransformer.ModuleFile, licensing licensing.Licensing, registry ...authz.RegisterTypeable) factory.ProviderFactory[authz.AuthZ, authz.Config] { func NewProviderFactory(sqlstore sqlstore.SQLStore, openfgaSchema []openfgapkgtransformer.ModuleFile) factory.ProviderFactory[authz.AuthZ, authz.Config] {
return factory.NewProviderFactory(factory.MustNewName("openfga"), func(ctx context.Context, ps factory.ProviderSettings, config authz.Config) (authz.AuthZ, error) { return factory.NewProviderFactory(factory.MustNewName("openfga"), func(ctx context.Context, ps factory.ProviderSettings, config authz.Config) (authz.AuthZ, error) {
return newOpenfgaProvider(ctx, ps, config, sqlstore, openfgaSchema, licensing, registry) return newOpenfgaProvider(ctx, ps, config, sqlstore, openfgaSchema)
}) })
} }
func newOpenfgaProvider(ctx context.Context, settings factory.ProviderSettings, config authz.Config, sqlstore sqlstore.SQLStore, openfgaSchema []openfgapkgtransformer.ModuleFile, licensing licensing.Licensing, registry []authz.RegisterTypeable) (authz.AuthZ, error) { func newOpenfgaProvider(ctx context.Context, settings factory.ProviderSettings, config authz.Config, sqlstore sqlstore.SQLStore, openfgaSchema []openfgapkgtransformer.ModuleFile) (authz.AuthZ, error) {
pkgOpenfgaAuthzProvider := pkgopenfgaauthz.NewProviderFactory(sqlstore, openfgaSchema) pkgOpenfgaAuthzProvider := pkgopenfgaauthz.NewProviderFactory(sqlstore, openfgaSchema)
pkgAuthzService, err := pkgOpenfgaAuthzProvider.New(ctx, settings, config) pkgAuthzService, err := pkgOpenfgaAuthzProvider.New(ctx, settings, config)
if err != nil { if err != nil {
return nil, err return nil, err
} }
openfgaServer, err := openfgaserver.NewOpenfgaServer(ctx, pkgAuthzService)
if err != nil {
return nil, err
}
return &provider{ return &provider{
pkgAuthzService: pkgAuthzService, pkgAuthzService: pkgAuthzService,
openfgaServer: openfgaServer,
licensing: licensing,
store: sqlauthzstore.NewSqlAuthzStore(sqlstore),
registry: registry,
}, nil }, nil
} }
func (provider *provider) Start(ctx context.Context) error { func (provider *provider) Start(ctx context.Context) error {
return provider.openfgaServer.Start(ctx) return provider.pkgAuthzService.Start(ctx)
} }
func (provider *provider) Stop(ctx context.Context) error { func (provider *provider) Stop(ctx context.Context) error {
return provider.openfgaServer.Stop(ctx) return provider.pkgAuthzService.Stop(ctx)
} }
func (provider *provider) CheckWithTupleCreation(ctx context.Context, claims authtypes.Claims, orgID valuer.UUID, relation authtypes.Relation, typeable authtypes.Typeable, selectors []authtypes.Selector, roleSelectors []authtypes.Selector) error { func (provider *provider) Check(ctx context.Context, tuple *openfgav1.TupleKey) error {
return provider.openfgaServer.CheckWithTupleCreation(ctx, claims, orgID, relation, typeable, selectors, roleSelectors) return provider.pkgAuthzService.Check(ctx, tuple)
} }
func (provider *provider) CheckWithTupleCreationWithoutClaims(ctx context.Context, orgID valuer.UUID, relation authtypes.Relation, typeable authtypes.Typeable, selectors []authtypes.Selector, roleSelectors []authtypes.Selector) error { func (provider *provider) CheckWithTupleCreation(ctx context.Context, claims authtypes.Claims, orgID valuer.UUID, relation authtypes.Relation, _ authtypes.Relation, typeable authtypes.Typeable, selectors []authtypes.Selector) error {
return provider.openfgaServer.CheckWithTupleCreationWithoutClaims(ctx, orgID, relation, typeable, selectors, roleSelectors) subject, err := authtypes.NewSubject(authtypes.TypeableUser, claims.UserID, orgID, nil)
}
func (provider *provider) BatchCheck(ctx context.Context, tupleReq map[string]*openfgav1.TupleKey) (map[string]*authtypes.TupleKeyAuthorization, error) {
return provider.openfgaServer.BatchCheck(ctx, tupleReq)
}
func (provider *provider) ListObjects(ctx context.Context, subject string, relation authtypes.Relation, typeable authtypes.Typeable) ([]*authtypes.Object, error) {
return provider.openfgaServer.ListObjects(ctx, subject, relation, typeable)
}
func (provider *provider) Write(ctx context.Context, additions []*openfgav1.TupleKey, deletions []*openfgav1.TupleKey) error {
return provider.openfgaServer.Write(ctx, additions, deletions)
}
func (provider *provider) Get(ctx context.Context, orgID valuer.UUID, id valuer.UUID) (*roletypes.Role, error) {
return provider.pkgAuthzService.Get(ctx, orgID, id)
}
func (provider *provider) GetByOrgIDAndName(ctx context.Context, orgID valuer.UUID, name string) (*roletypes.Role, error) {
return provider.pkgAuthzService.GetByOrgIDAndName(ctx, orgID, name)
}
func (provider *provider) List(ctx context.Context, orgID valuer.UUID) ([]*roletypes.Role, error) {
return provider.pkgAuthzService.List(ctx, orgID)
}
func (provider *provider) ListByOrgIDAndNames(ctx context.Context, orgID valuer.UUID, names []string) ([]*roletypes.Role, error) {
return provider.pkgAuthzService.ListByOrgIDAndNames(ctx, orgID, names)
}
func (provider *provider) Grant(ctx context.Context, orgID valuer.UUID, name string, subject string) error {
return provider.pkgAuthzService.Grant(ctx, orgID, name, subject)
}
func (provider *provider) ModifyGrant(ctx context.Context, orgID valuer.UUID, existingRoleName string, updatedRoleName string, subject string) error {
return provider.pkgAuthzService.ModifyGrant(ctx, orgID, existingRoleName, updatedRoleName, subject)
}
func (provider *provider) Revoke(ctx context.Context, orgID valuer.UUID, name string, subject string) error {
return provider.pkgAuthzService.Revoke(ctx, orgID, name, subject)
}
func (provider *provider) CreateManagedRoles(ctx context.Context, orgID valuer.UUID, managedRoles []*roletypes.Role) error {
return provider.pkgAuthzService.CreateManagedRoles(ctx, orgID, managedRoles)
}
func (provider *provider) CreateManagedUserRoleTransactions(ctx context.Context, orgID valuer.UUID, userID valuer.UUID) error {
tuples := make([]*openfgav1.TupleKey, 0)
grantTuples, err := provider.getManagedRoleGrantTuples(orgID, userID)
if err != nil {
return err
}
tuples = append(tuples, grantTuples...)
managedRoleTuples, err := provider.getManagedRoleTransactionTuples(orgID)
if err != nil {
return err
}
tuples = append(tuples, managedRoleTuples...)
return provider.Write(ctx, tuples, nil)
}
func (provider *provider) Create(ctx context.Context, orgID valuer.UUID, role *roletypes.Role) error {
_, err := provider.licensing.GetActive(ctx, orgID)
if err != nil {
return errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
}
return provider.store.Create(ctx, roletypes.NewStorableRoleFromRole(role))
}
func (provider *provider) GetOrCreate(ctx context.Context, orgID valuer.UUID, role *roletypes.Role) (*roletypes.Role, error) {
_, err := provider.licensing.GetActive(ctx, orgID)
if err != nil {
return nil, errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
}
existingRole, err := provider.store.GetByOrgIDAndName(ctx, role.OrgID, role.Name)
if err != nil {
if !errors.Ast(err, errors.TypeNotFound) {
return nil, err
}
}
if existingRole != nil {
return roletypes.NewRoleFromStorableRole(existingRole), nil
}
err = provider.store.Create(ctx, roletypes.NewStorableRoleFromRole(role))
if err != nil {
return nil, err
}
return role, nil
}
func (provider *provider) GetResources(_ context.Context) []*authtypes.Resource {
typeables := make([]authtypes.Typeable, 0)
for _, register := range provider.registry {
typeables = append(typeables, register.MustGetTypeables()...)
}
resources := make([]*authtypes.Resource, 0)
for _, typeable := range typeables {
resources = append(resources, &authtypes.Resource{Name: typeable.Name(), Type: typeable.Type()})
}
return resources
}
func (provider *provider) GetObjects(ctx context.Context, orgID valuer.UUID, id valuer.UUID, relation authtypes.Relation) ([]*authtypes.Object, error) {
_, err := provider.licensing.GetActive(ctx, orgID)
if err != nil {
return nil, errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
}
storableRole, err := provider.store.Get(ctx, orgID, id)
if err != nil {
return nil, err
}
objects := make([]*authtypes.Object, 0)
for _, resource := range provider.GetResources(ctx) {
if slices.Contains(authtypes.TypeableRelations[resource.Type], relation) {
resourceObjects, err := provider.
ListObjects(
ctx,
authtypes.MustNewSubject(authtypes.TypeableRole, storableRole.Name, orgID, &authtypes.RelationAssignee),
relation,
authtypes.MustNewTypeableFromType(resource.Type, resource.Name),
)
if err != nil {
return nil, err
}
objects = append(objects, resourceObjects...)
}
}
return objects, nil
}
func (provider *provider) Patch(ctx context.Context, orgID valuer.UUID, role *roletypes.Role) error {
_, err := provider.licensing.GetActive(ctx, orgID)
if err != nil {
return errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
}
return provider.store.Update(ctx, orgID, roletypes.NewStorableRoleFromRole(role))
}
func (provider *provider) PatchObjects(ctx context.Context, orgID valuer.UUID, name string, relation authtypes.Relation, additions, deletions []*authtypes.Object) error {
_, err := provider.licensing.GetActive(ctx, orgID)
if err != nil {
return errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
}
additionTuples, err := roletypes.GetAdditionTuples(name, orgID, relation, additions)
if err != nil { if err != nil {
return err return err
} }
deletionTuples, err := roletypes.GetDeletionTuples(name, orgID, relation, deletions) tuples, err := typeable.Tuples(subject, relation, selectors, orgID)
if err != nil { if err != nil {
return err return err
} }
err = provider.Write(ctx, additionTuples, deletionTuples) err = provider.BatchCheck(ctx, tuples)
if err != nil { if err != nil {
return err return err
} }
@@ -245,95 +66,33 @@ func (provider *provider) PatchObjects(ctx context.Context, orgID valuer.UUID, n
return nil return nil
} }
func (provider *provider) Delete(ctx context.Context, orgID valuer.UUID, id valuer.UUID) error { func (provider *provider) CheckWithTupleCreationWithoutClaims(ctx context.Context, orgID valuer.UUID, relation authtypes.Relation, _ authtypes.Relation, typeable authtypes.Typeable, selectors []authtypes.Selector) error {
_, err := provider.licensing.GetActive(ctx, orgID) subject, err := authtypes.NewSubject(authtypes.TypeableAnonymous, authtypes.AnonymousUser.String(), orgID, nil)
if err != nil {
return errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
}
storableRole, err := provider.store.Get(ctx, orgID, id)
if err != nil { if err != nil {
return err return err
} }
role := roletypes.NewRoleFromStorableRole(storableRole) tuples, err := typeable.Tuples(subject, relation, selectors, orgID)
err = role.ErrIfManaged()
if err != nil { if err != nil {
return err return err
} }
return provider.store.Delete(ctx, orgID, id) err = provider.BatchCheck(ctx, tuples)
}
func (provider *provider) MustGetTypeables() []authtypes.Typeable {
return []authtypes.Typeable{authtypes.TypeableRole, roletypes.TypeableResourcesRoles}
}
func (provider *provider) getManagedRoleGrantTuples(orgID valuer.UUID, userID valuer.UUID) ([]*openfgav1.TupleKey, error) {
tuples := []*openfgav1.TupleKey{}
// Grant the admin role to the user
adminSubject := authtypes.MustNewSubject(authtypes.TypeableUser, userID.String(), orgID, nil)
adminTuple, err := authtypes.TypeableRole.Tuples(
adminSubject,
authtypes.RelationAssignee,
[]authtypes.Selector{
authtypes.MustNewSelector(authtypes.TypeRole, roletypes.SigNozAdminRoleName),
},
orgID,
)
if err != nil { if err != nil {
return nil, err return err
} }
tuples = append(tuples, adminTuple...)
// Grant the admin role to the anonymous user return nil
anonymousSubject := authtypes.MustNewSubject(authtypes.TypeableAnonymous, authtypes.AnonymousUser.String(), orgID, nil)
anonymousTuple, err := authtypes.TypeableRole.Tuples(
anonymousSubject,
authtypes.RelationAssignee,
[]authtypes.Selector{
authtypes.MustNewSelector(authtypes.TypeRole, roletypes.SigNozAnonymousRoleName),
},
orgID,
)
if err != nil {
return nil, err
}
tuples = append(tuples, anonymousTuple...)
return tuples, nil
} }
func (provider *provider) getManagedRoleTransactionTuples(orgID valuer.UUID) ([]*openfgav1.TupleKey, error) { func (provider *provider) BatchCheck(ctx context.Context, tuples []*openfgav1.TupleKey) error {
transactionsByRole := make(map[string][]*authtypes.Transaction) return provider.pkgAuthzService.BatchCheck(ctx, tuples)
for _, register := range provider.registry { }
for roleName, txns := range register.MustGetManagedRoleTransactions() {
transactionsByRole[roleName] = append(transactionsByRole[roleName], txns...) func (provider *provider) ListObjects(ctx context.Context, subject string, relation authtypes.Relation, typeable authtypes.Typeable) ([]*authtypes.Object, error) {
} return provider.pkgAuthzService.ListObjects(ctx, subject, relation, typeable)
} }
tuples := make([]*openfgav1.TupleKey, 0) func (provider *provider) Write(ctx context.Context, additions []*openfgav1.TupleKey, deletions []*openfgav1.TupleKey) error {
for roleName, transactions := range transactionsByRole { return provider.pkgAuthzService.Write(ctx, additions, deletions)
for _, txn := range transactions {
typeable := authtypes.MustNewTypeableFromType(txn.Object.Resource.Type, txn.Object.Resource.Name)
txnTuples, err := typeable.Tuples(
authtypes.MustNewSubject(
authtypes.TypeableRole,
roleName,
orgID,
&authtypes.RelationAssignee,
),
txn.Relation,
[]authtypes.Selector{txn.Object.Selector},
orgID,
)
if err != nil {
return nil, err
}
tuples = append(tuples, txnTuples...)
}
}
return tuples, nil
} }

View File

@@ -1,103 +0,0 @@
package openfgaserver
import (
"context"
"strconv"
"github.com/SigNoz/signoz/pkg/authz"
"github.com/SigNoz/signoz/pkg/errors"
"github.com/SigNoz/signoz/pkg/types/authtypes"
"github.com/SigNoz/signoz/pkg/valuer"
openfgav1 "github.com/openfga/api/proto/openfga/v1"
)
type Server struct {
pkgAuthzService authz.AuthZ
}
func NewOpenfgaServer(ctx context.Context, pkgAuthzService authz.AuthZ) (*Server, error) {
return &Server{
pkgAuthzService: pkgAuthzService,
}, nil
}
func (server *Server) Start(ctx context.Context) error {
return server.pkgAuthzService.Start(ctx)
}
func (server *Server) Stop(ctx context.Context) error {
return server.pkgAuthzService.Stop(ctx)
}
func (server *Server) CheckWithTupleCreation(ctx context.Context, claims authtypes.Claims, orgID valuer.UUID, relation authtypes.Relation, typeable authtypes.Typeable, selectors []authtypes.Selector, _ []authtypes.Selector) error {
subject, err := authtypes.NewSubject(authtypes.TypeableUser, claims.UserID, orgID, nil)
if err != nil {
return err
}
tupleSlice, err := typeable.Tuples(subject, relation, selectors, orgID)
if err != nil {
return err
}
tuples := make(map[string]*openfgav1.TupleKey, len(tupleSlice))
for idx, tuple := range tupleSlice {
tuples[strconv.Itoa(idx)] = tuple
}
response, err := server.BatchCheck(ctx, tuples)
if err != nil {
return err
}
for _, resp := range response {
if resp.Authorized {
return nil
}
}
return errors.Newf(errors.TypeForbidden, authtypes.ErrCodeAuthZForbidden, "subjects are not authorized for requested access")
}
func (server *Server) CheckWithTupleCreationWithoutClaims(ctx context.Context, orgID valuer.UUID, relation authtypes.Relation, typeable authtypes.Typeable, selectors []authtypes.Selector, _ []authtypes.Selector) error {
subject, err := authtypes.NewSubject(authtypes.TypeableAnonymous, authtypes.AnonymousUser.String(), orgID, nil)
if err != nil {
return err
}
tupleSlice, err := typeable.Tuples(subject, relation, selectors, orgID)
if err != nil {
return err
}
tuples := make(map[string]*openfgav1.TupleKey, len(tupleSlice))
for idx, tuple := range tupleSlice {
tuples[strconv.Itoa(idx)] = tuple
}
response, err := server.BatchCheck(ctx, tuples)
if err != nil {
return err
}
for _, resp := range response {
if resp.Authorized {
return nil
}
}
return errors.Newf(errors.TypeForbidden, authtypes.ErrCodeAuthZForbidden, "subjects are not authorized for requested access")
}
func (server *Server) BatchCheck(ctx context.Context, tupleReq map[string]*openfgav1.TupleKey) (map[string]*authtypes.TupleKeyAuthorization, error) {
return server.pkgAuthzService.BatchCheck(ctx, tupleReq)
}
func (server *Server) ListObjects(ctx context.Context, subject string, relation authtypes.Relation, typeable authtypes.Typeable) ([]*authtypes.Object, error) {
return server.pkgAuthzService.ListObjects(ctx, subject, relation, typeable)
}
func (server *Server) Write(ctx context.Context, additions []*openfgav1.TupleKey, deletions []*openfgav1.TupleKey) error {
return server.pkgAuthzService.Write(ctx, additions, deletions)
}

View File

@@ -11,6 +11,7 @@ import (
"github.com/SigNoz/signoz/pkg/modules/dashboard" "github.com/SigNoz/signoz/pkg/modules/dashboard"
pkgimpldashboard "github.com/SigNoz/signoz/pkg/modules/dashboard/impldashboard" pkgimpldashboard "github.com/SigNoz/signoz/pkg/modules/dashboard/impldashboard"
"github.com/SigNoz/signoz/pkg/modules/organization" "github.com/SigNoz/signoz/pkg/modules/organization"
"github.com/SigNoz/signoz/pkg/modules/role"
"github.com/SigNoz/signoz/pkg/querier" "github.com/SigNoz/signoz/pkg/querier"
"github.com/SigNoz/signoz/pkg/queryparser" "github.com/SigNoz/signoz/pkg/queryparser"
"github.com/SigNoz/signoz/pkg/types" "github.com/SigNoz/signoz/pkg/types"
@@ -25,11 +26,12 @@ type module struct {
pkgDashboardModule dashboard.Module pkgDashboardModule dashboard.Module
store dashboardtypes.Store store dashboardtypes.Store
settings factory.ScopedProviderSettings settings factory.ScopedProviderSettings
role role.Module
querier querier.Querier querier querier.Querier
licensing licensing.Licensing licensing licensing.Licensing
} }
func NewModule(store dashboardtypes.Store, settings factory.ProviderSettings, analytics analytics.Analytics, orgGetter organization.Getter, queryParser queryparser.QueryParser, querier querier.Querier, licensing licensing.Licensing) dashboard.Module { func NewModule(store dashboardtypes.Store, settings factory.ProviderSettings, analytics analytics.Analytics, orgGetter organization.Getter, role role.Module, queryParser queryparser.QueryParser, querier querier.Querier, licensing licensing.Licensing) dashboard.Module {
scopedProviderSettings := factory.NewScopedProviderSettings(settings, "github.com/SigNoz/signoz/ee/modules/dashboard/impldashboard") scopedProviderSettings := factory.NewScopedProviderSettings(settings, "github.com/SigNoz/signoz/ee/modules/dashboard/impldashboard")
pkgDashboardModule := pkgimpldashboard.NewModule(store, settings, analytics, orgGetter, queryParser) pkgDashboardModule := pkgimpldashboard.NewModule(store, settings, analytics, orgGetter, queryParser)
@@ -37,6 +39,7 @@ func NewModule(store dashboardtypes.Store, settings factory.ProviderSettings, an
pkgDashboardModule: pkgDashboardModule, pkgDashboardModule: pkgDashboardModule,
store: store, store: store,
settings: scopedProviderSettings, settings: scopedProviderSettings,
role: role,
querier: querier, querier: querier,
licensing: licensing, licensing: licensing,
} }
@@ -56,6 +59,29 @@ func (module *module) CreatePublic(ctx context.Context, orgID valuer.UUID, publi
return errors.Newf(errors.TypeAlreadyExists, dashboardtypes.ErrCodePublicDashboardAlreadyExists, "dashboard with id %s is already public", storablePublicDashboard.DashboardID) return errors.Newf(errors.TypeAlreadyExists, dashboardtypes.ErrCodePublicDashboardAlreadyExists, "dashboard with id %s is already public", storablePublicDashboard.DashboardID)
} }
role, err := module.role.GetOrCreate(ctx, roletypes.NewRole(roletypes.AnonymousUserRoleName, roletypes.AnonymousUserRoleDescription, roletypes.RoleTypeManaged.StringValue(), orgID))
if err != nil {
return err
}
err = module.role.Assign(ctx, role.ID, orgID, authtypes.MustNewSubject(authtypes.TypeableAnonymous, authtypes.AnonymousUser.StringValue(), orgID, nil))
if err != nil {
return err
}
additionObject := authtypes.MustNewObject(
authtypes.Resource{
Name: dashboardtypes.TypeableMetaResourcePublicDashboard.Name(),
Type: authtypes.TypeMetaResource,
},
authtypes.MustNewSelector(authtypes.TypeMetaResource, publicDashboard.ID.String()),
)
err = module.role.PatchObjects(ctx, orgID, role.ID, authtypes.RelationRead, []*authtypes.Object{additionObject}, nil)
if err != nil {
return err
}
err = module.store.CreatePublic(ctx, dashboardtypes.NewStorablePublicDashboardFromPublicDashboard(publicDashboard)) err = module.store.CreatePublic(ctx, dashboardtypes.NewStorablePublicDashboardFromPublicDashboard(publicDashboard))
if err != nil { if err != nil {
return err return err
@@ -100,7 +126,6 @@ func (module *module) GetPublicDashboardSelectorsAndOrg(ctx context.Context, id
return []authtypes.Selector{ return []authtypes.Selector{
authtypes.MustNewSelector(authtypes.TypeMetaResource, id.StringValue()), authtypes.MustNewSelector(authtypes.TypeMetaResource, id.StringValue()),
authtypes.MustNewSelector(authtypes.TypeMetaResource, authtypes.WildCardSelectorString),
}, storableDashboard.OrgID, nil }, storableDashboard.OrgID, nil
} }
@@ -163,6 +188,29 @@ func (module *module) DeletePublic(ctx context.Context, orgID valuer.UUID, dashb
return errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error()) return errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
} }
publicDashboard, err := module.GetPublic(ctx, orgID, dashboardID)
if err != nil {
return err
}
role, err := module.role.GetOrCreate(ctx, roletypes.NewRole(roletypes.AnonymousUserRoleName, roletypes.AnonymousUserRoleDescription, roletypes.RoleTypeManaged.StringValue(), orgID))
if err != nil {
return err
}
deletionObject := authtypes.MustNewObject(
authtypes.Resource{
Name: dashboardtypes.TypeableMetaResourcePublicDashboard.Name(),
Type: authtypes.TypeMetaResource,
},
authtypes.MustNewSelector(authtypes.TypeMetaResource, publicDashboard.ID.String()),
)
err = module.role.PatchObjects(ctx, orgID, role.ID, authtypes.RelationRead, nil, []*authtypes.Object{deletionObject})
if err != nil {
return err
}
err = module.store.DeletePublic(ctx, dashboardID.StringValue()) err = module.store.DeletePublic(ctx, dashboardID.StringValue())
if err != nil { if err != nil {
return err return err
@@ -200,6 +248,10 @@ func (module *module) GetByMetricNames(ctx context.Context, orgID valuer.UUID, m
return module.pkgDashboardModule.GetByMetricNames(ctx, orgID, metricNames) return module.pkgDashboardModule.GetByMetricNames(ctx, orgID, metricNames)
} }
func (module *module) MustGetTypeables() []authtypes.Typeable {
return module.pkgDashboardModule.MustGetTypeables()
}
func (module *module) List(ctx context.Context, orgID valuer.UUID) ([]*dashboardtypes.Dashboard, error) { func (module *module) List(ctx context.Context, orgID valuer.UUID) ([]*dashboardtypes.Dashboard, error) {
return module.pkgDashboardModule.List(ctx, orgID) return module.pkgDashboardModule.List(ctx, orgID)
} }
@@ -212,28 +264,34 @@ func (module *module) LockUnlock(ctx context.Context, orgID valuer.UUID, id valu
return module.pkgDashboardModule.LockUnlock(ctx, orgID, id, updatedBy, role, lock) return module.pkgDashboardModule.LockUnlock(ctx, orgID, id, updatedBy, role, lock)
} }
func (module *module) MustGetTypeables() []authtypes.Typeable { func (module *module) deletePublic(ctx context.Context, orgID valuer.UUID, dashboardID valuer.UUID) error {
return module.pkgDashboardModule.MustGetTypeables() publicDashboard, err := module.store.GetPublic(ctx, dashboardID.String())
} if err != nil {
return err
func (module *module) MustGetManagedRoleTransactions() map[string][]*authtypes.Transaction {
return map[string][]*authtypes.Transaction{
roletypes.SigNozAnonymousRoleName: {
{
ID: valuer.GenerateUUID(),
Relation: authtypes.RelationRead,
Object: *authtypes.MustNewObject(
authtypes.Resource{
Type: authtypes.TypeMetaResource,
Name: dashboardtypes.TypeableMetaResourcePublicDashboard.Name(),
},
authtypes.MustNewSelector(authtypes.TypeMetaResource, "*"),
),
},
},
} }
}
func (module *module) deletePublic(ctx context.Context, _ valuer.UUID, dashboardID valuer.UUID) error { role, err := module.role.GetOrCreate(ctx, roletypes.NewRole(roletypes.AnonymousUserRoleName, roletypes.AnonymousUserRoleDescription, roletypes.RoleTypeManaged.StringValue(), orgID))
return module.store.DeletePublic(ctx, dashboardID.StringValue()) if err != nil {
return err
}
deletionObject := authtypes.MustNewObject(
authtypes.Resource{
Name: dashboardtypes.TypeableMetaResourcePublicDashboard.Name(),
Type: authtypes.TypeMetaResource,
},
authtypes.MustNewSelector(authtypes.TypeMetaResource, publicDashboard.ID.String()),
)
err = module.role.PatchObjects(ctx, orgID, role.ID, authtypes.RelationRead, nil, []*authtypes.Object{deletionObject})
if err != nil {
return err
}
err = module.store.DeletePublic(ctx, dashboardID.StringValue())
if err != nil {
return err
}
return nil
} }

View File

@@ -1,178 +0,0 @@
package querier
import (
"bytes"
"context"
"encoding/json"
"io"
"net/http"
"runtime/debug"
anomalyV2 "github.com/SigNoz/signoz/ee/anomaly"
"github.com/SigNoz/signoz/pkg/errors"
"github.com/SigNoz/signoz/pkg/factory"
"github.com/SigNoz/signoz/pkg/http/render"
"github.com/SigNoz/signoz/pkg/querier"
"github.com/SigNoz/signoz/pkg/types/authtypes"
qbtypes "github.com/SigNoz/signoz/pkg/types/querybuildertypes/querybuildertypesv5"
"github.com/SigNoz/signoz/pkg/valuer"
)
type handler struct {
set factory.ProviderSettings
querier querier.Querier
community querier.Handler
}
func NewHandler(set factory.ProviderSettings, querier querier.Querier, community querier.Handler) querier.Handler {
return &handler{
set: set,
querier: querier,
community: community,
}
}
func (h *handler) QueryRange(rw http.ResponseWriter, req *http.Request) {
bodyBytes, err := io.ReadAll(req.Body)
if err != nil {
render.Error(rw, errors.NewInvalidInputf(errors.CodeInvalidInput, "failed to read request body: %v", err))
return
}
req.Body = io.NopCloser(bytes.NewBuffer(bodyBytes))
ctx := req.Context()
claims, err := authtypes.ClaimsFromContext(ctx)
if err != nil {
render.Error(rw, err)
return
}
var queryRangeRequest qbtypes.QueryRangeRequest
if err := json.NewDecoder(req.Body).Decode(&queryRangeRequest); err != nil {
render.Error(rw, errors.NewInvalidInputf(errors.CodeInvalidInput, "failed to decode request body: %v", err))
return
}
defer func() {
if r := recover(); r != nil {
stackTrace := string(debug.Stack())
queryJSON, _ := json.Marshal(queryRangeRequest)
h.set.Logger.ErrorContext(ctx, "panic in QueryRange",
"error", r,
"user", claims.UserID,
"payload", string(queryJSON),
"stacktrace", stackTrace,
)
render.Error(rw, errors.NewInternalf(
errors.CodeInternal,
"Something went wrong on our end. It's not you, it's us. Our team is notified about it. Reach out to support if issue persists.",
))
}
}()
if err := queryRangeRequest.Validate(); err != nil {
render.Error(rw, err)
return
}
orgID, err := valuer.NewUUID(claims.OrgID)
if err != nil {
render.Error(rw, err)
return
}
if anomalyQuery, ok := queryRangeRequest.IsAnomalyRequest(); ok {
anomalies, err := h.handleAnomalyQuery(ctx, orgID, anomalyQuery, queryRangeRequest)
if err != nil {
render.Error(rw, errors.NewInternalf(errors.CodeInternal, "failed to get anomalies: %v", err))
return
}
results := []any{}
for _, item := range anomalies.Results {
results = append(results, item)
}
// Build step intervals from the anomaly query
stepIntervals := make(map[string]uint64)
if anomalyQuery.StepInterval.Duration > 0 {
stepIntervals[anomalyQuery.Name] = uint64(anomalyQuery.StepInterval.Duration.Seconds())
}
finalResp := &qbtypes.QueryRangeResponse{
Type: queryRangeRequest.RequestType,
Data: qbtypes.QueryData{
Results: results,
},
Meta: qbtypes.ExecStats{
StepIntervals: stepIntervals,
},
}
render.Success(rw, http.StatusOK, finalResp)
return
}
// regular query range request, delegate to community handler
req.Body = io.NopCloser(bytes.NewBuffer(bodyBytes))
h.community.QueryRange(rw, req)
}
func (h *handler) QueryRawStream(rw http.ResponseWriter, req *http.Request) {
h.community.QueryRawStream(rw, req)
}
func (h *handler) ReplaceVariables(rw http.ResponseWriter, req *http.Request) {
h.community.ReplaceVariables(rw, req)
}
func extractSeasonality(anomalyQuery *qbtypes.QueryBuilderQuery[qbtypes.MetricAggregation]) anomalyV2.Seasonality {
for _, fn := range anomalyQuery.Functions {
if fn.Name == qbtypes.FunctionNameAnomaly {
for _, arg := range fn.Args {
if arg.Name == "seasonality" {
if seasonalityStr, ok := arg.Value.(string); ok {
switch seasonalityStr {
case "weekly":
return anomalyV2.SeasonalityWeekly
case "hourly":
return anomalyV2.SeasonalityHourly
}
}
}
}
}
}
return anomalyV2.SeasonalityDaily // default
}
func (h *handler) createAnomalyProvider(seasonality anomalyV2.Seasonality) anomalyV2.Provider {
switch seasonality {
case anomalyV2.SeasonalityWeekly:
return anomalyV2.NewWeeklyProvider(
anomalyV2.WithQuerier[*anomalyV2.WeeklyProvider](h.querier),
anomalyV2.WithLogger[*anomalyV2.WeeklyProvider](h.set.Logger),
)
case anomalyV2.SeasonalityHourly:
return anomalyV2.NewHourlyProvider(
anomalyV2.WithQuerier[*anomalyV2.HourlyProvider](h.querier),
anomalyV2.WithLogger[*anomalyV2.HourlyProvider](h.set.Logger),
)
default:
return anomalyV2.NewDailyProvider(
anomalyV2.WithQuerier[*anomalyV2.DailyProvider](h.querier),
anomalyV2.WithLogger[*anomalyV2.DailyProvider](h.set.Logger),
)
}
}
func (h *handler) handleAnomalyQuery(ctx context.Context, orgID valuer.UUID, anomalyQuery *qbtypes.QueryBuilderQuery[qbtypes.MetricAggregation], queryRangeRequest qbtypes.QueryRangeRequest) (*anomalyV2.AnomaliesResponse, error) {
seasonality := extractSeasonality(anomalyQuery)
provider := h.createAnomalyProvider(seasonality)
return provider.GetAnomalies(ctx, orgID, &anomalyV2.AnomaliesRequest{Params: queryRangeRequest})
}

View File

@@ -50,7 +50,7 @@ type GetAnomaliesResponse struct {
// //
// ^ ^ // ^ ^
// | | // | |
// (rounded value for past period) + (seasonal growth) // (rounded value for past peiod) + (seasonal growth)
// //
// score = abs(value - prediction) / stddev (current_season_query) // score = abs(value - prediction) / stddev (current_season_query)
type anomalyQueryParams struct { type anomalyQueryParams struct {
@@ -74,12 +74,12 @@ type anomalyQueryParams struct {
// : For daily seasonality, this is the query range params for the (now-2d-5m, now-1d) // : For daily seasonality, this is the query range params for the (now-2d-5m, now-1d)
// : For hourly seasonality, this is the query range params for the (now-2h-5m, now-1h) // : For hourly seasonality, this is the query range params for the (now-2h-5m, now-1h)
PastSeasonQuery *v3.QueryRangeParamsV3 PastSeasonQuery *v3.QueryRangeParamsV3
// Past2SeasonQuery is the query range params for past 2 seasonal periods to the current season // Past2SeasonQuery is the query range params for past 2 seasonal period to the current season
// Example: For weekly seasonality, this is the query range params for the (now-3w-5m, now-2w) // Example: For weekly seasonality, this is the query range params for the (now-3w-5m, now-2w)
// : For daily seasonality, this is the query range params for the (now-3d-5m, now-2d) // : For daily seasonality, this is the query range params for the (now-3d-5m, now-2d)
// : For hourly seasonality, this is the query range params for the (now-3h-5m, now-2h) // : For hourly seasonality, this is the query range params for the (now-3h-5m, now-2h)
Past2SeasonQuery *v3.QueryRangeParamsV3 Past2SeasonQuery *v3.QueryRangeParamsV3
// Past3SeasonQuery is the query range params for past 3 seasonal periods to the current season // Past3SeasonQuery is the query range params for past 3 seasonal period to the current season
// Example: For weekly seasonality, this is the query range params for the (now-4w-5m, now-3w) // Example: For weekly seasonality, this is the query range params for the (now-4w-5m, now-3w)
// : For daily seasonality, this is the query range params for the (now-4d-5m, now-3d) // : For daily seasonality, this is the query range params for the (now-4d-5m, now-3d)
// : For hourly seasonality, this is the query range params for the (now-4h-5m, now-3h) // : For hourly seasonality, this is the query range params for the (now-4h-5m, now-3h)

View File

@@ -2,13 +2,17 @@ package api
import ( import (
"net/http" "net/http"
"net/http/httputil"
"time" "time"
"github.com/SigNoz/signoz/ee/licensing/httplicensing" "github.com/SigNoz/signoz/ee/licensing/httplicensing"
"github.com/SigNoz/signoz/ee/query-service/integrations/gateway"
"github.com/SigNoz/signoz/ee/query-service/usage" "github.com/SigNoz/signoz/ee/query-service/usage"
"github.com/SigNoz/signoz/pkg/alertmanager" "github.com/SigNoz/signoz/pkg/alertmanager"
"github.com/SigNoz/signoz/pkg/apis/fields"
"github.com/SigNoz/signoz/pkg/global" "github.com/SigNoz/signoz/pkg/global"
"github.com/SigNoz/signoz/pkg/http/middleware" "github.com/SigNoz/signoz/pkg/http/middleware"
querierAPI "github.com/SigNoz/signoz/pkg/querier"
baseapp "github.com/SigNoz/signoz/pkg/query-service/app" baseapp "github.com/SigNoz/signoz/pkg/query-service/app"
"github.com/SigNoz/signoz/pkg/query-service/app/cloudintegrations" "github.com/SigNoz/signoz/pkg/query-service/app/cloudintegrations"
"github.com/SigNoz/signoz/pkg/query-service/app/integrations" "github.com/SigNoz/signoz/pkg/query-service/app/integrations"
@@ -29,6 +33,7 @@ type APIHandlerOptions struct {
IntegrationsController *integrations.Controller IntegrationsController *integrations.Controller
CloudIntegrationsController *cloudintegrations.Controller CloudIntegrationsController *cloudintegrations.Controller
LogsParsingPipelineController *logparsingpipeline.LogParsingPipelineController LogsParsingPipelineController *logparsingpipeline.LogParsingPipelineController
Gateway *httputil.ReverseProxy
GatewayUrl string GatewayUrl string
// Querier Influx Interval // Querier Influx Interval
FluxInterval time.Duration FluxInterval time.Duration
@@ -41,7 +46,7 @@ type APIHandler struct {
} }
// NewAPIHandler returns an APIHandler // NewAPIHandler returns an APIHandler
func NewAPIHandler(opts APIHandlerOptions, signoz *signoz.SigNoz, config signoz.Config) (*APIHandler, error) { func NewAPIHandler(opts APIHandlerOptions, signoz *signoz.SigNoz) (*APIHandler, error) {
baseHandler, err := baseapp.NewAPIHandler(baseapp.APIHandlerOpts{ baseHandler, err := baseapp.NewAPIHandler(baseapp.APIHandlerOpts{
Reader: opts.DataConnector, Reader: opts.DataConnector,
RuleManager: opts.RulesManager, RuleManager: opts.RulesManager,
@@ -51,9 +56,11 @@ func NewAPIHandler(opts APIHandlerOptions, signoz *signoz.SigNoz, config signoz.
FluxInterval: opts.FluxInterval, FluxInterval: opts.FluxInterval,
AlertmanagerAPI: alertmanager.NewAPI(signoz.Alertmanager), AlertmanagerAPI: alertmanager.NewAPI(signoz.Alertmanager),
LicensingAPI: httplicensing.NewLicensingAPI(signoz.Licensing), LicensingAPI: httplicensing.NewLicensingAPI(signoz.Licensing),
FieldsAPI: fields.NewAPI(signoz.Instrumentation.ToProviderSettings(), signoz.TelemetryStore),
Signoz: signoz, Signoz: signoz,
QuerierAPI: querierAPI.NewAPI(signoz.Instrumentation.ToProviderSettings(), signoz.Querier, signoz.Analytics),
QueryParserAPI: queryparser.NewAPI(signoz.Instrumentation.ToProviderSettings(), signoz.QueryParser), QueryParserAPI: queryparser.NewAPI(signoz.Instrumentation.ToProviderSettings(), signoz.QueryParser),
}, config) })
if err != nil { if err != nil {
return nil, err return nil, err
@@ -74,6 +81,10 @@ func (ah *APIHandler) UM() *usage.Manager {
return ah.opts.UsageManager return ah.opts.UsageManager
} }
func (ah *APIHandler) Gateway() *httputil.ReverseProxy {
return ah.opts.Gateway
}
// RegisterRoutes registers routes for this handler on the given router // RegisterRoutes registers routes for this handler on the given router
func (ah *APIHandler) RegisterRoutes(router *mux.Router, am *middleware.AuthZ) { func (ah *APIHandler) RegisterRoutes(router *mux.Router, am *middleware.AuthZ) {
// note: add ee override methods first // note: add ee override methods first
@@ -96,6 +107,14 @@ func (ah *APIHandler) RegisterRoutes(router *mux.Router, am *middleware.AuthZ) {
// v4 // v4
router.HandleFunc("/api/v4/query_range", am.ViewAccess(ah.queryRangeV4)).Methods(http.MethodPost) router.HandleFunc("/api/v4/query_range", am.ViewAccess(ah.queryRangeV4)).Methods(http.MethodPost)
// v5
router.HandleFunc("/api/v5/query_range", am.ViewAccess(ah.queryRangeV5)).Methods(http.MethodPost)
router.HandleFunc("/api/v5/substitute_vars", am.ViewAccess(ah.QuerierAPI.ReplaceVariables)).Methods(http.MethodPost)
// Gateway
router.PathPrefix(gateway.RoutePrefix).HandlerFunc(am.EditAccess(ah.ServeGatewayHTTP))
ah.APIHandler.RegisterRoutes(router, am) ah.APIHandler.RegisterRoutes(router, am)
} }

View File

@@ -0,0 +1,58 @@
package api
import (
"net/http"
"strings"
"github.com/SigNoz/signoz/ee/query-service/integrations/gateway"
"github.com/SigNoz/signoz/pkg/errors"
"github.com/SigNoz/signoz/pkg/http/render"
"github.com/SigNoz/signoz/pkg/types/authtypes"
"github.com/SigNoz/signoz/pkg/valuer"
)
func (ah *APIHandler) ServeGatewayHTTP(rw http.ResponseWriter, req *http.Request) {
ctx := req.Context()
claims, err := authtypes.ClaimsFromContext(ctx)
if err != nil {
render.Error(rw, err)
return
}
orgID, err := valuer.NewUUID(claims.OrgID)
if err != nil {
render.Error(rw, errors.Newf(errors.TypeInvalidInput, errors.CodeInvalidInput, "orgId is invalid"))
return
}
validPath := false
for _, allowedPrefix := range gateway.AllowedPrefix {
if strings.HasPrefix(req.URL.Path, gateway.RoutePrefix+allowedPrefix) {
validPath = true
break
}
}
if !validPath {
rw.WriteHeader(http.StatusNotFound)
return
}
license, err := ah.Signoz.Licensing.GetActive(ctx, orgID)
if err != nil {
render.Error(rw, err)
return
}
//Create headers
var licenseKey string
if license != nil {
licenseKey = license.Key
}
req.Header.Set("X-Signoz-Cloud-Api-Key", licenseKey)
req.Header.Set("X-Consumer-Username", "lid:00000000-0000-0000-0000-000000000000")
req.Header.Set("X-Consumer-Groups", "ns:default")
ah.Gateway().ServeHTTP(rw, req)
}

View File

@@ -2,11 +2,16 @@ package api
import ( import (
"bytes" "bytes"
"context"
"encoding/json"
"fmt" "fmt"
"io" "io"
"net/http" "net/http"
"runtime/debug"
anomalyV2 "github.com/SigNoz/signoz/ee/anomaly"
"github.com/SigNoz/signoz/ee/query-service/anomaly" "github.com/SigNoz/signoz/ee/query-service/anomaly"
"github.com/SigNoz/signoz/pkg/errors"
"github.com/SigNoz/signoz/pkg/http/render" "github.com/SigNoz/signoz/pkg/http/render"
baseapp "github.com/SigNoz/signoz/pkg/query-service/app" baseapp "github.com/SigNoz/signoz/pkg/query-service/app"
"github.com/SigNoz/signoz/pkg/query-service/app/queryBuilder" "github.com/SigNoz/signoz/pkg/query-service/app/queryBuilder"
@@ -15,6 +20,8 @@ import (
"github.com/SigNoz/signoz/pkg/types/authtypes" "github.com/SigNoz/signoz/pkg/types/authtypes"
"github.com/SigNoz/signoz/pkg/valuer" "github.com/SigNoz/signoz/pkg/valuer"
"go.uber.org/zap" "go.uber.org/zap"
qbtypes "github.com/SigNoz/signoz/pkg/types/querybuildertypes/querybuildertypesv5"
) )
func (aH *APIHandler) queryRangeV4(w http.ResponseWriter, r *http.Request) { func (aH *APIHandler) queryRangeV4(w http.ResponseWriter, r *http.Request) {
@@ -137,3 +144,140 @@ func (aH *APIHandler) queryRangeV4(w http.ResponseWriter, r *http.Request) {
} }
} }
func extractSeasonality(anomalyQuery *qbtypes.QueryBuilderQuery[qbtypes.MetricAggregation]) anomalyV2.Seasonality {
for _, fn := range anomalyQuery.Functions {
if fn.Name == qbtypes.FunctionNameAnomaly {
for _, arg := range fn.Args {
if arg.Name == "seasonality" {
if seasonalityStr, ok := arg.Value.(string); ok {
switch seasonalityStr {
case "weekly":
return anomalyV2.SeasonalityWeekly
case "hourly":
return anomalyV2.SeasonalityHourly
}
}
}
}
}
}
return anomalyV2.SeasonalityDaily // default
}
func createAnomalyProvider(aH *APIHandler, seasonality anomalyV2.Seasonality) anomalyV2.Provider {
switch seasonality {
case anomalyV2.SeasonalityWeekly:
return anomalyV2.NewWeeklyProvider(
anomalyV2.WithQuerier[*anomalyV2.WeeklyProvider](aH.Signoz.Querier),
anomalyV2.WithLogger[*anomalyV2.WeeklyProvider](aH.Signoz.Instrumentation.Logger()),
)
case anomalyV2.SeasonalityHourly:
return anomalyV2.NewHourlyProvider(
anomalyV2.WithQuerier[*anomalyV2.HourlyProvider](aH.Signoz.Querier),
anomalyV2.WithLogger[*anomalyV2.HourlyProvider](aH.Signoz.Instrumentation.Logger()),
)
default:
return anomalyV2.NewDailyProvider(
anomalyV2.WithQuerier[*anomalyV2.DailyProvider](aH.Signoz.Querier),
anomalyV2.WithLogger[*anomalyV2.DailyProvider](aH.Signoz.Instrumentation.Logger()),
)
}
}
func (aH *APIHandler) handleAnomalyQuery(ctx context.Context, orgID valuer.UUID, anomalyQuery *qbtypes.QueryBuilderQuery[qbtypes.MetricAggregation], queryRangeRequest qbtypes.QueryRangeRequest) (*anomalyV2.AnomaliesResponse, error) {
seasonality := extractSeasonality(anomalyQuery)
provider := createAnomalyProvider(aH, seasonality)
return provider.GetAnomalies(ctx, orgID, &anomalyV2.AnomaliesRequest{Params: queryRangeRequest})
}
func (aH *APIHandler) queryRangeV5(rw http.ResponseWriter, req *http.Request) {
bodyBytes, err := io.ReadAll(req.Body)
if err != nil {
render.Error(rw, errors.NewInvalidInputf(errors.CodeInvalidInput, "failed to read request body: %v", err))
return
}
req.Body = io.NopCloser(bytes.NewBuffer(bodyBytes))
ctx := req.Context()
claims, err := authtypes.ClaimsFromContext(ctx)
if err != nil {
render.Error(rw, err)
return
}
var queryRangeRequest qbtypes.QueryRangeRequest
if err := json.NewDecoder(req.Body).Decode(&queryRangeRequest); err != nil {
render.Error(rw, errors.NewInvalidInputf(errors.CodeInvalidInput, "failed to decode request body: %v", err))
return
}
defer func() {
if r := recover(); r != nil {
stackTrace := string(debug.Stack())
queryJSON, _ := json.Marshal(queryRangeRequest)
aH.Signoz.Instrumentation.Logger().ErrorContext(ctx, "panic in QueryRange",
"error", r,
"user", claims.UserID,
"payload", string(queryJSON),
"stacktrace", stackTrace,
)
render.Error(rw, errors.NewInternalf(
errors.CodeInternal,
"Something went wrong on our end. It's not you, it's us. Our team is notified about it. Reach out to support if issue persists.",
))
}
}()
if err := queryRangeRequest.Validate(); err != nil {
render.Error(rw, err)
return
}
orgID, err := valuer.NewUUID(claims.OrgID)
if err != nil {
render.Error(rw, err)
return
}
if anomalyQuery, ok := queryRangeRequest.IsAnomalyRequest(); ok {
anomalies, err := aH.handleAnomalyQuery(ctx, orgID, anomalyQuery, queryRangeRequest)
if err != nil {
render.Error(rw, errors.NewInternalf(errors.CodeInternal, "failed to get anomalies: %v", err))
return
}
results := []any{}
for _, item := range anomalies.Results {
results = append(results, item)
}
// Build step intervals from the anomaly query
stepIntervals := make(map[string]uint64)
if anomalyQuery.StepInterval.Duration > 0 {
stepIntervals[anomalyQuery.Name] = uint64(anomalyQuery.StepInterval.Duration.Seconds())
}
finalResp := &qbtypes.QueryRangeResponse{
Type: queryRangeRequest.RequestType,
Data: qbtypes.QueryData{
Results: results,
},
Meta: qbtypes.ExecStats{
StepIntervals: stepIntervals,
},
}
render.Success(rw, http.StatusOK, finalResp)
return
} else {
// regular query range request, let the querier handle it
req.Body = io.NopCloser(bytes.NewBuffer(bodyBytes))
aH.QuerierAPI.QueryRange(rw, req)
}
}

View File

@@ -19,6 +19,7 @@ import (
"github.com/gorilla/handlers" "github.com/gorilla/handlers"
"github.com/SigNoz/signoz/ee/query-service/app/api" "github.com/SigNoz/signoz/ee/query-service/app/api"
"github.com/SigNoz/signoz/ee/query-service/integrations/gateway"
"github.com/SigNoz/signoz/ee/query-service/rules" "github.com/SigNoz/signoz/ee/query-service/rules"
"github.com/SigNoz/signoz/ee/query-service/usage" "github.com/SigNoz/signoz/ee/query-service/usage"
"github.com/SigNoz/signoz/pkg/alertmanager" "github.com/SigNoz/signoz/pkg/alertmanager"
@@ -71,6 +72,11 @@ type Server struct {
// NewServer creates and initializes Server // NewServer creates and initializes Server
func NewServer(config signoz.Config, signoz *signoz.SigNoz) (*Server, error) { func NewServer(config signoz.Config, signoz *signoz.SigNoz) (*Server, error) {
gatewayProxy, err := gateway.NewProxy(config.Gateway.URL.String(), gateway.RoutePrefix)
if err != nil {
return nil, err
}
cacheForTraceDetail, err := memorycache.New(context.TODO(), signoz.Instrumentation.ToProviderSettings(), cache.Config{ cacheForTraceDetail, err := memorycache.New(context.TODO(), signoz.Instrumentation.ToProviderSettings(), cache.Config{
Provider: "memory", Provider: "memory",
Memory: cache.Memory{ Memory: cache.Memory{
@@ -164,11 +170,12 @@ func NewServer(config signoz.Config, signoz *signoz.SigNoz) (*Server, error) {
CloudIntegrationsController: cloudIntegrationsController, CloudIntegrationsController: cloudIntegrationsController,
LogsParsingPipelineController: logParsingPipelineController, LogsParsingPipelineController: logParsingPipelineController,
FluxInterval: config.Querier.FluxInterval, FluxInterval: config.Querier.FluxInterval,
Gateway: gatewayProxy,
GatewayUrl: config.Gateway.URL.String(), GatewayUrl: config.Gateway.URL.String(),
GlobalConfig: config.Global, GlobalConfig: config.Global,
} }
apiHandler, err := api.NewAPIHandler(apiOpts, signoz, config) apiHandler, err := api.NewAPIHandler(apiOpts, signoz)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -230,9 +237,11 @@ func (s *Server) createPublicServer(apiHandler *api.APIHandler, web web.Web) (*h
apiHandler.RegisterLogsRoutes(r, am) apiHandler.RegisterLogsRoutes(r, am)
apiHandler.RegisterIntegrationRoutes(r, am) apiHandler.RegisterIntegrationRoutes(r, am)
apiHandler.RegisterCloudIntegrationsRoutes(r, am) apiHandler.RegisterCloudIntegrationsRoutes(r, am)
apiHandler.RegisterFieldsRoutes(r, am)
apiHandler.RegisterQueryRangeV3Routes(r, am) apiHandler.RegisterQueryRangeV3Routes(r, am)
apiHandler.RegisterInfraMetricsRoutes(r, am) apiHandler.RegisterInfraMetricsRoutes(r, am)
apiHandler.RegisterQueryRangeV4Routes(r, am) apiHandler.RegisterQueryRangeV4Routes(r, am)
apiHandler.RegisterQueryRangeV5Routes(r, am)
apiHandler.RegisterWebSocketPaths(r, am) apiHandler.RegisterWebSocketPaths(r, am)
apiHandler.RegisterMessagingQueuesRoutes(r, am) apiHandler.RegisterMessagingQueuesRoutes(r, am)
apiHandler.RegisterThirdPartyApiRoutes(r, am) apiHandler.RegisterThirdPartyApiRoutes(r, am)

View File

@@ -0,0 +1,9 @@
package gateway
import (
"net/http/httputil"
)
func NewNoopProxy() (*httputil.ReverseProxy, error) {
return &httputil.ReverseProxy{}, nil
}

View File

@@ -0,0 +1,66 @@
package gateway
import (
"net/http"
"net/http/httputil"
"net/url"
"path"
"strings"
)
var (
RoutePrefix string = "/api/gateway"
AllowedPrefix []string = []string{"/v1/workspaces/me", "/v2/profiles/me", "/v2/deployments/me"}
)
type proxy struct {
url *url.URL
stripPath string
}
func NewProxy(u string, stripPath string) (*httputil.ReverseProxy, error) {
url, err := url.Parse(u)
if err != nil {
return nil, err
}
proxy := &proxy{url: url, stripPath: stripPath}
return &httputil.ReverseProxy{
Rewrite: proxy.rewrite,
ModifyResponse: proxy.modifyResponse,
ErrorHandler: proxy.errorHandler,
}, nil
}
func (p *proxy) rewrite(pr *httputil.ProxyRequest) {
pr.SetURL(p.url)
pr.SetXForwarded()
pr.Out.URL.Path = cleanPath(strings.ReplaceAll(pr.Out.URL.Path, p.stripPath, ""))
}
func (p *proxy) modifyResponse(res *http.Response) error {
return nil
}
func (p *proxy) errorHandler(rw http.ResponseWriter, req *http.Request, err error) {
rw.WriteHeader(http.StatusBadGateway)
}
func cleanPath(p string) string {
if p == "" {
return "/"
}
if p[0] != '/' {
p = "/" + p
}
np := path.Clean(p)
if p[len(p)-1] == '/' && np != "/" {
if len(p) == len(np)+1 && strings.HasPrefix(p, np) {
np = p
} else {
np += "/"
}
}
return np
}

View File

@@ -0,0 +1,61 @@
package gateway
import (
"context"
"net/http"
"net/http/httputil"
"net/url"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestProxyRewrite(t *testing.T) {
testCases := []struct {
name string
url *url.URL
stripPath string
in *url.URL
expected *url.URL
}{
{
name: "SamePathAdded",
url: &url.URL{Scheme: "http", Host: "backend", Path: "/path1"},
stripPath: "/strip",
in: &url.URL{Scheme: "http", Host: "localhost", Path: "/strip/path1"},
expected: &url.URL{Scheme: "http", Host: "backend", Path: "/path1/path1"},
},
{
name: "NoStripPathInput",
url: &url.URL{Scheme: "http", Host: "backend"},
stripPath: "",
in: &url.URL{Scheme: "http", Host: "localhost", Path: "/strip/path1"},
expected: &url.URL{Scheme: "http", Host: "backend", Path: "/strip/path1"},
},
{
name: "NoStripPathPresentInReq",
url: &url.URL{Scheme: "http", Host: "backend"},
stripPath: "/not-found",
in: &url.URL{Scheme: "http", Host: "localhost", Path: "/strip/path1"},
expected: &url.URL{Scheme: "http", Host: "backend", Path: "/strip/path1"},
},
}
for _, tc := range testCases {
proxy, err := NewProxy(tc.url.String(), tc.stripPath)
require.NoError(t, err)
inReq, err := http.NewRequest(http.MethodGet, tc.in.String(), nil)
require.NoError(t, err)
proxyReq := &httputil.ProxyRequest{
In: inReq,
Out: inReq.Clone(context.Background()),
}
proxy.Rewrite(proxyReq)
assert.Equal(t, tc.expected.Host, proxyReq.Out.URL.Host)
assert.Equal(t, tc.expected.Scheme, proxyReq.Out.URL.Scheme)
assert.Equal(t, tc.expected.Path, proxyReq.Out.URL.Path)
assert.Equal(t, tc.expected.Query(), proxyReq.Out.URL.Query())
}
}

View File

@@ -15,7 +15,7 @@ import (
"github.com/SigNoz/signoz/pkg/query-service/common" "github.com/SigNoz/signoz/pkg/query-service/common"
"github.com/SigNoz/signoz/pkg/query-service/model" "github.com/SigNoz/signoz/pkg/query-service/model"
"github.com/SigNoz/signoz/pkg/transition" "github.com/SigNoz/signoz/pkg/transition"
"github.com/SigNoz/signoz/pkg/types/ruletypes" ruletypes "github.com/SigNoz/signoz/pkg/types/ruletypes"
"github.com/SigNoz/signoz/pkg/valuer" "github.com/SigNoz/signoz/pkg/valuer"
querierV2 "github.com/SigNoz/signoz/pkg/query-service/app/querier/v2" querierV2 "github.com/SigNoz/signoz/pkg/query-service/app/querier/v2"
@@ -63,8 +63,6 @@ type AnomalyRule struct {
seasonality anomaly.Seasonality seasonality anomaly.Seasonality
} }
var _ baserules.Rule = (*AnomalyRule)(nil)
func NewAnomalyRule( func NewAnomalyRule(
id string, id string,
orgID valuer.UUID, orgID valuer.UUID,
@@ -236,11 +234,6 @@ func (r *AnomalyRule) buildAndRunQuery(ctx context.Context, orgID valuer.UUID, t
} }
} }
hasData := len(queryResult.AnomalyScores) > 0
if missingDataAlert := r.HandleMissingDataAlert(ctx, ts, hasData); missingDataAlert != nil {
return ruletypes.Vector{*missingDataAlert}, nil
}
var resultVector ruletypes.Vector var resultVector ruletypes.Vector
scoresJSON, _ := json.Marshal(queryResult.AnomalyScores) scoresJSON, _ := json.Marshal(queryResult.AnomalyScores)
@@ -292,11 +285,6 @@ func (r *AnomalyRule) buildAndRunQueryV5(ctx context.Context, orgID valuer.UUID,
queryResult := transition.ConvertV5TimeSeriesDataToV4Result(qbResult) queryResult := transition.ConvertV5TimeSeriesDataToV4Result(qbResult)
hasData := len(queryResult.AnomalyScores) > 0
if missingDataAlert := r.HandleMissingDataAlert(ctx, ts, hasData); missingDataAlert != nil {
return ruletypes.Vector{*missingDataAlert}, nil
}
var resultVector ruletypes.Vector var resultVector ruletypes.Vector
scoresJSON, _ := json.Marshal(queryResult.AnomalyScores) scoresJSON, _ := json.Marshal(queryResult.AnomalyScores)
@@ -492,7 +480,7 @@ func (r *AnomalyRule) Eval(ctx context.Context, ts time.Time) (int, error) {
continue continue
} }
if a.State == model.StatePending && ts.Sub(a.ActiveAt) >= r.HoldDuration().Duration() { if a.State == model.StatePending && ts.Sub(a.ActiveAt) >= r.HoldDuration() {
a.State = model.StateFiring a.State = model.StateFiring
a.FiredAt = ts a.FiredAt = ts
state := model.StateFiring state := model.StateFiring
@@ -555,7 +543,7 @@ func (r *AnomalyRule) String() string {
ar := ruletypes.PostableRule{ ar := ruletypes.PostableRule{
AlertName: r.Name(), AlertName: r.Name(),
RuleCondition: r.Condition(), RuleCondition: r.Condition(),
EvalWindow: r.EvalWindow(), EvalWindow: ruletypes.Duration(r.EvalWindow()),
Labels: r.Labels().Map(), Labels: r.Labels().Map(),
Annotations: r.Annotations().Map(), Annotations: r.Annotations().Map(),
PreferredChannels: r.PreferredChannels(), PreferredChannels: r.PreferredChannels(),

View File

@@ -1,268 +0,0 @@
package rules
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/SigNoz/signoz/ee/query-service/anomaly"
"github.com/SigNoz/signoz/pkg/instrumentation/instrumentationtest"
"github.com/SigNoz/signoz/pkg/query-service/app/clickhouseReader"
v3 "github.com/SigNoz/signoz/pkg/query-service/model/v3"
"github.com/SigNoz/signoz/pkg/telemetrystore"
"github.com/SigNoz/signoz/pkg/telemetrystore/telemetrystoretest"
"github.com/SigNoz/signoz/pkg/types/ruletypes"
"github.com/SigNoz/signoz/pkg/valuer"
)
// mockAnomalyProvider is a mock implementation of anomaly.Provider for testing.
// We need this because the anomaly provider makes 6 different queries for various
// time periods (current, past period, current season, past season, past 2 seasons,
// past 3 seasons), making it cumbersome to create mock data.
type mockAnomalyProvider struct {
responses []*anomaly.GetAnomaliesResponse
callCount int
}
func (m *mockAnomalyProvider) GetAnomalies(ctx context.Context, orgID valuer.UUID, req *anomaly.GetAnomaliesRequest) (*anomaly.GetAnomaliesResponse, error) {
if m.callCount >= len(m.responses) {
return &anomaly.GetAnomaliesResponse{Results: []*v3.Result{}}, nil
}
resp := m.responses[m.callCount]
m.callCount++
return resp, nil
}
func TestAnomalyRule_NoData_AlertOnAbsent(t *testing.T) {
// Test basic AlertOnAbsent functionality (without AbsentFor grace period)
baseTime := time.Unix(1700000000, 0)
evalWindow := valuer.MustParseTextDuration("5m")
evalTime := baseTime.Add(5 * time.Minute)
target := 500.0
postableRule := ruletypes.PostableRule{
AlertName: "Test anomaly no data",
AlertType: ruletypes.AlertTypeMetric,
RuleType: RuleTypeAnomaly,
Evaluation: &ruletypes.EvaluationEnvelope{Kind: ruletypes.RollingEvaluation, Spec: ruletypes.RollingWindow{
EvalWindow: evalWindow,
Frequency: valuer.MustParseTextDuration("1m"),
}},
RuleCondition: &ruletypes.RuleCondition{
CompareOp: ruletypes.ValueIsAbove,
MatchType: ruletypes.AtleastOnce,
Target: &target,
CompositeQuery: &v3.CompositeQuery{
QueryType: v3.QueryTypeBuilder,
BuilderQueries: map[string]*v3.BuilderQuery{
"A": {
QueryName: "A",
Expression: "A",
DataSource: v3.DataSourceMetrics,
Temporality: v3.Unspecified,
},
},
},
SelectedQuery: "A",
Seasonality: "daily",
Thresholds: &ruletypes.RuleThresholdData{
Kind: ruletypes.BasicThresholdKind,
Spec: ruletypes.BasicRuleThresholds{{
Name: "Test anomaly no data",
TargetValue: &target,
MatchType: ruletypes.AtleastOnce,
CompareOp: ruletypes.ValueIsAbove,
}},
},
},
}
responseNoData := &anomaly.GetAnomaliesResponse{
Results: []*v3.Result{
{
QueryName: "A",
AnomalyScores: []*v3.Series{},
},
},
}
cases := []struct {
description string
alertOnAbsent bool
expectAlerts int
}{
{
description: "AlertOnAbsent=false",
alertOnAbsent: false,
expectAlerts: 0,
},
{
description: "AlertOnAbsent=true",
alertOnAbsent: true,
expectAlerts: 1,
},
}
logger := instrumentationtest.New().Logger()
for _, c := range cases {
t.Run(c.description, func(t *testing.T) {
postableRule.RuleCondition.AlertOnAbsent = c.alertOnAbsent
telemetryStore := telemetrystoretest.New(telemetrystore.Config{}, nil)
options := clickhouseReader.NewOptions("primaryNamespace")
reader := clickhouseReader.NewReader(nil, telemetryStore, nil, "", time.Second, nil, nil, options)
rule, err := NewAnomalyRule(
"test-anomaly-rule",
valuer.GenerateUUID(),
&postableRule,
reader,
nil,
logger,
nil,
)
require.NoError(t, err)
rule.provider = &mockAnomalyProvider{
responses: []*anomaly.GetAnomaliesResponse{responseNoData},
}
alertsFound, err := rule.Eval(context.Background(), evalTime)
require.NoError(t, err)
assert.Equal(t, c.expectAlerts, alertsFound)
})
}
}
func TestAnomalyRule_NoData_AbsentFor(t *testing.T) {
// Test missing data alert with AbsentFor grace period
// 1. Call Eval with data at time t1, to populate lastTimestampWithDatapoints
// 2. Call Eval without data at time t2
// 3. Alert fires only if t2 - t1 > AbsentFor
baseTime := time.Unix(1700000000, 0)
evalWindow := valuer.MustParseTextDuration("5m")
// Set target higher than test data so regular threshold alerts don't fire
target := 500.0
postableRule := ruletypes.PostableRule{
AlertName: "Test anomaly no data with AbsentFor",
AlertType: ruletypes.AlertTypeMetric,
RuleType: RuleTypeAnomaly,
Evaluation: &ruletypes.EvaluationEnvelope{Kind: ruletypes.RollingEvaluation, Spec: ruletypes.RollingWindow{
EvalWindow: evalWindow,
Frequency: valuer.MustParseTextDuration("1m"),
}},
RuleCondition: &ruletypes.RuleCondition{
CompareOp: ruletypes.ValueIsAbove,
MatchType: ruletypes.AtleastOnce,
AlertOnAbsent: true,
Target: &target,
CompositeQuery: &v3.CompositeQuery{
QueryType: v3.QueryTypeBuilder,
BuilderQueries: map[string]*v3.BuilderQuery{
"A": {
QueryName: "A",
Expression: "A",
DataSource: v3.DataSourceMetrics,
Temporality: v3.Unspecified,
},
},
},
SelectedQuery: "A",
Seasonality: "daily",
Thresholds: &ruletypes.RuleThresholdData{
Kind: ruletypes.BasicThresholdKind,
Spec: ruletypes.BasicRuleThresholds{{
Name: "Test anomaly no data with AbsentFor",
TargetValue: &target,
MatchType: ruletypes.AtleastOnce,
CompareOp: ruletypes.ValueIsAbove,
}},
},
},
}
responseNoData := &anomaly.GetAnomaliesResponse{
Results: []*v3.Result{
{
QueryName: "A",
AnomalyScores: []*v3.Series{},
},
},
}
cases := []struct {
description string
absentFor uint64
timeBetweenEvals time.Duration
expectAlertOnEval2 int
}{
{
description: "WithinGracePeriod",
absentFor: 5,
timeBetweenEvals: 4 * time.Minute,
expectAlertOnEval2: 0,
},
{
description: "AfterGracePeriod",
absentFor: 5,
timeBetweenEvals: 6 * time.Minute,
expectAlertOnEval2: 1,
},
}
logger := instrumentationtest.New().Logger()
for _, c := range cases {
t.Run(c.description, func(t *testing.T) {
postableRule.RuleCondition.AbsentFor = c.absentFor
t1 := baseTime.Add(5 * time.Minute)
t2 := t1.Add(c.timeBetweenEvals)
responseWithData := &anomaly.GetAnomaliesResponse{
Results: []*v3.Result{
{
QueryName: "A",
AnomalyScores: []*v3.Series{
{
Labels: map[string]string{"test": "label"},
Points: []v3.Point{
{Timestamp: baseTime.UnixMilli(), Value: 1.0},
{Timestamp: baseTime.Add(time.Minute).UnixMilli(), Value: 1.5},
},
},
},
},
},
}
telemetryStore := telemetrystoretest.New(telemetrystore.Config{}, nil)
options := clickhouseReader.NewOptions("primaryNamespace")
reader := clickhouseReader.NewReader(nil, telemetryStore, nil, "", time.Second, nil, nil, options)
rule, err := NewAnomalyRule("test-anomaly-rule", valuer.GenerateUUID(), &postableRule, reader, nil, logger, nil)
require.NoError(t, err)
rule.provider = &mockAnomalyProvider{
responses: []*anomaly.GetAnomaliesResponse{responseWithData, responseNoData},
}
alertsFound1, err := rule.Eval(context.Background(), t1)
require.NoError(t, err)
assert.Equal(t, 0, alertsFound1, "First eval with data should not alert")
alertsFound2, err := rule.Eval(context.Background(), t2)
require.NoError(t, err)
assert.Equal(t, c.expectAlertOnEval2, alertsFound2)
})
}
}

View File

@@ -48,7 +48,7 @@ func PrepareTaskFunc(opts baserules.PrepareTaskOptions) (baserules.Task, error)
rules = append(rules, tr) rules = append(rules, tr)
// create ch rule task for evaluation // create ch rule task for evaluation
task = newTask(baserules.TaskTypeCh, opts.TaskName, evaluation.GetFrequency().Duration(), rules, opts.ManagerOpts, opts.NotifyFunc, opts.MaintenanceStore, opts.OrgID) task = newTask(baserules.TaskTypeCh, opts.TaskName, time.Duration(evaluation.GetFrequency()), rules, opts.ManagerOpts, opts.NotifyFunc, opts.MaintenanceStore, opts.OrgID)
} else if opts.Rule.RuleType == ruletypes.RuleTypeProm { } else if opts.Rule.RuleType == ruletypes.RuleTypeProm {
@@ -72,7 +72,7 @@ func PrepareTaskFunc(opts baserules.PrepareTaskOptions) (baserules.Task, error)
rules = append(rules, pr) rules = append(rules, pr)
// create promql rule task for evaluation // create promql rule task for evaluation
task = newTask(baserules.TaskTypeProm, opts.TaskName, evaluation.GetFrequency().Duration(), rules, opts.ManagerOpts, opts.NotifyFunc, opts.MaintenanceStore, opts.OrgID) task = newTask(baserules.TaskTypeProm, opts.TaskName, time.Duration(evaluation.GetFrequency()), rules, opts.ManagerOpts, opts.NotifyFunc, opts.MaintenanceStore, opts.OrgID)
} else if opts.Rule.RuleType == ruletypes.RuleTypeAnomaly { } else if opts.Rule.RuleType == ruletypes.RuleTypeAnomaly {
// create anomaly rule // create anomaly rule
@@ -96,7 +96,7 @@ func PrepareTaskFunc(opts baserules.PrepareTaskOptions) (baserules.Task, error)
rules = append(rules, ar) rules = append(rules, ar)
// create anomaly rule task for evaluation // create anomaly rule task for evaluation
task = newTask(baserules.TaskTypeCh, opts.TaskName, evaluation.GetFrequency().Duration(), rules, opts.ManagerOpts, opts.NotifyFunc, opts.MaintenanceStore, opts.OrgID) task = newTask(baserules.TaskTypeCh, opts.TaskName, time.Duration(evaluation.GetFrequency()), rules, opts.ManagerOpts, opts.NotifyFunc, opts.MaintenanceStore, opts.OrgID)
} else { } else {
return nil, fmt.Errorf("unsupported rule type %s. Supported types: %s, %s", opts.Rule.RuleType, ruletypes.RuleTypeProm, ruletypes.RuleTypeThreshold) return nil, fmt.Errorf("unsupported rule type %s. Supported types: %s, %s", opts.Rule.RuleType, ruletypes.RuleTypeProm, ruletypes.RuleTypeThreshold)
@@ -213,7 +213,8 @@ func TestNotification(opts baserules.PrepareTestRuleOptions) (int, *basemodel.Ap
return alertsFound, nil return alertsFound, nil
} }
// newTask returns an appropriate group for the rule type // newTask returns an appropriate group for
// rule type
func newTask(taskType baserules.TaskType, name string, frequency time.Duration, rules []baserules.Rule, opts *baserules.ManagerOptions, notify baserules.NotifyFunc, maintenanceStore ruletypes.MaintenanceStore, orgID valuer.UUID) baserules.Task { func newTask(taskType baserules.TaskType, name string, frequency time.Duration, rules []baserules.Rule, opts *baserules.ManagerOptions, notify baserules.NotifyFunc, maintenanceStore ruletypes.MaintenanceStore, orgID valuer.UUID) baserules.Task {
if taskType == baserules.TaskTypeCh { if taskType == baserules.TaskTypeCh {
return baserules.NewRuleTask(name, "", frequency, rules, opts, notify, maintenanceStore, orgID) return baserules.NewRuleTask(name, "", frequency, rules, opts, notify, maintenanceStore, orgID)

View File

@@ -3,7 +3,6 @@ package httpzeus
import ( import (
"bytes" "bytes"
"context" "context"
"encoding/json"
"io" "io"
"net/http" "net/http"
"net/url" "net/url"
@@ -11,7 +10,6 @@ import (
"github.com/SigNoz/signoz/pkg/errors" "github.com/SigNoz/signoz/pkg/errors"
"github.com/SigNoz/signoz/pkg/factory" "github.com/SigNoz/signoz/pkg/factory"
"github.com/SigNoz/signoz/pkg/http/client" "github.com/SigNoz/signoz/pkg/http/client"
"github.com/SigNoz/signoz/pkg/types/zeustypes"
"github.com/SigNoz/signoz/pkg/zeus" "github.com/SigNoz/signoz/pkg/zeus"
"github.com/tidwall/gjson" "github.com/tidwall/gjson"
) )
@@ -121,13 +119,8 @@ func (provider *Provider) PutMeters(ctx context.Context, key string, data []byte
return err return err
} }
func (provider *Provider) PutProfile(ctx context.Context, key string, profile *zeustypes.PostableProfile) error { func (provider *Provider) PutProfile(ctx context.Context, key string, body []byte) error {
body, err := json.Marshal(profile) _, err := provider.do(
if err != nil {
return err
}
_, err = provider.do(
ctx, ctx,
provider.config.URL.JoinPath("/v2/profiles/me"), provider.config.URL.JoinPath("/v2/profiles/me"),
http.MethodPut, http.MethodPut,
@@ -138,15 +131,10 @@ func (provider *Provider) PutProfile(ctx context.Context, key string, profile *z
return err return err
} }
func (provider *Provider) PutHost(ctx context.Context, key string, host *zeustypes.PostableHost) error { func (provider *Provider) PutHost(ctx context.Context, key string, body []byte) error {
body, err := json.Marshal(host) _, err := provider.do(
if err != nil {
return err
}
_, err = provider.do(
ctx, ctx,
provider.config.URL.JoinPath("/v2/deployments/me/host"), provider.config.URL.JoinPath("/v2/deployments/me/hosts"),
http.MethodPut, http.MethodPut,
key, key,
body, body,
@@ -181,28 +169,21 @@ func (provider *Provider) do(ctx context.Context, url *url.URL, method string, k
return body, nil return body, nil
} }
errorMessage := gjson.GetBytes(body, "error").String() return nil, provider.errFromStatusCode(response.StatusCode)
if errorMessage == "" {
errorMessage = "an unknown error occurred"
}
return nil, provider.errFromStatusCode(response.StatusCode, errorMessage)
} }
// This can be taken down to the client package // This can be taken down to the client package
func (provider *Provider) errFromStatusCode(statusCode int, errorMessage string) error { func (provider *Provider) errFromStatusCode(statusCode int) error {
switch statusCode { switch statusCode {
case http.StatusBadRequest: case http.StatusBadRequest:
return errors.New(errors.TypeInvalidInput, errors.CodeInvalidInput, errorMessage) return errors.Newf(errors.TypeInvalidInput, errors.CodeInvalidInput, "bad request")
case http.StatusUnauthorized: case http.StatusUnauthorized:
return errors.New(errors.TypeUnauthenticated, errors.CodeUnauthenticated, errorMessage) return errors.Newf(errors.TypeUnauthenticated, errors.CodeUnauthenticated, "unauthenticated")
case http.StatusForbidden: case http.StatusForbidden:
return errors.New(errors.TypeForbidden, errors.CodeForbidden, errorMessage) return errors.Newf(errors.TypeForbidden, errors.CodeForbidden, "forbidden")
case http.StatusNotFound: case http.StatusNotFound:
return errors.New(errors.TypeNotFound, errors.CodeNotFound, errorMessage) return errors.Newf(errors.TypeNotFound, errors.CodeNotFound, "not found")
case http.StatusConflict:
return errors.New(errors.TypeAlreadyExists, errors.CodeAlreadyExists, errorMessage)
} }
return errors.New(errors.TypeInternal, errors.CodeInternal, errorMessage) return errors.Newf(errors.TypeInternal, errors.CodeInternal, "internal")
} }

View File

@@ -1,74 +0,0 @@
---
description: Core testing conventions - imports, rendering, MSW, interactions, queries
globs: **/*.test.{ts,tsx}
alwaysApply: false
---
# Testing Conventions
## Imports
Always import from the test harness, never directly from `@testing-library/react`:
```ts
import { render, screen, userEvent, waitFor } from 'tests/test-utils';
import { server, rest } from 'mocks-server/server';
```
## Router
Use the built-in router in `render`:
```ts
render(<Page />, undefined, { initialRoute: '/traces-explorer' });
```
Only mock `useLocation` / `useParams` if the test depends on their values.
## MSW
Global MSW server runs automatically. Override per-test:
```ts
server.use(
rest.get('*/api/v1/foo', (_req, res, ctx) =>
res(ctx.status(200), ctx.json({ ok: true })))
);
```
Keep large response fixtures in `mocks-server/__mockdata_`.
## Interactions
- Prefer `userEvent` for real user interactions (click, type, select, tab).
- Use `fireEvent` only for low-level events not covered by `userEvent` (e.g., scroll, resize). Wrap in `act(...)` if needed.
- Always `await` interactions:
```ts
const user = userEvent.setup({ pointerEventsCheck: 0 });
await user.click(screen.getByRole('button', { name: /save/i }));
```
## Timers
No global fake timers. Per-test only, for debounce/throttle:
```ts
jest.useFakeTimers();
const user = userEvent.setup({ advanceTimers: (ms) => jest.advanceTimersByTime(ms) });
await user.type(screen.getByRole('textbox'), 'query');
jest.advanceTimersByTime(400);
jest.useRealTimers();
```
## Queries
Prefer accessible queries: `getByRole` > `findByRole` > `getByLabelText` > visible text > `data-testid` (last resort).
## Anti-patterns
- Never import from `@testing-library/react` directly
- Never use global fake timers
- Never wrap `render` in `act(...)`
- Never mock infra dependencies locally (router, react-query)
- Limit to 3-5 focused tests per file

View File

@@ -1,54 +0,0 @@
---
description: When to use global vs local mocks in tests
globs: **/*.test.{ts,tsx}
alwaysApply: false
---
# Mock Strategy
## Use Global Mocks For
High-frequency dependencies (20+ test files):
- Core infrastructure: react-router-dom, react-query, antd
- Browser APIs: ResizeObserver, matchMedia, localStorage
- Utility libraries: date-fns, lodash
Available global mock files (from jest.config.ts):
- `uplot` -> `__mocks__/uplotMock.ts`
## Use Local Mocks For
- Business logic dependencies (API endpoints, custom hooks, domain components)
- Test-specific behavior (different data per test, error scenarios, loading states)
## Decision Tree
```
Used in 20+ test files?
YES -> Global mock
NO -> Business logic or test-specific?
YES -> Local mock
NO -> Consider global if usage grows
```
## Correct Usage
```ts
// Global mocks are already available - just import
import { useLocation } from 'react-router-dom';
// Local mocks for business logic
jest.mock('../api/tracesService', () => ({
getTraces: jest.fn(() => mockTracesData),
}));
```
## Anti-patterns
```ts
// Never re-mock globally mocked dependencies locally
jest.mock('react-router-dom', () => ({ ... }));
// Never put test-specific data in global mocks
jest.mock('../api/tracesService', () => ({ getTraces: jest.fn(() => specificTestData) }));
```

View File

@@ -1,54 +0,0 @@
---
description: TypeScript type safety requirements for Jest tests
globs: **/*.test.{ts,tsx}
alwaysApply: false
---
# TypeScript Type Safety in Tests
All Jest tests must be fully type-safe. Never use `any`.
## Mock Function Typing
```ts
// Use jest.mocked for module mocks
import useFoo from 'hooks/useFoo';
jest.mock('hooks/useFoo');
const mockUseFoo = jest.mocked(useFoo);
// Use jest.MockedFunction for standalone mocks
const mockFetch = jest.fn() as jest.MockedFunction<(id: number) => Promise<User>>;
```
## Mock Data
Define interfaces for all mock data:
```ts
const mockUser: User = { id: 1, name: 'John', email: 'john@example.com' };
const mockProps: ComponentProps = {
title: 'Test',
data: [mockUser],
onSelect: jest.fn() as jest.MockedFunction<(user: User) => void>,
};
```
## Hook Mocking Pattern
```ts
import useFoo from 'hooks/useFoo';
jest.mock('hooks/useFoo');
const mockUseFoo = jest.mocked(useFoo);
mockUseFoo.mockReturnValue(/* minimal shape */);
```
Prefer helpers (`rqSuccess`, `rqLoading`, `rqError`) for React Query results.
## Checklist
- All mock functions use `jest.MockedFunction<T>` or `jest.mocked()`
- All mock data has proper interfaces
- No `any` types in test files
- Component props are typed
- API response types are defined

484
frontend/.cursorrules Normal file
View File

@@ -0,0 +1,484 @@
# Persona
You are an expert developer with deep knowledge of Jest, React Testing Library, MSW, and TypeScript, tasked with creating unit tests for this repository.
# Auto-detect TypeScript Usage
Check for TypeScript in the project through tsconfig.json or package.json dependencies.
Adjust syntax based on this detection.
# TypeScript Type Safety for Jest Tests
**CRITICAL**: All Jest tests MUST be fully type-safe with proper TypeScript types.
**Type Safety Requirements:**
- Use proper TypeScript interfaces for all mock data
- Type all Jest mock functions with `jest.MockedFunction<T>`
- Use generic types for React components and hooks
- Define proper return types for mock functions
- Use `as const` for literal types when needed
- Avoid `any` type use proper typing instead
# Unit Testing Focus
Focus on critical functionality (business logic, utility functions, component behavior)
Mock dependencies (API calls, external modules) before imports
Test multiple data scenarios (valid inputs, invalid inputs, edge cases)
Write maintainable tests with descriptive names grouped in describe blocks
# Global vs Local Mocks
**Use Global Mocks for:**
- High-frequency dependencies (20+ test files)
- Core infrastructure (react-router-dom, react-query, antd)
- Standard implementations across the app
- Browser APIs (ResizeObserver, matchMedia, localStorage)
- Utility libraries (date-fns, lodash)
**Use Local Mocks for:**
- Business logic dependencies (5-15 test files)
- Test-specific behavior (different data per test)
- API endpoints with specific responses
- Domain-specific components
- Error scenarios and edge cases
**Global Mock Files Available (from jest.config.ts):**
- `uplot` → `__mocks__/uplotMock.ts`
# Repo-specific Testing Conventions
## Imports
Always import from our harness:
```ts
import { render, screen, userEvent, waitFor } from 'tests/test-utils';
```
For API mocks:
```ts
import { server, rest } from 'mocks-server/server';
```
Do not import directly from `@testing-library/react`.
## Router
Use the router built into render:
```ts
render(<Page />, undefined, { initialRoute: '/traces-explorer' });
```
Only mock `useLocation` / `useParams` if the test depends on them.
## Hook Mocks
Pattern:
```ts
import useFoo from 'hooks/useFoo';
jest.mock('hooks/useFoo');
const mockUseFoo = jest.mocked(useFoo);
mockUseFoo.mockReturnValue(/* minimal shape */ as any);
```
Prefer helpers (`rqSuccess`, `rqLoading`, `rqError`) for React Query results.
## MSW
Global MSW server runs automatically.
Override per-test:
```ts
server.use(
rest.get('*/api/v1/foo', (_req, res, ctx) => res(ctx.status(200), ctx.json({ ok: true })))
);
```
Keep large responses in `mocks-server/__mockdata_`.
## Interactions
- Prefer `userEvent` for real user interactions (click, type, select, tab).
- Use `fireEvent` only for low-level/programmatic events not covered by `userEvent` (e.g., scroll, resize, setting `element.scrollTop` for virtualization). Wrap in `act(...)` if needed.
- Always await interactions:
```ts
const user = userEvent.setup({ pointerEventsCheck: 0 });
await user.click(screen.getByRole('button', { name: /save/i }));
```
```ts
// Example: virtualized list scroll (no userEvent helper)
const scroller = container.querySelector('[data-test-id="virtuoso-scroller"]') as HTMLElement;
scroller.scrollTop = targetScrollTop;
act(() => { fireEvent.scroll(scroller); });
```
## Timers
❌ No global fake timers.
✅ Per-test only, for debounce/throttle:
```ts
jest.useFakeTimers();
const user = userEvent.setup({ advanceTimers: (ms) => jest.advanceTimersByTime(ms) });
await user.type(screen.getByRole('textbox'), 'query');
jest.advanceTimersByTime(400);
jest.useRealTimers();
```
## Queries
Prefer accessible queries (`getByRole`, `findByRole`, `getByLabelText`).
Fallback: visible text.
Last resort: `data-testid`.
# Example Test (using only configured global mocks)
```ts
import { render, screen, userEvent, waitFor } from 'tests/test-utils';
import { server, rest } from 'mocks-server/server';
import MyComponent from '../MyComponent';
describe('MyComponent', () => {
it('renders and interacts', async () => {
const user = userEvent.setup({ pointerEventsCheck: 0 });
server.use(
rest.get('*/api/v1/example', (_req, res, ctx) => res(ctx.status(200), ctx.json({ value: 42 })))
);
render(<MyComponent />, undefined, { initialRoute: '/foo' });
expect(await screen.findByText(/value: 42/i)).toBeInTheDocument();
await user.click(screen.getByRole('button', { name: /refresh/i }));
await waitFor(() => expect(screen.getByText(/loading/i)).toBeInTheDocument());
});
});
```
# Anti-patterns
❌ Importing RTL directly
❌ Using global fake timers
❌ Wrapping render in `act(...)`
❌ Mocking infra dependencies locally (router, react-query)
✅ Use our harness (`tests/test-utils`)
✅ Use MSW for API overrides
✅ Use userEvent + await
✅ Pin time only in tests that assert relative dates
# Best Practices
- **Critical Functionality**: Prioritize testing business logic and utilities
- **Dependency Mocking**: Global mocks for infra, local mocks for business logic
- **Data Scenarios**: Always test valid, invalid, and edge cases
- **Descriptive Names**: Make test intent clear
- **Organization**: Group related tests in describe
- **Consistency**: Match repo conventions
- **Edge Cases**: Test null, undefined, unexpected values
- **Limit Scope**: 35 focused tests per file
- **Use Helpers**: `rqSuccess`, `makeUser`, etc.
- **No Any**: Enforce type safety
# Example Test
```ts
import { render, screen, userEvent, waitFor } from 'tests/test-utils';
import { server, rest } from 'mocks-server/server';
import MyComponent from '../MyComponent';
describe('MyComponent', () => {
it('renders and interacts', async () => {
const user = userEvent.setup({ pointerEventsCheck: 0 });
server.use(
rest.get('*/api/v1/example', (_req, res, ctx) => res(ctx.status(200), ctx.json({ value: 42 })))
);
render(<MyComponent />, undefined, { initialRoute: '/foo' });
expect(await screen.findByText(/value: 42/i)).toBeInTheDocument();
await user.click(screen.getByRole('button', { name: /refresh/i }));
await waitFor(() => expect(screen.getByText(/loading/i)).toBeInTheDocument());
});
});
```
# Anti-patterns
❌ Importing RTL directly
❌ Using global fake timers
❌ Wrapping render in `act(...)`
❌ Mocking infra dependencies locally (router, react-query)
✅ Use our harness (`tests/test-utils`)
✅ Use MSW for API overrides
✅ Use userEvent + await
✅ Pin time only in tests that assert relative dates
# TypeScript Type Safety Examples
## Proper Mock Typing
```ts
// ✅ GOOD - Properly typed mocks
interface User {
id: number;
name: string;
email: string;
}
interface ApiResponse<T> {
data: T;
status: number;
message: string;
}
// Type the mock functions
const mockFetchUser = jest.fn() as jest.MockedFunction<(id: number) => Promise<ApiResponse<User>>>;
const mockUpdateUser = jest.fn() as jest.MockedFunction<(user: User) => Promise<ApiResponse<User>>>;
// Mock implementation with proper typing
mockFetchUser.mockResolvedValue({
data: { id: 1, name: 'John Doe', email: 'john@example.com' },
status: 200,
message: 'Success'
});
// ❌ BAD - Using any type
const mockFetchUser = jest.fn() as any; // Don't do this
```
## React Component Testing with Types
```ts
// ✅ GOOD - Properly typed component testing
interface ComponentProps {
title: string;
data: User[];
onUserSelect: (user: User) => void;
isLoading?: boolean;
}
const TestComponent: React.FC<ComponentProps> = ({ title, data, onUserSelect, isLoading = false }) => {
// Component implementation
};
describe('TestComponent', () => {
it('should render with proper props', () => {
// Arrange - Type the props properly
const mockProps: ComponentProps = {
title: 'Test Title',
data: [{ id: 1, name: 'John', email: 'john@example.com' }],
onUserSelect: jest.fn() as jest.MockedFunction<(user: User) => void>,
isLoading: false
};
// Act
render(<TestComponent {...mockProps} />);
// Assert
expect(screen.getByText('Test Title')).toBeInTheDocument();
});
});
```
## Hook Testing with Types
```ts
// ✅ GOOD - Properly typed hook testing
interface UseUserDataReturn {
user: User | null;
loading: boolean;
error: string | null;
refetch: () => void;
}
const useUserData = (id: number): UseUserDataReturn => {
// Hook implementation
};
describe('useUserData', () => {
it('should return user data with proper typing', () => {
// Arrange
const mockUser: User = { id: 1, name: 'John', email: 'john@example.com' };
mockFetchUser.mockResolvedValue({
data: mockUser,
status: 200,
message: 'Success'
});
// Act
const { result } = renderHook(() => useUserData(1));
// Assert
expect(result.current.user).toEqual(mockUser);
expect(result.current.loading).toBe(false);
expect(result.current.error).toBeNull();
});
});
```
## Global Mock Type Safety
```ts
// ✅ GOOD - Type-safe global mocks
// In __mocks__/routerMock.ts
export const mockUseLocation = (overrides: Partial<Location> = {}): Location => ({
pathname: '/traces',
search: '',
hash: '',
state: null,
key: 'test-key',
...overrides,
});
// In test files
const location = useLocation(); // Properly typed from global mock
expect(location.pathname).toBe('/traces');
```
# TypeScript Configuration for Jest
## Required Jest Configuration
```json
// jest.config.ts
{
"preset": "ts-jest/presets/js-with-ts-esm",
"globals": {
"ts-jest": {
"useESM": true,
"isolatedModules": true,
"tsconfig": "<rootDir>/tsconfig.jest.json"
}
},
"extensionsToTreatAsEsm": [".ts", ".tsx"],
"moduleFileExtensions": ["ts", "tsx", "js", "json"]
}
```
## TypeScript Jest Configuration
```json
// tsconfig.jest.json
{
"extends": "./tsconfig.json",
"compilerOptions": {
"types": ["jest", "@testing-library/jest-dom"],
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"moduleResolution": "node"
},
"include": [
"src/**/*",
"**/*.test.ts",
"**/*.test.tsx",
"__mocks__/**/*"
]
}
```
## Common Type Safety Patterns
### Mock Function Typing
```ts
// ✅ GOOD - Proper mock function typing
const mockApiCall = jest.fn() as jest.MockedFunction<typeof apiCall>;
const mockEventHandler = jest.fn() as jest.MockedFunction<(event: Event) => void>;
// ❌ BAD - Using any
const mockApiCall = jest.fn() as any;
```
### Generic Mock Typing
```ts
// ✅ GOOD - Generic mock typing
interface MockApiResponse<T> {
data: T;
status: number;
}
const mockFetchData = jest.fn() as jest.MockedFunction<
<T>(endpoint: string) => Promise<MockApiResponse<T>>
>;
// Usage
mockFetchData<User>('/users').mockResolvedValue({
data: { id: 1, name: 'John' },
status: 200
});
```
### React Testing Library with Types
```ts
// ✅ GOOD - Typed testing utilities
import { render, screen, RenderResult } from '@testing-library/react';
import { ComponentProps } from 'react';
type TestComponentProps = ComponentProps<typeof TestComponent>;
const renderTestComponent = (props: Partial<TestComponentProps> = {}): RenderResult => {
const defaultProps: TestComponentProps = {
title: 'Test',
data: [],
onSelect: jest.fn(),
...props
};
return render(<TestComponent {...defaultProps} />);
};
```
### Error Handling with Types
```ts
// ✅ GOOD - Typed error handling
interface ApiError {
message: string;
code: number;
details?: Record<string, unknown>;
}
const mockApiError: ApiError = {
message: 'API Error',
code: 500,
details: { endpoint: '/users' }
};
mockFetchUser.mockRejectedValue(new Error(JSON.stringify(mockApiError)));
```
## Type Safety Checklist
- [ ] All mock functions use `jest.MockedFunction<T>`
- [ ] All mock data has proper interfaces
- [ ] No `any` types in test files
- [ ] Generic types are used where appropriate
- [ ] Error types are properly defined
- [ ] Component props are typed
- [ ] Hook return types are defined
- [ ] API response types are defined
- [ ] Global mocks are type-safe
- [ ] Test utilities are properly typed
# Mock Decision Tree
```
Is it used in 20+ test files?
├─ YES → Use Global Mock
│ ├─ react-router-dom
│ ├─ react-query
│ ├─ antd components
│ └─ browser APIs
└─ NO → Is it business logic?
├─ YES → Use Local Mock
│ ├─ API endpoints
│ ├─ Custom hooks
│ └─ Domain components
└─ NO → Is it test-specific?
├─ YES → Use Local Mock
│ ├─ Error scenarios
│ ├─ Loading states
│ └─ Specific data
└─ NO → Consider Global Mock
└─ If it becomes frequently used
```
# Common Anti-Patterns to Avoid
❌ **Don't mock global dependencies locally:**
```js
// BAD - This is already globally mocked
jest.mock('react-router-dom', () => ({ ... }));
```
❌ **Don't create global mocks for test-specific data:**
```js
// BAD - This should be local
jest.mock('../api/tracesService', () => ({
getTraces: jest.fn(() => specificTestData)
}));
```
✅ **Do use global mocks for infrastructure:**
```js
// GOOD - Use global mock
import { useLocation } from 'react-router-dom';
```
✅ **Do create local mocks for business logic:**
```js
// GOOD - Local mock for specific test needs
jest.mock('../api/tracesService', () => ({
getTraces: jest.fn(() => mockTracesData)
}));
```

View File

@@ -61,8 +61,6 @@ module.exports = {
curly: 'error', // Requires curly braces for all control statements curly: 'error', // Requires curly braces for all control statements
eqeqeq: ['error', 'always', { null: 'ignore' }], // Enforces === and !== (allows == null for null/undefined check) eqeqeq: ['error', 'always', { null: 'ignore' }], // Enforces === and !== (allows == null for null/undefined check)
'no-console': ['error', { allow: ['warn', 'error'] }], // Warns on console.log, allows console.warn/error 'no-console': ['error', { allow: ['warn', 'error'] }], // Warns on console.log, allows console.warn/error
// TODO: Change this to error in May 2026
'max-params': ['warn', 3], // a function can have max 3 params after which it should become an object
// TypeScript rules // TypeScript rules
'@typescript-eslint/explicit-function-return-type': 'error', // Requires explicit return types on functions '@typescript-eslint/explicit-function-return-type': 'error', // Requires explicit return types on functions
@@ -118,22 +116,23 @@ module.exports = {
}, },
], ],
'import/no-extraneous-dependencies': ['error', { devDependencies: true }], // Prevents importing packages not in package.json 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], // Prevents importing packages not in package.json
'import/no-cycle': 'warn', // Warns about circular dependencies // 'import/no-cycle': 'warn', // TODO: Enable later to detect circular dependencies
// Import sorting rules // TODO: Enable in separate PR with auto fixes
'simple-import-sort/imports': [ // // Import sorting rules
'error', // 'simple-import-sort/imports': [
{ // 'error',
groups: [ // {
['^react', '^@?\\w'], // React first, then external packages // groups: [
['^@/'], // Absolute imports with @ alias // ['^react', '^@?\\w'], // React first, then external packages
['^\\u0000'], // Side effect imports (import './file') // ['^@/'], // Absolute imports with @ alias
['^\\.'], // Relative imports // ['^\\u0000'], // Side effect imports (import './file')
['^.+\\.s?css$'], // Style imports // ['^\\.'], // Relative imports
], // ['^.+\\.s?css$'], // Style imports
}, // ],
], // },
'simple-import-sort/exports': 'error', // Auto-sorts exports // ],
// 'simple-import-sort/exports': 'error', // Auto-sorts exports
// Prettier - code formatting // Prettier - code formatting
'prettier/prettier': [ 'prettier/prettier': [
@@ -148,19 +147,6 @@ module.exports = {
'sonarjs/no-duplicate-string': 'off', // Disabled - can be noisy (enable periodically to check) 'sonarjs/no-duplicate-string': 'off', // Disabled - can be noisy (enable periodically to check)
}, },
overrides: [ overrides: [
{
files: [
'**/*.test.{js,jsx,ts,tsx}',
'**/*.spec.{js,jsx,ts,tsx}',
'**/__tests__/**/*.{js,jsx,ts,tsx}',
],
rules: {
// Tests often have intentional duplication and complexity - disable SonarJS rules
'sonarjs/cognitive-complexity': 'off', // Tests can be complex
'sonarjs/no-identical-functions': 'off', // Similar test patterns are OK
'sonarjs/no-small-switch': 'off', // Small switches are OK in tests
},
},
{ {
files: ['src/api/generated/**/*.ts'], files: ['src/api/generated/**/*.ts'],
rules: { rules: {
@@ -168,6 +154,7 @@ module.exports = {
'@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off',
'no-nested-ternary': 'off', 'no-nested-ternary': 'off',
'@typescript-eslint/no-unused-vars': 'warn', '@typescript-eslint/no-unused-vars': 'warn',
'sonarjs/no-duplicate-string': 'off',
}, },
}, },
], ],

View File

@@ -2,11 +2,6 @@
Embrace the spirit of collaboration and contribute to the success of our open-source project by adhering to these frontend development guidelines with precision and passion. Embrace the spirit of collaboration and contribute to the success of our open-source project by adhering to these frontend development guidelines with precision and passion.
### Export Style
- **React components** (`src/components/`, `src/container/`, `src/pages/`): Prefer **default exports** for the main component in each file
- **Utilities, hooks, APIs, types, constants** (`src/utils/`, `src/hooks/`, `src/api/`, `src/lib/`, `src/types/`, `src/constants/`): Prefer **named exports** for better tree-shaking and explicit imports
### React and Components ### React and Components
- Strive to create small and modular components, ensuring they are divided into individual pieces for improved maintainability and reusability. - Strive to create small and modular components, ensuring they are divided into individual pieces for improved maintainability and reusability.

View File

@@ -12,8 +12,6 @@ export interface MockUPlotInstance {
export interface MockUPlotPaths { export interface MockUPlotPaths {
spline: jest.Mock; spline: jest.Mock;
bars: jest.Mock; bars: jest.Mock;
linear: jest.Mock;
stepped: jest.Mock;
} }
// Create mock instance methods // Create mock instance methods
@@ -25,23 +23,10 @@ const createMockUPlotInstance = (): MockUPlotInstance => ({
setSeries: jest.fn(), setSeries: jest.fn(),
}); });
// Path builder: (self, seriesIdx, idx0, idx1) => paths or null // Create mock paths
const createMockPathBuilder = (name: string): jest.Mock => const mockPaths: MockUPlotPaths = {
jest.fn(() => ({ spline: jest.fn(),
name, // To test if the correct pathBuilder is used bars: jest.fn(),
stroke: jest.fn(),
fill: jest.fn(),
clip: jest.fn(),
}));
// Create mock paths - linear, spline, stepped needed by UPlotSeriesBuilder.getPathBuilder
const mockPaths = {
spline: jest.fn(() => createMockPathBuilder('spline')),
bars: jest.fn(() => createMockPathBuilder('bars')),
linear: jest.fn(() => createMockPathBuilder('linear')),
stepped: jest.fn((opts?: { align?: number }) =>
createMockPathBuilder(`stepped-(${opts?.align ?? 0})`),
),
}; };
// Mock static methods // Mock static methods

View File

@@ -17,8 +17,6 @@ const config: Config.InitialOptions = {
'^hooks/useSafeNavigate$': USE_SAFE_NAVIGATE_MOCK_PATH, '^hooks/useSafeNavigate$': USE_SAFE_NAVIGATE_MOCK_PATH,
'^src/hooks/useSafeNavigate$': USE_SAFE_NAVIGATE_MOCK_PATH, '^src/hooks/useSafeNavigate$': USE_SAFE_NAVIGATE_MOCK_PATH,
'^.*/useSafeNavigate$': USE_SAFE_NAVIGATE_MOCK_PATH, '^.*/useSafeNavigate$': USE_SAFE_NAVIGATE_MOCK_PATH,
'^@signozhq/icons$':
'<rootDir>/node_modules/@signozhq/icons/dist/index.esm.js',
}, },
globals: { globals: {
extensionsToTreatAsEsm: ['.ts'], extensionsToTreatAsEsm: ['.ts'],

View File

@@ -25,13 +25,13 @@ export default defineConfig({
useMutation: true, useMutation: true,
useInvalidate: true, useInvalidate: true,
signal: true, signal: true,
useOperationIdAsQueryKey: false, useOperationIdAsQueryKey: true,
}, },
useDates: true, useDates: true,
useNamedParameters: true, useNamedParameters: true,
enumGenerationType: 'enum', enumGenerationType: 'enum',
mutator: { mutator: {
path: './src/api/generatedAPIInstance.ts', path: './src/api/index.ts',
name: 'GeneratedAPIInstance', name: 'GeneratedAPIInstance',
}, },

View File

@@ -19,7 +19,7 @@
"commitlint": "commitlint --edit $1", "commitlint": "commitlint --edit $1",
"test": "jest", "test": "jest",
"test:changedsince": "jest --changedSince=main --coverage --silent", "test:changedsince": "jest --changedSince=main --coverage --silent",
"generate:api": "orval --config ./orval.config.ts && sh scripts/post-types-generation.sh" "generate:api": "orval --config ./orval.config.ts && sh scripts/post-types-generation.sh && prettier --write src/api/generated && (eslint --fix src/api/generated || true)"
}, },
"engines": { "engines": {
"node": ">=16.15.0" "node": ">=16.15.0"
@@ -51,14 +51,11 @@
"@signozhq/checkbox": "0.0.2", "@signozhq/checkbox": "0.0.2",
"@signozhq/combobox": "0.0.2", "@signozhq/combobox": "0.0.2",
"@signozhq/command": "0.0.0", "@signozhq/command": "0.0.0",
"@signozhq/design-tokens": "2.1.1", "@signozhq/design-tokens": "1.1.4",
"@signozhq/icons": "0.1.0",
"@signozhq/input": "0.0.2", "@signozhq/input": "0.0.2",
"@signozhq/popover": "0.0.0", "@signozhq/popover": "0.0.0",
"@signozhq/radio-group": "0.0.2",
"@signozhq/resizable": "0.0.0", "@signozhq/resizable": "0.0.0",
"@signozhq/sonner": "0.1.0", "@signozhq/sonner": "0.1.0",
"@signozhq/switch": "0.0.2",
"@signozhq/table": "0.3.7", "@signozhq/table": "0.3.7",
"@signozhq/tooltip": "0.0.2", "@signozhq/tooltip": "0.0.2",
"@tanstack/react-table": "8.20.6", "@tanstack/react-table": "8.20.6",
@@ -108,7 +105,6 @@
"i18next": "^21.6.12", "i18next": "^21.6.12",
"i18next-browser-languagedetector": "^6.1.3", "i18next-browser-languagedetector": "^6.1.3",
"i18next-http-backend": "^1.3.2", "i18next-http-backend": "^1.3.2",
"immer": "11.1.3",
"jest": "^27.5.1", "jest": "^27.5.1",
"js-base64": "^3.7.2", "js-base64": "^3.7.2",
"less": "^4.1.2", "less": "^4.1.2",

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="184" height="188" fill="none" viewBox="0 0 184 188"><path fill="#f3b01c" d="M108.092 130.021c18.166-2.018 35.293-11.698 44.723-27.854-4.466 39.961-48.162 65.218-83.83 49.711-3.286-1.425-6.115-3.796-8.056-6.844-8.016-12.586-10.65-28.601-6.865-43.135 10.817 18.668 32.81 30.111 54.028 28.122"/><path fill="#8d2676" d="M53.401 90.174c-7.364 17.017-7.682 36.94 1.345 53.336-31.77-23.902-31.423-75.052-.388-98.715 2.87-2.187 6.282-3.485 9.86-3.683 14.713-.776 29.662 4.91 40.146 15.507-21.3.212-42.046 13.857-50.963 33.555"/><path fill="#ee342f" d="M114.637 61.855C103.89 46.87 87.069 36.668 68.639 36.358c35.625-16.17 79.446 10.047 84.217 48.807.444 3.598-.139 7.267-1.734 10.512-6.656 13.518-18.998 24.002-33.42 27.882 10.567-19.599 9.263-43.544-3.065-61.704"/></svg>

Before

Width:  |  Height:  |  Size: 811 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -1 +0,0 @@
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Groq</title><path d="M12.036 2c-3.853-.035-7 3-7.036 6.781-.035 3.782 3.055 6.872 6.908 6.907h2.42v-2.566h-2.292c-2.407.028-4.38-1.866-4.408-4.23-.029-2.362 1.901-4.298 4.308-4.326h.1c2.407 0 4.358 1.915 4.365 4.278v6.305c0 2.342-1.944 4.25-4.323 4.279a4.375 4.375 0 01-3.033-1.252l-1.851 1.818A7 7 0 0012.029 22h.092c3.803-.056 6.858-3.083 6.879-6.816v-6.5C18.907 4.963 15.817 2 12.036 2z"></path></svg>

Before

Width:  |  Height:  |  Size: 568 B

View File

@@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200" preserveAspectRatio="xMidYMid meet">
<image width="200" height="200" href="data:image/webp;base64,UklGRuINAABXRUJQVlA4WAoAAAAQAAAAxwAAxwAAQUxQSEMFAAABoLz+/6M4+7ogM2lSYJ6SJrj4L3h1+x5SBO+Snph+38I8vfiU9N6jsEdTPG16Ipue7Jree0QYnirID2f5HmxTfr/v7xoREwBc9nwVjaf0/bnzd599NiqVaaxUyqVnty/l9uupeFQDGqs9wzkDbTbO6P0qaQKDQ2NTJjrULGZHBgMkCS47Y6Lj2ZllGi3U2PeFKrq0WvghplAhvMtAlxvbIgSYuy5fQw7W8hvmii1yzERuskxYWEpyvIpcZfmkIqKQ/h45/DndKRptG0NOs21+kcxP/40cL6dDoujYWEHO/73VK4T+Igpwspd/czIoyIyfb8qaVyjMF2sUfnmWPEahPkl4eHUYhbubT91TKOCHvRxKmChkM84b3+8MBc3SPq7Mvo4Cv65ypPcjCr00wI1FDAXPFnFi1ETx6zzwnkASZr2uU68hES+pLvOfQzKeC7pKe4OEfKO5SJtAUk5orgm+QWK+8btEPYfkPKe6wnsJCXrN64YskvS4C3Qk6qjjFiFVzUUOG2BkQdbjKLWEhP0420G+60ja6z7npJG4vzsmzqjDEg7pMZG8ZrczHiKBp5zg2Y0kPuyxL4FEXmyb8pRKjxW7ViOZV9vkf0GnV3PsySChM7b0Iqn7bPBO0qrYYd1WJPZGy0J/U6sy36o0kvtXi/xlev2lWbMNCb7Nkk5GMRayIo0k1y1QPtPsvdJeEomebC9PtfG2woxq1Ug7GST7sTbmMrqZc1vbgIRf11qecvmWIjXK1cKtbEPS72pBMWhnqM1iSPxYsx+o912zAvUKTbQq9arBRsuQ/Msanabf6QYBRj8zUDeIEjhYNywDQ3VZGRirK8rAJACopgyYKkAfSmEPgC4HwwCn5SAHYMiB4dFQEr+KykI0LgvxlCykdFnQ98nC/pws5C7JwvnbsnD3mSw8K8nCp7IsGBVZqMgDyuL0tCxgRRYq8mDIQvmTLJSeycKzu7Jw+7wsXMrJQm6/LOzTZUFPyUIqLgvxqCxEv5IFzWPIgQGQk4PTAMNyoAP0yEEfgGrKgKkCwKQMFAEAxmQgWzckA8N1gzIwWBcw6ccCdXCafnlouIx+yxoFq9Srao2gQL0CNP2Oej80i1Ev1kw1aGcozWAX7bZBi+Ea5WqRViBPuTy0vI5yG1qba9KNzW0NjtEtA21GqlRj4XZgnGp5aDtJtWR7ynuafVbaA51mabAwxCjGOq2AbRTbBpZqf9Gr7LcGfqVXGiyeX6HW3yGrYCO1toLlHUVaTXqtgz5a9YKdGUplwNY5r+j0wm8PrKbTarBZeUylp4pdsJhKCbDdc5hGuz32AUxR6CE4stukj9njDEgw6rA4OPV36qTBsb7rtLnucw7M/kiZkgpO7mF0YQPg7EUmWRaB00epooPzj9MkCy70XqPIJa8bQD1Hj3MquNP/hhpvguBWbYIWExq4V3tDiTcauDl4jg7n/OBu9RIVrqngdm+WBie8wEGdAOYo8HEREx1bBLwcKIntYy/wU70usuuzgae+NBMV+90HnI2bYjITwN/ehyKa6gYu7xbPYeC0J/FELI+XeHgFoKx5IY5XaxTguj8jiswc4H7vpAiK/SBC79a/eVfZ2AGCDKXLPPs7PR8E6t/GeMW2aSDYzvRnHr3XQyBgJZlnfKmOJxUQdTjD+GEei4DQ527I13hQy6+bC+KPbDPcZuwKAxGV2A+Fqluqhe9jKpBSW5ZnzjPPLAsCRQODI9mi6RRzamxoMACUVfv1M4ZdRm64RwUaa9F4St+fu3T7WalcqeB0pWJ8fnb3fG6/nopHv/IAlwEAVlA4IHgIAACwOACdASrIAMgAPm0yk0YkIyGhL7cowIANiWlu4ME0Z2dc36Rf1TwF/nn82/JL256O/rLnEfsT+C/sHnB3g+7b+q9QL8a/on6Tb4Tj/+M9ALu//uu6A9B/rT/mfcA/Tv/W+g/8e8Ab6l/afYA/iX9A/6n+T9RP/H/vvnE/Mv7r/0P8N8CP8e/m3/O/s/an9Bz9JzCMO+Myw4dZdESvjaIP6nMyViAm4nbqrdpXzuF+/VTRlZPwI47fmfvDl5hbzvvZesvGUKjN7ws4T3LThWfoRQ4AoAA8e9lYL1nVnC85qq4mvj9Iph8YxivL/rrIH+nx3GNtE7c2oXhy5gEx47Z8sNva+odGL0UOFre7a/8pcCVRR+VAqOA+CSTUwrA/FB3RytCzvsm/UJ3htyMkuiFBPkIQkgeyZRBek+/i/YVS2uzhmupStTtUD66oGcS5+EVAH8fWxWkDLcyezIzzEhXFpHDKBmiU8U3CGZPeURs5O40NHmZ1yuL/LSebx3inBTn4fScXY5NtGQmTuvJRgK1ZkPKfur71V57K9aGxoHcFJWEWoT+wdJqn/+CEXgxOXAsN7CY9yIhMXtIKmxfysDoOvJcu/r+kfQ+KAF12SAAA/tznX6ah3T+0kRzuFzn2fQ8fFQ3Jwhf+PAnqgJuUaDbeHheuyuveOy2cK7s60D6dQJ/6PJXvNmeGbDhD3I1NjZn9oc4JUzlHaJP8whuvwQH/+01Q425kRC4hJihTqmiFP5nRhpc7iojBlxQWo4EVUGzU3wuFln27vn07cdcSf8WjpT+zeWz4PVcN8pkVGsiKq7cBNzA3mqWriMtC2CSTtTYTdjMvF7Ijau6AcNe7AIgk6dia7G1bv5y7LBzTXH6/6CeEBeH+MU/ERnSMlwi7VF5hFXzLzRHBV/v1swHdmHAOmY60klxbO1sY26jVQdRXsf4BTv4aJ1LVbXI3ZFDBhVXuY/q0r3zY1ve75gXWrzLOdUpmWVI+ohESBQUZ+rU+U6osFlcstDVHqCNBEOiT1jawA4oQoqrxGTonFFIGpeu2Xj8UTnLeFE2Md3o2FwYCri8tnQ5YN/XViP9pfXkt2qOy/yEtKZZNhoBmIHfHbQrYCz5Kh2bdgqFw5O1uy/Hou6pfwPWz3f2JocCmu2hqd32lMlF7X6xR+B7KcNvMTXv9GkELd8Xu/Kfpoax7QPHsq9RNLcdLDme5+5J8r5I31b/bsb2Dr3veZ5TYKOfV6S+zqm3Pm3su3t6C2kn7SOtPaXrXGBgTZapBKzj5rvfobSFdc/F15bMv/SRizlLib5FfiLOiZ6k/j6LGHT37iY4b1+TQFbOGGn+tY5WRq6SisawiHhcRzE9LURYQtib7q0jxkwQBuBCXPTBOJAkaAG7Vp5dU+qxrV88x9ASUpuVyMu1qzoKu7SKuhpoqbqdcdNWiBV+lVb41JHBEJ7oeHuTt/PyKeXXDdZ5ohET/Y75lxzxI6uzQ5r4IGRvLWul1kvJbP1nnNsAoQhO0tt0L60Pp7S5cTCavKf2FyYs/nxKXq6DKJtk8uRIycOOtWfyvZHYkjulFNNFR/IjND9uujdq66p3qRvf1Nm8SZOIwpni9IrNC9uOzRXnq9BhaDPbRNwLK2DHcYuH1nwzm4cUSUBu7gk5JC5UGE1CfP0TLXwWWr+6JUra/cyPfLM1oeynDbzAToAPUuWA2L9545vaFlmshP8Nj7r96uNDW6ngAyjF0RPM4pH5pGHzui7GI9KmamJujUcZHQLh3/w1hSn4IJdpYUoZMQHC3iKNFeOvi94ZueafCvFyASXifsLgpzzwNt9z5juYKX+CJES84eVuQ5+BncnQF6BZqo2ezHyrmL/ctjxvWpRnj33RIWMu1kccgXDdGBgevRfNIHxouiYJs6eE/Gt593jZcGq/L55a1l9OO/jzhuDz4lDbhFfmbpK/sEfDFeY3XHjDMj+TkeVBLAbJ5EVVKCYeWVurm5iroOfGnBuUSzeP2mKC2ENA3HaMy2jTzGV7FMun64t97WY1zOM8R5FG7QyAeZuNQos1KH15jO1Dymt2/DO6bHgFWloeRbpv+sovdYJSx2/gjgvYHEO2VwRFao5Bny2/MA31GzjN4eTyWvA16rhRu0NMu477gNZEaCRgHvcTVDchTfVckI4Cx4gd4YhUAgjKD5wvCFwX8upRTi2Rdy3FeXDhmw3xEntdU9rGdmncE7jFw+s+vAR2v+V2PjV7jAf9YvwKTdX8v/49RppBE21OCxhVheNMphMDyhtGRopafi54pihoCFgfyYzNzbyFH5voOmGEIIE+cSgHxkMFNbiR3/7BbwcP5SBwy6u/vmP02xcKsRdFj1UW7ZLxdk8dzs8oZEioxMnOR2rxrQ+N9z5nc6U7u40DDVEdwbJuyyQHU/LiE4wmO1N3bxC33X10I8gHmjukAh/Axq6s/eRqK1hwiHkR98coaA6CjFu3hAWv3mwnvK2Y+j/MzAuzOaxEiEMKOJp8JB+dsF7YyNwRM9+pFGSmF95KwrPdEM+/ZUBRDawKe5Kh0NkfZPSesQvMnn3ZgX+3P8ebe1SHo/4p00CyCfNiZ+efcxFg/mw1jqPsN7MOOv+lOglbWG3QEqlDs3OqCKIzANydcibObrwLNDGusfzk42/iksBPVgCgkil6O65u7r5O+q6NhFJRIaVVtGEYSUXNrHnsnBz30tuyBsc1bP9wF3KI7iNCPcDEV+4lT5OMJp5vKeg6p4BGfY76Aap/wY5Pdu/JHo3yI47AqoWq3Z5/P+O6mBnP3a6N/BdS62DLwp0WWwLAn/k1aiJr2oMje765btFUIiGn0MJ3o4nk4ANHxLRR9HrZndMvIAcAOBq5offJZ+HpBeAQ5WEqiPOd5kpWNg0wkdJCMpHwJ4AAAAA==" />
</svg>

Before

Width:  |  Height:  |  Size: 4.8 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 256" preserveAspectRatio="xMidYMid meet">
<image width="256" height="256" href="data:image/webp;base64,UklGRjoOAABXRUJQVlA4WAoAAAAQAAAA/wAA/wAAQUxQSLsGAAAB8IZtE+q22baNJFsOrKIpqC01lLw1jOWayszMTGFmZo6s0nWVmQzXFeb4KoUjwwVO1BguV3HBDIL5YZqZNda/bIqICYCw/8P+DxvYmulyt2AX/ce+2UkyIm5/v8iHWra4XZnWDt1ciF178NP+Au7/H2pbeHN7did2/dV3cfX4HDV22tuw52AoGHicp8c+1DnH3sqJoaH/OpavUWsnANyEoeKvPRmeQL1vAmthyIBT6ezlihVaMzB0rLCRPYKap2eFEHg12beqZblDiclkv6nmbg4l3qEyUPVmDCW/pOqnGwZDifepLtAt6AklFlBBnWqer0OJu8j2qPb1UyFEw7lkk1V7yqgKHf4G5PGNilUZMClkaEygg+WKTQKI/DlUmACMRrFaP0cCQL/S0OADCwdcekap0n7QekBRKOC0AW+KR6WiAdC2scHf1VU+COwXvK+Pf4MBHUxaW9qFBX58tTtITMmqVKV0bRJ01nHDXV3z7aPOBbkJaXdpeYMDwv4/C6GR+uJYLV/OPF+MdeCjY8W/ekusnJQHxtK/mGp0JiPXh5oGdtxlkeBY5UVz5j8aISFmYSny+nIzOtJnM+p7IJnNNr0RzXtsMN9LNShwc592RnhR49oMph7/RFM3PcBk/whleke0MbAadW66jiVyG5o8cBeL5TOUWj0QAIwS1Pq3OI7laPraJI7xKLfEAFiOen/IMNBvPtzG0L9BEC6H6AbFgol0X6GGY+g2ouSG6NdQ80VkF/pUeJfM/qcofC1PtYNkD6CKZWTXouy8MtVaIqgW64AxVG8KK0Pd46neV2Iw1VJh2juoPtJtjbR63XpQOZVIppohrP6gauVA/YYOTRFUDwo7uEa1T8kG6bAbqHsJWzNKtTvJoEiFF8hgj6xRkK/Yf6x0L2pwpjvdnaLyAUYE9LoF6COOKPAMMG4XFBgBANPU2gCcl1ab7gvg7OuVMw1ab1LqcxsLpNabbEd3Fhh6RsomaHuCT6HgQhswDykxlcsOzJccF+GbAO1fnq3O7pHA32P+X6b5MRX47ZOq+LIvhw4nTMx2e7Qsypt5Ocjs+dDffjzlkV68dd4wkBl1tyv/pIfcnT0xAcL+P9twwsRst4f8ZL7rnighQ+duLvaI//FvjxhCLpuZW+TR0p09MaFjl2cje9Vku4AbfkSz/rWop4DhO1Hb7Ms7MMGHEo9fwmXfiGY+NYzLuiCI+vomtLMJhf4+nCdqG5q7IZXH9gnqvKmNaSjW24/lUzR7bQrLWtR6GgCMCMjBnRxPovmPRzDciGoHRgDko+S76Lr/XwF8ic5aqBfmwygUfYDuOdTwv3S3o+aj1sjCvmTbVcBhZB+ptuagsIepbI06jCX7VbWD9cLmUF2EOrqouqPq9Sh8LdVgJT6n6qOb+JVUVyjxAVW0cmXCxlFdqMQyKmuzamV5wq6ngtM6PEQFP6uW95qs6iiyt1TwxZLNU+216AZRm4B8pArfAHmCX7GGaFguqdFBB/9QIDCIDv6m2HIAo0TQRGBMrDXfCmCMrVSrxACAgdVivrRwwB0Bs+2I5IBrGpSqHgitR3iFfGoH3vuazLWlB/CmV6vkHQFt99ksoeY1C3APPmKipuk24E48oNDmPtDBjFwfU9nCWBBoe/iASbxrHCDQctf2gCq+3AzopJH64lj6B1MsIDX2llfHin9soBWknpfx8lgtX0w1IOz/sxA6briL/LbhhhzrxZl3aXltX0GxV90l/gZHp5LWliKrf++zdhGj3/8DNT251CEiZnYBmrJ0bVJHjA1+5D91M1+fb1HdlsVRbLZJdWha/wajnQFFKHO+hWmMFzU+GMd07lY0ddGANvqVotQVPCMbUOeiGJYe/0KTl/YDgMifUe6jHLEVqPU2C8ff0fQ/RwJMQsF/RDN8gHo/zZCJCk4Co0oSLqG7LKjY6Qi6nzSoMp5C0ZU2spWo+a1kQ1DFp76WhaPJilVzkc3U4WuPsNepzkHVD5J9r4MnKGw5VYpulWSHdQii8LVUg3X7i+y4DtgsbAFVsm6nyX7Wodkt7EmqSL9qu8k+1sGdJSyJCvJVW0D2kg5ZGbKOAfk41QaT9Q6okG4tFPUU3fm1iu0B+s81KLTCTZKORdDBJL2CoxgSGhW4CQCcchquAEbbHrUWAOcL5nMCANhzpLTcCqzRJ5T6yMICS82WY28FdqeMymuB+fzNKi22APM4n6mcdmj35kK+lndjgN3yfIU6B68B/kF7zFN4M3TUmulytzB4t0/pCyLtD3z8X78ajUc2XAMyhy8/WCevxe3KtELY/2H/hw0OAFZQOCBYBwAAcDIAnQEqAAEAAT5tMpJFpCOhmApkyEAGxLE3cLO/I/8A/AD9APeogBDf+wH8n/gH4AfoB/D8D/bUGJv3b8rvGLBD2z8kv6L+13LBGO/UZ+8+1n5jf2T+j+wDzCP0i/03UP8wn6r/83/Ye+Z/jv7B7I/13/ID5AP6p/eP/Z7WHqRft57AH8g/2XpTfsZ/3fkf/a/9xvgd/XX/4ewB6AHVf9AP4B+AH6V0/6X/37XCnfIaNJCv3UeIbyMN5GG7FGGXSbcdew8aH+Bc8jPujAWD5wlI0vGluc15OXPagLZ8UxFfBAlngGwyAgncED6mebGS9plnBjVRDpz0QjHI7NbLJCxCvFKIDQxTIXTAX5W3acocmvQ/OXAfnjdGNjAFiZXJq+/TbBzGEHdg+muQ+hFFPR2JnvUSNpSYiGR57j5nlFet8+EyOPVmbGlR6r47DqM+38DTtDHOHz36jaDYexg9qHpxk3+59nQC1SOzy4m4u34GLkKXdKCpMehdu53FcSHUZwi37E2m0zNsuu+Q0aSFfuo8Q3kYbyMN5GG6AAD8hoAAAAAAAtSatOsx3/xQJLZJVNwvp3oF/sWdRuskPj8s391kh8d5sIy+9WFVihdPhMB/7oNptL8qeszrOKuQiABZ2qtQOEHxZqWJnio26h/5Vo4krKGOO0sEz6Hv5rWo4fY5j+Zkip4N2flcerdMsQa4aobjtm8EeilMPd1RKe3T2L0a/Cv9h3t065fg6SjwXyBvg2hYN5RVMz/+NTMiir38FhGGkGCU+n7zH7a6z+ZsKOKACwNxEF24gJYE5Z8YDT/LDnQYzNPs7fnw0DWqqrx34u1n8kIsG90iig+vnPhkaVDzEnlMOItgwAov/p/WcPmzTS/ESKniY3/MPn06vQ7wic6l2jPoEyPrpPntLEOo7YMH2DlbEeYrf53exjRiZcoP/Ct0vnxkiHQpZk7RAgR6cllYgknBYToYbOnOoJ31iIPn+tjP9Wi1AD4rjN8FcbwzXiiXhq7Gpi/P39FnE7kEHxM3vJ6IfeN8kET6YhP9+bS4Ndq9z76kggowPI6pCeXTbktqMjiZBKP512NVTKWySMPWK2cDgYHLavMlfOsRt+ejI3anQJ8WOB5Sj4jg+PmmRO0YbrVrKJlMyW9DQhQxUYSb68hxwsa0pT95muv26wX/UbDfNNZqiY+FY3E3IrOLBfx/PvkZag+Z1tU15DmS4oWxI1MZPiItkOO5brQrLJ4gEX/aqDZVYH5qQqEYAdzEawMyn+D8EIsnVFuZBNbvILVTzHSwk5p+TPibb4Bij8La/IJ3+b8zP3KyRwEs7cd4bm+Kk65mOeRHpY//wUWtOhkyo+qCpkP9B+BZwjtgg93EV8KAePfDCEvQd6szMwcXg364KeljltsktN3CEwdKtH5sTvqV4jy9/ySVzVng2aUX/rOq5NjhT5vpK5nuKGWPdhY6RWG/JJfzsRE9JFNVJDLuZWWPyOhtK52DWPq8KkvizSdW1HXse/jEbnWBMMY4QwuO7eYDSR462HFk4zWyEZKugT+Uop5KD4KF+4xpfPgWfPcD4doS/+fEI2HjOrl8ctTT0EKp255SHoe3jdEi6QVMzZoAJS4j6vntijLltNjzgznBcSIrdKAgCdZjX9+VDrtqECJvxN3Z0S2oEoVZf2tji5V6DXamlubRVYpvsgB0DK/ACFIRFc4ggMNRpcbv9wYeN/ch3k6B5RkfzyDTkXb+RkS8ZLdbq1+tq/I8eK9g1/wuAZNhQkc5QmjUYgl3QAo86JmxC4zO0au6U/fSE11r16YB3WkeheQcJUKCbRTGS8OOs30DN7fpcxuuyEU3yM8HEqoyjd1rdQAi9K6LdRvQyLh3A9JmvA1EAjN8i2uLOeZi81BhiwAsZle61AOM78/l7yxuHy40ECHE9YostmdueER4HTWcMMGg0X8eJcujrbN1S4qyGxITPLghrKViISKTyPZ5qSo6EwnWhwA+XrAtKvtNVyS5f2iWAFmfHlQxfB+NXNwhxPwQ2akkMg3wgSifNE4lDRelowqblVu+ByzHBWsJkemp5mw2u/1Wl+RmpkyV7U5cIjxTkKyprg12fSsb7L3rIIHxd4ZgDArHDgESQGwDGC+iMlFrZKAfhcSUxuvPko5fkWdmQ/+oI2RMP4/d0h4/foef6PFHier1x+nRlT+0ZjBnE6Z32aVtbLbEPc+Z/EgAGsRF1RpteYADfJzufleSz65a2AZGpwwvDlrHbL9WdGx4Ww776VnxhYV27x6KH0biDB/mTxsIwv4zQQiKkDjcibMmzgp2PvZ3foNNj+SEDx11+lqzPpayPGMBRlQgr9yVhV93j2rzdy+mYvCoHNBVmA6kubmaB2ilYOI/AMpq6CFrzpkL8UJoedOwyLxtwJIWPjP+a++KkMbgYxBuo7dViu8XMjZ9jD1lMMABEIMT5fvOnzyyoKUFfnseMxeoFZjuySXC9vxk95ivyfGaZgXSPDdaiQAGYrj9aBUAAAAAAAA=" />
</svg>

Before

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -12,6 +12,5 @@
"pipeline": "Pipeline", "pipeline": "Pipeline",
"pipelines": "Pipelines", "pipelines": "Pipelines",
"archives": "Archives", "archives": "Archives",
"logs_to_metrics": "Logs To Metrics", "logs_to_metrics": "Logs To Metrics"
"roles": "Roles"
} }

View File

@@ -12,6 +12,5 @@
"pipeline": "Pipeline", "pipeline": "Pipeline",
"pipelines": "Pipelines", "pipelines": "Pipelines",
"archives": "Archives", "archives": "Archives",
"logs_to_metrics": "Logs To Metrics", "logs_to_metrics": "Logs To Metrics"
"roles": "Roles"
} }

View File

@@ -1,7 +1,6 @@
{ {
"SIGN_UP": "SigNoz | Sign Up", "SIGN_UP": "SigNoz | Sign Up",
"LOGIN": "SigNoz | Login", "LOGIN": "SigNoz | Login",
"FORGOT_PASSWORD": "SigNoz | Forgot Password",
"HOME": "SigNoz | Home", "HOME": "SigNoz | Home",
"SERVICE_METRICS": "SigNoz | Service Metrics", "SERVICE_METRICS": "SigNoz | Service Metrics",
"SERVICE_MAP": "SigNoz | Service Map", "SERVICE_MAP": "SigNoz | Service Map",
@@ -73,6 +72,5 @@
"API_MONITORING": "SigNoz | External APIs", "API_MONITORING": "SigNoz | External APIs",
"METER_EXPLORER": "SigNoz | Meter Explorer", "METER_EXPLORER": "SigNoz | Meter Explorer",
"METER_EXPLORER_VIEWS": "SigNoz | Meter Explorer Views", "METER_EXPLORER_VIEWS": "SigNoz | Meter Explorer Views",
"METER": "SigNoz | Meter", "METER": "SigNoz | Meter"
"ROLES_SETTINGS": "SigNoz | Roles"
} }

View File

@@ -1,6 +1,5 @@
#!/bin/bash #!/bin/bash
echo "\n\n---\nRenamed tag files to index.ts...\n"
# Rename tag files to index.ts in services directories # Rename tag files to index.ts in services directories
# tags-split creates: services/tagName/tagName.ts -> rename to services/tagName/index.ts # tags-split creates: services/tagName/tagName.ts -> rename to services/tagName/index.ts
find src/api/generated/services -mindepth 1 -maxdepth 1 -type d | while read -r dir; do find src/api/generated/services -mindepth 1 -maxdepth 1 -type d | while read -r dir; do
@@ -12,33 +11,4 @@ find src/api/generated/services -mindepth 1 -maxdepth 1 -type d | while read -r
fi fi
done done
echo "\n✅ Tag files renamed to index.ts" echo "Tag files renamed to index.ts"
# Format generated files
echo "\n\n---\nRunning prettier...\n"
if ! prettier --write src/api/generated; then
echo "Prettier formatting failed!"
exit 1
fi
echo "\n✅ Prettier formatting successful"
# Fix linting issues
echo "\n\n---\nRunning eslint...\n"
if ! yarn lint --fix --quiet src/api/generated; then
echo "ESLint check failed! Please fix linting errors before proceeding."
exit 1
fi
echo "\n✅ ESLint check successful"
# Check for type errors
echo "\n\n---\nChecking for type errors...\n"
if ! tsc --noEmit; then
echo "Type check failed! Please fix type errors before proceeding."
exit 1
fi
echo "\n✅ Type check successful"
echo "\n\n---\n ✅✅✅ API generation complete!"

View File

@@ -1,6 +1,3 @@
import { ReactChild, useCallback, useEffect, useMemo, useState } from 'react';
import { useQuery } from 'react-query';
import { matchPath, useLocation } from 'react-router-dom';
import getLocalStorageApi from 'api/browser/localstorage/get'; import getLocalStorageApi from 'api/browser/localstorage/get';
import setLocalStorageApi from 'api/browser/localstorage/set'; import setLocalStorageApi from 'api/browser/localstorage/set';
import getAll from 'api/v1/user/get'; import getAll from 'api/v1/user/get';
@@ -12,6 +9,9 @@ import { useGetTenantLicense } from 'hooks/useGetTenantLicense';
import history from 'lib/history'; import history from 'lib/history';
import { isEmpty } from 'lodash-es'; import { isEmpty } from 'lodash-es';
import { useAppContext } from 'providers/App/App'; import { useAppContext } from 'providers/App/App';
import { ReactChild, useCallback, useEffect, useMemo, useState } from 'react';
import { useQuery } from 'react-query';
import { matchPath, useLocation } from 'react-router-dom';
import { SuccessResponseV2 } from 'types/api'; import { SuccessResponseV2 } from 'types/api';
import APIError from 'types/api/error'; import APIError from 'types/api/error';
import { LicensePlatform, LicenseState } from 'types/api/licensesV3/getActive'; import { LicensePlatform, LicenseState } from 'types/api/licensesV3/getActive';

View File

@@ -1,6 +1,3 @@
import { Suspense, useCallback, useEffect, useState } from 'react';
import { Route, Router, Switch } from 'react-router-dom';
import { CompatRouter } from 'react-router-dom-v5-compat';
import * as Sentry from '@sentry/react'; import * as Sentry from '@sentry/react';
import { ConfigProvider } from 'antd'; import { ConfigProvider } from 'antd';
import getLocalStorageApi from 'api/browser/localstorage/get'; import getLocalStorageApi from 'api/browser/localstorage/get';
@@ -33,6 +30,9 @@ import { DashboardProvider } from 'providers/Dashboard/Dashboard';
import { ErrorModalProvider } from 'providers/ErrorModalProvider'; import { ErrorModalProvider } from 'providers/ErrorModalProvider';
import { PreferenceContextProvider } from 'providers/preferences/context/PreferenceContextProvider'; import { PreferenceContextProvider } from 'providers/preferences/context/PreferenceContextProvider';
import { QueryBuilderProvider } from 'providers/QueryBuilder'; import { QueryBuilderProvider } from 'providers/QueryBuilder';
import { Suspense, useCallback, useEffect, useState } from 'react';
import { Route, Router, Switch } from 'react-router-dom';
import { CompatRouter } from 'react-router-dom-v5-compat';
import { LicenseStatus } from 'types/api/licensesV3/getActive'; import { LicenseStatus } from 'types/api/licensesV3/getActive';
import { extractDomain } from 'utils/app'; import { extractDomain } from 'utils/app';

View File

@@ -194,10 +194,6 @@ export const Login = Loadable(
() => import(/* webpackChunkName: "Login" */ 'pages/Login'), () => import(/* webpackChunkName: "Login" */ 'pages/Login'),
); );
export const ForgotPassword = Loadable(
() => import(/* webpackChunkName: "ForgotPassword" */ 'pages/ForgotPassword'),
);
export const UnAuthorized = Loadable( export const UnAuthorized = Loadable(
() => import(/* webpackChunkName: "UnAuthorized" */ 'pages/UnAuthorized'), () => import(/* webpackChunkName: "UnAuthorized" */ 'pages/UnAuthorized'),
); );
@@ -308,15 +304,3 @@ export const PublicDashboardPage = Loadable(
/* webpackChunkName: "Public Dashboard Page" */ 'pages/PublicDashboard' /* webpackChunkName: "Public Dashboard Page" */ 'pages/PublicDashboard'
), ),
); );
export const AlertTypeSelectionPage = Loadable(
() =>
import(
/* webpackChunkName: "Alert Type Selection Page" */ 'pages/AlertTypeSelection'
),
);
export const MeterExplorerPage = Loadable(
() =>
import(/* webpackChunkName: "Meter Explorer Page" */ 'pages/MeterExplorer'),
);

View File

@@ -1,10 +1,12 @@
import { RouteProps } from 'react-router-dom';
import ROUTES from 'constants/routes'; import ROUTES from 'constants/routes';
import AlertTypeSelectionPage from 'pages/AlertTypeSelection';
import MessagingQueues from 'pages/MessagingQueues';
import MeterExplorer from 'pages/MeterExplorer';
import { RouteProps } from 'react-router-dom';
import { import {
AlertHistory, AlertHistory,
AlertOverview, AlertOverview,
AlertTypeSelectionPage,
AllAlertChannels, AllAlertChannels,
AllErrors, AllErrors,
ApiMonitoring, ApiMonitoring,
@@ -15,7 +17,6 @@ import {
DashboardWidget, DashboardWidget,
EditRulesPage, EditRulesPage,
ErrorDetails, ErrorDetails,
ForgotPassword,
Home, Home,
InfrastructureMonitoring, InfrastructureMonitoring,
InstalledIntegrations, InstalledIntegrations,
@@ -27,8 +28,6 @@ import {
LogsExplorer, LogsExplorer,
LogsIndexToFields, LogsIndexToFields,
LogsSaveViews, LogsSaveViews,
MessagingQueuesMainPage,
MeterExplorerPage,
MetricsExplorer, MetricsExplorer,
OldLogsExplorer, OldLogsExplorer,
Onboarding, Onboarding,
@@ -340,13 +339,6 @@ const routes: AppRoutes[] = [
isPrivate: false, isPrivate: false,
key: 'LOGIN', key: 'LOGIN',
}, },
{
path: ROUTES.FORGOT_PASSWORD,
exact: true,
component: ForgotPassword,
isPrivate: false,
key: 'FORGOT_PASSWORD',
},
{ {
path: ROUTES.UN_AUTHORIZED, path: ROUTES.UN_AUTHORIZED,
exact: true, exact: true,
@@ -399,28 +391,28 @@ const routes: AppRoutes[] = [
{ {
path: ROUTES.MESSAGING_QUEUES_KAFKA, path: ROUTES.MESSAGING_QUEUES_KAFKA,
exact: true, exact: true,
component: MessagingQueuesMainPage, component: MessagingQueues,
key: 'MESSAGING_QUEUES_KAFKA', key: 'MESSAGING_QUEUES_KAFKA',
isPrivate: true, isPrivate: true,
}, },
{ {
path: ROUTES.MESSAGING_QUEUES_CELERY_TASK, path: ROUTES.MESSAGING_QUEUES_CELERY_TASK,
exact: true, exact: true,
component: MessagingQueuesMainPage, component: MessagingQueues,
key: 'MESSAGING_QUEUES_CELERY_TASK', key: 'MESSAGING_QUEUES_CELERY_TASK',
isPrivate: true, isPrivate: true,
}, },
{ {
path: ROUTES.MESSAGING_QUEUES_OVERVIEW, path: ROUTES.MESSAGING_QUEUES_OVERVIEW,
exact: true, exact: true,
component: MessagingQueuesMainPage, component: MessagingQueues,
key: 'MESSAGING_QUEUES_OVERVIEW', key: 'MESSAGING_QUEUES_OVERVIEW',
isPrivate: true, isPrivate: true,
}, },
{ {
path: ROUTES.MESSAGING_QUEUES_KAFKA_DETAIL, path: ROUTES.MESSAGING_QUEUES_KAFKA_DETAIL,
exact: true, exact: true,
component: MessagingQueuesMainPage, component: MessagingQueues,
key: 'MESSAGING_QUEUES_KAFKA_DETAIL', key: 'MESSAGING_QUEUES_KAFKA_DETAIL',
isPrivate: true, isPrivate: true,
}, },
@@ -463,21 +455,21 @@ const routes: AppRoutes[] = [
{ {
path: ROUTES.METER, path: ROUTES.METER,
exact: true, exact: true,
component: MeterExplorerPage, component: MeterExplorer,
key: 'METER', key: 'METER',
isPrivate: true, isPrivate: true,
}, },
{ {
path: ROUTES.METER_EXPLORER, path: ROUTES.METER_EXPLORER,
exact: true, exact: true,
component: MeterExplorerPage, component: MeterExplorer,
key: 'METER_EXPLORER', key: 'METER_EXPLORER',
isPrivate: true, isPrivate: true,
}, },
{ {
path: ROUTES.METER_EXPLORER_VIEWS, path: ROUTES.METER_EXPLORER_VIEWS,
exact: true, exact: true,
component: MeterExplorerPage, component: MeterExplorer,
key: 'METER_EXPLORER_VIEWS', key: 'METER_EXPLORER_VIEWS',
isPrivate: true, isPrivate: true,
}, },

View File

@@ -1,7 +1,7 @@
import { initReactI18next } from 'react-i18next';
import i18n from 'i18next'; import i18n from 'i18next';
import LanguageDetector from 'i18next-browser-languagedetector'; import LanguageDetector from 'i18next-browser-languagedetector';
import Backend from 'i18next-http-backend'; import Backend from 'i18next-http-backend';
import { initReactI18next } from 'react-i18next';
import cacheBursting from '../../i18n-translations-hash.json'; import cacheBursting from '../../i18n-translations-hash.json';

View File

@@ -1,48 +0,0 @@
import { RenderErrorResponseDTO } from 'api/generated/services/sigNoz.schemas';
import { AxiosError } from 'axios';
import APIError from 'types/api/error';
// Handles errors from generated API hooks (which use RenderErrorResponseDTO)
export function ErrorResponseHandlerForGeneratedAPIs(
error: AxiosError<RenderErrorResponseDTO>,
): never {
const { response, request } = error;
// The request was made and the server responded with a status code
// that falls out of the range of 2xx
if (response) {
throw new APIError({
httpStatusCode: response.status || 500,
error: {
code: response.data.error.code,
message: response.data.error.message,
url: response.data.error.url ?? '',
errors: (response.data.error.errors ?? []).map((e) => ({
message: e.message ?? '',
})),
},
});
}
// The request was made but no response was received
if (request) {
throw new APIError({
httpStatusCode: error.status || 500,
error: {
code: error.code || error.name,
message: error.message,
url: '',
errors: [],
},
});
}
// Something happened in setting up the request that triggered an Error
throw new APIError({
httpStatusCode: error.status || 500,
error: {
code: error.name,
message: error.message,
url: '',
errors: [],
},
});
}

View File

@@ -0,0 +1,29 @@
import { GatewayApiV1Instance } from 'api';
import { ErrorResponseHandler } from 'api/ErrorResponseHandler';
import { AxiosError } from 'axios';
import { ErrorResponse, SuccessResponse } from 'types/api';
import {
CreateIngestionKeyProps,
IngestionKeyProps,
} from 'types/api/ingestionKeys/types';
const createIngestionKey = async (
props: CreateIngestionKeyProps,
): Promise<SuccessResponse<IngestionKeyProps> | ErrorResponse> => {
try {
const response = await GatewayApiV1Instance.post('/workspaces/me/keys', {
...props,
});
return {
statusCode: 200,
error: null,
message: response.data.status,
payload: response.data.data,
};
} catch (error) {
return ErrorResponseHandler(error as AxiosError);
}
};
export default createIngestionKey;

View File

@@ -0,0 +1,26 @@
import { GatewayApiV1Instance } from 'api';
import { ErrorResponseHandler } from 'api/ErrorResponseHandler';
import { AxiosError } from 'axios';
import { ErrorResponse, SuccessResponse } from 'types/api';
import { AllIngestionKeyProps } from 'types/api/ingestionKeys/types';
const deleteIngestionKey = async (
id: string,
): Promise<SuccessResponse<AllIngestionKeyProps> | ErrorResponse> => {
try {
const response = await GatewayApiV1Instance.delete(
`/workspaces/me/keys/${id}`,
);
return {
statusCode: 200,
error: null,
message: response.data.status,
payload: response.data.data,
};
} catch (error) {
return ErrorResponseHandler(error as AxiosError);
}
};
export default deleteIngestionKey;

View File

@@ -0,0 +1,21 @@
import { GatewayApiV1Instance } from 'api';
import { AxiosResponse } from 'axios';
import {
AllIngestionKeyProps,
GetIngestionKeyProps,
} from 'types/api/ingestionKeys/types';
export const getAllIngestionKeys = (
props: GetIngestionKeyProps,
): Promise<AxiosResponse<AllIngestionKeyProps>> => {
// eslint-disable-next-line @typescript-eslint/naming-convention
const { search, per_page, page } = props;
const BASE_URL = '/workspaces/me/keys';
const URL_QUERY_PARAMS =
search && search.length > 0
? `/search?name=${search}&page=1&per_page=100`
: `?page=${page}&per_page=${per_page}`;
return GatewayApiV1Instance.get(`${BASE_URL}${URL_QUERY_PARAMS}`);
};

View File

@@ -0,0 +1,65 @@
/* eslint-disable @typescript-eslint/no-throw-literal */
import { GatewayApiV1Instance } from 'api';
import axios from 'axios';
import {
AddLimitProps,
LimitSuccessProps,
} from 'types/api/ingestionKeys/limits/types';
interface SuccessResponse<T> {
statusCode: number;
error: null;
message: string;
payload: T;
}
interface ErrorResponse {
statusCode: number;
error: string;
message: string;
payload: null;
}
const createLimitForIngestionKey = async (
props: AddLimitProps,
): Promise<SuccessResponse<LimitSuccessProps> | ErrorResponse> => {
try {
const response = await GatewayApiV1Instance.post(
`/workspaces/me/keys/${props.keyID}/limits`,
{
...props,
},
);
return {
statusCode: 200,
error: null,
message: response.data.status,
payload: response.data.data,
};
} catch (error) {
if (axios.isAxiosError(error)) {
// Axios error
const errResponse: ErrorResponse = {
statusCode: error.response?.status || 500,
error: error.response?.data?.error,
message: error.response?.data?.status || 'An error occurred',
payload: null,
};
throw errResponse;
} else {
// Non-Axios error
const errResponse: ErrorResponse = {
statusCode: 500,
error: 'Unknown error',
message: 'An unknown error occurred',
payload: null,
};
throw errResponse;
}
}
};
export default createLimitForIngestionKey;

View File

@@ -0,0 +1,26 @@
import { GatewayApiV1Instance } from 'api';
import { ErrorResponseHandler } from 'api/ErrorResponseHandler';
import { AxiosError } from 'axios';
import { ErrorResponse, SuccessResponse } from 'types/api';
import { AllIngestionKeyProps } from 'types/api/ingestionKeys/types';
const deleteLimitsForIngestionKey = async (
id: string,
): Promise<SuccessResponse<AllIngestionKeyProps> | ErrorResponse> => {
try {
const response = await GatewayApiV1Instance.delete(
`/workspaces/me/limits/${id}`,
);
return {
statusCode: 200,
error: null,
message: response.data.status,
payload: response.data.data,
};
} catch (error) {
return ErrorResponseHandler(error as AxiosError);
}
};
export default deleteLimitsForIngestionKey;

View File

@@ -0,0 +1,65 @@
/* eslint-disable @typescript-eslint/no-throw-literal */
import { GatewayApiV1Instance } from 'api';
import axios from 'axios';
import {
LimitSuccessProps,
UpdateLimitProps,
} from 'types/api/ingestionKeys/limits/types';
interface SuccessResponse<T> {
statusCode: number;
error: null;
message: string;
payload: T;
}
interface ErrorResponse {
statusCode: number;
error: string;
message: string;
payload: null;
}
const updateLimitForIngestionKey = async (
props: UpdateLimitProps,
): Promise<SuccessResponse<LimitSuccessProps> | ErrorResponse> => {
try {
const response = await GatewayApiV1Instance.patch(
`/workspaces/me/limits/${props.limitID}`,
{
config: props.config,
},
);
return {
statusCode: 200,
error: null,
message: response.data.status,
payload: response.data.data,
};
} catch (error) {
if (axios.isAxiosError(error)) {
// Axios error
const errResponse: ErrorResponse = {
statusCode: error.response?.status || 500,
error: error.response?.data?.error,
message: error.response?.data?.status || 'An error occurred',
payload: null,
};
throw errResponse;
} else {
// Non-Axios error
const errResponse: ErrorResponse = {
statusCode: 500,
error: 'Unknown error',
message: 'An unknown error occurred',
payload: null,
};
throw errResponse;
}
}
};
export default updateLimitForIngestionKey;

View File

@@ -0,0 +1,32 @@
import { GatewayApiV1Instance } from 'api';
import { ErrorResponseHandler } from 'api/ErrorResponseHandler';
import { AxiosError } from 'axios';
import { ErrorResponse, SuccessResponse } from 'types/api';
import {
IngestionKeysPayloadProps,
UpdateIngestionKeyProps,
} from 'types/api/ingestionKeys/types';
const updateIngestionKey = async (
props: UpdateIngestionKeyProps,
): Promise<SuccessResponse<IngestionKeysPayloadProps> | ErrorResponse> => {
try {
const response = await GatewayApiV1Instance.patch(
`/workspaces/me/keys/${props.id}`,
{
...props.data,
},
);
return {
statusCode: 200,
error: null,
message: response.data.status,
payload: response.data.data,
};
} catch (error) {
return ErrorResponseHandler(error as AxiosError);
}
};
export default updateIngestionKey;

View File

@@ -4,6 +4,8 @@ export const apiV2 = '/api/v2/';
export const apiV3 = '/api/v3/'; export const apiV3 = '/api/v3/';
export const apiV4 = '/api/v4/'; export const apiV4 = '/api/v4/';
export const apiV5 = '/api/v5/'; export const apiV5 = '/api/v5/';
export const gatewayApiV1 = '/api/gateway/v1/';
export const gatewayApiV2 = '/api/gateway/v2/';
export const apiAlertManager = '/api/alertmanager/'; export const apiAlertManager = '/api/alertmanager/';
export default apiV1; export default apiV1;

View File

@@ -0,0 +1,7 @@
import { GatewayApiV2Instance as axios } from 'api';
import { AxiosResponse } from 'axios';
import { DeploymentsDataProps } from 'types/api/customDomain/types';
export const getDeploymentsData = (): Promise<
AxiosResponse<DeploymentsDataProps>
> => axios.get(`/deployments/me`);

View File

@@ -0,0 +1,16 @@
import { GatewayApiV2Instance as axios } from 'api';
import { AxiosError } from 'axios';
import { SuccessResponse } from 'types/api';
import {
PayloadProps,
UpdateCustomDomainProps,
} from 'types/api/customDomain/types';
const updateSubDomainAPI = async (
props: UpdateCustomDomainProps,
): Promise<SuccessResponse<PayloadProps> | AxiosError> =>
axios.put(`/deployments/me/host`, {
...props.data,
});
export default updateSubDomainAPI;

View File

@@ -11,7 +11,6 @@ import {
const dashboardVariablesQuery = async ( const dashboardVariablesQuery = async (
props: Props, props: Props,
signal?: AbortSignal,
): Promise<SuccessResponse<VariableResponseProps> | ErrorResponse> => { ): Promise<SuccessResponse<VariableResponseProps> | ErrorResponse> => {
try { try {
const { globalTime } = store.getState(); const { globalTime } = store.getState();
@@ -33,7 +32,7 @@ const dashboardVariablesQuery = async (
payload.variables = { ...payload.variables, ...timeVariables }; payload.variables = { ...payload.variables, ...timeVariables };
const response = await axios.post(`/variables/query`, payload, { signal }); const response = await axios.post(`/variables/query`, payload);
return { return {
statusCode: 200, statusCode: 200,

View File

@@ -19,7 +19,6 @@ export const getFieldValues = async (
startUnixMilli?: number, startUnixMilli?: number,
endUnixMilli?: number, endUnixMilli?: number,
existingQuery?: string, existingQuery?: string,
abortSignal?: AbortSignal,
): Promise<SuccessResponseV2<FieldValueResponse>> => { ): Promise<SuccessResponseV2<FieldValueResponse>> => {
const params: Record<string, string> = {}; const params: Record<string, string> = {};
@@ -48,10 +47,7 @@ export const getFieldValues = async (
} }
try { try {
const response = await axios.get('/fields/values', { const response = await axios.get('/fields/values', { params });
params,
signal: abortSignal,
});
// Normalize values from different types (stringValues, boolValues, etc.) // Normalize values from different types (stringValues, boolValues, etc.)
if (response.data?.data?.values) { if (response.data?.data?.values) {

View File

@@ -4,6 +4,7 @@
* * regenerate with 'yarn generate:api' * * regenerate with 'yarn generate:api'
* SigNoz * SigNoz
*/ */
import { useMutation, useQuery } from 'react-query';
import type { import type {
InvalidateOptions, InvalidateOptions,
MutationFunction, MutationFunction,
@@ -15,10 +16,7 @@ import type {
UseQueryOptions, UseQueryOptions,
UseQueryResult, UseQueryResult,
} from 'react-query'; } from 'react-query';
import { useMutation, useQuery } from 'react-query';
import type { BodyType, ErrorType } from '../../../generatedAPIInstance';
import { GeneratedAPIInstance } from '../../../generatedAPIInstance';
import type { import type {
AuthtypesPostableAuthDomainDTO, AuthtypesPostableAuthDomainDTO,
AuthtypesUpdateableAuthDomainDTO, AuthtypesUpdateableAuthDomainDTO,
@@ -29,6 +27,8 @@ import type {
UpdateAuthDomainPathParameters, UpdateAuthDomainPathParameters,
} from '../sigNoz.schemas'; } from '../sigNoz.schemas';
import { GeneratedAPIInstance } from '../../../index';
type AwaitedInput<T> = PromiseLike<T> | T; type AwaitedInput<T> = PromiseLike<T> | T;
type Awaited<O> = O extends AwaitedInput<infer T> ? T : never; type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
@@ -46,12 +46,12 @@ export const listAuthDomains = (signal?: AbortSignal) => {
}; };
export const getListAuthDomainsQueryKey = () => { export const getListAuthDomainsQueryKey = () => {
return [`/api/v1/domains`] as const; return ['listAuthDomains'] as const;
}; };
export const getListAuthDomainsQueryOptions = < export const getListAuthDomainsQueryOptions = <
TData = Awaited<ReturnType<typeof listAuthDomains>>, TData = Awaited<ReturnType<typeof listAuthDomains>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof listAuthDomains>>, Awaited<ReturnType<typeof listAuthDomains>>,
@@ -77,7 +77,7 @@ export const getListAuthDomainsQueryOptions = <
export type ListAuthDomainsQueryResult = NonNullable< export type ListAuthDomainsQueryResult = NonNullable<
Awaited<ReturnType<typeof listAuthDomains>> Awaited<ReturnType<typeof listAuthDomains>>
>; >;
export type ListAuthDomainsQueryError = ErrorType<RenderErrorResponseDTO>; export type ListAuthDomainsQueryError = RenderErrorResponseDTO;
/** /**
* @summary List all auth domains * @summary List all auth domains
@@ -85,7 +85,7 @@ export type ListAuthDomainsQueryError = ErrorType<RenderErrorResponseDTO>;
export function useListAuthDomains< export function useListAuthDomains<
TData = Awaited<ReturnType<typeof listAuthDomains>>, TData = Awaited<ReturnType<typeof listAuthDomains>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof listAuthDomains>>, Awaited<ReturnType<typeof listAuthDomains>>,
@@ -124,7 +124,7 @@ export const invalidateListAuthDomains = async (
* @summary Create auth domain * @summary Create auth domain
*/ */
export const createAuthDomain = ( export const createAuthDomain = (
authtypesPostableAuthDomainDTO: BodyType<AuthtypesPostableAuthDomainDTO>, authtypesPostableAuthDomainDTO: AuthtypesPostableAuthDomainDTO,
signal?: AbortSignal, signal?: AbortSignal,
) => { ) => {
return GeneratedAPIInstance<CreateAuthDomain200>({ return GeneratedAPIInstance<CreateAuthDomain200>({
@@ -137,19 +137,19 @@ export const createAuthDomain = (
}; };
export const getCreateAuthDomainMutationOptions = < export const getCreateAuthDomainMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof createAuthDomain>>, Awaited<ReturnType<typeof createAuthDomain>>,
TError, TError,
{ data: BodyType<AuthtypesPostableAuthDomainDTO> }, { data: AuthtypesPostableAuthDomainDTO },
TContext TContext
>; >;
}): UseMutationOptions< }): UseMutationOptions<
Awaited<ReturnType<typeof createAuthDomain>>, Awaited<ReturnType<typeof createAuthDomain>>,
TError, TError,
{ data: BodyType<AuthtypesPostableAuthDomainDTO> }, { data: AuthtypesPostableAuthDomainDTO },
TContext TContext
> => { > => {
const mutationKey = ['createAuthDomain']; const mutationKey = ['createAuthDomain'];
@@ -163,7 +163,7 @@ export const getCreateAuthDomainMutationOptions = <
const mutationFn: MutationFunction< const mutationFn: MutationFunction<
Awaited<ReturnType<typeof createAuthDomain>>, Awaited<ReturnType<typeof createAuthDomain>>,
{ data: BodyType<AuthtypesPostableAuthDomainDTO> } { data: AuthtypesPostableAuthDomainDTO }
> = (props) => { > = (props) => {
const { data } = props ?? {}; const { data } = props ?? {};
@@ -176,26 +176,26 @@ export const getCreateAuthDomainMutationOptions = <
export type CreateAuthDomainMutationResult = NonNullable< export type CreateAuthDomainMutationResult = NonNullable<
Awaited<ReturnType<typeof createAuthDomain>> Awaited<ReturnType<typeof createAuthDomain>>
>; >;
export type CreateAuthDomainMutationBody = BodyType<AuthtypesPostableAuthDomainDTO>; export type CreateAuthDomainMutationBody = AuthtypesPostableAuthDomainDTO;
export type CreateAuthDomainMutationError = ErrorType<RenderErrorResponseDTO>; export type CreateAuthDomainMutationError = RenderErrorResponseDTO;
/** /**
* @summary Create auth domain * @summary Create auth domain
*/ */
export const useCreateAuthDomain = < export const useCreateAuthDomain = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof createAuthDomain>>, Awaited<ReturnType<typeof createAuthDomain>>,
TError, TError,
{ data: BodyType<AuthtypesPostableAuthDomainDTO> }, { data: AuthtypesPostableAuthDomainDTO },
TContext TContext
>; >;
}): UseMutationResult< }): UseMutationResult<
Awaited<ReturnType<typeof createAuthDomain>>, Awaited<ReturnType<typeof createAuthDomain>>,
TError, TError,
{ data: BodyType<AuthtypesPostableAuthDomainDTO> }, { data: AuthtypesPostableAuthDomainDTO },
TContext TContext
> => { > => {
const mutationOptions = getCreateAuthDomainMutationOptions(options); const mutationOptions = getCreateAuthDomainMutationOptions(options);
@@ -214,7 +214,7 @@ export const deleteAuthDomain = ({ id }: DeleteAuthDomainPathParameters) => {
}; };
export const getDeleteAuthDomainMutationOptions = < export const getDeleteAuthDomainMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -254,13 +254,13 @@ export type DeleteAuthDomainMutationResult = NonNullable<
Awaited<ReturnType<typeof deleteAuthDomain>> Awaited<ReturnType<typeof deleteAuthDomain>>
>; >;
export type DeleteAuthDomainMutationError = ErrorType<RenderErrorResponseDTO>; export type DeleteAuthDomainMutationError = RenderErrorResponseDTO;
/** /**
* @summary Delete auth domain * @summary Delete auth domain
*/ */
export const useDeleteAuthDomain = < export const useDeleteAuthDomain = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -285,7 +285,7 @@ export const useDeleteAuthDomain = <
*/ */
export const updateAuthDomain = ( export const updateAuthDomain = (
{ id }: UpdateAuthDomainPathParameters, { id }: UpdateAuthDomainPathParameters,
authtypesUpdateableAuthDomainDTO: BodyType<AuthtypesUpdateableAuthDomainDTO>, authtypesUpdateableAuthDomainDTO: AuthtypesUpdateableAuthDomainDTO,
) => { ) => {
return GeneratedAPIInstance<void>({ return GeneratedAPIInstance<void>({
url: `/api/v1/domains/${id}`, url: `/api/v1/domains/${id}`,
@@ -296,7 +296,7 @@ export const updateAuthDomain = (
}; };
export const getUpdateAuthDomainMutationOptions = < export const getUpdateAuthDomainMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -304,7 +304,7 @@ export const getUpdateAuthDomainMutationOptions = <
TError, TError,
{ {
pathParams: UpdateAuthDomainPathParameters; pathParams: UpdateAuthDomainPathParameters;
data: BodyType<AuthtypesUpdateableAuthDomainDTO>; data: AuthtypesUpdateableAuthDomainDTO;
}, },
TContext TContext
>; >;
@@ -313,7 +313,7 @@ export const getUpdateAuthDomainMutationOptions = <
TError, TError,
{ {
pathParams: UpdateAuthDomainPathParameters; pathParams: UpdateAuthDomainPathParameters;
data: BodyType<AuthtypesUpdateableAuthDomainDTO>; data: AuthtypesUpdateableAuthDomainDTO;
}, },
TContext TContext
> => { > => {
@@ -330,7 +330,7 @@ export const getUpdateAuthDomainMutationOptions = <
Awaited<ReturnType<typeof updateAuthDomain>>, Awaited<ReturnType<typeof updateAuthDomain>>,
{ {
pathParams: UpdateAuthDomainPathParameters; pathParams: UpdateAuthDomainPathParameters;
data: BodyType<AuthtypesUpdateableAuthDomainDTO>; data: AuthtypesUpdateableAuthDomainDTO;
} }
> = (props) => { > = (props) => {
const { pathParams, data } = props ?? {}; const { pathParams, data } = props ?? {};
@@ -344,14 +344,14 @@ export const getUpdateAuthDomainMutationOptions = <
export type UpdateAuthDomainMutationResult = NonNullable< export type UpdateAuthDomainMutationResult = NonNullable<
Awaited<ReturnType<typeof updateAuthDomain>> Awaited<ReturnType<typeof updateAuthDomain>>
>; >;
export type UpdateAuthDomainMutationBody = BodyType<AuthtypesUpdateableAuthDomainDTO>; export type UpdateAuthDomainMutationBody = AuthtypesUpdateableAuthDomainDTO;
export type UpdateAuthDomainMutationError = ErrorType<RenderErrorResponseDTO>; export type UpdateAuthDomainMutationError = RenderErrorResponseDTO;
/** /**
* @summary Update auth domain * @summary Update auth domain
*/ */
export const useUpdateAuthDomain = < export const useUpdateAuthDomain = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -359,7 +359,7 @@ export const useUpdateAuthDomain = <
TError, TError,
{ {
pathParams: UpdateAuthDomainPathParameters; pathParams: UpdateAuthDomainPathParameters;
data: BodyType<AuthtypesUpdateableAuthDomainDTO>; data: AuthtypesUpdateableAuthDomainDTO;
}, },
TContext TContext
>; >;
@@ -368,7 +368,7 @@ export const useUpdateAuthDomain = <
TError, TError,
{ {
pathParams: UpdateAuthDomainPathParameters; pathParams: UpdateAuthDomainPathParameters;
data: BodyType<AuthtypesUpdateableAuthDomainDTO>; data: AuthtypesUpdateableAuthDomainDTO;
}, },
TContext TContext
> => { > => {

View File

@@ -1,200 +0,0 @@
/**
* ! Do not edit manually
* * The file has been auto-generated using Orval for SigNoz
* * regenerate with 'yarn generate:api'
* SigNoz
*/
import type {
InvalidateOptions,
MutationFunction,
QueryClient,
QueryFunction,
QueryKey,
UseMutationOptions,
UseMutationResult,
UseQueryOptions,
UseQueryResult,
} from 'react-query';
import { useMutation, useQuery } from 'react-query';
import type { BodyType, ErrorType } from '../../../generatedAPIInstance';
import { GeneratedAPIInstance } from '../../../generatedAPIInstance';
import type {
AuthtypesTransactionDTO,
AuthzCheck200,
AuthzResources200,
RenderErrorResponseDTO,
} from '../sigNoz.schemas';
type AwaitedInput<T> = PromiseLike<T> | T;
type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
/**
* Checks if the authenticated user has permissions for given transactions
* @summary Check permissions
*/
export const authzCheck = (
authtypesTransactionDTO: BodyType<AuthtypesTransactionDTO[]>,
signal?: AbortSignal,
) => {
return GeneratedAPIInstance<AuthzCheck200>({
url: `/api/v1/authz/check`,
method: 'POST',
headers: { 'Content-Type': 'application/json' },
data: authtypesTransactionDTO,
signal,
});
};
export const getAuthzCheckMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof authzCheck>>,
TError,
{ data: BodyType<AuthtypesTransactionDTO[]> },
TContext
>;
}): UseMutationOptions<
Awaited<ReturnType<typeof authzCheck>>,
TError,
{ data: BodyType<AuthtypesTransactionDTO[]> },
TContext
> => {
const mutationKey = ['authzCheck'];
const { mutation: mutationOptions } = options
? options.mutation &&
'mutationKey' in options.mutation &&
options.mutation.mutationKey
? options
: { ...options, mutation: { ...options.mutation, mutationKey } }
: { mutation: { mutationKey } };
const mutationFn: MutationFunction<
Awaited<ReturnType<typeof authzCheck>>,
{ data: BodyType<AuthtypesTransactionDTO[]> }
> = (props) => {
const { data } = props ?? {};
return authzCheck(data);
};
return { mutationFn, ...mutationOptions };
};
export type AuthzCheckMutationResult = NonNullable<
Awaited<ReturnType<typeof authzCheck>>
>;
export type AuthzCheckMutationBody = BodyType<AuthtypesTransactionDTO[]>;
export type AuthzCheckMutationError = ErrorType<RenderErrorResponseDTO>;
/**
* @summary Check permissions
*/
export const useAuthzCheck = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof authzCheck>>,
TError,
{ data: BodyType<AuthtypesTransactionDTO[]> },
TContext
>;
}): UseMutationResult<
Awaited<ReturnType<typeof authzCheck>>,
TError,
{ data: BodyType<AuthtypesTransactionDTO[]> },
TContext
> => {
const mutationOptions = getAuthzCheckMutationOptions(options);
return useMutation(mutationOptions);
};
/**
* Gets all the available resources
* @summary Get resources
*/
export const authzResources = (signal?: AbortSignal) => {
return GeneratedAPIInstance<AuthzResources200>({
url: `/api/v1/authz/resources`,
method: 'GET',
signal,
});
};
export const getAuthzResourcesQueryKey = () => {
return [`/api/v1/authz/resources`] as const;
};
export const getAuthzResourcesQueryOptions = <
TData = Awaited<ReturnType<typeof authzResources>>,
TError = ErrorType<RenderErrorResponseDTO>
>(options?: {
query?: UseQueryOptions<
Awaited<ReturnType<typeof authzResources>>,
TError,
TData
>;
}) => {
const { query: queryOptions } = options ?? {};
const queryKey = queryOptions?.queryKey ?? getAuthzResourcesQueryKey();
const queryFn: QueryFunction<Awaited<ReturnType<typeof authzResources>>> = ({
signal,
}) => authzResources(signal);
return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<
Awaited<ReturnType<typeof authzResources>>,
TError,
TData
> & { queryKey: QueryKey };
};
export type AuthzResourcesQueryResult = NonNullable<
Awaited<ReturnType<typeof authzResources>>
>;
export type AuthzResourcesQueryError = ErrorType<RenderErrorResponseDTO>;
/**
* @summary Get resources
*/
export function useAuthzResources<
TData = Awaited<ReturnType<typeof authzResources>>,
TError = ErrorType<RenderErrorResponseDTO>
>(options?: {
query?: UseQueryOptions<
Awaited<ReturnType<typeof authzResources>>,
TError,
TData
>;
}): UseQueryResult<TData, TError> & { queryKey: QueryKey } {
const queryOptions = getAuthzResourcesQueryOptions(options);
const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {
queryKey: QueryKey;
};
query.queryKey = queryOptions.queryKey;
return query;
}
/**
* @summary Get resources
*/
export const invalidateAuthzResources = async (
queryClient: QueryClient,
options?: InvalidateOptions,
): Promise<QueryClient> => {
await queryClient.invalidateQueries(
{ queryKey: getAuthzResourcesQueryKey() },
options,
);
return queryClient;
};

View File

@@ -4,6 +4,7 @@
* * regenerate with 'yarn generate:api' * * regenerate with 'yarn generate:api'
* SigNoz * SigNoz
*/ */
import { useMutation, useQuery } from 'react-query';
import type { import type {
InvalidateOptions, InvalidateOptions,
MutationFunction, MutationFunction,
@@ -15,10 +16,7 @@ import type {
UseQueryOptions, UseQueryOptions,
UseQueryResult, UseQueryResult,
} from 'react-query'; } from 'react-query';
import { useMutation, useQuery } from 'react-query';
import type { BodyType, ErrorType } from '../../../generatedAPIInstance';
import { GeneratedAPIInstance } from '../../../generatedAPIInstance';
import type { import type {
CreatePublicDashboard201, CreatePublicDashboard201,
CreatePublicDashboardPathParameters, CreatePublicDashboardPathParameters,
@@ -35,12 +33,14 @@ import type {
UpdatePublicDashboardPathParameters, UpdatePublicDashboardPathParameters,
} from '../sigNoz.schemas'; } from '../sigNoz.schemas';
import { GeneratedAPIInstance } from '../../../index';
type AwaitedInput<T> = PromiseLike<T> | T; type AwaitedInput<T> = PromiseLike<T> | T;
type Awaited<O> = O extends AwaitedInput<infer T> ? T : never; type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
/** /**
* This endpoint deletes the public sharing config and disables the public sharing of a dashboard * This endpoints deletes the public sharing config and disables the public sharing of a dashboard
* @summary Delete public dashboard * @summary Delete public dashboard
*/ */
export const deletePublicDashboard = ({ export const deletePublicDashboard = ({
@@ -53,7 +53,7 @@ export const deletePublicDashboard = ({
}; };
export const getDeletePublicDashboardMutationOptions = < export const getDeletePublicDashboardMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -93,13 +93,13 @@ export type DeletePublicDashboardMutationResult = NonNullable<
Awaited<ReturnType<typeof deletePublicDashboard>> Awaited<ReturnType<typeof deletePublicDashboard>>
>; >;
export type DeletePublicDashboardMutationError = ErrorType<RenderErrorResponseDTO>; export type DeletePublicDashboardMutationError = RenderErrorResponseDTO;
/** /**
* @summary Delete public dashboard * @summary Delete public dashboard
*/ */
export const useDeletePublicDashboard = < export const useDeletePublicDashboard = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -119,7 +119,7 @@ export const useDeletePublicDashboard = <
return useMutation(mutationOptions); return useMutation(mutationOptions);
}; };
/** /**
* This endpoint returns public sharing config for a dashboard * This endpoints returns public sharing config for a dashboard
* @summary Get public dashboard * @summary Get public dashboard
*/ */
export const getPublicDashboard = ( export const getPublicDashboard = (
@@ -136,12 +136,12 @@ export const getPublicDashboard = (
export const getGetPublicDashboardQueryKey = ({ export const getGetPublicDashboardQueryKey = ({
id, id,
}: GetPublicDashboardPathParameters) => { }: GetPublicDashboardPathParameters) => {
return [`/api/v1/dashboards/${id}/public`] as const; return ['getPublicDashboard'] as const;
}; };
export const getGetPublicDashboardQueryOptions = < export const getGetPublicDashboardQueryOptions = <
TData = Awaited<ReturnType<typeof getPublicDashboard>>, TData = Awaited<ReturnType<typeof getPublicDashboard>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(
{ id }: GetPublicDashboardPathParameters, { id }: GetPublicDashboardPathParameters,
options?: { options?: {
@@ -176,7 +176,7 @@ export const getGetPublicDashboardQueryOptions = <
export type GetPublicDashboardQueryResult = NonNullable< export type GetPublicDashboardQueryResult = NonNullable<
Awaited<ReturnType<typeof getPublicDashboard>> Awaited<ReturnType<typeof getPublicDashboard>>
>; >;
export type GetPublicDashboardQueryError = ErrorType<RenderErrorResponseDTO>; export type GetPublicDashboardQueryError = RenderErrorResponseDTO;
/** /**
* @summary Get public dashboard * @summary Get public dashboard
@@ -184,7 +184,7 @@ export type GetPublicDashboardQueryError = ErrorType<RenderErrorResponseDTO>;
export function useGetPublicDashboard< export function useGetPublicDashboard<
TData = Awaited<ReturnType<typeof getPublicDashboard>>, TData = Awaited<ReturnType<typeof getPublicDashboard>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(
{ id }: GetPublicDashboardPathParameters, { id }: GetPublicDashboardPathParameters,
options?: { options?: {
@@ -223,12 +223,12 @@ export const invalidateGetPublicDashboard = async (
}; };
/** /**
* This endpoint creates public sharing config and enables public sharing of the dashboard * This endpoints creates public sharing config and enables public sharing of the dashboard
* @summary Create public dashboard * @summary Create public dashboard
*/ */
export const createPublicDashboard = ( export const createPublicDashboard = (
{ id }: CreatePublicDashboardPathParameters, { id }: CreatePublicDashboardPathParameters,
dashboardtypesPostablePublicDashboardDTO: BodyType<DashboardtypesPostablePublicDashboardDTO>, dashboardtypesPostablePublicDashboardDTO: DashboardtypesPostablePublicDashboardDTO,
signal?: AbortSignal, signal?: AbortSignal,
) => { ) => {
return GeneratedAPIInstance<CreatePublicDashboard201>({ return GeneratedAPIInstance<CreatePublicDashboard201>({
@@ -241,7 +241,7 @@ export const createPublicDashboard = (
}; };
export const getCreatePublicDashboardMutationOptions = < export const getCreatePublicDashboardMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -249,7 +249,7 @@ export const getCreatePublicDashboardMutationOptions = <
TError, TError,
{ {
pathParams: CreatePublicDashboardPathParameters; pathParams: CreatePublicDashboardPathParameters;
data: BodyType<DashboardtypesPostablePublicDashboardDTO>; data: DashboardtypesPostablePublicDashboardDTO;
}, },
TContext TContext
>; >;
@@ -258,7 +258,7 @@ export const getCreatePublicDashboardMutationOptions = <
TError, TError,
{ {
pathParams: CreatePublicDashboardPathParameters; pathParams: CreatePublicDashboardPathParameters;
data: BodyType<DashboardtypesPostablePublicDashboardDTO>; data: DashboardtypesPostablePublicDashboardDTO;
}, },
TContext TContext
> => { > => {
@@ -275,7 +275,7 @@ export const getCreatePublicDashboardMutationOptions = <
Awaited<ReturnType<typeof createPublicDashboard>>, Awaited<ReturnType<typeof createPublicDashboard>>,
{ {
pathParams: CreatePublicDashboardPathParameters; pathParams: CreatePublicDashboardPathParameters;
data: BodyType<DashboardtypesPostablePublicDashboardDTO>; data: DashboardtypesPostablePublicDashboardDTO;
} }
> = (props) => { > = (props) => {
const { pathParams, data } = props ?? {}; const { pathParams, data } = props ?? {};
@@ -289,14 +289,14 @@ export const getCreatePublicDashboardMutationOptions = <
export type CreatePublicDashboardMutationResult = NonNullable< export type CreatePublicDashboardMutationResult = NonNullable<
Awaited<ReturnType<typeof createPublicDashboard>> Awaited<ReturnType<typeof createPublicDashboard>>
>; >;
export type CreatePublicDashboardMutationBody = BodyType<DashboardtypesPostablePublicDashboardDTO>; export type CreatePublicDashboardMutationBody = DashboardtypesPostablePublicDashboardDTO;
export type CreatePublicDashboardMutationError = ErrorType<RenderErrorResponseDTO>; export type CreatePublicDashboardMutationError = RenderErrorResponseDTO;
/** /**
* @summary Create public dashboard * @summary Create public dashboard
*/ */
export const useCreatePublicDashboard = < export const useCreatePublicDashboard = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -304,7 +304,7 @@ export const useCreatePublicDashboard = <
TError, TError,
{ {
pathParams: CreatePublicDashboardPathParameters; pathParams: CreatePublicDashboardPathParameters;
data: BodyType<DashboardtypesPostablePublicDashboardDTO>; data: DashboardtypesPostablePublicDashboardDTO;
}, },
TContext TContext
>; >;
@@ -313,7 +313,7 @@ export const useCreatePublicDashboard = <
TError, TError,
{ {
pathParams: CreatePublicDashboardPathParameters; pathParams: CreatePublicDashboardPathParameters;
data: BodyType<DashboardtypesPostablePublicDashboardDTO>; data: DashboardtypesPostablePublicDashboardDTO;
}, },
TContext TContext
> => { > => {
@@ -322,12 +322,12 @@ export const useCreatePublicDashboard = <
return useMutation(mutationOptions); return useMutation(mutationOptions);
}; };
/** /**
* This endpoint updates the public sharing config for a dashboard * This endpoints updates the public sharing config for a dashboard
* @summary Update public dashboard * @summary Update public dashboard
*/ */
export const updatePublicDashboard = ( export const updatePublicDashboard = (
{ id }: UpdatePublicDashboardPathParameters, { id }: UpdatePublicDashboardPathParameters,
dashboardtypesUpdatablePublicDashboardDTO: BodyType<DashboardtypesUpdatablePublicDashboardDTO>, dashboardtypesUpdatablePublicDashboardDTO: DashboardtypesUpdatablePublicDashboardDTO,
) => { ) => {
return GeneratedAPIInstance<string>({ return GeneratedAPIInstance<string>({
url: `/api/v1/dashboards/${id}/public`, url: `/api/v1/dashboards/${id}/public`,
@@ -338,7 +338,7 @@ export const updatePublicDashboard = (
}; };
export const getUpdatePublicDashboardMutationOptions = < export const getUpdatePublicDashboardMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -346,7 +346,7 @@ export const getUpdatePublicDashboardMutationOptions = <
TError, TError,
{ {
pathParams: UpdatePublicDashboardPathParameters; pathParams: UpdatePublicDashboardPathParameters;
data: BodyType<DashboardtypesUpdatablePublicDashboardDTO>; data: DashboardtypesUpdatablePublicDashboardDTO;
}, },
TContext TContext
>; >;
@@ -355,7 +355,7 @@ export const getUpdatePublicDashboardMutationOptions = <
TError, TError,
{ {
pathParams: UpdatePublicDashboardPathParameters; pathParams: UpdatePublicDashboardPathParameters;
data: BodyType<DashboardtypesUpdatablePublicDashboardDTO>; data: DashboardtypesUpdatablePublicDashboardDTO;
}, },
TContext TContext
> => { > => {
@@ -372,7 +372,7 @@ export const getUpdatePublicDashboardMutationOptions = <
Awaited<ReturnType<typeof updatePublicDashboard>>, Awaited<ReturnType<typeof updatePublicDashboard>>,
{ {
pathParams: UpdatePublicDashboardPathParameters; pathParams: UpdatePublicDashboardPathParameters;
data: BodyType<DashboardtypesUpdatablePublicDashboardDTO>; data: DashboardtypesUpdatablePublicDashboardDTO;
} }
> = (props) => { > = (props) => {
const { pathParams, data } = props ?? {}; const { pathParams, data } = props ?? {};
@@ -386,14 +386,14 @@ export const getUpdatePublicDashboardMutationOptions = <
export type UpdatePublicDashboardMutationResult = NonNullable< export type UpdatePublicDashboardMutationResult = NonNullable<
Awaited<ReturnType<typeof updatePublicDashboard>> Awaited<ReturnType<typeof updatePublicDashboard>>
>; >;
export type UpdatePublicDashboardMutationBody = BodyType<DashboardtypesUpdatablePublicDashboardDTO>; export type UpdatePublicDashboardMutationBody = DashboardtypesUpdatablePublicDashboardDTO;
export type UpdatePublicDashboardMutationError = ErrorType<RenderErrorResponseDTO>; export type UpdatePublicDashboardMutationError = RenderErrorResponseDTO;
/** /**
* @summary Update public dashboard * @summary Update public dashboard
*/ */
export const useUpdatePublicDashboard = < export const useUpdatePublicDashboard = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -401,7 +401,7 @@ export const useUpdatePublicDashboard = <
TError, TError,
{ {
pathParams: UpdatePublicDashboardPathParameters; pathParams: UpdatePublicDashboardPathParameters;
data: BodyType<DashboardtypesUpdatablePublicDashboardDTO>; data: DashboardtypesUpdatablePublicDashboardDTO;
}, },
TContext TContext
>; >;
@@ -410,7 +410,7 @@ export const useUpdatePublicDashboard = <
TError, TError,
{ {
pathParams: UpdatePublicDashboardPathParameters; pathParams: UpdatePublicDashboardPathParameters;
data: BodyType<DashboardtypesUpdatablePublicDashboardDTO>; data: DashboardtypesUpdatablePublicDashboardDTO;
}, },
TContext TContext
> => { > => {
@@ -419,7 +419,7 @@ export const useUpdatePublicDashboard = <
return useMutation(mutationOptions); return useMutation(mutationOptions);
}; };
/** /**
* This endpoint returns the sanitized dashboard data for public access * This endpoints returns the sanitized dashboard data for public access
* @summary Get public dashboard data * @summary Get public dashboard data
*/ */
export const getPublicDashboardData = ( export const getPublicDashboardData = (
@@ -436,12 +436,12 @@ export const getPublicDashboardData = (
export const getGetPublicDashboardDataQueryKey = ({ export const getGetPublicDashboardDataQueryKey = ({
id, id,
}: GetPublicDashboardDataPathParameters) => { }: GetPublicDashboardDataPathParameters) => {
return [`/api/v1/public/dashboards/${id}`] as const; return ['getPublicDashboardData'] as const;
}; };
export const getGetPublicDashboardDataQueryOptions = < export const getGetPublicDashboardDataQueryOptions = <
TData = Awaited<ReturnType<typeof getPublicDashboardData>>, TData = Awaited<ReturnType<typeof getPublicDashboardData>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(
{ id }: GetPublicDashboardDataPathParameters, { id }: GetPublicDashboardDataPathParameters,
options?: { options?: {
@@ -476,7 +476,7 @@ export const getGetPublicDashboardDataQueryOptions = <
export type GetPublicDashboardDataQueryResult = NonNullable< export type GetPublicDashboardDataQueryResult = NonNullable<
Awaited<ReturnType<typeof getPublicDashboardData>> Awaited<ReturnType<typeof getPublicDashboardData>>
>; >;
export type GetPublicDashboardDataQueryError = ErrorType<RenderErrorResponseDTO>; export type GetPublicDashboardDataQueryError = RenderErrorResponseDTO;
/** /**
* @summary Get public dashboard data * @summary Get public dashboard data
@@ -484,7 +484,7 @@ export type GetPublicDashboardDataQueryError = ErrorType<RenderErrorResponseDTO>
export function useGetPublicDashboardData< export function useGetPublicDashboardData<
TData = Awaited<ReturnType<typeof getPublicDashboardData>>, TData = Awaited<ReturnType<typeof getPublicDashboardData>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(
{ id }: GetPublicDashboardDataPathParameters, { id }: GetPublicDashboardDataPathParameters,
options?: { options?: {
@@ -541,12 +541,12 @@ export const getGetPublicDashboardWidgetQueryRangeQueryKey = ({
id, id,
idx, idx,
}: GetPublicDashboardWidgetQueryRangePathParameters) => { }: GetPublicDashboardWidgetQueryRangePathParameters) => {
return [`/api/v1/public/dashboards/${id}/widgets/${idx}/query_range`] as const; return ['getPublicDashboardWidgetQueryRange'] as const;
}; };
export const getGetPublicDashboardWidgetQueryRangeQueryOptions = < export const getGetPublicDashboardWidgetQueryRangeQueryOptions = <
TData = Awaited<ReturnType<typeof getPublicDashboardWidgetQueryRange>>, TData = Awaited<ReturnType<typeof getPublicDashboardWidgetQueryRange>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(
{ id, idx }: GetPublicDashboardWidgetQueryRangePathParameters, { id, idx }: GetPublicDashboardWidgetQueryRangePathParameters,
options?: { options?: {
@@ -582,7 +582,7 @@ export const getGetPublicDashboardWidgetQueryRangeQueryOptions = <
export type GetPublicDashboardWidgetQueryRangeQueryResult = NonNullable< export type GetPublicDashboardWidgetQueryRangeQueryResult = NonNullable<
Awaited<ReturnType<typeof getPublicDashboardWidgetQueryRange>> Awaited<ReturnType<typeof getPublicDashboardWidgetQueryRange>>
>; >;
export type GetPublicDashboardWidgetQueryRangeQueryError = ErrorType<RenderErrorResponseDTO>; export type GetPublicDashboardWidgetQueryRangeQueryError = RenderErrorResponseDTO;
/** /**
* @summary Get query range result * @summary Get query range result
@@ -590,7 +590,7 @@ export type GetPublicDashboardWidgetQueryRangeQueryError = ErrorType<RenderError
export function useGetPublicDashboardWidgetQueryRange< export function useGetPublicDashboardWidgetQueryRange<
TData = Awaited<ReturnType<typeof getPublicDashboardWidgetQueryRange>>, TData = Awaited<ReturnType<typeof getPublicDashboardWidgetQueryRange>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(
{ id, idx }: GetPublicDashboardWidgetQueryRangePathParameters, { id, idx }: GetPublicDashboardWidgetQueryRangePathParameters,
options?: { options?: {

View File

@@ -4,6 +4,7 @@
* * regenerate with 'yarn generate:api' * * regenerate with 'yarn generate:api'
* SigNoz * SigNoz
*/ */
import { useQuery } from 'react-query';
import type { import type {
InvalidateOptions, InvalidateOptions,
QueryClient, QueryClient,
@@ -12,12 +13,11 @@ import type {
UseQueryOptions, UseQueryOptions,
UseQueryResult, UseQueryResult,
} from 'react-query'; } from 'react-query';
import { useQuery } from 'react-query';
import type { ErrorType } from '../../../generatedAPIInstance';
import { GeneratedAPIInstance } from '../../../generatedAPIInstance';
import type { GetFeatures200, RenderErrorResponseDTO } from '../sigNoz.schemas'; import type { GetFeatures200, RenderErrorResponseDTO } from '../sigNoz.schemas';
import { GeneratedAPIInstance } from '../../../index';
type AwaitedInput<T> = PromiseLike<T> | T; type AwaitedInput<T> = PromiseLike<T> | T;
type Awaited<O> = O extends AwaitedInput<infer T> ? T : never; type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
@@ -35,12 +35,12 @@ export const getFeatures = (signal?: AbortSignal) => {
}; };
export const getGetFeaturesQueryKey = () => { export const getGetFeaturesQueryKey = () => {
return [`/api/v2/features`] as const; return ['getFeatures'] as const;
}; };
export const getGetFeaturesQueryOptions = < export const getGetFeaturesQueryOptions = <
TData = Awaited<ReturnType<typeof getFeatures>>, TData = Awaited<ReturnType<typeof getFeatures>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof getFeatures>>, Awaited<ReturnType<typeof getFeatures>>,
@@ -66,7 +66,7 @@ export const getGetFeaturesQueryOptions = <
export type GetFeaturesQueryResult = NonNullable< export type GetFeaturesQueryResult = NonNullable<
Awaited<ReturnType<typeof getFeatures>> Awaited<ReturnType<typeof getFeatures>>
>; >;
export type GetFeaturesQueryError = ErrorType<RenderErrorResponseDTO>; export type GetFeaturesQueryError = RenderErrorResponseDTO;
/** /**
* @summary Get features * @summary Get features
@@ -74,7 +74,7 @@ export type GetFeaturesQueryError = ErrorType<RenderErrorResponseDTO>;
export function useGetFeatures< export function useGetFeatures<
TData = Awaited<ReturnType<typeof getFeatures>>, TData = Awaited<ReturnType<typeof getFeatures>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof getFeatures>>, Awaited<ReturnType<typeof getFeatures>>,

View File

@@ -1,223 +0,0 @@
/**
* ! Do not edit manually
* * The file has been auto-generated using Orval for SigNoz
* * regenerate with 'yarn generate:api'
* SigNoz
*/
import type {
InvalidateOptions,
QueryClient,
QueryFunction,
QueryKey,
UseQueryOptions,
UseQueryResult,
} from 'react-query';
import { useQuery } from 'react-query';
import type { ErrorType } from '../../../generatedAPIInstance';
import { GeneratedAPIInstance } from '../../../generatedAPIInstance';
import type {
GetFieldsKeys200,
GetFieldsKeysParams,
GetFieldsValues200,
GetFieldsValuesParams,
RenderErrorResponseDTO,
} from '../sigNoz.schemas';
type AwaitedInput<T> = PromiseLike<T> | T;
type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
/**
* This endpoint returns field keys
* @summary Get field keys
*/
export const getFieldsKeys = (
params?: GetFieldsKeysParams,
signal?: AbortSignal,
) => {
return GeneratedAPIInstance<GetFieldsKeys200>({
url: `/api/v1/fields/keys`,
method: 'GET',
params,
signal,
});
};
export const getGetFieldsKeysQueryKey = (params?: GetFieldsKeysParams) => {
return [`/api/v1/fields/keys`, ...(params ? [params] : [])] as const;
};
export const getGetFieldsKeysQueryOptions = <
TData = Awaited<ReturnType<typeof getFieldsKeys>>,
TError = ErrorType<RenderErrorResponseDTO>
>(
params?: GetFieldsKeysParams,
options?: {
query?: UseQueryOptions<
Awaited<ReturnType<typeof getFieldsKeys>>,
TError,
TData
>;
},
) => {
const { query: queryOptions } = options ?? {};
const queryKey = queryOptions?.queryKey ?? getGetFieldsKeysQueryKey(params);
const queryFn: QueryFunction<Awaited<ReturnType<typeof getFieldsKeys>>> = ({
signal,
}) => getFieldsKeys(params, signal);
return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<
Awaited<ReturnType<typeof getFieldsKeys>>,
TError,
TData
> & { queryKey: QueryKey };
};
export type GetFieldsKeysQueryResult = NonNullable<
Awaited<ReturnType<typeof getFieldsKeys>>
>;
export type GetFieldsKeysQueryError = ErrorType<RenderErrorResponseDTO>;
/**
* @summary Get field keys
*/
export function useGetFieldsKeys<
TData = Awaited<ReturnType<typeof getFieldsKeys>>,
TError = ErrorType<RenderErrorResponseDTO>
>(
params?: GetFieldsKeysParams,
options?: {
query?: UseQueryOptions<
Awaited<ReturnType<typeof getFieldsKeys>>,
TError,
TData
>;
},
): UseQueryResult<TData, TError> & { queryKey: QueryKey } {
const queryOptions = getGetFieldsKeysQueryOptions(params, options);
const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {
queryKey: QueryKey;
};
query.queryKey = queryOptions.queryKey;
return query;
}
/**
* @summary Get field keys
*/
export const invalidateGetFieldsKeys = async (
queryClient: QueryClient,
params?: GetFieldsKeysParams,
options?: InvalidateOptions,
): Promise<QueryClient> => {
await queryClient.invalidateQueries(
{ queryKey: getGetFieldsKeysQueryKey(params) },
options,
);
return queryClient;
};
/**
* This endpoint returns field values
* @summary Get field values
*/
export const getFieldsValues = (
params?: GetFieldsValuesParams,
signal?: AbortSignal,
) => {
return GeneratedAPIInstance<GetFieldsValues200>({
url: `/api/v1/fields/values`,
method: 'GET',
params,
signal,
});
};
export const getGetFieldsValuesQueryKey = (params?: GetFieldsValuesParams) => {
return [`/api/v1/fields/values`, ...(params ? [params] : [])] as const;
};
export const getGetFieldsValuesQueryOptions = <
TData = Awaited<ReturnType<typeof getFieldsValues>>,
TError = ErrorType<RenderErrorResponseDTO>
>(
params?: GetFieldsValuesParams,
options?: {
query?: UseQueryOptions<
Awaited<ReturnType<typeof getFieldsValues>>,
TError,
TData
>;
},
) => {
const { query: queryOptions } = options ?? {};
const queryKey = queryOptions?.queryKey ?? getGetFieldsValuesQueryKey(params);
const queryFn: QueryFunction<Awaited<ReturnType<typeof getFieldsValues>>> = ({
signal,
}) => getFieldsValues(params, signal);
return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<
Awaited<ReturnType<typeof getFieldsValues>>,
TError,
TData
> & { queryKey: QueryKey };
};
export type GetFieldsValuesQueryResult = NonNullable<
Awaited<ReturnType<typeof getFieldsValues>>
>;
export type GetFieldsValuesQueryError = ErrorType<RenderErrorResponseDTO>;
/**
* @summary Get field values
*/
export function useGetFieldsValues<
TData = Awaited<ReturnType<typeof getFieldsValues>>,
TError = ErrorType<RenderErrorResponseDTO>
>(
params?: GetFieldsValuesParams,
options?: {
query?: UseQueryOptions<
Awaited<ReturnType<typeof getFieldsValues>>,
TError,
TData
>;
},
): UseQueryResult<TData, TError> & { queryKey: QueryKey } {
const queryOptions = getGetFieldsValuesQueryOptions(params, options);
const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {
queryKey: QueryKey;
};
query.queryKey = queryOptions.queryKey;
return query;
}
/**
* @summary Get field values
*/
export const invalidateGetFieldsValues = async (
queryClient: QueryClient,
params?: GetFieldsValuesParams,
options?: InvalidateOptions,
): Promise<QueryClient> => {
await queryClient.invalidateQueries(
{ queryKey: getGetFieldsValuesQueryKey(params) },
options,
);
return queryClient;
};

View File

@@ -4,6 +4,7 @@
* * regenerate with 'yarn generate:api' * * regenerate with 'yarn generate:api'
* SigNoz * SigNoz
*/ */
import { useMutation, useQuery } from 'react-query';
import type { import type {
InvalidateOptions, InvalidateOptions,
MutationFunction, MutationFunction,
@@ -15,12 +16,9 @@ import type {
UseQueryOptions, UseQueryOptions,
UseQueryResult, UseQueryResult,
} from 'react-query'; } from 'react-query';
import { useMutation, useQuery } from 'react-query';
import type { BodyType, ErrorType } from '../../../generatedAPIInstance';
import { GeneratedAPIInstance } from '../../../generatedAPIInstance';
import type { import type {
CreateIngestionKey201, CreateIngestionKey200,
CreateIngestionKeyLimit201, CreateIngestionKeyLimit201,
CreateIngestionKeyLimitPathParameters, CreateIngestionKeyLimitPathParameters,
DeleteIngestionKeyLimitPathParameters, DeleteIngestionKeyLimitPathParameters,
@@ -29,14 +27,14 @@ import type {
GatewaytypesPostableIngestionKeyLimitDTO, GatewaytypesPostableIngestionKeyLimitDTO,
GatewaytypesUpdatableIngestionKeyLimitDTO, GatewaytypesUpdatableIngestionKeyLimitDTO,
GetIngestionKeys200, GetIngestionKeys200,
GetIngestionKeysParams,
RenderErrorResponseDTO, RenderErrorResponseDTO,
SearchIngestionKeys200, SearchIngestionKeys200,
SearchIngestionKeysParams,
UpdateIngestionKeyLimitPathParameters, UpdateIngestionKeyLimitPathParameters,
UpdateIngestionKeyPathParameters, UpdateIngestionKeyPathParameters,
} from '../sigNoz.schemas'; } from '../sigNoz.schemas';
import { GeneratedAPIInstance } from '../../../index';
type AwaitedInput<T> = PromiseLike<T> | T; type AwaitedInput<T> = PromiseLike<T> | T;
type Awaited<O> = O extends AwaitedInput<infer T> ? T : never; type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
@@ -45,47 +43,35 @@ type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
* This endpoint returns the ingestion keys for a workspace * This endpoint returns the ingestion keys for a workspace
* @summary Get ingestion keys for workspace * @summary Get ingestion keys for workspace
*/ */
export const getIngestionKeys = ( export const getIngestionKeys = (signal?: AbortSignal) => {
params?: GetIngestionKeysParams,
signal?: AbortSignal,
) => {
return GeneratedAPIInstance<GetIngestionKeys200>({ return GeneratedAPIInstance<GetIngestionKeys200>({
url: `/api/v2/gateway/ingestion_keys`, url: `/api/v2/gateway/ingestion_keys`,
method: 'GET', method: 'GET',
params,
signal, signal,
}); });
}; };
export const getGetIngestionKeysQueryKey = ( export const getGetIngestionKeysQueryKey = () => {
params?: GetIngestionKeysParams, return ['getIngestionKeys'] as const;
) => {
return [
`/api/v2/gateway/ingestion_keys`,
...(params ? [params] : []),
] as const;
}; };
export const getGetIngestionKeysQueryOptions = < export const getGetIngestionKeysQueryOptions = <
TData = Awaited<ReturnType<typeof getIngestionKeys>>, TData = Awaited<ReturnType<typeof getIngestionKeys>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(options?: {
params?: GetIngestionKeysParams, query?: UseQueryOptions<
options?: { Awaited<ReturnType<typeof getIngestionKeys>>,
query?: UseQueryOptions< TError,
Awaited<ReturnType<typeof getIngestionKeys>>, TData
TError, >;
TData }) => {
>;
},
) => {
const { query: queryOptions } = options ?? {}; const { query: queryOptions } = options ?? {};
const queryKey = queryOptions?.queryKey ?? getGetIngestionKeysQueryKey(params); const queryKey = queryOptions?.queryKey ?? getGetIngestionKeysQueryKey();
const queryFn: QueryFunction<Awaited<ReturnType<typeof getIngestionKeys>>> = ({ const queryFn: QueryFunction<Awaited<ReturnType<typeof getIngestionKeys>>> = ({
signal, signal,
}) => getIngestionKeys(params, signal); }) => getIngestionKeys(signal);
return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<
Awaited<ReturnType<typeof getIngestionKeys>>, Awaited<ReturnType<typeof getIngestionKeys>>,
@@ -97,7 +83,7 @@ export const getGetIngestionKeysQueryOptions = <
export type GetIngestionKeysQueryResult = NonNullable< export type GetIngestionKeysQueryResult = NonNullable<
Awaited<ReturnType<typeof getIngestionKeys>> Awaited<ReturnType<typeof getIngestionKeys>>
>; >;
export type GetIngestionKeysQueryError = ErrorType<RenderErrorResponseDTO>; export type GetIngestionKeysQueryError = RenderErrorResponseDTO;
/** /**
* @summary Get ingestion keys for workspace * @summary Get ingestion keys for workspace
@@ -105,18 +91,15 @@ export type GetIngestionKeysQueryError = ErrorType<RenderErrorResponseDTO>;
export function useGetIngestionKeys< export function useGetIngestionKeys<
TData = Awaited<ReturnType<typeof getIngestionKeys>>, TData = Awaited<ReturnType<typeof getIngestionKeys>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(options?: {
params?: GetIngestionKeysParams, query?: UseQueryOptions<
options?: { Awaited<ReturnType<typeof getIngestionKeys>>,
query?: UseQueryOptions< TError,
Awaited<ReturnType<typeof getIngestionKeys>>, TData
TError, >;
TData }): UseQueryResult<TData, TError> & { queryKey: QueryKey } {
>; const queryOptions = getGetIngestionKeysQueryOptions(options);
},
): UseQueryResult<TData, TError> & { queryKey: QueryKey } {
const queryOptions = getGetIngestionKeysQueryOptions(params, options);
const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & { const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {
queryKey: QueryKey; queryKey: QueryKey;
@@ -132,11 +115,10 @@ export function useGetIngestionKeys<
*/ */
export const invalidateGetIngestionKeys = async ( export const invalidateGetIngestionKeys = async (
queryClient: QueryClient, queryClient: QueryClient,
params?: GetIngestionKeysParams,
options?: InvalidateOptions, options?: InvalidateOptions,
): Promise<QueryClient> => { ): Promise<QueryClient> => {
await queryClient.invalidateQueries( await queryClient.invalidateQueries(
{ queryKey: getGetIngestionKeysQueryKey(params) }, { queryKey: getGetIngestionKeysQueryKey() },
options, options,
); );
@@ -148,10 +130,10 @@ export const invalidateGetIngestionKeys = async (
* @summary Create ingestion key for workspace * @summary Create ingestion key for workspace
*/ */
export const createIngestionKey = ( export const createIngestionKey = (
gatewaytypesPostableIngestionKeyDTO: BodyType<GatewaytypesPostableIngestionKeyDTO>, gatewaytypesPostableIngestionKeyDTO: GatewaytypesPostableIngestionKeyDTO,
signal?: AbortSignal, signal?: AbortSignal,
) => { ) => {
return GeneratedAPIInstance<CreateIngestionKey201>({ return GeneratedAPIInstance<CreateIngestionKey200>({
url: `/api/v2/gateway/ingestion_keys`, url: `/api/v2/gateway/ingestion_keys`,
method: 'POST', method: 'POST',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
@@ -161,19 +143,19 @@ export const createIngestionKey = (
}; };
export const getCreateIngestionKeyMutationOptions = < export const getCreateIngestionKeyMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof createIngestionKey>>, Awaited<ReturnType<typeof createIngestionKey>>,
TError, TError,
{ data: BodyType<GatewaytypesPostableIngestionKeyDTO> }, { data: GatewaytypesPostableIngestionKeyDTO },
TContext TContext
>; >;
}): UseMutationOptions< }): UseMutationOptions<
Awaited<ReturnType<typeof createIngestionKey>>, Awaited<ReturnType<typeof createIngestionKey>>,
TError, TError,
{ data: BodyType<GatewaytypesPostableIngestionKeyDTO> }, { data: GatewaytypesPostableIngestionKeyDTO },
TContext TContext
> => { > => {
const mutationKey = ['createIngestionKey']; const mutationKey = ['createIngestionKey'];
@@ -187,7 +169,7 @@ export const getCreateIngestionKeyMutationOptions = <
const mutationFn: MutationFunction< const mutationFn: MutationFunction<
Awaited<ReturnType<typeof createIngestionKey>>, Awaited<ReturnType<typeof createIngestionKey>>,
{ data: BodyType<GatewaytypesPostableIngestionKeyDTO> } { data: GatewaytypesPostableIngestionKeyDTO }
> = (props) => { > = (props) => {
const { data } = props ?? {}; const { data } = props ?? {};
@@ -200,26 +182,26 @@ export const getCreateIngestionKeyMutationOptions = <
export type CreateIngestionKeyMutationResult = NonNullable< export type CreateIngestionKeyMutationResult = NonNullable<
Awaited<ReturnType<typeof createIngestionKey>> Awaited<ReturnType<typeof createIngestionKey>>
>; >;
export type CreateIngestionKeyMutationBody = BodyType<GatewaytypesPostableIngestionKeyDTO>; export type CreateIngestionKeyMutationBody = GatewaytypesPostableIngestionKeyDTO;
export type CreateIngestionKeyMutationError = ErrorType<RenderErrorResponseDTO>; export type CreateIngestionKeyMutationError = RenderErrorResponseDTO;
/** /**
* @summary Create ingestion key for workspace * @summary Create ingestion key for workspace
*/ */
export const useCreateIngestionKey = < export const useCreateIngestionKey = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof createIngestionKey>>, Awaited<ReturnType<typeof createIngestionKey>>,
TError, TError,
{ data: BodyType<GatewaytypesPostableIngestionKeyDTO> }, { data: GatewaytypesPostableIngestionKeyDTO },
TContext TContext
>; >;
}): UseMutationResult< }): UseMutationResult<
Awaited<ReturnType<typeof createIngestionKey>>, Awaited<ReturnType<typeof createIngestionKey>>,
TError, TError,
{ data: BodyType<GatewaytypesPostableIngestionKeyDTO> }, { data: GatewaytypesPostableIngestionKeyDTO },
TContext TContext
> => { > => {
const mutationOptions = getCreateIngestionKeyMutationOptions(options); const mutationOptions = getCreateIngestionKeyMutationOptions(options);
@@ -240,7 +222,7 @@ export const deleteIngestionKey = ({
}; };
export const getDeleteIngestionKeyMutationOptions = < export const getDeleteIngestionKeyMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -280,13 +262,13 @@ export type DeleteIngestionKeyMutationResult = NonNullable<
Awaited<ReturnType<typeof deleteIngestionKey>> Awaited<ReturnType<typeof deleteIngestionKey>>
>; >;
export type DeleteIngestionKeyMutationError = ErrorType<RenderErrorResponseDTO>; export type DeleteIngestionKeyMutationError = RenderErrorResponseDTO;
/** /**
* @summary Delete ingestion key for workspace * @summary Delete ingestion key for workspace
*/ */
export const useDeleteIngestionKey = < export const useDeleteIngestionKey = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -311,7 +293,7 @@ export const useDeleteIngestionKey = <
*/ */
export const updateIngestionKey = ( export const updateIngestionKey = (
{ keyId }: UpdateIngestionKeyPathParameters, { keyId }: UpdateIngestionKeyPathParameters,
gatewaytypesPostableIngestionKeyDTO: BodyType<GatewaytypesPostableIngestionKeyDTO>, gatewaytypesPostableIngestionKeyDTO: GatewaytypesPostableIngestionKeyDTO,
) => { ) => {
return GeneratedAPIInstance<void>({ return GeneratedAPIInstance<void>({
url: `/api/v2/gateway/ingestion_keys/${keyId}`, url: `/api/v2/gateway/ingestion_keys/${keyId}`,
@@ -322,7 +304,7 @@ export const updateIngestionKey = (
}; };
export const getUpdateIngestionKeyMutationOptions = < export const getUpdateIngestionKeyMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -330,7 +312,7 @@ export const getUpdateIngestionKeyMutationOptions = <
TError, TError,
{ {
pathParams: UpdateIngestionKeyPathParameters; pathParams: UpdateIngestionKeyPathParameters;
data: BodyType<GatewaytypesPostableIngestionKeyDTO>; data: GatewaytypesPostableIngestionKeyDTO;
}, },
TContext TContext
>; >;
@@ -339,7 +321,7 @@ export const getUpdateIngestionKeyMutationOptions = <
TError, TError,
{ {
pathParams: UpdateIngestionKeyPathParameters; pathParams: UpdateIngestionKeyPathParameters;
data: BodyType<GatewaytypesPostableIngestionKeyDTO>; data: GatewaytypesPostableIngestionKeyDTO;
}, },
TContext TContext
> => { > => {
@@ -356,7 +338,7 @@ export const getUpdateIngestionKeyMutationOptions = <
Awaited<ReturnType<typeof updateIngestionKey>>, Awaited<ReturnType<typeof updateIngestionKey>>,
{ {
pathParams: UpdateIngestionKeyPathParameters; pathParams: UpdateIngestionKeyPathParameters;
data: BodyType<GatewaytypesPostableIngestionKeyDTO>; data: GatewaytypesPostableIngestionKeyDTO;
} }
> = (props) => { > = (props) => {
const { pathParams, data } = props ?? {}; const { pathParams, data } = props ?? {};
@@ -370,14 +352,14 @@ export const getUpdateIngestionKeyMutationOptions = <
export type UpdateIngestionKeyMutationResult = NonNullable< export type UpdateIngestionKeyMutationResult = NonNullable<
Awaited<ReturnType<typeof updateIngestionKey>> Awaited<ReturnType<typeof updateIngestionKey>>
>; >;
export type UpdateIngestionKeyMutationBody = BodyType<GatewaytypesPostableIngestionKeyDTO>; export type UpdateIngestionKeyMutationBody = GatewaytypesPostableIngestionKeyDTO;
export type UpdateIngestionKeyMutationError = ErrorType<RenderErrorResponseDTO>; export type UpdateIngestionKeyMutationError = RenderErrorResponseDTO;
/** /**
* @summary Update ingestion key for workspace * @summary Update ingestion key for workspace
*/ */
export const useUpdateIngestionKey = < export const useUpdateIngestionKey = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -385,7 +367,7 @@ export const useUpdateIngestionKey = <
TError, TError,
{ {
pathParams: UpdateIngestionKeyPathParameters; pathParams: UpdateIngestionKeyPathParameters;
data: BodyType<GatewaytypesPostableIngestionKeyDTO>; data: GatewaytypesPostableIngestionKeyDTO;
}, },
TContext TContext
>; >;
@@ -394,7 +376,7 @@ export const useUpdateIngestionKey = <
TError, TError,
{ {
pathParams: UpdateIngestionKeyPathParameters; pathParams: UpdateIngestionKeyPathParameters;
data: BodyType<GatewaytypesPostableIngestionKeyDTO>; data: GatewaytypesPostableIngestionKeyDTO;
}, },
TContext TContext
> => { > => {
@@ -408,7 +390,7 @@ export const useUpdateIngestionKey = <
*/ */
export const createIngestionKeyLimit = ( export const createIngestionKeyLimit = (
{ keyId }: CreateIngestionKeyLimitPathParameters, { keyId }: CreateIngestionKeyLimitPathParameters,
gatewaytypesPostableIngestionKeyLimitDTO: BodyType<GatewaytypesPostableIngestionKeyLimitDTO>, gatewaytypesPostableIngestionKeyLimitDTO: GatewaytypesPostableIngestionKeyLimitDTO,
signal?: AbortSignal, signal?: AbortSignal,
) => { ) => {
return GeneratedAPIInstance<CreateIngestionKeyLimit201>({ return GeneratedAPIInstance<CreateIngestionKeyLimit201>({
@@ -421,7 +403,7 @@ export const createIngestionKeyLimit = (
}; };
export const getCreateIngestionKeyLimitMutationOptions = < export const getCreateIngestionKeyLimitMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -429,7 +411,7 @@ export const getCreateIngestionKeyLimitMutationOptions = <
TError, TError,
{ {
pathParams: CreateIngestionKeyLimitPathParameters; pathParams: CreateIngestionKeyLimitPathParameters;
data: BodyType<GatewaytypesPostableIngestionKeyLimitDTO>; data: GatewaytypesPostableIngestionKeyLimitDTO;
}, },
TContext TContext
>; >;
@@ -438,7 +420,7 @@ export const getCreateIngestionKeyLimitMutationOptions = <
TError, TError,
{ {
pathParams: CreateIngestionKeyLimitPathParameters; pathParams: CreateIngestionKeyLimitPathParameters;
data: BodyType<GatewaytypesPostableIngestionKeyLimitDTO>; data: GatewaytypesPostableIngestionKeyLimitDTO;
}, },
TContext TContext
> => { > => {
@@ -455,7 +437,7 @@ export const getCreateIngestionKeyLimitMutationOptions = <
Awaited<ReturnType<typeof createIngestionKeyLimit>>, Awaited<ReturnType<typeof createIngestionKeyLimit>>,
{ {
pathParams: CreateIngestionKeyLimitPathParameters; pathParams: CreateIngestionKeyLimitPathParameters;
data: BodyType<GatewaytypesPostableIngestionKeyLimitDTO>; data: GatewaytypesPostableIngestionKeyLimitDTO;
} }
> = (props) => { > = (props) => {
const { pathParams, data } = props ?? {}; const { pathParams, data } = props ?? {};
@@ -469,14 +451,14 @@ export const getCreateIngestionKeyLimitMutationOptions = <
export type CreateIngestionKeyLimitMutationResult = NonNullable< export type CreateIngestionKeyLimitMutationResult = NonNullable<
Awaited<ReturnType<typeof createIngestionKeyLimit>> Awaited<ReturnType<typeof createIngestionKeyLimit>>
>; >;
export type CreateIngestionKeyLimitMutationBody = BodyType<GatewaytypesPostableIngestionKeyLimitDTO>; export type CreateIngestionKeyLimitMutationBody = GatewaytypesPostableIngestionKeyLimitDTO;
export type CreateIngestionKeyLimitMutationError = ErrorType<RenderErrorResponseDTO>; export type CreateIngestionKeyLimitMutationError = RenderErrorResponseDTO;
/** /**
* @summary Create limit for the ingestion key * @summary Create limit for the ingestion key
*/ */
export const useCreateIngestionKeyLimit = < export const useCreateIngestionKeyLimit = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -484,7 +466,7 @@ export const useCreateIngestionKeyLimit = <
TError, TError,
{ {
pathParams: CreateIngestionKeyLimitPathParameters; pathParams: CreateIngestionKeyLimitPathParameters;
data: BodyType<GatewaytypesPostableIngestionKeyLimitDTO>; data: GatewaytypesPostableIngestionKeyLimitDTO;
}, },
TContext TContext
>; >;
@@ -493,7 +475,7 @@ export const useCreateIngestionKeyLimit = <
TError, TError,
{ {
pathParams: CreateIngestionKeyLimitPathParameters; pathParams: CreateIngestionKeyLimitPathParameters;
data: BodyType<GatewaytypesPostableIngestionKeyLimitDTO>; data: GatewaytypesPostableIngestionKeyLimitDTO;
}, },
TContext TContext
> => { > => {
@@ -515,7 +497,7 @@ export const deleteIngestionKeyLimit = ({
}; };
export const getDeleteIngestionKeyLimitMutationOptions = < export const getDeleteIngestionKeyLimitMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -555,13 +537,13 @@ export type DeleteIngestionKeyLimitMutationResult = NonNullable<
Awaited<ReturnType<typeof deleteIngestionKeyLimit>> Awaited<ReturnType<typeof deleteIngestionKeyLimit>>
>; >;
export type DeleteIngestionKeyLimitMutationError = ErrorType<RenderErrorResponseDTO>; export type DeleteIngestionKeyLimitMutationError = RenderErrorResponseDTO;
/** /**
* @summary Delete limit for the ingestion key * @summary Delete limit for the ingestion key
*/ */
export const useDeleteIngestionKeyLimit = < export const useDeleteIngestionKeyLimit = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -586,7 +568,7 @@ export const useDeleteIngestionKeyLimit = <
*/ */
export const updateIngestionKeyLimit = ( export const updateIngestionKeyLimit = (
{ limitId }: UpdateIngestionKeyLimitPathParameters, { limitId }: UpdateIngestionKeyLimitPathParameters,
gatewaytypesUpdatableIngestionKeyLimitDTO: BodyType<GatewaytypesUpdatableIngestionKeyLimitDTO>, gatewaytypesUpdatableIngestionKeyLimitDTO: GatewaytypesUpdatableIngestionKeyLimitDTO,
) => { ) => {
return GeneratedAPIInstance<void>({ return GeneratedAPIInstance<void>({
url: `/api/v2/gateway/ingestion_keys/limits/${limitId}`, url: `/api/v2/gateway/ingestion_keys/limits/${limitId}`,
@@ -597,7 +579,7 @@ export const updateIngestionKeyLimit = (
}; };
export const getUpdateIngestionKeyLimitMutationOptions = < export const getUpdateIngestionKeyLimitMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -605,7 +587,7 @@ export const getUpdateIngestionKeyLimitMutationOptions = <
TError, TError,
{ {
pathParams: UpdateIngestionKeyLimitPathParameters; pathParams: UpdateIngestionKeyLimitPathParameters;
data: BodyType<GatewaytypesUpdatableIngestionKeyLimitDTO>; data: GatewaytypesUpdatableIngestionKeyLimitDTO;
}, },
TContext TContext
>; >;
@@ -614,7 +596,7 @@ export const getUpdateIngestionKeyLimitMutationOptions = <
TError, TError,
{ {
pathParams: UpdateIngestionKeyLimitPathParameters; pathParams: UpdateIngestionKeyLimitPathParameters;
data: BodyType<GatewaytypesUpdatableIngestionKeyLimitDTO>; data: GatewaytypesUpdatableIngestionKeyLimitDTO;
}, },
TContext TContext
> => { > => {
@@ -631,7 +613,7 @@ export const getUpdateIngestionKeyLimitMutationOptions = <
Awaited<ReturnType<typeof updateIngestionKeyLimit>>, Awaited<ReturnType<typeof updateIngestionKeyLimit>>,
{ {
pathParams: UpdateIngestionKeyLimitPathParameters; pathParams: UpdateIngestionKeyLimitPathParameters;
data: BodyType<GatewaytypesUpdatableIngestionKeyLimitDTO>; data: GatewaytypesUpdatableIngestionKeyLimitDTO;
} }
> = (props) => { > = (props) => {
const { pathParams, data } = props ?? {}; const { pathParams, data } = props ?? {};
@@ -645,14 +627,14 @@ export const getUpdateIngestionKeyLimitMutationOptions = <
export type UpdateIngestionKeyLimitMutationResult = NonNullable< export type UpdateIngestionKeyLimitMutationResult = NonNullable<
Awaited<ReturnType<typeof updateIngestionKeyLimit>> Awaited<ReturnType<typeof updateIngestionKeyLimit>>
>; >;
export type UpdateIngestionKeyLimitMutationBody = BodyType<GatewaytypesUpdatableIngestionKeyLimitDTO>; export type UpdateIngestionKeyLimitMutationBody = GatewaytypesUpdatableIngestionKeyLimitDTO;
export type UpdateIngestionKeyLimitMutationError = ErrorType<RenderErrorResponseDTO>; export type UpdateIngestionKeyLimitMutationError = RenderErrorResponseDTO;
/** /**
* @summary Update limit for the ingestion key * @summary Update limit for the ingestion key
*/ */
export const useUpdateIngestionKeyLimit = < export const useUpdateIngestionKeyLimit = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -660,7 +642,7 @@ export const useUpdateIngestionKeyLimit = <
TError, TError,
{ {
pathParams: UpdateIngestionKeyLimitPathParameters; pathParams: UpdateIngestionKeyLimitPathParameters;
data: BodyType<GatewaytypesUpdatableIngestionKeyLimitDTO>; data: GatewaytypesUpdatableIngestionKeyLimitDTO;
}, },
TContext TContext
>; >;
@@ -669,7 +651,7 @@ export const useUpdateIngestionKeyLimit = <
TError, TError,
{ {
pathParams: UpdateIngestionKeyLimitPathParameters; pathParams: UpdateIngestionKeyLimitPathParameters;
data: BodyType<GatewaytypesUpdatableIngestionKeyLimitDTO>; data: GatewaytypesUpdatableIngestionKeyLimitDTO;
}, },
TContext TContext
> => { > => {
@@ -681,48 +663,35 @@ export const useUpdateIngestionKeyLimit = <
* This endpoint returns the ingestion keys for a workspace * This endpoint returns the ingestion keys for a workspace
* @summary Search ingestion keys for workspace * @summary Search ingestion keys for workspace
*/ */
export const searchIngestionKeys = ( export const searchIngestionKeys = (signal?: AbortSignal) => {
params: SearchIngestionKeysParams,
signal?: AbortSignal,
) => {
return GeneratedAPIInstance<SearchIngestionKeys200>({ return GeneratedAPIInstance<SearchIngestionKeys200>({
url: `/api/v2/gateway/ingestion_keys/search`, url: `/api/v2/gateway/ingestion_keys/search`,
method: 'GET', method: 'GET',
params,
signal, signal,
}); });
}; };
export const getSearchIngestionKeysQueryKey = ( export const getSearchIngestionKeysQueryKey = () => {
params?: SearchIngestionKeysParams, return ['searchIngestionKeys'] as const;
) => {
return [
`/api/v2/gateway/ingestion_keys/search`,
...(params ? [params] : []),
] as const;
}; };
export const getSearchIngestionKeysQueryOptions = < export const getSearchIngestionKeysQueryOptions = <
TData = Awaited<ReturnType<typeof searchIngestionKeys>>, TData = Awaited<ReturnType<typeof searchIngestionKeys>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(options?: {
params: SearchIngestionKeysParams, query?: UseQueryOptions<
options?: { Awaited<ReturnType<typeof searchIngestionKeys>>,
query?: UseQueryOptions< TError,
Awaited<ReturnType<typeof searchIngestionKeys>>, TData
TError, >;
TData }) => {
>;
},
) => {
const { query: queryOptions } = options ?? {}; const { query: queryOptions } = options ?? {};
const queryKey = const queryKey = queryOptions?.queryKey ?? getSearchIngestionKeysQueryKey();
queryOptions?.queryKey ?? getSearchIngestionKeysQueryKey(params);
const queryFn: QueryFunction< const queryFn: QueryFunction<
Awaited<ReturnType<typeof searchIngestionKeys>> Awaited<ReturnType<typeof searchIngestionKeys>>
> = ({ signal }) => searchIngestionKeys(params, signal); > = ({ signal }) => searchIngestionKeys(signal);
return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<
Awaited<ReturnType<typeof searchIngestionKeys>>, Awaited<ReturnType<typeof searchIngestionKeys>>,
@@ -734,7 +703,7 @@ export const getSearchIngestionKeysQueryOptions = <
export type SearchIngestionKeysQueryResult = NonNullable< export type SearchIngestionKeysQueryResult = NonNullable<
Awaited<ReturnType<typeof searchIngestionKeys>> Awaited<ReturnType<typeof searchIngestionKeys>>
>; >;
export type SearchIngestionKeysQueryError = ErrorType<RenderErrorResponseDTO>; export type SearchIngestionKeysQueryError = RenderErrorResponseDTO;
/** /**
* @summary Search ingestion keys for workspace * @summary Search ingestion keys for workspace
@@ -742,18 +711,15 @@ export type SearchIngestionKeysQueryError = ErrorType<RenderErrorResponseDTO>;
export function useSearchIngestionKeys< export function useSearchIngestionKeys<
TData = Awaited<ReturnType<typeof searchIngestionKeys>>, TData = Awaited<ReturnType<typeof searchIngestionKeys>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(options?: {
params: SearchIngestionKeysParams, query?: UseQueryOptions<
options?: { Awaited<ReturnType<typeof searchIngestionKeys>>,
query?: UseQueryOptions< TError,
Awaited<ReturnType<typeof searchIngestionKeys>>, TData
TError, >;
TData }): UseQueryResult<TData, TError> & { queryKey: QueryKey } {
>; const queryOptions = getSearchIngestionKeysQueryOptions(options);
},
): UseQueryResult<TData, TError> & { queryKey: QueryKey } {
const queryOptions = getSearchIngestionKeysQueryOptions(params, options);
const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & { const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {
queryKey: QueryKey; queryKey: QueryKey;
@@ -769,11 +735,10 @@ export function useSearchIngestionKeys<
*/ */
export const invalidateSearchIngestionKeys = async ( export const invalidateSearchIngestionKeys = async (
queryClient: QueryClient, queryClient: QueryClient,
params: SearchIngestionKeysParams,
options?: InvalidateOptions, options?: InvalidateOptions,
): Promise<QueryClient> => { ): Promise<QueryClient> => {
await queryClient.invalidateQueries( await queryClient.invalidateQueries(
{ queryKey: getSearchIngestionKeysQueryKey(params) }, { queryKey: getSearchIngestionKeysQueryKey() },
options, options,
); );

View File

@@ -4,6 +4,7 @@
* * regenerate with 'yarn generate:api' * * regenerate with 'yarn generate:api'
* SigNoz * SigNoz
*/ */
import { useQuery } from 'react-query';
import type { import type {
InvalidateOptions, InvalidateOptions,
QueryClient, QueryClient,
@@ -12,21 +13,20 @@ import type {
UseQueryOptions, UseQueryOptions,
UseQueryResult, UseQueryResult,
} from 'react-query'; } from 'react-query';
import { useQuery } from 'react-query';
import type { ErrorType } from '../../../generatedAPIInstance';
import { GeneratedAPIInstance } from '../../../generatedAPIInstance';
import type { import type {
GetGlobalConfig200, GetGlobalConfig200,
RenderErrorResponseDTO, RenderErrorResponseDTO,
} from '../sigNoz.schemas'; } from '../sigNoz.schemas';
import { GeneratedAPIInstance } from '../../../index';
type AwaitedInput<T> = PromiseLike<T> | T; type AwaitedInput<T> = PromiseLike<T> | T;
type Awaited<O> = O extends AwaitedInput<infer T> ? T : never; type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
/** /**
* This endpoint returns global config * This endpoints returns global config
* @summary Get global config * @summary Get global config
*/ */
export const getGlobalConfig = (signal?: AbortSignal) => { export const getGlobalConfig = (signal?: AbortSignal) => {
@@ -38,12 +38,12 @@ export const getGlobalConfig = (signal?: AbortSignal) => {
}; };
export const getGetGlobalConfigQueryKey = () => { export const getGetGlobalConfigQueryKey = () => {
return [`/api/v1/global/config`] as const; return ['getGlobalConfig'] as const;
}; };
export const getGetGlobalConfigQueryOptions = < export const getGetGlobalConfigQueryOptions = <
TData = Awaited<ReturnType<typeof getGlobalConfig>>, TData = Awaited<ReturnType<typeof getGlobalConfig>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof getGlobalConfig>>, Awaited<ReturnType<typeof getGlobalConfig>>,
@@ -69,7 +69,7 @@ export const getGetGlobalConfigQueryOptions = <
export type GetGlobalConfigQueryResult = NonNullable< export type GetGlobalConfigQueryResult = NonNullable<
Awaited<ReturnType<typeof getGlobalConfig>> Awaited<ReturnType<typeof getGlobalConfig>>
>; >;
export type GetGlobalConfigQueryError = ErrorType<RenderErrorResponseDTO>; export type GetGlobalConfigQueryError = RenderErrorResponseDTO;
/** /**
* @summary Get global config * @summary Get global config
@@ -77,7 +77,7 @@ export type GetGlobalConfigQueryError = ErrorType<RenderErrorResponseDTO>;
export function useGetGlobalConfig< export function useGetGlobalConfig<
TData = Awaited<ReturnType<typeof getGlobalConfig>>, TData = Awaited<ReturnType<typeof getGlobalConfig>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof getGlobalConfig>>, Awaited<ReturnType<typeof getGlobalConfig>>,

View File

@@ -4,6 +4,7 @@
* * regenerate with 'yarn generate:api' * * regenerate with 'yarn generate:api'
* SigNoz * SigNoz
*/ */
import { useMutation, useQuery } from 'react-query';
import type { import type {
InvalidateOptions, InvalidateOptions,
MutationFunction, MutationFunction,
@@ -15,16 +16,15 @@ import type {
UseQueryOptions, UseQueryOptions,
UseQueryResult, UseQueryResult,
} from 'react-query'; } from 'react-query';
import { useMutation, useQuery } from 'react-query';
import type { BodyType, ErrorType } from '../../../generatedAPIInstance';
import { GeneratedAPIInstance } from '../../../generatedAPIInstance';
import type { import type {
ListPromotedAndIndexedPaths200, ListPromotedAndIndexedPaths200,
PromotetypesPromotePathDTO, PromotetypesPromotePathDTO,
RenderErrorResponseDTO, RenderErrorResponseDTO,
} from '../sigNoz.schemas'; } from '../sigNoz.schemas';
import { GeneratedAPIInstance } from '../../../index';
type AwaitedInput<T> = PromiseLike<T> | T; type AwaitedInput<T> = PromiseLike<T> | T;
type Awaited<O> = O extends AwaitedInput<infer T> ? T : never; type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
@@ -42,12 +42,12 @@ export const listPromotedAndIndexedPaths = (signal?: AbortSignal) => {
}; };
export const getListPromotedAndIndexedPathsQueryKey = () => { export const getListPromotedAndIndexedPathsQueryKey = () => {
return [`/api/v1/logs/promote_paths`] as const; return ['listPromotedAndIndexedPaths'] as const;
}; };
export const getListPromotedAndIndexedPathsQueryOptions = < export const getListPromotedAndIndexedPathsQueryOptions = <
TData = Awaited<ReturnType<typeof listPromotedAndIndexedPaths>>, TData = Awaited<ReturnType<typeof listPromotedAndIndexedPaths>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof listPromotedAndIndexedPaths>>, Awaited<ReturnType<typeof listPromotedAndIndexedPaths>>,
@@ -74,7 +74,7 @@ export const getListPromotedAndIndexedPathsQueryOptions = <
export type ListPromotedAndIndexedPathsQueryResult = NonNullable< export type ListPromotedAndIndexedPathsQueryResult = NonNullable<
Awaited<ReturnType<typeof listPromotedAndIndexedPaths>> Awaited<ReturnType<typeof listPromotedAndIndexedPaths>>
>; >;
export type ListPromotedAndIndexedPathsQueryError = ErrorType<RenderErrorResponseDTO>; export type ListPromotedAndIndexedPathsQueryError = RenderErrorResponseDTO;
/** /**
* @summary Promote and index paths * @summary Promote and index paths
@@ -82,7 +82,7 @@ export type ListPromotedAndIndexedPathsQueryError = ErrorType<RenderErrorRespons
export function useListPromotedAndIndexedPaths< export function useListPromotedAndIndexedPaths<
TData = Awaited<ReturnType<typeof listPromotedAndIndexedPaths>>, TData = Awaited<ReturnType<typeof listPromotedAndIndexedPaths>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof listPromotedAndIndexedPaths>>, Awaited<ReturnType<typeof listPromotedAndIndexedPaths>>,
@@ -121,9 +121,7 @@ export const invalidateListPromotedAndIndexedPaths = async (
* @summary Promote and index paths * @summary Promote and index paths
*/ */
export const handlePromoteAndIndexPaths = ( export const handlePromoteAndIndexPaths = (
promotetypesPromotePathDTONull: BodyType< promotetypesPromotePathDTONull: PromotetypesPromotePathDTO[] | null,
PromotetypesPromotePathDTO[] | null
> | null,
signal?: AbortSignal, signal?: AbortSignal,
) => { ) => {
return GeneratedAPIInstance<void>({ return GeneratedAPIInstance<void>({
@@ -136,19 +134,19 @@ export const handlePromoteAndIndexPaths = (
}; };
export const getHandlePromoteAndIndexPathsMutationOptions = < export const getHandlePromoteAndIndexPathsMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof handlePromoteAndIndexPaths>>, Awaited<ReturnType<typeof handlePromoteAndIndexPaths>>,
TError, TError,
{ data: BodyType<PromotetypesPromotePathDTO[] | null> }, { data: PromotetypesPromotePathDTO[] | null },
TContext TContext
>; >;
}): UseMutationOptions< }): UseMutationOptions<
Awaited<ReturnType<typeof handlePromoteAndIndexPaths>>, Awaited<ReturnType<typeof handlePromoteAndIndexPaths>>,
TError, TError,
{ data: BodyType<PromotetypesPromotePathDTO[] | null> }, { data: PromotetypesPromotePathDTO[] | null },
TContext TContext
> => { > => {
const mutationKey = ['handlePromoteAndIndexPaths']; const mutationKey = ['handlePromoteAndIndexPaths'];
@@ -162,7 +160,7 @@ export const getHandlePromoteAndIndexPathsMutationOptions = <
const mutationFn: MutationFunction< const mutationFn: MutationFunction<
Awaited<ReturnType<typeof handlePromoteAndIndexPaths>>, Awaited<ReturnType<typeof handlePromoteAndIndexPaths>>,
{ data: BodyType<PromotetypesPromotePathDTO[] | null> } { data: PromotetypesPromotePathDTO[] | null }
> = (props) => { > = (props) => {
const { data } = props ?? {}; const { data } = props ?? {};
@@ -175,28 +173,28 @@ export const getHandlePromoteAndIndexPathsMutationOptions = <
export type HandlePromoteAndIndexPathsMutationResult = NonNullable< export type HandlePromoteAndIndexPathsMutationResult = NonNullable<
Awaited<ReturnType<typeof handlePromoteAndIndexPaths>> Awaited<ReturnType<typeof handlePromoteAndIndexPaths>>
>; >;
export type HandlePromoteAndIndexPathsMutationBody = BodyType< export type HandlePromoteAndIndexPathsMutationBody =
PromotetypesPromotePathDTO[] | null | PromotetypesPromotePathDTO[]
>; | null;
export type HandlePromoteAndIndexPathsMutationError = ErrorType<RenderErrorResponseDTO>; export type HandlePromoteAndIndexPathsMutationError = RenderErrorResponseDTO;
/** /**
* @summary Promote and index paths * @summary Promote and index paths
*/ */
export const useHandlePromoteAndIndexPaths = < export const useHandlePromoteAndIndexPaths = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof handlePromoteAndIndexPaths>>, Awaited<ReturnType<typeof handlePromoteAndIndexPaths>>,
TError, TError,
{ data: BodyType<PromotetypesPromotePathDTO[] | null> }, { data: PromotetypesPromotePathDTO[] | null },
TContext TContext
>; >;
}): UseMutationResult< }): UseMutationResult<
Awaited<ReturnType<typeof handlePromoteAndIndexPaths>>, Awaited<ReturnType<typeof handlePromoteAndIndexPaths>>,
TError, TError,
{ data: BodyType<PromotetypesPromotePathDTO[] | null> }, { data: PromotetypesPromotePathDTO[] | null },
TContext TContext
> => { > => {
const mutationOptions = getHandlePromoteAndIndexPathsMutationOptions(options); const mutationOptions = getHandlePromoteAndIndexPathsMutationOptions(options);

File diff suppressed because it is too large Load Diff

View File

@@ -4,6 +4,7 @@
* * regenerate with 'yarn generate:api' * * regenerate with 'yarn generate:api'
* SigNoz * SigNoz
*/ */
import { useMutation, useQuery } from 'react-query';
import type { import type {
InvalidateOptions, InvalidateOptions,
MutationFunction, MutationFunction,
@@ -15,16 +16,15 @@ import type {
UseQueryOptions, UseQueryOptions,
UseQueryResult, UseQueryResult,
} from 'react-query'; } from 'react-query';
import { useMutation, useQuery } from 'react-query';
import type { BodyType, ErrorType } from '../../../generatedAPIInstance';
import { GeneratedAPIInstance } from '../../../generatedAPIInstance';
import type { import type {
GetMyOrganization200, GetMyOrganization200,
RenderErrorResponseDTO, RenderErrorResponseDTO,
TypesOrganizationDTO, TypesOrganizationDTO,
} from '../sigNoz.schemas'; } from '../sigNoz.schemas';
import { GeneratedAPIInstance } from '../../../index';
type AwaitedInput<T> = PromiseLike<T> | T; type AwaitedInput<T> = PromiseLike<T> | T;
type Awaited<O> = O extends AwaitedInput<infer T> ? T : never; type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
@@ -42,12 +42,12 @@ export const getMyOrganization = (signal?: AbortSignal) => {
}; };
export const getGetMyOrganizationQueryKey = () => { export const getGetMyOrganizationQueryKey = () => {
return [`/api/v2/orgs/me`] as const; return ['getMyOrganization'] as const;
}; };
export const getGetMyOrganizationQueryOptions = < export const getGetMyOrganizationQueryOptions = <
TData = Awaited<ReturnType<typeof getMyOrganization>>, TData = Awaited<ReturnType<typeof getMyOrganization>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof getMyOrganization>>, Awaited<ReturnType<typeof getMyOrganization>>,
@@ -73,7 +73,7 @@ export const getGetMyOrganizationQueryOptions = <
export type GetMyOrganizationQueryResult = NonNullable< export type GetMyOrganizationQueryResult = NonNullable<
Awaited<ReturnType<typeof getMyOrganization>> Awaited<ReturnType<typeof getMyOrganization>>
>; >;
export type GetMyOrganizationQueryError = ErrorType<RenderErrorResponseDTO>; export type GetMyOrganizationQueryError = RenderErrorResponseDTO;
/** /**
* @summary Get my organization * @summary Get my organization
@@ -81,7 +81,7 @@ export type GetMyOrganizationQueryError = ErrorType<RenderErrorResponseDTO>;
export function useGetMyOrganization< export function useGetMyOrganization<
TData = Awaited<ReturnType<typeof getMyOrganization>>, TData = Awaited<ReturnType<typeof getMyOrganization>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof getMyOrganization>>, Awaited<ReturnType<typeof getMyOrganization>>,
@@ -120,7 +120,7 @@ export const invalidateGetMyOrganization = async (
* @summary Update my organization * @summary Update my organization
*/ */
export const updateMyOrganization = ( export const updateMyOrganization = (
typesOrganizationDTO: BodyType<TypesOrganizationDTO>, typesOrganizationDTO: TypesOrganizationDTO,
) => { ) => {
return GeneratedAPIInstance<void>({ return GeneratedAPIInstance<void>({
url: `/api/v2/orgs/me`, url: `/api/v2/orgs/me`,
@@ -131,19 +131,19 @@ export const updateMyOrganization = (
}; };
export const getUpdateMyOrganizationMutationOptions = < export const getUpdateMyOrganizationMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof updateMyOrganization>>, Awaited<ReturnType<typeof updateMyOrganization>>,
TError, TError,
{ data: BodyType<TypesOrganizationDTO> }, { data: TypesOrganizationDTO },
TContext TContext
>; >;
}): UseMutationOptions< }): UseMutationOptions<
Awaited<ReturnType<typeof updateMyOrganization>>, Awaited<ReturnType<typeof updateMyOrganization>>,
TError, TError,
{ data: BodyType<TypesOrganizationDTO> }, { data: TypesOrganizationDTO },
TContext TContext
> => { > => {
const mutationKey = ['updateMyOrganization']; const mutationKey = ['updateMyOrganization'];
@@ -157,7 +157,7 @@ export const getUpdateMyOrganizationMutationOptions = <
const mutationFn: MutationFunction< const mutationFn: MutationFunction<
Awaited<ReturnType<typeof updateMyOrganization>>, Awaited<ReturnType<typeof updateMyOrganization>>,
{ data: BodyType<TypesOrganizationDTO> } { data: TypesOrganizationDTO }
> = (props) => { > = (props) => {
const { data } = props ?? {}; const { data } = props ?? {};
@@ -170,26 +170,26 @@ export const getUpdateMyOrganizationMutationOptions = <
export type UpdateMyOrganizationMutationResult = NonNullable< export type UpdateMyOrganizationMutationResult = NonNullable<
Awaited<ReturnType<typeof updateMyOrganization>> Awaited<ReturnType<typeof updateMyOrganization>>
>; >;
export type UpdateMyOrganizationMutationBody = BodyType<TypesOrganizationDTO>; export type UpdateMyOrganizationMutationBody = TypesOrganizationDTO;
export type UpdateMyOrganizationMutationError = ErrorType<RenderErrorResponseDTO>; export type UpdateMyOrganizationMutationError = RenderErrorResponseDTO;
/** /**
* @summary Update my organization * @summary Update my organization
*/ */
export const useUpdateMyOrganization = < export const useUpdateMyOrganization = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof updateMyOrganization>>, Awaited<ReturnType<typeof updateMyOrganization>>,
TError, TError,
{ data: BodyType<TypesOrganizationDTO> }, { data: TypesOrganizationDTO },
TContext TContext
>; >;
}): UseMutationResult< }): UseMutationResult<
Awaited<ReturnType<typeof updateMyOrganization>>, Awaited<ReturnType<typeof updateMyOrganization>>,
TError, TError,
{ data: BodyType<TypesOrganizationDTO> }, { data: TypesOrganizationDTO },
TContext TContext
> => { > => {
const mutationOptions = getUpdateMyOrganizationMutationOptions(options); const mutationOptions = getUpdateMyOrganizationMutationOptions(options);

View File

@@ -4,6 +4,7 @@
* * regenerate with 'yarn generate:api' * * regenerate with 'yarn generate:api'
* SigNoz * SigNoz
*/ */
import { useMutation, useQuery } from 'react-query';
import type { import type {
InvalidateOptions, InvalidateOptions,
MutationFunction, MutationFunction,
@@ -15,10 +16,7 @@ import type {
UseQueryOptions, UseQueryOptions,
UseQueryResult, UseQueryResult,
} from 'react-query'; } from 'react-query';
import { useMutation, useQuery } from 'react-query';
import type { BodyType, ErrorType } from '../../../generatedAPIInstance';
import { GeneratedAPIInstance } from '../../../generatedAPIInstance';
import type { import type {
GetOrgPreference200, GetOrgPreference200,
GetOrgPreferencePathParameters, GetOrgPreferencePathParameters,
@@ -32,6 +30,8 @@ import type {
UpdateUserPreferencePathParameters, UpdateUserPreferencePathParameters,
} from '../sigNoz.schemas'; } from '../sigNoz.schemas';
import { GeneratedAPIInstance } from '../../../index';
type AwaitedInput<T> = PromiseLike<T> | T; type AwaitedInput<T> = PromiseLike<T> | T;
type Awaited<O> = O extends AwaitedInput<infer T> ? T : never; type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
@@ -49,12 +49,12 @@ export const listOrgPreferences = (signal?: AbortSignal) => {
}; };
export const getListOrgPreferencesQueryKey = () => { export const getListOrgPreferencesQueryKey = () => {
return [`/api/v1/org/preferences`] as const; return ['listOrgPreferences'] as const;
}; };
export const getListOrgPreferencesQueryOptions = < export const getListOrgPreferencesQueryOptions = <
TData = Awaited<ReturnType<typeof listOrgPreferences>>, TData = Awaited<ReturnType<typeof listOrgPreferences>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof listOrgPreferences>>, Awaited<ReturnType<typeof listOrgPreferences>>,
@@ -80,7 +80,7 @@ export const getListOrgPreferencesQueryOptions = <
export type ListOrgPreferencesQueryResult = NonNullable< export type ListOrgPreferencesQueryResult = NonNullable<
Awaited<ReturnType<typeof listOrgPreferences>> Awaited<ReturnType<typeof listOrgPreferences>>
>; >;
export type ListOrgPreferencesQueryError = ErrorType<RenderErrorResponseDTO>; export type ListOrgPreferencesQueryError = RenderErrorResponseDTO;
/** /**
* @summary List org preferences * @summary List org preferences
@@ -88,7 +88,7 @@ export type ListOrgPreferencesQueryError = ErrorType<RenderErrorResponseDTO>;
export function useListOrgPreferences< export function useListOrgPreferences<
TData = Awaited<ReturnType<typeof listOrgPreferences>>, TData = Awaited<ReturnType<typeof listOrgPreferences>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof listOrgPreferences>>, Awaited<ReturnType<typeof listOrgPreferences>>,
@@ -140,12 +140,12 @@ export const getOrgPreference = (
export const getGetOrgPreferenceQueryKey = ({ export const getGetOrgPreferenceQueryKey = ({
name, name,
}: GetOrgPreferencePathParameters) => { }: GetOrgPreferencePathParameters) => {
return [`/api/v1/org/preferences/${name}`] as const; return ['getOrgPreference'] as const;
}; };
export const getGetOrgPreferenceQueryOptions = < export const getGetOrgPreferenceQueryOptions = <
TData = Awaited<ReturnType<typeof getOrgPreference>>, TData = Awaited<ReturnType<typeof getOrgPreference>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(
{ name }: GetOrgPreferencePathParameters, { name }: GetOrgPreferencePathParameters,
options?: { options?: {
@@ -180,7 +180,7 @@ export const getGetOrgPreferenceQueryOptions = <
export type GetOrgPreferenceQueryResult = NonNullable< export type GetOrgPreferenceQueryResult = NonNullable<
Awaited<ReturnType<typeof getOrgPreference>> Awaited<ReturnType<typeof getOrgPreference>>
>; >;
export type GetOrgPreferenceQueryError = ErrorType<RenderErrorResponseDTO>; export type GetOrgPreferenceQueryError = RenderErrorResponseDTO;
/** /**
* @summary Get org preference * @summary Get org preference
@@ -188,7 +188,7 @@ export type GetOrgPreferenceQueryError = ErrorType<RenderErrorResponseDTO>;
export function useGetOrgPreference< export function useGetOrgPreference<
TData = Awaited<ReturnType<typeof getOrgPreference>>, TData = Awaited<ReturnType<typeof getOrgPreference>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(
{ name }: GetOrgPreferencePathParameters, { name }: GetOrgPreferencePathParameters,
options?: { options?: {
@@ -232,7 +232,7 @@ export const invalidateGetOrgPreference = async (
*/ */
export const updateOrgPreference = ( export const updateOrgPreference = (
{ name }: UpdateOrgPreferencePathParameters, { name }: UpdateOrgPreferencePathParameters,
preferencetypesUpdatablePreferenceDTO: BodyType<PreferencetypesUpdatablePreferenceDTO>, preferencetypesUpdatablePreferenceDTO: PreferencetypesUpdatablePreferenceDTO,
) => { ) => {
return GeneratedAPIInstance<void>({ return GeneratedAPIInstance<void>({
url: `/api/v1/org/preferences/${name}`, url: `/api/v1/org/preferences/${name}`,
@@ -243,7 +243,7 @@ export const updateOrgPreference = (
}; };
export const getUpdateOrgPreferenceMutationOptions = < export const getUpdateOrgPreferenceMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -251,7 +251,7 @@ export const getUpdateOrgPreferenceMutationOptions = <
TError, TError,
{ {
pathParams: UpdateOrgPreferencePathParameters; pathParams: UpdateOrgPreferencePathParameters;
data: BodyType<PreferencetypesUpdatablePreferenceDTO>; data: PreferencetypesUpdatablePreferenceDTO;
}, },
TContext TContext
>; >;
@@ -260,7 +260,7 @@ export const getUpdateOrgPreferenceMutationOptions = <
TError, TError,
{ {
pathParams: UpdateOrgPreferencePathParameters; pathParams: UpdateOrgPreferencePathParameters;
data: BodyType<PreferencetypesUpdatablePreferenceDTO>; data: PreferencetypesUpdatablePreferenceDTO;
}, },
TContext TContext
> => { > => {
@@ -277,7 +277,7 @@ export const getUpdateOrgPreferenceMutationOptions = <
Awaited<ReturnType<typeof updateOrgPreference>>, Awaited<ReturnType<typeof updateOrgPreference>>,
{ {
pathParams: UpdateOrgPreferencePathParameters; pathParams: UpdateOrgPreferencePathParameters;
data: BodyType<PreferencetypesUpdatablePreferenceDTO>; data: PreferencetypesUpdatablePreferenceDTO;
} }
> = (props) => { > = (props) => {
const { pathParams, data } = props ?? {}; const { pathParams, data } = props ?? {};
@@ -291,14 +291,14 @@ export const getUpdateOrgPreferenceMutationOptions = <
export type UpdateOrgPreferenceMutationResult = NonNullable< export type UpdateOrgPreferenceMutationResult = NonNullable<
Awaited<ReturnType<typeof updateOrgPreference>> Awaited<ReturnType<typeof updateOrgPreference>>
>; >;
export type UpdateOrgPreferenceMutationBody = BodyType<PreferencetypesUpdatablePreferenceDTO>; export type UpdateOrgPreferenceMutationBody = PreferencetypesUpdatablePreferenceDTO;
export type UpdateOrgPreferenceMutationError = ErrorType<RenderErrorResponseDTO>; export type UpdateOrgPreferenceMutationError = RenderErrorResponseDTO;
/** /**
* @summary Update org preference * @summary Update org preference
*/ */
export const useUpdateOrgPreference = < export const useUpdateOrgPreference = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -306,7 +306,7 @@ export const useUpdateOrgPreference = <
TError, TError,
{ {
pathParams: UpdateOrgPreferencePathParameters; pathParams: UpdateOrgPreferencePathParameters;
data: BodyType<PreferencetypesUpdatablePreferenceDTO>; data: PreferencetypesUpdatablePreferenceDTO;
}, },
TContext TContext
>; >;
@@ -315,7 +315,7 @@ export const useUpdateOrgPreference = <
TError, TError,
{ {
pathParams: UpdateOrgPreferencePathParameters; pathParams: UpdateOrgPreferencePathParameters;
data: BodyType<PreferencetypesUpdatablePreferenceDTO>; data: PreferencetypesUpdatablePreferenceDTO;
}, },
TContext TContext
> => { > => {
@@ -336,12 +336,12 @@ export const listUserPreferences = (signal?: AbortSignal) => {
}; };
export const getListUserPreferencesQueryKey = () => { export const getListUserPreferencesQueryKey = () => {
return [`/api/v1/user/preferences`] as const; return ['listUserPreferences'] as const;
}; };
export const getListUserPreferencesQueryOptions = < export const getListUserPreferencesQueryOptions = <
TData = Awaited<ReturnType<typeof listUserPreferences>>, TData = Awaited<ReturnType<typeof listUserPreferences>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof listUserPreferences>>, Awaited<ReturnType<typeof listUserPreferences>>,
@@ -367,7 +367,7 @@ export const getListUserPreferencesQueryOptions = <
export type ListUserPreferencesQueryResult = NonNullable< export type ListUserPreferencesQueryResult = NonNullable<
Awaited<ReturnType<typeof listUserPreferences>> Awaited<ReturnType<typeof listUserPreferences>>
>; >;
export type ListUserPreferencesQueryError = ErrorType<RenderErrorResponseDTO>; export type ListUserPreferencesQueryError = RenderErrorResponseDTO;
/** /**
* @summary List user preferences * @summary List user preferences
@@ -375,7 +375,7 @@ export type ListUserPreferencesQueryError = ErrorType<RenderErrorResponseDTO>;
export function useListUserPreferences< export function useListUserPreferences<
TData = Awaited<ReturnType<typeof listUserPreferences>>, TData = Awaited<ReturnType<typeof listUserPreferences>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof listUserPreferences>>, Awaited<ReturnType<typeof listUserPreferences>>,
@@ -427,12 +427,12 @@ export const getUserPreference = (
export const getGetUserPreferenceQueryKey = ({ export const getGetUserPreferenceQueryKey = ({
name, name,
}: GetUserPreferencePathParameters) => { }: GetUserPreferencePathParameters) => {
return [`/api/v1/user/preferences/${name}`] as const; return ['getUserPreference'] as const;
}; };
export const getGetUserPreferenceQueryOptions = < export const getGetUserPreferenceQueryOptions = <
TData = Awaited<ReturnType<typeof getUserPreference>>, TData = Awaited<ReturnType<typeof getUserPreference>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(
{ name }: GetUserPreferencePathParameters, { name }: GetUserPreferencePathParameters,
options?: { options?: {
@@ -467,7 +467,7 @@ export const getGetUserPreferenceQueryOptions = <
export type GetUserPreferenceQueryResult = NonNullable< export type GetUserPreferenceQueryResult = NonNullable<
Awaited<ReturnType<typeof getUserPreference>> Awaited<ReturnType<typeof getUserPreference>>
>; >;
export type GetUserPreferenceQueryError = ErrorType<RenderErrorResponseDTO>; export type GetUserPreferenceQueryError = RenderErrorResponseDTO;
/** /**
* @summary Get user preference * @summary Get user preference
@@ -475,7 +475,7 @@ export type GetUserPreferenceQueryError = ErrorType<RenderErrorResponseDTO>;
export function useGetUserPreference< export function useGetUserPreference<
TData = Awaited<ReturnType<typeof getUserPreference>>, TData = Awaited<ReturnType<typeof getUserPreference>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(
{ name }: GetUserPreferencePathParameters, { name }: GetUserPreferencePathParameters,
options?: { options?: {
@@ -519,7 +519,7 @@ export const invalidateGetUserPreference = async (
*/ */
export const updateUserPreference = ( export const updateUserPreference = (
{ name }: UpdateUserPreferencePathParameters, { name }: UpdateUserPreferencePathParameters,
preferencetypesUpdatablePreferenceDTO: BodyType<PreferencetypesUpdatablePreferenceDTO>, preferencetypesUpdatablePreferenceDTO: PreferencetypesUpdatablePreferenceDTO,
) => { ) => {
return GeneratedAPIInstance<void>({ return GeneratedAPIInstance<void>({
url: `/api/v1/user/preferences/${name}`, url: `/api/v1/user/preferences/${name}`,
@@ -530,7 +530,7 @@ export const updateUserPreference = (
}; };
export const getUpdateUserPreferenceMutationOptions = < export const getUpdateUserPreferenceMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -538,7 +538,7 @@ export const getUpdateUserPreferenceMutationOptions = <
TError, TError,
{ {
pathParams: UpdateUserPreferencePathParameters; pathParams: UpdateUserPreferencePathParameters;
data: BodyType<PreferencetypesUpdatablePreferenceDTO>; data: PreferencetypesUpdatablePreferenceDTO;
}, },
TContext TContext
>; >;
@@ -547,7 +547,7 @@ export const getUpdateUserPreferenceMutationOptions = <
TError, TError,
{ {
pathParams: UpdateUserPreferencePathParameters; pathParams: UpdateUserPreferencePathParameters;
data: BodyType<PreferencetypesUpdatablePreferenceDTO>; data: PreferencetypesUpdatablePreferenceDTO;
}, },
TContext TContext
> => { > => {
@@ -564,7 +564,7 @@ export const getUpdateUserPreferenceMutationOptions = <
Awaited<ReturnType<typeof updateUserPreference>>, Awaited<ReturnType<typeof updateUserPreference>>,
{ {
pathParams: UpdateUserPreferencePathParameters; pathParams: UpdateUserPreferencePathParameters;
data: BodyType<PreferencetypesUpdatablePreferenceDTO>; data: PreferencetypesUpdatablePreferenceDTO;
} }
> = (props) => { > = (props) => {
const { pathParams, data } = props ?? {}; const { pathParams, data } = props ?? {};
@@ -578,14 +578,14 @@ export const getUpdateUserPreferenceMutationOptions = <
export type UpdateUserPreferenceMutationResult = NonNullable< export type UpdateUserPreferenceMutationResult = NonNullable<
Awaited<ReturnType<typeof updateUserPreference>> Awaited<ReturnType<typeof updateUserPreference>>
>; >;
export type UpdateUserPreferenceMutationBody = BodyType<PreferencetypesUpdatablePreferenceDTO>; export type UpdateUserPreferenceMutationBody = PreferencetypesUpdatablePreferenceDTO;
export type UpdateUserPreferenceMutationError = ErrorType<RenderErrorResponseDTO>; export type UpdateUserPreferenceMutationError = RenderErrorResponseDTO;
/** /**
* @summary Update user preference * @summary Update user preference
*/ */
export const useUpdateUserPreference = < export const useUpdateUserPreference = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -593,7 +593,7 @@ export const useUpdateUserPreference = <
TError, TError,
{ {
pathParams: UpdateUserPreferencePathParameters; pathParams: UpdateUserPreferencePathParameters;
data: BodyType<PreferencetypesUpdatablePreferenceDTO>; data: PreferencetypesUpdatablePreferenceDTO;
}, },
TContext TContext
>; >;
@@ -602,7 +602,7 @@ export const useUpdateUserPreference = <
TError, TError,
{ {
pathParams: UpdateUserPreferencePathParameters; pathParams: UpdateUserPreferencePathParameters;
data: BodyType<PreferencetypesUpdatablePreferenceDTO>; data: PreferencetypesUpdatablePreferenceDTO;
}, },
TContext TContext
> => { > => {

View File

@@ -1,192 +0,0 @@
/**
* ! Do not edit manually
* * The file has been auto-generated using Orval for SigNoz
* * regenerate with 'yarn generate:api'
* SigNoz
*/
import type {
MutationFunction,
UseMutationOptions,
UseMutationResult,
} from 'react-query';
import { useMutation } from 'react-query';
import type { BodyType, ErrorType } from '../../../generatedAPIInstance';
import { GeneratedAPIInstance } from '../../../generatedAPIInstance';
import type {
Querybuildertypesv5QueryRangeRequestDTO,
QueryRangeV5200,
RenderErrorResponseDTO,
ReplaceVariables200,
} from '../sigNoz.schemas';
type AwaitedInput<T> = PromiseLike<T> | T;
type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
/**
* Execute a composite query over a time range. Supports builder queries (traces, logs, metrics), formulas, trace operators, PromQL, and ClickHouse SQL.
* @summary Query range
*/
export const queryRangeV5 = (
querybuildertypesv5QueryRangeRequestDTO: BodyType<Querybuildertypesv5QueryRangeRequestDTO>,
signal?: AbortSignal,
) => {
return GeneratedAPIInstance<QueryRangeV5200>({
url: `/api/v5/query_range`,
method: 'POST',
headers: { 'Content-Type': 'application/json' },
data: querybuildertypesv5QueryRangeRequestDTO,
signal,
});
};
export const getQueryRangeV5MutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof queryRangeV5>>,
TError,
{ data: BodyType<Querybuildertypesv5QueryRangeRequestDTO> },
TContext
>;
}): UseMutationOptions<
Awaited<ReturnType<typeof queryRangeV5>>,
TError,
{ data: BodyType<Querybuildertypesv5QueryRangeRequestDTO> },
TContext
> => {
const mutationKey = ['queryRangeV5'];
const { mutation: mutationOptions } = options
? options.mutation &&
'mutationKey' in options.mutation &&
options.mutation.mutationKey
? options
: { ...options, mutation: { ...options.mutation, mutationKey } }
: { mutation: { mutationKey } };
const mutationFn: MutationFunction<
Awaited<ReturnType<typeof queryRangeV5>>,
{ data: BodyType<Querybuildertypesv5QueryRangeRequestDTO> }
> = (props) => {
const { data } = props ?? {};
return queryRangeV5(data);
};
return { mutationFn, ...mutationOptions };
};
export type QueryRangeV5MutationResult = NonNullable<
Awaited<ReturnType<typeof queryRangeV5>>
>;
export type QueryRangeV5MutationBody = BodyType<Querybuildertypesv5QueryRangeRequestDTO>;
export type QueryRangeV5MutationError = ErrorType<RenderErrorResponseDTO>;
/**
* @summary Query range
*/
export const useQueryRangeV5 = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof queryRangeV5>>,
TError,
{ data: BodyType<Querybuildertypesv5QueryRangeRequestDTO> },
TContext
>;
}): UseMutationResult<
Awaited<ReturnType<typeof queryRangeV5>>,
TError,
{ data: BodyType<Querybuildertypesv5QueryRangeRequestDTO> },
TContext
> => {
const mutationOptions = getQueryRangeV5MutationOptions(options);
return useMutation(mutationOptions);
};
/**
* Replace variables in a query
* @summary Replace variables
*/
export const replaceVariables = (
querybuildertypesv5QueryRangeRequestDTO: BodyType<Querybuildertypesv5QueryRangeRequestDTO>,
signal?: AbortSignal,
) => {
return GeneratedAPIInstance<ReplaceVariables200>({
url: `/api/v5/substitute_vars`,
method: 'POST',
headers: { 'Content-Type': 'application/json' },
data: querybuildertypesv5QueryRangeRequestDTO,
signal,
});
};
export const getReplaceVariablesMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof replaceVariables>>,
TError,
{ data: BodyType<Querybuildertypesv5QueryRangeRequestDTO> },
TContext
>;
}): UseMutationOptions<
Awaited<ReturnType<typeof replaceVariables>>,
TError,
{ data: BodyType<Querybuildertypesv5QueryRangeRequestDTO> },
TContext
> => {
const mutationKey = ['replaceVariables'];
const { mutation: mutationOptions } = options
? options.mutation &&
'mutationKey' in options.mutation &&
options.mutation.mutationKey
? options
: { ...options, mutation: { ...options.mutation, mutationKey } }
: { mutation: { mutationKey } };
const mutationFn: MutationFunction<
Awaited<ReturnType<typeof replaceVariables>>,
{ data: BodyType<Querybuildertypesv5QueryRangeRequestDTO> }
> = (props) => {
const { data } = props ?? {};
return replaceVariables(data);
};
return { mutationFn, ...mutationOptions };
};
export type ReplaceVariablesMutationResult = NonNullable<
Awaited<ReturnType<typeof replaceVariables>>
>;
export type ReplaceVariablesMutationBody = BodyType<Querybuildertypesv5QueryRangeRequestDTO>;
export type ReplaceVariablesMutationError = ErrorType<RenderErrorResponseDTO>;
/**
* @summary Replace variables
*/
export const useReplaceVariables = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof replaceVariables>>,
TError,
{ data: BodyType<Querybuildertypesv5QueryRangeRequestDTO> },
TContext
>;
}): UseMutationResult<
Awaited<ReturnType<typeof replaceVariables>>,
TError,
{ data: BodyType<Querybuildertypesv5QueryRangeRequestDTO> },
TContext
> => {
const mutationOptions = getReplaceVariablesMutationOptions(options);
return useMutation(mutationOptions);
};

View File

@@ -1,667 +0,0 @@
/**
* ! Do not edit manually
* * The file has been auto-generated using Orval for SigNoz
* * regenerate with 'yarn generate:api'
* SigNoz
*/
import type {
InvalidateOptions,
MutationFunction,
QueryClient,
QueryFunction,
QueryKey,
UseMutationOptions,
UseMutationResult,
UseQueryOptions,
UseQueryResult,
} from 'react-query';
import { useMutation, useQuery } from 'react-query';
import type { BodyType, ErrorType } from '../../../generatedAPIInstance';
import { GeneratedAPIInstance } from '../../../generatedAPIInstance';
import type {
AuthtypesPatchableObjectsDTO,
CreateRole201,
DeleteRolePathParameters,
GetObjects200,
GetObjectsPathParameters,
GetRole200,
GetRolePathParameters,
ListRoles200,
PatchObjectsPathParameters,
PatchRolePathParameters,
RenderErrorResponseDTO,
RoletypesPatchableRoleDTO,
RoletypesPostableRoleDTO,
} from '../sigNoz.schemas';
type AwaitedInput<T> = PromiseLike<T> | T;
type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
/**
* This endpoint lists all roles
* @summary List roles
*/
export const listRoles = (signal?: AbortSignal) => {
return GeneratedAPIInstance<ListRoles200>({
url: `/api/v1/roles`,
method: 'GET',
signal,
});
};
export const getListRolesQueryKey = () => {
return [`/api/v1/roles`] as const;
};
export const getListRolesQueryOptions = <
TData = Awaited<ReturnType<typeof listRoles>>,
TError = ErrorType<RenderErrorResponseDTO>
>(options?: {
query?: UseQueryOptions<Awaited<ReturnType<typeof listRoles>>, TError, TData>;
}) => {
const { query: queryOptions } = options ?? {};
const queryKey = queryOptions?.queryKey ?? getListRolesQueryKey();
const queryFn: QueryFunction<Awaited<ReturnType<typeof listRoles>>> = ({
signal,
}) => listRoles(signal);
return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<
Awaited<ReturnType<typeof listRoles>>,
TError,
TData
> & { queryKey: QueryKey };
};
export type ListRolesQueryResult = NonNullable<
Awaited<ReturnType<typeof listRoles>>
>;
export type ListRolesQueryError = ErrorType<RenderErrorResponseDTO>;
/**
* @summary List roles
*/
export function useListRoles<
TData = Awaited<ReturnType<typeof listRoles>>,
TError = ErrorType<RenderErrorResponseDTO>
>(options?: {
query?: UseQueryOptions<Awaited<ReturnType<typeof listRoles>>, TError, TData>;
}): UseQueryResult<TData, TError> & { queryKey: QueryKey } {
const queryOptions = getListRolesQueryOptions(options);
const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {
queryKey: QueryKey;
};
query.queryKey = queryOptions.queryKey;
return query;
}
/**
* @summary List roles
*/
export const invalidateListRoles = async (
queryClient: QueryClient,
options?: InvalidateOptions,
): Promise<QueryClient> => {
await queryClient.invalidateQueries(
{ queryKey: getListRolesQueryKey() },
options,
);
return queryClient;
};
/**
* This endpoint creates a role
* @summary Create role
*/
export const createRole = (
roletypesPostableRoleDTO: BodyType<RoletypesPostableRoleDTO>,
signal?: AbortSignal,
) => {
return GeneratedAPIInstance<CreateRole201>({
url: `/api/v1/roles`,
method: 'POST',
headers: { 'Content-Type': 'application/json' },
data: roletypesPostableRoleDTO,
signal,
});
};
export const getCreateRoleMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof createRole>>,
TError,
{ data: BodyType<RoletypesPostableRoleDTO> },
TContext
>;
}): UseMutationOptions<
Awaited<ReturnType<typeof createRole>>,
TError,
{ data: BodyType<RoletypesPostableRoleDTO> },
TContext
> => {
const mutationKey = ['createRole'];
const { mutation: mutationOptions } = options
? options.mutation &&
'mutationKey' in options.mutation &&
options.mutation.mutationKey
? options
: { ...options, mutation: { ...options.mutation, mutationKey } }
: { mutation: { mutationKey } };
const mutationFn: MutationFunction<
Awaited<ReturnType<typeof createRole>>,
{ data: BodyType<RoletypesPostableRoleDTO> }
> = (props) => {
const { data } = props ?? {};
return createRole(data);
};
return { mutationFn, ...mutationOptions };
};
export type CreateRoleMutationResult = NonNullable<
Awaited<ReturnType<typeof createRole>>
>;
export type CreateRoleMutationBody = BodyType<RoletypesPostableRoleDTO>;
export type CreateRoleMutationError = ErrorType<RenderErrorResponseDTO>;
/**
* @summary Create role
*/
export const useCreateRole = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof createRole>>,
TError,
{ data: BodyType<RoletypesPostableRoleDTO> },
TContext
>;
}): UseMutationResult<
Awaited<ReturnType<typeof createRole>>,
TError,
{ data: BodyType<RoletypesPostableRoleDTO> },
TContext
> => {
const mutationOptions = getCreateRoleMutationOptions(options);
return useMutation(mutationOptions);
};
/**
* This endpoint deletes a role
* @summary Delete role
*/
export const deleteRole = ({ id }: DeleteRolePathParameters) => {
return GeneratedAPIInstance<string>({
url: `/api/v1/roles/${id}`,
method: 'DELETE',
});
};
export const getDeleteRoleMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof deleteRole>>,
TError,
{ pathParams: DeleteRolePathParameters },
TContext
>;
}): UseMutationOptions<
Awaited<ReturnType<typeof deleteRole>>,
TError,
{ pathParams: DeleteRolePathParameters },
TContext
> => {
const mutationKey = ['deleteRole'];
const { mutation: mutationOptions } = options
? options.mutation &&
'mutationKey' in options.mutation &&
options.mutation.mutationKey
? options
: { ...options, mutation: { ...options.mutation, mutationKey } }
: { mutation: { mutationKey } };
const mutationFn: MutationFunction<
Awaited<ReturnType<typeof deleteRole>>,
{ pathParams: DeleteRolePathParameters }
> = (props) => {
const { pathParams } = props ?? {};
return deleteRole(pathParams);
};
return { mutationFn, ...mutationOptions };
};
export type DeleteRoleMutationResult = NonNullable<
Awaited<ReturnType<typeof deleteRole>>
>;
export type DeleteRoleMutationError = ErrorType<RenderErrorResponseDTO>;
/**
* @summary Delete role
*/
export const useDeleteRole = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof deleteRole>>,
TError,
{ pathParams: DeleteRolePathParameters },
TContext
>;
}): UseMutationResult<
Awaited<ReturnType<typeof deleteRole>>,
TError,
{ pathParams: DeleteRolePathParameters },
TContext
> => {
const mutationOptions = getDeleteRoleMutationOptions(options);
return useMutation(mutationOptions);
};
/**
* This endpoint gets a role
* @summary Get role
*/
export const getRole = (
{ id }: GetRolePathParameters,
signal?: AbortSignal,
) => {
return GeneratedAPIInstance<GetRole200>({
url: `/api/v1/roles/${id}`,
method: 'GET',
signal,
});
};
export const getGetRoleQueryKey = ({ id }: GetRolePathParameters) => {
return [`/api/v1/roles/${id}`] as const;
};
export const getGetRoleQueryOptions = <
TData = Awaited<ReturnType<typeof getRole>>,
TError = ErrorType<RenderErrorResponseDTO>
>(
{ id }: GetRolePathParameters,
options?: {
query?: UseQueryOptions<Awaited<ReturnType<typeof getRole>>, TError, TData>;
},
) => {
const { query: queryOptions } = options ?? {};
const queryKey = queryOptions?.queryKey ?? getGetRoleQueryKey({ id });
const queryFn: QueryFunction<Awaited<ReturnType<typeof getRole>>> = ({
signal,
}) => getRole({ id }, signal);
return {
queryKey,
queryFn,
enabled: !!id,
...queryOptions,
} as UseQueryOptions<Awaited<ReturnType<typeof getRole>>, TError, TData> & {
queryKey: QueryKey;
};
};
export type GetRoleQueryResult = NonNullable<
Awaited<ReturnType<typeof getRole>>
>;
export type GetRoleQueryError = ErrorType<RenderErrorResponseDTO>;
/**
* @summary Get role
*/
export function useGetRole<
TData = Awaited<ReturnType<typeof getRole>>,
TError = ErrorType<RenderErrorResponseDTO>
>(
{ id }: GetRolePathParameters,
options?: {
query?: UseQueryOptions<Awaited<ReturnType<typeof getRole>>, TError, TData>;
},
): UseQueryResult<TData, TError> & { queryKey: QueryKey } {
const queryOptions = getGetRoleQueryOptions({ id }, options);
const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {
queryKey: QueryKey;
};
query.queryKey = queryOptions.queryKey;
return query;
}
/**
* @summary Get role
*/
export const invalidateGetRole = async (
queryClient: QueryClient,
{ id }: GetRolePathParameters,
options?: InvalidateOptions,
): Promise<QueryClient> => {
await queryClient.invalidateQueries(
{ queryKey: getGetRoleQueryKey({ id }) },
options,
);
return queryClient;
};
/**
* This endpoint patches a role
* @summary Patch role
*/
export const patchRole = (
{ id }: PatchRolePathParameters,
roletypesPatchableRoleDTO: BodyType<RoletypesPatchableRoleDTO>,
) => {
return GeneratedAPIInstance<string>({
url: `/api/v1/roles/${id}`,
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
data: roletypesPatchableRoleDTO,
});
};
export const getPatchRoleMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof patchRole>>,
TError,
{
pathParams: PatchRolePathParameters;
data: BodyType<RoletypesPatchableRoleDTO>;
},
TContext
>;
}): UseMutationOptions<
Awaited<ReturnType<typeof patchRole>>,
TError,
{
pathParams: PatchRolePathParameters;
data: BodyType<RoletypesPatchableRoleDTO>;
},
TContext
> => {
const mutationKey = ['patchRole'];
const { mutation: mutationOptions } = options
? options.mutation &&
'mutationKey' in options.mutation &&
options.mutation.mutationKey
? options
: { ...options, mutation: { ...options.mutation, mutationKey } }
: { mutation: { mutationKey } };
const mutationFn: MutationFunction<
Awaited<ReturnType<typeof patchRole>>,
{
pathParams: PatchRolePathParameters;
data: BodyType<RoletypesPatchableRoleDTO>;
}
> = (props) => {
const { pathParams, data } = props ?? {};
return patchRole(pathParams, data);
};
return { mutationFn, ...mutationOptions };
};
export type PatchRoleMutationResult = NonNullable<
Awaited<ReturnType<typeof patchRole>>
>;
export type PatchRoleMutationBody = BodyType<RoletypesPatchableRoleDTO>;
export type PatchRoleMutationError = ErrorType<RenderErrorResponseDTO>;
/**
* @summary Patch role
*/
export const usePatchRole = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof patchRole>>,
TError,
{
pathParams: PatchRolePathParameters;
data: BodyType<RoletypesPatchableRoleDTO>;
},
TContext
>;
}): UseMutationResult<
Awaited<ReturnType<typeof patchRole>>,
TError,
{
pathParams: PatchRolePathParameters;
data: BodyType<RoletypesPatchableRoleDTO>;
},
TContext
> => {
const mutationOptions = getPatchRoleMutationOptions(options);
return useMutation(mutationOptions);
};
/**
* Gets all objects connected to the specified role via a given relation type
* @summary Get objects for a role by relation
*/
export const getObjects = (
{ id, relation }: GetObjectsPathParameters,
signal?: AbortSignal,
) => {
return GeneratedAPIInstance<GetObjects200>({
url: `/api/v1/roles/${id}/relation/${relation}/objects`,
method: 'GET',
signal,
});
};
export const getGetObjectsQueryKey = ({
id,
relation,
}: GetObjectsPathParameters) => {
return [`/api/v1/roles/${id}/relation/${relation}/objects`] as const;
};
export const getGetObjectsQueryOptions = <
TData = Awaited<ReturnType<typeof getObjects>>,
TError = ErrorType<RenderErrorResponseDTO>
>(
{ id, relation }: GetObjectsPathParameters,
options?: {
query?: UseQueryOptions<
Awaited<ReturnType<typeof getObjects>>,
TError,
TData
>;
},
) => {
const { query: queryOptions } = options ?? {};
const queryKey =
queryOptions?.queryKey ?? getGetObjectsQueryKey({ id, relation });
const queryFn: QueryFunction<Awaited<ReturnType<typeof getObjects>>> = ({
signal,
}) => getObjects({ id, relation }, signal);
return {
queryKey,
queryFn,
enabled: !!(id && relation),
...queryOptions,
} as UseQueryOptions<Awaited<ReturnType<typeof getObjects>>, TError, TData> & {
queryKey: QueryKey;
};
};
export type GetObjectsQueryResult = NonNullable<
Awaited<ReturnType<typeof getObjects>>
>;
export type GetObjectsQueryError = ErrorType<RenderErrorResponseDTO>;
/**
* @summary Get objects for a role by relation
*/
export function useGetObjects<
TData = Awaited<ReturnType<typeof getObjects>>,
TError = ErrorType<RenderErrorResponseDTO>
>(
{ id, relation }: GetObjectsPathParameters,
options?: {
query?: UseQueryOptions<
Awaited<ReturnType<typeof getObjects>>,
TError,
TData
>;
},
): UseQueryResult<TData, TError> & { queryKey: QueryKey } {
const queryOptions = getGetObjectsQueryOptions({ id, relation }, options);
const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {
queryKey: QueryKey;
};
query.queryKey = queryOptions.queryKey;
return query;
}
/**
* @summary Get objects for a role by relation
*/
export const invalidateGetObjects = async (
queryClient: QueryClient,
{ id, relation }: GetObjectsPathParameters,
options?: InvalidateOptions,
): Promise<QueryClient> => {
await queryClient.invalidateQueries(
{ queryKey: getGetObjectsQueryKey({ id, relation }) },
options,
);
return queryClient;
};
/**
* Patches the objects connected to the specified role via a given relation type
* @summary Patch objects for a role by relation
*/
export const patchObjects = (
{ id, relation }: PatchObjectsPathParameters,
authtypesPatchableObjectsDTO: BodyType<AuthtypesPatchableObjectsDTO>,
) => {
return GeneratedAPIInstance<string>({
url: `/api/v1/roles/${id}/relation/${relation}/objects`,
method: 'PATCH',
headers: { 'Content-Type': 'application/json' },
data: authtypesPatchableObjectsDTO,
});
};
export const getPatchObjectsMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof patchObjects>>,
TError,
{
pathParams: PatchObjectsPathParameters;
data: BodyType<AuthtypesPatchableObjectsDTO>;
},
TContext
>;
}): UseMutationOptions<
Awaited<ReturnType<typeof patchObjects>>,
TError,
{
pathParams: PatchObjectsPathParameters;
data: BodyType<AuthtypesPatchableObjectsDTO>;
},
TContext
> => {
const mutationKey = ['patchObjects'];
const { mutation: mutationOptions } = options
? options.mutation &&
'mutationKey' in options.mutation &&
options.mutation.mutationKey
? options
: { ...options, mutation: { ...options.mutation, mutationKey } }
: { mutation: { mutationKey } };
const mutationFn: MutationFunction<
Awaited<ReturnType<typeof patchObjects>>,
{
pathParams: PatchObjectsPathParameters;
data: BodyType<AuthtypesPatchableObjectsDTO>;
}
> = (props) => {
const { pathParams, data } = props ?? {};
return patchObjects(pathParams, data);
};
return { mutationFn, ...mutationOptions };
};
export type PatchObjectsMutationResult = NonNullable<
Awaited<ReturnType<typeof patchObjects>>
>;
export type PatchObjectsMutationBody = BodyType<AuthtypesPatchableObjectsDTO>;
export type PatchObjectsMutationError = ErrorType<RenderErrorResponseDTO>;
/**
* @summary Patch objects for a role by relation
*/
export const usePatchObjects = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof patchObjects>>,
TError,
{
pathParams: PatchObjectsPathParameters;
data: BodyType<AuthtypesPatchableObjectsDTO>;
},
TContext
>;
}): UseMutationResult<
Awaited<ReturnType<typeof patchObjects>>,
TError,
{
pathParams: PatchObjectsPathParameters;
data: BodyType<AuthtypesPatchableObjectsDTO>;
},
TContext
> => {
const mutationOptions = getPatchObjectsMutationOptions(options);
return useMutation(mutationOptions);
};

View File

@@ -4,6 +4,7 @@
* * regenerate with 'yarn generate:api' * * regenerate with 'yarn generate:api'
* SigNoz * SigNoz
*/ */
import { useMutation, useQuery } from 'react-query';
import type { import type {
InvalidateOptions, InvalidateOptions,
MutationFunction, MutationFunction,
@@ -15,10 +16,7 @@ import type {
UseQueryOptions, UseQueryOptions,
UseQueryResult, UseQueryResult,
} from 'react-query'; } from 'react-query';
import { useMutation, useQuery } from 'react-query';
import type { BodyType, ErrorType } from '../../../generatedAPIInstance';
import { GeneratedAPIInstance } from '../../../generatedAPIInstance';
import type { import type {
AuthtypesPostableEmailPasswordSessionDTO, AuthtypesPostableEmailPasswordSessionDTO,
AuthtypesPostableRotateTokenDTO, AuthtypesPostableRotateTokenDTO,
@@ -33,6 +31,8 @@ import type {
RotateSession200, RotateSession200,
} from '../sigNoz.schemas'; } from '../sigNoz.schemas';
import { GeneratedAPIInstance } from '../../../index';
type AwaitedInput<T> = PromiseLike<T> | T; type AwaitedInput<T> = PromiseLike<T> | T;
type Awaited<O> = O extends AwaitedInput<infer T> ? T : never; type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
@@ -50,12 +50,12 @@ export const createSessionByGoogleCallback = (signal?: AbortSignal) => {
}; };
export const getCreateSessionByGoogleCallbackQueryKey = () => { export const getCreateSessionByGoogleCallbackQueryKey = () => {
return [`/api/v1/complete/google`] as const; return ['createSessionByGoogleCallback'] as const;
}; };
export const getCreateSessionByGoogleCallbackQueryOptions = < export const getCreateSessionByGoogleCallbackQueryOptions = <
TData = Awaited<ReturnType<typeof createSessionByGoogleCallback>>, TData = Awaited<ReturnType<typeof createSessionByGoogleCallback>>,
TError = ErrorType<CreateSessionByGoogleCallback303 | RenderErrorResponseDTO> TError = CreateSessionByGoogleCallback303 | RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof createSessionByGoogleCallback>>, Awaited<ReturnType<typeof createSessionByGoogleCallback>>,
@@ -82,9 +82,9 @@ export const getCreateSessionByGoogleCallbackQueryOptions = <
export type CreateSessionByGoogleCallbackQueryResult = NonNullable< export type CreateSessionByGoogleCallbackQueryResult = NonNullable<
Awaited<ReturnType<typeof createSessionByGoogleCallback>> Awaited<ReturnType<typeof createSessionByGoogleCallback>>
>; >;
export type CreateSessionByGoogleCallbackQueryError = ErrorType< export type CreateSessionByGoogleCallbackQueryError =
CreateSessionByGoogleCallback303 | RenderErrorResponseDTO | CreateSessionByGoogleCallback303
>; | RenderErrorResponseDTO;
/** /**
* @summary Create session by google callback * @summary Create session by google callback
@@ -92,7 +92,7 @@ export type CreateSessionByGoogleCallbackQueryError = ErrorType<
export function useCreateSessionByGoogleCallback< export function useCreateSessionByGoogleCallback<
TData = Awaited<ReturnType<typeof createSessionByGoogleCallback>>, TData = Awaited<ReturnType<typeof createSessionByGoogleCallback>>,
TError = ErrorType<CreateSessionByGoogleCallback303 | RenderErrorResponseDTO> TError = CreateSessionByGoogleCallback303 | RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof createSessionByGoogleCallback>>, Awaited<ReturnType<typeof createSessionByGoogleCallback>>,
@@ -139,12 +139,12 @@ export const createSessionByOIDCCallback = (signal?: AbortSignal) => {
}; };
export const getCreateSessionByOIDCCallbackQueryKey = () => { export const getCreateSessionByOIDCCallbackQueryKey = () => {
return [`/api/v1/complete/oidc`] as const; return ['createSessionByOIDCCallback'] as const;
}; };
export const getCreateSessionByOIDCCallbackQueryOptions = < export const getCreateSessionByOIDCCallbackQueryOptions = <
TData = Awaited<ReturnType<typeof createSessionByOIDCCallback>>, TData = Awaited<ReturnType<typeof createSessionByOIDCCallback>>,
TError = ErrorType<CreateSessionByOIDCCallback303 | RenderErrorResponseDTO> TError = CreateSessionByOIDCCallback303 | RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof createSessionByOIDCCallback>>, Awaited<ReturnType<typeof createSessionByOIDCCallback>>,
@@ -171,9 +171,9 @@ export const getCreateSessionByOIDCCallbackQueryOptions = <
export type CreateSessionByOIDCCallbackQueryResult = NonNullable< export type CreateSessionByOIDCCallbackQueryResult = NonNullable<
Awaited<ReturnType<typeof createSessionByOIDCCallback>> Awaited<ReturnType<typeof createSessionByOIDCCallback>>
>; >;
export type CreateSessionByOIDCCallbackQueryError = ErrorType< export type CreateSessionByOIDCCallbackQueryError =
CreateSessionByOIDCCallback303 | RenderErrorResponseDTO | CreateSessionByOIDCCallback303
>; | RenderErrorResponseDTO;
/** /**
* @summary Create session by oidc callback * @summary Create session by oidc callback
@@ -181,7 +181,7 @@ export type CreateSessionByOIDCCallbackQueryError = ErrorType<
export function useCreateSessionByOIDCCallback< export function useCreateSessionByOIDCCallback<
TData = Awaited<ReturnType<typeof createSessionByOIDCCallback>>, TData = Awaited<ReturnType<typeof createSessionByOIDCCallback>>,
TError = ErrorType<CreateSessionByOIDCCallback303 | RenderErrorResponseDTO> TError = CreateSessionByOIDCCallback303 | RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof createSessionByOIDCCallback>>, Awaited<ReturnType<typeof createSessionByOIDCCallback>>,
@@ -220,7 +220,7 @@ export const invalidateCreateSessionByOIDCCallback = async (
* @summary Create session by saml callback * @summary Create session by saml callback
*/ */
export const createSessionBySAMLCallback = ( export const createSessionBySAMLCallback = (
createSessionBySAMLCallbackBody: BodyType<CreateSessionBySAMLCallbackBody>, createSessionBySAMLCallbackBody: CreateSessionBySAMLCallbackBody,
params?: CreateSessionBySAMLCallbackParams, params?: CreateSessionBySAMLCallbackParams,
signal?: AbortSignal, signal?: AbortSignal,
) => { ) => {
@@ -249,14 +249,14 @@ export const createSessionBySAMLCallback = (
}; };
export const getCreateSessionBySAMLCallbackMutationOptions = < export const getCreateSessionBySAMLCallbackMutationOptions = <
TError = ErrorType<CreateSessionBySAMLCallback303 | RenderErrorResponseDTO>, TError = CreateSessionBySAMLCallback303 | RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof createSessionBySAMLCallback>>, Awaited<ReturnType<typeof createSessionBySAMLCallback>>,
TError, TError,
{ {
data: BodyType<CreateSessionBySAMLCallbackBody>; data: CreateSessionBySAMLCallbackBody;
params?: CreateSessionBySAMLCallbackParams; params?: CreateSessionBySAMLCallbackParams;
}, },
TContext TContext
@@ -265,7 +265,7 @@ export const getCreateSessionBySAMLCallbackMutationOptions = <
Awaited<ReturnType<typeof createSessionBySAMLCallback>>, Awaited<ReturnType<typeof createSessionBySAMLCallback>>,
TError, TError,
{ {
data: BodyType<CreateSessionBySAMLCallbackBody>; data: CreateSessionBySAMLCallbackBody;
params?: CreateSessionBySAMLCallbackParams; params?: CreateSessionBySAMLCallbackParams;
}, },
TContext TContext
@@ -282,7 +282,7 @@ export const getCreateSessionBySAMLCallbackMutationOptions = <
const mutationFn: MutationFunction< const mutationFn: MutationFunction<
Awaited<ReturnType<typeof createSessionBySAMLCallback>>, Awaited<ReturnType<typeof createSessionBySAMLCallback>>,
{ {
data: BodyType<CreateSessionBySAMLCallbackBody>; data: CreateSessionBySAMLCallbackBody;
params?: CreateSessionBySAMLCallbackParams; params?: CreateSessionBySAMLCallbackParams;
} }
> = (props) => { > = (props) => {
@@ -297,23 +297,23 @@ export const getCreateSessionBySAMLCallbackMutationOptions = <
export type CreateSessionBySAMLCallbackMutationResult = NonNullable< export type CreateSessionBySAMLCallbackMutationResult = NonNullable<
Awaited<ReturnType<typeof createSessionBySAMLCallback>> Awaited<ReturnType<typeof createSessionBySAMLCallback>>
>; >;
export type CreateSessionBySAMLCallbackMutationBody = BodyType<CreateSessionBySAMLCallbackBody>; export type CreateSessionBySAMLCallbackMutationBody = CreateSessionBySAMLCallbackBody;
export type CreateSessionBySAMLCallbackMutationError = ErrorType< export type CreateSessionBySAMLCallbackMutationError =
CreateSessionBySAMLCallback303 | RenderErrorResponseDTO | CreateSessionBySAMLCallback303
>; | RenderErrorResponseDTO;
/** /**
* @summary Create session by saml callback * @summary Create session by saml callback
*/ */
export const useCreateSessionBySAMLCallback = < export const useCreateSessionBySAMLCallback = <
TError = ErrorType<CreateSessionBySAMLCallback303 | RenderErrorResponseDTO>, TError = CreateSessionBySAMLCallback303 | RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof createSessionBySAMLCallback>>, Awaited<ReturnType<typeof createSessionBySAMLCallback>>,
TError, TError,
{ {
data: BodyType<CreateSessionBySAMLCallbackBody>; data: CreateSessionBySAMLCallbackBody;
params?: CreateSessionBySAMLCallbackParams; params?: CreateSessionBySAMLCallbackParams;
}, },
TContext TContext
@@ -322,7 +322,7 @@ export const useCreateSessionBySAMLCallback = <
Awaited<ReturnType<typeof createSessionBySAMLCallback>>, Awaited<ReturnType<typeof createSessionBySAMLCallback>>,
TError, TError,
{ {
data: BodyType<CreateSessionBySAMLCallbackBody>; data: CreateSessionBySAMLCallbackBody;
params?: CreateSessionBySAMLCallbackParams; params?: CreateSessionBySAMLCallbackParams;
}, },
TContext TContext
@@ -343,7 +343,7 @@ export const deleteSession = () => {
}; };
export const getDeleteSessionMutationOptions = < export const getDeleteSessionMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -381,13 +381,13 @@ export type DeleteSessionMutationResult = NonNullable<
Awaited<ReturnType<typeof deleteSession>> Awaited<ReturnType<typeof deleteSession>>
>; >;
export type DeleteSessionMutationError = ErrorType<RenderErrorResponseDTO>; export type DeleteSessionMutationError = RenderErrorResponseDTO;
/** /**
* @summary Delete session * @summary Delete session
*/ */
export const useDeleteSession = < export const useDeleteSession = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -419,12 +419,12 @@ export const getSessionContext = (signal?: AbortSignal) => {
}; };
export const getGetSessionContextQueryKey = () => { export const getGetSessionContextQueryKey = () => {
return [`/api/v2/sessions/context`] as const; return ['getSessionContext'] as const;
}; };
export const getGetSessionContextQueryOptions = < export const getGetSessionContextQueryOptions = <
TData = Awaited<ReturnType<typeof getSessionContext>>, TData = Awaited<ReturnType<typeof getSessionContext>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof getSessionContext>>, Awaited<ReturnType<typeof getSessionContext>>,
@@ -450,7 +450,7 @@ export const getGetSessionContextQueryOptions = <
export type GetSessionContextQueryResult = NonNullable< export type GetSessionContextQueryResult = NonNullable<
Awaited<ReturnType<typeof getSessionContext>> Awaited<ReturnType<typeof getSessionContext>>
>; >;
export type GetSessionContextQueryError = ErrorType<RenderErrorResponseDTO>; export type GetSessionContextQueryError = RenderErrorResponseDTO;
/** /**
* @summary Get session context * @summary Get session context
@@ -458,7 +458,7 @@ export type GetSessionContextQueryError = ErrorType<RenderErrorResponseDTO>;
export function useGetSessionContext< export function useGetSessionContext<
TData = Awaited<ReturnType<typeof getSessionContext>>, TData = Awaited<ReturnType<typeof getSessionContext>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof getSessionContext>>, Awaited<ReturnType<typeof getSessionContext>>,
@@ -497,7 +497,7 @@ export const invalidateGetSessionContext = async (
* @summary Create session by email and password * @summary Create session by email and password
*/ */
export const createSessionByEmailPassword = ( export const createSessionByEmailPassword = (
authtypesPostableEmailPasswordSessionDTO: BodyType<AuthtypesPostableEmailPasswordSessionDTO>, authtypesPostableEmailPasswordSessionDTO: AuthtypesPostableEmailPasswordSessionDTO,
signal?: AbortSignal, signal?: AbortSignal,
) => { ) => {
return GeneratedAPIInstance<CreateSessionByEmailPassword200>({ return GeneratedAPIInstance<CreateSessionByEmailPassword200>({
@@ -510,19 +510,19 @@ export const createSessionByEmailPassword = (
}; };
export const getCreateSessionByEmailPasswordMutationOptions = < export const getCreateSessionByEmailPasswordMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof createSessionByEmailPassword>>, Awaited<ReturnType<typeof createSessionByEmailPassword>>,
TError, TError,
{ data: BodyType<AuthtypesPostableEmailPasswordSessionDTO> }, { data: AuthtypesPostableEmailPasswordSessionDTO },
TContext TContext
>; >;
}): UseMutationOptions< }): UseMutationOptions<
Awaited<ReturnType<typeof createSessionByEmailPassword>>, Awaited<ReturnType<typeof createSessionByEmailPassword>>,
TError, TError,
{ data: BodyType<AuthtypesPostableEmailPasswordSessionDTO> }, { data: AuthtypesPostableEmailPasswordSessionDTO },
TContext TContext
> => { > => {
const mutationKey = ['createSessionByEmailPassword']; const mutationKey = ['createSessionByEmailPassword'];
@@ -536,7 +536,7 @@ export const getCreateSessionByEmailPasswordMutationOptions = <
const mutationFn: MutationFunction< const mutationFn: MutationFunction<
Awaited<ReturnType<typeof createSessionByEmailPassword>>, Awaited<ReturnType<typeof createSessionByEmailPassword>>,
{ data: BodyType<AuthtypesPostableEmailPasswordSessionDTO> } { data: AuthtypesPostableEmailPasswordSessionDTO }
> = (props) => { > = (props) => {
const { data } = props ?? {}; const { data } = props ?? {};
@@ -549,26 +549,26 @@ export const getCreateSessionByEmailPasswordMutationOptions = <
export type CreateSessionByEmailPasswordMutationResult = NonNullable< export type CreateSessionByEmailPasswordMutationResult = NonNullable<
Awaited<ReturnType<typeof createSessionByEmailPassword>> Awaited<ReturnType<typeof createSessionByEmailPassword>>
>; >;
export type CreateSessionByEmailPasswordMutationBody = BodyType<AuthtypesPostableEmailPasswordSessionDTO>; export type CreateSessionByEmailPasswordMutationBody = AuthtypesPostableEmailPasswordSessionDTO;
export type CreateSessionByEmailPasswordMutationError = ErrorType<RenderErrorResponseDTO>; export type CreateSessionByEmailPasswordMutationError = RenderErrorResponseDTO;
/** /**
* @summary Create session by email and password * @summary Create session by email and password
*/ */
export const useCreateSessionByEmailPassword = < export const useCreateSessionByEmailPassword = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof createSessionByEmailPassword>>, Awaited<ReturnType<typeof createSessionByEmailPassword>>,
TError, TError,
{ data: BodyType<AuthtypesPostableEmailPasswordSessionDTO> }, { data: AuthtypesPostableEmailPasswordSessionDTO },
TContext TContext
>; >;
}): UseMutationResult< }): UseMutationResult<
Awaited<ReturnType<typeof createSessionByEmailPassword>>, Awaited<ReturnType<typeof createSessionByEmailPassword>>,
TError, TError,
{ data: BodyType<AuthtypesPostableEmailPasswordSessionDTO> }, { data: AuthtypesPostableEmailPasswordSessionDTO },
TContext TContext
> => { > => {
const mutationOptions = getCreateSessionByEmailPasswordMutationOptions( const mutationOptions = getCreateSessionByEmailPasswordMutationOptions(
@@ -582,7 +582,7 @@ export const useCreateSessionByEmailPassword = <
* @summary Rotate session * @summary Rotate session
*/ */
export const rotateSession = ( export const rotateSession = (
authtypesPostableRotateTokenDTO: BodyType<AuthtypesPostableRotateTokenDTO>, authtypesPostableRotateTokenDTO: AuthtypesPostableRotateTokenDTO,
signal?: AbortSignal, signal?: AbortSignal,
) => { ) => {
return GeneratedAPIInstance<RotateSession200>({ return GeneratedAPIInstance<RotateSession200>({
@@ -595,19 +595,19 @@ export const rotateSession = (
}; };
export const getRotateSessionMutationOptions = < export const getRotateSessionMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof rotateSession>>, Awaited<ReturnType<typeof rotateSession>>,
TError, TError,
{ data: BodyType<AuthtypesPostableRotateTokenDTO> }, { data: AuthtypesPostableRotateTokenDTO },
TContext TContext
>; >;
}): UseMutationOptions< }): UseMutationOptions<
Awaited<ReturnType<typeof rotateSession>>, Awaited<ReturnType<typeof rotateSession>>,
TError, TError,
{ data: BodyType<AuthtypesPostableRotateTokenDTO> }, { data: AuthtypesPostableRotateTokenDTO },
TContext TContext
> => { > => {
const mutationKey = ['rotateSession']; const mutationKey = ['rotateSession'];
@@ -621,7 +621,7 @@ export const getRotateSessionMutationOptions = <
const mutationFn: MutationFunction< const mutationFn: MutationFunction<
Awaited<ReturnType<typeof rotateSession>>, Awaited<ReturnType<typeof rotateSession>>,
{ data: BodyType<AuthtypesPostableRotateTokenDTO> } { data: AuthtypesPostableRotateTokenDTO }
> = (props) => { > = (props) => {
const { data } = props ?? {}; const { data } = props ?? {};
@@ -634,26 +634,26 @@ export const getRotateSessionMutationOptions = <
export type RotateSessionMutationResult = NonNullable< export type RotateSessionMutationResult = NonNullable<
Awaited<ReturnType<typeof rotateSession>> Awaited<ReturnType<typeof rotateSession>>
>; >;
export type RotateSessionMutationBody = BodyType<AuthtypesPostableRotateTokenDTO>; export type RotateSessionMutationBody = AuthtypesPostableRotateTokenDTO;
export type RotateSessionMutationError = ErrorType<RenderErrorResponseDTO>; export type RotateSessionMutationError = RenderErrorResponseDTO;
/** /**
* @summary Rotate session * @summary Rotate session
*/ */
export const useRotateSession = < export const useRotateSession = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof rotateSession>>, Awaited<ReturnType<typeof rotateSession>>,
TError, TError,
{ data: BodyType<AuthtypesPostableRotateTokenDTO> }, { data: AuthtypesPostableRotateTokenDTO },
TContext TContext
>; >;
}): UseMutationResult< }): UseMutationResult<
Awaited<ReturnType<typeof rotateSession>>, Awaited<ReturnType<typeof rotateSession>>,
TError, TError,
{ data: BodyType<AuthtypesPostableRotateTokenDTO> }, { data: AuthtypesPostableRotateTokenDTO },
TContext TContext
> => { > => {
const mutationOptions = getRotateSessionMutationOptions(options); const mutationOptions = getRotateSessionMutationOptions(options);

File diff suppressed because it is too large Load Diff

View File

@@ -4,6 +4,7 @@
* * regenerate with 'yarn generate:api' * * regenerate with 'yarn generate:api'
* SigNoz * SigNoz
*/ */
import { useMutation, useQuery } from 'react-query';
import type { import type {
InvalidateOptions, InvalidateOptions,
MutationFunction, MutationFunction,
@@ -15,10 +16,7 @@ import type {
UseQueryOptions, UseQueryOptions,
UseQueryResult, UseQueryResult,
} from 'react-query'; } from 'react-query';
import { useMutation, useQuery } from 'react-query';
import type { BodyType, ErrorType } from '../../../generatedAPIInstance';
import { GeneratedAPIInstance } from '../../../generatedAPIInstance';
import type { import type {
AcceptInvite201, AcceptInvite201,
ChangePasswordPathParameters, ChangePasswordPathParameters,
@@ -39,9 +37,8 @@ import type {
RenderErrorResponseDTO, RenderErrorResponseDTO,
RevokeAPIKeyPathParameters, RevokeAPIKeyPathParameters,
TypesChangePasswordRequestDTO, TypesChangePasswordRequestDTO,
TypesPostableAcceptInviteDTO,
TypesPostableAPIKeyDTO, TypesPostableAPIKeyDTO,
TypesPostableForgotPasswordDTO, TypesPostableAcceptInviteDTO,
TypesPostableInviteDTO, TypesPostableInviteDTO,
TypesPostableResetPasswordDTO, TypesPostableResetPasswordDTO,
TypesStorableAPIKeyDTO, TypesStorableAPIKeyDTO,
@@ -51,6 +48,8 @@ import type {
UpdateUserPathParameters, UpdateUserPathParameters,
} from '../sigNoz.schemas'; } from '../sigNoz.schemas';
import { GeneratedAPIInstance } from '../../../index';
type AwaitedInput<T> = PromiseLike<T> | T; type AwaitedInput<T> = PromiseLike<T> | T;
type Awaited<O> = O extends AwaitedInput<infer T> ? T : never; type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
@@ -61,7 +60,7 @@ type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
*/ */
export const changePassword = ( export const changePassword = (
{ id }: ChangePasswordPathParameters, { id }: ChangePasswordPathParameters,
typesChangePasswordRequestDTO: BodyType<TypesChangePasswordRequestDTO>, typesChangePasswordRequestDTO: TypesChangePasswordRequestDTO,
signal?: AbortSignal, signal?: AbortSignal,
) => { ) => {
return GeneratedAPIInstance<void>({ return GeneratedAPIInstance<void>({
@@ -74,7 +73,7 @@ export const changePassword = (
}; };
export const getChangePasswordMutationOptions = < export const getChangePasswordMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -82,7 +81,7 @@ export const getChangePasswordMutationOptions = <
TError, TError,
{ {
pathParams: ChangePasswordPathParameters; pathParams: ChangePasswordPathParameters;
data: BodyType<TypesChangePasswordRequestDTO>; data: TypesChangePasswordRequestDTO;
}, },
TContext TContext
>; >;
@@ -91,7 +90,7 @@ export const getChangePasswordMutationOptions = <
TError, TError,
{ {
pathParams: ChangePasswordPathParameters; pathParams: ChangePasswordPathParameters;
data: BodyType<TypesChangePasswordRequestDTO>; data: TypesChangePasswordRequestDTO;
}, },
TContext TContext
> => { > => {
@@ -108,7 +107,7 @@ export const getChangePasswordMutationOptions = <
Awaited<ReturnType<typeof changePassword>>, Awaited<ReturnType<typeof changePassword>>,
{ {
pathParams: ChangePasswordPathParameters; pathParams: ChangePasswordPathParameters;
data: BodyType<TypesChangePasswordRequestDTO>; data: TypesChangePasswordRequestDTO;
} }
> = (props) => { > = (props) => {
const { pathParams, data } = props ?? {}; const { pathParams, data } = props ?? {};
@@ -122,14 +121,14 @@ export const getChangePasswordMutationOptions = <
export type ChangePasswordMutationResult = NonNullable< export type ChangePasswordMutationResult = NonNullable<
Awaited<ReturnType<typeof changePassword>> Awaited<ReturnType<typeof changePassword>>
>; >;
export type ChangePasswordMutationBody = BodyType<TypesChangePasswordRequestDTO>; export type ChangePasswordMutationBody = TypesChangePasswordRequestDTO;
export type ChangePasswordMutationError = ErrorType<RenderErrorResponseDTO>; export type ChangePasswordMutationError = RenderErrorResponseDTO;
/** /**
* @summary Change password * @summary Change password
*/ */
export const useChangePassword = < export const useChangePassword = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -137,7 +136,7 @@ export const useChangePassword = <
TError, TError,
{ {
pathParams: ChangePasswordPathParameters; pathParams: ChangePasswordPathParameters;
data: BodyType<TypesChangePasswordRequestDTO>; data: TypesChangePasswordRequestDTO;
}, },
TContext TContext
>; >;
@@ -146,7 +145,7 @@ export const useChangePassword = <
TError, TError,
{ {
pathParams: ChangePasswordPathParameters; pathParams: ChangePasswordPathParameters;
data: BodyType<TypesChangePasswordRequestDTO>; data: TypesChangePasswordRequestDTO;
}, },
TContext TContext
> => { > => {
@@ -172,12 +171,12 @@ export const getResetPasswordToken = (
export const getGetResetPasswordTokenQueryKey = ({ export const getGetResetPasswordTokenQueryKey = ({
id, id,
}: GetResetPasswordTokenPathParameters) => { }: GetResetPasswordTokenPathParameters) => {
return [`/api/v1/getResetPasswordToken/${id}`] as const; return ['getResetPasswordToken'] as const;
}; };
export const getGetResetPasswordTokenQueryOptions = < export const getGetResetPasswordTokenQueryOptions = <
TData = Awaited<ReturnType<typeof getResetPasswordToken>>, TData = Awaited<ReturnType<typeof getResetPasswordToken>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(
{ id }: GetResetPasswordTokenPathParameters, { id }: GetResetPasswordTokenPathParameters,
options?: { options?: {
@@ -212,7 +211,7 @@ export const getGetResetPasswordTokenQueryOptions = <
export type GetResetPasswordTokenQueryResult = NonNullable< export type GetResetPasswordTokenQueryResult = NonNullable<
Awaited<ReturnType<typeof getResetPasswordToken>> Awaited<ReturnType<typeof getResetPasswordToken>>
>; >;
export type GetResetPasswordTokenQueryError = ErrorType<RenderErrorResponseDTO>; export type GetResetPasswordTokenQueryError = RenderErrorResponseDTO;
/** /**
* @summary Get reset password token * @summary Get reset password token
@@ -220,7 +219,7 @@ export type GetResetPasswordTokenQueryError = ErrorType<RenderErrorResponseDTO>;
export function useGetResetPasswordToken< export function useGetResetPasswordToken<
TData = Awaited<ReturnType<typeof getResetPasswordToken>>, TData = Awaited<ReturnType<typeof getResetPasswordToken>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(
{ id }: GetResetPasswordTokenPathParameters, { id }: GetResetPasswordTokenPathParameters,
options?: { options?: {
@@ -271,12 +270,12 @@ export const listInvite = (signal?: AbortSignal) => {
}; };
export const getListInviteQueryKey = () => { export const getListInviteQueryKey = () => {
return [`/api/v1/invite`] as const; return ['listInvite'] as const;
}; };
export const getListInviteQueryOptions = < export const getListInviteQueryOptions = <
TData = Awaited<ReturnType<typeof listInvite>>, TData = Awaited<ReturnType<typeof listInvite>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions<Awaited<ReturnType<typeof listInvite>>, TError, TData>; query?: UseQueryOptions<Awaited<ReturnType<typeof listInvite>>, TError, TData>;
}) => { }) => {
@@ -298,7 +297,7 @@ export const getListInviteQueryOptions = <
export type ListInviteQueryResult = NonNullable< export type ListInviteQueryResult = NonNullable<
Awaited<ReturnType<typeof listInvite>> Awaited<ReturnType<typeof listInvite>>
>; >;
export type ListInviteQueryError = ErrorType<RenderErrorResponseDTO>; export type ListInviteQueryError = RenderErrorResponseDTO;
/** /**
* @summary List invites * @summary List invites
@@ -306,7 +305,7 @@ export type ListInviteQueryError = ErrorType<RenderErrorResponseDTO>;
export function useListInvite< export function useListInvite<
TData = Awaited<ReturnType<typeof listInvite>>, TData = Awaited<ReturnType<typeof listInvite>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions<Awaited<ReturnType<typeof listInvite>>, TError, TData>; query?: UseQueryOptions<Awaited<ReturnType<typeof listInvite>>, TError, TData>;
}): UseQueryResult<TData, TError> & { queryKey: QueryKey } { }): UseQueryResult<TData, TError> & { queryKey: QueryKey } {
@@ -341,7 +340,7 @@ export const invalidateListInvite = async (
* @summary Create invite * @summary Create invite
*/ */
export const createInvite = ( export const createInvite = (
typesPostableInviteDTO: BodyType<TypesPostableInviteDTO>, typesPostableInviteDTO: TypesPostableInviteDTO,
signal?: AbortSignal, signal?: AbortSignal,
) => { ) => {
return GeneratedAPIInstance<CreateInvite201>({ return GeneratedAPIInstance<CreateInvite201>({
@@ -354,19 +353,19 @@ export const createInvite = (
}; };
export const getCreateInviteMutationOptions = < export const getCreateInviteMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof createInvite>>, Awaited<ReturnType<typeof createInvite>>,
TError, TError,
{ data: BodyType<TypesPostableInviteDTO> }, { data: TypesPostableInviteDTO },
TContext TContext
>; >;
}): UseMutationOptions< }): UseMutationOptions<
Awaited<ReturnType<typeof createInvite>>, Awaited<ReturnType<typeof createInvite>>,
TError, TError,
{ data: BodyType<TypesPostableInviteDTO> }, { data: TypesPostableInviteDTO },
TContext TContext
> => { > => {
const mutationKey = ['createInvite']; const mutationKey = ['createInvite'];
@@ -380,7 +379,7 @@ export const getCreateInviteMutationOptions = <
const mutationFn: MutationFunction< const mutationFn: MutationFunction<
Awaited<ReturnType<typeof createInvite>>, Awaited<ReturnType<typeof createInvite>>,
{ data: BodyType<TypesPostableInviteDTO> } { data: TypesPostableInviteDTO }
> = (props) => { > = (props) => {
const { data } = props ?? {}; const { data } = props ?? {};
@@ -393,26 +392,26 @@ export const getCreateInviteMutationOptions = <
export type CreateInviteMutationResult = NonNullable< export type CreateInviteMutationResult = NonNullable<
Awaited<ReturnType<typeof createInvite>> Awaited<ReturnType<typeof createInvite>>
>; >;
export type CreateInviteMutationBody = BodyType<TypesPostableInviteDTO>; export type CreateInviteMutationBody = TypesPostableInviteDTO;
export type CreateInviteMutationError = ErrorType<RenderErrorResponseDTO>; export type CreateInviteMutationError = RenderErrorResponseDTO;
/** /**
* @summary Create invite * @summary Create invite
*/ */
export const useCreateInvite = < export const useCreateInvite = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof createInvite>>, Awaited<ReturnType<typeof createInvite>>,
TError, TError,
{ data: BodyType<TypesPostableInviteDTO> }, { data: TypesPostableInviteDTO },
TContext TContext
>; >;
}): UseMutationResult< }): UseMutationResult<
Awaited<ReturnType<typeof createInvite>>, Awaited<ReturnType<typeof createInvite>>,
TError, TError,
{ data: BodyType<TypesPostableInviteDTO> }, { data: TypesPostableInviteDTO },
TContext TContext
> => { > => {
const mutationOptions = getCreateInviteMutationOptions(options); const mutationOptions = getCreateInviteMutationOptions(options);
@@ -431,7 +430,7 @@ export const deleteInvite = ({ id }: DeleteInvitePathParameters) => {
}; };
export const getDeleteInviteMutationOptions = < export const getDeleteInviteMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -471,13 +470,13 @@ export type DeleteInviteMutationResult = NonNullable<
Awaited<ReturnType<typeof deleteInvite>> Awaited<ReturnType<typeof deleteInvite>>
>; >;
export type DeleteInviteMutationError = ErrorType<RenderErrorResponseDTO>; export type DeleteInviteMutationError = RenderErrorResponseDTO;
/** /**
* @summary Delete invite * @summary Delete invite
*/ */
export const useDeleteInvite = < export const useDeleteInvite = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -512,12 +511,12 @@ export const getInvite = (
}; };
export const getGetInviteQueryKey = ({ token }: GetInvitePathParameters) => { export const getGetInviteQueryKey = ({ token }: GetInvitePathParameters) => {
return [`/api/v1/invite/${token}`] as const; return ['getInvite'] as const;
}; };
export const getGetInviteQueryOptions = < export const getGetInviteQueryOptions = <
TData = Awaited<ReturnType<typeof getInvite>>, TData = Awaited<ReturnType<typeof getInvite>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(
{ token }: GetInvitePathParameters, { token }: GetInvitePathParameters,
options?: { options?: {
@@ -545,7 +544,7 @@ export const getGetInviteQueryOptions = <
export type GetInviteQueryResult = NonNullable< export type GetInviteQueryResult = NonNullable<
Awaited<ReturnType<typeof getInvite>> Awaited<ReturnType<typeof getInvite>>
>; >;
export type GetInviteQueryError = ErrorType<RenderErrorResponseDTO>; export type GetInviteQueryError = RenderErrorResponseDTO;
/** /**
* @summary Get invite * @summary Get invite
@@ -553,7 +552,7 @@ export type GetInviteQueryError = ErrorType<RenderErrorResponseDTO>;
export function useGetInvite< export function useGetInvite<
TData = Awaited<ReturnType<typeof getInvite>>, TData = Awaited<ReturnType<typeof getInvite>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(
{ token }: GetInvitePathParameters, { token }: GetInvitePathParameters,
options?: { options?: {
@@ -592,7 +591,7 @@ export const invalidateGetInvite = async (
* @summary Accept invite * @summary Accept invite
*/ */
export const acceptInvite = ( export const acceptInvite = (
typesPostableAcceptInviteDTO: BodyType<TypesPostableAcceptInviteDTO>, typesPostableAcceptInviteDTO: TypesPostableAcceptInviteDTO,
signal?: AbortSignal, signal?: AbortSignal,
) => { ) => {
return GeneratedAPIInstance<AcceptInvite201>({ return GeneratedAPIInstance<AcceptInvite201>({
@@ -605,19 +604,19 @@ export const acceptInvite = (
}; };
export const getAcceptInviteMutationOptions = < export const getAcceptInviteMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof acceptInvite>>, Awaited<ReturnType<typeof acceptInvite>>,
TError, TError,
{ data: BodyType<TypesPostableAcceptInviteDTO> }, { data: TypesPostableAcceptInviteDTO },
TContext TContext
>; >;
}): UseMutationOptions< }): UseMutationOptions<
Awaited<ReturnType<typeof acceptInvite>>, Awaited<ReturnType<typeof acceptInvite>>,
TError, TError,
{ data: BodyType<TypesPostableAcceptInviteDTO> }, { data: TypesPostableAcceptInviteDTO },
TContext TContext
> => { > => {
const mutationKey = ['acceptInvite']; const mutationKey = ['acceptInvite'];
@@ -631,7 +630,7 @@ export const getAcceptInviteMutationOptions = <
const mutationFn: MutationFunction< const mutationFn: MutationFunction<
Awaited<ReturnType<typeof acceptInvite>>, Awaited<ReturnType<typeof acceptInvite>>,
{ data: BodyType<TypesPostableAcceptInviteDTO> } { data: TypesPostableAcceptInviteDTO }
> = (props) => { > = (props) => {
const { data } = props ?? {}; const { data } = props ?? {};
@@ -644,26 +643,26 @@ export const getAcceptInviteMutationOptions = <
export type AcceptInviteMutationResult = NonNullable< export type AcceptInviteMutationResult = NonNullable<
Awaited<ReturnType<typeof acceptInvite>> Awaited<ReturnType<typeof acceptInvite>>
>; >;
export type AcceptInviteMutationBody = BodyType<TypesPostableAcceptInviteDTO>; export type AcceptInviteMutationBody = TypesPostableAcceptInviteDTO;
export type AcceptInviteMutationError = ErrorType<RenderErrorResponseDTO>; export type AcceptInviteMutationError = RenderErrorResponseDTO;
/** /**
* @summary Accept invite * @summary Accept invite
*/ */
export const useAcceptInvite = < export const useAcceptInvite = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof acceptInvite>>, Awaited<ReturnType<typeof acceptInvite>>,
TError, TError,
{ data: BodyType<TypesPostableAcceptInviteDTO> }, { data: TypesPostableAcceptInviteDTO },
TContext TContext
>; >;
}): UseMutationResult< }): UseMutationResult<
Awaited<ReturnType<typeof acceptInvite>>, Awaited<ReturnType<typeof acceptInvite>>,
TError, TError,
{ data: BodyType<TypesPostableAcceptInviteDTO> }, { data: TypesPostableAcceptInviteDTO },
TContext TContext
> => { > => {
const mutationOptions = getAcceptInviteMutationOptions(options); const mutationOptions = getAcceptInviteMutationOptions(options);
@@ -675,7 +674,7 @@ export const useAcceptInvite = <
* @summary Create bulk invite * @summary Create bulk invite
*/ */
export const createBulkInvite = ( export const createBulkInvite = (
typesPostableInviteDTO: BodyType<TypesPostableInviteDTO[]>, typesPostableInviteDTO: TypesPostableInviteDTO[],
signal?: AbortSignal, signal?: AbortSignal,
) => { ) => {
return GeneratedAPIInstance<void>({ return GeneratedAPIInstance<void>({
@@ -688,19 +687,19 @@ export const createBulkInvite = (
}; };
export const getCreateBulkInviteMutationOptions = < export const getCreateBulkInviteMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof createBulkInvite>>, Awaited<ReturnType<typeof createBulkInvite>>,
TError, TError,
{ data: BodyType<TypesPostableInviteDTO[]> }, { data: TypesPostableInviteDTO[] },
TContext TContext
>; >;
}): UseMutationOptions< }): UseMutationOptions<
Awaited<ReturnType<typeof createBulkInvite>>, Awaited<ReturnType<typeof createBulkInvite>>,
TError, TError,
{ data: BodyType<TypesPostableInviteDTO[]> }, { data: TypesPostableInviteDTO[] },
TContext TContext
> => { > => {
const mutationKey = ['createBulkInvite']; const mutationKey = ['createBulkInvite'];
@@ -714,7 +713,7 @@ export const getCreateBulkInviteMutationOptions = <
const mutationFn: MutationFunction< const mutationFn: MutationFunction<
Awaited<ReturnType<typeof createBulkInvite>>, Awaited<ReturnType<typeof createBulkInvite>>,
{ data: BodyType<TypesPostableInviteDTO[]> } { data: TypesPostableInviteDTO[] }
> = (props) => { > = (props) => {
const { data } = props ?? {}; const { data } = props ?? {};
@@ -727,26 +726,26 @@ export const getCreateBulkInviteMutationOptions = <
export type CreateBulkInviteMutationResult = NonNullable< export type CreateBulkInviteMutationResult = NonNullable<
Awaited<ReturnType<typeof createBulkInvite>> Awaited<ReturnType<typeof createBulkInvite>>
>; >;
export type CreateBulkInviteMutationBody = BodyType<TypesPostableInviteDTO[]>; export type CreateBulkInviteMutationBody = TypesPostableInviteDTO[];
export type CreateBulkInviteMutationError = ErrorType<RenderErrorResponseDTO>; export type CreateBulkInviteMutationError = RenderErrorResponseDTO;
/** /**
* @summary Create bulk invite * @summary Create bulk invite
*/ */
export const useCreateBulkInvite = < export const useCreateBulkInvite = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof createBulkInvite>>, Awaited<ReturnType<typeof createBulkInvite>>,
TError, TError,
{ data: BodyType<TypesPostableInviteDTO[]> }, { data: TypesPostableInviteDTO[] },
TContext TContext
>; >;
}): UseMutationResult< }): UseMutationResult<
Awaited<ReturnType<typeof createBulkInvite>>, Awaited<ReturnType<typeof createBulkInvite>>,
TError, TError,
{ data: BodyType<TypesPostableInviteDTO[]> }, { data: TypesPostableInviteDTO[] },
TContext TContext
> => { > => {
const mutationOptions = getCreateBulkInviteMutationOptions(options); const mutationOptions = getCreateBulkInviteMutationOptions(options);
@@ -766,12 +765,12 @@ export const listAPIKeys = (signal?: AbortSignal) => {
}; };
export const getListAPIKeysQueryKey = () => { export const getListAPIKeysQueryKey = () => {
return [`/api/v1/pats`] as const; return ['listAPIKeys'] as const;
}; };
export const getListAPIKeysQueryOptions = < export const getListAPIKeysQueryOptions = <
TData = Awaited<ReturnType<typeof listAPIKeys>>, TData = Awaited<ReturnType<typeof listAPIKeys>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof listAPIKeys>>, Awaited<ReturnType<typeof listAPIKeys>>,
@@ -797,7 +796,7 @@ export const getListAPIKeysQueryOptions = <
export type ListAPIKeysQueryResult = NonNullable< export type ListAPIKeysQueryResult = NonNullable<
Awaited<ReturnType<typeof listAPIKeys>> Awaited<ReturnType<typeof listAPIKeys>>
>; >;
export type ListAPIKeysQueryError = ErrorType<RenderErrorResponseDTO>; export type ListAPIKeysQueryError = RenderErrorResponseDTO;
/** /**
* @summary List api keys * @summary List api keys
@@ -805,7 +804,7 @@ export type ListAPIKeysQueryError = ErrorType<RenderErrorResponseDTO>;
export function useListAPIKeys< export function useListAPIKeys<
TData = Awaited<ReturnType<typeof listAPIKeys>>, TData = Awaited<ReturnType<typeof listAPIKeys>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions< query?: UseQueryOptions<
Awaited<ReturnType<typeof listAPIKeys>>, Awaited<ReturnType<typeof listAPIKeys>>,
@@ -844,7 +843,7 @@ export const invalidateListAPIKeys = async (
* @summary Create api key * @summary Create api key
*/ */
export const createAPIKey = ( export const createAPIKey = (
typesPostableAPIKeyDTO: BodyType<TypesPostableAPIKeyDTO>, typesPostableAPIKeyDTO: TypesPostableAPIKeyDTO,
signal?: AbortSignal, signal?: AbortSignal,
) => { ) => {
return GeneratedAPIInstance<CreateAPIKey201>({ return GeneratedAPIInstance<CreateAPIKey201>({
@@ -857,19 +856,19 @@ export const createAPIKey = (
}; };
export const getCreateAPIKeyMutationOptions = < export const getCreateAPIKeyMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof createAPIKey>>, Awaited<ReturnType<typeof createAPIKey>>,
TError, TError,
{ data: BodyType<TypesPostableAPIKeyDTO> }, { data: TypesPostableAPIKeyDTO },
TContext TContext
>; >;
}): UseMutationOptions< }): UseMutationOptions<
Awaited<ReturnType<typeof createAPIKey>>, Awaited<ReturnType<typeof createAPIKey>>,
TError, TError,
{ data: BodyType<TypesPostableAPIKeyDTO> }, { data: TypesPostableAPIKeyDTO },
TContext TContext
> => { > => {
const mutationKey = ['createAPIKey']; const mutationKey = ['createAPIKey'];
@@ -883,7 +882,7 @@ export const getCreateAPIKeyMutationOptions = <
const mutationFn: MutationFunction< const mutationFn: MutationFunction<
Awaited<ReturnType<typeof createAPIKey>>, Awaited<ReturnType<typeof createAPIKey>>,
{ data: BodyType<TypesPostableAPIKeyDTO> } { data: TypesPostableAPIKeyDTO }
> = (props) => { > = (props) => {
const { data } = props ?? {}; const { data } = props ?? {};
@@ -896,26 +895,26 @@ export const getCreateAPIKeyMutationOptions = <
export type CreateAPIKeyMutationResult = NonNullable< export type CreateAPIKeyMutationResult = NonNullable<
Awaited<ReturnType<typeof createAPIKey>> Awaited<ReturnType<typeof createAPIKey>>
>; >;
export type CreateAPIKeyMutationBody = BodyType<TypesPostableAPIKeyDTO>; export type CreateAPIKeyMutationBody = TypesPostableAPIKeyDTO;
export type CreateAPIKeyMutationError = ErrorType<RenderErrorResponseDTO>; export type CreateAPIKeyMutationError = RenderErrorResponseDTO;
/** /**
* @summary Create api key * @summary Create api key
*/ */
export const useCreateAPIKey = < export const useCreateAPIKey = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof createAPIKey>>, Awaited<ReturnType<typeof createAPIKey>>,
TError, TError,
{ data: BodyType<TypesPostableAPIKeyDTO> }, { data: TypesPostableAPIKeyDTO },
TContext TContext
>; >;
}): UseMutationResult< }): UseMutationResult<
Awaited<ReturnType<typeof createAPIKey>>, Awaited<ReturnType<typeof createAPIKey>>,
TError, TError,
{ data: BodyType<TypesPostableAPIKeyDTO> }, { data: TypesPostableAPIKeyDTO },
TContext TContext
> => { > => {
const mutationOptions = getCreateAPIKeyMutationOptions(options); const mutationOptions = getCreateAPIKeyMutationOptions(options);
@@ -934,7 +933,7 @@ export const revokeAPIKey = ({ id }: RevokeAPIKeyPathParameters) => {
}; };
export const getRevokeAPIKeyMutationOptions = < export const getRevokeAPIKeyMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -974,13 +973,13 @@ export type RevokeAPIKeyMutationResult = NonNullable<
Awaited<ReturnType<typeof revokeAPIKey>> Awaited<ReturnType<typeof revokeAPIKey>>
>; >;
export type RevokeAPIKeyMutationError = ErrorType<RenderErrorResponseDTO>; export type RevokeAPIKeyMutationError = RenderErrorResponseDTO;
/** /**
* @summary Revoke api key * @summary Revoke api key
*/ */
export const useRevokeAPIKey = < export const useRevokeAPIKey = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -1005,7 +1004,7 @@ export const useRevokeAPIKey = <
*/ */
export const updateAPIKey = ( export const updateAPIKey = (
{ id }: UpdateAPIKeyPathParameters, { id }: UpdateAPIKeyPathParameters,
typesStorableAPIKeyDTO: BodyType<TypesStorableAPIKeyDTO>, typesStorableAPIKeyDTO: TypesStorableAPIKeyDTO,
) => { ) => {
return GeneratedAPIInstance<string>({ return GeneratedAPIInstance<string>({
url: `/api/v1/pats/${id}`, url: `/api/v1/pats/${id}`,
@@ -1016,25 +1015,19 @@ export const updateAPIKey = (
}; };
export const getUpdateAPIKeyMutationOptions = < export const getUpdateAPIKeyMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof updateAPIKey>>, Awaited<ReturnType<typeof updateAPIKey>>,
TError, TError,
{ { pathParams: UpdateAPIKeyPathParameters; data: TypesStorableAPIKeyDTO },
pathParams: UpdateAPIKeyPathParameters;
data: BodyType<TypesStorableAPIKeyDTO>;
},
TContext TContext
>; >;
}): UseMutationOptions< }): UseMutationOptions<
Awaited<ReturnType<typeof updateAPIKey>>, Awaited<ReturnType<typeof updateAPIKey>>,
TError, TError,
{ { pathParams: UpdateAPIKeyPathParameters; data: TypesStorableAPIKeyDTO },
pathParams: UpdateAPIKeyPathParameters;
data: BodyType<TypesStorableAPIKeyDTO>;
},
TContext TContext
> => { > => {
const mutationKey = ['updateAPIKey']; const mutationKey = ['updateAPIKey'];
@@ -1048,10 +1041,7 @@ export const getUpdateAPIKeyMutationOptions = <
const mutationFn: MutationFunction< const mutationFn: MutationFunction<
Awaited<ReturnType<typeof updateAPIKey>>, Awaited<ReturnType<typeof updateAPIKey>>,
{ { pathParams: UpdateAPIKeyPathParameters; data: TypesStorableAPIKeyDTO }
pathParams: UpdateAPIKeyPathParameters;
data: BodyType<TypesStorableAPIKeyDTO>;
}
> = (props) => { > = (props) => {
const { pathParams, data } = props ?? {}; const { pathParams, data } = props ?? {};
@@ -1064,32 +1054,26 @@ export const getUpdateAPIKeyMutationOptions = <
export type UpdateAPIKeyMutationResult = NonNullable< export type UpdateAPIKeyMutationResult = NonNullable<
Awaited<ReturnType<typeof updateAPIKey>> Awaited<ReturnType<typeof updateAPIKey>>
>; >;
export type UpdateAPIKeyMutationBody = BodyType<TypesStorableAPIKeyDTO>; export type UpdateAPIKeyMutationBody = TypesStorableAPIKeyDTO;
export type UpdateAPIKeyMutationError = ErrorType<RenderErrorResponseDTO>; export type UpdateAPIKeyMutationError = RenderErrorResponseDTO;
/** /**
* @summary Update api key * @summary Update api key
*/ */
export const useUpdateAPIKey = < export const useUpdateAPIKey = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof updateAPIKey>>, Awaited<ReturnType<typeof updateAPIKey>>,
TError, TError,
{ { pathParams: UpdateAPIKeyPathParameters; data: TypesStorableAPIKeyDTO },
pathParams: UpdateAPIKeyPathParameters;
data: BodyType<TypesStorableAPIKeyDTO>;
},
TContext TContext
>; >;
}): UseMutationResult< }): UseMutationResult<
Awaited<ReturnType<typeof updateAPIKey>>, Awaited<ReturnType<typeof updateAPIKey>>,
TError, TError,
{ { pathParams: UpdateAPIKeyPathParameters; data: TypesStorableAPIKeyDTO },
pathParams: UpdateAPIKeyPathParameters;
data: BodyType<TypesStorableAPIKeyDTO>;
},
TContext TContext
> => { > => {
const mutationOptions = getUpdateAPIKeyMutationOptions(options); const mutationOptions = getUpdateAPIKeyMutationOptions(options);
@@ -1101,7 +1085,7 @@ export const useUpdateAPIKey = <
* @summary Reset password * @summary Reset password
*/ */
export const resetPassword = ( export const resetPassword = (
typesPostableResetPasswordDTO: BodyType<TypesPostableResetPasswordDTO>, typesPostableResetPasswordDTO: TypesPostableResetPasswordDTO,
signal?: AbortSignal, signal?: AbortSignal,
) => { ) => {
return GeneratedAPIInstance<void>({ return GeneratedAPIInstance<void>({
@@ -1114,19 +1098,19 @@ export const resetPassword = (
}; };
export const getResetPasswordMutationOptions = < export const getResetPasswordMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof resetPassword>>, Awaited<ReturnType<typeof resetPassword>>,
TError, TError,
{ data: BodyType<TypesPostableResetPasswordDTO> }, { data: TypesPostableResetPasswordDTO },
TContext TContext
>; >;
}): UseMutationOptions< }): UseMutationOptions<
Awaited<ReturnType<typeof resetPassword>>, Awaited<ReturnType<typeof resetPassword>>,
TError, TError,
{ data: BodyType<TypesPostableResetPasswordDTO> }, { data: TypesPostableResetPasswordDTO },
TContext TContext
> => { > => {
const mutationKey = ['resetPassword']; const mutationKey = ['resetPassword'];
@@ -1140,7 +1124,7 @@ export const getResetPasswordMutationOptions = <
const mutationFn: MutationFunction< const mutationFn: MutationFunction<
Awaited<ReturnType<typeof resetPassword>>, Awaited<ReturnType<typeof resetPassword>>,
{ data: BodyType<TypesPostableResetPasswordDTO> } { data: TypesPostableResetPasswordDTO }
> = (props) => { > = (props) => {
const { data } = props ?? {}; const { data } = props ?? {};
@@ -1153,26 +1137,26 @@ export const getResetPasswordMutationOptions = <
export type ResetPasswordMutationResult = NonNullable< export type ResetPasswordMutationResult = NonNullable<
Awaited<ReturnType<typeof resetPassword>> Awaited<ReturnType<typeof resetPassword>>
>; >;
export type ResetPasswordMutationBody = BodyType<TypesPostableResetPasswordDTO>; export type ResetPasswordMutationBody = TypesPostableResetPasswordDTO;
export type ResetPasswordMutationError = ErrorType<RenderErrorResponseDTO>; export type ResetPasswordMutationError = RenderErrorResponseDTO;
/** /**
* @summary Reset password * @summary Reset password
*/ */
export const useResetPassword = < export const useResetPassword = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof resetPassword>>, Awaited<ReturnType<typeof resetPassword>>,
TError, TError,
{ data: BodyType<TypesPostableResetPasswordDTO> }, { data: TypesPostableResetPasswordDTO },
TContext TContext
>; >;
}): UseMutationResult< }): UseMutationResult<
Awaited<ReturnType<typeof resetPassword>>, Awaited<ReturnType<typeof resetPassword>>,
TError, TError,
{ data: BodyType<TypesPostableResetPasswordDTO> }, { data: TypesPostableResetPasswordDTO },
TContext TContext
> => { > => {
const mutationOptions = getResetPasswordMutationOptions(options); const mutationOptions = getResetPasswordMutationOptions(options);
@@ -1192,12 +1176,12 @@ export const listUsers = (signal?: AbortSignal) => {
}; };
export const getListUsersQueryKey = () => { export const getListUsersQueryKey = () => {
return [`/api/v1/user`] as const; return ['listUsers'] as const;
}; };
export const getListUsersQueryOptions = < export const getListUsersQueryOptions = <
TData = Awaited<ReturnType<typeof listUsers>>, TData = Awaited<ReturnType<typeof listUsers>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions<Awaited<ReturnType<typeof listUsers>>, TError, TData>; query?: UseQueryOptions<Awaited<ReturnType<typeof listUsers>>, TError, TData>;
}) => { }) => {
@@ -1219,7 +1203,7 @@ export const getListUsersQueryOptions = <
export type ListUsersQueryResult = NonNullable< export type ListUsersQueryResult = NonNullable<
Awaited<ReturnType<typeof listUsers>> Awaited<ReturnType<typeof listUsers>>
>; >;
export type ListUsersQueryError = ErrorType<RenderErrorResponseDTO>; export type ListUsersQueryError = RenderErrorResponseDTO;
/** /**
* @summary List users * @summary List users
@@ -1227,7 +1211,7 @@ export type ListUsersQueryError = ErrorType<RenderErrorResponseDTO>;
export function useListUsers< export function useListUsers<
TData = Awaited<ReturnType<typeof listUsers>>, TData = Awaited<ReturnType<typeof listUsers>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions<Awaited<ReturnType<typeof listUsers>>, TError, TData>; query?: UseQueryOptions<Awaited<ReturnType<typeof listUsers>>, TError, TData>;
}): UseQueryResult<TData, TError> & { queryKey: QueryKey } { }): UseQueryResult<TData, TError> & { queryKey: QueryKey } {
@@ -1269,7 +1253,7 @@ export const deleteUser = ({ id }: DeleteUserPathParameters) => {
}; };
export const getDeleteUserMutationOptions = < export const getDeleteUserMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -1309,13 +1293,13 @@ export type DeleteUserMutationResult = NonNullable<
Awaited<ReturnType<typeof deleteUser>> Awaited<ReturnType<typeof deleteUser>>
>; >;
export type DeleteUserMutationError = ErrorType<RenderErrorResponseDTO>; export type DeleteUserMutationError = RenderErrorResponseDTO;
/** /**
* @summary Delete user * @summary Delete user
*/ */
export const useDeleteUser = < export const useDeleteUser = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
@@ -1350,12 +1334,12 @@ export const getUser = (
}; };
export const getGetUserQueryKey = ({ id }: GetUserPathParameters) => { export const getGetUserQueryKey = ({ id }: GetUserPathParameters) => {
return [`/api/v1/user/${id}`] as const; return ['getUser'] as const;
}; };
export const getGetUserQueryOptions = < export const getGetUserQueryOptions = <
TData = Awaited<ReturnType<typeof getUser>>, TData = Awaited<ReturnType<typeof getUser>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(
{ id }: GetUserPathParameters, { id }: GetUserPathParameters,
options?: { options?: {
@@ -1383,7 +1367,7 @@ export const getGetUserQueryOptions = <
export type GetUserQueryResult = NonNullable< export type GetUserQueryResult = NonNullable<
Awaited<ReturnType<typeof getUser>> Awaited<ReturnType<typeof getUser>>
>; >;
export type GetUserQueryError = ErrorType<RenderErrorResponseDTO>; export type GetUserQueryError = RenderErrorResponseDTO;
/** /**
* @summary Get user * @summary Get user
@@ -1391,7 +1375,7 @@ export type GetUserQueryError = ErrorType<RenderErrorResponseDTO>;
export function useGetUser< export function useGetUser<
TData = Awaited<ReturnType<typeof getUser>>, TData = Awaited<ReturnType<typeof getUser>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>( >(
{ id }: GetUserPathParameters, { id }: GetUserPathParameters,
options?: { options?: {
@@ -1431,7 +1415,7 @@ export const invalidateGetUser = async (
*/ */
export const updateUser = ( export const updateUser = (
{ id }: UpdateUserPathParameters, { id }: UpdateUserPathParameters,
typesUserDTO: BodyType<TypesUserDTO>, typesUserDTO: TypesUserDTO,
) => { ) => {
return GeneratedAPIInstance<UpdateUser200>({ return GeneratedAPIInstance<UpdateUser200>({
url: `/api/v1/user/${id}`, url: `/api/v1/user/${id}`,
@@ -1442,19 +1426,19 @@ export const updateUser = (
}; };
export const getUpdateUserMutationOptions = < export const getUpdateUserMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof updateUser>>, Awaited<ReturnType<typeof updateUser>>,
TError, TError,
{ pathParams: UpdateUserPathParameters; data: BodyType<TypesUserDTO> }, { pathParams: UpdateUserPathParameters; data: TypesUserDTO },
TContext TContext
>; >;
}): UseMutationOptions< }): UseMutationOptions<
Awaited<ReturnType<typeof updateUser>>, Awaited<ReturnType<typeof updateUser>>,
TError, TError,
{ pathParams: UpdateUserPathParameters; data: BodyType<TypesUserDTO> }, { pathParams: UpdateUserPathParameters; data: TypesUserDTO },
TContext TContext
> => { > => {
const mutationKey = ['updateUser']; const mutationKey = ['updateUser'];
@@ -1468,7 +1452,7 @@ export const getUpdateUserMutationOptions = <
const mutationFn: MutationFunction< const mutationFn: MutationFunction<
Awaited<ReturnType<typeof updateUser>>, Awaited<ReturnType<typeof updateUser>>,
{ pathParams: UpdateUserPathParameters; data: BodyType<TypesUserDTO> } { pathParams: UpdateUserPathParameters; data: TypesUserDTO }
> = (props) => { > = (props) => {
const { pathParams, data } = props ?? {}; const { pathParams, data } = props ?? {};
@@ -1481,26 +1465,26 @@ export const getUpdateUserMutationOptions = <
export type UpdateUserMutationResult = NonNullable< export type UpdateUserMutationResult = NonNullable<
Awaited<ReturnType<typeof updateUser>> Awaited<ReturnType<typeof updateUser>>
>; >;
export type UpdateUserMutationBody = BodyType<TypesUserDTO>; export type UpdateUserMutationBody = TypesUserDTO;
export type UpdateUserMutationError = ErrorType<RenderErrorResponseDTO>; export type UpdateUserMutationError = RenderErrorResponseDTO;
/** /**
* @summary Update user * @summary Update user
*/ */
export const useUpdateUser = < export const useUpdateUser = <
TError = ErrorType<RenderErrorResponseDTO>, TError = RenderErrorResponseDTO,
TContext = unknown TContext = unknown
>(options?: { >(options?: {
mutation?: UseMutationOptions< mutation?: UseMutationOptions<
Awaited<ReturnType<typeof updateUser>>, Awaited<ReturnType<typeof updateUser>>,
TError, TError,
{ pathParams: UpdateUserPathParameters; data: BodyType<TypesUserDTO> }, { pathParams: UpdateUserPathParameters; data: TypesUserDTO },
TContext TContext
>; >;
}): UseMutationResult< }): UseMutationResult<
Awaited<ReturnType<typeof updateUser>>, Awaited<ReturnType<typeof updateUser>>,
TError, TError,
{ pathParams: UpdateUserPathParameters; data: BodyType<TypesUserDTO> }, { pathParams: UpdateUserPathParameters; data: TypesUserDTO },
TContext TContext
> => { > => {
const mutationOptions = getUpdateUserMutationOptions(options); const mutationOptions = getUpdateUserMutationOptions(options);
@@ -1520,12 +1504,12 @@ export const getMyUser = (signal?: AbortSignal) => {
}; };
export const getGetMyUserQueryKey = () => { export const getGetMyUserQueryKey = () => {
return [`/api/v1/user/me`] as const; return ['getMyUser'] as const;
}; };
export const getGetMyUserQueryOptions = < export const getGetMyUserQueryOptions = <
TData = Awaited<ReturnType<typeof getMyUser>>, TData = Awaited<ReturnType<typeof getMyUser>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions<Awaited<ReturnType<typeof getMyUser>>, TError, TData>; query?: UseQueryOptions<Awaited<ReturnType<typeof getMyUser>>, TError, TData>;
}) => { }) => {
@@ -1547,7 +1531,7 @@ export const getGetMyUserQueryOptions = <
export type GetMyUserQueryResult = NonNullable< export type GetMyUserQueryResult = NonNullable<
Awaited<ReturnType<typeof getMyUser>> Awaited<ReturnType<typeof getMyUser>>
>; >;
export type GetMyUserQueryError = ErrorType<RenderErrorResponseDTO>; export type GetMyUserQueryError = RenderErrorResponseDTO;
/** /**
* @summary Get my user * @summary Get my user
@@ -1555,7 +1539,7 @@ export type GetMyUserQueryError = ErrorType<RenderErrorResponseDTO>;
export function useGetMyUser< export function useGetMyUser<
TData = Awaited<ReturnType<typeof getMyUser>>, TData = Awaited<ReturnType<typeof getMyUser>>,
TError = ErrorType<RenderErrorResponseDTO> TError = RenderErrorResponseDTO
>(options?: { >(options?: {
query?: UseQueryOptions<Awaited<ReturnType<typeof getMyUser>>, TError, TData>; query?: UseQueryOptions<Awaited<ReturnType<typeof getMyUser>>, TError, TData>;
}): UseQueryResult<TData, TError> & { queryKey: QueryKey } { }): UseQueryResult<TData, TError> & { queryKey: QueryKey } {
@@ -1584,87 +1568,3 @@ export const invalidateGetMyUser = async (
return queryClient; return queryClient;
}; };
/**
* This endpoint initiates the forgot password flow by sending a reset password email
* @summary Forgot password
*/
export const forgotPassword = (
typesPostableForgotPasswordDTO: BodyType<TypesPostableForgotPasswordDTO>,
signal?: AbortSignal,
) => {
return GeneratedAPIInstance<void>({
url: `/api/v2/factor_password/forgot`,
method: 'POST',
headers: { 'Content-Type': 'application/json' },
data: typesPostableForgotPasswordDTO,
signal,
});
};
export const getForgotPasswordMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof forgotPassword>>,
TError,
{ data: BodyType<TypesPostableForgotPasswordDTO> },
TContext
>;
}): UseMutationOptions<
Awaited<ReturnType<typeof forgotPassword>>,
TError,
{ data: BodyType<TypesPostableForgotPasswordDTO> },
TContext
> => {
const mutationKey = ['forgotPassword'];
const { mutation: mutationOptions } = options
? options.mutation &&
'mutationKey' in options.mutation &&
options.mutation.mutationKey
? options
: { ...options, mutation: { ...options.mutation, mutationKey } }
: { mutation: { mutationKey } };
const mutationFn: MutationFunction<
Awaited<ReturnType<typeof forgotPassword>>,
{ data: BodyType<TypesPostableForgotPasswordDTO> }
> = (props) => {
const { data } = props ?? {};
return forgotPassword(data);
};
return { mutationFn, ...mutationOptions };
};
export type ForgotPasswordMutationResult = NonNullable<
Awaited<ReturnType<typeof forgotPassword>>
>;
export type ForgotPasswordMutationBody = BodyType<TypesPostableForgotPasswordDTO>;
export type ForgotPasswordMutationError = ErrorType<RenderErrorResponseDTO>;
/**
* @summary Forgot password
*/
export const useForgotPassword = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof forgotPassword>>,
TError,
{ data: BodyType<TypesPostableForgotPasswordDTO> },
TContext
>;
}): UseMutationResult<
Awaited<ReturnType<typeof forgotPassword>>,
TError,
{ data: BodyType<TypesPostableForgotPasswordDTO> },
TContext
> => {
const mutationOptions = getForgotPasswordMutationOptions(options);
return useMutation(mutationOptions);
};

View File

@@ -1,272 +0,0 @@
/**
* ! Do not edit manually
* * The file has been auto-generated using Orval for SigNoz
* * regenerate with 'yarn generate:api'
* SigNoz
*/
import type {
InvalidateOptions,
MutationFunction,
QueryClient,
QueryFunction,
QueryKey,
UseMutationOptions,
UseMutationResult,
UseQueryOptions,
UseQueryResult,
} from 'react-query';
import { useMutation, useQuery } from 'react-query';
import type { BodyType, ErrorType } from '../../../generatedAPIInstance';
import { GeneratedAPIInstance } from '../../../generatedAPIInstance';
import type {
GetHosts200,
RenderErrorResponseDTO,
ZeustypesPostableHostDTO,
ZeustypesPostableProfileDTO,
} from '../sigNoz.schemas';
type AwaitedInput<T> = PromiseLike<T> | T;
type Awaited<O> = O extends AwaitedInput<infer T> ? T : never;
/**
* This endpoint gets the host info from zeus.
* @summary Get host info from Zeus.
*/
export const getHosts = (signal?: AbortSignal) => {
return GeneratedAPIInstance<GetHosts200>({
url: `/api/v2/zeus/hosts`,
method: 'GET',
signal,
});
};
export const getGetHostsQueryKey = () => {
return [`/api/v2/zeus/hosts`] as const;
};
export const getGetHostsQueryOptions = <
TData = Awaited<ReturnType<typeof getHosts>>,
TError = ErrorType<RenderErrorResponseDTO>
>(options?: {
query?: UseQueryOptions<Awaited<ReturnType<typeof getHosts>>, TError, TData>;
}) => {
const { query: queryOptions } = options ?? {};
const queryKey = queryOptions?.queryKey ?? getGetHostsQueryKey();
const queryFn: QueryFunction<Awaited<ReturnType<typeof getHosts>>> = ({
signal,
}) => getHosts(signal);
return { queryKey, queryFn, ...queryOptions } as UseQueryOptions<
Awaited<ReturnType<typeof getHosts>>,
TError,
TData
> & { queryKey: QueryKey };
};
export type GetHostsQueryResult = NonNullable<
Awaited<ReturnType<typeof getHosts>>
>;
export type GetHostsQueryError = ErrorType<RenderErrorResponseDTO>;
/**
* @summary Get host info from Zeus.
*/
export function useGetHosts<
TData = Awaited<ReturnType<typeof getHosts>>,
TError = ErrorType<RenderErrorResponseDTO>
>(options?: {
query?: UseQueryOptions<Awaited<ReturnType<typeof getHosts>>, TError, TData>;
}): UseQueryResult<TData, TError> & { queryKey: QueryKey } {
const queryOptions = getGetHostsQueryOptions(options);
const query = useQuery(queryOptions) as UseQueryResult<TData, TError> & {
queryKey: QueryKey;
};
query.queryKey = queryOptions.queryKey;
return query;
}
/**
* @summary Get host info from Zeus.
*/
export const invalidateGetHosts = async (
queryClient: QueryClient,
options?: InvalidateOptions,
): Promise<QueryClient> => {
await queryClient.invalidateQueries(
{ queryKey: getGetHostsQueryKey() },
options,
);
return queryClient;
};
/**
* This endpoint saves the host of a deployment to zeus.
* @summary Put host in Zeus for a deployment.
*/
export const putHost = (
zeustypesPostableHostDTO: BodyType<ZeustypesPostableHostDTO>,
) => {
return GeneratedAPIInstance<void>({
url: `/api/v2/zeus/hosts`,
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
data: zeustypesPostableHostDTO,
});
};
export const getPutHostMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof putHost>>,
TError,
{ data: BodyType<ZeustypesPostableHostDTO> },
TContext
>;
}): UseMutationOptions<
Awaited<ReturnType<typeof putHost>>,
TError,
{ data: BodyType<ZeustypesPostableHostDTO> },
TContext
> => {
const mutationKey = ['putHost'];
const { mutation: mutationOptions } = options
? options.mutation &&
'mutationKey' in options.mutation &&
options.mutation.mutationKey
? options
: { ...options, mutation: { ...options.mutation, mutationKey } }
: { mutation: { mutationKey } };
const mutationFn: MutationFunction<
Awaited<ReturnType<typeof putHost>>,
{ data: BodyType<ZeustypesPostableHostDTO> }
> = (props) => {
const { data } = props ?? {};
return putHost(data);
};
return { mutationFn, ...mutationOptions };
};
export type PutHostMutationResult = NonNullable<
Awaited<ReturnType<typeof putHost>>
>;
export type PutHostMutationBody = BodyType<ZeustypesPostableHostDTO>;
export type PutHostMutationError = ErrorType<RenderErrorResponseDTO>;
/**
* @summary Put host in Zeus for a deployment.
*/
export const usePutHost = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof putHost>>,
TError,
{ data: BodyType<ZeustypesPostableHostDTO> },
TContext
>;
}): UseMutationResult<
Awaited<ReturnType<typeof putHost>>,
TError,
{ data: BodyType<ZeustypesPostableHostDTO> },
TContext
> => {
const mutationOptions = getPutHostMutationOptions(options);
return useMutation(mutationOptions);
};
/**
* This endpoint saves the profile of a deployment to zeus.
* @summary Put profile in Zeus for a deployment.
*/
export const putProfile = (
zeustypesPostableProfileDTO: BodyType<ZeustypesPostableProfileDTO>,
) => {
return GeneratedAPIInstance<void>({
url: `/api/v2/zeus/profiles`,
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
data: zeustypesPostableProfileDTO,
});
};
export const getPutProfileMutationOptions = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof putProfile>>,
TError,
{ data: BodyType<ZeustypesPostableProfileDTO> },
TContext
>;
}): UseMutationOptions<
Awaited<ReturnType<typeof putProfile>>,
TError,
{ data: BodyType<ZeustypesPostableProfileDTO> },
TContext
> => {
const mutationKey = ['putProfile'];
const { mutation: mutationOptions } = options
? options.mutation &&
'mutationKey' in options.mutation &&
options.mutation.mutationKey
? options
: { ...options, mutation: { ...options.mutation, mutationKey } }
: { mutation: { mutationKey } };
const mutationFn: MutationFunction<
Awaited<ReturnType<typeof putProfile>>,
{ data: BodyType<ZeustypesPostableProfileDTO> }
> = (props) => {
const { data } = props ?? {};
return putProfile(data);
};
return { mutationFn, ...mutationOptions };
};
export type PutProfileMutationResult = NonNullable<
Awaited<ReturnType<typeof putProfile>>
>;
export type PutProfileMutationBody = BodyType<ZeustypesPostableProfileDTO>;
export type PutProfileMutationError = ErrorType<RenderErrorResponseDTO>;
/**
* @summary Put profile in Zeus for a deployment.
*/
export const usePutProfile = <
TError = ErrorType<RenderErrorResponseDTO>,
TContext = unknown
>(options?: {
mutation?: UseMutationOptions<
Awaited<ReturnType<typeof putProfile>>,
TError,
{ data: BodyType<ZeustypesPostableProfileDTO> },
TContext
>;
}): UseMutationResult<
Awaited<ReturnType<typeof putProfile>>,
TError,
{ data: BodyType<ZeustypesPostableProfileDTO> },
TContext
> => {
const mutationOptions = getPutProfileMutationOptions(options);
return useMutation(mutationOptions);
};

View File

@@ -1,27 +0,0 @@
import {
interceptorRejected,
interceptorsRequestResponse,
interceptorsResponse,
} from 'api';
import axios, { AxiosError, AxiosRequestConfig } from 'axios';
import { ENVIRONMENT } from 'constants/env';
// generated API Instance
const generatedAPIAxiosInstance = axios.create({
baseURL: ENVIRONMENT.baseURL,
});
export const GeneratedAPIInstance = <T>(
config: AxiosRequestConfig,
): Promise<T> => {
return generatedAPIAxiosInstance({ ...config }).then(({ data }) => data);
};
generatedAPIAxiosInstance.interceptors.request.use(interceptorsRequestResponse);
generatedAPIAxiosInstance.interceptors.response.use(
interceptorsResponse,
interceptorRejected,
);
export type ErrorType<Error> = AxiosError<Error>;
export type BodyType<BodyData> = BodyData;

View File

@@ -1,7 +1,6 @@
/* eslint-disable sonarjs/cognitive-complexity */ /* eslint-disable sonarjs/cognitive-complexity */
/* eslint-disable no-param-reassign */ /* eslint-disable no-param-reassign */
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
import { QueryClient } from 'react-query';
import getLocalStorageApi from 'api/browser/localstorage/get'; import getLocalStorageApi from 'api/browser/localstorage/get';
import post from 'api/v2/sessions/rotate/post'; import post from 'api/v2/sessions/rotate/post';
import afterLogin from 'AppRoutes/utils'; import afterLogin from 'AppRoutes/utils';
@@ -13,9 +12,18 @@ import axios, {
import { ENVIRONMENT } from 'constants/env'; import { ENVIRONMENT } from 'constants/env';
import { Events } from 'constants/events'; import { Events } from 'constants/events';
import { LOCALSTORAGE } from 'constants/localStorage'; import { LOCALSTORAGE } from 'constants/localStorage';
import { QueryClient } from 'react-query';
import { eventEmitter } from 'utils/getEventEmitter'; import { eventEmitter } from 'utils/getEventEmitter';
import apiV1, { apiAlertManager, apiV2, apiV3, apiV4, apiV5 } from './apiV1'; import apiV1, {
apiAlertManager,
apiV2,
apiV3,
apiV4,
apiV5,
gatewayApiV1,
gatewayApiV2,
} from './apiV1';
import { Logout } from './utils'; import { Logout } from './utils';
const RESPONSE_TIMEOUT_THRESHOLD = 5000; // 5 seconds const RESPONSE_TIMEOUT_THRESHOLD = 5000; // 5 seconds
@@ -28,7 +36,7 @@ const queryClient = new QueryClient({
}, },
}); });
export const interceptorsResponse = ( const interceptorsResponse = (
value: AxiosResponse<any>, value: AxiosResponse<any>,
): Promise<AxiosResponse<any>> => { ): Promise<AxiosResponse<any>> => {
if ((value.config as any)?.metadata) { if ((value.config as any)?.metadata) {
@@ -51,7 +59,7 @@ export const interceptorsResponse = (
return Promise.resolve(value); return Promise.resolve(value);
}; };
export const interceptorsRequestResponse = ( const interceptorsRequestResponse = (
value: InternalAxiosRequestConfig, value: InternalAxiosRequestConfig,
): InternalAxiosRequestConfig => { ): InternalAxiosRequestConfig => {
// Attach metadata safely (not sent with the request) // Attach metadata safely (not sent with the request)
@@ -69,7 +77,7 @@ export const interceptorsRequestResponse = (
return value; return value;
}; };
export const interceptorRejected = async ( const interceptorRejected = async (
value: AxiosResponse<any>, value: AxiosResponse<any>,
): Promise<AxiosResponse<any>> => { ): Promise<AxiosResponse<any>> => {
try { try {
@@ -203,6 +211,43 @@ LogEventAxiosInstance.interceptors.response.use(
LogEventAxiosInstance.interceptors.request.use(interceptorsRequestResponse); LogEventAxiosInstance.interceptors.request.use(interceptorsRequestResponse);
// //
// gateway Api V1
export const GatewayApiV1Instance = axios.create({
baseURL: `${ENVIRONMENT.baseURL}${gatewayApiV1}`,
});
GatewayApiV1Instance.interceptors.response.use(
interceptorsResponse,
interceptorRejected,
);
GatewayApiV1Instance.interceptors.request.use(interceptorsRequestResponse);
//
// gateway Api V2
export const GatewayApiV2Instance = axios.create({
baseURL: `${ENVIRONMENT.baseURL}${gatewayApiV2}`,
});
// generated API Instance
export const GeneratedAPIInstance = axios.create({
baseURL: ENVIRONMENT.baseURL,
});
GeneratedAPIInstance.interceptors.request.use(interceptorsRequestResponse);
GeneratedAPIInstance.interceptors.response.use(
interceptorsResponse,
interceptorRejected,
);
GatewayApiV2Instance.interceptors.response.use(
interceptorsResponse,
interceptorRejected,
);
GatewayApiV2Instance.interceptors.request.use(interceptorsRequestResponse);
//
AxiosAlertManagerInstance.interceptors.response.use( AxiosAlertManagerInstance.interceptors.response.use(
interceptorsResponse, interceptorsResponse,
interceptorRejected, interceptorRejected,

View File

@@ -11,10 +11,13 @@ export const getMetricMetadata = async (
): Promise<SuccessResponseV2<MetricMetadataResponse> | ErrorResponseV2> => { ): Promise<SuccessResponseV2<MetricMetadataResponse> | ErrorResponseV2> => {
try { try {
const encodedMetricName = encodeURIComponent(metricName); const encodedMetricName = encodeURIComponent(metricName);
const response = await axios.get(`/metrics/${encodedMetricName}/metadata`, { const response = await axios.get(
signal, `/metrics/metadata?metricName=${encodedMetricName}`,
headers, {
}); signal,
headers,
},
);
return { return {
httpStatusCode: response.status, httpStatusCode: response.status,

View File

@@ -0,0 +1,20 @@
import { GatewayApiV2Instance } from 'api';
import { ErrorResponse, SuccessResponse } from 'types/api';
import { UpdateProfileProps } from 'types/api/onboarding/types';
const updateProfile = async (
props: UpdateProfileProps,
): Promise<SuccessResponse<UpdateProfileProps> | ErrorResponse> => {
const response = await GatewayApiV2Instance.put('/profiles/me', {
...props,
});
return {
statusCode: 200,
error: null,
message: response.data.status,
payload: response.data.data,
};
};
export default updateProfile;

View File

@@ -1,5 +1,5 @@
import { useMutation, UseMutationResult } from 'react-query';
import axios from 'api'; import axios from 'api';
import { useMutation, UseMutationResult } from 'react-query';
export interface DeleteDowntimeScheduleProps { export interface DeleteDowntimeScheduleProps {
id?: number; id?: number;

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