blob: f8863bee1fef436761bc78eaa2f5ae5a124be6d9 [file] [log] [blame]
package main
import (
"flag"
"fmt"
"log"
"net/http"
"google.golang.org/grpc"
pb "code.hackerspace.pl/hscloud/personal/q3k/minecraft/plugin/hscloud/proto"
)
var (
flagPlugin string
flagListen string
)
func main() {
flag.StringVar(&flagPlugin, "plugin", "minecraft.wypierdolzpolski.pl:2137", "address of gRPC plugin")
flag.StringVar(&flagListen, "listen", "0.0.0.0:8081", "address to listen at")
flag.Parse()
conn, err := grpc.Dial(flagPlugin, grpc.WithInsecure())
if err != nil {
log.Fatalf("Dial(%q): %v", flagPlugin, err)
}
client := pb.NewIntrospectorClient(conn)
http.HandleFunc("/metrics", func(w http.ResponseWriter, r *http.Request) {
res, err := client.Status(r.Context(), &pb.StatusRequest{})
if err != nil {
http.Error(w, "internal server error", 500)
log.Printf("Status error: %v", err)
}
fmt.Fprintf(w, "# HELP minecraft_players_online Total number of players online.\n")
fmt.Fprintf(w, "# TYPE minecraft_players_online gauge\n")
fmt.Fprintf(w, "minecraft_players_online %d\n", len(res.Players))
})
log.Printf("Listening on %s", flagListen)
err = http.ListenAndServe(flagListen, nil)
if err != nil {
log.Fatalf("ListenAndServe: %v", err)
}
}