apm_host_info.go 2.3 KB

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