Implement saving snapshots to a database

This commit is contained in:
2025-07-20 11:38:08 +02:00
parent 22f991e72e
commit b785d24a08
6 changed files with 60 additions and 8 deletions

24
main.go
View File

@@ -25,7 +25,7 @@ type GlobalStats struct {
}
var (
stats GlobalStats = GlobalStats{
stats GlobalStats = GlobalStats{
ModificationsPerCommand: sync.Map{},
}
)
@@ -34,8 +34,6 @@ func main() {
flag.Usage = func() {
fmt.Fprintf(os.Stderr, "Usage: %s [options] <pattern> <lua_expression> <...files_or_globs>\n", os.Args[0])
fmt.Fprintf(os.Stderr, "\nOptions:\n")
fmt.Fprintf(os.Stderr, " -git\n")
fmt.Fprintf(os.Stderr, " Use git to manage files\n")
fmt.Fprintf(os.Stderr, " -reset\n")
fmt.Fprintf(os.Stderr, " Reset files to their original state\n")
fmt.Fprintf(os.Stderr, " -loglevel string\n")
@@ -83,7 +81,6 @@ func main() {
logger.Trace("Regex: %s", command.Regex)
logger.Trace("Files: %v", command.Files)
logger.Trace("Lua: %s", command.Lua)
logger.Trace("Git: %t", command.Git)
logger.Trace("Reset: %t", command.Reset)
logger.Trace("Isolate: %t", command.Isolate)
logger.Trace("LogLevel: %s", command.LogLevel)
@@ -140,16 +137,22 @@ func main() {
logger.Debug("Created logger for command %q with log level %s", cmdName, cmdLogLevel.String())
}
db, err := utils.GetDB()
if err != nil {
logger.Error("Failed to get database: %v", err)
return
}
for file, association := range associations {
workers <- struct{}{}
wg.Add(1)
logger.SafeGoWithArgs(func(args ...interface{}) {
defer func() { <-workers }()
defer wg.Done()
// Track per-file processing time
fileStartTime := time.Now()
logger.Debug("Reading file %q", file)
fileData, err := os.ReadFile(file)
if err != nil {
logger.Error("Failed to read file %q: %v", file, err)
@@ -157,18 +160,28 @@ func main() {
}
fileDataStr := string(fileData)
logger.Debug("Saving file %q to database", file)
err = db.SaveFile(file, fileData)
if err != nil {
logger.Error("Failed to save file %q to database: %v", file, err)
return
}
logger.Debug("Running isolate commands for file %q", file)
fileDataStr, err = RunIsolateCommands(association, file, fileDataStr, &fileMutex)
if err != nil {
logger.Error("Failed to run isolate commands for file %q: %v", file, err)
return
}
logger.Debug("Running other commands for file %q", file)
fileDataStr, err = RunOtherCommands(file, fileDataStr, association, &fileMutex, commandLoggers)
if err != nil {
logger.Error("Failed to run other commands for file %q: %v", file, err)
return
}
logger.Debug("Writing file %q", file)
err = os.WriteFile(file, []byte(fileDataStr), 0644)
if err != nil {
logger.Error("Failed to write file %q: %v", file, err)
@@ -263,7 +276,6 @@ func CreateExampleConfig() {
Regex: "price=\"(\\d+)\"",
Lua: "if num(v1) < 100 then return v1 * 1.5 else return v1 end",
Files: []string{"items/*.xml", "shop/*.xml"},
Git: true,
LogLevel: "DEBUG",
},
{