UlricQin 4 years ago
commit a11813f4b2

@ -139,4 +139,15 @@
- 使用etc/nginx.conf替换原来的nginx.conf
- n9e-prober替换旧的n9e-prober
- n9e-agentd替换n9e-agent
- n9e-server替换n9e-rdb、n9e-ams、n9e-job、n9e-monapi、n9e-transfer、n9e-judge
- n9e-server替换n9e-rdb、n9e-ams、n9e-job、n9e-monapi、n9e-transfer、n9e-judge
4.0.1
升级内容:
- 修复消息通知的问题
重新安装:见 https://n9e.didiyun.com/docs/install/binary/
升级方法:
- 将 *.tpl 文件放到 etc/tpl 下
- 替换etc/server.yml
- 替换n9e-server

@ -1,7 +1,7 @@
#!/bin/bash
# release version
version=4.0.0
version=4.0.1
CWD=$(cd $(dirname $0)/; pwd)
cd $CWD
@ -206,9 +206,10 @@ exec()
params=${@:2}
if [ ${#2} -gt 0 ]; then
for param in $params
for mod in $params
do
$1 $param
mod=${mod#n9e-}
$1 $mod
if [ "x${mod}" = "xall" ]; then
break
fi

@ -43,8 +43,8 @@ report:
fields:
cpu: cat /proc/cpuinfo | grep processor | wc -l
mem: cat /proc/meminfo | grep MemTotal | awk '{printf "%dGi", $2/1024/1024}'
disk: df -m | grep '/dev/' | grep -v '/var/lib' | grep -v tmpfs | awk '{sum += $2};END{printf "%dGi", sum/1024}'
mem: cat /proc/meminfo | grep MemTotal | awk '{printf "%.1fGi", $2/1024/1024}'
disk: df -m | grep '/dev/' | grep -v '/var/lib' | grep -v tmpfs | awk '{sum += $2};END{printf "%.1fGi", sum/1024}'
sys:
# timeout in ms

@ -61,33 +61,13 @@ http {
gzip_vary off;
gzip_disable "MSIE [1-6]\.";
upstream n9e.rdb {
server 127.0.0.1:8000;
keepalive 60;
}
upstream n9e.ams {
server 127.0.0.1:8000;
keepalive 60;
}
upstream n9e.job {
server 127.0.0.1:8000;
keepalive 60;
}
upstream n9e.monapi {
server 127.0.0.1:8000;
keepalive 60;
}
upstream n9e.transfer {
upstream n9e.server {
server 127.0.0.1:8000;
keepalive 60;
}
upstream n9e.index {
server 127.0.0.1:8000;
server 127.0.0.1:8012;
keepalive 60;
}
@ -112,27 +92,27 @@ http {
}
location /api/rdb {
proxy_pass http://n9e.rdb;
proxy_pass http://n9e.server;
}
location /api/ams {
proxy_pass http://n9e.ams;
proxy_pass http://n9e.server;
}
location /api/job {
proxy_pass http://n9e.job;
proxy_pass http://n9e.server;
}
location /api/mon {
proxy_pass http://n9e.monapi;
proxy_pass http://n9e.server;
}
location /api/index {
proxy_pass http://n9e.index;
proxy_pass http://n9e.server;
}
location /api/transfer {
proxy_pass http://n9e.transfer;
proxy_pass http://n9e.server;
}
}

@ -19,6 +19,7 @@ http:
tokens:
- rdb-builtin-token
- ams-builtin-token
redis:
# as queue
@ -120,9 +121,13 @@ transfer:
seriesLimit: 0
docsLimit: 0
daysLimit: 7 # max query time
# https://m3db.github.io/m3/m3db/architecture/consistencylevels/
writeConsistencyLevel: "majority" # one|majority|all
readConsistencyLevel: "unstrict_majority" # one|unstrict_majority|majority|all
writeTimeout: 5s
fetchTimeout: 5s
connectTimeout: 5s
config:
service:
# KV environment, zone, and service from which to write/read KV data (placement
@ -195,4 +200,4 @@ judge:
wechat:
corp_id: "xxxxxxxxxxxxx"
agent_id: 1000000
secret: "xxxxxxxxxxxxxxxxx"
secret: "xxxxxxxxxxxxxxxxx"

@ -17,5 +17,8 @@ Restart=always
RestartSec=1
StartLimitInterval=0
# LimitNOFILE=60000
# LimitNPROC=10000
[Install]
WantedBy=multi-user.target

@ -58,7 +58,7 @@ func getConfigFile(name, ext string) (string, error) {
}
func init() {
filename, err := getConfigFile("login-code-sms", "tpl")
filename, err := getConfigFile("tpl/login-code-sms", "tpl")
if err != nil {
log.Fatal(err)
}
@ -68,7 +68,7 @@ func init() {
log.Fatalf("open %s err: %s", filename, err)
}
filename, err = getConfigFile("login-code-email", "tpl")
filename, err = getConfigFile("tpl/login-code-email", "tpl")
if err != nil {
log.Fatal(err)
}
@ -77,7 +77,7 @@ func init() {
log.Fatalf("open %s err: %s", filename, err)
}
filename, err = getConfigFile("password-changed-email", "tpl")
filename, err = getConfigFile("tpl/password-changed-email", "tpl")
if err != nil {
log.Fatal(err)
}

@ -54,6 +54,7 @@ func DoNotify(isUpgrade bool, events ...*models.Event) {
notifyTypes := config.Config.Monapi.Notify[prio]
for i := 0; i < len(notifyTypes); i++ {
var err error
switch notifyTypes[i] {
case "voice":
if events[0].EventType == models.ALERT {
@ -62,34 +63,36 @@ func DoNotify(isUpgrade bool, events ...*models.Event) {
tos = append(tos, users[j].Phone)
}
send(slice.Set(tos), events[0].Sname, "", "voice")
err = send(slice.Set(tos), events[0].Sname, "", "voice")
}
case "sms":
tos := []string{}
for j := 0; j < len(users); j++ {
tos = append(tos, users[j].Phone)
}
send(slice.Set(tos), content, "", "sms")
err = send(slice.Set(tos), content, "", "sms")
case "mail":
tos := []string{}
for j := 0; j < len(users); j++ {
tos = append(tos, users[j].Email)
}
if err := send(slice.Set(tos), mailContent, subject, "mail"); err == nil {
logger.Infof("sendMail: %+v", events[0])
}
err = send(slice.Set(tos), mailContent, subject, "mail")
case "im":
tos := []string{}
for j := 0; j < len(users); j++ {
tos = append(tos, users[j].Im)
}
send(slice.Set(tos), content, "", "im")
err = send(slice.Set(tos), content, "", "im")
default:
logger.Errorf("not support %s to send notify, events: %+v", notifyTypes[i], events)
}
if err != nil {
logger.Errorf("send %s users:%+v content:%s err:%v", notifyTypes[i], users, content, err)
}
}
}
@ -179,7 +182,7 @@ func genContent(isUpgrade bool, events []*models.Event) (string, string) {
}
// 生成告警邮件
fp := path.Join(file.SelfDir(), "etc", "mail.tpl")
fp := path.Join(file.SelfDir(), "etc", "tpl", "mail.tpl")
t, err := template.ParseFiles(fp)
if err != nil {
logger.Errorf("InternalServerError: cannot parse %s %v", fp, err)
@ -196,7 +199,7 @@ func genContent(isUpgrade bool, events []*models.Event) (string, string) {
}
// 生成告警短信短信和IM复用一个内容模板
fp = path.Join(file.SelfDir(), "etc", "sms.tpl")
fp = path.Join(file.SelfDir(), "etc", "tpl", "sms.tpl")
t, err = template.New("sms.tpl").Funcs(template.FuncMap{
"unescaped": func(str string) interface{} { return template.HTML(str) },
"urlconvert": func(str string) interface{} { return template.URL(str) },
@ -411,13 +414,14 @@ func send(tos []string, content, subject, notifyType string) error {
return fmt.Errorf("tos is empty")
}
message.Tos = tos
message.Content = strings.TrimSpace(content)
if message.Content == "" {
return fmt.Errorf("content is blank")
}
if notifyType == "email" {
message.Subject = strings.TrimSpace(message.Subject)
if notifyType == "mail" {
message.Subject = strings.TrimSpace(subject)
if message.Subject == "" {
return fmt.Errorf("subject is blank")
}
@ -428,12 +432,14 @@ func send(tos []string, content, subject, notifyType string) error {
redisc.Write(&message, cron.VOICE_QUEUE_NAME)
case "sms":
redisc.Write(&message, cron.SMS_QUEUE_NAME)
case "email":
case "mail":
redisc.Write(&message, cron.MAIL_QUEUE_NAME)
case "im":
redisc.Write(&message, cron.IM_QUEUE_NAME)
}
logger.Infof("write %s message:%+v", message, notifyType)
return nil
}

Loading…
Cancel
Save