From 8d1e9e7334bd0c581fe23331daa16d3dd2f71c71 Mon Sep 17 00:00:00 2001 From: pegasko Date: Sun, 29 Oct 2023 18:27:20 +0300 Subject: [PATCH] aboba --- dnsstat.go | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ metrics.go | 20 ++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 dnsstat.go create mode 100644 metrics.go diff --git a/dnsstat.go b/dnsstat.go new file mode 100644 index 0000000..259adb7 --- /dev/null +++ b/dnsstat.go @@ -0,0 +1,50 @@ +package dnsstat + +import ( + "context" + "fmt" + "io" + "os" + + "github.com/coredns/caddy" + "github.com/coredns/coredns/core/dnsserver" + "github.com/coredns/coredns/plugin" + "github.com/coredns/coredns/plugin/pkg/dnstest" + "github.com/coredns/coredns/plugin/pkg/replacer" + "github.com/coredns/coredns/request" + + "github.com/miekg/dns" +) + +// Dump implement the plugin interface. +type DNSStat struct { + Next plugin.Handler +} + +func init() { plugin.Register("dnsstat", setup) } + +func setup(c *caddy.Controller) error { + for c.Next() { + if c.NextArg() { + return plugin.Error("dnsstat", c.ArgErr()) + } + } + + dnsserver.GetConfig(c).AddPlugin(func(next plugin.Handler) plugin.Handler { + return DNSStat{Next: next} + }) + + return nil +} + +// ServeDNS implements the plugin.Handler interface. +func (d DNSStat) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) { + state := request.Request{W: w, Req: r} + + // Metric increment + requestCount.WithLabelValues(metrics.WithServer(ctx)).Inc() + return plugin.NextOrFailure(d.Name(), d.Next, ctx, w, r) +} + +// Name implements the Handler interface. +func (d DNSStat) Name() string { return "dnsstat" } diff --git a/metrics.go b/metrics.go new file mode 100644 index 0000000..28ec98e --- /dev/null +++ b/metrics.go @@ -0,0 +1,20 @@ +package dnsstat + +import ( + "sync" + + "github.com/coredns/coredns/plugin" + + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" +) + +// requestCount exports a prometheus metric that is incremented every time a query is seen by the example plugin. +var requestCount = promauto.NewCounterVec(prometheus.CounterOpts{ + Namespace: plugin.Namespace, + Subsystem: "dnsstat", + Name: "request_count_total", + Help: "Counter of requests made.", +}, []string{"server"}) + +var once sync.Once