/
application.go
143 lines (114 loc) · 3.59 KB
/
application.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package application
import (
"github.com/trakkie-id/secondbaser/config/logging"
"net/http"
"os"
"strings"
"time"
"github.com/apsdehal/go-logger"
_ "github.com/go-sql-driver/mysql"
"github.com/openzipkin/zipkin-go"
zipkinhttpreporter "github.com/openzipkin/zipkin-go/reporter/http"
"github.com/prometheus/client_golang/prometheus/promhttp"
"gorm.io/driver/mysql"
"gorm.io/gorm"
gorm_logger "gorm.io/gorm/logger"
"gorm.io/plugin/prometheus"
)
var (
LOGGER *logger.Logger
AppName = "SECONDBASER"
AppEnv string
TRACER *zipkin.Tracer
DB *gorm.DB
KafkaBroker string
)
func SetUpLogger(logLevel string, AppName string) {
LOGGER, _ = logger.New(AppName, 100, os.Stdout)
LOGGER.SetFormat("%{time} [%{module}] [%{level}] %{message}")
if strings.EqualFold(logLevel, "DEBUG") {
LOGGER.SetLogLevel(logger.DebugLevel)
} else {
LOGGER.SetLogLevel(logger.InfoLevel)
}
}
func InitAppEnv(env string) {
if len(env) < 0 {
AppEnv = "DEV"
} else {
AppEnv = env
}
}
func InitDatabase(user string, password string, database string, host string, port string) {
dsn := user + ":" + password + "@(" + host + ":" + port + ")/" + database + "?parseTime=true"
gormLogger := gorm_logger.New(
&logging.GormLogger{
Logger: LOGGER,
}, // io writer
gorm_logger.Config{
SlowThreshold: time.Second, // Slow SQL threshold
LogLevel: gorm_logger.Info, // Log level
Colorful: true, // Disable color
},
)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
SkipDefaultTransaction: true,
Logger: gormLogger,
})
if err != nil {
panic(err)
}
//Config DB
sqlDB, err := db.DB()
if err != nil {
panic(err)
}
// SetMaxIdleConns sets the maximum number of connections in the idle connection pool.
sqlDB.SetMaxIdleConns(10)
// SetMaxOpenConns sets the maximum number of open connections to the database.
sqlDB.SetMaxOpenConns(100)
// SetConnMaxLifetime sets the maximum amount of time a connection may be reused.
sqlDB.SetConnMaxLifetime(time.Hour)
//Set prometheus
_ = db.Use(prometheus.New(prometheus.Config{
DBName: "trakkie_auth", // use `DBName` as metrics label
RefreshInterval: 2000, // Refresh metrics interval (default 15 seconds)
StartServer: false, // start http server to expose metrics
MetricsCollector: []prometheus.MetricsCollector{
&prometheus.MySQL{
VariableNames: []string{"threads_running"},
},
}, // user defined metrics
}))
LOGGER.Info("Database is connected")
DB = db
}
func InitZipkinTracer(grpcPort string, endpointUrlConf string) {
const defaultEndpointURL = "http://localhost:9411/api/v2/spans"
if len(endpointUrlConf) < 1 {
endpointUrlConf = defaultEndpointURL
}
reporter := zipkinhttpreporter.NewReporter(endpointUrlConf)
localServer, err := zipkin.NewEndpoint(AppName, "localhost:"+grpcPort)
if err != nil {
LOGGER.Errorf("Error initializing zipkin! %s", err)
panic(err)
}
sampler, err := zipkin.NewCountingSampler(1.0)
if err != nil {
LOGGER.Errorf("Error initializing zipkin! %s", err)
panic(err)
}
t, err := zipkin.NewTracer(reporter, zipkin.WithSampler(sampler), zipkin.WithLocalEndpoint(localServer), zipkin.WithSharedSpans(false))
if err != nil {
LOGGER.Errorf("Error initializing zipkin! %s", err)
panic(err)
}
LOGGER.Infof("Zipkin is connected, endpoint url : [%s]", endpointUrlConf)
TRACER = t
}
func InitPrometheusServer(servingPort string) error {
http.Handle("/prometheus", promhttp.Handler())
LOGGER.Info("HTTP Server Started, listening on " + servingPort)
return http.ListenAndServe(":"+servingPort, nil)
}