/
main.go
61 lines (47 loc) · 1.24 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
package main
import (
"database/sql"
"flag"
"fmt"
"log"
"os"
"github.com/cactus/go-statsd-client/statsd"
_ "github.com/go-sql-driver/mysql"
)
func main() {
var prefix string
mysqlDSN := "root:root@tcp(127.0.0.1:3306)/mysql"
statsdURL := "127.0.0.1:8125"
flag.StringVar(&prefix, "prefix", "", "prefix to send to statsd, usually server hostname")
flag.Parse()
if flag.NArg() < 2 {
fmt.Println("Usage: mysql-query-metric-statsd QUERY METRIC_NAME")
fmt.Println("\nOptions:")
flag.PrintDefaults()
os.Exit(0)
}
if os.Getenv("MYSQL_DSN") != "" {
mysqlDSN = os.Getenv("MYSQL_DSN")
}
if os.Getenv("STATSD_URL") != "" {
statsdURL = os.Getenv("STATSD_URL")
}
query := flag.Arg(0)
metricName := flag.Arg(1)
db, err := sql.Open("mysql", mysqlDSN)
if err != nil {
log.Fatal("Error connecting to mysql:", err)
}
log.Println("Executing mysql query:", query)
var value int64
if err := db.QueryRow(query).Scan(&value); err != nil {
log.Fatal("Error executing mysql query:", err)
}
sc, err := statsd.NewClient(statsdURL, prefix)
if err != nil {
log.Fatal("Error creating statsd client:", err)
}
defer sc.Close()
sc.Gauge(metricName, value, 1.0)
log.Printf("Sent metric prefix=%v name=%v value=%v", prefix, metricName, value)
}