game_sync/tools/statisticsrv/mongo.go

68 lines
1.2 KiB
Go

package main
import (
"fmt"
"github.com/globalsign/mgo"
"time"
)
var autoPingInterval time.Duration = time.Minute
var MgoSession *mgo.Session
func newDBSession() (s *mgo.Session, err error) {
login := ""
if AppCfg.MC.UserName != "" {
login = AppCfg.MC.UserName + ":" + AppCfg.MC.Password + "@"
}
host := "localhost"
if AppCfg.MC.Host != "" {
host = AppCfg.MC.Host
}
// http://goneat.org/pkg/labix.org/v2/mgo/#Session.Mongo
// [mongodb://][user:pass@]host1[:port1][,host2[:port2],...][/database][?options]
url := fmt.Sprintf("mongodb://%s%s/admin", login, host)
//fmt.Println(url)
session, err := mgo.Dial(url)
if err != nil {
return
}
s = session
return
}
func Ping() {
var err error
if MgoSession != nil {
err = MgoSession.Ping()
if err != nil {
Log.Errorf("mongo.Ping err:%v", err)
MgoSession.Refresh()
} else {
Log.Tracef("mongo.Ping suc")
}
}
}
func StartMgoPing() {
go func() {
defer func() {
err := recover()
if err != nil {
Log.Warnf("StartMgoPing panic: %s", err)
}
}()
for {
select {
case <-time.After(autoPingInterval):
Ping()
}
}
}()
}
func SetAutoPing(interv time.Duration) {
autoPingInterval = interv
}