package main import ( "context" "fmt" "net/http" "regexp" "github.com/redis/go-redis/v9" ) // https://guide.munin-monitoring.org/en/latest/reference/plugin.html#notes-on-field-names var sanitize = regexp.MustCompile("[^a-zA-Z0-9_]") var rdb = redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", DB: 0, }) const AddedStop = 7 func configHandler(w http.ResponseWriter, r *http.Request) { labels, err := rdb.ZRevRange(context.TODO(), LabelsAdded, 0, AddedStop).Result() if err != nil { w.WriteHeader(http.StatusInternalServerError) return } fmt.Fprint(w, "graph_title bluesky labels added (top 8, 15m MA)\n") fmt.Fprint(w, "graph_category bluesky\n") fmt.Fprint(w, "graph_vlabel labels / ${graph_period}\n") fmt.Fprint(w, "graph_period minute\n") fmt.Fprint(w, "graph_width 600\n") fmt.Fprint(w, "graph_height 300\n") for _, labelName := range labels { slug := sanitize.ReplaceAll([]byte(labelName), []byte("_")) fmt.Fprintf(w, "%s.label %s\n", slug, labelName) fmt.Fprintf(w, "%s.type DERIVE\n", slug) fmt.Fprintf(w, "%s.cdef %s,900,TRENDNAN\n", slug, slug) } } func valueHandler(w http.ResponseWriter, r *http.Request) { labels, err := rdb.ZRevRangeWithScores(context.TODO(), LabelsAdded, 0, AddedStop).Result() if err != nil { w.WriteHeader(http.StatusInternalServerError) return } for _, label := range labels { labelName := label.Member.(string) slug := sanitize.ReplaceAll([]byte(labelName), []byte("_")) fmt.Fprintf(w, "%s.value %0.f\n", slug, label.Score) } }