Documentation
¶
Index ¶
- Variables
- type App
- func (a *App) ActiveRequests() int
- func (a *App) DB() *sql.DB
- func (app *App) Pause(ctx context.Context) error
- func (app *App) Resume()
- func (app *App) Run(ctx context.Context) error
- func (app *App) Shutdown(ctx context.Context) error
- func (a *App) Status() lifecycle.Status
- func (app *App) Trigger()
- func (a *App) URL() string
- func (a *App) WaitForStartup(ctx context.Context) error
- type Config
Constants ¶
This section is empty.
Variables ¶
View Source
var ErrDBRequired = validation.NewFieldError("db-url", "is required")
ErrDBRequired is returned when the DB URL is unset.
View Source
var ErrLockerShutdown = errors.New("context locker is already shutdown")
ErrLockerShutdown is returned when attempting to aquire a lock after being shutdown.
View Source
var RootCmd = &cobra.Command{ Use: "goalert", Short: "Alerting platform.", RunE: func(cmd *cobra.Command, args []string) error { if viper.GetBool("json") { log.EnableJSON() } if viper.GetBool("verbose") { log.EnableVerbose() } if viper.GetBool("log-errors-only") { log.ErrorsOnly() } err := viper.ReadInConfig() if err != nil && !isCfgNotFound(err) { return errors.Wrap(err, "read config") } err = initPromServer() if err != nil { return err } ctx := context.Background() cfg, err := getConfig() if err != nil { return err } exporters, err := configTracing(ctx, cfg) if err != nil { return errors.Wrap(err, "config tracing") } defer func() { // flush exporters type flusher interface { Flush() } for _, e := range exporters { if f, ok := e.(flusher); ok { f.Flush() } } }() wrappedDriver := sqltrace.WrapDriver(&stdlib.Driver{}, &sqltrace.WrapOptions{Query: true}) u, err := url.Parse(cfg.DBURL) if err != nil { return errors.Wrap(err, "parse old URL") } q := u.Query() if cfg.DBURLNext != "" { q.Set("application_name", fmt.Sprintf("GoAlert %s (S/O Mode)", version.GitVersion())) } else { q.Set("application_name", fmt.Sprintf("GoAlert %s", version.GitVersion())) } q.Set("enable_seqscan", "off") u.RawQuery = q.Encode() cfg.DBURL = u.String() if cfg.APIOnly { err = migrate.VerifyAll(log.EnableDebug(ctx), cfg.DBURL) if err != nil { return errors.Wrap(err, "verify migrations") } } else { s := time.Now() n, err := migrate.ApplyAll(log.EnableDebug(ctx), cfg.DBURL) if err != nil { return errors.Wrap(err, "apply migrations") } if n > 0 { log.Logf(ctx, "Applied %d migrations in %s.", n, time.Since(s)) } } dbc, err := wrappedDriver.OpenConnector(cfg.DBURL) if err != nil { return errors.Wrap(err, "connect to postgres") } var db *sql.DB var h *switchover.Handler if cfg.DBURLNext != "" { u, err := url.Parse(cfg.DBURLNext) if err != nil { return errors.Wrap(err, "parse next URL") } q := u.Query() q.Set("application_name", fmt.Sprintf("GoAlert %s (S/O Mode)", version.GitVersion())) q.Set("enable_seqscan", "off") u.RawQuery = q.Encode() cfg.DBURLNext = u.String() dbcNext, err := wrappedDriver.OpenConnector(cfg.DBURLNext) if err != nil { return errors.Wrap(err, "connect to postres (next)") } h, err = switchover.NewHandler(ctx, dbc, dbcNext, cfg.DBURL, cfg.DBURLNext) if err != nil { return errors.Wrap(err, "init changeover handler") } db = h.DB() } else { db = sql.OpenDB(dbc) } app, err := NewApp(cfg, db) if err != nil { return errors.Wrap(err, "init app") } if h != nil { h.SetApp(app) } go handleShutdown(ctx, func(ctx context.Context) error { if h != nil { h.Abort() } return app.Shutdown(ctx) }) trigCh := make(chan os.Signal, 1) signal.Notify(trigCh, triggerSignals...) go func() { for range trigCh { app.Trigger() } }() return errors.Wrap(app.Run(ctx), "run app") }, }
RootCmd is the configuration for running the app binary.
Functions ¶
This section is empty.
Types ¶
type App ¶
type App struct {
Engine *engine.Engine
AuthHandler *auth.Handler
ConfigStore *config.Store
AlertStore alert.Store
AlertLogStore alertlog.Store
AuthBasicStore *basic.Store
UserStore *user.Store
ContactMethodStore contactmethod.Store
NotificationRuleStore notificationrule.Store
FavoriteStore favorite.Store
ServiceStore service.Store
EscalationStore escalation.Store
IntegrationKeyStore integrationkey.Store
ScheduleRuleStore rule.Store
NotificationStore notification.Store
ScheduleStore *schedule.Store
RotationStore rotation.Store
CalSubStore *calendarsubscription.Store
OverrideStore override.Store
Resolver resolver.Resolver
LimitStore *limit.Store
HeartbeatStore *heartbeat.Store
OAuthKeyring keyring.Keyring
SessionKeyring keyring.Keyring
APIKeyring keyring.Keyring
NonceStore *nonce.Store
LabelStore label.Store
OnCallStore oncall.Store
NCStore notificationchannel.Store
TimeZoneStore *timezone.Store
NoticeStore *notice.Store
// contains filtered or unexported fields
}
App represents an instance of the GoAlert application.
func (*App) ActiveRequests ¶
ActiveRequests returns the current number of active requests, not including pending ones during pause.
func (*App) Shutdown ¶
Shutdown will cause the App to begin a graceful shutdown, using the provided context for any cleanup operations.
func (*App) Trigger ¶
func (app *App) Trigger()
Trigger will start a processing cycle (normally ever ~5s)
type Config ¶ added in v0.25.0
type Config struct {
ListenAddr string
Verbose bool
JSON bool
LogRequests bool
APIOnly bool
TLSListenAddr string
TLSConfig *tls.Config
SysAPIListenAddr string
SysAPICertFile string
SysAPIKeyFile string
SysAPICAFile string
HTTPPrefix string
DBMaxOpen int
DBMaxIdle int
MaxReqBodyBytes int64
MaxReqHeaderBytes int
DisableHTTPSRedirect bool
TwilioBaseURL string
SlackBaseURL string
DBURL string
DBURLNext string
JaegerEndpoint string
JaegerAgentEndpoint string
StackdriverProjectID string
TracingClusterName string
TracingPodNamespace string
TracingPodName string
TracingContainerName string
TracingNodeName string
KubernetesCooldown time.Duration
StatusAddr string
LogTraces bool
TraceProbability float64
EncryptionKeys keyring.Keys
RegionName string
StubNotifiers bool
UIURL string
// InitialConfig will be pushed into the config store
// if specified before the engine is started.
InitialConfig *config.Config
}
Source Files
¶
- app.go
- clusterexporter.go
- cmd.go
- cmdcerts.go
- concurrencylimiter.go
- config.go
- contextlocker.go
- cooldown.go
- defaults.go
- getsetconfig.go
- healthcheck.go
- initauth.go
- initengine.go
- initgraphql.go
- inithttp.go
- inithttputil.go
- initslack.go
- initstores.go
- initsysapi.go
- inittwilio.go
- listenevents.go
- listenstatus.go
- logexporter.go
- metrics.go
- middleware.go
- middlewaregzip.go
- middlewarereqlimit.go
- multilistener.go
- pause.go
- prometheus.go
- recoverexporter.go
- runapp.go
- shutdown.go
- shutdownsignals_unix.go
- startup.go
- tlsconfig.go
- tracing.go
- trigger.go
Click to show internal directories.
Click to hide internal directories.