ecluse:ecluse-core
Safe HaskellNone
LanguageGHC2021

Ecluse.Core.Telemetry.Metrics

Description

The ecluse.* metric catalogue and its bounded-label discipline.

An inline proxy sees thousands of distinct packages, so the failure mode for metrics is a series explosion: a single high-cardinality label (a package name, a version, a denial message) multiplied across every package turns a handful of series into millions. This module is the structural defence. It defines the catalogue of metric names and, crucially, the closed set of label types a metric may carry -- every one a small, fixed-domain enum.

Bounded labels

The label vocabulary is a closed sum, Label, whose every constructor pairs a bounded-domain key with a bounded value. High-cardinality identifiers -- package, version, scope, and a denial message -- have no constructor here at all, so they cannot be made into a metric label: the type system forbids it. They live on spans and the structured log line (Ecluse.Log) instead, which is where a specific decision is debugged. The one operator-bounded label is rule (a rule's configured name): a deployment defines a small, fixed set of rules, so it is bounded by configuration rather than by an enum, and is the sole label carrying free text.

renderLabel projects a Label to its (key, value) wire pair, and metricAttributes materialises a label list into the OpenTelemetry Attributes an instrument is recorded with. The catalogue and the cardinality rule are described in docs/architecture/observability.md.

Synopsis

The metric-name catalogue

data MetricName Source #

The catalogue of metric instruments Écluse emits: the ecluse.* domain signals plus the OpenTelemetry HTTP server semantic convention. Each maps to its wire name through metricName; a typed enum so the catalogue is enumerable (and asserted whole in the tests) rather than a scatter of string literals.

Queue backlog and DLQ depth are deliberately absent -- those are cloud-native metrics (CloudWatch, Cloud Monitoring), not signals Écluse re-emits. Advisory-sync metrics are deferred until the advisory subsystem exists.

Constructors

HttpServerRequestDuration

http.server.request.duration -- server request latency (histogram).

ServeDecision

ecluse.serve.decision -- admit/deny/unavailable (counter).

RuleDenials

ecluse.rule.denials -- rule denials by rule and reason class (counter).

RuleEvalDuration

ecluse.rule.eval.duration -- rule-evaluation latency by tier (histogram).

RuleEffectfulFailures

ecluse.rule.effectful.failures -- effectful-rule failures (counter).

RuleBreakerState

ecluse.rule.breaker.state -- effectful/mint breaker state by source (gauge).

ServeAdmissionInFlight

ecluse.serve.admission.in_flight -- in-flight metadata parses (up-down counter).

ServeAdmissionQueued

ecluse.serve.admission.queued -- admissions that waited for a slot (counter).

UpstreamFetchDuration

ecluse.upstream.fetch.duration -- upstream fetch latency (histogram).

UpstreamFetchErrors

ecluse.upstream.fetch.errors -- upstream fetch errors (counter).

MetadataCacheRequests

ecluse.metadata_cache.requests -- metadata-cache hit/miss (counter).

MetadataCacheEntries

ecluse.metadata_cache.entries -- metadata-cache occupancy (gauge).

MetadataCacheResidentBytes

ecluse.metadata_cache.resident_bytes: full-packument cache resident bytes (gauge).

SingleVersionCacheResidentBytes

ecluse.metadata_cache.version.resident_bytes: single-version cache resident bytes (gauge).

AssembledCacheResidentBytes

ecluse.metadata_cache.assembled.resident_bytes: assembled-representation store resident bytes (gauge).

MirrorEnqueued

ecluse.mirror.enqueued -- mirror jobs enqueued (counter).

MirrorEnqueueFailures

ecluse.mirror.enqueue.failures -- mirror enqueue failures (counter).

MirrorJobsProcessed

ecluse.mirror.jobs.processed -- mirror jobs processed by result (counter).

MirrorPublishDuration

ecluse.mirror.publish.duration -- mirror publish latency (histogram).

CredentialRefresh

ecluse.credential.refresh -- credential refreshes by result and provider (counter).

CredentialTokenTtlSeconds

ecluse.credential.token.ttl.seconds -- remaining token lifetime by provider (gauge).

Instances

Instances details
Generic MetricName Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Associated Types

type Rep MetricName 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep MetricName = D1 ('MetaData "MetricName" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) ((((C1 ('MetaCons "HttpServerRequestDuration" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ServeDecision" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "RuleDenials" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "RuleEvalDuration" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "RuleEffectfulFailures" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "RuleBreakerState" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ServeAdmissionInFlight" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "ServeAdmissionQueued" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "UpstreamFetchDuration" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "UpstreamFetchErrors" 'PrefixI 'False) (U1 :: Type -> Type))))) :+: (((C1 ('MetaCons "MetadataCacheRequests" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "MetadataCacheEntries" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "MetadataCacheResidentBytes" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "SingleVersionCacheResidentBytes" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "AssembledCacheResidentBytes" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "MirrorEnqueued" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "MirrorEnqueueFailures" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "MirrorJobsProcessed" 'PrefixI 'False) (U1 :: Type -> Type))) :+: (C1 ('MetaCons "MirrorPublishDuration" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "CredentialRefresh" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "CredentialTokenTtlSeconds" 'PrefixI 'False) (U1 :: Type -> Type))))))
Show MetricName Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Eq MetricName Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Ord MetricName Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Universe MetricName Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep MetricName Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep MetricName = D1 ('MetaData "MetricName" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) ((((C1 ('MetaCons "HttpServerRequestDuration" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ServeDecision" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "RuleDenials" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "RuleEvalDuration" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "RuleEffectfulFailures" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "RuleBreakerState" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ServeAdmissionInFlight" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "ServeAdmissionQueued" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "UpstreamFetchDuration" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "UpstreamFetchErrors" 'PrefixI 'False) (U1 :: Type -> Type))))) :+: (((C1 ('MetaCons "MetadataCacheRequests" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "MetadataCacheEntries" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "MetadataCacheResidentBytes" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "SingleVersionCacheResidentBytes" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "AssembledCacheResidentBytes" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "MirrorEnqueued" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "MirrorEnqueueFailures" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "MirrorJobsProcessed" 'PrefixI 'False) (U1 :: Type -> Type))) :+: (C1 ('MetaCons "MirrorPublishDuration" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "CredentialRefresh" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "CredentialTokenTtlSeconds" 'PrefixI 'False) (U1 :: Type -> Type))))))

