-
Notifications
You must be signed in to change notification settings - Fork 2
/
todb.go
55 lines (49 loc) · 1.32 KB
/
todb.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
package tracing
import (
"github.com/asaskevich/EventBus"
"github.com/spf13/viper"
"github.com/techquest-tech/gin-shared/pkg/event"
"go.uber.org/zap"
"gorm.io/gorm"
)
type FullRequestDetails struct {
gorm.Model
TracingDetails
}
type TracingRequestServiceDBImpl struct {
DB *gorm.DB
Logger *zap.Logger
}
func NewTracingRequestService(db *gorm.DB, logger *zap.Logger) (*TracingRequestServiceDBImpl, error) {
tr := &TracingRequestServiceDBImpl{
DB: db,
Logger: logger,
}
if viper.GetBool("database.initDB") {
err := db.AutoMigrate(&FullRequestDetails{})
if err != nil {
logger.Error("create fullRequestDetals failed.", zap.Error(err))
} else {
logger.Info("create fullRequestDetails table done")
}
}
return tr, nil
}
func SubEventToDB(tr *TracingRequestServiceDBImpl, bus EventBus.Bus) {
bus.SubscribeAsync(event.EventTracing, tr.doLogRequestBody, false)
}
func (tr *TracingRequestServiceDBImpl) doLogRequestBody(req *TracingDetails) {
if len(req.Body) == 0 && len(req.Resp) == 0 {
tr.Logger.Debug("both req & resp is emtpy, ignored.")
return
}
model := FullRequestDetails{
TracingDetails: *req,
}
err := tr.DB.Save(&model).Error
if err != nil {
tr.Logger.Error("save reqest failed", zap.Error(err))
return
}
tr.Logger.Info("save request details done.", zap.Uint("targetID", req.TargetID))
}