1 Star 0 Fork 0

陈天/taibak

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
setting.go 6.06 KB
一键复制 编辑 原始数据 按行查看 历史
陈天 提交于 2022-04-30 21:31 . [*]整合后的第一次合并
package models
import (
"encoding/json"
)
type Setting struct {
Id int `xorm:"int pk autoincr"`
Code string `xorm:"varchar(32) notnull"`
Key string `xorm:"varchar(64) notnull"`
Value string `xorm:"varchar(4096) notnull default '' "`
}
const slackTemplate = `
任务ID: {{.TaskId}}
任务名称: {{.TaskName}}
状态: {{.Status}}
执行结果: {{.Result}}
`
const emailTemplate = `
任务ID: {{.TaskId}}
任务名称: {{.TaskName}}
状态: {{.Status}}
执行结果: {{.Result}}
`
const webhookTemplate = `
{
"task_id": "{{.TaskId}}",
"task_name": "{{.TaskName}}",
"status": "{{.Status}}",
"result": "{{.Result}}"
}
`
const (
SlackCode = "slack"
SlackUrlKey = "url"
SlackTemplateKey = "template"
SlackChannelKey = "channel"
)
const (
MailCode = "mail"
MailTemplateKey = "template"
MailServerKey = "server"
MailUserKey = "user"
)
const (
WebhookCode = "webhook"
WebhookTemplateKey = "template"
WebhookUrlKey = "url"
)
// 初始化基本字段 邮件、slack等
func (setting *Setting) InitBasicField() {
setting.Code = SlackCode
setting.Key = SlackUrlKey
setting.Value = ""
Db.Insert(setting)
setting.Id = 0
setting.Code = SlackCode
setting.Key = SlackTemplateKey
setting.Value = slackTemplate
Db.Insert(setting)
setting.Id = 0
setting.Code = MailCode
setting.Key = MailServerKey
setting.Value = ""
Db.Insert(setting)
setting.Id = 0
setting.Code = MailCode
setting.Key = MailTemplateKey
setting.Value = emailTemplate
Db.Insert(setting)
setting.Id = 0
setting.Code = WebhookCode
setting.Key = WebhookTemplateKey
setting.Value = webhookTemplate
Db.Insert(setting)
setting.Id = 0
setting.Code = WebhookCode
setting.Key = WebhookUrlKey
setting.Value = ""
Db.Insert(setting)
}
// region slack配置
type Slack struct {
Url string `json:"url"`
Channels []Channel `json:"channels"`
Template string `json:"template"`
}
type Channel struct {
Id int `json:"id"`
Name string `json:"name"`
}
func (setting *Setting) Slack() (Slack, error) {
list := make([]Setting, 0)
err := Db.Where("code = ?", SlackCode).Find(&list)
slack := Slack{}
if err != nil {
return slack, err
}
setting.formatSlack(list, &slack)
return slack, err
}
func (setting *Setting) formatSlack(list []Setting, slack *Slack) {
for _, v := range list {
switch v.Key {
case SlackUrlKey:
slack.Url = v.Value
case SlackTemplateKey:
slack.Template = v.Value
default:
slack.Channels = append(slack.Channels, Channel{
v.Id, v.Value,
})
}
}
}
func (setting *Setting) UpdateSlack(url, template string) error {
setting.Value = url
Db.Cols("value").Update(setting, Setting{Code: SlackCode, Key: SlackUrlKey})
setting.Value = template
Db.Cols("value").Update(setting, Setting{Code: SlackCode, Key: SlackTemplateKey})
return nil
}
// 创建slack渠道
func (setting *Setting) CreateChannel(channel string) (int64, error) {
setting.Code = SlackCode
setting.Key = SlackChannelKey
setting.Value = channel
return Db.Insert(setting)
}
func (setting *Setting) IsChannelExist(channel string) bool {
setting.Code = SlackCode
setting.Key = SlackChannelKey
setting.Value = channel
count, _ := Db.Count(setting)
return count > 0
}
// 删除slack渠道
func (setting *Setting) RemoveChannel(id int) (int64, error) {
setting.Code = SlackCode
setting.Key = SlackChannelKey
setting.Id = id
return Db.Delete(setting)
}
// endregion
type Mail struct {
Host string `json:"host"`
Port int `json:"port"`
User string `json:"user"`
Password string `json:"password"`
MailUsers []MailUser `json:"mail_users"`
Template string `json:"template"`
}
type MailUser struct {
Id int `json:"id"`
Username string `json:"username"`
Email string `json:"email"`
}
// region 邮件配置
func (setting *Setting) Mail() (Mail, error) {
list := make([]Setting, 0)
err := Db.Where("code = ?", MailCode).Find(&list)
mail := Mail{MailUsers: make([]MailUser, 0)}
if err != nil {
return mail, err
}
setting.formatMail(list, &mail)
return mail, err
}
func (setting *Setting) formatMail(list []Setting, mail *Mail) {
mailUser := MailUser{}
for _, v := range list {
switch v.Key {
case MailServerKey:
json.Unmarshal([]byte(v.Value), mail)
case MailUserKey:
json.Unmarshal([]byte(v.Value), &mailUser)
mailUser.Id = v.Id
mail.MailUsers = append(mail.MailUsers, mailUser)
case MailTemplateKey:
mail.Template = v.Value
}
}
}
func (setting *Setting) UpdateMail(config, template string) error {
setting.Value = config
Db.Cols("value").Update(setting, Setting{Code: MailCode, Key: MailServerKey})
setting.Value = template
Db.Cols("value").Update(setting, Setting{Code: MailCode, Key: MailTemplateKey})
return nil
}
func (setting *Setting) CreateMailUser(username, email string) (int64, error) {
setting.Code = MailCode
setting.Key = MailUserKey
mailUser := MailUser{0, username, email}
jsonByte, err := json.Marshal(mailUser)
if err != nil {
return 0, err
}
setting.Value = string(jsonByte)
return Db.Insert(setting)
}
func (setting *Setting) RemoveMailUser(id int) (int64, error) {
setting.Code = MailCode
setting.Key = MailUserKey
setting.Id = id
return Db.Delete(setting)
}
type WebHook struct {
Url string `json:"url"`
Template string `json:"template"`
}
func (setting *Setting) Webhook() (WebHook, error) {
list := make([]Setting, 0)
err := Db.Where("code = ?", WebhookCode).Find(&list)
webHook := WebHook{}
if err != nil {
return webHook, err
}
setting.formatWebhook(list, &webHook)
return webHook, err
}
func (setting *Setting) formatWebhook(list []Setting, webHook *WebHook) {
for _, v := range list {
switch v.Key {
case WebhookUrlKey:
webHook.Url = v.Value
case WebhookTemplateKey:
webHook.Template = v.Value
}
}
}
func (setting *Setting) UpdateWebHook(url, template string) error {
setting.Value = url
Db.Cols("value").Update(setting, Setting{Code: WebhookCode, Key: WebhookUrlKey})
setting.Value = template
Db.Cols("value").Update(setting, Setting{Code: WebhookCode, Key: WebhookTemplateKey})
return nil
}
// endregion
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/hakwolf/taibak.git
git@gitee.com:hakwolf/taibak.git
hakwolf
taibak
taibak
000f062082a1

搜索帮助