@@ -66,6 +66,8 @@ const (
6666 dnsFirewallQueryCountMetricName MetricName = "cloudflare_dns_firewall_query_count"
6767 kvRequestsMetricName MetricName = "cloudflare_kv_requests_count"
6868 kvLatencyMetricName MetricName = "cloudflare_kv_latency"
69+ workerSubrequestsCountMetricName MetricName = "cloudflare_worker_subrequests_count"
70+ workerSubrequestTimeMetricName MetricName = "cloudflare_worker_subrequest_time"
6971)
7072
7173type MetricsSet map [MetricName ]struct {}
@@ -348,6 +350,16 @@ var (
348350 Help : "KV operation latency quantiles (milliseconds)" ,
349351 }, []string {"namespace_id" , "action_type" , "account" , "quantile" })
350352
353+ workerSubrequestsCount = prometheus .NewGaugeVec (prometheus.GaugeOpts {
354+ Name : workerSubrequestsCountMetricName .String (),
355+ Help : "Number of subrequests by script name" ,
356+ }, []string {"script_name" , "account" })
357+
358+ workerSubrequestTime = prometheus .NewGaugeVec (prometheus.GaugeOpts {
359+ Name : workerSubrequestTimeMetricName .String (),
360+ Help : "Subrequest response time quantiles (microseconds)" ,
361+ }, []string {"script_name" , "account" , "quantile" })
362+
351363 dnsFirewallQueryCount = prometheus .NewGaugeVec (prometheus.GaugeOpts {
352364 Name : dnsFirewallQueryCountMetricName .String (),
353365 Help : "DNS Firewall query count by query type and response code" ,
@@ -402,6 +414,8 @@ func buildAllMetricsSet() MetricsSet {
402414 allMetricsSet .Add (dnsFirewallQueryCountMetricName )
403415 allMetricsSet .Add (kvRequestsMetricName )
404416 allMetricsSet .Add (kvLatencyMetricName )
417+ allMetricsSet .Add (workerSubrequestsCountMetricName )
418+ allMetricsSet .Add (workerSubrequestTimeMetricName )
405419 return allMetricsSet
406420}
407421
@@ -557,6 +571,12 @@ func mustRegisterMetrics(deniedMetrics MetricsSet) {
557571 if ! deniedMetrics .Has (kvLatencyMetricName ) {
558572 prometheus .MustRegister (kvLatency )
559573 }
574+ if ! deniedMetrics .Has (workerSubrequestsCountMetricName ) {
575+ prometheus .MustRegister (workerSubrequestsCount )
576+ }
577+ if ! deniedMetrics .Has (workerSubrequestTimeMetricName ) {
578+ prometheus .MustRegister (workerSubrequestTime )
579+ }
560580}
561581
562582func fetchLoadblancerPoolsHealth (account cfaccounts.Account , wg * sync.WaitGroup ) {
@@ -659,6 +679,33 @@ func fetchKVAnalytics(account cfaccounts.Account, wg *sync.WaitGroup, deniedMetr
659679 }
660680}
661681
682+ func fetchWorkerSubrequestAnalytics (account cfaccounts.Account , wg * sync.WaitGroup , deniedMetricsSet MetricsSet ) {
683+ wg .Add (1 )
684+ defer wg .Done ()
685+
686+ r , err := fetchWorkerSubrequests (account .ID )
687+ if err != nil {
688+ log .Error ("failed to fetch worker subrequests for account " , account .ID , ": " , err )
689+ return
690+ }
691+
692+ accountName := strings .ToLower (strings .ReplaceAll (account .Name , " " , "-" ))
693+
694+ for _ , a := range r .Viewer .Accounts {
695+ for _ , sr := range a .WorkersSubrequestsAdaptiveGroups {
696+ if ! deniedMetricsSet .Has (workerSubrequestsCountMetricName ) {
697+ workerSubrequestsCount .With (prometheus.Labels {"script_name" : sr .Dimensions .ScriptName , "account" : accountName }).Add (float64 (sr .Sum .Subrequests ))
698+ }
699+ if ! deniedMetricsSet .Has (workerSubrequestTimeMetricName ) {
700+ workerSubrequestTime .With (prometheus.Labels {"script_name" : sr .Dimensions .ScriptName , "account" : accountName , "quantile" : "P50" }).Set (float64 (sr .Quantiles .TimeToResponseUsP50 ))
701+ workerSubrequestTime .With (prometheus.Labels {"script_name" : sr .Dimensions .ScriptName , "account" : accountName , "quantile" : "P75" }).Set (float64 (sr .Quantiles .TimeToResponseUsP75 ))
702+ workerSubrequestTime .With (prometheus.Labels {"script_name" : sr .Dimensions .ScriptName , "account" : accountName , "quantile" : "P99" }).Set (float64 (sr .Quantiles .TimeToResponseUsP99 ))
703+ workerSubrequestTime .With (prometheus.Labels {"script_name" : sr .Dimensions .ScriptName , "account" : accountName , "quantile" : "P999" }).Set (float64 (sr .Quantiles .TimeToResponseUsP999 ))
704+ }
705+ }
706+ }
707+ }
708+
662709func fetchLogpushAnalyticsForAccount (account cfaccounts.Account , wg * sync.WaitGroup ) {
663710 wg .Add (1 )
664711 defer wg .Done ()
0 commit comments