1 Star 0 Fork 0

h79/goutils

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
elastic.go 3.05 KB
一键复制 编辑 原始数据 按行查看 历史
huqiuyun 提交于 2022-11-04 21:32 . es log 控制开关
/**
* @author huqiuyun
* 数据Elasticsearch
*/
package db
import (
"context"
"gitee.com/h79/goutils/common/debug"
"gitee.com/h79/goutils/common/logger"
"gitee.com/h79/goutils/common/result"
"gitee.com/h79/goutils/common/server"
"gitee.com/h79/goutils/plugins"
"github.com/olivere/elastic/v7"
"go.uber.org/zap"
"time"
)
type esClient struct {
Client *elastic.Client
}
var _ EsDatabase = (*elasticGroup)(nil)
type elasticGroup struct {
selectName string
esMap map[string]*esClient
}
func NewES(confs []server.Elastic) (EsDatabase, error) {
logger.Context().Info("Elastic", zap.Any("config", confs))
ess := &elasticGroup{esMap: map[string]*esClient{}}
for _, cfg := range confs {
if len(cfg.Host) <= 0 {
continue
}
interval := cfg.Interval
if interval <= 0 {
interval = 10
} else if interval > 3600 {
interval = 3600
}
interval = interval * time.Second
url := cfg.Host[0]
var client, err = elastic.NewClient(
elastic.SetURL(cfg.Host...),
elastic.SetBasicAuth(cfg.User, cfg.Pwd),
elastic.SetHealthcheckInterval(interval),
elastic.SetSniff(cfg.Sniff),
elastic.SetErrorLog(&esLogger{
LogLevel: logger.ErrorLevel,
Level: cfg.Logger.LogLevel,
}),
elastic.SetInfoLog(&esLogger{
LogLevel: logger.InfoLevel,
Level: cfg.Logger.LogLevel,
}),
elastic.SetTraceLog(&esLogger{
LogLevel: logger.DebugLevel,
Level: cfg.Logger.LogLevel,
}))
if err != nil {
d := debug.NewStack(result.ErrEsClientInternal).
WithDetail("NewElastic(%s) : %v", cfg.Name, err).
WithLevel(debug.DFatalLevel)
_ = plugins.DoWithError(plugins.KAlarm, d)
return nil, err
}
_, _, err = client.Ping(url).Do(context.Background())
if err != nil {
d := debug.NewStack(result.ErrEsPingInternal).
WithDetail("Ping Elastic(%s)", cfg.Name).
WithError(err).
WithLevel(debug.DFatalLevel)
_ = plugins.DoWithError(plugins.KAlarm, d)
return nil, err
}
ver, err := client.ElasticsearchVersion(url)
logger.Context().Info("Elastic",
zap.String("Name", cfg.Name),
zap.String("Version", ver))
ess.esMap[cfg.Name] = &esClient{client}
}
return ess, nil
}
func (conns *elasticGroup) Get(name string) (*elastic.Client, error) {
if len(name) == 0 {
name = conns.selectName
}
es, exists := conns.esMap[name]
if exists == true {
return es.Client, nil
}
return nil, result.Error(result.ErrNotFound, "Not found")
}
func (conns *elasticGroup) Do(name string, call func(es *elastic.Client) error) error {
if len(name) == 0 {
name = conns.selectName
}
if es, exists := conns.esMap[name]; exists == true {
return call(es.Client)
}
return result.Error(result.ErrNotFound, "Not found")
}
func (conns *elasticGroup) Close(name string) error {
if len(name) == 0 {
name = conns.selectName
}
es, exists := conns.esMap[name]
if exists == true {
es.Client.Stop()
delete(conns.esMap, name)
}
return nil
}
func (conns *elasticGroup) CloseAll() {
for _, es := range conns.esMap {
es.Client.Stop()
}
conns.esMap = nil
}
func (conns *elasticGroup) Select(name string) {
conns.selectName = name
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/h79/goutils.git
git@gitee.com:h79/goutils.git
h79
goutils
goutils
v1.2.19

搜索帮助

A270a887 8829481 3d7a4017 8829481