( ctx context.Context, logger slog.Logger, vals *codersdk.DeploymentValues, options *coderd.Options, )
| 290 | } |
| 291 | |
| 292 | func enablePrometheus( |
| 293 | ctx context.Context, |
| 294 | logger slog.Logger, |
| 295 | vals *codersdk.DeploymentValues, |
| 296 | options *coderd.Options, |
| 297 | ) (closeFn func(), err error) { |
| 298 | options.PrometheusRegistry.MustRegister(collectors.NewGoCollector()) |
| 299 | options.PrometheusRegistry.MustRegister(collectors.NewProcessCollector(collectors.ProcessCollectorOpts{})) |
| 300 | |
| 301 | closeActiveUsersFunc, err := prometheusmetrics.ActiveUsers(ctx, options.Logger.Named("active_user_metrics"), options.PrometheusRegistry, options.Database, 0) |
| 302 | if err != nil { |
| 303 | return nil, xerrors.Errorf("register active users prometheus metric: %w", err) |
| 304 | } |
| 305 | afterCtx(ctx, closeActiveUsersFunc) |
| 306 | |
| 307 | closeUsersFunc, err := prometheusmetrics.Users(ctx, options.Logger.Named("user_metrics"), quartz.NewReal(), options.PrometheusRegistry, options.Database, 0) |
| 308 | if err != nil { |
| 309 | return nil, xerrors.Errorf("register users prometheus metric: %w", err) |
| 310 | } |
| 311 | afterCtx(ctx, closeUsersFunc) |
| 312 | |
| 313 | closeWorkspacesFunc, err := prometheusmetrics.Workspaces(ctx, options.Logger.Named("workspaces_metrics"), options.PrometheusRegistry, options.Database, 0) |
| 314 | if err != nil { |
| 315 | return nil, xerrors.Errorf("register workspaces prometheus metric: %w", err) |
| 316 | } |
| 317 | afterCtx(ctx, closeWorkspacesFunc) |
| 318 | |
| 319 | insightsMetricsCollector, err := insights.NewMetricsCollector(options.Database, options.Logger, 0, 0) |
| 320 | if err != nil { |
| 321 | return nil, xerrors.Errorf("unable to initialize insights metrics collector: %w", err) |
| 322 | } |
| 323 | err = options.PrometheusRegistry.Register(insightsMetricsCollector) |
| 324 | if err != nil { |
| 325 | return nil, xerrors.Errorf("unable to register insights metrics collector: %w", err) |
| 326 | } |
| 327 | |
| 328 | closeInsightsMetricsCollector, err := insightsMetricsCollector.Run(ctx) |
| 329 | if err != nil { |
| 330 | return nil, xerrors.Errorf("unable to run insights metrics collector: %w", err) |
| 331 | } |
| 332 | afterCtx(ctx, closeInsightsMetricsCollector) |
| 333 | |
| 334 | if vals.Prometheus.CollectAgentStats { |
| 335 | experiments := coderd.ReadExperiments(options.Logger, options.DeploymentValues.Experiments.Value()) |
| 336 | closeAgentStatsFunc, err := prometheusmetrics.AgentStats(ctx, logger, options.PrometheusRegistry, options.Database, time.Now(), 0, options.DeploymentValues.Prometheus.AggregateAgentStatsBy.Value(), experiments.Enabled(codersdk.ExperimentWorkspaceUsage)) |
| 337 | if err != nil { |
| 338 | return nil, xerrors.Errorf("register agent stats prometheus metric: %w", err) |
| 339 | } |
| 340 | afterCtx(ctx, closeAgentStatsFunc) |
| 341 | |
| 342 | metricsAggregator, err := prometheusmetrics.NewMetricsAggregator(logger, options.PrometheusRegistry, 0, options.DeploymentValues.Prometheus.AggregateAgentStatsBy.Value()) |
| 343 | if err != nil { |
| 344 | return nil, xerrors.Errorf("can't initialize metrics aggregator: %w", err) |
| 345 | } |
| 346 | |
| 347 | cancelMetricsAggregator := metricsAggregator.Run(ctx) |
| 348 | afterCtx(ctx, cancelMetricsAggregator) |
| 349 |
no test coverage detected