-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
103 lines (87 loc) · 2.09 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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package main
import (
"encoding/json"
"flag"
"fmt"
"net"
"net/http"
"github.com/kayac/sqsjkr"
mp "github.com/mackerelio/go-mackerel-plugin-helper"
)
// Default value
const (
DefaultSocketPath = "/var/run/sqsjkr.sock"
)
// SQSJkrPlugin mackerel plugin
type SQSJkrPlugin struct {
Tempfile string
Socket string
Prefix string
}
// GraphDefinition interface for mackerel plugin
func (sp SQSJkrPlugin) GraphDefinition() map[string](mp.Graphs) {
return map[string]mp.Graphs{
"stats.worker": {
Label: "sqsjkr worker number",
Unit: "integer",
Metrics: []mp.Metrics{
mp.Metrics{Name: "idle", Label: "Idle Worker Number", Diff: false, Type: "uint32"},
mp.Metrics{Name: "busy", Label: "Busy Worker Number", Diff: false, Type: "uint32"},
},
},
}
}
// MetricKeyPrefix interface for mackerel plugin
func (sp SQSJkrPlugin) MetricKeyPrefix() string {
return sp.Prefix
}
func fakeDial(proto, addr string) (conn net.Conn, err error) {
return net.Dial("unix", socket)
}
// FetchMetrics interface for mackerel plugin
func (sp SQSJkrPlugin) FetchMetrics() (map[string]interface{}, error) {
// get sqsjkr stats
var sta sqsjkr.StatsItem
tr := &http.Transport{
Dial: fakeDial,
}
client := &http.Client{Transport: tr}
res, err := client.Get("http:///dummy.local/stats/metrics")
if err != nil {
fmt.Println(err)
return nil, err
}
defer res.Body.Close()
// decode json
dec := json.NewDecoder(res.Body)
if err := dec.Decode(&sta); err != nil {
fmt.Println(err)
return nil, err
}
stats := map[string]interface{}{
"idle": sta.IdleWorkerNum,
"busy": sta.BusyWorkerNum,
}
return stats, nil
}
var (
socket string
tmpfile string
prefix string
)
func main() {
flag.StringVar(&socket, "socket", DefaultSocketPath, "sqsjkr stats api socket path")
flag.StringVar(&tmpfile, "tempfile", "", "tmpfile")
flag.StringVar(&prefix, "metric-key", "sqsjkr", "tmpfile")
flag.Parse()
p := SQSJkrPlugin{
Socket: socket,
Tempfile: tmpfile,
Prefix: prefix,
}
if p.Tempfile == "" {
p.Tempfile = "/tmp/mackerel-plugin-sqsjkr"
}
helper := mp.NewMackerelPlugin(p)
helper.Run()
}