aboutsummaryrefslogtreecommitdiff
path: root/worker.go
diff options
context:
space:
mode:
Diffstat (limited to 'worker.go')
-rw-r--r--worker.go67
1 files changed, 60 insertions, 7 deletions
diff --git a/worker.go b/worker.go
index d8916b4..bb061e9 100644
--- a/worker.go
+++ b/worker.go
@@ -5,29 +5,82 @@ package lilin
import (
"maps"
+ "os"
+ "path/filepath"
"slices"
+ "strings"
"sync"
+
+ "git.sr.ht/~shulhan/pakakeh.go/lib/ini"
)
// worker contains the report of all services.
type worker struct {
- // Internal service status with key is service name.
- services map[string]Service
+ // Internal service status, where key is service name.
+ Services map[string]*Service `ini:"service"`
sync.Mutex
}
-func newWorker() (wrk *worker) {
- return &worker{
- services: make(map[string]Service),
+func newWorker(configDir string) (wrk *worker, err error) {
+ wrk = &worker{
+ Services: make(map[string]*Service),
+ }
+ err = wrk.loadServiceDir(configDir)
+ if err != nil {
+ return nil, err
+ }
+ return wrk, nil
+}
+
+// loadServiceDir Load all the service configurations.
+func (wrk *worker) loadServiceDir(configDir string) (err error) {
+ var serviceDir = filepath.Join(configDir, `service.d`)
+
+ var listde []os.DirEntry
+ listde, err = os.ReadDir(serviceDir)
+ if err != nil {
+ return err
+ }
+
+ var de os.DirEntry
+ for _, de = range listde {
+ if de.IsDir() {
+ continue
+ }
+ var name = de.Name()
+ if name[0] == '.' {
+ // Exclude hidden file.
+ continue
+ }
+ if !strings.HasSuffix(name, `.cfg`) {
+ continue
+ }
+
+ var serviceCfg = filepath.Join(serviceDir, name)
+ var rawcfg []byte
+
+ rawcfg, err = os.ReadFile(serviceCfg)
+ if err != nil {
+ return err
+ }
+
+ err = ini.Unmarshal(rawcfg, wrk)
+ if err != nil {
+ return err
+ }
+ }
+ for name, service := range wrk.Services {
+ service.Name = name
}
+ return nil
}
// summary return all services status ordered by name.
func (wrk *worker) summary() (list []Service) {
wrk.Lock()
- var keys = slices.Sorted(maps.Keys(wrk.services))
+ var keys = slices.Sorted(maps.Keys(wrk.Services))
for _, name := range keys {
- list = append(list, wrk.services[name])
+ list = append(list, *wrk.Services[name])
}
wrk.Unlock()
return list