88 lines
2.4 KiB
Go
88 lines
2.4 KiB
Go
package system
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/edgebox-iot/edgeboxctl/internal/utils"
|
|
|
|
"github.com/joho/godotenv"
|
|
"github.com/shirou/gopsutil/host"
|
|
)
|
|
|
|
// GetUptimeInSeconds: Returns a value (as string) of the total system uptime
|
|
func GetUptimeInSeconds() string {
|
|
uptime, _ := host.Uptime()
|
|
|
|
return strconv.FormatUint(uptime, 10)
|
|
}
|
|
|
|
// GetUptimeFormatted: Returns a humanized version that can be useful for logging
|
|
func GetUptimeFormatted() string {
|
|
uptime, _ := host.Uptime()
|
|
|
|
days := uptime / (60 * 60 * 24)
|
|
hours := (uptime - (days * 60 * 60 * 24)) / (60 * 60)
|
|
minutes := ((uptime - (days * 60 * 60 * 24)) - (hours * 60 * 60)) / 60
|
|
return fmt.Sprintf("%d days, %d hours, %d minutes", days, hours, minutes)
|
|
}
|
|
|
|
// GetIP: Returns the ip address of the instance
|
|
func GetIP() string {
|
|
ip := ""
|
|
|
|
// Trying to find a valid IP (For direct connection, not tunneled)
|
|
ethResult := utils.ExecAndGetLines("/", "ip", []string{"-o", "-4", "addr", "list", "eth0"})
|
|
for ethResult.Scan() {
|
|
adapterRawInfo := strings.Fields(ethResult.Text())
|
|
if ip == "" {
|
|
ip = strings.Split(adapterRawInfo[3], "/")[0]
|
|
}
|
|
}
|
|
|
|
// If no IP was found yet, try wlan0
|
|
if ip == "" {
|
|
wlanResult := utils.ExecAndGetLines("/", "ip", []string{"-o", "-4", "addr", "list", "wlan0"})
|
|
for wlanResult.Scan() {
|
|
adapterRawInfo := strings.Fields(wlanResult.Text())
|
|
if ip == "" {
|
|
ip = strings.Split(adapterRawInfo[3], "/")[0]
|
|
}
|
|
}
|
|
}
|
|
|
|
return ip
|
|
}
|
|
|
|
func GetHostname() string {
|
|
return utils.Exec("/", "hostname", []string{})
|
|
}
|
|
|
|
// SetupCloudOptions: Reads the designated env file looking for options to write into the options table. Meant to be used on initial setup. Deletes source env file after operation.
|
|
func SetupCloudOptions() {
|
|
|
|
var cloudEnv map[string]string
|
|
cloudEnvFileLocationPath := utils.GetPath(utils.CloudEnvFileLocation)
|
|
cloudEnv, err := godotenv.Read(cloudEnvFileLocationPath)
|
|
|
|
if err != nil {
|
|
fmt.Println("Error loading .env file for cloud version setup")
|
|
}
|
|
|
|
if cloudEnv["NAME"] != "" {
|
|
utils.WriteOption("NAME", cloudEnv["NAME"])
|
|
}
|
|
|
|
if cloudEnv["EMAIL"] != "" {
|
|
utils.WriteOption("EMAIL", cloudEnv["EMAIL"])
|
|
}
|
|
|
|
if cloudEnv["EDGEBOXIO_API_TOKEN"] != "" {
|
|
utils.WriteOption("EDGEBOXIO_API_TOKEN", cloudEnv["EDGEBOXIO_API_TOKEN"])
|
|
}
|
|
|
|
// In the end of this operation takes place, remove the env file as to not overwrite any options once they are set.
|
|
utils.Exec("/", "rm", []string{cloudEnvFileLocationPath})
|
|
}
|