aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--_www/index.tmpl4
-rw-r--r--reports.go2
-rw-r--r--scan_report.go2
-rw-r--r--service.go4
-rw-r--r--service_config.go13
-rw-r--r--service_report.go8
-rw-r--r--service_report_test.go2
-rw-r--r--service_test.go4
-rw-r--r--testdata/etc/lilin/service.d/http.cfg3
-rw-r--r--testdata/etc/lilin/service.d/tcp.cfg3
-rw-r--r--testdata/etc/lilin/service.d/udp.cfg3
-rw-r--r--worker.go26
-rw-r--r--worker_test.go9
13 files changed, 46 insertions, 37 deletions
diff --git a/_www/index.tmpl b/_www/index.tmpl
index ae7d7a2..4880ec8 100644
--- a/_www/index.tmpl
+++ b/_www/index.tmpl
@@ -56,7 +56,7 @@
{{ $status := statusString .Last.Success }}
<div class="service {{ $status }}">
<span class="at"> {{.Last.At}}</span>
- <span class="name"> {{.Name}} </span>
+ <span class="name"> {{.ID}} </span>
<span class="status">{{ $status }}</span>
<span class="error">{{ .Last.Error }}</span>
</div>
@@ -75,7 +75,7 @@
{{ range $list }}
<div class="service">
<span class="at">{{ .At }}</span>
- <span class="name">{{ .Name }}</span>
+ <span class="name">{{ .ID }}</span>
<span class="status"><span class="fail"> DOWN </span></span>
<span class="error">{{ .Error }}</span>
</div>
diff --git a/reports.go b/reports.go
index fdf472e..a635ac2 100644
--- a/reports.go
+++ b/reports.go
@@ -19,7 +19,7 @@ type Reports struct {
// Store the service scan report.
func (reports *Reports) Store(scanReport ScanReport) {
reports.Lock()
- var svcReport = reports.Services[scanReport.Name]
+ var svcReport = reports.Services[scanReport.ID]
svcReport.Store(scanReport)
if !scanReport.Success {
reports.Fail = append(reports.Fail, scanReport)
diff --git a/scan_report.go b/scan_report.go
index 4b4938d..c9946f6 100644
--- a/scan_report.go
+++ b/scan_report.go
@@ -7,7 +7,7 @@ import "time"
// ScanReport contains the result of scanning service.
type ScanReport struct {
- Name string
+ ID string
// The time when the scan started.
At time.Time
diff --git a/service.go b/service.go
index fd9fc59..69e68a3 100644
--- a/service.go
+++ b/service.go
@@ -37,7 +37,7 @@ func NewService(cfg ServiceConfig) (svc *Service, err error) {
func (svc *Service) Scan() (report ScanReport) {
var err error
- report.Name = svc.cfg.Name
+ report.ID = svc.cfg.ID
report.At = internal.Now()
if !svc.isReady {
err = svc.connect()
@@ -89,7 +89,7 @@ func (svc *Service) Start(reportq chan<- ScanReport) {
for {
_, ok := <-svc.ticker.C
if !ok {
- log.Printf("Service: %s not ok", svc.cfg.Name)
+ log.Printf("Service: %s not ok", svc.cfg.ID)
return
}
reportq <- svc.Scan()
diff --git a/service_config.go b/service_config.go
index 9f9e0fc..b1261fa 100644
--- a/service_config.go
+++ b/service_config.go
@@ -26,24 +26,27 @@ const defInterval = 10 * time.Second
type ServiceConfig struct {
scanURL *url.URL
- Name string
+ // ID of service, derived from config file without ".cfg" extension.
+ ID string
+
+ Name string `ini:"service::name"`
// The Address of service, using scheme based, for example
// - http://example.com/health for HTTP service,
// - tcp://127.0.0.1:22 for TCP service,
// - udp://127.0.0.1:53 for UDP service.
- Address string `ini:"::address"`
+ Address string `ini:"service::address"`
// HTTPMethod define HTTP method to be used to scan the HTTP service.
// Valid value is either DELETE, GET, HEAD, PATCH, POST, or PUT.
- HTTPMethod string `ini:"::method"`
+ HTTPMethod string `ini:"service::method"`
// Timeout for connecting and reading response from service.
- Timeout string `ini:"::timeout"`
+ Timeout string `ini:"service::timeout"`
// Interval between each scan.
// The minimum value is 60 seconds or 1 minute.
- Interval string `ini:"::interval"`
+ Interval string `ini:"service::interval"`
timeout time.Duration
interval time.Duration
diff --git a/service_report.go b/service_report.go
index 492e368..0959522 100644
--- a/service_report.go
+++ b/service_report.go
@@ -23,19 +23,19 @@ type ServiceReport struct {
writer *csv.Writer
logPath string
- Name string
+ ID string
Last ScanReport
History []ScanReport
}
-func NewServiceReport(cfg ServerConfig, name string) (
+func NewServiceReport(id string, cfg ServerConfig) (
svcReport *ServiceReport, err error,
) {
var logp = `NewServiceReport`
svcReport = &ServiceReport{
- logPath: filepath.Join(cfg.logServiceDir, name+`.log`),
- Name: name,
+ logPath: filepath.Join(cfg.logServiceDir, id+`.log`),
+ ID: id,
History: make([]ScanReport, 0, historyMax),
}
diff --git a/service_report_test.go b/service_report_test.go
index c61f543..350c7f3 100644
--- a/service_report_test.go
+++ b/service_report_test.go
@@ -21,7 +21,7 @@ func TestServiceReport_Store(t *testing.T) {
}
var svcReport *ServiceReport
- svcReport, err = NewServiceReport(serverCfg, `testStore`)
+ svcReport, err = NewServiceReport(`testStore`, serverCfg)
if err != nil {
t.Fatal(err)
}
diff --git a/service_test.go b/service_test.go
index aeb1562..ba31192 100644
--- a/service_test.go
+++ b/service_test.go
@@ -19,11 +19,11 @@ func TestServiceStart_HTTP(t *testing.T) {
var listCase = []testCase{{
cfg: lilin.ServiceConfig{
- Name: `http_service`,
+ ID: `http_service`,
Address: `http://` + dummyHTTPAddress + `/health`,
},
expReport: lilin.ScanReport{
- Name: `http_service`,
+ ID: `http_service`,
At: internal.Now(),
Success: true,
},
diff --git a/testdata/etc/lilin/service.d/http.cfg b/testdata/etc/lilin/service.d/http.cfg
index 8b4b402..4f446d1 100644
--- a/testdata/etc/lilin/service.d/http.cfg
+++ b/testdata/etc/lilin/service.d/http.cfg
@@ -1,7 +1,8 @@
## SPDX-FileCopyrightText: 2025 M. Shulhan <ms@kilabit.info>
## SPDX-License-Identifier: GPL-3.0-only
-[service "example http"]
+[service]
+name = example http
method = GET
address = http://127.0.0.1:6121/health
timeout = 5s
diff --git a/testdata/etc/lilin/service.d/tcp.cfg b/testdata/etc/lilin/service.d/tcp.cfg
index e5ed060..2a8d4e4 100644
--- a/testdata/etc/lilin/service.d/tcp.cfg
+++ b/testdata/etc/lilin/service.d/tcp.cfg
@@ -1,6 +1,7 @@
## SPDX-FileCopyrightText: 2025 M. Shulhan <ms@kilabit.info>
## SPDX-License-Identifier: GPL-3.0-only
-[service "example tcp"]
+[service]
+name = example tcp
address = tcp://127.0.0.1:6122
timeout = 5s
diff --git a/testdata/etc/lilin/service.d/udp.cfg b/testdata/etc/lilin/service.d/udp.cfg
index e7ff083..d1e8891 100644
--- a/testdata/etc/lilin/service.d/udp.cfg
+++ b/testdata/etc/lilin/service.d/udp.cfg
@@ -1,6 +1,7 @@
## SPDX-FileCopyrightText: 2025 M. Shulhan <ms@kilabit.info>
## SPDX-License-Identifier: GPL-3.0-only
-[service "example udp"]
+[service]
+name = example udp
address = udp://127.0.0.1:6123
timeout = 5s
diff --git a/worker.go b/worker.go
index fe1c7f9..004e6e2 100644
--- a/worker.go
+++ b/worker.go
@@ -35,8 +35,8 @@ func newWorker(cfg ServerConfig) (wrk *worker, err error) {
wrk.Reports = Reports{
Services: make(map[string]*ServiceReport, len(wrk.Services)),
}
- for name := range wrk.Services {
- wrk.Reports.Services[name], err = NewServiceReport(cfg, name)
+ for id := range wrk.Services {
+ wrk.Reports.Services[id], err = NewServiceReport(id, cfg)
if err != nil {
return nil, err
}
@@ -56,22 +56,22 @@ func (wrk *worker) loadServiceDir(cfg ServerConfig) (err error) {
return err
}
- var svcConfigs serviceConfigs
var de os.DirEntry
+ var extCfg = `.cfg`
for _, de = range listde {
if de.IsDir() {
continue
}
- var name = de.Name()
- if name[0] == '.' {
+ var fileName = de.Name()
+ if fileName[0] == '.' {
// Exclude hidden file.
continue
}
- if !strings.HasSuffix(name, `.cfg`) {
+ if !strings.HasSuffix(fileName, extCfg) {
continue
}
- var serviceCfg = filepath.Join(cfg.configServiceDir, name)
+ var serviceCfg = filepath.Join(cfg.configServiceDir, fileName)
var rawcfg []byte
rawcfg, err = os.ReadFile(serviceCfg)
@@ -79,19 +79,19 @@ func (wrk *worker) loadServiceDir(cfg ServerConfig) (err error) {
return err
}
- err = ini.Unmarshal(rawcfg, &svcConfigs)
+ var svcConfig ServiceConfig
+ err = ini.Unmarshal(rawcfg, &svcConfig)
if err != nil {
return err
}
- }
- var svc *Service
- for name, svcConfig := range svcConfigs.Config {
- svcConfig.Name = name
+ svcConfig.ID = strings.TrimSuffix(fileName, extCfg)
+
+ var svc *Service
svc, err = NewService(svcConfig)
if err != nil {
return err
}
- wrk.Services[name] = svc
+ wrk.Services[svcConfig.ID] = svc
}
return nil
}
diff --git a/worker_test.go b/worker_test.go
index 8863542..c00339c 100644
--- a/worker_test.go
+++ b/worker_test.go
@@ -33,13 +33,14 @@ func TestNewWorker(t *testing.T) {
BaseDir: `testdata/`,
},
expServices: map[string]*Service{
- `example http`: &Service{
+ `http`: &Service{
cfg: ServiceConfig{
scanURL: &url.URL{
Scheme: `http`,
Host: `127.0.0.1:6121`,
Path: `/health`,
},
+ ID: `http`,
Name: `example http`,
HTTPMethod: `GET`,
Address: `http://127.0.0.1:6121/health`,
@@ -48,12 +49,13 @@ func TestNewWorker(t *testing.T) {
interval: defInterval,
},
},
- `example tcp`: &Service{
+ `tcp`: &Service{
cfg: ServiceConfig{
scanURL: &url.URL{
Scheme: `tcp`,
Host: `127.0.0.1:6122`,
},
+ ID: `tcp`,
Name: `example tcp`,
Address: `tcp://127.0.0.1:6122`,
Timeout: `5s`,
@@ -61,12 +63,13 @@ func TestNewWorker(t *testing.T) {
interval: defInterval,
},
},
- `example udp`: &Service{
+ `udp`: &Service{
cfg: ServiceConfig{
scanURL: &url.URL{
Scheme: `udp`,
Host: `127.0.0.1:6123`,
},
+ ID: `udp`,
Name: `example udp`,
Address: `udp://127.0.0.1:6123`,
Timeout: `5s`,