apm_host_info.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package node
  2. import (
  3. "encoding/base64"
  4. "encoding/json"
  5. "fmt"
  6. "github.com/coroot/coroot-node-agent/flags"
  7. "github.com/coroot/coroot-node-agent/kube"
  8. "github.com/coroot/coroot-node-agent/utils"
  9. . "github.com/coroot/coroot-node-agent/utils/modelse"
  10. klog "github.com/sirupsen/logrus"
  11. "gopkg.in/ini.v1"
  12. "strconv"
  13. "strings"
  14. )
  15. func NewNodeInfo(name, kv, version string) (*NodeInfoT, error) {
  16. if *flags.RunInOmniagent {
  17. klog.Infof("run in omniagent.")
  18. ni, err := newNodeInfoFromCommonIni(name, kv, version)
  19. if err != nil {
  20. klog.Errorf("Failed to create node info from common ini: %v", err)
  21. return nil, err
  22. }
  23. return ni, nil
  24. }
  25. var ip string
  26. var err error
  27. if *flags.RunInContainer {
  28. klog.Infof("run in container.")
  29. ip, err = kube.GetNodeIpByCore(name)
  30. if err != nil {
  31. return nil, err
  32. }
  33. } else {
  34. klog.Infof("run standalone.")
  35. ip, err = utils.GetRealIp()
  36. if err != nil {
  37. return nil, err
  38. }
  39. }
  40. n := &NodeInfoT{
  41. Hostname: name,
  42. HostIp: ip,
  43. KernelVersion: kv,
  44. SystemUUID: utils.SystemUUID(),
  45. HostID: utils.GetHostID(),
  46. AccountID: utils.GetAccountID(),
  47. LicenseKey: *flags.LicenseKey,
  48. AgentVersion: version,
  49. SysTag: *flags.SysTag,
  50. }
  51. utils.SaveNodeInfo(n)
  52. return n, nil
  53. }
  54. func newNodeInfoFromCommonIni(name, kv, version string) (*NodeInfoT, error) {
  55. if *flags.CommonIni != "" {
  56. iniData, err := ini.Load(*flags.CommonIni)
  57. if err != nil {
  58. klog.Errorf("Failed to load common ini file: %v", err)
  59. return nil, err
  60. }
  61. if iniData == nil {
  62. return nil, fmt.Errorf("no ini data")
  63. }
  64. ip := iniData.Section("common").Key("ip").String()
  65. uuid := iniData.Section("common").Key("system_uuid").String()
  66. host_id, err := iniData.Section("common").Key("host_id").Int64()
  67. if err != nil {
  68. klog.Errorf("Failed to get host_id: %v", err)
  69. return nil, err
  70. }
  71. token := iniData.Section("common").Key("token").String()
  72. account_and_user_byte, err := base64.StdEncoding.DecodeString(token)
  73. if err != nil {
  74. return nil, err
  75. }
  76. account_and_user_string := strings.Split(string(account_and_user_byte), "@")
  77. if len(account_and_user_string) > 0 {
  78. tagsStr := iniData.Section("common").Key("tags").String()
  79. tagT := struct {
  80. HostTag struct {
  81. SystemTag []string `json:"sys"`
  82. } `json:"host_tag"`
  83. }{}
  84. err := json.Unmarshal([]byte(tagsStr), &tagT)
  85. if err != nil {
  86. return nil, err
  87. }
  88. sysTag := strings.Join(tagT.HostTag.SystemTag, ",")
  89. accountId, err := strconv.Atoi(account_and_user_string[0])
  90. if err == nil {
  91. n := &NodeInfoT{
  92. Hostname: name,
  93. HostIp: ip,
  94. KernelVersion: kv,
  95. SystemUUID: uuid,
  96. HostID: host_id,
  97. AccountID: accountId,
  98. LicenseKey: *flags.LicenseKey,
  99. AgentVersion: version,
  100. SysTag: sysTag,
  101. }
  102. utils.SaveNodeInfo(n)
  103. return n, nil
  104. } else {
  105. klog.Errorf("Failed to strconv accountId: %v", err)
  106. return nil, err
  107. }
  108. }
  109. }
  110. return nil, nil
  111. }