apm_host_info.go 2.1 KB

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