<!-- Add the related story/sub-task/bug number, like Resolves #123, or remove if NA --> **Related issue:** Resolves #44652 Docs: https://github.com/fleetdm/fleet/pull/46631 # Checklist for submitter If some of the following don't apply, delete the relevant line. - [x] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. See [Changes files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files) for more information. - [x] Input data is properly validated, `SELECT *` is avoided, SQL injection is prevented (using placeholders for values in statements), JS inline code is prevented especially for url redirects, and untrusted data interpolated into shell scripts/commands is validated against shell metacharacters. ## Testing - [x] Added/updated automated tests - [x] QA'd all new/changed functionality manually ## Database migrations - [x] Ensured the correct collation is explicitly set for character columns (`COLLATE utf8mb4_unicode_ci`). ## New Fleet configuration settings - [x] Setting(s) is/are explicitly excluded from GitOps <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Route-aware OpenTelemetry trace sampling with tiered default ratios (very low for select high-volume routes, reduced rate for admin reads, full sampling otherwise). * Admin-only GET/PATCH /debug/trace_sampler to view and update sampling ratios and a runtime "force full" toggle. * Liveness probe endpoints (/healthz, /version, /metrics) are excluded from tracing; settings propagate to replicas at runtime without restart. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
40 lines
1.4 KiB
Go
40 lines
1.4 KiB
Go
// Package bootstrap provides the public entry point for the activity bounded context.
|
|
// It wires together internal components and exposes them for use in serve.go.
|
|
package bootstrap
|
|
|
|
import (
|
|
"log/slog"
|
|
|
|
"github.com/fleetdm/fleet/v4/server/activity"
|
|
"github.com/fleetdm/fleet/v4/server/activity/api"
|
|
"github.com/fleetdm/fleet/v4/server/activity/internal/mysql"
|
|
"github.com/fleetdm/fleet/v4/server/activity/internal/service"
|
|
platform_authz "github.com/fleetdm/fleet/v4/server/platform/authz"
|
|
eu "github.com/fleetdm/fleet/v4/server/platform/endpointer"
|
|
platform_mysql "github.com/fleetdm/fleet/v4/server/platform/mysql"
|
|
"github.com/fleetdm/fleet/v4/server/platform/tracing"
|
|
"github.com/go-kit/kit/endpoint"
|
|
)
|
|
|
|
// New creates a new activity bounded context and returns its service and route handler.
|
|
func New(
|
|
dbConns *platform_mysql.DBConnections,
|
|
authorizer platform_authz.Authorizer,
|
|
providers activity.DataProviders,
|
|
logger *slog.Logger,
|
|
) (api.Service, func(authMiddleware endpoint.Middleware) eu.HandlerRoutesFunc) {
|
|
ds := mysql.NewDatastore(dbConns, logger)
|
|
svc := service.NewService(authorizer, ds, providers, logger)
|
|
|
|
routesFn := func(authMiddleware endpoint.Middleware) eu.HandlerRoutesFunc {
|
|
return service.GetRoutes(svc, authMiddleware)
|
|
}
|
|
|
|
return svc, routesFn
|
|
}
|
|
|
|
// RegisterTracingTiers classifies the activity context's routes for trace sampling.
|
|
func RegisterTracingTiers(registry *tracing.Registry) {
|
|
service.RegisterTracingTiers(registry)
|
|
}
|