mirror of
https://github.com/hanzoai/o11y.git
synced 2026-10-30 14:56:15 +00:00
* debrand: signoz/SigNoz/SIGNOZ -> o11y/O11y/O11Y across the tree Rename all SigNoz *branding* to O11y in file contents, file/dir names, package names, env vars, config keys, comments, docs, SDK code, and the ClickHouse schema identifiers the querier reads. Collector dependency: - Repoint github.com/hanzoai/signoz-otel-collector -> github.com/hanzoai/otel-collector and bump v0.144.6 -> v0.144.7 (go.mod + go.sum reconciled via go mod tidy). Internal package paths also debranded upstream: signozschemamigrator -> o11yschemamigrator, signozlogspipelineprocessor -> o11ylogspipelineprocessor. - Fix: v0.144.7 dropped otelconst.DistributedFieldKeysTable from the collector's public constants; pin FieldKeysTable = "distributed_field_keys" locally in pkg/telemetrymetadata/tables.go. Package/dir renames (package decl + all importers): pkg/apiserver/signozapiserver -> o11yapiserver, plus signozalertmanager, signozauthzapi, signozglobal, signozquerier, signozruler, and pkg/signoz -> pkg/o11y. Schema (read plane): signoz_traces/metrics/logs/metadata/analytics/meter and signoz_index_v3/index_v2/error_index_v2/spans (+ distributed_*) -> o11y_*. Data-preserving cutover migration added: deploy/clickhouse/migrations/0001_rename_signoz_to_o11y.sql (metadata-only RENAME DATABASE/TABLE, no drop/recreate). Preserved (attribution / external / wire contracts): - LICENSE + NOTICE verbatim (incl. "software from SigNoz", "Copyright ... SigNoz Inc."). - Upstream github.com/SigNoz/* repo URLs + @SigNoz/* CODEOWNERS teams. - Billing resource-attribute regex "signoz.workspace.*" (external wire contract). go build ./pkg/... ./cmd/... = 0; gofmt clean; renamed+schema pkg tests pass. * o11y: bump collector to v0.144.8 (o11y_* physical schema writer) + lockstep deploy plan Collector v0.144.8's schema-migrator + exporters now CREATE/WRITE the same o11y_* physical databases/tables the querier reads and the RENAME migration (0001_rename_signoz_to_o11y.sql) targets. Cross-checked byte-identical: writer DB set == migration target DB set (6); writer prefixed-table set == migration target table set (8); o11y querier reads and cloud reads are subsets of that set. Zero table-name mismatches between writer, readers, and migration. Collector go.mod unchanged between v0.144.7 and v0.144.8 (identical go.mod hash) — pure source rename, no module-graph change. Adds deploy/clickhouse/DEPLOY_signoz_to_o11y_cutover.md: the lockstep order (collector v0.144.8 -> RENAME migration -> o11y+cloud readers) with a fresh/scratch-ClickHouse pre-flight (create via migrator, emit trace+metric, query back) and rollback. Ships together or telemetry blackholes. go build ./pkg/... ./cmd/community = 0.
146 lines
5.0 KiB
Go
146 lines
5.0 KiB
Go
package o11yruler
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/hanzoai/o11y/pkg/alertmanager"
|
|
"github.com/hanzoai/o11y/pkg/alertmanager/alertmanagerstore/sqlalertmanagerstore"
|
|
"github.com/hanzoai/o11y/pkg/cache"
|
|
"github.com/hanzoai/o11y/pkg/factory"
|
|
"github.com/hanzoai/o11y/pkg/modules/organization"
|
|
"github.com/hanzoai/o11y/pkg/modules/rulestatehistory"
|
|
"github.com/hanzoai/o11y/pkg/prometheus"
|
|
"github.com/hanzoai/o11y/pkg/querier"
|
|
"github.com/hanzoai/o11y/pkg/query-service/rules"
|
|
"github.com/hanzoai/o11y/pkg/queryparser"
|
|
"github.com/hanzoai/o11y/pkg/ruler"
|
|
"github.com/hanzoai/o11y/pkg/ruler/rulestore/sqlrulestore"
|
|
"github.com/hanzoai/o11y/pkg/sqlstore"
|
|
"github.com/hanzoai/o11y/pkg/telemetrystore"
|
|
"github.com/hanzoai/o11y/pkg/types/alertmanagertypes"
|
|
"github.com/hanzoai/o11y/pkg/types/ruletypes"
|
|
"github.com/hanzoai/o11y/pkg/types/telemetrytypes"
|
|
"github.com/hanzoai/o11y/pkg/valuer"
|
|
)
|
|
|
|
type provider struct {
|
|
manager *rules.Manager
|
|
ruleStore ruletypes.RuleStore
|
|
stopC chan struct{}
|
|
healthyC chan struct{}
|
|
}
|
|
|
|
func NewFactory(
|
|
cache cache.Cache,
|
|
alertmanager alertmanager.Alertmanager,
|
|
sqlstore sqlstore.SQLStore,
|
|
telemetryStore telemetrystore.TelemetryStore,
|
|
metadataStore telemetrytypes.MetadataStore,
|
|
prometheus prometheus.Prometheus,
|
|
orgGetter organization.Getter,
|
|
ruleStateHistoryModule rulestatehistory.Module,
|
|
querier querier.Querier,
|
|
queryParser queryparser.QueryParser,
|
|
prepareTaskFunc func(rules.PrepareTaskOptions) (rules.Task, error),
|
|
prepareTestRuleFunc func(rules.PrepareTestRuleOptions) (int, error),
|
|
) factory.ProviderFactory[ruler.Ruler, ruler.Config] {
|
|
return factory.NewProviderFactory(factory.MustNewName("o11y"), func(ctx context.Context, providerSettings factory.ProviderSettings, config ruler.Config) (ruler.Ruler, error) {
|
|
ruleStore := sqlrulestore.NewRuleStore(sqlstore, queryParser, providerSettings)
|
|
maintenanceStore := sqlalertmanagerstore.NewMaintenanceStore(sqlstore, providerSettings)
|
|
|
|
managerOpts := &rules.ManagerOptions{
|
|
TelemetryStore: telemetryStore,
|
|
MetadataStore: metadataStore,
|
|
Prometheus: prometheus,
|
|
Context: context.Background(),
|
|
Querier: querier,
|
|
Logger: providerSettings.Logger,
|
|
Cache: cache,
|
|
EvalDelay: valuer.MustParseTextDuration(config.EvalDelay.String()),
|
|
PrepareTaskFunc: prepareTaskFunc,
|
|
PrepareTestRuleFunc: prepareTestRuleFunc,
|
|
Alertmanager: alertmanager,
|
|
OrgGetter: orgGetter,
|
|
RuleStore: ruleStore,
|
|
MaintenanceStore: maintenanceStore,
|
|
SQLStore: sqlstore,
|
|
QueryParser: queryParser,
|
|
RuleStateHistoryModule: ruleStateHistoryModule,
|
|
}
|
|
|
|
manager, err := rules.NewManager(managerOpts)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &provider{manager: manager, ruleStore: ruleStore, stopC: make(chan struct{}), healthyC: make(chan struct{})}, nil
|
|
})
|
|
}
|
|
|
|
func (provider *provider) Start(ctx context.Context) error {
|
|
provider.manager.Start(ctx)
|
|
close(provider.healthyC)
|
|
<-provider.stopC
|
|
return nil
|
|
}
|
|
|
|
func (provider *provider) Healthy() <-chan struct{} {
|
|
return provider.healthyC
|
|
}
|
|
|
|
func (provider *provider) Stop(ctx context.Context) error {
|
|
close(provider.stopC)
|
|
provider.manager.Stop(ctx)
|
|
return nil
|
|
}
|
|
|
|
func (provider *provider) Collect(ctx context.Context, orgID valuer.UUID) (map[string]any, error) {
|
|
rules, err := provider.ruleStore.GetStoredRules(ctx, orgID.String())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
stats := ruletypes.NewStatsFromRules(rules)
|
|
|
|
alertStats := provider.manager.AlertStats(ctx)
|
|
stats["alert.firing.count"] = alertStats.FiringRules
|
|
if !alertStats.LastFiredAt.IsZero() {
|
|
stats["alert.last_fired.time"] = alertStats.LastFiredAt.UTC()
|
|
stats["alert.last_fired.time_unix"] = alertStats.LastFiredAt.Unix()
|
|
}
|
|
|
|
return stats, nil
|
|
}
|
|
|
|
func (provider *provider) ListRuleStates(ctx context.Context) (*ruletypes.GettableRules, error) {
|
|
return provider.manager.ListRuleStates(ctx)
|
|
}
|
|
|
|
func (provider *provider) GetRule(ctx context.Context, id valuer.UUID) (*ruletypes.GettableRule, error) {
|
|
return provider.manager.GetRule(ctx, id)
|
|
}
|
|
|
|
func (provider *provider) CreateRule(ctx context.Context, ruleStr string) (*ruletypes.GettableRule, error) {
|
|
return provider.manager.CreateRule(ctx, ruleStr)
|
|
}
|
|
|
|
func (provider *provider) EditRule(ctx context.Context, ruleStr string, id valuer.UUID) error {
|
|
return provider.manager.EditRule(ctx, ruleStr, id)
|
|
}
|
|
|
|
func (provider *provider) DeleteRule(ctx context.Context, idStr string) error {
|
|
return provider.manager.DeleteRule(ctx, idStr)
|
|
}
|
|
|
|
func (provider *provider) PatchRule(ctx context.Context, ruleStr string, id valuer.UUID) (*ruletypes.GettableRule, error) {
|
|
return provider.manager.PatchRule(ctx, ruleStr, id)
|
|
}
|
|
|
|
func (provider *provider) TestNotification(ctx context.Context, orgID valuer.UUID, ruleStr string) (int, error) {
|
|
return provider.manager.TestNotification(ctx, orgID, ruleStr)
|
|
}
|
|
|
|
func (provider *provider) MaintenanceStore() alertmanagertypes.MaintenanceStore {
|
|
return provider.manager.MaintenanceStore()
|
|
}
|