apm_host_info.go 2.4 KB

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