zardoz/file.go

142 lines
2.6 KiB
Go
Raw Normal View History

2019-11-22 11:35:16 +01:00
package main
import (
"encoding/json"
2019-11-22 11:35:16 +01:00
"fmt"
"io"
"log"
"os"
"time"
)
type dumpRecord struct {
Token string
LastSeen string
}
type dumpStats struct {
Decision string
Amount int64
}
type dumpStruct struct {
2019-11-28 11:39:45 +01:00
GOOD []struct {
Token string `json:"Token"`
LastSeen string `json:"LastSeen"`
} `json:"GOOD"`
BAD []struct {
Token string `json:"Token"`
LastSeen string `json:"LastSeen"`
} `json:"BAD"`
MEH []struct {
Token string `json:"Token"`
LastSeen string `json:"LastSeen"`
} `json:"MEH"`
STATS []struct {
Decision string `json:"Decision"`
2019-11-28 11:42:46 +01:00
Amount int64 `json:"Amount"`
2019-11-28 11:39:45 +01:00
} `json:"STATS"`
}
2019-11-22 11:35:16 +01:00
// WriteToFile will print any string of text to a file safely by
// checking for errors and syncing at the end.
func writeToFile(filename string, data string) error {
file, err := os.Create(filename)
if err != nil {
return err
}
defer file.Close()
_, err = io.WriteString(file, data)
if err != nil {
return err
}
return file.Sync()
}
func handlepanic() {
if a := recover(); a != nil {
fmt.Println("OPS!: Recovering from:", a)
}
}
func saveBayesToFile() {
var tmpJSON string
var DumpJson = new(dumpStruct)
2019-11-22 11:35:16 +01:00
log.Println("Trying to write json file")
Classifier.BAD.Range(func(key interface{}, value interface{}) bool {
var t dumpRecord
t.Token = key.(string)
t.LastSeen = time.Unix(0, value.(int64)).String()
DumpJson.BAD = append(DumpJson.BAD, t)
2019-11-22 11:35:16 +01:00
return true
})
Classifier.GOOD.Range(func(key interface{}, value interface{}) bool {
var t dumpRecord
t.Token = key.(string)
t.LastSeen = time.Unix(0, value.(int64)).String()
DumpJson.GOOD = append(DumpJson.GOOD, t)
2019-11-22 11:35:16 +01:00
return true
})
Classifier.MEH.Range(func(key interface{}, value interface{}) bool {
var t dumpRecord
t.Token = key.(string)
t.LastSeen = time.Unix(0, value.(int64)).String()
DumpJson.MEH = append(DumpJson.MEH, t)
2019-11-22 11:35:16 +01:00
return true
})
Classifier.STATS.Range(func(key interface{}, value interface{}) bool {
var t dumpStats
t.Decision = key.(string)
t.Amount = value.(int64)
DumpJson.STATS = append(DumpJson.STATS, t)
2019-11-22 11:35:16 +01:00
return true
})
if tmpJ, e := json.MarshalIndent(DumpJson, "", " "); e == nil {
tmpJSON = fmt.Sprintf("%s", tmpJ)
} else {
tmpJSON = e.Error()
}
2019-11-24 13:18:22 +01:00
dumpfile := os.Getenv("DUMPFILE")
if dumpfile == "" {
dumpfile = "bayes.json"
2019-11-24 13:18:22 +01:00
}
2019-11-22 11:35:16 +01:00
if DebugLog {
log.Println(tmpJSON)
} else {
2019-11-24 13:18:22 +01:00
writeToFile(dumpfile, tmpJSON)
log.Println("File saved: ", dumpfile)
2019-11-22 11:35:16 +01:00
}
}
func jsonEngine() {
for {
log.Println("Zardoz Seniority: ", ProxyFlow.seniority)
saveBayesToFile()
time.Sleep(1 * time.Minute)
}
}
func init() {
log.Printf("File Engine Starting")
go jsonEngine()
log.Printf("FIle Engine Started")
}