130 lines
3.0 KiB
Go
130 lines
3.0 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"go.wit.com/lib/protobuf/chatpb"
|
|
"go.wit.com/log"
|
|
"google.golang.org/protobuf/types/known/timestamppb"
|
|
)
|
|
|
|
func doClean() {
|
|
log.Info("find all files")
|
|
scanTmp()
|
|
}
|
|
|
|
func scanTmp() {
|
|
var count int
|
|
filepath.WalkDir("/tmp", func(path string, d os.DirEntry, err error) error {
|
|
if err != nil {
|
|
// Handle possible errors, like permission issues
|
|
// fmt.Fprintf(os.Stderr, "error accessing path %q: %v\n", path, err)
|
|
// ignore all these problems
|
|
return err
|
|
}
|
|
|
|
/*
|
|
if d.IsDir() {
|
|
// log.Info("path is dir", path)
|
|
return nil
|
|
}
|
|
*/
|
|
|
|
_, fname := filepath.Split(path)
|
|
if !strings.HasPrefix(fname, "regex.") {
|
|
return nil
|
|
}
|
|
if count > 100 {
|
|
return log.Errorf("count exceeded")
|
|
}
|
|
if strings.HasPrefix(fname, "regex.gemini-api-response") {
|
|
// log.Info("response file:", fname)
|
|
return nil
|
|
}
|
|
if strings.Contains(fname, "gemini-api-request") {
|
|
// log.Info("response file:", fname)
|
|
if err := cleanGeminiFile(path); err == nil {
|
|
count += 1
|
|
return nil
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
if strings.HasSuffix(fname, ".stats") {
|
|
cleanStatsFile(path)
|
|
return nil
|
|
}
|
|
log.Info("check file:", path)
|
|
return nil
|
|
})
|
|
}
|
|
|
|
func cleanStatsFile(fullname string) {
|
|
log.Info("stats file", fullname)
|
|
}
|
|
|
|
func cleanGeminiFile(fullname string) error {
|
|
_, fname := filepath.Split(fullname)
|
|
if !strings.HasSuffix(fname, ".json") {
|
|
return log.Errorf("not really gemini-api-request .json")
|
|
}
|
|
parts := strings.Split(fname, ".")
|
|
if len(parts) == 5 {
|
|
if parts[2] != "gemini-api-request" {
|
|
return log.Errorf("not really gemini-api-request")
|
|
}
|
|
}
|
|
// log.Info("PARSE FILE:", fullname)
|
|
pb, err := parsePB(fullname)
|
|
if err != nil {
|
|
log.Info("parsePB() %s err %v\n", fullname, err)
|
|
return log.Errorf("parsePB() %s err %v", fullname, err)
|
|
}
|
|
if pb == nil {
|
|
log.Info("parsePB() == nil\n")
|
|
return log.Errorf("parsePB() == nil")
|
|
}
|
|
uuid := parts[1]
|
|
if argv.Clean != nil && argv.Clean.Match != "" {
|
|
if !strings.HasPrefix(uuid, argv.Clean.Match) {
|
|
return log.Errorf("uuid %s does not match %s", uuid, argv.Clean.Match)
|
|
}
|
|
}
|
|
if chat := me.chats.FindUuid(uuid); chat != nil {
|
|
log.Info("found uuid in chat", uuid, pb.Model, chat.Uuid)
|
|
statf, err := os.Stat(fullname)
|
|
if err == nil {
|
|
age := statf.ModTime()
|
|
if chat.AddGeminiRequest(fname, age, pb) {
|
|
me.chats.ConfigSave()
|
|
} else {
|
|
log.Info("file was perfect. os.Remove() here", fullname)
|
|
chat.PrintChatGeminiTable()
|
|
os.Remove(fullname)
|
|
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
id := parts[3]
|
|
if id == "1" {
|
|
log.Info("Insert new chat here", fullname, id)
|
|
statf, err := os.Stat(fullname)
|
|
if err == nil {
|
|
age := statf.ModTime()
|
|
c := new(chatpb.Chat)
|
|
c.Ctime = timestamppb.New(age)
|
|
c.Uuid = uuid
|
|
c.ChatName = "auto clean"
|
|
log.Info("new chat:", c.Uuid, c.Ctime)
|
|
me.chats.Append(c)
|
|
me.chats.ConfigSave()
|
|
okExit("")
|
|
}
|
|
}
|
|
log.Info("gemini JSON file uuid not found", fullname, id)
|
|
return log.Errorf("gemini JSON file uuid %s not found", uuid)
|
|
}
|