-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
79 lines (63 loc) · 1.38 KB
/
main.go
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package main
import (
"flag"
"fmt"
"net/http"
"os"
"sort"
"strings"
"github.com/gin-gonic/gin"
"github.com/go-resty/resty/v2"
)
type JsonRpcResponse struct {
Version string `json:"jsonrpc"`
Result map[string]int64 `json:"result"`
}
func handleMetrics(client *resty.Client) gin.HandlerFunc {
return func(context *gin.Context) {
result := JsonRpcResponse{}
_, err := client.R().
SetResult(&result).
SetBody(map[string]interface{}{
"jsonrpc": "2.0",
"id": 1337,
"method": "session.stats",
}).
Post("/api/jsonrpc")
if err != nil {
context.Data(
http.StatusInternalServerError,
"text/plain",
[]byte(err.Error()))
return
}
context.Status(http.StatusOK)
context.Writer.Header().Set("Content-Type", "text/plain; version=0.0.4")
keys := make([]string, len(result.Result))
i := 0
for k := range result.Result {
keys[i] = k
i++
}
sort.Strings(keys)
for _, k := range keys {
v := result.Result[k]
fmt.Fprintf(context.Writer, "pika_%s %d\n", strings.ReplaceAll(k, ".", "_"), v)
}
}
}
var (
urlPtr *string = flag.String("url", "http://localhost:1337", "")
)
func main() {
urlEnv, urlEnvFound := os.LookupEnv("PIKA_URL")
if urlEnvFound {
urlPtr = &urlEnv
}
c := resty.New().
SetBaseURL(*urlPtr)
r := gin.Default()
r.SetTrustedProxies([]string{})
r.GET("/metrics", handleMetrics(c))
r.Run()
}