feat(cli): add history command and logging for actions

This commit is contained in:
Patryk Hegenberg 2025-01-24 09:24:59 +01:00
parent f8abf29594
commit 8ed3b0c013
9 changed files with 110 additions and 4 deletions

View file

@ -2,6 +2,18 @@
All notable changes to this project will be documented in this file.
## [unreleased]
### 🚀 Features
- *(cli)* Add concurrent execution of search and update to improve performance
- *(cli)* Add aliases to commands
- *(config)* Add creation of default config if no config exists
### 🐛 Bug Fixes
- *(packagemanager)* Reimplement getPackagemanager to enable installing buildtools on linux
## [0.4.0] - 2025-01-20
### 🚀 Features
@ -16,6 +28,7 @@ All notable changes to this project will be documented in this file.
### 📚 Documentation
- Update changelog.md
- Update changelog.md
## [0.3.1] - 2025-01-19

View file

@ -43,8 +43,21 @@ func init() {
updateCmd.Flags().StringP("manager", "m", "os", "The package manager you want to update packages with. (Options: os|homebrew|pipx|flatpak)")
packageCmd.AddCommand(addCmd, deleteCmd, showCmd, enableCmd)
RootCmd.AddCommand(packageCmd, searchCmd, installCmd, removeCmd, updateCmd, updateAllCmd)
packageCmd.AddCommand(
addCmd,
deleteCmd,
showCmd,
enableCmd,
)
RootCmd.AddCommand(
packageCmd,
searchCmd,
installCmd,
removeCmd,
updateCmd,
updateAllCmd,
historyCmd,
)
}
func initConfig() {

28
cmd/history_cmd.go Normal file
View file

@ -0,0 +1,28 @@
package cmd
import (
"fmt"
"log"
"os"
"path/filepath"
"github.com/spf13/cobra"
)
var historyCmd = &cobra.Command{
Use: "history",
Short: "Zeigt die Befehlshistorie an",
Run: func(cmd *cobra.Command, args []string) {
dirname, err := os.UserConfigDir()
if err != nil {
log.Printf("error getting user config dir: %v\n", err)
}
historyFile := filepath.Join(dirname, "sst", "sst_history")
content, err := os.ReadFile(historyFile)
if err != nil {
fmt.Println("error reading history: ", err)
return
}
fmt.Println(string(content))
},
}

View file

@ -51,5 +51,8 @@ var installCmd = &cobra.Command{
if err := manager.Install([]string{packageName}); err != nil {
log.Printf("error: %v\n", err)
}
if err := utils.LogToHistory("installed", packageName, manager.Name()); err != nil {
fmt.Println("error logging action:", err)
}
},
}

View file

@ -4,6 +4,7 @@ import (
"fmt"
"os"
"sort"
"system_setup_tool/utils"
"github.com/spf13/cobra"
"github.com/spf13/viper"
@ -58,6 +59,9 @@ var addCmd = &cobra.Command{
}
fmt.Printf("Package %s has been added to the configuration for %s\n", name, manager)
if err := utils.LogToHistory("added", name, manager); err != nil {
fmt.Println("error logging action:", err)
}
},
}
@ -120,6 +124,9 @@ var deleteCmd = &cobra.Command{
}
fmt.Printf("Package %s was not found in the configuration for %s\n", name, manager)
if err := utils.LogToHistory("removed", name, manager); err != nil {
fmt.Println("error logging action:", err)
}
}
},
}
@ -187,5 +194,8 @@ var enableCmd = &cobra.Command{
}
fmt.Printf("Package manager %s has been %s\n", manager, map[bool]string{true: "enabled", false: "disabled"}[enable])
if err := utils.LogToHistory("enabled", "", manager); err != nil {
fmt.Println("error logging action:", err)
}
},
}

View file

@ -50,5 +50,8 @@ var removeCmd = &cobra.Command{
if err := manager.RemovePackage(packageName); err != nil {
log.Printf("error: %v\n", err)
}
if err := utils.LogToHistory("removed", packageName, manager.Name()); err != nil {
fmt.Println("error logging action:", err)
}
},
}

View file

@ -8,6 +8,7 @@ import (
"sync"
pm "system_setup_tool/packagemanager"
"system_setup_tool/utils"
"github.com/spf13/cobra"
)
@ -108,5 +109,8 @@ func searchConcurrently(managers []pm.PackageManager, packageName string) {
fmt.Printf("Results from %s:\n", result.manager.Name())
displayResults(result.results, result.manager.Name())
fmt.Println()
if err := utils.LogToHistory("searched", packageName, result.manager.Name()); err != nil {
fmt.Println("error logging action:", err)
}
}
}

View file

@ -53,10 +53,18 @@ var updateCmd = &cobra.Command{
if packageName != "" {
if err := manager.UpdatePackage(packageName); err != nil {
log.Printf("error: %v\n", err)
} else {
if err := utils.LogToHistory("updated", packageName, manager.Name()); err != nil {
fmt.Println("error logging action:", err)
}
}
} else {
if err := manager.UpdateAllPackages(); err != nil {
log.Printf("error: %v\n", err)
} else {
if err := utils.LogToHistory("updated", "all", "all"); err != nil {
fmt.Println("error logging action:", err)
}
}
}
},

View file

@ -2,6 +2,9 @@ package utils
import (
"fmt"
"os"
"path/filepath"
"time"
"github.com/charmbracelet/huh"
)
@ -11,7 +14,7 @@ func GetSudoPassword() (string, error) {
form := huh.NewForm(
huh.NewGroup(
huh.NewInput().
Title("Bitte geben Sie Ihr sudo-Passwort ein").
Title("Enter your password").
EchoMode(huh.EchoModePassword).
Value(&password),
),
@ -19,7 +22,7 @@ func GetSudoPassword() (string, error) {
err := form.Run()
if err != nil {
return "", fmt.Errorf("fehler bei der Passwortabfrage: %v", err)
return "", fmt.Errorf("error at password-dialog: %v", err)
}
return password, nil
}
@ -30,3 +33,24 @@ func max(a, b int) int {
}
return b
}
func LogToHistory(action, pkg, manager string) error {
dirname, err := os.UserConfigDir()
if err != nil {
return fmt.Errorf("cant obtain config dir: %v", err)
}
historyFile := filepath.Join(dirname, "sst", "sst_history")
f, err := os.OpenFile(historyFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
return err
}
defer f.Close()
timestamp := time.Now().Format("2006-01-02 15:04:05")
logEntry := fmt.Sprintf("%s: action: [%s] - package: [%s] - packagemanager: [%s]\n", timestamp, action, pkg, manager)
if _, err := f.WriteString(logEntry); err != nil {
return err
}
return nil
}