summaryrefslogtreecommitdiff
path: root/main.go
blob: 43c233ffe2c8c0024777642ba57f1135091552bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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
    }
}