apm_ebpf_appinfo.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package containers
  2. import (
  3. . "github.com/coroot/coroot-node-agent/utils/modelse"
  4. klog "github.com/sirupsen/logrus"
  5. "sync"
  6. "time"
  7. )
  8. type AppInfoFromServerT struct {
  9. AppInfo *EbpfAppResp
  10. lock *sync.RWMutex
  11. }
  12. var AppInfoFromServer AppInfoFromServerT
  13. func init() {
  14. AppInfoFromServer = AppInfoFromServerT{
  15. AppInfo: new(EbpfAppResp),
  16. lock: &sync.RWMutex{},
  17. }
  18. }
  19. func (r *Registry) PullAllAppInfo() {
  20. gcTicker := time.NewTicker(AllAppInfoInterval)
  21. defer gcTicker.Stop()
  22. for {
  23. select {
  24. case <-gcTicker.C:
  25. req := EbpfAppReq{
  26. AccountId: r.nodeInfo.GetNodeInfo().AccountID,
  27. }
  28. res, err := r.connServer.PullAllAppInfo(req)
  29. if err != nil {
  30. klog.Errorf("PullAllAppInfo err: %v", err)
  31. }
  32. r.SaveAppinfos(&res)
  33. //fmt.Println(r.GetAppInfoByIpPort("12.3.1.2:9999"))
  34. }
  35. }
  36. }
  37. func (r *Registry) SaveAppinfos(appinfos *EbpfAppResp) {
  38. AppInfoFromServer.lock.Lock()
  39. defer AppInfoFromServer.lock.Unlock()
  40. AppInfoFromServer.AppInfo = appinfos
  41. }
  42. func (r *Registry) GetAppInfoByIpPort(ipPort string) string {
  43. AppInfoFromServer.lock.Lock()
  44. defer AppInfoFromServer.lock.Unlock()
  45. if AppInfoFromServer.AppInfo == nil {
  46. return ""
  47. }
  48. info := *AppInfoFromServer.AppInfo
  49. if info == nil {
  50. return ""
  51. }
  52. appName, ok := info[ipPort]
  53. if ok {
  54. return appName
  55. }
  56. return ""
  57. }
  58. func (r *Registry) GetAllAppInfoFromServer() map[string]string {
  59. AppInfoFromServer.lock.Lock()
  60. defer AppInfoFromServer.lock.Unlock()
  61. appinfos := make(map[string]string)
  62. if AppInfoFromServer.AppInfo != nil {
  63. appinfos = *AppInfoFromServer.AppInfo
  64. }
  65. return appinfos
  66. }