92 lines
2.0 KiB
Go
92 lines
2.0 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"go-common/app/admin/main/apm/conf"
|
|
"go-common/app/admin/main/apm/dao"
|
|
"go-common/app/admin/main/apm/model/tree"
|
|
"go-common/app/admin/main/apm/model/ut"
|
|
"go-common/app/tool/saga/service/gitlab"
|
|
bm "go-common/library/net/http/blademaster"
|
|
"sync"
|
|
|
|
"github.com/jinzhu/gorm"
|
|
"github.com/robfig/cron"
|
|
)
|
|
|
|
// Service is a service.
|
|
type Service struct {
|
|
c *conf.Config
|
|
dao *dao.Dao
|
|
DB *gorm.DB
|
|
DBDatabus *gorm.DB
|
|
DBCanal *gorm.DB
|
|
client *bm.Client
|
|
// tree cache
|
|
treeCache map[string][]*tree.Node
|
|
treeLock sync.RWMutex
|
|
// cron cron
|
|
cron *cron.Cron
|
|
// discoveryID cache
|
|
discoveryIDCache map[string]*tree.Resd
|
|
discoveryIDLock sync.RWMutex
|
|
ranksCache *ut.RanksCache
|
|
appsCache *ut.AppsCache
|
|
// dapper proxy
|
|
dapperProxy *dapperProxy
|
|
// gitlab api conf
|
|
gitlab *gitlab.Gitlab
|
|
}
|
|
|
|
// New new a service
|
|
func New(c *conf.Config) (s *Service) {
|
|
s = &Service{
|
|
c: c,
|
|
dao: dao.New(c),
|
|
client: bm.NewClient(c.HTTPClient),
|
|
// tree cache
|
|
treeCache: map[string][]*tree.Node{},
|
|
// discoveryID cache
|
|
discoveryIDCache: map[string]*tree.Resd{},
|
|
// ranks cache
|
|
ranksCache: &ut.RanksCache{},
|
|
appsCache: &ut.AppsCache{},
|
|
// cron cron
|
|
cron: cron.New(),
|
|
}
|
|
s.gitlab = gitlab.New(conf.Conf.Gitlab.API, conf.Conf.Gitlab.Token)
|
|
s.DB = s.dao.DB
|
|
s.DBDatabus = s.dao.DBDatabus
|
|
s.DBCanal = s.dao.DBCanal
|
|
if err := s.cron.AddFunc(s.c.Cron.Crontab, s.taskAddMonitor); err != nil {
|
|
panic(err)
|
|
}
|
|
if err := s.cron.AddFunc(s.c.Cron.Crontab, s.taskAddCache); err != nil {
|
|
panic(err)
|
|
}
|
|
if err := s.cron.AddFunc(s.c.Cron.CrontabRepo, s.taskRankWechatReport); err != nil {
|
|
panic(err)
|
|
}
|
|
if err := s.cron.AddFunc(s.c.Cron.CrontabRepo, s.taskWeeklyWechatReport); err != nil {
|
|
panic(err)
|
|
}
|
|
dp, err := newDapperProxy(c.Host.DapperCo)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
s.dapperProxy = dp
|
|
s.cron.Start()
|
|
go s.taskAddCache()
|
|
return
|
|
}
|
|
|
|
// Ping ping db,
|
|
func (s *Service) Ping(c context.Context) (err error) {
|
|
return
|
|
}
|
|
|
|
// Close close resource.
|
|
func (s *Service) Close() {
|
|
s.dao.Close()
|
|
}
|