/
log.go
82 lines (65 loc) · 1.66 KB
/
log.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package simulation
import (
"fmt"
"os"
"path"
"testing"
"time"
)
// log writter
type LogWriter interface {
AddEntry(OperationEntry)
PrintLogs()
}
// LogWriter - return a dummy or standard log writer given the testingmode
func NewLogWriter(tb testing.TB) LogWriter {
tb.Helper()
// TODO: Figure out whats going on / why here
testingMode, _, _ := getTestingMode(tb)
if !testingMode {
return &DummyLogWriter{}
}
return &StandardLogWriter{}
}
// log writter
type StandardLogWriter struct {
OpEntries []OperationEntry `json:"op_entries" yaml:"op_entries"`
}
// add an entry to the log writter
func (lw *StandardLogWriter) AddEntry(opEntry OperationEntry) {
lw.OpEntries = append(lw.OpEntries, opEntry)
}
// PrintLogs - print the logs to a simulation file
func (lw *StandardLogWriter) PrintLogs() {
f := createLogFile()
defer f.Close()
for i := 0; i < len(lw.OpEntries); i++ {
writeEntry := fmt.Sprintf("%s\n", (lw.OpEntries[i]).MustMarshal())
_, err := f.WriteString(writeEntry)
if err != nil {
panic("Failed to write logs to file")
}
}
}
func createLogFile() *os.File {
var f *os.File
fileName := fmt.Sprintf("%s.log", time.Now().Format("2006-01-02_15:04:05"))
folderPath := path.Join(os.ExpandEnv("$HOME"), ".simapp", "simulations")
filePath := path.Join(folderPath, fileName)
err := os.MkdirAll(folderPath, os.ModePerm)
if err != nil {
panic(err)
}
f, err = os.Create(filePath)
if err != nil {
panic(err)
}
fmt.Printf("Logs to writing to %s\n", filePath)
return f
}
// dummy log writter
type DummyLogWriter struct{}
// do nothing
func (lw *DummyLogWriter) AddEntry(_ OperationEntry) {}
// do nothing
func (lw *DummyLogWriter) PrintLogs() {}