-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheck_dashboard.go
94 lines (88 loc) · 2.47 KB
/
check_dashboard.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
/*
* 检测codis中的dashboard进程
* 如果该进程挂掉,则重启它
* 因为zookeeper的缘故,在重启之前需要将zk中的dashboard信息delete掉
*
* 使用前,
* 配置zk连接信息与dashboard命令
* 你可能需要执行 go get github.com/samuel/go-zookeeper/zk
* github.com/chenshangwei/check_codis_dashboard
* @notice 编写测试中……
*/
package main
import (
"fmt"
"time"
"log"
"os"
"os/exec"
"net/http"
s "strings"
"github.com/samuel/go-zookeeper/zk"
)
/*config*/
var zk_ip = []string{"192.168.1.200"}
var addr string = "192.168.1.200:18087"
var zk_dashboard = "/zk/codis/db_120ask/dashboard"
var dashboard_command string = "/home/go/src/github.com/CodisLabs/codis/bin/codis-config"
var dashboard_args string = "-c /home/go/src/github.com/CodisLabs/codis/config.ini -L /home/go/src/github.com/CodisLabs/codis/logs/dashboard.log dashboard --addr "+addr //最后不加&
var logFile string = "/root/tools/check_dashboard.log"
//http请求,判断dashboard是否存活
func check() bool{
url := "http://"+addr+"/api/overview"
//url := "http://www.baidu.com"
if resp,err := http.Get(url);err != nil {
return false
} else {
resp.Body.Close()
return true
}
}
//记录日志
func writeLog(msg string){
logfile,err := os.OpenFile(logFile,os.O_RDWR|os.O_CREATE|os.O_APPEND,0666);
if err!=nil {
panic(err)
}
defer logfile.Close();
logger := log.New(logfile,"\r\n",log.Ldate|log.Ltime|log.Llongfile);
logger.Fatal(msg);
}
//启动dashboard
func runDashboard(){
fmt.Println("exec : " + dashboard_command)
var argArray []string
argArray = s.Split(dashboard_args," ")
cmd := exec.Command(dashboard_command,argArray...)
if err := cmd.Start();err != nil {
writeLog("[fail]start dashboard")
}else{
writeLog("[success]start dashboard")
}
}
//删掉zk中的dashboard信息
func delDashboard() {
fmt.Println("delete : " + zk_dashboard)
if c,_, err := zk.Connect(zk_ip, time.Second*2);err != nil {
writeLog("[fail]connect zk")
}else{
d,_,_ := c.Get(zk_dashboard)
fmt.Printf("%s",d)
if len(d)>0 {
err := c.Delete(zk_dashboard,-1)
if err != nil {
writeLog("[fail]delete zk_dashboard")
}else{
writeLog("[success]delete zk_dashboard")
}
}
}
}
func main() {
if check() {
fmt.Println("zk dashboard is ok")
//os.Exit(0)
}
delDashboard()
runDashboard()
}