forked from saltbo/zpan
-
Notifications
You must be signed in to change notification settings - Fork 0
/
option.go
59 lines (47 loc) · 1.06 KB
/
option.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
package service
import (
"log"
"github.com/saltbo/zpan/internal/app/dao"
"github.com/saltbo/zpan/internal/app/model"
)
type BootFunc func(opts model.Opts) error
var optBoots = map[string]BootFunc{}
func OptRegister(name string, bf BootFunc) {
optBoots[name] = bf
if !dao.Ready() {
return // 如果数据库还没装好则先跳过
}
dOpt := dao.NewOption()
opts, err := dOpt.Get(name)
if err != nil {
dOpt.Set(name, map[string]interface{}{})
return
}
// 检查boot参数是否存在
// 如果不存在则直接跳过
if len(opts) == 0 {
log.Printf("WARN: skip boot for the component %s", name)
return
}
// 如果存在则执行一次BootFunc
if err := bf(opts); err != nil {
log.Printf("ERR: opt-%s boot failed: %s\n", name, err)
return
}
}
type Option struct {
dOption *dao.Option
}
func NewOption() *Option {
return &Option{
dOption: dao.NewOption(),
}
}
func (o *Option) Update(name string, p model.Opts) error {
if boot, ok := optBoots[name]; ok {
if err := boot(p); err != nil {
return err
}
}
return o.dOption.Set(name, p)
}