|
@@ -1,14 +1,31 @@
|
|
|
package main
|
|
|
|
|
|
import (
|
|
|
+ "encoding/json"
|
|
|
"fmt"
|
|
|
"io"
|
|
|
-
|
|
|
"log"
|
|
|
"os"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
+type dumpRecord struct {
|
|
|
+ Token string
|
|
|
+ LastSeen string
|
|
|
+}
|
|
|
+
|
|
|
+type dumpStats struct {
|
|
|
+ Decision string
|
|
|
+ Amount int64
|
|
|
+}
|
|
|
+
|
|
|
+type dumpStruct struct {
|
|
|
+ GOOD []dumpRecord
|
|
|
+ BAD []dumpRecord
|
|
|
+ MEH []dumpRecord
|
|
|
+ STATS []dumpStats
|
|
|
+}
|
|
|
+
|
|
|
// 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 {
|
|
@@ -35,40 +52,53 @@ func handlepanic() {
|
|
|
func saveBayesToFile() {
|
|
|
|
|
|
var tmpJSON string
|
|
|
+ var DumpJson = new(dumpStruct)
|
|
|
|
|
|
log.Println("Trying to write json file")
|
|
|
|
|
|
- tmpJSON = fmt.Sprintln("\nBAD: ")
|
|
|
-
|
|
|
Classifier.BAD.Range(func(key interface{}, value interface{}) bool {
|
|
|
- tmpJSON = fmt.Sprintf("\t%s %-32s: %d\n", tmpJSON, key.(string), value.(int64))
|
|
|
+ var t dumpRecord
|
|
|
+ t.Token = key.(string)
|
|
|
+ t.LastSeen = time.Unix(0, value.(int64)).String()
|
|
|
+ DumpJson.BAD = append(DumpJson.BAD, t)
|
|
|
return true
|
|
|
})
|
|
|
|
|
|
- tmpJSON = fmt.Sprintf("%s \rGOOD: \n", tmpJSON)
|
|
|
-
|
|
|
Classifier.GOOD.Range(func(key interface{}, value interface{}) bool {
|
|
|
- tmpJSON = fmt.Sprintf("\t%s %-32s: %d\n", tmpJSON, key.(string), value.(int64))
|
|
|
+ var t dumpRecord
|
|
|
+ t.Token = key.(string)
|
|
|
+ t.LastSeen = time.Unix(0, value.(int64)).String()
|
|
|
+ DumpJson.GOOD = append(DumpJson.GOOD, t)
|
|
|
return true
|
|
|
})
|
|
|
|
|
|
- tmpJSON = fmt.Sprintf("%s \rMEH: \n", tmpJSON)
|
|
|
-
|
|
|
Classifier.MEH.Range(func(key interface{}, value interface{}) bool {
|
|
|
- tmpJSON = fmt.Sprintf("\t%s %-32s: %d\n", tmpJSON, key.(string), value.(int64))
|
|
|
+ var t dumpRecord
|
|
|
+ t.Token = key.(string)
|
|
|
+ t.LastSeen = time.Unix(0, value.(int64)).String()
|
|
|
+ DumpJson.MEH = append(DumpJson.MEH, t)
|
|
|
return true
|
|
|
})
|
|
|
|
|
|
- tmpJSON = fmt.Sprintf("%s \rSTATS: \n", tmpJSON)
|
|
|
-
|
|
|
Classifier.STATS.Range(func(key interface{}, value interface{}) bool {
|
|
|
- tmpJSON = fmt.Sprintf("\t%s %-32s: %d\n", tmpJSON, key.(string), value.(int64))
|
|
|
+ var t dumpStats
|
|
|
+ t.Decision = key.(string)
|
|
|
+ t.Amount = value.(int64)
|
|
|
+ DumpJson.STATS = append(DumpJson.STATS, t)
|
|
|
+
|
|
|
return true
|
|
|
})
|
|
|
|
|
|
+ if tmpJ, e := json.MarshalIndent(DumpJson, "", " "); e == nil {
|
|
|
+ tmpJSON = fmt.Sprintf("%s", tmpJ)
|
|
|
+
|
|
|
+ } else {
|
|
|
+ tmpJSON = e.Error()
|
|
|
+ }
|
|
|
+
|
|
|
dumpfile := os.Getenv("DUMPFILE")
|
|
|
if dumpfile == "" {
|
|
|
- dumpfile = "bayes.txt"
|
|
|
+ dumpfile = "bayes.json"
|
|
|
}
|
|
|
|
|
|
if DebugLog {
|