metricName :: MetricName -> Text Source #

The wire name of a MetricName.

allMetricNames :: [MetricName] Source #

Every metric in the catalogue (the Generic-derived Universe enumeration).

Label keys (the closed set)

data LabelKey Source #

The closed set of metric label keys. Every label Écluse attaches is one of these bounded-domain keys. High-cardinality identifiers (package, version, scope, a denial message) are deliberately absent -- see highCardinalityKeys -- so they can never become a metric label.

Instances

Instances details
Generic LabelKey Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Associated Types

type Rep LabelKey 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep LabelKey = D1 ('MetaData "LabelKey" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (((C1 ('MetaCons "KeyDecision" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "KeyReasonClass" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "KeyRule" 'PrefixI 'False) (U1 :: Type -> Type))) :+: (C1 ('MetaCons "KeyEcosystem" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "KeyMount" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "KeyUpstream" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "KeyStatusClass" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "KeyResult" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "KeyProvider" 'PrefixI 'False) (U1 :: Type -> Type))) :+: (C1 ('MetaCons "KeyCause" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "KeyBreakerSource" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "KeyTier" 'PrefixI 'False) (U1 :: Type -> Type)))))

Methods

from :: LabelKey -> Rep LabelKey x #

to :: Rep LabelKey x -> LabelKey #

