diff options
Diffstat (limited to 'main.go')
-rw-r--r-- | main.go | 58 |
1 files changed, 58 insertions, 0 deletions
@@ -0,0 +1,58 @@ +// r5f.jp/cgit/prometheus-exporter-multiplexer.git + +package main + +import ( + "fmt" + "log/slog" + "net/http" + logflag "github.com/prometheus/common/promslog/flag" + "gopkg.in/alecthomas/kingpin.v2" + "github.com/prometheus/common/promslog" + tkweb "github.com/prometheus/exporter-toolkit/web" + tkflag "github.com/prometheus/exporter-toolkit/web/kingpinflag" +) + + +var ( + relabelMap = argRelabel(kingpin.Flag( + "relabel", "name=yaml.", + ).Short('r')) + srcList = argSrcList(kingpin.Arg( + "sources", "Metric source.", + ).Required()) + logger *slog.Logger +) + +func main() { + promslogConfig := &promslog.Config{} + logflag.AddFlags(kingpin.CommandLine, promslogConfig) + tkFlag := tkflag.AddFlags(kingpin.CommandLine, ":9199") + kingpin.CommandLine.HelpFlag.Short('h') + kingpin.Parse() + + logger = promslog.New(promslogConfig) + parts, err := PartsFromArgs(*srcList, relabelMap) + if err != nil{ + logger.Error(err.Error()) + return + } + + http.HandleFunc("/metrics", func( + w http.ResponseWriter, r *http.Request, + ){ + out, err := parts.Get() + if err != nil{ + logger.Error(err.Error()) + w.WriteHeader(500) + } + w.Header()["Content-Type"] = []string{"application/openmetrics-text"} + fmt.Fprint(w, out) + }) + + err = tkweb.ListenAndServe(&http.Server{}, tkFlag, logger) + if err != nil{ + logger.Error(err.Error()) + return + } +} |