mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-17 15:36:48 +00:00
* chore: added custom distpatcher * feat(notification-grouping): added notification grouping * feat(notification-grouping): addded integration test dependency * feat(notification-grouping): linting and test cases * feat(notification-grouping): linting and test cases * feat(notification-grouping): linting and test cases * feat(notification-grouping): addded integration test dependency * feat(notification-grouping): debug log lines * feat(notification-grouping): debug log lines * feat(notification-grouping): debug log lines * feat(notification-grouping): addded integration test dependency * feat(notification-grouping): addded integration test dependency * feat(notification-grouping): addded integration test dependency * feat(notification-grouping): added structure changes * feat(notification-grouping): added structure changes * feat(notification-routing): added notification routing * chore(notification-grouping): added notificaiton grouping * Update pkg/alertmanager/nfmanager/rulebasednotification/provider.go Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * chore(notification-grouping): added renotification interval * fix(notification-grouping): added fix for renotification * chore(notificaiton-grouping): added no data renotify * chore(notificaiton-grouping): added no data renotify * chore(notificaiton-grouping): added no data renotify * chore(notification-grouping): added no data renotify interval * chore(notification-grouping): removed errors package from dispatcher * chore(notification-grouping): removed errors package from dispatcher * chore(notification-grouping): removed unwanted tests * chore(notification-grouping): removed unwanted pkg name * chore(notification-grouping): added delete notification setting * chore(notification-grouping): added delete notification setting * Update pkg/alertmanager/nfmanager/nfmanagertest/provider.go Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * chore(notification-grouping): removed nfmanager config| notification settings in postable rule * chore(notification-grouping): removed nfmanager config| notification settings in postable rule * chore(notification-grouping): added test for dispatcher * chore(notification-grouping): added test for dispatcher * chore(notification-grouping): go linting errors * chore(notification-grouping): added test cases for aggGroupPerRoute * chore(notification-grouping): added test cases for aggGroupPerRoute * chore(notification-grouping): corrected get notification config logic * Update pkg/alertmanager/nfmanager/rulebasednotification/provider_test.go Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * chore(notification-routing): added notification routing policies * feat(notification-routing): added test cases for dispatcher * chore(notification-routing): added notification routing policies * chore(notification-routing): added notification routing policies * Apply suggestions from code review Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * chore(notification-routing): added notification routing policies * chore(notification-routing): added notification routing policies * Update pkg/alertmanager/alertmanagerserver/distpatcher_test.go Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * chore(notification-routing): sorted imports * chore(notification-routing): minor edit |pr resolve comments * chore(notification-grouping): corrected dispatcher test cases * chore(notification-routing): added notification routing policies * chore(notification-routing): corrected race condition in test * chore: resolved pr comments * chore: passing threshold value to tempalte * chore: completed delete rule functionality * chore: added grouping disabled functionality * chore: added grouping disabled functionality * chore(notification-routing): resolved pr comments * chore(notification-routing): resolved pr comments * chore(notification-routing): resolved pr comments * chore(notification-routing): sorted imports * chore(notification-routing): fix linting errors * chore(notification-routing): removed enabled flags * fix: test rule multiple threhsold (#9224) * chore: corrected linting errors * chore: corrected linting errors * chore: corrected linting errors * chore: corrected linting errors * chore: corrected migration errors * chore: corrected migration errors * chore: corrected migration errors * chore: corrected migration errors * Update pkg/sqlmigration/049_add_route_policy.go Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * chore: added org_is as foreign key * chore: resolved pr comments * chore: removed route store unused --------- Co-authored-by: Srikanth Chekuri <srikanth.chekuri92@gmail.com> Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com>
342 lines
9.9 KiB
Go
342 lines
9.9 KiB
Go
package signoz
|
|
|
|
import (
|
|
"context"
|
|
"github.com/SigNoz/signoz/pkg/alertmanager"
|
|
"github.com/SigNoz/signoz/pkg/alertmanager/nfmanager"
|
|
"github.com/SigNoz/signoz/pkg/alertmanager/nfmanager/nfroutingstore/sqlroutingstore"
|
|
"github.com/SigNoz/signoz/pkg/analytics"
|
|
"github.com/SigNoz/signoz/pkg/cache"
|
|
"github.com/SigNoz/signoz/pkg/emailing"
|
|
"github.com/SigNoz/signoz/pkg/factory"
|
|
"github.com/SigNoz/signoz/pkg/instrumentation"
|
|
"github.com/SigNoz/signoz/pkg/licensing"
|
|
"github.com/SigNoz/signoz/pkg/modules/organization"
|
|
"github.com/SigNoz/signoz/pkg/modules/organization/implorganization"
|
|
"github.com/SigNoz/signoz/pkg/modules/user/impluser"
|
|
"github.com/SigNoz/signoz/pkg/prometheus"
|
|
"github.com/SigNoz/signoz/pkg/querier"
|
|
"github.com/SigNoz/signoz/pkg/ruler"
|
|
"github.com/SigNoz/signoz/pkg/sharder"
|
|
"github.com/SigNoz/signoz/pkg/sqlmigration"
|
|
"github.com/SigNoz/signoz/pkg/sqlmigrator"
|
|
"github.com/SigNoz/signoz/pkg/sqlschema"
|
|
"github.com/SigNoz/signoz/pkg/sqlstore"
|
|
"github.com/SigNoz/signoz/pkg/statsreporter"
|
|
"github.com/SigNoz/signoz/pkg/telemetrystore"
|
|
"github.com/SigNoz/signoz/pkg/types/authtypes"
|
|
"github.com/SigNoz/signoz/pkg/version"
|
|
"github.com/SigNoz/signoz/pkg/zeus"
|
|
|
|
"github.com/SigNoz/signoz/pkg/web"
|
|
)
|
|
|
|
type SigNoz struct {
|
|
*factory.Registry
|
|
Instrumentation instrumentation.Instrumentation
|
|
Analytics analytics.Analytics
|
|
Cache cache.Cache
|
|
Web web.Web
|
|
SQLStore sqlstore.SQLStore
|
|
TelemetryStore telemetrystore.TelemetryStore
|
|
Prometheus prometheus.Prometheus
|
|
Alertmanager alertmanager.Alertmanager
|
|
Querier querier.Querier
|
|
Rules ruler.Ruler
|
|
Zeus zeus.Zeus
|
|
Licensing licensing.Licensing
|
|
Emailing emailing.Emailing
|
|
Sharder sharder.Sharder
|
|
StatsReporter statsreporter.StatsReporter
|
|
Modules Modules
|
|
Handlers Handlers
|
|
}
|
|
|
|
func New(
|
|
ctx context.Context,
|
|
config Config,
|
|
jwt *authtypes.JWT,
|
|
zeusConfig zeus.Config,
|
|
zeusProviderFactory factory.ProviderFactory[zeus.Zeus, zeus.Config],
|
|
licenseConfig licensing.Config,
|
|
licenseProviderFactory func(sqlstore.SQLStore, zeus.Zeus, organization.Getter, analytics.Analytics) factory.ProviderFactory[licensing.Licensing, licensing.Config],
|
|
emailingProviderFactories factory.NamedMap[factory.ProviderFactory[emailing.Emailing, emailing.Config]],
|
|
cacheProviderFactories factory.NamedMap[factory.ProviderFactory[cache.Cache, cache.Config]],
|
|
webProviderFactories factory.NamedMap[factory.ProviderFactory[web.Web, web.Config]],
|
|
sqlSchemaProviderFactories func(sqlstore.SQLStore) factory.NamedMap[factory.ProviderFactory[sqlschema.SQLSchema, sqlschema.Config]],
|
|
sqlstoreProviderFactories factory.NamedMap[factory.ProviderFactory[sqlstore.SQLStore, sqlstore.Config]],
|
|
telemetrystoreProviderFactories factory.NamedMap[factory.ProviderFactory[telemetrystore.TelemetryStore, telemetrystore.Config]],
|
|
) (*SigNoz, error) {
|
|
// Initialize instrumentation
|
|
instrumentation, err := instrumentation.New(ctx, config.Instrumentation, version.Info, "signoz")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
instrumentation.Logger().InfoContext(ctx, "starting signoz", "version", version.Info.Version(), "variant", version.Info.Variant(), "commit", version.Info.Hash(), "branch", version.Info.Branch(), "go", version.Info.GoVersion(), "time", version.Info.Time())
|
|
instrumentation.Logger().DebugContext(ctx, "loaded signoz config", "config", config)
|
|
|
|
// Get the provider settings from instrumentation
|
|
providerSettings := instrumentation.ToProviderSettings()
|
|
|
|
// Initialize analytics just after instrumentation, as providers might require it
|
|
analytics, err := factory.NewProviderFromNamedMap(
|
|
ctx,
|
|
providerSettings,
|
|
config.Analytics,
|
|
NewAnalyticsProviderFactories(),
|
|
config.Analytics.Provider(),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Initialize zeus from the available zeus provider factory. This is not config controlled
|
|
// and depends on the variant of the build.
|
|
zeus, err := zeusProviderFactory.New(
|
|
ctx,
|
|
providerSettings,
|
|
zeusConfig,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Initialize emailing from the available emailing provider factories
|
|
emailing, err := factory.NewProviderFromNamedMap(
|
|
ctx,
|
|
providerSettings,
|
|
config.Emailing,
|
|
emailingProviderFactories,
|
|
config.Emailing.Provider(),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Initialize cache from the available cache provider factories
|
|
cache, err := factory.NewProviderFromNamedMap(
|
|
ctx,
|
|
providerSettings,
|
|
config.Cache,
|
|
cacheProviderFactories,
|
|
config.Cache.Provider,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Initialize web from the available web provider factories
|
|
web, err := factory.NewProviderFromNamedMap(
|
|
ctx,
|
|
providerSettings,
|
|
config.Web,
|
|
webProviderFactories,
|
|
config.Web.Provider(),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Initialize sqlstore from the available sqlstore provider factories
|
|
sqlstore, err := factory.NewProviderFromNamedMap(
|
|
ctx,
|
|
providerSettings,
|
|
config.SQLStore,
|
|
sqlstoreProviderFactories,
|
|
config.SQLStore.Provider,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Initialize telemetrystore from the available telemetrystore provider factories
|
|
telemetrystore, err := factory.NewProviderFromNamedMap(
|
|
ctx,
|
|
providerSettings,
|
|
config.TelemetryStore,
|
|
telemetrystoreProviderFactories,
|
|
config.TelemetryStore.Provider,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Initialize prometheus from the available prometheus provider factories
|
|
prometheus, err := factory.NewProviderFromNamedMap(
|
|
ctx,
|
|
providerSettings,
|
|
config.Prometheus,
|
|
NewPrometheusProviderFactories(telemetrystore),
|
|
config.Prometheus.Provider(),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Initialize querier from the available querier provider factories
|
|
querier, err := factory.NewProviderFromNamedMap(
|
|
ctx,
|
|
providerSettings,
|
|
config.Querier,
|
|
NewQuerierProviderFactories(telemetrystore, prometheus, cache),
|
|
config.Querier.Provider(),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
sqlschema, err := factory.NewProviderFromNamedMap(
|
|
ctx,
|
|
providerSettings,
|
|
config.SQLSchema,
|
|
sqlSchemaProviderFactories(sqlstore),
|
|
config.SQLStore.Provider,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Run migrations on the sqlstore
|
|
sqlmigrations, err := sqlmigration.New(
|
|
ctx,
|
|
providerSettings,
|
|
config.SQLMigration,
|
|
NewSQLMigrationProviderFactories(sqlstore, sqlschema, telemetrystore, providerSettings),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
err = sqlmigrator.New(ctx, providerSettings, sqlstore, sqlmigrations, config.SQLMigrator).Migrate(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Initialize sharder from the available sharder provider factories
|
|
sharder, err := factory.NewProviderFromNamedMap(
|
|
ctx,
|
|
providerSettings,
|
|
config.Sharder,
|
|
NewSharderProviderFactories(),
|
|
config.Sharder.Provider,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Initialize organization getter
|
|
orgGetter := implorganization.NewGetter(implorganization.NewStore(sqlstore), sharder)
|
|
|
|
// Initialize user getter
|
|
userGetter := impluser.NewGetter(impluser.NewStore(sqlstore, providerSettings))
|
|
|
|
// will need to create factory for all stores
|
|
routeStore := sqlroutingstore.NewStore(sqlstore)
|
|
// shared NotificationManager instance for both alertmanager and rules
|
|
notificationManager, err := factory.NewProviderFromNamedMap(
|
|
ctx,
|
|
providerSettings,
|
|
nfmanager.Config{},
|
|
NewNotificationManagerProviderFactories(routeStore),
|
|
"rulebased",
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Initialize alertmanager from the available alertmanager provider factories
|
|
alertmanager, err := factory.NewProviderFromNamedMap(
|
|
ctx,
|
|
providerSettings,
|
|
config.Alertmanager,
|
|
NewAlertmanagerProviderFactories(sqlstore, orgGetter, notificationManager),
|
|
config.Alertmanager.Provider,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Initialize ruler from the available ruler provider factories
|
|
ruler, err := factory.NewProviderFromNamedMap(
|
|
ctx,
|
|
providerSettings,
|
|
config.Ruler,
|
|
NewRulerProviderFactories(sqlstore),
|
|
"signoz",
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
licensingProviderFactory := licenseProviderFactory(sqlstore, zeus, orgGetter, analytics)
|
|
licensing, err := licensingProviderFactory.New(
|
|
ctx,
|
|
providerSettings,
|
|
licenseConfig,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Initialize all modules
|
|
modules := NewModules(sqlstore, jwt, emailing, providerSettings, orgGetter, alertmanager, analytics, querier)
|
|
|
|
// Initialize all handlers for the modules
|
|
handlers := NewHandlers(modules, providerSettings)
|
|
|
|
// Create a list of all stats collectors
|
|
statsCollectors := []statsreporter.StatsCollector{
|
|
alertmanager,
|
|
ruler,
|
|
modules.Dashboard,
|
|
modules.SavedView,
|
|
modules.User,
|
|
licensing,
|
|
}
|
|
|
|
// Initialize stats reporter from the available stats reporter provider factories
|
|
statsReporter, err := factory.NewProviderFromNamedMap(
|
|
ctx,
|
|
providerSettings,
|
|
config.StatsReporter,
|
|
NewStatsReporterProviderFactories(telemetrystore, statsCollectors, orgGetter, userGetter, version.Info, config.Analytics),
|
|
config.StatsReporter.Provider(),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
registry, err := factory.NewRegistry(
|
|
instrumentation.Logger(),
|
|
factory.NewNamedService(factory.MustNewName("instrumentation"), instrumentation),
|
|
factory.NewNamedService(factory.MustNewName("analytics"), analytics),
|
|
factory.NewNamedService(factory.MustNewName("alertmanager"), alertmanager),
|
|
factory.NewNamedService(factory.MustNewName("licensing"), licensing),
|
|
factory.NewNamedService(factory.MustNewName("statsreporter"), statsReporter),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &SigNoz{
|
|
Registry: registry,
|
|
Analytics: analytics,
|
|
Instrumentation: instrumentation,
|
|
Cache: cache,
|
|
Web: web,
|
|
SQLStore: sqlstore,
|
|
TelemetryStore: telemetrystore,
|
|
Prometheus: prometheus,
|
|
Alertmanager: alertmanager,
|
|
Querier: querier,
|
|
Rules: ruler,
|
|
Zeus: zeus,
|
|
Licensing: licensing,
|
|
Emailing: emailing,
|
|
Sharder: sharder,
|
|
Modules: modules,
|
|
Handlers: handlers,
|
|
}, nil
|
|
}
|