@@ -47,6 +47,7 @@ const (
4747 workerDurationMetricName MetricName = "cloudflare_worker_duration"
4848 poolHealthStatusMetricName MetricName = "cloudflare_zone_pool_health_status"
4949 poolRequestsTotalMetricName MetricName = "cloudflare_zone_pool_requests_total"
50+ dnsFirewallQueryCountMetricName MetricName = "cloudflare_dns_firewall_query_count"
5051)
5152
5253type MetricsSet map [MetricName ]struct {}
@@ -243,6 +244,12 @@ var (
243244 },
244245 []string {"zone" , "load_balancer_name" , "pool_name" , "origin_name" },
245246 )
247+
248+ dnsFirewallQueryCount = prometheus .NewGaugeVec (prometheus.GaugeOpts {
249+ Name : dnsFirewallQueryCountMetricName .String (),
250+ Help : "DNS Firewall query count by query type and response code" ,
251+ }, []string {"account_id" , "account_name" , "dns_firewall_id" , "query_type" , "response_code" },
252+ )
246253)
247254
248255func buildAllMetricsSet () MetricsSet {
@@ -277,6 +284,7 @@ func buildAllMetricsSet() MetricsSet {
277284 allMetricsSet .Add (workerDurationMetricName )
278285 allMetricsSet .Add (poolHealthStatusMetricName )
279286 allMetricsSet .Add (poolRequestsTotalMetricName )
287+ allMetricsSet .Add (dnsFirewallQueryCountMetricName )
280288 return allMetricsSet
281289}
282290
@@ -383,6 +391,9 @@ func mustRegisterMetrics(deniedMetrics MetricsSet) {
383391 if ! deniedMetrics .Has (poolRequestsTotalMetricName ) {
384392 prometheus .MustRegister (poolRequestsTotal )
385393 }
394+ if ! deniedMetrics .Has (dnsFirewallQueryCountMetricName ) {
395+ prometheus .MustRegister (dnsFirewallQueryCount )
396+ }
386397}
387398
388399func fetchWorkerAnalytics (account cloudflare.Account , wg * sync.WaitGroup ) {
@@ -410,6 +421,30 @@ func fetchWorkerAnalytics(account cloudflare.Account, wg *sync.WaitGroup) {
410421 }
411422}
412423
424+ func fetchDnsFirewallAnalytics (account cloudflare.Account , wg * sync.WaitGroup , deniedMetricsSet MetricsSet ) {
425+ wg .Add (1 )
426+ defer wg .Done ()
427+
428+ r , err := fetchDnsFirewallTotals (account .ID )
429+ if err != nil {
430+ return
431+ }
432+
433+ for _ , a := range r .Viewer .Accounts {
434+ for _ , d := range a .DnsFirewallAnalyticsAdaptiveGroups {
435+ if ! deniedMetricsSet .Has (dnsFirewallQueryCountMetricName ) {
436+ dnsFirewallQueryCount .WithLabelValues (
437+ account .ID ,
438+ account .Name ,
439+ d .Dimensions .ClusterTag ,
440+ d .Dimensions .QueryType ,
441+ d .Dimensions .ResponseCode ,
442+ ).Set (float64 (d .Count ))
443+ }
444+ }
445+ }
446+ }
447+
413448func fetchZoneColocationAnalytics (zones []cloudflare.Zone , wg * sync.WaitGroup , deniedMetricsSet MetricsSet ) {
414449 wg .Add (1 )
415450 defer wg .Done ()
0 commit comments