/
init.go
81 lines (73 loc) · 2.45 KB
/
init.go
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
/*
* Tencent is pleased to support the open source community by making Blueking Container Service available.
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
* Licensed under the MIT License (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
* http://opensource.org/licenses/MIT
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language governing permissions and
* limitations under the License.
*/
// Package storage init
package storage
// once synchronization
import (
"strings"
"sync"
"github.com/Tencent/bk-bcs/bcs-common/common/blog"
"github.com/Tencent/bk-bcs/bcs-common/pkg/odm/drivers/mongo"
"go.opentelemetry.io/contrib/instrumentation/go.mongodb.org/mongo-driver/mongo/otelmongo"
"github.com/Tencent/bk-bcs/bcs-services/bcs-monitor/pkg/config"
)
// Globals
var (
GlobalRedisSession *RedisSession
GlobalStorage Storage
)
var (
redisOnce sync.Once
storageOnce sync.Once
)
// GetDefaultRedisSession : get default redis session for default database
func GetDefaultRedisSession() *RedisSession {
if GlobalRedisSession == nil {
redisOnce.Do(func() {
session := &RedisSession{}
err := session.Init()
if err != nil {
panic(err)
}
GlobalRedisSession = session
})
}
return GlobalRedisSession
}
// InitStorage init storage client
func InitStorage() {
storageOnce.Do(func() {
mongoConf := config.G.Mongo
mongoOptions := &mongo.Options{
Hosts: strings.Split(mongoConf.Address, ","),
ConnectTimeoutSeconds: int(mongoConf.ConnectTimeout),
AuthDatabase: mongoConf.AuthDatabase,
Database: mongoConf.Database,
Username: mongoConf.Username,
Password: mongoConf.Password,
MaxPoolSize: uint64(mongoConf.MaxPoolSize),
MinPoolSize: uint64(mongoConf.MinPoolSize),
Monitor: otelmongo.NewMonitor(),
}
mongoDB, err := mongo.NewDB(mongoOptions)
if err != nil {
blog.Errorf("init mongo db failed, err %s", err.Error())
return
}
if err = mongoDB.Ping(); err != nil {
blog.Errorf("ping mongo db failed, err %s", err.Error())
return
}
blog.Info("init mongo db successfully")
GlobalStorage = New(mongoDB)
})
}