diff --git a/.devenv/docker/clickhouse/compose.yaml b/.devenv/docker/clickhouse/compose.yaml
index 6ab934337d05..e8c72d679ef7 100644
--- a/.devenv/docker/clickhouse/compose.yaml
+++ b/.devenv/docker/clickhouse/compose.yaml
@@ -40,7 +40,7 @@ services:
timeout: 5s
retries: 3
schema-migrator-sync:
- image: signoz/signoz-schema-migrator:v0.128.0
+ image: signoz/signoz-schema-migrator:v0.128.2
container_name: schema-migrator-sync
command:
- sync
@@ -53,7 +53,7 @@ services:
condition: service_healthy
restart: on-failure
schema-migrator-async:
- image: signoz/signoz-schema-migrator:v0.128.0
+ image: signoz/signoz-schema-migrator:v0.128.2
container_name: schema-migrator-async
command:
- async
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 9758323f7d9e..099383f29faf 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -7,14 +7,38 @@
/frontend/src/container/NewWidget/RightContainer/types.ts @srikanthccv
/deploy/ @SigNoz/devops
.github @SigNoz/devops
+
+# Scaffold Owners
/pkg/config/ @grandwizard28
/pkg/errors/ @grandwizard28
/pkg/factory/ @grandwizard28
/pkg/types/ @grandwizard28
+/pkg/valuer/ @grandwizard28
+/cmd/ @grandwizard28
.golangci.yml @grandwizard28
+
+# Zeus Owners
/pkg/zeus/ @vikrantgupta25
-/pkg/licensing/ @vikrantgupta25
-/pkg/sqlmigration/ @vikrantgupta25
/ee/zeus/ @vikrantgupta25
+/pkg/licensing/ @vikrantgupta25
/ee/licensing/ @vikrantgupta25
-/ee/sqlmigration/ @vikrantgupta25
\ No newline at end of file
+
+# SQL Owners
+/pkg/sqlmigration/ @vikrantgupta25
+/ee/sqlmigration/ @vikrantgupta25
+/pkg/sqlschema/ @vikrantgupta25
+/ee/sqlschema/ @vikrantgupta25
+
+# Analytics Owners
+/pkg/analytics/ @vikrantgupta25
+/pkg/statsreporter/ @vikrantgupta25
+
+# Querier Owners
+/pkg/querier/ @srikanthccv
+/pkg/variables/ @srikanthccv
+/pkg/types/querybuildertypes/ @srikanthccv
+/pkg/querybuilder/ @srikanthccv
+/pkg/telemetrylogs/ @srikanthccv
+/pkg/telemetrymetadata/ @srikanthccv
+/pkg/telemetrymetrics/ @srikanthccv
+/pkg/telemetrytraces/ @srikanthccv
diff --git a/.github/workflows/build-community.yaml b/.github/workflows/build-community.yaml
index b0d0ec70b326..1a80393c7ba0 100644
--- a/.github/workflows/build-community.yaml
+++ b/.github/workflows/build-community.yaml
@@ -66,7 +66,7 @@ jobs:
GO_NAME: signoz-community
GO_INPUT_ARTIFACT_CACHE_KEY: community-jsbuild-${{ github.sha }}
GO_INPUT_ARTIFACT_PATH: frontend/build
- GO_BUILD_CONTEXT: ./pkg/query-service
+ GO_BUILD_CONTEXT: ./cmd/community
GO_BUILD_FLAGS: >-
-tags timetzdata
-ldflags='-linkmode external -extldflags \"-static\" -s -w
@@ -78,6 +78,6 @@ jobs:
-X github.com/SigNoz/signoz/pkg/analytics.key=9kRrJ7oPCGPEJLF6QjMPLt5bljFhRQBr'
GO_CGO_ENABLED: 1
DOCKER_BASE_IMAGES: '{"alpine": "alpine:3.20.3"}'
- DOCKER_DOCKERFILE_PATH: ./pkg/query-service/Dockerfile.multi-arch
+ DOCKER_DOCKERFILE_PATH: ./cmd/community/Dockerfile.multi-arch
DOCKER_MANIFEST: true
DOCKER_PROVIDERS: dockerhub
diff --git a/.github/workflows/build-enterprise.yaml b/.github/workflows/build-enterprise.yaml
index 36aba8533f98..abc8ddaf0c76 100644
--- a/.github/workflows/build-enterprise.yaml
+++ b/.github/workflows/build-enterprise.yaml
@@ -96,7 +96,7 @@ jobs:
GO_VERSION: 1.23
GO_INPUT_ARTIFACT_CACHE_KEY: enterprise-jsbuild-${{ github.sha }}
GO_INPUT_ARTIFACT_PATH: frontend/build
- GO_BUILD_CONTEXT: ./ee/query-service
+ GO_BUILD_CONTEXT: ./cmd/enterprise
GO_BUILD_FLAGS: >-
-tags timetzdata
-ldflags='-linkmode external -extldflags \"-static\" -s -w
@@ -112,6 +112,6 @@ jobs:
-X github.com/SigNoz/signoz/pkg/analytics.key=9kRrJ7oPCGPEJLF6QjMPLt5bljFhRQBr'
GO_CGO_ENABLED: 1
DOCKER_BASE_IMAGES: '{"alpine": "alpine:3.20.3"}'
- DOCKER_DOCKERFILE_PATH: ./ee/query-service/Dockerfile.multi-arch
+ DOCKER_DOCKERFILE_PATH: ./cmd/enterprise/Dockerfile.multi-arch
DOCKER_MANIFEST: true
DOCKER_PROVIDERS: ${{ needs.prepare.outputs.docker_providers }}
diff --git a/.github/workflows/build-staging.yaml b/.github/workflows/build-staging.yaml
index dec3ba121772..89d829c67076 100644
--- a/.github/workflows/build-staging.yaml
+++ b/.github/workflows/build-staging.yaml
@@ -95,7 +95,7 @@ jobs:
GO_VERSION: 1.23
GO_INPUT_ARTIFACT_CACHE_KEY: staging-jsbuild-${{ github.sha }}
GO_INPUT_ARTIFACT_PATH: frontend/build
- GO_BUILD_CONTEXT: ./ee/query-service
+ GO_BUILD_CONTEXT: ./cmd/enterprise
GO_BUILD_FLAGS: >-
-tags timetzdata
-ldflags='-linkmode external -extldflags \"-static\" -s -w
@@ -111,7 +111,7 @@ jobs:
-X github.com/SigNoz/signoz/pkg/analytics.key=9kRrJ7oPCGPEJLF6QjMPLt5bljFhRQBr'
GO_CGO_ENABLED: 1
DOCKER_BASE_IMAGES: '{"alpine": "alpine:3.20.3"}'
- DOCKER_DOCKERFILE_PATH: ./ee/query-service/Dockerfile.multi-arch
+ DOCKER_DOCKERFILE_PATH: ./cmd/enterprise/Dockerfile.multi-arch
DOCKER_MANIFEST: true
DOCKER_PROVIDERS: gcp
staging:
diff --git a/.github/workflows/gor-signoz-community.yaml b/.github/workflows/gor-signoz-community.yaml
index 5fb3ff1cb55d..5e3b51c92228 100644
--- a/.github/workflows/gor-signoz-community.yaml
+++ b/.github/workflows/gor-signoz-community.yaml
@@ -36,7 +36,7 @@ jobs:
- ubuntu-latest
- macos-latest
env:
- CONFIG_PATH: pkg/query-service/.goreleaser.yaml
+ CONFIG_PATH: cmd/community/.goreleaser.yaml
runs-on: ${{ matrix.os }}
steps:
- name: checkout
@@ -100,7 +100,7 @@ jobs:
needs: build
env:
DOCKER_CLI_EXPERIMENTAL: "enabled"
- WORKDIR: pkg/query-service
+ WORKDIR: cmd/community
steps:
- name: checkout
uses: actions/checkout@v4
diff --git a/.github/workflows/gor-signoz.yaml b/.github/workflows/gor-signoz.yaml
index 4f8f923fe834..dc70413aff01 100644
--- a/.github/workflows/gor-signoz.yaml
+++ b/.github/workflows/gor-signoz.yaml
@@ -50,7 +50,7 @@ jobs:
- ubuntu-latest
- macos-latest
env:
- CONFIG_PATH: ee/query-service/.goreleaser.yaml
+ CONFIG_PATH: cmd/enterprise/.goreleaser.yaml
runs-on: ${{ matrix.os }}
steps:
- name: checkout
diff --git a/.github/workflows/integrationci.yaml b/.github/workflows/integrationci.yaml
index f756f3865585..d1d39e2eb08e 100644
--- a/.github/workflows/integrationci.yaml
+++ b/.github/workflows/integrationci.yaml
@@ -20,9 +20,9 @@ jobs:
- sqlite
clickhouse-version:
- 24.1.2-alpine
- - 24.12-alpine
+ - 25.5.6
schema-migrator-version:
- - v0.128.0
+ - v0.128.1
postgres-version:
- 15
if: |
diff --git a/LICENSE b/LICENSE
index 2fef891b370a..7e1ae4f6bad7 100644
--- a/LICENSE
+++ b/LICENSE
@@ -2,7 +2,7 @@ Copyright (c) 2020-present SigNoz Inc.
Portions of this software are licensed as follows:
-* All content that resides under the "ee/" directory of this repository, if that directory exists, is licensed under the license defined in "ee/LICENSE".
+* All content that resides under the "ee/" and the "cmd/enterprise/" directory of this repository, if that directory exists, is licensed under the license defined in "ee/LICENSE".
* All third party components incorporated into the SigNoz Software are licensed under the original license provided by the owner of the applicable component.
* Content outside of the above mentioned directories or restrictions above is available under the "MIT Expat" license as defined below.
diff --git a/Makefile b/Makefile
index 31b1764b206a..061bffc64ee4 100644
--- a/Makefile
+++ b/Makefile
@@ -20,18 +20,18 @@ GO_BUILD_LDFLAG_LICENSE_SIGNOZ_IO = -X github.com/SigNoz/signoz/ee/zeus.depreca
GO_BUILD_VERSION_LDFLAGS = -X github.com/SigNoz/signoz/pkg/version.version=$(VERSION) -X github.com/SigNoz/signoz/pkg/version.hash=$(COMMIT_SHORT_SHA) -X github.com/SigNoz/signoz/pkg/version.time=$(TIMESTAMP) -X github.com/SigNoz/signoz/pkg/version.branch=$(BRANCH_NAME)
GO_BUILD_ARCHS_COMMUNITY = $(addprefix go-build-community-,$(ARCHS))
-GO_BUILD_CONTEXT_COMMUNITY = $(SRC)/pkg/query-service
+GO_BUILD_CONTEXT_COMMUNITY = $(SRC)/cmd/community
GO_BUILD_LDFLAGS_COMMUNITY = $(GO_BUILD_VERSION_LDFLAGS) -X github.com/SigNoz/signoz/pkg/version.variant=community
GO_BUILD_ARCHS_ENTERPRISE = $(addprefix go-build-enterprise-,$(ARCHS))
GO_BUILD_ARCHS_ENTERPRISE_RACE = $(addprefix go-build-enterprise-race-,$(ARCHS))
-GO_BUILD_CONTEXT_ENTERPRISE = $(SRC)/ee/query-service
+GO_BUILD_CONTEXT_ENTERPRISE = $(SRC)/cmd/enterprise
GO_BUILD_LDFLAGS_ENTERPRISE = $(GO_BUILD_VERSION_LDFLAGS) -X github.com/SigNoz/signoz/pkg/version.variant=enterprise $(GO_BUILD_LDFLAG_ZEUS_URL) $(GO_BUILD_LDFLAG_LICENSE_SIGNOZ_IO)
DOCKER_BUILD_ARCHS_COMMUNITY = $(addprefix docker-build-community-,$(ARCHS))
-DOCKERFILE_COMMUNITY = $(SRC)/pkg/query-service/Dockerfile
+DOCKERFILE_COMMUNITY = $(SRC)/cmd/community/Dockerfile
DOCKER_REGISTRY_COMMUNITY ?= docker.io/signoz/signoz-community
DOCKER_BUILD_ARCHS_ENTERPRISE = $(addprefix docker-build-enterprise-,$(ARCHS))
-DOCKERFILE_ENTERPRISE = $(SRC)/ee/query-service/Dockerfile
+DOCKERFILE_ENTERPRISE = $(SRC)/cmd/enterprise/Dockerfile
DOCKER_REGISTRY_ENTERPRISE ?= docker.io/signoz/signoz
JS_BUILD_CONTEXT = $(SRC)/frontend
@@ -74,7 +74,7 @@ go-run-enterprise: ## Runs the enterprise go backend server
SIGNOZ_TELEMETRYSTORE_PROVIDER=clickhouse \
SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://127.0.0.1:9000 \
go run -race \
- $(GO_BUILD_CONTEXT_ENTERPRISE)/main.go \
+ $(GO_BUILD_CONTEXT_ENTERPRISE)/*.go \
--config ./conf/prometheus.yml \
--cluster cluster
@@ -92,7 +92,7 @@ go-run-community: ## Runs the community go backend server
SIGNOZ_TELEMETRYSTORE_PROVIDER=clickhouse \
SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://127.0.0.1:9000 \
go run -race \
- $(GO_BUILD_CONTEXT_COMMUNITY)/main.go \
+ $(GO_BUILD_CONTEXT_COMMUNITY)/*.go \
--config ./conf/prometheus.yml \
--cluster cluster
diff --git a/README.md b/README.md
index cc0925878a77..b3c4c83d8f07 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,6 @@
All your logs, metrics, and traces in one place. Monitor your application, spot issues before they occur and troubleshoot downtime quickly with rich context. SigNoz is a cost-effective open-source alternative to Datadog and New Relic. Visit signoz.io for the full documentation, tutorials, and guide.
-
@@ -231,6 +230,8 @@ Not sure how to get started? Just ping us on `#contributing` in our [slack commu
- [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
diff --git a/pkg/query-service/.goreleaser.yaml b/cmd/community/.goreleaser.yaml
similarity index 97%
rename from pkg/query-service/.goreleaser.yaml
rename to cmd/community/.goreleaser.yaml
index 3ffd74d07f76..16a7fe7d95e4 100644
--- a/pkg/query-service/.goreleaser.yaml
+++ b/cmd/community/.goreleaser.yaml
@@ -11,7 +11,7 @@ before:
builds:
- id: signoz
binary: bin/signoz
- main: pkg/query-service/main.go
+ main: cmd/community
env:
- CGO_ENABLED=1
- >-
diff --git a/pkg/query-service/Dockerfile b/cmd/community/Dockerfile
similarity index 91%
rename from pkg/query-service/Dockerfile
rename to cmd/community/Dockerfile
index 38609cc182fa..22433506f6a2 100644
--- a/pkg/query-service/Dockerfile
+++ b/cmd/community/Dockerfile
@@ -16,4 +16,4 @@ COPY frontend/build/ /etc/signoz/web/
RUN chmod 755 /root /root/signoz
-ENTRYPOINT ["./signoz"]
+ENTRYPOINT ["./signoz", "server"]
\ No newline at end of file
diff --git a/pkg/query-service/Dockerfile.multi-arch b/cmd/community/Dockerfile.multi-arch
similarity index 90%
rename from pkg/query-service/Dockerfile.multi-arch
rename to cmd/community/Dockerfile.multi-arch
index 229b50d84349..3a6c479a604e 100644
--- a/pkg/query-service/Dockerfile.multi-arch
+++ b/cmd/community/Dockerfile.multi-arch
@@ -17,4 +17,4 @@ COPY frontend/build/ /etc/signoz/web/
RUN chmod 755 /root /root/signoz-community
-ENTRYPOINT ["./signoz-community"]
+ENTRYPOINT ["./signoz-community", "server"]
diff --git a/cmd/community/main.go b/cmd/community/main.go
new file mode 100644
index 000000000000..e188635734d3
--- /dev/null
+++ b/cmd/community/main.go
@@ -0,0 +1,18 @@
+package main
+
+import (
+ "log/slog"
+
+ "github.com/SigNoz/signoz/cmd"
+ "github.com/SigNoz/signoz/pkg/instrumentation"
+)
+
+func main() {
+ // initialize logger for logging in the cmd/ package. This logger is different from the logger used in the application.
+ logger := instrumentation.NewLogger(instrumentation.Config{Logs: instrumentation.LogsConfig{Level: slog.LevelInfo}})
+
+ // register a list of commands to the root command
+ registerServer(cmd.RootCmd, logger)
+
+ cmd.Execute(logger)
+}
diff --git a/cmd/community/server.go b/cmd/community/server.go
new file mode 100644
index 000000000000..9def8a147ace
--- /dev/null
+++ b/cmd/community/server.go
@@ -0,0 +1,116 @@
+package main
+
+import (
+ "context"
+ "log/slog"
+ "time"
+
+ "github.com/SigNoz/signoz/cmd"
+ "github.com/SigNoz/signoz/ee/sqlstore/postgressqlstore"
+ "github.com/SigNoz/signoz/pkg/analytics"
+ "github.com/SigNoz/signoz/pkg/factory"
+ "github.com/SigNoz/signoz/pkg/licensing"
+ "github.com/SigNoz/signoz/pkg/licensing/nooplicensing"
+ "github.com/SigNoz/signoz/pkg/modules/organization"
+ "github.com/SigNoz/signoz/pkg/query-service/app"
+ "github.com/SigNoz/signoz/pkg/signoz"
+ "github.com/SigNoz/signoz/pkg/sqlschema"
+ "github.com/SigNoz/signoz/pkg/sqlstore"
+ "github.com/SigNoz/signoz/pkg/sqlstore/sqlstorehook"
+ "github.com/SigNoz/signoz/pkg/types/authtypes"
+ "github.com/SigNoz/signoz/pkg/version"
+ "github.com/SigNoz/signoz/pkg/zeus"
+ "github.com/SigNoz/signoz/pkg/zeus/noopzeus"
+ "github.com/spf13/cobra"
+)
+
+func registerServer(parentCmd *cobra.Command, logger *slog.Logger) {
+ var flags signoz.DeprecatedFlags
+
+ serverCmd := &cobra.Command{
+ Use: "server",
+ Short: "Run the SigNoz server",
+ FParseErrWhitelist: cobra.FParseErrWhitelist{UnknownFlags: true},
+ RunE: func(currCmd *cobra.Command, args []string) error {
+ config, err := cmd.NewSigNozConfig(currCmd.Context(), flags)
+ if err != nil {
+ return err
+ }
+
+ return runServer(currCmd.Context(), config, logger)
+ },
+ }
+
+ flags.RegisterFlags(serverCmd)
+ parentCmd.AddCommand(serverCmd)
+}
+
+func runServer(ctx context.Context, config signoz.Config, logger *slog.Logger) error {
+ // print the version
+ version.Info.PrettyPrint(config.Version)
+
+ // add enterprise sqlstore factories to the community sqlstore factories
+ sqlstoreFactories := signoz.NewSQLStoreProviderFactories()
+ if err := sqlstoreFactories.Add(postgressqlstore.NewFactory(sqlstorehook.NewLoggingFactory())); err != nil {
+ logger.ErrorContext(ctx, "failed to add postgressqlstore factory", "error", err)
+ return err
+ }
+
+ jwt := authtypes.NewJWT(cmd.NewJWTSecret(ctx, logger), 30*time.Minute, 30*24*time.Hour)
+
+ signoz, err := signoz.New(
+ ctx,
+ config,
+ jwt,
+ zeus.Config{},
+ noopzeus.NewProviderFactory(),
+ licensing.Config{},
+ func(_ sqlstore.SQLStore, _ zeus.Zeus, _ organization.Getter, _ analytics.Analytics) factory.ProviderFactory[licensing.Licensing, licensing.Config] {
+ return nooplicensing.NewFactory()
+ },
+ signoz.NewEmailingProviderFactories(),
+ signoz.NewCacheProviderFactories(),
+ signoz.NewWebProviderFactories(),
+ func(sqlstore sqlstore.SQLStore) factory.NamedMap[factory.ProviderFactory[sqlschema.SQLSchema, sqlschema.Config]] {
+ return signoz.NewSQLSchemaProviderFactories(sqlstore)
+ },
+ signoz.NewSQLStoreProviderFactories(),
+ signoz.NewTelemetryStoreProviderFactories(),
+ )
+ if err != nil {
+ logger.ErrorContext(ctx, "failed to create signoz", "error", err)
+ return err
+ }
+
+ server, err := app.NewServer(config, signoz, jwt)
+ if err != nil {
+ logger.ErrorContext(ctx, "failed to create server", "error", err)
+ return err
+ }
+
+ if err := server.Start(ctx); err != nil {
+ logger.ErrorContext(ctx, "failed to start server", "error", err)
+ return err
+ }
+
+ signoz.Start(ctx)
+
+ if err := signoz.Wait(ctx); err != nil {
+ logger.ErrorContext(ctx, "failed to start signoz", "error", err)
+ return err
+ }
+
+ err = server.Stop(ctx)
+ if err != nil {
+ logger.ErrorContext(ctx, "failed to stop server", "error", err)
+ return err
+ }
+
+ err = signoz.Stop(ctx)
+ if err != nil {
+ logger.ErrorContext(ctx, "failed to stop signoz", "error", err)
+ return err
+ }
+
+ return nil
+}
diff --git a/cmd/config.go b/cmd/config.go
new file mode 100644
index 000000000000..4e627c4f91d1
--- /dev/null
+++ b/cmd/config.go
@@ -0,0 +1,45 @@
+package cmd
+
+import (
+ "context"
+ "fmt"
+ "log/slog"
+ "os"
+
+ "github.com/SigNoz/signoz/pkg/config"
+ "github.com/SigNoz/signoz/pkg/config/envprovider"
+ "github.com/SigNoz/signoz/pkg/config/fileprovider"
+ "github.com/SigNoz/signoz/pkg/signoz"
+)
+
+func NewSigNozConfig(ctx context.Context, flags signoz.DeprecatedFlags) (signoz.Config, error) {
+ config, err := signoz.NewConfig(
+ ctx,
+ config.ResolverConfig{
+ Uris: []string{"env:"},
+ ProviderFactories: []config.ProviderFactory{
+ envprovider.NewFactory(),
+ fileprovider.NewFactory(),
+ },
+ },
+ flags,
+ )
+ if err != nil {
+ return signoz.Config{}, err
+ }
+
+ return config, nil
+}
+
+func NewJWTSecret(_ context.Context, _ *slog.Logger) string {
+ jwtSecret := os.Getenv("SIGNOZ_JWT_SECRET")
+ if len(jwtSecret) == 0 {
+ fmt.Println("🚨 CRITICAL SECURITY ISSUE: No JWT secret key specified!")
+ fmt.Println("SIGNOZ_JWT_SECRET environment variable is not set. This has dire consequences for the security of the application.")
+ fmt.Println("Without a JWT secret, user sessions are vulnerable to tampering and unauthorized access.")
+ fmt.Println("Please set the SIGNOZ_JWT_SECRET environment variable immediately.")
+ fmt.Println("For more information, please refer to https://github.com/SigNoz/signoz/issues/8400.")
+ }
+
+ return jwtSecret
+}
diff --git a/ee/query-service/.goreleaser.yaml b/cmd/enterprise/.goreleaser.yaml
similarity index 98%
rename from ee/query-service/.goreleaser.yaml
rename to cmd/enterprise/.goreleaser.yaml
index e3982597d11c..43d3e9d34025 100644
--- a/ee/query-service/.goreleaser.yaml
+++ b/cmd/enterprise/.goreleaser.yaml
@@ -11,7 +11,7 @@ before:
builds:
- id: signoz
binary: bin/signoz
- main: ee/query-service/main.go
+ main: cmd/enterprise
env:
- CGO_ENABLED=1
- >-
diff --git a/ee/query-service/Dockerfile b/cmd/enterprise/Dockerfile
similarity index 90%
rename from ee/query-service/Dockerfile
rename to cmd/enterprise/Dockerfile
index 2c8a7cd809fe..798055afb1fa 100644
--- a/ee/query-service/Dockerfile
+++ b/cmd/enterprise/Dockerfile
@@ -16,4 +16,4 @@ COPY frontend/build/ /etc/signoz/web/
RUN chmod 755 /root /root/signoz
-ENTRYPOINT ["./signoz"]
\ No newline at end of file
+ENTRYPOINT ["./signoz", "server"]
diff --git a/ee/query-service/Dockerfile.integration b/cmd/enterprise/Dockerfile.integration
similarity index 92%
rename from ee/query-service/Dockerfile.integration
rename to cmd/enterprise/Dockerfile.integration
index 40a76a5bbca6..fe3eb583f7c3 100644
--- a/ee/query-service/Dockerfile.integration
+++ b/cmd/enterprise/Dockerfile.integration
@@ -23,6 +23,7 @@ COPY go.mod go.sum ./
RUN go mod download
+COPY ./cmd/ ./cmd/
COPY ./ee/ ./ee/
COPY ./pkg/ ./pkg/
COPY ./templates/email /root/templates
@@ -33,4 +34,4 @@ RUN mv /root/linux-${TARGETARCH}/signoz /root/signoz
RUN chmod 755 /root /root/signoz
-ENTRYPOINT ["/root/signoz"]
+ENTRYPOINT ["/root/signoz", "server"]
diff --git a/ee/query-service/Dockerfile.multi-arch b/cmd/enterprise/Dockerfile.multi-arch
similarity index 92%
rename from ee/query-service/Dockerfile.multi-arch
rename to cmd/enterprise/Dockerfile.multi-arch
index 1bf8b8b43d08..776548fcb9da 100644
--- a/ee/query-service/Dockerfile.multi-arch
+++ b/cmd/enterprise/Dockerfile.multi-arch
@@ -17,4 +17,4 @@ COPY frontend/build/ /etc/signoz/web/
RUN chmod 755 /root /root/signoz
-ENTRYPOINT ["./signoz"]
+ENTRYPOINT ["./signoz", "server"]
diff --git a/cmd/enterprise/main.go b/cmd/enterprise/main.go
new file mode 100644
index 000000000000..e188635734d3
--- /dev/null
+++ b/cmd/enterprise/main.go
@@ -0,0 +1,18 @@
+package main
+
+import (
+ "log/slog"
+
+ "github.com/SigNoz/signoz/cmd"
+ "github.com/SigNoz/signoz/pkg/instrumentation"
+)
+
+func main() {
+ // initialize logger for logging in the cmd/ package. This logger is different from the logger used in the application.
+ logger := instrumentation.NewLogger(instrumentation.Config{Logs: instrumentation.LogsConfig{Level: slog.LevelInfo}})
+
+ // register a list of commands to the root command
+ registerServer(cmd.RootCmd, logger)
+
+ cmd.Execute(logger)
+}
diff --git a/cmd/enterprise/server.go b/cmd/enterprise/server.go
new file mode 100644
index 000000000000..56344ea8b2eb
--- /dev/null
+++ b/cmd/enterprise/server.go
@@ -0,0 +1,124 @@
+package main
+
+import (
+ "context"
+ "log/slog"
+ "time"
+
+ "github.com/SigNoz/signoz/cmd"
+ enterpriselicensing "github.com/SigNoz/signoz/ee/licensing"
+ "github.com/SigNoz/signoz/ee/licensing/httplicensing"
+ enterpriseapp "github.com/SigNoz/signoz/ee/query-service/app"
+ "github.com/SigNoz/signoz/ee/sqlschema/postgressqlschema"
+ "github.com/SigNoz/signoz/ee/sqlstore/postgressqlstore"
+ enterprisezeus "github.com/SigNoz/signoz/ee/zeus"
+ "github.com/SigNoz/signoz/ee/zeus/httpzeus"
+ "github.com/SigNoz/signoz/pkg/analytics"
+ "github.com/SigNoz/signoz/pkg/factory"
+ "github.com/SigNoz/signoz/pkg/licensing"
+ "github.com/SigNoz/signoz/pkg/modules/organization"
+ "github.com/SigNoz/signoz/pkg/signoz"
+ "github.com/SigNoz/signoz/pkg/sqlschema"
+ "github.com/SigNoz/signoz/pkg/sqlstore"
+ "github.com/SigNoz/signoz/pkg/sqlstore/sqlstorehook"
+ "github.com/SigNoz/signoz/pkg/types/authtypes"
+ "github.com/SigNoz/signoz/pkg/version"
+ "github.com/SigNoz/signoz/pkg/zeus"
+ "github.com/spf13/cobra"
+)
+
+func registerServer(parentCmd *cobra.Command, logger *slog.Logger) {
+ var flags signoz.DeprecatedFlags
+
+ serverCmd := &cobra.Command{
+ Use: "server",
+ Short: "Run the SigNoz server",
+ FParseErrWhitelist: cobra.FParseErrWhitelist{UnknownFlags: true},
+ RunE: func(currCmd *cobra.Command, args []string) error {
+ config, err := cmd.NewSigNozConfig(currCmd.Context(), flags)
+ if err != nil {
+ return err
+ }
+
+ return runServer(currCmd.Context(), config, logger)
+ },
+ }
+
+ flags.RegisterFlags(serverCmd)
+ parentCmd.AddCommand(serverCmd)
+}
+
+func runServer(ctx context.Context, config signoz.Config, logger *slog.Logger) error {
+ // print the version
+ version.Info.PrettyPrint(config.Version)
+
+ // add enterprise sqlstore factories to the community sqlstore factories
+ sqlstoreFactories := signoz.NewSQLStoreProviderFactories()
+ if err := sqlstoreFactories.Add(postgressqlstore.NewFactory(sqlstorehook.NewLoggingFactory())); err != nil {
+ logger.ErrorContext(ctx, "failed to add postgressqlstore factory", "error", err)
+ return err
+ }
+
+ jwt := authtypes.NewJWT(cmd.NewJWTSecret(ctx, logger), 30*time.Minute, 30*24*time.Hour)
+
+ signoz, err := signoz.New(
+ ctx,
+ config,
+ jwt,
+ enterprisezeus.Config(),
+ httpzeus.NewProviderFactory(),
+ enterpriselicensing.Config(24*time.Hour, 3),
+ func(sqlstore sqlstore.SQLStore, zeus zeus.Zeus, orgGetter organization.Getter, analytics analytics.Analytics) factory.ProviderFactory[licensing.Licensing, licensing.Config] {
+ return httplicensing.NewProviderFactory(sqlstore, zeus, orgGetter, analytics)
+ },
+ signoz.NewEmailingProviderFactories(),
+ signoz.NewCacheProviderFactories(),
+ signoz.NewWebProviderFactories(),
+ func(sqlstore sqlstore.SQLStore) factory.NamedMap[factory.ProviderFactory[sqlschema.SQLSchema, sqlschema.Config]] {
+ existingFactories := signoz.NewSQLSchemaProviderFactories(sqlstore)
+ if err := existingFactories.Add(postgressqlschema.NewFactory(sqlstore)); err != nil {
+ panic(err)
+ }
+
+ return existingFactories
+ },
+ sqlstoreFactories,
+ signoz.NewTelemetryStoreProviderFactories(),
+ )
+ if err != nil {
+ logger.ErrorContext(ctx, "failed to create signoz", "error", err)
+ return err
+ }
+
+ server, err := enterpriseapp.NewServer(config, signoz, jwt)
+ if err != nil {
+ logger.ErrorContext(ctx, "failed to create server", "error", err)
+ return err
+ }
+
+ if err := server.Start(ctx); err != nil {
+ logger.ErrorContext(ctx, "failed to start server", "error", err)
+ return err
+ }
+
+ signoz.Start(ctx)
+
+ if err := signoz.Wait(ctx); err != nil {
+ logger.ErrorContext(ctx, "failed to start signoz", "error", err)
+ return err
+ }
+
+ err = server.Stop(ctx)
+ if err != nil {
+ logger.ErrorContext(ctx, "failed to stop server", "error", err)
+ return err
+ }
+
+ err = signoz.Stop(ctx)
+ if err != nil {
+ logger.ErrorContext(ctx, "failed to stop signoz", "error", err)
+ return err
+ }
+
+ return nil
+}
diff --git a/cmd/root.go b/cmd/root.go
new file mode 100644
index 000000000000..a080b3764505
--- /dev/null
+++ b/cmd/root.go
@@ -0,0 +1,33 @@
+package cmd
+
+import (
+ "log/slog"
+ "os"
+
+ "github.com/SigNoz/signoz/pkg/version"
+ "github.com/spf13/cobra"
+ "go.uber.org/zap" //nolint:depguard
+)
+
+var RootCmd = &cobra.Command{
+ Use: "signoz",
+ Short: "OpenTelemetry-Native Logs, Metrics and Traces in a single pane",
+ Version: version.Info.Version(),
+ SilenceUsage: true,
+ SilenceErrors: true,
+ CompletionOptions: cobra.CompletionOptions{DisableDefaultCmd: true},
+}
+
+func Execute(logger *slog.Logger) {
+ zapLogger := newZapLogger()
+ zap.ReplaceGlobals(zapLogger)
+ defer func() {
+ _ = zapLogger.Sync()
+ }()
+
+ err := RootCmd.Execute()
+ if err != nil {
+ logger.ErrorContext(RootCmd.Context(), "error running command", "error", err)
+ os.Exit(1)
+ }
+}
diff --git a/cmd/zap.go b/cmd/zap.go
new file mode 100644
index 000000000000..4f043eaf6bcf
--- /dev/null
+++ b/cmd/zap.go
@@ -0,0 +1,15 @@
+package cmd
+
+import (
+ "go.uber.org/zap" //nolint:depguard
+ "go.uber.org/zap/zapcore" //nolint:depguard
+)
+
+// Deprecated: Use `NewLogger` from `pkg/instrumentation` instead.
+func newZapLogger() *zap.Logger {
+ config := zap.NewProductionConfig()
+ config.EncoderConfig.TimeKey = "timestamp"
+ config.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
+ logger, _ := config.Build()
+ return logger
+}
diff --git a/deploy/docker-swarm/docker-compose.ha.yaml b/deploy/docker-swarm/docker-compose.ha.yaml
index e9731b79b91f..9ad2cd558772 100644
--- a/deploy/docker-swarm/docker-compose.ha.yaml
+++ b/deploy/docker-swarm/docker-compose.ha.yaml
@@ -174,7 +174,7 @@ services:
# - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml
signoz:
!!merge <<: *db-depend
- image: signoz/signoz:v0.88.1
+ image: signoz/signoz:v0.90.1
command:
- --config=/root/config/prometheus.yml
ports:
@@ -194,6 +194,7 @@ services:
- TELEMETRY_ENABLED=true
- DEPLOYMENT_TYPE=docker-swarm
- SIGNOZ_JWT_SECRET=secret
+ - DOT_METRICS_ENABLED=true
healthcheck:
test:
- CMD
@@ -206,7 +207,7 @@ services:
retries: 3
otel-collector:
!!merge <<: *db-depend
- image: signoz/signoz-otel-collector:v0.128.0
+ image: signoz/signoz-otel-collector:v0.128.2
command:
- --config=/etc/otel-collector-config.yaml
- --manager-config=/etc/manager-config.yaml
@@ -230,7 +231,7 @@ services:
- signoz
schema-migrator:
!!merge <<: *common
- image: signoz/signoz-schema-migrator:v0.128.0
+ image: signoz/signoz-schema-migrator:v0.128.2
deploy:
restart_policy:
condition: on-failure
diff --git a/deploy/docker-swarm/docker-compose.yaml b/deploy/docker-swarm/docker-compose.yaml
index a3b7e678a2c3..1d9f518d8178 100644
--- a/deploy/docker-swarm/docker-compose.yaml
+++ b/deploy/docker-swarm/docker-compose.yaml
@@ -115,7 +115,7 @@ services:
# - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml
signoz:
!!merge <<: *db-depend
- image: signoz/signoz:v0.88.1
+ image: signoz/signoz:v0.90.1
command:
- --config=/root/config/prometheus.yml
ports:
@@ -135,6 +135,7 @@ services:
- GODEBUG=netdns=go
- TELEMETRY_ENABLED=true
- DEPLOYMENT_TYPE=docker-swarm
+ - DOT_METRICS_ENABLED=true
healthcheck:
test:
- CMD
@@ -147,7 +148,7 @@ services:
retries: 3
otel-collector:
!!merge <<: *db-depend
- image: signoz/signoz-otel-collector:v0.128.0
+ image: signoz/signoz-otel-collector:v0.128.2
command:
- --config=/etc/otel-collector-config.yaml
- --manager-config=/etc/manager-config.yaml
@@ -173,7 +174,7 @@ services:
- signoz
schema-migrator:
!!merge <<: *common
- image: signoz/signoz-schema-migrator:v0.128.0
+ image: signoz/signoz-schema-migrator:v0.128.2
deploy:
restart_policy:
condition: on-failure
diff --git a/deploy/docker-swarm/otel-collector-config.yaml b/deploy/docker-swarm/otel-collector-config.yaml
index 93e07f9bd10d..48baa16b34c1 100644
--- a/deploy/docker-swarm/otel-collector-config.yaml
+++ b/deploy/docker-swarm/otel-collector-config.yaml
@@ -26,7 +26,7 @@ processors:
detectors: [env, system]
timeout: 2s
signozspanmetrics/delta:
- metrics_exporter: clickhousemetricswrite, signozclickhousemetrics
+ metrics_exporter: signozclickhousemetrics
metrics_flush_interval: 60s
latency_histogram_buckets: [100us, 1ms, 2ms, 6ms, 10ms, 50ms, 100ms, 250ms, 500ms, 1000ms, 1400ms, 2000ms, 5s, 10s, 20s, 40s, 60s ]
dimensions_cache_size: 100000
@@ -60,14 +60,6 @@ exporters:
datasource: tcp://clickhouse:9000/signoz_traces
low_cardinal_exception_grouping: ${env:LOW_CARDINAL_EXCEPTION_GROUPING}
use_new_schema: true
- clickhousemetricswrite:
- endpoint: tcp://clickhouse:9000/signoz_metrics
- resource_to_telemetry_conversion:
- enabled: true
- disable_v2: true
- clickhousemetricswrite/prometheus:
- endpoint: tcp://clickhouse:9000/signoz_metrics
- disable_v2: true
signozclickhousemetrics:
dsn: tcp://clickhouse:9000/signoz_metrics
clickhouselogsexporter:
@@ -89,11 +81,11 @@ service:
metrics:
receivers: [otlp]
processors: [batch]
- exporters: [clickhousemetricswrite, signozclickhousemetrics]
+ exporters: [signozclickhousemetrics]
metrics/prometheus:
receivers: [prometheus]
processors: [batch]
- exporters: [clickhousemetricswrite/prometheus, signozclickhousemetrics]
+ exporters: [signozclickhousemetrics]
logs:
receivers: [otlp]
processors: [batch]
diff --git a/deploy/docker/docker-compose.ha.yaml b/deploy/docker/docker-compose.ha.yaml
index 4e660b7aa1c8..215b0eed073d 100644
--- a/deploy/docker/docker-compose.ha.yaml
+++ b/deploy/docker/docker-compose.ha.yaml
@@ -177,7 +177,7 @@ services:
# - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml
signoz:
!!merge <<: *db-depend
- image: signoz/signoz:${VERSION:-v0.88.1}
+ image: signoz/signoz:${VERSION:-v0.90.1}
container_name: signoz
command:
- --config=/root/config/prometheus.yml
@@ -197,6 +197,7 @@ services:
- GODEBUG=netdns=go
- TELEMETRY_ENABLED=true
- DEPLOYMENT_TYPE=docker-standalone-amd
+ - DOT_METRICS_ENABLED=true
healthcheck:
test:
- CMD
@@ -210,7 +211,7 @@ services:
# TODO: support otel-collector multiple replicas. Nginx/Traefik for loadbalancing?
otel-collector:
!!merge <<: *db-depend
- image: signoz/signoz-otel-collector:${OTELCOL_TAG:-v0.128.0}
+ image: signoz/signoz-otel-collector:${OTELCOL_TAG:-v0.128.2}
container_name: signoz-otel-collector
command:
- --config=/etc/otel-collector-config.yaml
@@ -236,7 +237,7 @@ services:
condition: service_healthy
schema-migrator-sync:
!!merge <<: *common
- image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.128.0}
+ image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.128.2}
container_name: schema-migrator-sync
command:
- sync
@@ -247,7 +248,7 @@ services:
condition: service_healthy
schema-migrator-async:
!!merge <<: *db-depend
- image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.128.0}
+ image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.128.2}
container_name: schema-migrator-async
command:
- async
diff --git a/deploy/docker/docker-compose.yaml b/deploy/docker/docker-compose.yaml
index e4a8abb29d52..7bc052176f5c 100644
--- a/deploy/docker/docker-compose.yaml
+++ b/deploy/docker/docker-compose.yaml
@@ -110,7 +110,7 @@ services:
# - ../common/clickhouse/storage.xml:/etc/clickhouse-server/config.d/storage.xml
signoz:
!!merge <<: *db-depend
- image: signoz/signoz:${VERSION:-v0.88.1}
+ image: signoz/signoz:${VERSION:-v0.90.1}
container_name: signoz
command:
- --config=/root/config/prometheus.yml
@@ -130,6 +130,7 @@ services:
- GODEBUG=netdns=go
- TELEMETRY_ENABLED=true
- DEPLOYMENT_TYPE=docker-standalone-amd
+ - DOT_METRICS_ENABLED=true
healthcheck:
test:
- CMD
@@ -142,7 +143,7 @@ services:
retries: 3
otel-collector:
!!merge <<: *db-depend
- image: signoz/signoz-otel-collector:${OTELCOL_TAG:-v0.128.0}
+ image: signoz/signoz-otel-collector:${OTELCOL_TAG:-v0.128.2}
container_name: signoz-otel-collector
command:
- --config=/etc/otel-collector-config.yaml
@@ -164,7 +165,7 @@ services:
condition: service_healthy
schema-migrator-sync:
!!merge <<: *common
- image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.128.0}
+ image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.128.2}
container_name: schema-migrator-sync
command:
- sync
@@ -176,7 +177,7 @@ services:
restart: on-failure
schema-migrator-async:
!!merge <<: *db-depend
- image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.128.0}
+ image: signoz/signoz-schema-migrator:${OTELCOL_TAG:-v0.128.2}
container_name: schema-migrator-async
command:
- async
diff --git a/deploy/docker/otel-collector-config.yaml b/deploy/docker/otel-collector-config.yaml
index a9e6db66044f..48baa16b34c1 100644
--- a/deploy/docker/otel-collector-config.yaml
+++ b/deploy/docker/otel-collector-config.yaml
@@ -26,7 +26,7 @@ processors:
detectors: [env, system]
timeout: 2s
signozspanmetrics/delta:
- metrics_exporter: clickhousemetricswrite, signozclickhousemetrics
+ metrics_exporter: signozclickhousemetrics
metrics_flush_interval: 60s
latency_histogram_buckets: [100us, 1ms, 2ms, 6ms, 10ms, 50ms, 100ms, 250ms, 500ms, 1000ms, 1400ms, 2000ms, 5s, 10s, 20s, 40s, 60s ]
dimensions_cache_size: 100000
@@ -60,14 +60,6 @@ exporters:
datasource: tcp://clickhouse:9000/signoz_traces
low_cardinal_exception_grouping: ${env:LOW_CARDINAL_EXCEPTION_GROUPING}
use_new_schema: true
- clickhousemetricswrite:
- endpoint: tcp://clickhouse:9000/signoz_metrics
- disable_v2: true
- resource_to_telemetry_conversion:
- enabled: true
- clickhousemetricswrite/prometheus:
- endpoint: tcp://clickhouse:9000/signoz_metrics
- disable_v2: true
signozclickhousemetrics:
dsn: tcp://clickhouse:9000/signoz_metrics
clickhouselogsexporter:
@@ -89,11 +81,11 @@ service:
metrics:
receivers: [otlp]
processors: [batch]
- exporters: [clickhousemetricswrite, signozclickhousemetrics]
+ exporters: [signozclickhousemetrics]
metrics/prometheus:
receivers: [prometheus]
processors: [batch]
- exporters: [clickhousemetricswrite/prometheus, signozclickhousemetrics]
+ exporters: [signozclickhousemetrics]
logs:
receivers: [otlp]
processors: [batch]
diff --git a/docs/otel-demo-docs.md b/docs/otel-demo-docs.md
index af989efbfdc5..2c0fc92ec522 100644
--- a/docs/otel-demo-docs.md
+++ b/docs/otel-demo-docs.md
@@ -16,7 +16,7 @@ __Table of Contents__
- [Prerequisites](#prerequisites-1)
- [Install Helm Repo and Charts](#install-helm-repo-and-charts)
- [Start the OpenTelemetry Demo App](#start-the-opentelemetry-demo-app-1)
- - [Moniitor with SigNoz (Kubernetes)](#monitor-with-signoz-kubernetes)
+ - [Monitor with SigNoz (Kubernetes)](#monitor-with-signoz-kubernetes)
- [What's next](#whats-next)
diff --git a/ee/query-service/.dockerignore b/ee/query-service/.dockerignore
deleted file mode 100644
index 9521c5060b39..000000000000
--- a/ee/query-service/.dockerignore
+++ /dev/null
@@ -1,4 +0,0 @@
-.vscode
-README.md
-signoz.db
-bin
\ No newline at end of file
diff --git a/ee/query-service/main.go b/ee/query-service/main.go
deleted file mode 100644
index c7b6b2d23e6d..000000000000
--- a/ee/query-service/main.go
+++ /dev/null
@@ -1,189 +0,0 @@
-package main
-
-import (
- "context"
- "flag"
- "os"
- "time"
-
- "github.com/SigNoz/signoz/ee/licensing"
- "github.com/SigNoz/signoz/ee/licensing/httplicensing"
- "github.com/SigNoz/signoz/ee/query-service/app"
- "github.com/SigNoz/signoz/ee/sqlschema/postgressqlschema"
- "github.com/SigNoz/signoz/ee/sqlstore/postgressqlstore"
- "github.com/SigNoz/signoz/ee/zeus"
- "github.com/SigNoz/signoz/ee/zeus/httpzeus"
- "github.com/SigNoz/signoz/pkg/analytics"
- "github.com/SigNoz/signoz/pkg/config"
- "github.com/SigNoz/signoz/pkg/config/envprovider"
- "github.com/SigNoz/signoz/pkg/config/fileprovider"
- "github.com/SigNoz/signoz/pkg/factory"
- pkglicensing "github.com/SigNoz/signoz/pkg/licensing"
- "github.com/SigNoz/signoz/pkg/modules/organization"
- baseconst "github.com/SigNoz/signoz/pkg/query-service/constants"
- "github.com/SigNoz/signoz/pkg/signoz"
- "github.com/SigNoz/signoz/pkg/sqlschema"
- "github.com/SigNoz/signoz/pkg/sqlstore"
- "github.com/SigNoz/signoz/pkg/sqlstore/sqlstorehook"
- "github.com/SigNoz/signoz/pkg/types/authtypes"
- "github.com/SigNoz/signoz/pkg/version"
- pkgzeus "github.com/SigNoz/signoz/pkg/zeus"
-
- "go.uber.org/zap"
- "go.uber.org/zap/zapcore"
-)
-
-// Deprecated: Please use the logger from pkg/instrumentation.
-func initZapLog() *zap.Logger {
- config := zap.NewProductionConfig()
- config.EncoderConfig.TimeKey = "timestamp"
- config.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
- logger, _ := config.Build()
- return logger
-}
-
-func main() {
- var promConfigPath, skipTopLvlOpsPath string
-
- // disables rule execution but allows change to the rule definition
- var disableRules bool
-
- // the url used to build link in the alert messages in slack and other systems
- var ruleRepoURL string
- var cluster string
-
- var useLogsNewSchema bool
- var useTraceNewSchema bool
- var cacheConfigPath, fluxInterval, fluxIntervalForTraceDetail string
- var preferSpanMetrics bool
-
- var maxIdleConns int
- var maxOpenConns int
- var dialTimeout time.Duration
- var gatewayUrl string
- var useLicensesV3 bool
-
- // Deprecated
- flag.BoolVar(&useLogsNewSchema, "use-logs-new-schema", false, "use logs_v2 schema for logs")
- // Deprecated
- flag.BoolVar(&useTraceNewSchema, "use-trace-new-schema", false, "use new schema for traces")
- // Deprecated
- flag.StringVar(&promConfigPath, "config", "./config/prometheus.yml", "(prometheus config to read metrics)")
- // Deprecated
- flag.StringVar(&skipTopLvlOpsPath, "skip-top-level-ops", "", "(config file to skip top level operations)")
- // Deprecated
- flag.BoolVar(&disableRules, "rules.disable", false, "(disable rule evaluation)")
- flag.BoolVar(&preferSpanMetrics, "prefer-span-metrics", false, "(prefer span metrics for service level metrics)")
- // Deprecated
- flag.IntVar(&maxIdleConns, "max-idle-conns", 50, "(number of connections to maintain in the pool.)")
- // Deprecated
- flag.IntVar(&maxOpenConns, "max-open-conns", 100, "(max connections for use at any time.)")
- // Deprecated
- flag.DurationVar(&dialTimeout, "dial-timeout", 5*time.Second, "(the maximum time to establish a connection.)")
- // Deprecated
- flag.StringVar(&ruleRepoURL, "rules.repo-url", baseconst.AlertHelpPage, "(host address used to build rule link in alert messages)")
- // Deprecated
- flag.StringVar(&cacheConfigPath, "experimental.cache-config", "", "(cache config to use)")
- flag.StringVar(&fluxInterval, "flux-interval", "5m", "(the interval to exclude data from being cached to avoid incorrect cache for data in motion)")
- flag.StringVar(&fluxIntervalForTraceDetail, "flux-interval-trace-detail", "2m", "(the interval to exclude data from being cached to avoid incorrect cache for trace data in motion)")
- flag.StringVar(&cluster, "cluster", "cluster", "(cluster name - defaults to 'cluster')")
- flag.StringVar(&gatewayUrl, "gateway-url", "", "(url to the gateway)")
- // Deprecated
- flag.BoolVar(&useLicensesV3, "use-licenses-v3", false, "use licenses_v3 schema for licenses")
- flag.Parse()
-
- loggerMgr := initZapLog()
- zap.ReplaceGlobals(loggerMgr)
- defer loggerMgr.Sync() // flushes buffer, if any
- ctx := context.Background()
-
- config, err := signoz.NewConfig(ctx, config.ResolverConfig{
- Uris: []string{"env:"},
- ProviderFactories: []config.ProviderFactory{
- envprovider.NewFactory(),
- fileprovider.NewFactory(),
- },
- }, signoz.DeprecatedFlags{
- MaxIdleConns: maxIdleConns,
- MaxOpenConns: maxOpenConns,
- DialTimeout: dialTimeout,
- Config: promConfigPath,
- FluxInterval: fluxInterval,
- FluxIntervalForTraceDetail: fluxIntervalForTraceDetail,
- Cluster: cluster,
- GatewayUrl: gatewayUrl,
- })
- if err != nil {
- zap.L().Fatal("Failed to create config", zap.Error(err))
- }
-
- version.Info.PrettyPrint(config.Version)
-
- sqlStoreFactories := signoz.NewSQLStoreProviderFactories()
- if err := sqlStoreFactories.Add(postgressqlstore.NewFactory(sqlstorehook.NewLoggingFactory())); err != nil {
- zap.L().Fatal("Failed to add postgressqlstore factory", zap.Error(err))
- }
-
- jwtSecret := os.Getenv("SIGNOZ_JWT_SECRET")
-
- if len(jwtSecret) == 0 {
- zap.L().Warn("No JWT secret key is specified.")
- } else {
- zap.L().Info("JWT secret key set successfully.")
- }
-
- jwt := authtypes.NewJWT(jwtSecret, 30*time.Minute, 30*24*time.Hour)
-
- signoz, err := signoz.New(
- context.Background(),
- config,
- jwt,
- zeus.Config(),
- httpzeus.NewProviderFactory(),
- licensing.Config(24*time.Hour, 3),
- func(sqlstore sqlstore.SQLStore, zeus pkgzeus.Zeus, orgGetter organization.Getter, analytics analytics.Analytics) factory.ProviderFactory[pkglicensing.Licensing, pkglicensing.Config] {
- return httplicensing.NewProviderFactory(sqlstore, zeus, orgGetter, analytics)
- },
- signoz.NewEmailingProviderFactories(),
- signoz.NewCacheProviderFactories(),
- signoz.NewWebProviderFactories(),
- func(sqlstore sqlstore.SQLStore) factory.NamedMap[factory.ProviderFactory[sqlschema.SQLSchema, sqlschema.Config]] {
- existingFactories := signoz.NewSQLSchemaProviderFactories(sqlstore)
- if err := existingFactories.Add(postgressqlschema.NewFactory(sqlstore)); err != nil {
- zap.L().Fatal("Failed to add postgressqlschema factory", zap.Error(err))
- }
-
- return existingFactories
- },
- sqlStoreFactories,
- signoz.NewTelemetryStoreProviderFactories(),
- )
- if err != nil {
- zap.L().Fatal("Failed to create signoz", zap.Error(err))
- }
-
- server, err := app.NewServer(config, signoz, jwt)
- if err != nil {
- zap.L().Fatal("Failed to create server", zap.Error(err))
- }
-
- if err := server.Start(ctx); err != nil {
- zap.L().Fatal("Could not start server", zap.Error(err))
- }
-
- signoz.Start(ctx)
-
- if err := signoz.Wait(ctx); err != nil {
- zap.L().Fatal("Failed to start signoz", zap.Error(err))
- }
-
- err = server.Stop(ctx)
- if err != nil {
- zap.L().Fatal("Failed to stop server", zap.Error(err))
- }
-
- err = signoz.Stop(ctx)
- if err != nil {
- zap.L().Fatal("Failed to stop signoz", zap.Error(err))
- }
-}
diff --git a/frontend/package.json b/frontend/package.json
index f4707155990d..1dd5ea7c94f0 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -213,7 +213,9 @@
"eslint-plugin-simple-import-sort": "^7.0.0",
"eslint-plugin-sonarjs": "^0.12.0",
"husky": "^7.0.4",
- "image-webpack-loader": "8.1.0",
+ "image-minimizer-webpack-plugin": "^4.0.0",
+ "imagemin": "^8.0.1",
+ "imagemin-svgo": "^10.0.1",
"is-ci": "^3.0.1",
"jest-styled-components": "^7.0.8",
"lint-staged": "^12.5.0",
@@ -230,6 +232,7 @@
"redux-mock-store": "1.5.4",
"sass": "1.66.1",
"sass-loader": "13.3.2",
+ "sharp": "^0.33.4",
"ts-jest": "^27.1.5",
"ts-node": "^10.2.1",
"typescript-plugin-css-modules": "5.0.1",
@@ -254,6 +257,7 @@
"cross-spawn": "7.0.5",
"cookie": "^0.7.1",
"serialize-javascript": "6.0.2",
- "prismjs": "1.30.0"
+ "prismjs": "1.30.0",
+ "got": "11.8.5"
}
}
diff --git a/frontend/public/Logos/argocd.svg b/frontend/public/Logos/argocd.svg
new file mode 100644
index 000000000000..ef6eff54507a
--- /dev/null
+++ b/frontend/public/Logos/argocd.svg
@@ -0,0 +1 @@
+
diff --git a/frontend/public/Logos/azure-mysql.svg b/frontend/public/Logos/azure-mysql.svg
new file mode 100644
index 000000000000..d1504cc763fa
--- /dev/null
+++ b/frontend/public/Logos/azure-mysql.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend/public/Logos/cloudflare.svg b/frontend/public/Logos/cloudflare.svg
new file mode 100644
index 000000000000..84ce0dc01650
--- /dev/null
+++ b/frontend/public/Logos/cloudflare.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend/public/Logos/dynamodb.svg b/frontend/public/Logos/dynamodb.svg
new file mode 100644
index 000000000000..bd4f2c30f503
--- /dev/null
+++ b/frontend/public/Logos/dynamodb.svg
@@ -0,0 +1,18 @@
+
+
\ No newline at end of file
diff --git a/frontend/public/Logos/elk.svg b/frontend/public/Logos/elk.svg
new file mode 100644
index 000000000000..d240ad568c88
--- /dev/null
+++ b/frontend/public/Logos/elk.svg
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/frontend/public/Logos/external-api-monitoring.svg b/frontend/public/Logos/external-api-monitoring.svg
new file mode 100644
index 000000000000..327eaa950649
--- /dev/null
+++ b/frontend/public/Logos/external-api-monitoring.svg
@@ -0,0 +1,19 @@
+
+
+
\ No newline at end of file
diff --git a/frontend/public/Logos/github-actions.svg b/frontend/public/Logos/github-actions.svg
new file mode 100644
index 000000000000..2929e024f398
--- /dev/null
+++ b/frontend/public/Logos/github-actions.svg
@@ -0,0 +1 @@
+
diff --git a/frontend/public/Logos/github.svg b/frontend/public/Logos/github.svg
new file mode 100644
index 000000000000..3ff1cee7c9b8
--- /dev/null
+++ b/frontend/public/Logos/github.svg
@@ -0,0 +1,5 @@
+
diff --git a/frontend/public/Logos/http-monitoring.svg b/frontend/public/Logos/http-monitoring.svg
new file mode 100644
index 000000000000..b495ddf19894
--- /dev/null
+++ b/frontend/public/Logos/http-monitoring.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend/public/Logos/jenkins.svg b/frontend/public/Logos/jenkins.svg
new file mode 100644
index 000000000000..c4e7b880d36b
--- /dev/null
+++ b/frontend/public/Logos/jenkins.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend/public/Logos/newrelic.svg b/frontend/public/Logos/newrelic.svg
new file mode 100644
index 000000000000..e2d586bf7184
--- /dev/null
+++ b/frontend/public/Logos/newrelic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend/public/Logos/openai.svg b/frontend/public/Logos/openai.svg
new file mode 100644
index 000000000000..94eb50385dc9
--- /dev/null
+++ b/frontend/public/Logos/openai.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend/public/Logos/s3.svg b/frontend/public/Logos/s3.svg
new file mode 100644
index 000000000000..cd203eaad6e8
--- /dev/null
+++ b/frontend/public/Logos/s3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend/public/Logos/snowflake.svg b/frontend/public/Logos/snowflake.svg
new file mode 100644
index 000000000000..f491c273133e
--- /dev/null
+++ b/frontend/public/Logos/snowflake.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend/public/Logos/sns.svg b/frontend/public/Logos/sns.svg
new file mode 100644
index 000000000000..6cb54adab20c
--- /dev/null
+++ b/frontend/public/Logos/sns.svg
@@ -0,0 +1,18 @@
+
+
\ No newline at end of file
diff --git a/frontend/public/Logos/sqs.svg b/frontend/public/Logos/sqs.svg
new file mode 100644
index 000000000000..b19102943cd7
--- /dev/null
+++ b/frontend/public/Logos/sqs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend/public/Logos/systemd.svg b/frontend/public/Logos/systemd.svg
new file mode 100644
index 000000000000..4a9d9492ff72
--- /dev/null
+++ b/frontend/public/Logos/systemd.svg
@@ -0,0 +1,8 @@
+
diff --git a/frontend/public/Logos/wordpress.svg b/frontend/public/Logos/wordpress.svg
new file mode 100644
index 000000000000..916903f23b17
--- /dev/null
+++ b/frontend/public/Logos/wordpress.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend/public/locales/en-GB/failedPayment.json b/frontend/public/locales/en-GB/failedPayment.json
index a624e47c7db0..05ec0cc68d47 100644
--- a/frontend/public/locales/en-GB/failedPayment.json
+++ b/frontend/public/locales/en-GB/failedPayment.json
@@ -8,5 +8,6 @@
"actNow": "Act now to avoid any disruptions and continue where you left off.",
"contactAdmin": "Contact your admin to proceed with the upgrade.",
"continueMyJourney": "Settle your bill to continue",
- "somethingWentWrong": "Something went wrong"
+ "somethingWentWrong": "Something went wrong",
+ "refreshPaymentStatus": "Refresh Status"
}
diff --git a/frontend/public/locales/en/failedPayment.json b/frontend/public/locales/en/failedPayment.json
index a624e47c7db0..05ec0cc68d47 100644
--- a/frontend/public/locales/en/failedPayment.json
+++ b/frontend/public/locales/en/failedPayment.json
@@ -8,5 +8,6 @@
"actNow": "Act now to avoid any disruptions and continue where you left off.",
"contactAdmin": "Contact your admin to proceed with the upgrade.",
"continueMyJourney": "Settle your bill to continue",
- "somethingWentWrong": "Something went wrong"
+ "somethingWentWrong": "Something went wrong",
+ "refreshPaymentStatus": "Refresh Status"
}
diff --git a/frontend/src/api/changelog/getChangelogByVersion.ts b/frontend/src/api/changelog/getChangelogByVersion.ts
index 849c3a9f15ed..b9b3f1f9c935 100644
--- a/frontend/src/api/changelog/getChangelogByVersion.ts
+++ b/frontend/src/api/changelog/getChangelogByVersion.ts
@@ -1,14 +1,32 @@
import { ErrorResponseHandler } from 'api/ErrorResponseHandler';
import axios, { AxiosError } from 'axios';
import { ErrorResponse, SuccessResponse } from 'types/api';
-import { ChangelogSchema } from 'types/api/changelog/getChangelogByVersion';
+import {
+ ChangelogSchema,
+ DeploymentType,
+} from 'types/api/changelog/getChangelogByVersion';
const getChangelogByVersion = async (
versionId: string,
+ deployment_type?: DeploymentType,
): Promise | ErrorResponse> => {
try {
+ let queryParams = `filters[version][$eq]=${versionId}&populate[features][sort]=sort_order:asc&populate[features][populate][media][fields]=id,ext,url,mime,alternativeText`;
+
+ if (
+ deployment_type &&
+ Object.values(DeploymentType).includes(deployment_type)
+ ) {
+ const excludedDeploymentType =
+ deployment_type === DeploymentType.CLOUD_ONLY
+ ? DeploymentType.OSS_ONLY
+ : DeploymentType.CLOUD_ONLY;
+
+ queryParams = `${queryParams}&populate[features][filters][deployment_type][$notIn]=${excludedDeploymentType}`;
+ }
+
const response = await axios.get(`
- https://cms.signoz.cloud/api/release-changelogs?filters[version][$eq]=${versionId}&populate[features][sort]=sort_order:asc&populate[features][populate][media][fields]=id,ext,url,mime,alternativeText
+ https://cms.signoz.cloud/api/release-changelogs?${queryParams}
`);
if (!Array.isArray(response.data.data) || response.data.data.length === 0) {
diff --git a/frontend/src/api/pipeline/post.ts b/frontend/src/api/pipeline/post.ts
index c2e7ca275706..9c774481f6d1 100644
--- a/frontend/src/api/pipeline/post.ts
+++ b/frontend/src/api/pipeline/post.ts
@@ -1,24 +1,20 @@
import axios from 'api';
-import { ErrorResponseHandler } from 'api/ErrorResponseHandler';
+import { ErrorResponseHandlerV2 } from 'api/ErrorResponseHandlerV2';
import { AxiosError } from 'axios';
-import { ErrorResponse, SuccessResponse } from 'types/api';
+import { ErrorV2Resp, SuccessResponseV2 } from 'types/api';
import { Pipeline } from 'types/api/pipeline/def';
import { Props } from 'types/api/pipeline/post';
-const post = async (
- props: Props,
-): Promise | ErrorResponse> => {
+const post = async (props: Props): Promise> => {
try {
const response = await axios.post('/logs/pipelines', props.data);
return {
- statusCode: 200,
- error: null,
- message: response.data.status,
- payload: response.data.data,
+ httpStatusCode: response.status,
+ data: response.data.data,
};
} catch (error) {
- return ErrorResponseHandler(error as AxiosError);
+ ErrorResponseHandlerV2(error as AxiosError);
}
};
diff --git a/frontend/src/api/v3/licenses/post.ts b/frontend/src/api/v3/licenses/post.ts
new file mode 100644
index 000000000000..4cd971acc0e8
--- /dev/null
+++ b/frontend/src/api/v3/licenses/post.ts
@@ -0,0 +1,24 @@
+import { ApiV3Instance as axios } from 'api';
+import { ErrorResponseHandlerV2 } from 'api/ErrorResponseHandlerV2';
+import { AxiosError } from 'axios';
+import { ErrorV2Resp, SuccessResponseV2 } from 'types/api';
+import { PayloadProps, Props } from 'types/api/licenses/apply';
+
+const apply = async (
+ props: Props,
+): Promise> => {
+ try {
+ const response = await axios.post('/licenses', {
+ key: props.key,
+ });
+
+ return {
+ httpStatusCode: response.status,
+ data: response.data,
+ };
+ } catch (error) {
+ ErrorResponseHandlerV2(error as AxiosError);
+ }
+};
+
+export default apply;
diff --git a/frontend/src/api/v3/licenses/put.ts b/frontend/src/api/v3/licenses/put.ts
index 4cd971acc0e8..d07ad428de78 100644
--- a/frontend/src/api/v3/licenses/put.ts
+++ b/frontend/src/api/v3/licenses/put.ts
@@ -2,15 +2,11 @@ import { ApiV3Instance as axios } from 'api';
import { ErrorResponseHandlerV2 } from 'api/ErrorResponseHandlerV2';
import { AxiosError } from 'axios';
import { ErrorV2Resp, SuccessResponseV2 } from 'types/api';
-import { PayloadProps, Props } from 'types/api/licenses/apply';
+import { PayloadProps } from 'types/api/licenses/apply';
-const apply = async (
- props: Props,
-): Promise> => {
+const apply = async (): Promise> => {
try {
- const response = await axios.post('/licenses', {
- key: props.key,
- });
+ const response = await axios.put('/licenses');
return {
httpStatusCode: response.status,
diff --git a/frontend/src/components/ChangelogModal/ChangelogModal.styles.scss b/frontend/src/components/ChangelogModal/ChangelogModal.styles.scss
index 8f6e99208048..3772a8717cac 100644
--- a/frontend/src/components/ChangelogModal/ChangelogModal.styles.scss
+++ b/frontend/src/components/ChangelogModal/ChangelogModal.styles.scss
@@ -60,6 +60,7 @@
&-ctas {
display: flex;
+ margin-left: auto;
& svg {
font-size: 14px;
@@ -110,7 +111,7 @@
&-content {
max-height: calc(100vh - 300px);
overflow-y: auto;
- padding: 16px;
+ padding: 16px 16px 18px 16px;
border: 1px solid var(--bg-slate-500, #161922);
border-top-width: 0;
border-bottom-width: 0;
diff --git a/frontend/src/components/ChangelogModal/ChangelogModal.tsx b/frontend/src/components/ChangelogModal/ChangelogModal.tsx
index 90757cd2c7b8..db755eb2598b 100644
--- a/frontend/src/components/ChangelogModal/ChangelogModal.tsx
+++ b/frontend/src/components/ChangelogModal/ChangelogModal.tsx
@@ -2,27 +2,62 @@ import './ChangelogModal.styles.scss';
import { CheckOutlined, CloseOutlined } from '@ant-design/icons';
import { Button, Modal } from 'antd';
+import updateUserPreference from 'api/v1/user/preferences/name/update';
import cx from 'classnames';
+import { USER_PREFERENCES } from 'constants/userPreferences';
import dayjs from 'dayjs';
+import { useGetTenantLicense } from 'hooks/useGetTenantLicense';
import { ChevronsDown, ScrollText } from 'lucide-react';
import { useAppContext } from 'providers/App/App';
import { useCallback, useEffect, useRef, useState } from 'react';
+import { useMutation } from 'react-query';
+import { ChangelogSchema } from 'types/api/changelog/getChangelogByVersion';
+import { UserPreference } from 'types/api/preferences/preference';
import ChangelogRenderer from './components/ChangelogRenderer';
interface Props {
+ changelog: ChangelogSchema;
onClose: () => void;
}
-function ChangelogModal({ onClose }: Props): JSX.Element {
+function ChangelogModal({ changelog, onClose }: Props): JSX.Element {
const [hasScroll, setHasScroll] = useState(false);
const changelogContentSectionRef = useRef(null);
- const { changelog } = useAppContext();
+ const { userPreferences, updateUserPreferenceInContext } = useAppContext();
const formattedReleaseDate = dayjs(changelog?.release_date).format(
'MMMM D, YYYY',
);
+ const { isCloudUser } = useGetTenantLicense();
+
+ const seenChangelogVersion = userPreferences?.find(
+ (preference) =>
+ preference.name === USER_PREFERENCES.LAST_SEEN_CHANGELOG_VERSION,
+ )?.value as string;
+
+ const { mutate: updateUserPreferenceMutation } = useMutation(
+ updateUserPreference,
+ );
+
+ useEffect(() => {
+ // Update the seen version
+ if (seenChangelogVersion !== changelog.version) {
+ const version = {
+ name: USER_PREFERENCES.LAST_SEEN_CHANGELOG_VERSION,
+ value: changelog.version,
+ };
+ updateUserPreferenceInContext(version as UserPreference);
+ updateUserPreferenceMutation(version);
+ }
+ }, [
+ seenChangelogVersion,
+ changelog.version,
+ updateUserPreferenceMutation,
+ updateUserPreferenceInContext,
+ ]);
+
const checkScroll = useCallback((): void => {
if (changelogContentSectionRef.current) {
const {
@@ -89,18 +124,20 @@ function ChangelogModal({ onClose }: Props): JSX.Element {
{changelog.features.length > 1 ? 'features' : 'feature'}
)}
-
- } onClick={onClose}>
- Skip for now
-
- }
- onClick={onClickUpdateWorkspace}
- >
- Update my workspace
-
-
+ {!isCloudUser && (
+
+ } onClick={onClose}>
+ Skip for now
+
+ }
+ onClick={onClickUpdateWorkspace}
+ >
+ Update my workspace
+
+
-
- We're updating our metric ingestion processing pipeline.
- Currently, metric names and labels are normalized to replace dots and
- other special characters with underscores (_). This restriction will
- soon be removed. Learn more{' '}
-
- here
-
- .
- >
- }
- type="warning"
- showIcon
- />
-