package system

import "sync/atomic"

// Info contains atomic counters and values for various server statistics
type Info struct {
	App         string `json:"app"`
	Version     string `json:"version"`      // the current version of the server
	Started     int64  `json:"started"`      // the time the server started in unix seconds
	Time        int64  `json:"time"`         // current time on the server
	Uptime      int64  `json:"uptime"`       // the number of seconds the server has been online
	MemoryAlloc int64  `json:"memory_alloc"` // memory currently allocated
	Threads     int64  `json:"threads"`      // number of active goroutines, named as threads for platform ambiguity
}

// Clone makes a copy of Info using atomic operation
func (i *Info) Clone() *Info {
	return &Info{
		App:         "mysubarumq",
		Version:     i.Version,
		Started:     atomic.LoadInt64(&i.Started),
		Time:        atomic.LoadInt64(&i.Time),
		Uptime:      atomic.LoadInt64(&i.Uptime),
		MemoryAlloc: atomic.LoadInt64(&i.MemoryAlloc),
		Threads:     atomic.LoadInt64(&i.Threads),
	}
}
