refactor(logging): change logging to slog

This commit is contained in:
Patryk Hegenberg 2025-01-03 07:41:59 +01:00
parent 5a154429d8
commit f00a02632f

68
main.go
View file

@ -3,10 +3,11 @@ package main
import ( import (
"fmt" "fmt"
"io" "io"
"log" "log/slog"
"net" "net"
"os" "os"
"os/exec" "os/exec"
"path/filepath"
"strings" "strings"
"time" "time"
@ -32,30 +33,43 @@ type Config struct {
var cfg Config var cfg Config
func init() { func init() {
log.Println("Loading Config File") configPath, err := os.UserConfigDir()
viper.SetConfigFile("work-config.toml")
viper.SetConfigType("toml")
viper.AddConfigPath(".")
viper.AutomaticEnv()
err := viper.ReadInConfig()
if err != nil { if err != nil {
log.Printf("error loading config file: %v", err) slog.Error("Unable to find config path", "error", err)
return
} }
workConfigPath := filepath.Join(configPath, "work")
configFile := filepath.Join(workConfigPath, "config.toml")
slog.Info("Looking for config file", "path", configFile)
if _, err := os.Stat(configFile); os.IsNotExist(err) {
slog.Error("Config file does not exist", "path", configFile)
return
}
viper.SetConfigFile(configFile)
viper.SetConfigType("toml")
err = viper.ReadInConfig()
if err != nil {
slog.Error("Error loading config file", "error", err)
return
}
slog.Info("Config file successfully loaded")
allSettings := viper.AllSettings() allSettings := viper.AllSettings()
log.Printf("All loaded settings: %+v", allSettings) slog.Debug("Loaded settings", "config", allSettings)
err = viper.UnmarshalKey("default", &cfg) err = viper.UnmarshalKey("default", &cfg)
if err != nil { if err != nil {
log.Printf("unable to decode into struct: %v", err) slog.Error("Unable to decode into struct", "error", err)
} }
} }
func main() { func main() {
// err := LoadConfig()
// if err != nil {
// log.Printf("error: %v", err)
// }
var choice string var choice string
form := huh.NewForm( form := huh.NewForm(
huh.NewGroup( huh.NewGroup(
@ -80,14 +94,13 @@ func main() {
err := form.Run() err := form.Run()
if err != nil { if err != nil {
fmt.Println("Error:", err) slog.Error("Cannot run form", "error", err)
return return
} }
switch choice { switch choice {
case "Start": case "Start":
connect() connect()
// startSequence()
case "stop Work": case "stop Work":
runCommand("timew", "stop", "work") runCommand("timew", "stop", "work")
case "start break": case "start break":
@ -118,13 +131,14 @@ func connect() {
wakeLou() wakeLou()
sshClient, err := ssh.Dial("tcp", cfg.SSHHost+":"+fmt.Sprintf("%v", cfg.SSHPort), makeSSHClient()) sshClient, err := ssh.Dial("tcp", cfg.SSHHost+":"+fmt.Sprintf("%v", cfg.SSHPort), makeSSHClient())
if err != nil { if err != nil {
log.Fatal("Failed to dial: ", err) slog.Error("Failed to dial", "error", err)
return
} }
defer sshClient.Close() defer sshClient.Close()
session, err := sshClient.NewSession() session, err := sshClient.NewSession()
if err != nil { if err != nil {
log.Fatal("Failed to create session: ", err) slog.Error("Failed to create session", "error", err)
} }
defer session.Close() defer session.Close()
@ -138,7 +152,7 @@ func connect() {
func forwardPort(sshConn *ssh.Client, localPort, remoteHost, remotePort string) { func forwardPort(sshConn *ssh.Client, localPort, remoteHost, remotePort string) {
listener, err := net.Listen("tcp", "127.0.0.1:"+localPort) listener, err := net.Listen("tcp", "127.0.0.1:"+localPort)
if err != nil { if err != nil {
log.Printf("Fehler beim Öffnen des lokalen Ports %s: %v", localPort, err) slog.Error("Error opening local port", "port", localPort, "error", err)
return return
} }
defer listener.Close() defer listener.Close()
@ -146,13 +160,13 @@ func forwardPort(sshConn *ssh.Client, localPort, remoteHost, remotePort string)
for { for {
localConn, err := listener.Accept() localConn, err := listener.Accept()
if err != nil { if err != nil {
log.Printf("Fehler beim Akzeptieren der Verbindung: %v", err) slog.Error("Error accepting connection", "error", err)
continue continue
} }
remoteConn, err := sshConn.Dial("tcp", remoteHost+":"+remotePort) remoteConn, err := sshConn.Dial("tcp", remoteHost+":"+remotePort)
if err != nil { if err != nil {
log.Printf("Fehler beim Verbinden zum Remote-Host %s:%s: %v", remoteHost, remotePort, err) slog.Error("Error connecting to remote host", "host", remoteHost, "port", remotePort, "error", err)
localConn.Close() localConn.Close()
continue continue
} }
@ -172,12 +186,14 @@ func makeSSHClient() *ssh.ClientConfig {
keypath := os.ExpandEnv("$HOME/.ssh/hegenberg") keypath := os.ExpandEnv("$HOME/.ssh/hegenberg")
keyBytes, err := os.ReadFile(keypath) keyBytes, err := os.ReadFile(keypath)
if err != nil { if err != nil {
log.Fatalf("Failed to read private key: %s", err) slog.Error("Failed to read private key", "error", err)
os.Exit(1)
} }
key, err := ssh.ParsePrivateKeyWithPassphrase(keyBytes, []byte(cfg.RDPPassword)) key, err := ssh.ParsePrivateKeyWithPassphrase(keyBytes, []byte(cfg.RDPPassword))
if err != nil { if err != nil {
log.Fatalf("Failed to parse private key: %s", err) slog.Error("Failed to parse private key", "error", err)
os.Exit(1)
} }
return &ssh.ClientConfig{ return &ssh.ClientConfig{
@ -197,7 +213,7 @@ func runCommand(name string, args ...string) {
cmd.Stdin = os.Stdin cmd.Stdin = os.Stdin
err := cmd.Run() err := cmd.Run()
if err != nil { if err != nil {
fmt.Println("Error:", err) slog.Error("Command execution error", "command", name, "args", args, "error", err)
} }
} }
@ -216,7 +232,7 @@ func wakeLou() {
cfg.VardaHost, cfg.VardaHost,
cfg.LouMac) cfg.LouMac)
args := strings.Split(sshCommand, " ") args := strings.Split(sshCommand, " ")
log.Println(args) slog.Info("Executing wake command", "args", args)
runCommand("ssh", args[1:]...) runCommand("ssh", args[1:]...)
} }