apm_host_info.go 2.3 KB

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