-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
95 lines (75 loc) · 2.33 KB
/
main.go
File metadata and controls
95 lines (75 loc) · 2.33 KB
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
package main
import (
"flag"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
"runtime"
"strconv"
"strings"
"sync"
"time"
)
var wg sync.WaitGroup
var user string
var password string
var dsnnodes []string
var pings = 1000
type PingTime struct {
TimeDiff string `db:"timediff"`
SoftTime int64 `db:"softtime"`
}
func pinger(idx int) {
defer wg.Done()
var db1 *sqlx.DB
dsn := user + ":" + password + "@tcp(" + dsnnodes[idx] + ")/__percona"
db1 = sqlx.MustConnect("mysql", dsn)
defer db1.Close()
fmt.Println("Running pinger to " + dsn)
td := PingTime{}
i := 1
for i < pings {
//err := db1.Get(&td, "SELECT NOW(6)-pingtime AS timediff FROM __clusterping WHERE id="+strconv.Itoa(i))
err := db1.Get(&td, "SELECT softtime FROM __clusterping WHERE id=?", i)
if err != nil {
continue
// panic(err.Error())
}
//fmt.Printf("node: %d, ping: %d, time: %f\n", idx, i, (time.Now().UnixNano()-td.SoftTime)/(time.Microsecond))
fmt.Printf("node: %d, ping: %d, time: %f\n", idx, i, time.Duration(time.Now().UnixNano()-td.SoftTime).Seconds())
i = i + 1
}
fmt.Println("Done")
}
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
nodesPtr := flag.String("nodes", "", "list of nodes (in HOST:PORT format)")
hostPtr := flag.String("host", "", "the primary host to connect (in HOST:PORT format)")
userPtr := flag.String("user", "root", "database user")
passwordPtr := flag.String("password", "", "database password")
flag.Parse()
dsnnodes = strings.Split(*nodesPtr, ",")
user = *userPtr
password = *passwordPtr
var db *sqlx.DB
dsn := user + ":" + password + "@tcp(" + *hostPtr + ")"
db = sqlx.MustConnect("mysql", dsn+"/mysql")
defer db.Close()
db.MustExec("CREATE DATABASE IF NOT EXISTS __percona")
var db1 *sqlx.DB
db1 = sqlx.MustConnect("mysql", dsn+"/__percona")
defer db1.Close()
db1.MustExec("DROP TABLE IF EXISTS __clusterping")
db1.MustExec("CREATE TABLE __clusterping (id int not null primary key, pingtime DATETIME(6) not null, softtime bigint not null)")
for i, c := range dsnnodes {
fmt.Printf("Start pinger: %d, %s\n", i, c)
wg.Add(1)
go pinger(i)
}
for i := 1; i < pings; i++ {
fmt.Printf("ping: %d\n", i)
db1.MustExec("INSERT INTO __clusterping (id,pingtime,softtime) VALUES (?,NOW(6),?)", strconv.Itoa(i), time.Now().UnixNano())
time.Sleep(1 * time.Second)
}
wg.Wait()
}