diff --git a/README.MD b/README.MD index 9112536a..f0bb2c20 100644 --- a/README.MD +++ b/README.MD @@ -61,7 +61,6 @@ curl http://localhost:8080/health
-======= ------------------------------------- ## 启动 @@ -136,6 +135,7 @@ feiyu563/prometheus-alert:latest - 增加告警语音播报插件。 - 增加支持飞书机器人应用。 - 增加告警组,可以将通知媒介写到告警组里面,便于配置和修改。 + - 增加热加载配置接口 ------------------------------------- @@ -198,6 +198,7 @@ feiyu563/prometheus-alert:latest * [语音播报](doc/readme/conf-voice.md) * [飞书机器人应用](doc/readme/conf-feishuapp.md) * [告警组配置](doc/readme/alertgroup.md) + * [热加载配置](doc/readme/hotreload.md) * [【告警系统接入PrometheusAlert配置】](doc/readme/system.md) * [Prometheus 接入配置](doc/readme/system-prometheus.md) diff --git a/conf/app-example.conf b/conf/app-example.conf index 183f8c50..fe8307a3 100644 --- a/conf/app-example.conf +++ b/conf/app-example.conf @@ -59,6 +59,8 @@ to_es_url=http://localhost:9200 # to_es_pwd=password # 长连接最大空闲数 maxIdleConns=100 +# 热更新配置文件 +open-hotreload=0 #---------------------↓webhook----------------------- #是否开启钉钉告警通道,可同时开始多个通道0为关闭,1为开启 diff --git a/controllers/hotreload.go b/controllers/hotreload.go new file mode 100644 index 00000000..d75f0e97 --- /dev/null +++ b/controllers/hotreload.go @@ -0,0 +1,36 @@ +package controllers + +import ( + "github.com/astaxie/beego" + "github.com/astaxie/beego/logs" +) + +type ConfigController struct { + beego.Controller +} + +var configPath = "conf/app.conf" + +// hot reload config +func (c *ConfigController) Reload() { + logsign := "[" + LogsSign() + "]" + if open := beego.AppConfig.String("open-hotreload"); open != "1" { + logs.Info(logsign, "[hotreload]", "open-hotreload is 0.") + c.Ctx.WriteString("open-hotreload is disable.\n") + return + } + + // apply config file + err := beego.LoadAppConfig("ini", configPath) + if err != nil { + logs.Error(logsign, "[hotreload]", err.Error()) + c.Ctx.ResponseWriter.WriteHeader(500) + c.Ctx.WriteString("Error reloading config: " + err.Error() + "\n") + return + } + + logs.Info(logsign, "[hotreload]", "Config reloaded successfully.") + c.Ctx.WriteString("Config reloaded successfully.\n") +} + +// Add auth middleware or not? diff --git a/doc/readme/hotreload.md b/doc/readme/hotreload.md new file mode 100644 index 00000000..30cb67fd --- /dev/null +++ b/doc/readme/hotreload.md @@ -0,0 +1,33 @@ +# 热加载配置接口文档 + +热加载配置接口,类似于 Prometheus 的热加载配置接口。 + +配置文件中的配置项为 `open-hotreload`,默认关闭。可以将其设置为 1 来开启这个功能。暂时没有给接口添加认证。 + +> **请注意:** 如果启动之前没有打开热加载,那么在启动程序之后再开启热加载是不生效的(因为内存中的热加载配置还是关闭的,因此程序还是判断未启用热加载),需要重新启动程序。
+> **考虑:** 是否需要给这个接口添加认证? + +
+ +热加载接口原理:使用 `beego.LoadAppConfig("ini", "conf/app.conf")` 来加载配置。响应中会返回成功还是错误的相关信息。 + +
+
+ +## 使用方法 + +使用方法: + +1. 配置文件中开启热加载 +2. 启动程序 +3. 修改配置 +4. 热加载配置 + +```bash +# conf/app.conf +# 开启热加载 +open-hotreload=1 + +# 热加载接口 +curl -X POST http://PrometheusAlert:8080/-/reload +``` diff --git a/routers/router.go b/routers/router.go index df26eb92..da701c41 100644 --- a/routers/router.go +++ b/routers/router.go @@ -51,9 +51,9 @@ func init() { beego.Router("/gitlab/weixin", &controllers.GitlabController{}, "post:GitlabWeixin") beego.Router("/gitlab/dingding", &controllers.GitlabController{}, "post:GitlabDingding") beego.Router("/gitlab/feishu", &controllers.GitlabController{}, "post:GitlabFeishu") - // Todo - // Email - // Feishu + + // hotreload + beego.Router("/-/reload", &controllers.ConfigController{}, "post:Reload") //已经下线的接口 //beego.Router("/prometheus/dingding", &controllers.PrometheusController{},"post:PrometheusRouter")