diff --git a/cmd/fastly-exporter/main.go b/cmd/fastly-exporter/main.go index 33931fa..23f0ada 100644 --- a/cmd/fastly-exporter/main.go +++ b/cmd/fastly-exporter/main.go @@ -44,6 +44,7 @@ func main() { serviceRefresh time.Duration apiTimeout time.Duration rtTimeout time.Duration + aggregateOnly bool debug bool versionFlag bool configFileExample bool @@ -67,6 +68,7 @@ func main() { fs.DurationVar(&serviceRefresh, "api-refresh", 1*time.Minute, "DEPRECATED -- use service-refresh instead") fs.DurationVar(&apiTimeout, "api-timeout", 15*time.Second, "HTTP client timeout for api.fastly.com requests (5–60s)") fs.DurationVar(&rtTimeout, "rt-timeout", 45*time.Second, "HTTP client timeout for rt.fastly.com requests (45–120s)") + fs.BoolVar(&aggregateOnly, "aggregate-only", false, "Use aggregated data rather than per-datacenter") fs.BoolVar(&debug, "debug", false, "log debug information") fs.BoolVar(&versionFlag, "version", false, "print version information and exit") fs.String("config-file", "", "config file (optional)") @@ -341,6 +343,7 @@ func main() { subscriberOptions = []rt.SubscriberOption{ rt.WithLogger(rtLogger), rt.WithMetadataProvider(serviceCache), + rt.WithAggregateOnly(aggregateOnly), } ) manager = rt.NewManager(serviceCache, rtClient, token, registry, subscriberOptions, productCache, rtLogger) diff --git a/pkg/realtime/process.go b/pkg/realtime/process.go index 394576d..74822c3 100644 --- a/pkg/realtime/process.go +++ b/pkg/realtime/process.go @@ -6,250 +6,260 @@ import ( "github.com/prometheus/client_golang/prometheus" ) +const aggregateDC = "aggregate" + // Process updates the metrics with data from the API response. -func Process(response *Response, serviceID, serviceName, serviceVersion string, m *Metrics) { +func Process(response *Response, serviceID, serviceName, serviceVersion string, m *Metrics, aggregateOnly bool) { for _, d := range response.Data { - for datacenter, stats := range d.Datacenter { - m.AttackBlockedReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackBlockedReqBodyBytes)) - m.AttackBlockedReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackBlockedReqHeaderBytes)) - m.AttackLoggedReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackLoggedReqBodyBytes)) - m.AttackLoggedReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackLoggedReqHeaderBytes)) - m.AttackPassedReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackPassedReqBodyBytes)) - m.AttackPassedReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackPassedReqHeaderBytes)) - m.AttackReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackReqBodyBytes)) - m.AttackReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackReqHeaderBytes)) - m.AttackRespSynthBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackRespSynthBytes)) - m.BackendReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BackendReqBodyBytes)) - m.BackendReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BackendReqHeaderBytes)) - m.BlacklistedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Blacklisted)) - m.BodySizeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BodySize)) - m.BotChallengeCompleteTokensCheckedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeCompleteTokensChecked)) - m.BotChallengeCompleteTokensDisabledTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeCompleteTokensDisabled)) - m.BotChallengeCompleteTokensFailedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeCompleteTokensFailed)) - m.BotChallengeCompleteTokensIssuedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeCompleteTokensIssued)) - m.BotChallengeCompleteTokensPassedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeCompleteTokensPassed)) - m.BotChallengeStartsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeStarts)) - m.BotChallengesFailedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengesFailed)) - m.BotChallengesIssuedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengesIssued)) - m.BotChallengesSucceededTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengesSucceeded)) - m.ComputeBackendReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeBackendReqBodyBytesTotal)) - m.ComputeBackendReqErrorsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeBackendReqErrorsTotal)) - m.ComputeBackendReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeBackendReqHeaderBytesTotal)) - m.ComputeBackendReqTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeBackendReqTotal)) - m.ComputeBackendRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeBackendRespBodyBytesTotal)) - m.ComputeBackendRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeBackendRespHeaderBytesTotal)) - m.ComputeExecutionTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeExecutionTimeMilliseconds) / 10000.0) - m.ComputeGlobalsLimitExceededTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeGlobalsLimitExceededTotal)) - m.ComputeGuestErrorsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeGuestErrorsTotal)) - m.ComputeHeapLimitExceededTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeHeapLimitExceededTotal)) - m.ComputeRAMUsedBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRAMUsed)) - m.ComputeReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeReqBodyBytesTotal)) - m.ComputeReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeReqHeaderBytesTotal)) - m.ComputeRequestTimeBilledTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRequestTimeBilledMilliseconds) / 10000.0) - m.ComputeRequestTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRequestTimeMilliseconds) / 10000.0) - m.ComputeRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRequests)) - m.ComputeResourceLimitExceedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeResourceLimitExceedTotal)) - m.ComputeRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRespBodyBytesTotal)) - m.ComputeRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRespHeaderBytesTotal)) - m.ComputeRespStatusTotal.WithLabelValues(serviceID, serviceName, datacenter, "1xx").Add(float64(stats.ComputeRespStatus1xx)) - m.ComputeRespStatusTotal.WithLabelValues(serviceID, serviceName, datacenter, "2xx").Add(float64(stats.ComputeRespStatus2xx)) - m.ComputeRespStatusTotal.WithLabelValues(serviceID, serviceName, datacenter, "3xx").Add(float64(stats.ComputeRespStatus3xx)) - m.ComputeRespStatusTotal.WithLabelValues(serviceID, serviceName, datacenter, "4xx").Add(float64(stats.ComputeRespStatus4xx)) - m.ComputeRespStatusTotal.WithLabelValues(serviceID, serviceName, datacenter, "5xx").Add(float64(stats.ComputeRespStatus5xx)) - m.ComputeRuntimeErrorsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRuntimeErrorsTotal)) - m.ComputeStackLimitExceededTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeStackLimitExceededTotal)) - m.DDOSActionBlackholeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionBlackhole)) - m.DDOSActionCloseTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionClose)) - m.DDOSActionDowngradeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionDowngrade)) - m.DDOSActionDowngradedConnectionsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionDowngradedConnections)) - m.DDOSActionLimitStreamsConnectionsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionLimitStreamsConnections)) - m.DDOSActionLimitStreamsRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionLimitStreamsRequests)) - m.DDOSActionTarpitAcceptTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionTarpitAccept)) - m.DDOSActionTarpitTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionTarpit)) - m.DeliverSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DeliverSubCount)) - m.DeliverSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DeliverSubTime)) - m.EdgeHitRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.EdgeHitRequests)) - m.EdgeHitRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.EdgeHitRespBodyBytes)) - m.EdgeHitRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.EdgeHitRespHeaderBytes)) - m.EdgeMissRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.EdgeMissRequests)) - m.EdgeMissRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.EdgeMissRespBodyBytes)) - m.EdgeMissRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.EdgeMissRespHeaderBytes)) - m.EdgeRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.EdgeRespBodyBytes)) - m.EdgeRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.EdgeRespHeaderBytes)) - m.EdgeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Edge)) - m.ErrorSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ErrorSubCount)) - m.ErrorSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ErrorSubTime)) - m.ErrorsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Errors)) - m.FanoutBackendReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutBackendReqBodyBytes)) - m.FanoutBackendReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutBackendReqHeaderBytes)) - m.FanoutBackendRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutBackendRespBodyBytes)) - m.FanoutBackendRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutBackendRespHeaderBytes)) - m.FanoutConnTimeMsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutConnTimeMs)) - m.FanoutRecvPublishesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutRecvPublishes)) - m.FanoutReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutReqBodyBytes)) - m.FanoutReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutReqHeaderBytes)) - m.FanoutRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutRespBodyBytes)) - m.FanoutRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutRespHeaderBytes)) - m.FanoutSendPublishesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutSendPublishes)) - m.FetchSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FetchSubCount)) - m.FetchSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FetchSubTime)) - m.HTTPTotal.WithLabelValues(serviceID, serviceName, datacenter, "1").Add(float64(stats.Requests - (stats.HTTP2 + stats.HTTP3))) - m.HTTPTotal.WithLabelValues(serviceID, serviceName, datacenter, "2").Add(float64(stats.HTTP2)) - m.HTTPTotal.WithLabelValues(serviceID, serviceName, datacenter, "3").Add(float64(stats.HTTP3)) - m.HTTP2Total.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HTTP2)) - m.HTTP3Total.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HTTP3)) - m.HashSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HashSubCount)) - m.HashSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HashSubTime)) - m.HeaderSizeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HeaderSize)) - m.HitRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HitRespBodyBytes)) - m.HitSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HitSubCount)) - m.HitSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HitSubTime)) - m.HitsTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HitsTime)) - m.HitsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Hits)) - m.IPv6Total.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.IPv6)) - m.ImgOptoRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOptoRespBodyBytes)) - m.ImgOptoRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOptoRespHeaderBytes)) - m.ImgOptoShieldRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOptoShieldRespBodyBytes)) - m.ImgOptoShieldRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOptoShieldRespHeaderBytes)) - m.ImgOptoShieldTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOptoShield)) - m.ImgOptoTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOpto)) - m.ImgOptoTransformRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOptoTransformRespBodyBytes)) - m.ImgOptoTransformRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOptoTransformRespHeaderBytes)) - m.ImgOptoTransformTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOptoTransform)) - m.ImgVideoFramesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgVideoFrames)) - m.ImgVideoRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgVideoRespBodyBytes)) - m.ImgVideoRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgVideoRespHeaderBytes)) - m.ImgVideoShieldFramesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgVideoShieldFrames)) - m.ImgVideoShieldRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgVideoShieldRespBodyBytes)) - m.ImgVideoShieldRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgVideoShieldRespHeaderBytes)) - m.ImgVideoShieldTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgVideoShield)) - m.ImgVideoTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgVideo)) - m.KVStoreClassAOperationsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.KVStoreClassAOperations)) - m.KVStoreClassBOperationsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.KVStoreClassBOperations)) - m.LogBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.LogBytes)) - m.LoggingTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Logging)) - m.MissRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.MissRespBodyBytes)) - m.MissSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.MissSubCount)) - m.MissSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.MissSubTime)) - m.MissTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.MissTime)) - m.MissesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Misses)) - m.OTFPDeliverTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPDeliverTime)) - m.OTFPManifestTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPManifest)) - m.OTFPRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPRespBodyBytes)) - m.OTFPRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPRespHeaderBytes)) - m.OTFPShieldRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPShieldRespBodyBytes)) - m.OTFPShieldRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPShieldRespHeaderBytes)) - m.OTFPShieldTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPShieldTime)) - m.OTFPShieldTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPShield)) - m.OTFPTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFP)) - m.OTFPTransformRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPTransformRespBodyBytes)) - m.OTFPTransformRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPTransformRespHeaderBytes)) - m.OTFPTransformTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPTransformTime)) - m.OTFPTransformTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPTransform)) - m.OriginCacheFetchRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginCacheFetchRespBodyBytes)) - m.OriginCacheFetchRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginCacheFetchRespHeaderBytes)) - m.OriginCacheFetchesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginCacheFetches)) - m.OriginFetchBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginFetchBodyBytes)) - m.OriginFetchHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginFetchHeaderBytes)) - m.OriginFetchRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginFetchRespBodyBytes)) - m.OriginFetchRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginFetchRespHeaderBytes)) - m.OriginFetchesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginFetches)) - m.OriginRevalidationsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginRevalidations)) - m.PCITotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PCI)) - m.PassRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PassRespBodyBytes)) - m.PassSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PassSubCount)) - m.PassSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PassSubTime)) - m.PassTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PassTime)) - m.PassesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Passes)) - m.Pipe.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Pipe)) - m.PipeSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PipeSubCount)) - m.PipeSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PipeSubTime)) - m.PredeliverSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PredeliverSubCount)) - m.PredeliverSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PredeliverSubTime)) - m.PrehashSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PrehashSubCount)) - m.PrehashSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PrehashSubTime)) - m.RecvSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.RecvSubCount)) - m.RecvSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.RecvSubTime)) - m.ReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ReqBodyBytes)) - m.ReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ReqHeaderBytes)) - m.RequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Requests)) - m.RespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.RespBodyBytes)) - m.RespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.RespHeaderBytes)) - m.RestartTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Restart)) - m.SegBlockOriginFetchesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.SegBlockOriginFetches)) - m.SegBlockShieldFetchesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.SegBlockShieldFetches)) - m.ShieldCacheFetchesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldCacheFetches)) - m.ShieldFetchBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldFetchBodyBytes)) - m.ShieldFetchHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldFetchHeaderBytes)) - m.ShieldFetchRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldFetchRespBodyBytes)) - m.ShieldFetchRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldFetchRespHeaderBytes)) - m.ShieldFetchesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldFetches)) - m.ShieldHitRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldHitRequests)) - m.ShieldHitRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldHitRespBodyBytes)) - m.ShieldHitRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldHitRespHeaderBytes)) - m.ShieldMissRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldMissRequests)) - m.ShieldMissRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldMissRespBodyBytes)) - m.ShieldMissRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldMissRespHeaderBytes)) - m.ShieldRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldRespBodyBytes)) - m.ShieldRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldRespHeaderBytes)) - m.ShieldRevalidationsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldRevalidations)) - m.ShieldTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Shield)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "200").Add(float64(stats.Status200)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "204").Add(float64(stats.Status204)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "206").Add(float64(stats.Status206)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "301").Add(float64(stats.Status301)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "302").Add(float64(stats.Status302)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "304").Add(float64(stats.Status304)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "400").Add(float64(stats.Status400)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "401").Add(float64(stats.Status401)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "403").Add(float64(stats.Status403)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "404").Add(float64(stats.Status404)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "406").Add(float64(stats.Status406)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "416").Add(float64(stats.Status416)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "429").Add(float64(stats.Status429)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "500").Add(float64(stats.Status500)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "501").Add(float64(stats.Status501)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "502").Add(float64(stats.Status502)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "503").Add(float64(stats.Status503)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "504").Add(float64(stats.Status504)) - m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "505").Add(float64(stats.Status505)) - m.StatusGroupTotal.WithLabelValues(serviceID, serviceName, datacenter, "1xx").Add(float64(stats.Status1xx)) - m.StatusGroupTotal.WithLabelValues(serviceID, serviceName, datacenter, "2xx").Add(float64(stats.Status2xx)) - m.StatusGroupTotal.WithLabelValues(serviceID, serviceName, datacenter, "3xx").Add(float64(stats.Status3xx)) - m.StatusGroupTotal.WithLabelValues(serviceID, serviceName, datacenter, "4xx").Add(float64(stats.Status4xx)) - m.StatusGroupTotal.WithLabelValues(serviceID, serviceName, datacenter, "5xx").Add(float64(stats.Status5xx)) - m.SynthsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Synths)) - m.TLSTotal.WithLabelValues(serviceID, serviceName, datacenter, "1.0").Add(float64(stats.TLSv10)) - m.TLSTotal.WithLabelValues(serviceID, serviceName, datacenter, "1.1").Add(float64(stats.TLSv11)) - m.TLSTotal.WithLabelValues(serviceID, serviceName, datacenter, "1.2").Add(float64(stats.TLSv12)) - m.TLSTotal.WithLabelValues(serviceID, serviceName, datacenter, "1.3").Add(float64(stats.TLSv13)) - m.UncacheableTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Uncacheable)) - m.VclOnComputeHitRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeHitRequests)) - m.VclOnComputeMissRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeMissRequests)) - m.VclOnComputePassRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputePassRequests)) - m.VclOnComputeErrorRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeErrorRequests)) - m.VclOnComputeSynthRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeSynthRequests)) - m.VclOnComputeEdgeHitRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeEdgeHitRequests)) - m.VclOnComputeEdgeMissRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeEdgeMissRequests)) - m.VideoTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Video)) - m.WAFBlockedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WAFBlocked)) - m.WAFLoggedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WAFLogged)) - m.WAFPassedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WAFPassed)) - m.WebsocketBackendReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketBackendReqBodyBytes)) - m.WebsocketBackendReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketBackendReqHeaderBytes)) - m.WebsocketBackendRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketBackendRespBodyBytes)) - m.WebsocketBackendRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketBackendRespHeaderBytes)) - m.WebsocketConnTimeMsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketConnTimeMs)) - m.WebsocketReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketReqBodyBytes)) - m.WebsocketReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketReqHeaderBytes)) - m.WebsocketRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketRespBodyBytes)) - m.WebsocketRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketRespHeaderBytes)) - processHistogram(stats.MissHistogram, m.MissDurationSeconds.WithLabelValues(serviceID, serviceName, datacenter)) - processObjectSizes(stats.ObjectSize1k, stats.ObjectSize10k, stats.ObjectSize100k, stats.ObjectSize1m, stats.ObjectSize10m, stats.ObjectSize100m, stats.ObjectSize1g, m.ObjectSizeBytes.WithLabelValues(serviceID, serviceName, datacenter)) + if aggregateOnly { + process(serviceID, serviceName, aggregateDC, d.Aggregated, m) + } else { + for datacenter, stats := range d.Datacenter { + process(serviceID, serviceName, datacenter, stats, m) + } } } } +func process(serviceID, serviceName, datacenter string, stats Datacenter, m *Metrics) { + m.AttackBlockedReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackBlockedReqBodyBytes)) + m.AttackBlockedReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackBlockedReqHeaderBytes)) + m.AttackLoggedReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackLoggedReqBodyBytes)) + m.AttackLoggedReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackLoggedReqHeaderBytes)) + m.AttackPassedReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackPassedReqBodyBytes)) + m.AttackPassedReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackPassedReqHeaderBytes)) + m.AttackReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackReqBodyBytes)) + m.AttackReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackReqHeaderBytes)) + m.AttackRespSynthBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.AttackRespSynthBytes)) + m.BackendReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BackendReqBodyBytes)) + m.BackendReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BackendReqHeaderBytes)) + m.BlacklistedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Blacklisted)) + m.BodySizeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BodySize)) + m.BotChallengeCompleteTokensCheckedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeCompleteTokensChecked)) + m.BotChallengeCompleteTokensDisabledTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeCompleteTokensDisabled)) + m.BotChallengeCompleteTokensFailedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeCompleteTokensFailed)) + m.BotChallengeCompleteTokensIssuedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeCompleteTokensIssued)) + m.BotChallengeCompleteTokensPassedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeCompleteTokensPassed)) + m.BotChallengeStartsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengeStarts)) + m.BotChallengesFailedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengesFailed)) + m.BotChallengesIssuedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengesIssued)) + m.BotChallengesSucceededTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.BotChallengesSucceeded)) + m.ComputeBackendReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeBackendReqBodyBytesTotal)) + m.ComputeBackendReqErrorsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeBackendReqErrorsTotal)) + m.ComputeBackendReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeBackendReqHeaderBytesTotal)) + m.ComputeBackendReqTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeBackendReqTotal)) + m.ComputeBackendRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeBackendRespBodyBytesTotal)) + m.ComputeBackendRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeBackendRespHeaderBytesTotal)) + m.ComputeExecutionTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeExecutionTimeMilliseconds) / 10000.0) + m.ComputeGlobalsLimitExceededTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeGlobalsLimitExceededTotal)) + m.ComputeGuestErrorsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeGuestErrorsTotal)) + m.ComputeHeapLimitExceededTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeHeapLimitExceededTotal)) + m.ComputeRAMUsedBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRAMUsed)) + m.ComputeReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeReqBodyBytesTotal)) + m.ComputeReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeReqHeaderBytesTotal)) + m.ComputeRequestTimeBilledTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRequestTimeBilledMilliseconds) / 10000.0) + m.ComputeRequestTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRequestTimeMilliseconds) / 10000.0) + m.ComputeRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRequests)) + m.ComputeResourceLimitExceedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeResourceLimitExceedTotal)) + m.ComputeRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRespBodyBytesTotal)) + m.ComputeRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRespHeaderBytesTotal)) + m.ComputeRespStatusTotal.WithLabelValues(serviceID, serviceName, datacenter, "1xx").Add(float64(stats.ComputeRespStatus1xx)) + m.ComputeRespStatusTotal.WithLabelValues(serviceID, serviceName, datacenter, "2xx").Add(float64(stats.ComputeRespStatus2xx)) + m.ComputeRespStatusTotal.WithLabelValues(serviceID, serviceName, datacenter, "3xx").Add(float64(stats.ComputeRespStatus3xx)) + m.ComputeRespStatusTotal.WithLabelValues(serviceID, serviceName, datacenter, "4xx").Add(float64(stats.ComputeRespStatus4xx)) + m.ComputeRespStatusTotal.WithLabelValues(serviceID, serviceName, datacenter, "5xx").Add(float64(stats.ComputeRespStatus5xx)) + m.ComputeRuntimeErrorsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeRuntimeErrorsTotal)) + m.ComputeStackLimitExceededTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ComputeStackLimitExceededTotal)) + m.DDOSActionBlackholeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionBlackhole)) + m.DDOSActionCloseTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionClose)) + m.DDOSActionDowngradeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionDowngrade)) + m.DDOSActionDowngradedConnectionsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionDowngradedConnections)) + m.DDOSActionLimitStreamsConnectionsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionLimitStreamsConnections)) + m.DDOSActionLimitStreamsRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionLimitStreamsRequests)) + m.DDOSActionTarpitAcceptTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionTarpitAccept)) + m.DDOSActionTarpitTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DDOSActionTarpit)) + m.DeliverSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DeliverSubCount)) + m.DeliverSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.DeliverSubTime)) + m.EdgeHitRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.EdgeHitRequests)) + m.EdgeHitRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.EdgeHitRespBodyBytes)) + m.EdgeHitRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.EdgeHitRespHeaderBytes)) + m.EdgeMissRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.EdgeMissRequests)) + m.EdgeMissRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.EdgeMissRespBodyBytes)) + m.EdgeMissRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.EdgeMissRespHeaderBytes)) + m.EdgeRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.EdgeRespBodyBytes)) + m.EdgeRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.EdgeRespHeaderBytes)) + m.EdgeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Edge)) + m.ErrorSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ErrorSubCount)) + m.ErrorSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ErrorSubTime)) + m.ErrorsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Errors)) + m.FanoutBackendReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutBackendReqBodyBytes)) + m.FanoutBackendReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutBackendReqHeaderBytes)) + m.FanoutBackendRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutBackendRespBodyBytes)) + m.FanoutBackendRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutBackendRespHeaderBytes)) + m.FanoutConnTimeMsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutConnTimeMs)) + m.FanoutRecvPublishesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutRecvPublishes)) + m.FanoutReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutReqBodyBytes)) + m.FanoutReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutReqHeaderBytes)) + m.FanoutRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutRespBodyBytes)) + m.FanoutRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutRespHeaderBytes)) + m.FanoutSendPublishesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FanoutSendPublishes)) + m.FetchSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FetchSubCount)) + m.FetchSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.FetchSubTime)) + m.HTTPTotal.WithLabelValues(serviceID, serviceName, datacenter, "1").Add(float64(stats.Requests - (stats.HTTP2 + stats.HTTP3))) + m.HTTPTotal.WithLabelValues(serviceID, serviceName, datacenter, "2").Add(float64(stats.HTTP2)) + m.HTTPTotal.WithLabelValues(serviceID, serviceName, datacenter, "3").Add(float64(stats.HTTP3)) + m.HTTP2Total.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HTTP2)) + m.HTTP3Total.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HTTP3)) + m.HashSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HashSubCount)) + m.HashSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HashSubTime)) + m.HeaderSizeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HeaderSize)) + m.HitRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HitRespBodyBytes)) + m.HitSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HitSubCount)) + m.HitSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HitSubTime)) + m.HitsTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.HitsTime)) + m.HitsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Hits)) + m.IPv6Total.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.IPv6)) + m.ImgOptoRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOptoRespBodyBytes)) + m.ImgOptoRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOptoRespHeaderBytes)) + m.ImgOptoShieldRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOptoShieldRespBodyBytes)) + m.ImgOptoShieldRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOptoShieldRespHeaderBytes)) + m.ImgOptoShieldTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOptoShield)) + m.ImgOptoTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOpto)) + m.ImgOptoTransformRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOptoTransformRespBodyBytes)) + m.ImgOptoTransformRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOptoTransformRespHeaderBytes)) + m.ImgOptoTransformTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgOptoTransform)) + m.ImgVideoFramesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgVideoFrames)) + m.ImgVideoRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgVideoRespBodyBytes)) + m.ImgVideoRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgVideoRespHeaderBytes)) + m.ImgVideoShieldFramesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgVideoShieldFrames)) + m.ImgVideoShieldRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgVideoShieldRespBodyBytes)) + m.ImgVideoShieldRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgVideoShieldRespHeaderBytes)) + m.ImgVideoShieldTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgVideoShield)) + m.ImgVideoTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ImgVideo)) + m.KVStoreClassAOperationsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.KVStoreClassAOperations)) + m.KVStoreClassBOperationsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.KVStoreClassBOperations)) + m.LogBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.LogBytes)) + m.LoggingTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Logging)) + m.MissRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.MissRespBodyBytes)) + m.MissSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.MissSubCount)) + m.MissSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.MissSubTime)) + m.MissTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.MissTime)) + m.MissesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Misses)) + m.OTFPDeliverTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPDeliverTime)) + m.OTFPManifestTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPManifest)) + m.OTFPRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPRespBodyBytes)) + m.OTFPRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPRespHeaderBytes)) + m.OTFPShieldRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPShieldRespBodyBytes)) + m.OTFPShieldRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPShieldRespHeaderBytes)) + m.OTFPShieldTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPShieldTime)) + m.OTFPShieldTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPShield)) + m.OTFPTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFP)) + m.OTFPTransformRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPTransformRespBodyBytes)) + m.OTFPTransformRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPTransformRespHeaderBytes)) + m.OTFPTransformTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPTransformTime)) + m.OTFPTransformTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OTFPTransform)) + m.OriginCacheFetchRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginCacheFetchRespBodyBytes)) + m.OriginCacheFetchRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginCacheFetchRespHeaderBytes)) + m.OriginCacheFetchesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginCacheFetches)) + m.OriginFetchBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginFetchBodyBytes)) + m.OriginFetchHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginFetchHeaderBytes)) + m.OriginFetchRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginFetchRespBodyBytes)) + m.OriginFetchRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginFetchRespHeaderBytes)) + m.OriginFetchesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginFetches)) + m.OriginRevalidationsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.OriginRevalidations)) + m.PCITotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PCI)) + m.PassRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PassRespBodyBytes)) + m.PassSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PassSubCount)) + m.PassSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PassSubTime)) + m.PassTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PassTime)) + m.PassesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Passes)) + m.Pipe.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Pipe)) + m.PipeSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PipeSubCount)) + m.PipeSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PipeSubTime)) + m.PredeliverSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PredeliverSubCount)) + m.PredeliverSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PredeliverSubTime)) + m.PrehashSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PrehashSubCount)) + m.PrehashSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.PrehashSubTime)) + m.RecvSubCountTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.RecvSubCount)) + m.RecvSubTimeTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.RecvSubTime)) + m.ReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ReqBodyBytes)) + m.ReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ReqHeaderBytes)) + m.RequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Requests)) + m.RespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.RespBodyBytes)) + m.RespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.RespHeaderBytes)) + m.RestartTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Restart)) + m.SegBlockOriginFetchesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.SegBlockOriginFetches)) + m.SegBlockShieldFetchesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.SegBlockShieldFetches)) + m.ShieldCacheFetchesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldCacheFetches)) + m.ShieldFetchBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldFetchBodyBytes)) + m.ShieldFetchHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldFetchHeaderBytes)) + m.ShieldFetchRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldFetchRespBodyBytes)) + m.ShieldFetchRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldFetchRespHeaderBytes)) + m.ShieldFetchesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldFetches)) + m.ShieldHitRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldHitRequests)) + m.ShieldHitRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldHitRespBodyBytes)) + m.ShieldHitRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldHitRespHeaderBytes)) + m.ShieldMissRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldMissRequests)) + m.ShieldMissRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldMissRespBodyBytes)) + m.ShieldMissRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldMissRespHeaderBytes)) + m.ShieldRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldRespBodyBytes)) + m.ShieldRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldRespHeaderBytes)) + m.ShieldRevalidationsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.ShieldRevalidations)) + m.ShieldTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Shield)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "200").Add(float64(stats.Status200)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "204").Add(float64(stats.Status204)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "206").Add(float64(stats.Status206)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "301").Add(float64(stats.Status301)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "302").Add(float64(stats.Status302)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "304").Add(float64(stats.Status304)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "400").Add(float64(stats.Status400)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "401").Add(float64(stats.Status401)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "403").Add(float64(stats.Status403)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "404").Add(float64(stats.Status404)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "406").Add(float64(stats.Status406)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "416").Add(float64(stats.Status416)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "429").Add(float64(stats.Status429)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "500").Add(float64(stats.Status500)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "501").Add(float64(stats.Status501)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "502").Add(float64(stats.Status502)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "503").Add(float64(stats.Status503)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "504").Add(float64(stats.Status504)) + m.StatusCodeTotal.WithLabelValues(serviceID, serviceName, datacenter, "505").Add(float64(stats.Status505)) + m.StatusGroupTotal.WithLabelValues(serviceID, serviceName, datacenter, "1xx").Add(float64(stats.Status1xx)) + m.StatusGroupTotal.WithLabelValues(serviceID, serviceName, datacenter, "2xx").Add(float64(stats.Status2xx)) + m.StatusGroupTotal.WithLabelValues(serviceID, serviceName, datacenter, "3xx").Add(float64(stats.Status3xx)) + m.StatusGroupTotal.WithLabelValues(serviceID, serviceName, datacenter, "4xx").Add(float64(stats.Status4xx)) + m.StatusGroupTotal.WithLabelValues(serviceID, serviceName, datacenter, "5xx").Add(float64(stats.Status5xx)) + m.SynthsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Synths)) + m.TLSTotal.WithLabelValues(serviceID, serviceName, datacenter, "1.0").Add(float64(stats.TLSv10)) + m.TLSTotal.WithLabelValues(serviceID, serviceName, datacenter, "1.1").Add(float64(stats.TLSv11)) + m.TLSTotal.WithLabelValues(serviceID, serviceName, datacenter, "1.2").Add(float64(stats.TLSv12)) + m.TLSTotal.WithLabelValues(serviceID, serviceName, datacenter, "1.3").Add(float64(stats.TLSv13)) + m.UncacheableTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Uncacheable)) + m.VclOnComputeHitRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeHitRequests)) + m.VclOnComputeMissRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeMissRequests)) + m.VclOnComputePassRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputePassRequests)) + m.VclOnComputeErrorRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeErrorRequests)) + m.VclOnComputeSynthRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeSynthRequests)) + m.VclOnComputeEdgeHitRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeEdgeHitRequests)) + m.VclOnComputeEdgeMissRequestsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.VclOnComputeEdgeMissRequests)) + m.VideoTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.Video)) + m.WAFBlockedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WAFBlocked)) + m.WAFLoggedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WAFLogged)) + m.WAFPassedTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WAFPassed)) + m.WebsocketBackendReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketBackendReqBodyBytes)) + m.WebsocketBackendReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketBackendReqHeaderBytes)) + m.WebsocketBackendRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketBackendRespBodyBytes)) + m.WebsocketBackendRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketBackendRespHeaderBytes)) + m.WebsocketConnTimeMsTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketConnTimeMs)) + m.WebsocketReqBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketReqBodyBytes)) + m.WebsocketReqHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketReqHeaderBytes)) + m.WebsocketRespBodyBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketRespBodyBytes)) + m.WebsocketRespHeaderBytesTotal.WithLabelValues(serviceID, serviceName, datacenter).Add(float64(stats.WebsocketRespHeaderBytes)) + processHistogram(stats.MissHistogram, m.MissDurationSeconds.WithLabelValues(serviceID, serviceName, datacenter)) + processObjectSizes(stats.ObjectSize1k, stats.ObjectSize10k, stats.ObjectSize100k, stats.ObjectSize1m, stats.ObjectSize10m, stats.ObjectSize100m, stats.ObjectSize1g, m.ObjectSizeBytes.WithLabelValues(serviceID, serviceName, datacenter)) +} + func processHistogram(src map[string]uint64, obs prometheus.Observer) { for str, count := range src { ms, err := strconv.Atoi(str) diff --git a/pkg/rt/common_test.go b/pkg/rt/common_test.go index 1f271b0..cc13355 100644 --- a/pkg/rt/common_test.go +++ b/pkg/rt/common_test.go @@ -4535,6 +4535,273 @@ var expectedRTMetricsOutputMap = map[string]float64{ `testspace_testsystem_websocket_resp_header_bytes_total{datacenter="YYZ",service_id="my-service-id",service_name="my-service-name"}`: 0, } +var expectedRTMetricsAggOutputMap = map[string]float64{ + `testspace_testsystem_attack_blocked_req_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_attack_blocked_req_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_attack_logged_req_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_attack_logged_req_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_attack_passed_req_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_attack_passed_req_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_attack_req_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_attack_req_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_attack_resp_synth_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bereq_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bereq_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 84871, + `testspace_testsystem_blacklist_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_body_size_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 1.237172e+07, + `testspace_testsystem_bot_challenge_complete_tokens_checked_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_disabled_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_failed_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_issued_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_complete_tokens_passed_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenge_starts_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_failed_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_issued_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_bot_challenges_succeeded_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_bereq_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_bereq_errors_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_bereq_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_bereq_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_beresp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_beresp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_execution_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_globals_limit_exceeded_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_guest_errors_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_heap_limit_exceeded_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_ram_used_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_req_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_req_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_request_time_billed_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_request_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_requests_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_resource_limit_exceeded_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_resp_status_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_group="1xx"}`: 0, + `testspace_testsystem_compute_resp_status_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_group="2xx"}`: 0, + `testspace_testsystem_compute_resp_status_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_group="3xx"}`: 0, + `testspace_testsystem_compute_resp_status_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_group="4xx"}`: 0, + `testspace_testsystem_compute_resp_status_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_group="5xx"}`: 0, + `testspace_testsystem_compute_runtime_errors_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_compute_stack_limit_exceeded_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_blackhole_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_close_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgrade_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_downgraded_connections_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_limit_streams_connections_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_limit_streams_requests_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_tarpit_accept_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ddos_action_tarpit_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_deliver_sub_count_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 90, + `testspace_testsystem_deliver_sub_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 2.095131e+06, + `testspace_testsystem_edge_hit_requests_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_edge_hit_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_edge_hit_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_edge_miss_requests_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_edge_miss_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_edge_miss_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_edge_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 1.237172e+07, + `testspace_testsystem_edge_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 36038, + `testspace_testsystem_edge_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 90, + `testspace_testsystem_error_sub_count_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_error_sub_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_errors_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_fanout_bereq_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_fanout_bereq_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_fanout_beresp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_fanout_beresp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_fanout_conn_time_ms_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_fanout_recv_publishes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_fanout_req_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_fanout_req_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_fanout_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_fanout_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_fanout_send_publishes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_fetch_sub_count_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_fetch_sub_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_hash_sub_count_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 90, + `testspace_testsystem_hash_sub_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 340481, + `testspace_testsystem_header_size_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 36038, + `testspace_testsystem_hit_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 66578, + `testspace_testsystem_hit_sub_count_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 5, + `testspace_testsystem_hit_sub_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 21908, + `testspace_testsystem_hits_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0.000575, + `testspace_testsystem_hits_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 11, + `testspace_testsystem_http2_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 48, + `testspace_testsystem_http3_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 33, + `testspace_testsystem_http_total{datacenter="aggregate",http_version="1",service_id="my-service-id",service_name="my-service-name"}`: 10, + `testspace_testsystem_http_total{datacenter="aggregate",http_version="2",service_id="my-service-id",service_name="my-service-name"}`: 48, + `testspace_testsystem_http_total{datacenter="aggregate",http_version="3",service_id="my-service-id",service_name="my-service-name"}`: 33, + `testspace_testsystem_imgopto_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_imgopto_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_imgopto_shield_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_imgopto_shield_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_imgopto_shield_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_imgopto_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_imgopto_transform_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_imgopto_transform_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_imgopto_transforms_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_imgvideo_frames_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_imgvideo_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_imgvideo_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_imgvideo_shield_frames_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_imgvideo_shield_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_imgvideo_shield_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_imgvideo_shield_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_imgvideo_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_ipv6_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_kv_store_class_a_operations_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_kv_store_class_b_operations_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_last_successful_response{service_id="my-service-id",service_name="my-service-name"}`: 1.716236045e+09, + `testspace_testsystem_log_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_logging_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_miss_duration_seconds_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="+Inf"}`: 79, + `testspace_testsystem_miss_duration_seconds_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="0.005"}`: 3, + `testspace_testsystem_miss_duration_seconds_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="0.01"}`: 6, + `testspace_testsystem_miss_duration_seconds_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="0.025"}`: 12, + `testspace_testsystem_miss_duration_seconds_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="0.05"}`: 41, + `testspace_testsystem_miss_duration_seconds_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="0.1"}`: 68, + `testspace_testsystem_miss_duration_seconds_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="0.25"}`: 72, + `testspace_testsystem_miss_duration_seconds_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="0.5"}`: 78, + `testspace_testsystem_miss_duration_seconds_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="1"}`: 79, + `testspace_testsystem_miss_duration_seconds_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="16"}`: 79, + `testspace_testsystem_miss_duration_seconds_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="2"}`: 79, + `testspace_testsystem_miss_duration_seconds_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="32"}`: 79, + `testspace_testsystem_miss_duration_seconds_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="4"}`: 79, + `testspace_testsystem_miss_duration_seconds_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="60"}`: 79, + `testspace_testsystem_miss_duration_seconds_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="8"}`: 79, + `testspace_testsystem_miss_duration_seconds_count{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 79, + `testspace_testsystem_miss_duration_seconds_sum{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 6.813999999999999, + `testspace_testsystem_miss_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 1.2305142e+07, + `testspace_testsystem_miss_sub_count_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 85, + `testspace_testsystem_miss_sub_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 73946, + `testspace_testsystem_miss_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 6.22564403, + `testspace_testsystem_miss_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 79, + `testspace_testsystem_object_size_bytes_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="+Inf"}`: 90, + `testspace_testsystem_object_size_bytes_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="1.024e+06"}`: 89, + `testspace_testsystem_object_size_bytes_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="1.024e+07"}`: 90, + `testspace_testsystem_object_size_bytes_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="1.024e+08"}`: 90, + `testspace_testsystem_object_size_bytes_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="1.024e+09"}`: 90, + `testspace_testsystem_object_size_bytes_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="1024"}`: 7, + `testspace_testsystem_object_size_bytes_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="10240"}`: 22, + `testspace_testsystem_object_size_bytes_bucket{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",le="102400"}`: 41, + `testspace_testsystem_object_size_bytes_count{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 90, + `testspace_testsystem_object_size_bytes_sum{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 6.1498368e+07, + `testspace_testsystem_origin_cache_fetch_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_origin_cache_fetch_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_origin_cache_fetches_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_origin_fetch_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_origin_fetch_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 84871, + `testspace_testsystem_origin_fetch_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 1.2326343e+07, + `testspace_testsystem_origin_fetch_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 18600, + `testspace_testsystem_origin_fetches_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 82, + `testspace_testsystem_origin_revalidations_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 4, + `testspace_testsystem_otfp_deliver_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_otfp_manifests_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_otfp_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_otfp_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_otfp_shield_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_otfp_shield_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_otfp_shield_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_otfp_shield_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_otfp_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_otfp_transform_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_otfp_transform_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_otfp_transform_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_otfp_transforms_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_pass_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_pass_sub_count_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_pass_sub_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_pass_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_pass_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_pci_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_pipe_sub_count_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_pipe_sub_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_pipe{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_predeliver_sub_count_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 90, + `testspace_testsystem_predeliver_sub_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 95970, + `testspace_testsystem_prehash_sub_count_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 90, + `testspace_testsystem_prehash_sub_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 62951, + `testspace_testsystem_realtime_api_requests_total{result="success",service_id="my-service-id",service_name="my-service-name"}`: 1, + `testspace_testsystem_recv_sub_count_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 180, + `testspace_testsystem_recv_sub_time_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 8.346979e+06, + `testspace_testsystem_req_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 192, + `testspace_testsystem_req_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 50603, + `testspace_testsystem_requests_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 91, + `testspace_testsystem_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 1.237172e+07, + `testspace_testsystem_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 36038, + `testspace_testsystem_restarts_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_segblock_origin_fetches_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_segblock_shield_fetches_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_service_info{service_id="my-service-id",service_name="my-service-name",service_version="123"}`: 1, + `testspace_testsystem_shield_cache_fetches_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_shield_fetch_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_shield_fetch_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_shield_fetch_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_shield_fetch_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_shield_fetches_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_shield_hit_requests_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_shield_hit_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_shield_hit_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_shield_miss_requests_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_shield_miss_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_shield_miss_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_shield_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_shield_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_shield_revalidations_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_shield_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="200"}`: 85, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="204"}`: 0, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="206"}`: 0, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="301"}`: 0, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="302"}`: 0, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="304"}`: 1, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="400"}`: 0, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="401"}`: 0, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="403"}`: 0, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="404"}`: 4, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="406"}`: 0, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="416"}`: 0, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="429"}`: 0, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="500"}`: 0, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="501"}`: 0, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="502"}`: 0, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="503"}`: 0, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="504"}`: 0, + `testspace_testsystem_status_code_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_code="505"}`: 0, + `testspace_testsystem_status_group_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_group="1xx"}`: 0, + `testspace_testsystem_status_group_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_group="2xx"}`: 85, + `testspace_testsystem_status_group_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_group="3xx"}`: 1, + `testspace_testsystem_status_group_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_group="4xx"}`: 4, + `testspace_testsystem_status_group_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",status_group="5xx"}`: 0, + `testspace_testsystem_synth_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_tls_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",tls_version="1.0"}`: 0, + `testspace_testsystem_tls_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",tls_version="1.1"}`: 0, + `testspace_testsystem_tls_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",tls_version="1.2"}`: 87, + `testspace_testsystem_tls_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name",tls_version="1.3"}`: 0, + `testspace_testsystem_uncacheable_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_hit_requests_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_edge_miss_requests_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_error_requests_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_hit_requests_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_miss_requests_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_pass_requests_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_vcl_on_compute_synth_requests_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_video_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_waf_blocked_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_waf_logged_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_waf_passed_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_websocket_bereq_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_websocket_bereq_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_websocket_beresp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_websocket_beresp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_websocket_conn_time_ms_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_websocket_req_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_websocket_req_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_websocket_resp_body_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, + `testspace_testsystem_websocket_resp_header_bytes_total{datacenter="aggregate",service_id="my-service-id",service_name="my-service-name"}`: 0, +} + // // origin fixtures // diff --git a/pkg/rt/subscriber.go b/pkg/rt/subscriber.go index fa9fbac..c620560 100644 --- a/pkg/rt/subscriber.go +++ b/pkg/rt/subscriber.go @@ -35,16 +35,17 @@ type MetadataProvider interface { // Subscriber polls rt.fastly.com endpoints for a single service ID. It emits // the received stats data to Prometheus metrics. type Subscriber struct { - client HTTPClient - token string - serviceID string - provider MetadataProvider - metrics *prom.Metrics - postprocess func() - logger log.Logger - rtDelayCount int - oiDelayCount int - diDelayCount int + client HTTPClient + token string + serviceID string + provider MetadataProvider + metrics *prom.Metrics + postprocess func() + logger log.Logger + rtDelayCount int + oiDelayCount int + diDelayCount int + aggregateOnly bool } // SubscriberOption provides some additional behavior to a subscriber. @@ -71,6 +72,11 @@ func WithPostprocess(f func()) SubscriberOption { return func(s *Subscriber) { s.postprocess = f } } +// TODO add doc comment +func WithAggregateOnly(aggregateOnly bool) SubscriberOption { + return func(s *Subscriber) { s.aggregateOnly = aggregateOnly } +} + // NewSubscriber returns a ready-to-use subscriber. Callers must be sure to // invoke the Run method of the returned subscriber in order to actually update // any metrics. @@ -223,7 +229,7 @@ func (s *Subscriber) queryRealtime(ctx context.Context, ts uint64) (currentName s.rtDelayCount = 0 result = apiResultSuccess } - realtime.Process(&response, s.serviceID, name, version, s.metrics.Realtime) + realtime.Process(&response, s.serviceID, name, version, s.metrics.Realtime, s.aggregateOnly) s.postprocess() case http.StatusUnauthorized, http.StatusForbidden: diff --git a/pkg/rt/subscriber_test.go b/pkg/rt/subscriber_test.go index c6c0030..ffd527e 100644 --- a/pkg/rt/subscriber_test.go +++ b/pkg/rt/subscriber_test.go @@ -62,6 +62,54 @@ func TestRTSubscriberFixture(t *testing.T) { } } +func TestRTSubscriberAggOnlyFixture(t *testing.T) { + var ( + namespace = "testspace" + subsystem = "testsystem" + registry = prometheus.NewRegistry() + nameFilter = filter.Filter{} + metrics = prom.NewMetrics(namespace, subsystem, nameFilter, registry) + ) + + // Set up a subscriber. + var ( + client = newMockRealtimeClient(rtResponseFixture, `{}`) + serviceID = "my-service-id" + serviceName = "my-service-name" + serviceVersion = 123 + cache = &mockCache{} + processed = make(chan struct{}) + postprocess = func() { close(processed) } + options = []rt.SubscriberOption{rt.WithMetadataProvider(cache), rt.WithPostprocess(postprocess), rt.WithAggregateOnly(true)} + subscriber = rt.NewSubscriber(client, "irrelevant token", serviceID, metrics, options...) + ) + + // Prep the mock cache. + cache.update([]api.Service{{ID: serviceID, Name: serviceName, Version: serviceVersion}}) + + // Tell the subscriber to fetch real-time stats. + ctx, cancel := context.WithCancel(context.Background()) + errc := make(chan error, 1) + go func() { errc <- subscriber.RunRealtime(ctx) }() + + // Block until the subscriber does finishes one fetch + <-processed + + // Assert the Prometheus metrics. + output := prometheusOutput(t, registry, namespace+"_"+subsystem+"_") + assertMetricOutput(t, expectedRTMetricsAggOutputMap, output) + + // Kill the subscriber's goroutine, and wait for it to finish. + cancel() + err := <-errc + switch { + case err == nil: + case errors.Is(err, context.Canceled): + case err != nil: + t.Fatal(err) + } +} + func TestOriginSubscriberFixture(t *testing.T) { var ( namespace = "testspace"