diff options
| author | Shulhan <ms@kilabit.info> | 2025-08-13 18:47:49 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2025-08-20 02:43:53 +0700 |
| commit | f9c0f7d0e73c89b7473b7c0123427b934fcbff65 (patch) | |
| tree | a91c46b963889e67bc4a0e65ba2ad9829540e72b /service_report.go | |
| parent | d34a7d3def91fb614fb657b81ff8265f19e078c8 (diff) | |
| download | lilin-f9c0f7d0e73c89b7473b7c0123427b934fcbff65.tar.xz | |
all: store the service logs into file
Diffstat (limited to 'service_report.go')
| -rw-r--r-- | service_report.go | 44 |
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) + } } |
