| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package deviceinfo
- import (
- "os"
- "runtime"
- "strconv"
- "strings"
- "time"
- "quickip/internal/config"
- "quickip/internal/model"
- )
- type Service struct {
- cfg config.Config
- startedAt time.Time
- }
- func New(cfg config.Config) *Service {
- return &Service{cfg: cfg, startedAt: time.Now()}
- }
- func (s *Service) Get() model.DeviceInfo {
- hostname, _ := os.Hostname()
- if hostname == "" {
- hostname = s.cfg.DeviceIDFallback
- }
- return model.DeviceInfo{
- DeviceID: readMachineID(s.cfg.DeviceIDFallback),
- Hostname: hostname,
- OSVersion: readOSVersion(),
- AgentVersion: s.cfg.AgentVersion,
- UptimeSeconds: int64(time.Since(s.startedAt).Seconds()),
- }
- }
- func readMachineID(fallback string) string {
- for _, path := range []string{"/etc/machine-id", "/var/lib/dbus/machine-id"} {
- data, err := os.ReadFile(path)
- if err == nil {
- value := strings.TrimSpace(string(data))
- if value != "" {
- return value
- }
- }
- }
- return fallback
- }
- func readOSVersion() string {
- data, err := os.ReadFile("/etc/os-release")
- if err != nil {
- return runtime.GOOS
- }
- for _, line := range strings.Split(string(data), "\n") {
- if strings.HasPrefix(line, "PRETTY_NAME=") {
- return strings.Trim(strconv.Quote(strings.Trim(strings.TrimPrefix(line, "PRETTY_NAME="), `"`)), `"`)
- }
- }
- return runtime.GOOS
- }
|