apm_host_info.go 2.0 KB

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