| 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) |
| } |
| } |