forked from cybozu-go/kkok
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ctor.go
65 lines (55 loc) · 1.45 KB
/
ctor.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
60
61
62
63
64
65
package route
import (
"time"
"github.com/cybozu-go/kkok"
"github.com/cybozu-go/kkok/util"
"github.com/pkg/errors"
)
const (
filterType = "route"
defaultMuteSeconds = 60
)
func ctor(id string, params map[string]interface{}) (kkok.Filter, error) {
routes, err := util.GetStringSlice("routes", params)
if err != nil && !util.IsNotFound(err) {
return nil, errors.Wrap(err, "route: routes")
}
muteRoutes, err := util.GetStringSlice("mute_routes", params)
if err != nil && !util.IsNotFound(err) {
return nil, errors.Wrap(err, "route: mute_routes")
}
replace, err := util.GetBool("replace", params)
if err != nil && !util.IsNotFound(err) {
return nil, errors.Wrap(err, "route: replace")
}
autoMute, err := util.GetBool("auto_mute", params)
if err != nil && !util.IsNotFound(err) {
return nil, errors.Wrap(err, "route: auto_mute")
}
muteSeconds, err := util.GetInt("mute_seconds", params)
switch {
case err == nil:
if muteSeconds <= 0 {
return nil, errors.New("route: invalid mute_seconds")
}
case util.IsNotFound(err):
muteSeconds = defaultMuteSeconds
default:
return nil, errors.Wrap(err, "route: mute_seconds")
}
f := &filter{
routes: routes,
replace: replace,
autoMute: autoMute,
muteDuration: time.Duration(muteSeconds) * time.Second,
muteRoutes: muteRoutes,
}
err = f.Init(id, params)
if err != nil {
return nil, err
}
return f, nil
}
func init() {
kkok.RegisterFilter(filterType, ctor)
}