| Safe Haskell | None |
|---|---|
| Language | GHC2021 |
Ecluse.Runtime.Telemetry.Instruments.Internal
Description
The instrument handle and the typed record* helpers behind
Ecluse.Runtime.Telemetry.Instruments, which documents the catalogue and re-exports the curated
surface. Importing this module opts out of that stability promise, the convention text and
bytestring use, so production code imports the public one.
Synopsis
- data Metrics
- newMetrics :: Telemetry -> IO Metrics
- metricsPortOf :: Metrics -> MetricsPort
- workerMetricsPortOf :: Metrics -> WorkerMetricsPort
- dredgerMetricsPortOf :: Metrics -> DredgerMetricsPort
- advisorySyncMetricsPortOf :: Metrics -> AdvisorySyncMetricsPort
- advisoryCompileMetricsPortOf :: Metrics -> Maybe Ecosystem -> AdvisoryCompileMetricsPort
- recordServeDecision :: MonadIO m => Metrics -> Decision -> m ()
- recordRuleDenial :: MonadIO m => Metrics -> Maybe Text -> ReasonClass -> m ()
- recordRuleEvalDuration :: MonadIO m => Metrics -> Tier -> Double -> m ()
- recordRuleEffectfulFailure :: MonadIO m => Metrics -> Cause -> m ()
- recordBreakerState :: MonadIO m => Metrics -> BreakerSource -> BreakerState -> m ()
- recordUpstreamFetch :: MonadIO m => Metrics -> Upstream -> StatusClass -> Double -> m ()
- recordUpstreamFetchError :: MonadIO m => Metrics -> Upstream -> Cause -> m ()
- recordCacheRequest :: MonadIO m => Metrics -> CacheResult -> m ()
- recordCacheEntries :: MonadIO m => Metrics -> Int -> m ()
- recordMirrorEnqueued :: MonadIO m => Metrics -> m ()
- recordMirrorEnqueueFailure :: MonadIO m => Metrics -> m ()
- recordMirrorJobProcessed :: MonadIO m => Metrics -> MirrorResult -> m ()
- recordMirrorPublishDuration :: MonadIO m => Metrics -> Double -> m ()
- recordCredentialRefresh :: MonadIO m => Metrics -> Provider -> CredentialResult -> m ()
- registerCredentialTokenTtl :: Metrics -> IO UTCTime -> IO [(Provider, UTCTime)] -> IO ()
- recordAdvisorySyncAttempt :: MonadIO m => Metrics -> Ecosystem -> AdvisorySyncResult -> m ()
- recordAdvisorySyncDuration :: MonadIO m => Metrics -> Ecosystem -> AdvisorySyncResult -> Double -> m ()
- registerAdvisoryDatabaseAge :: Metrics -> Ecosystem -> IO (Maybe Double) -> IO ()
- reportAdvisoryDatabaseAge :: Ecosystem -> IO (Maybe Double) -> ObservableResult Int64 -> IO ()
- registerAdvisorySourceAge :: Metrics -> Ecosystem -> IO (Maybe UTCTime) -> IO ()
- reportAdvisorySourceAge :: Ecosystem -> IO (Maybe UTCTime) -> ObservableResult Int64 -> IO ()
- registerMemoryMeter :: Metrics -> IO MeterSnapshot -> IO ()
- recordAdvisoryCompileAccepted :: MonadIO m => Metrics -> Ecosystem -> Int -> m ()
- recordAdvisoryCompileDropped :: MonadIO m => Metrics -> Ecosystem -> AdvisoryDropCause -> Int -> m ()
- recordAdvisoryCompileRun :: MonadIO m => Metrics -> Ecosystem -> AdvisoryCompileResult -> m ()
The instrument handle
newMetrics :: Telemetry -> IO Metrics Source #
Build instruments on the telemetry meter, or the SDK's no-op meter when disabled.
The core recording ports
metricsPortOf :: Metrics -> MetricsPort Source #
Project the instruments onto the core MetricsPort that Ecluse.Core.Server.Pipeline records
through. It is inert when telemetry is off, since the instruments are.
workerMetricsPortOf :: Metrics -> WorkerMetricsPort Source #
Project the instruments onto the core WorkerMetricsPort that Ecluse.Core.Worker records
through. It is inert when telemetry is off, since the instruments are.
dredgerMetricsPortOf :: Metrics -> DredgerMetricsPort Source #
Project the instruments onto the core DredgerMetricsPort that Ecluse.Core.Registry.Sweep
records through. It is inert when telemetry is off, since the instruments are.
advisorySyncMetricsPortOf :: Metrics -> AdvisorySyncMetricsPort Source #
Project the instruments onto the core AdvisorySyncMetricsPort that Ecluse.Runtime.Cve.Sync
records through. It is inert when telemetry is off, since the instruments are.
advisoryCompileMetricsPortOf :: Metrics -> Maybe Ecosystem -> AdvisoryCompileMetricsPort Source #
Bind compile observations to an ecosystem. An unknown ecosystem records no series.
Serve decision
recordServeDecision :: MonadIO m => Metrics -> Decision -> m () Source #
Record one serve decision (ecluse.serve.decision): admit, deny, or unavailable.
Rule gate
recordRuleDenial :: MonadIO m => Metrics -> Maybe Text -> ReasonClass -> m () Source #
Record one rule denial (ecluse.rule.denials) by reason class and, for a policy denial, the
deciding rule. A non-policy refusal has no rule to attribute, so none is labelled.
recordRuleEvalDuration :: MonadIO m => Metrics -> Tier -> Double -> m () Source #
Record a rule-evaluation latency sample (ecluse.rule.eval.duration) by tier.
recordRuleEffectfulFailure :: MonadIO m => Metrics -> Cause -> m () Source #
Record one effectful-rule failure (ecluse.rule.effectful.failures) by cause.
recordBreakerState :: MonadIO m => Metrics -> BreakerSource -> BreakerState -> m () Source #
Record the current circuit-breaker state (ecluse.rule.breaker.state) for a
source as the gauge's bounded ordinal (0 closed, 1 half-open, 2 open).
Upstream fetch (data plane)
recordUpstreamFetch :: MonadIO m => Metrics -> Upstream -> StatusClass -> Double -> m () Source #
Record an upstream metadata-fetch latency sample to ecluse.upstream.fetch.duration.
recordUpstreamFetchError :: MonadIO m => Metrics -> Upstream -> Cause -> m () Source #
Record one upstream metadata-fetch error to ecluse.upstream.fetch.errors.
Metadata cache
recordCacheRequest :: MonadIO m => Metrics -> CacheResult -> m () Source #
Record one metadata-cache lookup (ecluse.metadata_cache.requests) as hit, miss, or collapsed.
recordCacheEntries :: MonadIO m => Metrics -> Int -> m () Source #
Record the metadata cache's current occupancy (ecluse.metadata_cache.entries).
Mirror
recordMirrorEnqueued :: MonadIO m => Metrics -> m () Source #
Record one mirror job enqueued (ecluse.mirror.enqueued).
recordMirrorEnqueueFailure :: MonadIO m => Metrics -> m () Source #
Record one mirror enqueue failure (ecluse.mirror.enqueue.failures).
recordMirrorJobProcessed :: MonadIO m => Metrics -> MirrorResult -> m () Source #
Record one processed mirror job (ecluse.mirror.jobs.processed) by its result.
recordMirrorPublishDuration :: MonadIO m => Metrics -> Double -> m () Source #
Record a mirror publish latency sample (ecluse.mirror.publish.duration).
Credentials
recordCredentialRefresh :: MonadIO m => Metrics -> Provider -> CredentialResult -> m () Source #
Record one credential refresh (ecluse.credential.refresh) by result and provider.
registerCredentialTokenTtl :: Metrics -> IO UTCTime -> IO [(Provider, UTCTime)] -> IO () Source #
Collect the shortest active expiry per provider as non-negative whole seconds remaining.
Advisory sync
recordAdvisorySyncAttempt :: MonadIO m => Metrics -> Ecosystem -> AdvisorySyncResult -> m () Source #
Record one advisory sync attempt to ecluse.advisory.sync.attempts.
recordAdvisorySyncDuration :: MonadIO m => Metrics -> Ecosystem -> AdvisorySyncResult -> Double -> m () Source #
Record one advisory sync attempt's latency in seconds (ecluse.advisory.sync.duration).
Advisory ages (observable)
registerAdvisoryDatabaseAge :: Metrics -> Ecosystem -> IO (Maybe Double) -> IO () Source #
Attach one ecosystem's advisory-database age to ecluse.advisory.database.age.seconds. The
SDK calls back at each collection, so a sync task that dies cannot freeze or reset the age.
reportAdvisoryDatabaseAge :: Ecosystem -> IO (Maybe Double) -> ObservableResult Int64 -> IO () Source #
What one collection reports: whole seconds from the install stamp to now. With no generation installed it observes nothing, so a never-filled slot never reads as fresh.
registerAdvisorySourceAge :: Metrics -> Ecosystem -> IO (Maybe UTCTime) -> IO () Source #
Attach one ecosystem's advisory-source age to ecluse.advisory.source.age.seconds: the age
the CVE-deny path expires on, where registerAdvisoryDatabaseAge is an installation diagnostic.
reportAdvisorySourceAge :: Ecosystem -> IO (Maybe UTCTime) -> ObservableResult Int64 -> IO () Source #
What one collection reports: whole seconds from the publication time to now. With no push time to measure, it observes nothing rather than a zero.
Memory budget (observable)
registerMemoryMeter :: Metrics -> IO MeterSnapshot -> IO () Source #
Attach the memory meter's figures to their gauges, read at each collection.
Advisory compile
recordAdvisoryCompileAccepted :: MonadIO m => Metrics -> Ecosystem -> Int -> m () Source #
Record the advisory entries one compile pass accepted (ecluse.advisory.compile.accepted).
recordAdvisoryCompileDropped :: MonadIO m => Metrics -> Ecosystem -> AdvisoryDropCause -> Int -> m () Source #
Record the advisory entries one compile pass dropped for a bounded cause
(ecluse.advisory.compile.dropped).
recordAdvisoryCompileRun :: MonadIO m => Metrics -> Ecosystem -> AdvisoryCompileResult -> m () Source #
Record how one compile pass concluded (ecluse.advisory.compile.runs).