This commit is contained in:
huangsimin 2018-12-10 14:06:37 +08:00
commit 1685ff59ff
3 changed files with 97 additions and 0 deletions

71
logdb.go Normal file
View File

@ -0,0 +1,71 @@
package logdb
import (
"database/sql"
"fmt"
"io/ioutil"
"log"
yaml "gopkg.in/yaml.v2"
)
// LogDB 属性结构
type LogDB struct {
Charset string `yaml:"charset"`
DB string `yaml:"db"`
Hosts []string `yaml:"hosts"`
Password string `yaml:"password"`
Port string `yaml:"port"`
User string `yaml:"user"`
hostid int
driver *sql.DB
errorcount int
}
// NewLogDB 创建一个logdb的配置
func NewLogDB(filename string) *LogDB {
logdb := LogDB{}
data, err := ioutil.ReadFile(filename)
if err != nil {
panic(err)
}
err = yaml.Unmarshal(data, &logdb)
if err != nil {
panic(err)
}
logdb.hostid = 0
logdb.Connect()
return &logdb
}
// Connect 重连
func (logdb *LogDB) Connect() {
defer func() {
if err := recover(); err != nil {
hostlen := len(logdb.Hosts)
for i := 0; i < hostlen; i++ {
logdb.errorcount++
if logdb.errorcount >= hostlen*2 {
panic(err)
}
db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", logdb.User, logdb.Password, logdb.Hosts[logdb.hostid], logdb.Port, logdb.DB))
if err != nil {
log.Println(err, logdb.Hosts[logdb.hostid], " is connect fail")
continue
}
logdb.driver = db
logdb.hostid = i
break
}
}
}()
db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", logdb.User, logdb.Password, logdb.Hosts[logdb.hostid], logdb.Port, logdb.DB))
if err != nil {
panic(err)
}
logdb.driver = db
}

6
logdb.yaml Normal file
View File

@ -0,0 +1,6 @@
charset: utf8mb4
db: test_log
hosts: [192.168.6.101,192.168.6.102,192.168.6.103,192.168.6.104,192.168.6.105]
password: ag-spider-log
port: 4000
user: spider

20
logdb_test.go Normal file
View File

@ -0,0 +1,20 @@
package logdb
import (
"testing"
_ "github.com/go-sql-driver/mysql"
)
// charset: utf8mb4
// db: test_log
// hosts: [192.168.6.101, 192.168.6.102, 192.168.6.103, 192.168.6.104, 192.168.6.105]
// password: ag-spider-log
// port: 4000
// user: spider
func TestSelect(t *testing.T) {
logdb := NewLogDB("logdb.yaml")
t.Error(logdb)
logdb.Connect()
}