Show LabelKey Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Eq LabelKey Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Ord LabelKey Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Universe LabelKey Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep LabelKey Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep LabelKey = D1 ('MetaData "LabelKey" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (((C1 ('MetaCons "KeyDecision" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "KeyReasonClass" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "KeyRule" 'PrefixI 'False) (U1 :: Type -> Type))) :+: (C1 ('MetaCons "KeyEcosystem" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "KeyMount" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "KeyUpstream" 'PrefixI 'False) (U1 :: Type -> Type)))) :+: ((C1 ('MetaCons "KeyStatusClass" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "KeyResult" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "KeyProvider" 'PrefixI 'False) (U1 :: Type -> Type))) :+: (C1 ('MetaCons "KeyCause" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "KeyBreakerSource" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "KeyTier" 'PrefixI 'False) (U1 :: Type -> Type)))))

labelKeyName :: LabelKey -> Text Source #

The wire name of a LabelKey.

allLabelKeys :: [LabelKey] Source #

Every label key in the closed set.

highCardinalityKeys :: [Text] Source #

The high-cardinality identifiers that must never be metric labels: they live on spans and the structured log line instead. The label-domain guard asserts none of these is a LabelKey wire name; there is, by construction, no Label that produces one.

Bounded label values

data Decision Source #

The serve decision (ecluse.serve.decision).

Constructors

Admit 
Deny 
Unavailable 

Instances

Instances details
Generic Decision Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Associated Types

type Rep Decision 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep Decision = D1 ('MetaData "Decision" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "Admit" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Deny" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Unavailable" 'PrefixI 'False) (U1 :: Type -> Type)))

Methods

from :: Decision -> Rep Decision x #

to :: Rep Decision x -> Decision #

Show Decision Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Eq Decision Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Universe Decision Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep Decision Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep Decision = D1 ('MetaData "Decision" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "Admit" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Deny" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Unavailable" 'PrefixI 'False) (U1 :: Type -> Type)))

data ReasonClass Source #

The bucketed class of a denial reason -- a bounded summary of Ecluse.Core.Server.Response.RejectReason, not the rule name or the message (those are high-cardinality and stay on the log line).

Instances

Instances details
Generic ReasonClass Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Associated Types

type Rep ReasonClass 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep ReasonClass = D1 ('MetaData "ReasonClass" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) ((C1 ('MetaCons "ReasonPolicy" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ReasonMissingIntegrity" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "ReasonUnavailable" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ReasonLimit" 'PrefixI 'False) (U1 :: Type -> Type)))
Show ReasonClass Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Eq ReasonClass Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Universe ReasonClass Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep ReasonClass Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep ReasonClass = D1 ('MetaData "ReasonClass" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) ((C1 ('MetaCons "ReasonPolicy" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ReasonMissingIntegrity" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "ReasonUnavailable" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "ReasonLimit" 'PrefixI 'False) (U1 :: Type -> Type)))

data Upstream Source #

Which upstream a data-plane fetch targeted.

Constructors

Private 
Public 

Instances

Instances details
Generic Upstream Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Associated Types

type Rep Upstream 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep Upstream = D1 ('MetaData "Upstream" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "Private" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Public" 'PrefixI 'False) (U1 :: Type -> Type))

Methods

from :: Upstream -> Rep Upstream x #

to :: Rep Upstream x -> Upstream #

Show Upstream Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Eq Upstream Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Universe Upstream Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep Upstream Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep Upstream = D1 ('MetaData "Upstream" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "Private" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Public" 'PrefixI 'False) (U1 :: Type -> Type))

data StatusClass Source #

The HTTP status class of an upstream response (the bounded summary of the code).

Instances

Instances details
Generic StatusClass Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Associated Types

type Rep StatusClass 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep StatusClass = D1 ('MetaData "StatusClass" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) ((C1 ('MetaCons "Status2xx" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Status3xx" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Status4xx" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Status5xx" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "StatusOther" 'PrefixI 'False) (U1 :: Type -> Type))))
Show StatusClass Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Eq StatusClass Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Universe StatusClass Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep StatusClass Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep StatusClass = D1 ('MetaData "StatusClass" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) ((C1 ('MetaCons "Status2xx" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Status3xx" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Status4xx" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Status5xx" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "StatusOther" 'PrefixI 'False) (U1 :: Type -> Type))))

statusClassOf :: Int -> StatusClass Source #

Classify an HTTP status code into its bounded StatusClass, so a status never becomes a per-code label.

data Provider Source #

The outbound-credential provider a refresh/ttl signal concerns.

Constructors

CodeArtifact 
Static 
Adc 

Instances

Instances details
Generic Provider Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Associated Types

type Rep Provider 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep Provider = D1 ('MetaData "Provider" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "CodeArtifact" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Static" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Adc" 'PrefixI 'False) (U1 :: Type -> Type)))

Methods

from :: Provider -> Rep Provider x #

to :: Rep Provider x -> Provider #

Show Provider Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Eq Provider Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Universe Provider Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep Provider Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep Provider = D1 ('MetaData "Provider" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "CodeArtifact" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Static" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Adc" 'PrefixI 'False) (U1 :: Type -> Type)))

data Cause Source #

A bounded error class for a failure signal (never the exception text).

Instances

Instances details
Generic Cause Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Associated Types

type Rep Cause 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep Cause = D1 ('MetaData "Cause" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) ((C1 ('MetaCons "Timeout" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Connection" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Decode" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "UpstreamStatus" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "OtherCause" 'PrefixI 'False) (U1 :: Type -> Type))))

Methods

from :: Cause -> Rep Cause x #

to :: Rep Cause x -> Cause #

Show Cause Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Methods

showsPrec :: Int -> Cause -> ShowS #

show :: Cause -> String #

showList :: [Cause] -> ShowS #

Eq Cause Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Methods

(==) :: Cause -> Cause -> Bool #

(/=) :: Cause -> Cause -> Bool #

Universe Cause Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Methods

universe :: [Cause] Source #

type Rep Cause Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep Cause = D1 ('MetaData "Cause" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) ((C1 ('MetaCons "Timeout" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Connection" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Decode" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "UpstreamStatus" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "OtherCause" 'PrefixI 'False) (U1 :: Type -> Type))))

data Tier Source #

The rule-evaluation tier a duration is measured at.

Constructors

Structural 
Effectful 

Instances

Instances details
Generic Tier Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Associated Types

type Rep Tier 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep Tier = D1 ('MetaData "Tier" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "Structural" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Effectful" 'PrefixI 'False) (U1 :: Type -> Type))

Methods

from :: Tier -> Rep Tier x #

to :: Rep Tier x -> Tier #

Show Tier Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Methods

showsPrec :: Int -> Tier -> ShowS #

show :: Tier -> String #

showList :: [Tier] -> ShowS #

Eq Tier Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Methods

(==) :: Tier -> Tier -> Bool #

(/=) :: Tier -> Tier -> Bool #

Universe Tier Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Methods

universe :: [Tier] Source #

type Rep Tier Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep Tier = D1 ('MetaData "Tier" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "Structural" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Effectful" 'PrefixI 'False) (U1 :: Type -> Type))

data CacheResult Source #

A metadata-cache lookup result.

Constructors

Hit 
Miss 

Instances

Instances details
Generic CacheResult Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Associated Types

type Rep CacheResult 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep CacheResult = D1 ('MetaData "CacheResult" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "Hit" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Miss" 'PrefixI 'False) (U1 :: Type -> Type))
Show CacheResult Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Eq CacheResult Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Universe CacheResult Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep CacheResult Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep CacheResult = D1 ('MetaData "CacheResult" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "Hit" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Miss" 'PrefixI 'False) (U1 :: Type -> Type))

data MirrorResult Source #

A processed mirror job's result. The idempotent "already present" outcome (a registry 409) is not a distinct value: the worker treats it as a success, so it is counted as Published -- a series that could never emit is not published.

Constructors

Published 
Failed 

Instances

Instances details
Generic MirrorResult Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Associated Types

type Rep MirrorResult 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep MirrorResult = D1 ('MetaData "MirrorResult" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "Published" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Failed" 'PrefixI 'False) (U1 :: Type -> Type))
Show MirrorResult Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Eq MirrorResult Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Universe MirrorResult Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep MirrorResult Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep MirrorResult = D1 ('MetaData "MirrorResult" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "Published" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Failed" 'PrefixI 'False) (U1 :: Type -> Type))

data CredentialResult Source #

A credential-refresh result.

Constructors

Refreshed 
RefreshFailed 

Instances

Instances details
Generic CredentialResult Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Associated Types

type Rep CredentialResult 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep CredentialResult = D1 ('MetaData "CredentialResult" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "Refreshed" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "RefreshFailed" 'PrefixI 'False) (U1 :: Type -> Type))
Show CredentialResult Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Eq CredentialResult Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Universe CredentialResult Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep CredentialResult Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep CredentialResult = D1 ('MetaData "CredentialResult" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "Refreshed" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "RefreshFailed" 'PrefixI 'False) (U1 :: Type -> Type))

data BreakerSource Source #

Which circuit breaker a state gauge concerns.

Instances

Instances details
Generic BreakerSource Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Associated Types

type Rep BreakerSource 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep BreakerSource = D1 ('MetaData "BreakerSource" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "EffectfulRule" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "CredentialMint" 'PrefixI 'False) (U1 :: Type -> Type))
Show BreakerSource Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Eq BreakerSource Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Universe BreakerSource Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep BreakerSource Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep BreakerSource = D1 ('MetaData "BreakerSource" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "EffectfulRule" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "CredentialMint" 'PrefixI 'False) (U1 :: Type -> Type))

Breaker state (a bounded gauge value, not a label)

data BreakerState Source #

The circuit-breaker state, recorded as the value of the ecluse.rule.breaker.state gauge (labelled by BreakerSource). It is a bounded measurement, not a label.

Constructors

Closed 
HalfOpen 
Open 

Instances

Instances details
Generic BreakerState Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Associated Types

type Rep BreakerState 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep BreakerState = D1 ('MetaData "BreakerState" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "Closed" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "HalfOpen" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Open" 'PrefixI 'False) (U1 :: Type -> Type)))
Show BreakerState Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Eq BreakerState Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Universe BreakerState Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep BreakerState Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

type Rep BreakerState = D1 ('MetaData "BreakerState" "Ecluse.Core.Telemetry.Metrics" "ecluse-0.1.0-inplace-ecluse-core" 'False) (C1 ('MetaCons "Closed" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "HalfOpen" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Open" 'PrefixI 'False) (U1 :: Type -> Type)))

breakerStateCode :: BreakerState -> Int64 Source #

The gauge code for a breaker state: 0 closed, 1 half-open, 2 open -- a small ordinal so a dashboard can alarm on "not closed" without a high-cardinality label.

Labels

data Label Source #

A single metric label: a bounded key paired with its bounded value. There is no constructor for a package, version, scope, or message, so a high-cardinality identifier cannot be turned into a label. LRule carries a rule's configured name -- the one operator-bounded label (a deployment defines a small, fixed rule set).

Instances

Instances details
Show Label Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Methods

showsPrec :: Int -> Label -> ShowS #

show :: Label -> String #

showList :: [Label] -> ShowS #

Eq Label Source # 
Instance details

Defined in Ecluse.Core.Telemetry.Metrics

Methods

(==) :: Label -> Label -> Bool #

(/=) :: Label -> Label -> Bool #

labelKey :: Label -> LabelKey Source #

The LabelKey a Label is filed under.

renderLabel :: Label -> (Text, Text) Source #

Project a Label to its (key, value) wire pair.

Attribute construction

metricAttributes :: [Label] -> Attributes Source #

Materialise a label list into the OpenTelemetry Attributes an instrument is recorded with. Every value is bounded, so the attribute set an instrument ever sees is drawn from a small fixed product of the label domains -- never the unbounded space of package identifiers.