From 4aee54b08863811ba6285ed9488195e393c5d6b7 Mon Sep 17 00:00:00 2001 From: shaocongcong Date: Tue, 30 Apr 2019 18:24:43 +0800 Subject: [PATCH] fix #62 #40 #23 --- collector/apps/apps.go | 5 - collector/collector.yaml | 4 + collector/misc/addrs.go | 63 --------- collector/misc/config.go | 5 +- collector/service/agent.go | 16 --- collector/service/app.go | 111 +++++++--------- collector/service/{app_store.go => apps.go} | 137 +++++++------------- collector/service/collector.go | 14 +- collector/service/orderly_key.go | 19 +++ collector/service/pinpoint.go | 15 +-- collector/{stats => service}/stats.go | 10 +- collector/stats/orderly_key.go | 19 --- collector/stats/runtime_stats.go | 37 ------ pkg/util/{agent_info.go => agent.go} | 10 +- quick-start/sql/cassandra.cql | 1 + 15 files changed, 152 insertions(+), 314 deletions(-) delete mode 100644 collector/apps/apps.go delete mode 100644 collector/misc/addrs.go delete mode 100644 collector/service/agent.go rename collector/service/{app_store.go => apps.go} (50%) create mode 100644 collector/service/orderly_key.go rename collector/{stats => service}/stats.go (96%) delete mode 100644 collector/stats/orderly_key.go delete mode 100644 collector/stats/runtime_stats.go rename pkg/util/{agent_info.go => agent.go} (88%) diff --git a/collector/apps/apps.go b/collector/apps/apps.go deleted file mode 100644 index 9411cff94..000000000 --- a/collector/apps/apps.go +++ /dev/null @@ -1,5 +0,0 @@ -package apps - -// Apps apps -type Apps struct { -} diff --git a/collector/collector.yaml b/collector/collector.yaml index 05476e940..a64de8a5e 100644 --- a/collector/collector.yaml +++ b/collector/collector.yaml @@ -23,6 +23,10 @@ etcd: ttl: 10 reportdir: "/collecotr" +apps: + # 加载app时间间隔 + loadinterval: 30 + storage: cluster: - "10.77.0.130:9042" diff --git a/collector/misc/addrs.go b/collector/misc/addrs.go deleted file mode 100644 index 06a299f77..000000000 --- a/collector/misc/addrs.go +++ /dev/null @@ -1,63 +0,0 @@ -package misc - -import ( - "sync" -) - -// Addrs 地址信息,用来做addr和appname、agentid映射 -type Addrs struct { - sync.RWMutex - Addrs map[string]*Addr -} - -// AddrStore ... -var AddrStore *Addrs - -// Addr ... -type Addr struct { - AppName string // 应用名 - // Agents map[string]struct{} // agent信息 -} - -// NewAddrs ... -func NewAddrs() *Addrs { - return &Addrs{ - Addrs: make(map[string]*Addr), - } -} - -// Add ... -func (a *Addrs) Add(appName, ip string) { - a.RLock() - _, ok := a.Addrs[ip] - a.RUnlock() - if !ok { - a.Lock() - a.Addrs[ip] = &Addr{ - AppName: appName, - } - a.Unlock() - } - -} - -// Remove ... -func (a *Addrs) Remove(ip string) { - a.Lock() - delete(a.Addrs, ip) - a.Lock() -} - -func (a *Addrs) Get(ip string) (string, bool) { - a.RLock() - addrInfo, ok := a.Addrs[ip] - a.RUnlock() - if !ok { - return "", false - } - return addrInfo.AppName, true -} - -func initAddrStore() { - AddrStore = NewAddrs() -} diff --git a/collector/misc/config.go b/collector/misc/config.go index c1b12e1de..a5218e42d 100644 --- a/collector/misc/config.go +++ b/collector/misc/config.go @@ -50,6 +50,10 @@ type Config struct { RuntimeRange int64 // Runtime延迟计算时间 } + Apps struct { + LoadInterval int64 // 加载app时间间隔 + } + MQ struct { Addrs []string // mq地址 Topic string // 主题 @@ -67,7 +71,6 @@ var Conf *Config // InitConfig ... func InitConfig(path string) { conf := &Config{} - initAddrStore() data, err := ioutil.ReadFile(path) if err != nil { log.Fatal("InitConfig:ioutil.ReadFile", err) diff --git a/collector/service/agent.go b/collector/service/agent.go deleted file mode 100644 index c59c9f9e7..000000000 --- a/collector/service/agent.go +++ /dev/null @@ -1,16 +0,0 @@ -package service - -// Agent 服务单例 -type Agent struct { - id string // agent id - startTime int64 // 启动时间 - isLive bool - hostName string -} - -func newAgent(id string, starttime int64) *Agent { - return &Agent{ - id: id, - startTime: starttime, - } -} diff --git a/collector/service/app.go b/collector/service/app.go index 19876e260..ef80f8f86 100644 --- a/collector/service/app.go +++ b/collector/service/app.go @@ -10,12 +10,12 @@ import ( "go.uber.org/zap" "github.com/imdevlab/tracing/collector/misc" - "github.com/imdevlab/tracing/collector/stats" "github.com/imdevlab/tracing/pkg/alert" "github.com/imdevlab/tracing/pkg/constant" "github.com/imdevlab/tracing/pkg/metric" "github.com/imdevlab/tracing/pkg/pinpoint/thrift/pinpoint" "github.com/imdevlab/tracing/pkg/pinpoint/thrift/trace" + "github.com/imdevlab/tracing/pkg/util" ) // 服务统计数据只实时计算1分钟的点,不做任何滑动窗口 @@ -27,34 +27,46 @@ type App struct { appType int32 // 服务类型 taskID int64 // 定时任务ID name string // 服务名称 - agents map[string]*Agent // agent集合 + orderKeys OrderlyKeys // 排序打点 + agents map[string]*util.Agent // agent集合 + apis map[string]struct{} // 接口信息 + points map[int64]*Stats // 计算点集合 + apiMapKey int64 // API被调用计算当前计算key + apiMap map[int64]*metric.APIMap // API被调用 stopC chan bool // 停止通道 tickerC chan bool // 定时任务通道 spanC chan *trace.TSpan // span类型通道 spanChunkC chan *trace.TSpanChunk // span chunk类型通道 statC chan *pinpoint.TAgentStat // jvm状态类型通道 - apis map[string]struct{} // 接口信息 - orderlyKey stats.OrderlyKey // 排序打点 - points map[int64]*stats.Stats // 计算点集合 - apiMapKey int64 // API被调用计算当前计算key - apiMap map[int64]*metric.APIMap // API被调用 - respCodes map[int]struct{} // 响应code结合,用来标注合法响应code + + APIStats *metric.APIStats // api计算统计 + MethodStats *metric.MethodStats // 接口计算统计 + SQLStats *metric.SQLStats // sql语句计算统计 + ExceptionsStats *metric.ExceptionsStats // 异常计算统计 + respCodes map[int]struct{} // + SrvMap *metric.SrvMap // 服务拓扑图 } -func newApp(name string, appType int32) *App { +func newApp(name string) *App { app := &App{ - appType: appType, + // appType: appType, name: name, - agents: make(map[string]*Agent), + agents: make(map[string]*util.Agent), stopC: make(chan bool, 1), tickerC: make(chan bool, 10), spanC: make(chan *trace.TSpan, 200), spanChunkC: make(chan *trace.TSpanChunk, 200), statC: make(chan *pinpoint.TAgentStat, 200), apis: make(map[string]struct{}), - points: make(map[int64]*stats.Stats), + points: make(map[int64]*Stats), apiMap: make(map[int64]*metric.APIMap), respCodes: make(map[int]struct{}), + + APIStats: metric.NewAPIStats(), + MethodStats: metric.NewMethodStats(), + SQLStats: metric.NewSQLStats(), + ExceptionsStats: metric.NewExceptionsStats(), + SrvMap: metric.NewSrvMap(), } // @TODO codes会从策略模版中去取 // 默认200 @@ -76,40 +88,17 @@ func (a *App) isExist(agentid string) bool { } // storeAgent 保存agent -func (a *App) storeAgent(agentid string, startTime int64) { - a.RLock() - agent, ok := a.agents[agentid] - a.RUnlock() - if ok { - return - } - - agent = newAgent(agentid, startTime) - a.Lock() - a.agents[agentid] = agent - a.Unlock() - - return -} - -// storeAgent 保存agent -func (a *App) storeAgentnew(agentid string, startTime int64, isLive bool, hostName string) { +func (a *App) storeAgent(agentID string, isLive bool) { a.RLock() - agent, ok := a.agents[agentid] + agent, ok := a.agents[agentID] a.RUnlock() - if ok { - agent.hostName = hostName - agent.isLive = isLive - return + if !ok { + agent = util.NewAgent() + a.Lock() + a.agents[agentID] = agent + a.Unlock() } - - agent = newAgent(agentid, startTime) - a.Lock() - agent.isLive = isLive - agent.hostName = hostName - a.agents[agentid] = agent - a.Unlock() - + agent.IsLive = isLive return } @@ -169,10 +158,10 @@ func (a *App) statsSpan(span *trace.TSpan) error { spanTime := t.Unix() - int64(t.Second()) // 查找时间点,不存在新申请, span统计的范围是分钟,所以这里直接用优化过后的spanTime - lstats, ok := a.points[spanTime] + stats, ok := a.points[spanTime] if !ok { - lstats = stats.NewStats(a.respCodes) - a.points[spanTime] = lstats + stats = NewStats(a.respCodes) + a.points[spanTime] = stats } // api被调用需要将nowSecond加上一个时间范围 @@ -191,7 +180,7 @@ func (a *App) statsSpan(span *trace.TSpan) error { a.apiMap[a.apiMapKey] = apiMap } - lstats.SpanCounter(span, apiMap) + stats.SpanCounter(span, apiMap) return nil } @@ -210,13 +199,13 @@ func (a *App) statsSpanChunk(spanChunk *trace.TSpanChunk) error { spanChunkTime := t.Unix() - int64(t.Second()) // 查找时间点,不存在新申请 - lstats, ok := a.points[spanChunkTime] + stats, ok := a.points[spanChunkTime] if !ok { - lstats = stats.NewStats(a.respCodes) - a.points[spanChunkTime] = lstats + stats = NewStats(a.respCodes) + a.points[spanChunkTime] = stats } - lstats.SpanChunkCounter(spanChunk) + stats.SpanChunkCounter(spanChunk) return nil } @@ -277,22 +266,22 @@ func (a *App) recvAgentStat(appName, agentID string, agentStat *pinpoint.TAgentS // linkTrace 链路接口等计算上报 func (a *App) linkTrace() error { // 清空之前节点 - a.orderlyKey = a.orderlyKey[:0] + a.orderKeys = a.orderKeys[:0] // 赋值 for key := range a.points { - a.orderlyKey = append(a.orderlyKey, key) + a.orderKeys = append(a.orderKeys, key) } // 排序 - sort.Sort(a.orderlyKey) + sort.Sort(a.orderKeys) // 如果没有计算节点直接返回 - if a.orderlyKey.Len() <= 0 { + if a.orderKeys.Len() <= 0 { return nil } - inputDate := a.orderlyKey[0] + inputDate := a.orderKeys[0] now := time.Now().Unix() if now < inputDate+misc.Conf.Stats.DeferTime { @@ -387,19 +376,19 @@ func (a *App) linkTrace() error { // reportAPIMap api被调用情况 func (a *App) reportAPIMap() error { // 清空之前节点 - a.orderlyKey = a.orderlyKey[:0] + a.orderKeys = a.orderKeys[:0] // 赋值 for key := range a.apiMap { - a.orderlyKey = append(a.orderlyKey, key) + a.orderKeys = append(a.orderKeys, key) } // 排序 - sort.Sort(a.orderlyKey) + sort.Sort(a.orderKeys) // 如果没有计算节点直接返回 - if a.orderlyKey.Len() <= 0 { + if a.orderKeys.Len() <= 0 { return nil } - inputDate := a.orderlyKey[0] + inputDate := a.orderKeys[0] now := time.Now().Unix() if now < inputDate+misc.Conf.Stats.DeferTime { return nil diff --git a/collector/service/app_store.go b/collector/service/apps.go similarity index 50% rename from collector/service/app_store.go rename to collector/service/apps.go index c987002e0..123563ae1 100644 --- a/collector/service/app_store.go +++ b/collector/service/apps.go @@ -7,28 +7,33 @@ import ( "go.uber.org/zap" + "github.com/gocql/gocql" "github.com/imdevlab/tracing/collector/misc" "github.com/imdevlab/tracing/pkg/pinpoint/thrift/pinpoint" "github.com/imdevlab/tracing/pkg/pinpoint/thrift/trace" "github.com/imdevlab/tracing/pkg/sql" ) -// AppStore 所有app服务信息 -type AppStore struct { +// Apps 所有app服务信息 +type Apps struct { sync.RWMutex - apps map[string]*App // app集合 + apps map[string]*App // app集合 + ips map[string]string + hosts map[string]string } -func (a *AppStore) start() error { - if err := a.loadApps(); err != nil { +func (a *Apps) start() error { + cql := gCollector.storage.GetCql() + if err := a.loadApps(cql); err != nil { logger.Warn("loadApps", zap.String("error", err.Error())) return err } go func() { for { - time.Sleep(1 * time.Second) - if err := a.loadApps(); err != nil { + time.Sleep(time.Duration(misc.Conf.Apps.LoadInterval) * time.Second) + cql := gCollector.storage.GetCql() + if err := a.loadApps(cql); err != nil { logger.Warn("loadApps", zap.String("error", err.Error())) } } @@ -36,12 +41,10 @@ func (a *AppStore) start() error { return nil } -func (a *AppStore) loadApps() error { - cql := gCollector.storage.GetCql() +func (a *Apps) loadApps(cql *gocql.Session) error { if cql == nil { return fmt.Errorf("get cql failed") } - appsIter := cql.Query(sql.LoadApps).Iter() defer func() { if err := appsIter.Close(); err != nil { @@ -59,8 +62,8 @@ func (a *AppStore) loadApps() error { agentsIter := cql.Query(sql.LoadAgents, appName).Iter() for agentsIter.Scan(&appType, &agentID, &startTime, &ip, &isLive, &hostName) { - gCollector.apps.storeAgentnew(appName, agentID, startTime, appType, isLive, hostName) - misc.AddrStore.Add(appName, ip) + a.storeAgent(appName, agentID, appType, startTime, isLive, hostName, ip) + a.storeIPandHost(appName, ip, hostName) } if err := agentsIter.Close(); err != nil { @@ -72,63 +75,50 @@ func (a *AppStore) loadApps() error { } // isExist app是否存在 -func (a *AppStore) isAppExist(name string) bool { - a.RLock() - _, ok := a.apps[name] - a.RUnlock() - if !ok { - return false - } +func (a *Apps) storeIPandHost(appName, ip, host string) bool { + // a.Lock() + a.ips[ip] = appName + a.hosts[ip] = appName + // a.Unlock() return true } -func (a *AppStore) storeAgent(name string, id string, startTime int64, appType int32) { - a.RLock() - app, ok := a.apps[name] - a.RUnlock() - if !ok { - app = newApp(name, appType) - a.Lock() - a.apps[name] = app - a.Unlock() - } - app.appType = appType - app.storeAgent(id, startTime) +func (a *Apps) getNameByIP(ip string) (string, bool) { + name, ok := a.ips[ip] + return name, ok +} + +func (a *Apps) getNameByHost(host string) (string, bool) { + name, ok := a.hosts[host] + return name, ok } -func (a *AppStore) storeAgentnew(name string, id string, startTime int64, appType int32, isLive bool, hostName string) { +func (a *Apps) storeAgent(appName, agentID string, appType int32, startTime int64, isLive bool, hostName, ip string) { a.RLock() - app, ok := a.apps[name] + app, ok := a.apps[appName] a.RUnlock() if !ok { - app = newApp(name, appType) + app = newApp(appName) a.Lock() - a.apps[name] = app + a.apps[appName] = app a.Unlock() - } - app.appType = appType - app.storeAgentnew(id, startTime, isLive, hostName) -} -// isExist agent是否存在 -func (a *AppStore) isAgentExist(name, agentid string) bool { - a.RLock() - app, ok := a.apps[name] - a.RUnlock() - if !ok { - return false + app.start() } - // app中是否存在 - return app.isExist(agentid) + app.appType = appType + app.storeAgent(agentID, isLive) + // app.storeAgent(id, startTime) } -func newAppStore() *AppStore { - return &AppStore{ - apps: make(map[string]*App), +func newApps() *Apps { + return &Apps{ + apps: make(map[string]*App), + ips: make(map[string]string), + hosts: make(map[string]string), } } -func (a *AppStore) getApp(appName string) (*App, bool) { +func (a *Apps) getApp(appName string) (*App, bool) { a.RLock() app, ok := a.apps[appName] a.RUnlock() @@ -136,17 +126,10 @@ func (a *AppStore) getApp(appName string) (*App, bool) { } // routerSapn 路由span -func (a *AppStore) routerStatBatch(appName, agentID string, stats *pinpoint.TAgentStatBatch) error { +func (a *Apps) routerStatBatch(appName, agentID string, stats *pinpoint.TAgentStatBatch) error { app, ok := a.getApp(appName) if !ok { - // 缓存App - a.storeAgent(appName, agentID, stats.GetStartTimestamp(), 0) - - // 新App在重新找一次 - app, ok = a.getApp(appName) - if !ok { - return fmt.Errorf("unfind app, app name is %s", appName) - } + return fmt.Errorf("unfind app, app name is %s", appName) } // 接收 stat @@ -161,17 +144,10 @@ func (a *AppStore) routerStatBatch(appName, agentID string, stats *pinpoint.TAge } // routerSapn 路由span -func (a *AppStore) routerStat(appName, agentID string, stat *pinpoint.TAgentStat) error { +func (a *Apps) routerStat(appName, agentID string, stat *pinpoint.TAgentStat) error { app, ok := a.getApp(appName) if !ok { - // 缓存App - a.storeAgent(appName, agentID, stat.GetStartTimestamp(), 0) - - // 新App在重新找一次 - app, ok = a.getApp(appName) - if !ok { - return fmt.Errorf("unfind app, app name is %s", appName) - } + return fmt.Errorf("unfind app, app name is %s", appName) } // 接收 stat @@ -184,17 +160,10 @@ func (a *AppStore) routerStat(appName, agentID string, stat *pinpoint.TAgentStat } // routerSapn 路由span -func (a *AppStore) routerSapn(appName, agentID string, span *trace.TSpan) error { +func (a *Apps) routerSapn(appName, agentID string, span *trace.TSpan) error { app, ok := a.getApp(appName) if !ok { - // 缓存App - a.storeAgent(appName, agentID, span.StartTime, int32(span.GetServiceType())) - - // 新App在重新找一次 - app, ok = a.getApp(appName) - if !ok { - return fmt.Errorf("unfind app, app name is %s", appName) - } + return fmt.Errorf("unfind app, app name is %s", appName) } // 接收span @@ -207,16 +176,10 @@ func (a *AppStore) routerSapn(appName, agentID string, span *trace.TSpan) error } // routerSapnChunk 路由sapnChunk -func (a *AppStore) routersapnChunk(appName, agentID string, spanChunk *trace.TSpanChunk) error { +func (a *Apps) routersapnChunk(appName, agentID string, spanChunk *trace.TSpanChunk) error { app, ok := a.getApp(appName) if !ok { - // 缓存App - a.storeAgent(appName, agentID, spanChunk.AgentStartTime, int32(spanChunk.GetServiceType())) - // 新App在重新找一次 - app, ok = a.getApp(appName) - if !ok { - return fmt.Errorf("unfind app, app name is %s", appName) - } + return fmt.Errorf("unfind app, app name is %s", appName) } // 接收spanChunk diff --git a/collector/service/collector.go b/collector/service/collector.go index b25ce7d9c..b2d0bb1ce 100644 --- a/collector/service/collector.go +++ b/collector/service/collector.go @@ -27,7 +27,7 @@ var logger *zap.Logger // Collector 采集服务 type Collector struct { etcd *Etcd // 服务上报 - apps *AppStore // app集合 + apps *Apps // app集合 ticker *ticker.Tickers // 定时器 storage *storage.Storage // 存储 mq *mq.Nats // 消息队列 @@ -41,7 +41,7 @@ func New(l *zap.Logger) *Collector { logger = l gCollector = &Collector{ etcd: newEtcd(), - apps: newAppStore(), + apps: newApps(), ticker: ticker.NewTickers(misc.Conf.Ticker.Num, misc.Conf.Ticker.Interval, logger), storage: storage.NewStorage(logger), mq: mq.NewNats(logger), @@ -205,12 +205,12 @@ func tcpClient(conn net.Conn) { if conn != nil { conn.Close() } - close(quitC) - app, ok := gCollector.apps.getApp(appname) - if ok { - app.close() - } + close(quitC) + // app, ok := gCollector.apps.getApp(appname) + // if ok { + // app.close() + // } if err := gCollector.storage.UpdateAgentState(appname, agentid, false); err != nil { logger.Warn("update agent state Store", zap.String("error", err.Error())) } diff --git a/collector/service/orderly_key.go b/collector/service/orderly_key.go new file mode 100644 index 000000000..97837e445 --- /dev/null +++ b/collector/service/orderly_key.go @@ -0,0 +1,19 @@ +package service + +// OrderlyKeys 排序工具 +type OrderlyKeys []int64 + +// Len OrderlyKey 长度 +func (o OrderlyKeys) Len() int { + return len(o) +} + +// Swap 交换 +func (o OrderlyKeys) Swap(i, j int) { + o[i], o[j] = o[j], o[i] +} + +// Less 对比 +func (o OrderlyKeys) Less(i, j int) bool { + return o[i] < o[j] +} diff --git a/collector/service/pinpoint.go b/collector/service/pinpoint.go index b760b5876..c29fe87ce 100644 --- a/collector/service/pinpoint.go +++ b/collector/service/pinpoint.go @@ -5,7 +5,6 @@ import ( "fmt" "net" - "github.com/imdevlab/tracing/collector/misc" "github.com/imdevlab/tracing/pkg/constant" "github.com/imdevlab/tracing/pkg/network" "github.com/imdevlab/tracing/pkg/pinpoint/thrift" @@ -33,12 +32,9 @@ func pinpointPacket(conn net.Conn, tracePack *network.TracePack, appname, agenti logger.Warn("msgpack Unmarshal", zap.String("error", err.Error())) return err } - // 检查内存中是否存在app信息,不存在存入数据库中 - if !gCollector.apps.isAppExist(agentInfo.AppName) { - if err := gCollector.storage.AppNameStore(agentInfo.AppName); err != nil { - logger.Warn("insert apps error", zap.String("error", err.Error())) - return err - } + if err := gCollector.storage.AppNameStore(agentInfo.AppName); err != nil { + logger.Warn("insert apps error", zap.String("error", err.Error())) + return err } if err := gCollector.storage.AgentStore(agentInfo, true); err != nil { @@ -46,13 +42,10 @@ func pinpointPacket(conn net.Conn, tracePack *network.TracePack, appname, agenti return err } - // 内存缓存Agent信息 - gCollector.apps.storeAgent(agentInfo.AppName, agentInfo.AgentID, agentInfo.StartTimestamp, agentInfo.ServiceType) - misc.AddrStore.Add(agentInfo.AppName, agentInfo.IP4S) - *appname = agentInfo.AppName *agentid = agentInfo.AgentID *initName = true + logger.Info("Online", zap.String("appName", agentInfo.AppName), zap.String("agentID", agentInfo.AgentID)) // 注册信息原样返回 if _, err := conn.Write(tracePack.Encode()); err != nil { diff --git a/collector/stats/stats.go b/collector/service/stats.go similarity index 96% rename from collector/stats/stats.go rename to collector/service/stats.go index 530863247..8b84aa506 100644 --- a/collector/stats/stats.go +++ b/collector/service/stats.go @@ -1,4 +1,4 @@ -package stats +package service import ( "fmt" @@ -225,7 +225,13 @@ func (s *Stats) targetMapCounter(event *trace.TSpanEvent) { if event.ServiceType == constant.HTTP_CLIENT_4 || event.ServiceType == constant.DUBBO_CONSUMER { ip, err := getip(destinationID) if err == nil { - appName, ok := misc.AddrStore.Get(ip) + appName, ok := gCollector.apps.getNameByIP(ip) + if ok { + destinationID = appName + } + // 如果不是IP可以再找一下host相关,如果还是找不到那么就使用destinationID + } else { + appName, ok := gCollector.apps.getNameByHost(destinationID) if ok { destinationID = appName } diff --git a/collector/stats/orderly_key.go b/collector/stats/orderly_key.go deleted file mode 100644 index 78e241bec..000000000 --- a/collector/stats/orderly_key.go +++ /dev/null @@ -1,19 +0,0 @@ -package stats - -// OrderlyKey 排序工具 -type OrderlyKey []int64 - -// Len OrderlyKey 长度 -func (o OrderlyKey) Len() int { - return len(o) -} - -// Swap 交换 -func (o OrderlyKey) Swap(i, j int) { - o[i], o[j] = o[j], o[i] -} - -// Less 对比 -func (o OrderlyKey) Less(i, j int) bool { - return o[i] < o[j] -} diff --git a/collector/stats/runtime_stats.go b/collector/stats/runtime_stats.go deleted file mode 100644 index d70028a10..000000000 --- a/collector/stats/runtime_stats.go +++ /dev/null @@ -1,37 +0,0 @@ -package stats - -import ( - "github.com/imdevlab/tracing/pkg/metric" - "github.com/imdevlab/tracing/pkg/pinpoint/thrift/pinpoint" -) - -// RuntimeStats runtime 计算 -type RuntimeStats struct { - Type int // runtime 类型 - JVMStats *metric.JVMStats // jvm -} - -// NewRuntimeStats ... -func NewRuntimeStats() *RuntimeStats { - return &RuntimeStats{ - JVMStats: metric.NewJVMStats(), - } -} - -// JVMCounter ... -func (r *RuntimeStats) JVMCounter(agentState *pinpoint.TAgentStat) error { - // jvm, ok := r.JVMStats.Agents[agentState.GetAgentId()] - // if !ok { - // jvm = metric.NewJVMInfo() - // r.JVMStats.Agents[agentState.GetAgentId()] = jvm - // } - - // jvm.CPU.Count++ - // jvm.CPU.Jvm += agentState.CpuLoad.GetJvmCpuLoad() - // jvm.CPU.System += agentState.CpuLoad.GetSystemCpuLoad() - - // jvm.Memory.Count++ - // jvm.Memory.HeapUsed += agentState.Gc.GetJvmMemoryHeapUsed() - // jvm.Memory.NonHeap += agentState.Gc.GetJvmMemoryNonHeapUsed() - return nil -} diff --git a/pkg/util/agent_info.go b/pkg/util/agent.go similarity index 88% rename from pkg/util/agent_info.go rename to pkg/util/agent.go index 74a6a381a..9297de7ec 100644 --- a/pkg/util/agent_info.go +++ b/pkg/util/agent.go @@ -1,7 +1,7 @@ package util -// AgentInfo ... -type AgentInfo struct { +// Agent ... +type Agent struct { AppName string `db:"app_name" json:"applicationName" msg:"applicationName"` AgentID string `db:"agent_id" json:"agentId" msg:"agentId"` Type int32 `db:"ser_type" json:"serviceType" msg:"serviceType"` @@ -16,7 +16,7 @@ type AgentInfo struct { OperatingEnv int32 `db:"operating_env" json:"operating_env" msg:"operating_env"` } -// NewAgentInfo ... -func NewAgentInfo() *AgentInfo { - return &AgentInfo{} +// NewAgent ... +func NewAgent() *Agent { + return &Agent{} } diff --git a/quick-start/sql/cassandra.cql b/quick-start/sql/cassandra.cql index 595e0a80b..4116fb902 100644 --- a/quick-start/sql/cassandra.cql +++ b/quick-start/sql/cassandra.cql @@ -432,6 +432,7 @@ TRUNCATE TABLE runtime_stats ; TRUNCATE TABLE unknow_parent_map; TRUNCATE TABLE api_map ; +TRUNCATE TABLE service_map ; TRUNCATE TABLE method_stats ; TRUNCATE TABLE parent_map ;