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})
 | |
| }
 |