refactor(logging): change logging to slog
This commit is contained in:
parent
5a154429d8
commit
f00a02632f
1 changed files with 42 additions and 26 deletions
68
main.go
68
main.go
|
|
@ -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:]...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue