1 Star 0 Fork 0

李童 / cmdb

Create your Gitee Account
Explore and code with more than 12 million developers,Free private repositories !:)
Sign up
Clone or Download
impl.go 2.16 KB
Copy Edit Raw Blame History
李童 authored 2023-02-27 16:27 . tasksecret
package impl
import (
"context"
"database/sql"
"fmt"
"sync"
"time"
"gitee.com/vak80/cmdb/alerting/model"
_ "github.com/go-sql-driver/mysql"
"github.com/infraboard/mcube/logger"
"github.com/infraboard/mcube/logger/zap"
)
var _ model.Alert = (*Service)(nil)
var (
db *sql.DB
)
type Service struct {
l logger.Logger
db *sql.DB
}
type MySQL struct {
Host string `toml:"host" env:"MYSQL_HOST"`
Port string `toml:"port" env:"MYSQL_PORT"`
UserName string `toml:"username" env:"MYSQL_USERNAME"`
Password string `toml:"password" env:"MYSQL_PASSWORD"`
Database string `toml:"database" env:"MYSQL_DATABASE"`
MaxOpenConn int `toml:"max_open_conn" env:"MYSQL_MAX_OPEN_CONN"`
MaxIdleConn int `toml:"max_idle_conn" env:"MYSQL_MAX_IDLE_CONN"`
MaxLifeTime int `toml:"max_life_time" env:"MYSQL_MAX_LIFE_TIME"`
MaxIdleTime int `toml:"max_idle_time" env:"MYSQL_MAX_idle_TIME"`
lock sync.Mutex
}
func NewDefaultMySQL() *MySQL {
return &MySQL{
Host: "10.50.40.4",
Port: "3306",
UserName: "alert",
Password: "Alert@123456",
Database: "alert",
MaxOpenConn: 200,
MaxIdleConn: 100,
}
}
func NewDefaultService() *Service {
return &Service{
db: NewDefaultMySQL().GetDB(),
l: zap.L().Named("alert"),
}
}
func (m *MySQL) getDBConn() (*sql.DB, error) {
var err error
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&multiStatements=true", m.UserName, m.Password, m.Host, m.Port, m.Database)
db, err = sql.Open("mysql", dsn)
if err != nil {
return nil, fmt.Errorf("connect to mysql<%s> error ,%s", dsn, err.Error())
}
db.SetMaxOpenConns(m.MaxOpenConn)
db.SetMaxIdleConns(m.MaxIdleConn)
db.SetConnMaxIdleTime(time.Second * time.Duration(m.MaxIdleConn))
db.SetConnMaxLifetime(time.Second * time.Duration(m.MaxLifeTime))
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
err = db.PingContext(ctx)
if err != nil {
return nil, fmt.Errorf("ping mysql<%s>error,%s", dsn, err.Error())
}
return db, nil
}
func (m *MySQL) GetDB() *sql.DB {
m.lock.Lock()
defer m.lock.Unlock()
conn, err := m.getDBConn()
if err != nil {
panic(err)
} else {
db = conn
}
return db
}
Go
1
https://gitee.com/vak80/cmdb.git
git@gitee.com:vak80/cmdb.git
vak80
cmdb
cmdb
v0.0.4

Search