forked from open-falcon/mymon
-
Notifications
You must be signed in to change notification settings - Fork 0
/
slave.go
55 lines (47 loc) · 1.02 KB
/
slave.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
package main
import (
"github.com/ziutek/mymysql/mysql"
_ "github.com/ziutek/mymysql/native"
)
var SlaveStatusToSend = []string{
"Exec_Master_Log_Pos",
"Read_Master_Log_Pos",
"Relay_Log_Pos",
"Seconds_Behind_Master",
"Slave_IO_Running",
"Slave_SQL_Running",
}
func slaveStatus(m *MysqlIns, db mysql.Conn) ([]*MetaData, error) {
isSlave := NewMetric("Is_slave")
row, res, err := db.QueryFirst("SHOW SLAVE STATUS")
if err != nil {
return nil, err
}
// be master
if row == nil {
isSlave.SetValue(0)
return []*MetaData{isSlave}, nil
}
// be slave
isSlave.SetValue(1)
data := make([]*MetaData, len(SlaveStatusToSend))
for i, s := range SlaveStatusToSend {
data[i] = NewMetric(s)
switch s {
case "Slave_SQL_Running", "Slave_IO_Running":
data[i].SetValue(0)
v := row.Str(res.Map(s))
if v == "Yes" {
data[i].SetValue(1)
}
default:
v, err := row.Int64Err(res.Map(s))
if err != nil {
data[i].SetValue(-1)
} else {
data[i].SetValue(v)
}
}
}
return append(data, isSlave), nil
}