aboutsummaryrefslogtreecommitdiff
path: root/service_report.go
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2025-08-13 18:47:49 +0700
committerShulhan <ms@kilabit.info>2025-08-20 02:43:53 +0700
commitf9c0f7d0e73c89b7473b7c0123427b934fcbff65 (patch)
treea91c46b963889e67bc4a0e65ba2ad9829540e72b /service_report.go
parentd34a7d3def91fb614fb657b81ff8265f19e078c8 (diff)
downloadlilin-f9c0f7d0e73c89b7473b7c0123427b934fcbff65.tar.xz
all: store the service logs into file
Diffstat (limited to 'service_report.go')
-rw-r--r--service_report.go44
1 files changed, 42 insertions, 2 deletions
diff --git a/service_report.go b/service_report.go
index 291cd2b..7aee321 100644
--- a/service_report.go
+++ b/service_report.go
@@ -3,6 +3,14 @@
package lilin
+import (
+ "encoding/csv"
+ "fmt"
+ "log"
+ "os"
+ "path/filepath"
+)
+
// historyKeepSize maximum report to keep in history.
const historyKeepSize = 120
@@ -11,17 +19,44 @@ const historyMax = historyKeepSize * 2
// ServiceReport contains the scan report for single service.
type ServiceReport struct {
+ logf *os.File
+ writer *csv.Writer
+ logPath string
+
Name string
Last ScanReport
History []ScanReport
}
-func NewServiceReport(name string) (svcReport *ServiceReport) {
+func NewServiceReport(opts ServerOptions, name string) (
+ svcReport *ServiceReport, err error,
+) {
+ var logp = `NewServiceReport`
+
svcReport = &ServiceReport{
+ logPath: filepath.Join(opts.logServiceDir, name+`.log`),
Name: name,
History: make([]ScanReport, 0, historyMax),
}
- return svcReport
+
+ svcReport.logf, err = os.OpenFile(svcReport.logPath,
+ os.O_WRONLY|os.O_CREATE, 0600)
+ if err != nil {
+ return nil, fmt.Errorf(`%s: %w`, logp, err)
+ }
+
+ svcReport.writer = csv.NewWriter(svcReport.logf)
+
+ return svcReport, nil
+}
+
+// Close release any resources opened by report.
+func (svcReport *ServiceReport) Close() (err error) {
+ err = svcReport.logf.Close()
+ if err != nil {
+ return fmt.Errorf(`Close: %w`, err)
+ }
+ return nil
}
func (svcReport *ServiceReport) Store(scanReport ScanReport) {
@@ -32,4 +67,9 @@ func (svcReport *ServiceReport) Store(scanReport ScanReport) {
copy(svcReport.History, svcReport.History[start:])
svcReport.History = svcReport.History[:historyKeepSize-1]
}
+ var record = scanReport.toCSV()
+ var err = svcReport.writer.Write(record)
+ if err != nil {
+ log.Printf(`Store: %s`, err)
+ }
}