-
Notifications
You must be signed in to change notification settings - Fork 1
/
esalert.go
80 lines (75 loc) · 1.9 KB
/
esalert.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package main
import (
"config"
"rule"
"mylog"
"os"
"flag"
"api"
"os/signal"
"io/ioutil"
"fmt"
"util"
"plugin"
"storage"
"alert"
)
var (
configDir string
rulesName string
configName string
pluginDir string
)
func main() {
flag.StringVar(&configDir, "config", "./sample", "配置文件所在目录")
flag.StringVar(&rulesName, "rules_name", "rules", "rule配置文件夹的名字")
flag.StringVar(&configName, "config_name", "config.yml", "配置文件的名字")
flag.StringVar(&pluginDir, "plugin", "./plugin", "插件文件所在目录")
config, err := config.IntiConfig(config.ConfigDirInfo{Dir: configDir, RuleName: rulesName, ConfigName: configName})
checkErr(err)
err = rule.Run(*config)
checkErr(err)
//checkErr(loadPlugin(pluginDir))
// 运行api服务
api.Start(config.ApiInfo)
mylog.Info("start success")
// 保证主进程在接收到退出信号前不退出
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, os.Kill)
s := <-c
mylog.Info("Got signal:", s)
}
func checkErr(err error) {
if err != nil {
mylog.Error("解析配置文件出错, ", err)
os.Exit(1)
}
}
func loadPlugin(dir string) error {
pluginDir, err := ioutil.ReadDir(dir)
if err != nil {
return fmt.Errorf("打开插件文件夹"+dir+"夹出错, err : %s", err.Error())
}
for _, pluginFile := range pluginDir {
if !pluginFile.IsDir() {
pluginFileName := util.BuildFileDir(dir, pluginFile.Name())
plugin, err := plugin.Open(pluginFileName)
if err != nil {
return fmt.Errorf("加载插件"+pluginFileName+"出错, err : %s", err.Error())
}
storagePlugin, err := plugin.Lookup("Storage")
if err == nil {
if sp, ok := storagePlugin.(storage.StorageCreater); ok {
storage.Register(sp)
}
}
alertPlugin, err := plugin.Lookup("Alert")
if err == nil {
if ap, ok := alertPlugin.(alert.AlerterCreater); ok {
alert.Register(ap)
}
}
}
}
return nil
}