apm_ebpf_appinfo.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. if !r.isFusing {
  26. req := EbpfAppReq{
  27. AccountId: r.nodeInfo.GetNodeInfo().AccountID,
  28. }
  29. res, err := r.connServer.PullAllAppInfo(req)
  30. if err != nil {
  31. klog.Errorf("PullAllAppInfo err: %v", err)
  32. }
  33. r.SaveAppinfos(&res)
  34. //fmt.Println(r.GetAppInfoByIpPort("12.3.1.2:9999"))
  35. }
  36. }
  37. }
  38. }
  39. func (r *Registry) SaveAppinfos(appinfos *EbpfAppResp) {
  40. AppInfoFromServer.lock.Lock()
  41. defer AppInfoFromServer.lock.Unlock()
  42. AppInfoFromServer.AppInfo = appinfos
  43. }
  44. func (r *Registry) GetAppInfoByIpPort(ipPort string) string {
  45. AppInfoFromServer.lock.Lock()
  46. defer AppInfoFromServer.lock.Unlock()
  47. if AppInfoFromServer.AppInfo == nil {
  48. return ""
  49. }
  50. info := *AppInfoFromServer.AppInfo
  51. if info == nil {
  52. return ""
  53. }
  54. appName, ok := info[ipPort]
  55. if ok {
  56. return appName
  57. }
  58. return ""
  59. }
  60. func (r *Registry) GetAllAppInfoFromServer() map[string]string {
  61. AppInfoFromServer.lock.Lock()
  62. defer AppInfoFromServer.lock.Unlock()
  63. appinfos := make(map[string]string)
  64. if AppInfoFromServer.AppInfo != nil {
  65. appinfos = *AppInfoFromServer.AppInfo
  66. }
  67. return appinfos
  68. }