mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-07 15:20:25 +08:00
删除不需要的文件
This commit is contained in:
@@ -1,82 +0,0 @@
|
|||||||
package recipients
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/utils"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/actions"
|
|
||||||
"regexp"
|
|
||||||
)
|
|
||||||
|
|
||||||
type CreatePopupAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *CreatePopupAction) Init() {
|
|
||||||
this.Nav("", "", "")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *CreatePopupAction) RunGet(params struct{}) {
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *CreatePopupAction) RunPost(params struct {
|
|
||||||
AdminId int64
|
|
||||||
InstanceId int64
|
|
||||||
User string
|
|
||||||
|
|
||||||
TelegramToken string
|
|
||||||
|
|
||||||
GroupIds string
|
|
||||||
Description string
|
|
||||||
|
|
||||||
TimeFromHour string
|
|
||||||
TimeFromMinute string
|
|
||||||
TimeFromSecond string
|
|
||||||
|
|
||||||
TimeToHour string
|
|
||||||
TimeToMinute string
|
|
||||||
TimeToSecond string
|
|
||||||
|
|
||||||
Must *actions.Must
|
|
||||||
CSRF *actionutils.CSRF
|
|
||||||
}) {
|
|
||||||
params.Must.
|
|
||||||
Field("adminId", params.AdminId).
|
|
||||||
Gt(0, "请选择系统用户").
|
|
||||||
Field("instanceId", params.InstanceId).
|
|
||||||
Gt(0, "请选择媒介")
|
|
||||||
|
|
||||||
groupIds := utils.SplitNumbers(params.GroupIds)
|
|
||||||
|
|
||||||
var digitReg = regexp.MustCompile(`^\d+$`)
|
|
||||||
|
|
||||||
var timeFrom = ""
|
|
||||||
if digitReg.MatchString(params.TimeFromHour) && digitReg.MatchString(params.TimeFromMinute) && digitReg.MatchString(params.TimeFromSecond) {
|
|
||||||
timeFrom = params.TimeFromHour + ":" + params.TimeFromMinute + ":" + params.TimeFromSecond
|
|
||||||
}
|
|
||||||
|
|
||||||
var timeTo = ""
|
|
||||||
if digitReg.MatchString(params.TimeToHour) && digitReg.MatchString(params.TimeToMinute) && digitReg.MatchString(params.TimeToSecond) {
|
|
||||||
timeTo = params.TimeToHour + ":" + params.TimeToMinute + ":" + params.TimeToSecond
|
|
||||||
}
|
|
||||||
|
|
||||||
resp, err := this.RPC().MessageRecipientRPC().CreateMessageRecipient(this.AdminContext(), &pb.CreateMessageRecipientRequest{
|
|
||||||
AdminId: params.AdminId,
|
|
||||||
MessageMediaInstanceId: params.InstanceId,
|
|
||||||
User: params.User,
|
|
||||||
MessageRecipientGroupIds: groupIds,
|
|
||||||
Description: params.Description,
|
|
||||||
TimeFrom: timeFrom,
|
|
||||||
TimeTo: timeTo,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
defer this.CreateLogInfo(codes.MessageRecipient_LogCreateMessageRecipient, resp.MessageRecipientId)
|
|
||||||
|
|
||||||
this.Success()
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
package recipients
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
)
|
|
||||||
|
|
||||||
type DeleteAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *DeleteAction) RunPost(params struct {
|
|
||||||
RecipientId int64
|
|
||||||
}) {
|
|
||||||
defer this.CreateLogInfo(codes.MessageRecipient_LogDeleteMessageRecipient, params.RecipientId)
|
|
||||||
|
|
||||||
_, err := this.RPC().MessageRecipientRPC().DeleteMessageRecipient(this.AdminContext(), &pb.DeleteMessageRecipientRequest{MessageRecipientId: params.RecipientId})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Success()
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
package groups
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/actions"
|
|
||||||
)
|
|
||||||
|
|
||||||
type CreatePopupAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *CreatePopupAction) Init() {
|
|
||||||
this.Nav("", "", "")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *CreatePopupAction) RunGet(params struct{}) {
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *CreatePopupAction) RunPost(params struct {
|
|
||||||
Name string
|
|
||||||
|
|
||||||
Must *actions.Must
|
|
||||||
CSRF *actionutils.CSRF
|
|
||||||
}) {
|
|
||||||
params.Must.
|
|
||||||
Field("name", params.Name).
|
|
||||||
Require("请输入分组名称")
|
|
||||||
|
|
||||||
_, err := this.RPC().MessageRecipientGroupRPC().CreateMessageRecipientGroup(this.AdminContext(), &pb.CreateMessageRecipientGroupRequest{Name: params.Name})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Success()
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
package groups
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
)
|
|
||||||
|
|
||||||
type DeleteAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *DeleteAction) RunPost(params struct {
|
|
||||||
GroupId int64
|
|
||||||
}) {
|
|
||||||
_, err := this.RPC().MessageRecipientGroupRPC().DeleteMessageRecipientGroup(this.AdminContext(), &pb.DeleteMessageRecipientGroupRequest{MessageRecipientGroupId: params.GroupId})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Success()
|
|
||||||
}
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
package groups
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
|
||||||
|
|
||||||
type IndexAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *IndexAction) Init() {
|
|
||||||
this.Nav("", "", "group")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *IndexAction) RunGet(params struct{}) {
|
|
||||||
groupsResp, err := this.RPC().MessageRecipientGroupRPC().FindAllEnabledMessageRecipientGroups(this.AdminContext(), &pb.FindAllEnabledMessageRecipientGroupsRequest{})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
groupMaps := []maps.Map{}
|
|
||||||
for _, group := range groupsResp.MessageRecipientGroups {
|
|
||||||
groupMaps = append(groupMaps, maps.Map{
|
|
||||||
"id": group.Id,
|
|
||||||
"name": group.Name,
|
|
||||||
"isOn": group.IsOn,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["groups"] = groupMaps
|
|
||||||
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
package groups
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/configloaders"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/helpers"
|
|
||||||
"github.com/iwind/TeaGo"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
TeaGo.BeforeStart(func(server *TeaGo.Server) {
|
|
||||||
server.
|
|
||||||
Helper(helpers.NewUserMustAuth(configloaders.AdminModuleCodeAdmin)).
|
|
||||||
Data("teaMenu", "admins").
|
|
||||||
Data("teaSubMenu", "recipients").
|
|
||||||
Prefix("/admins/recipients/groups").
|
|
||||||
Get("", new(IndexAction)).
|
|
||||||
GetPost("/createPopup", new(CreatePopupAction)).
|
|
||||||
GetPost("/updatePopup", new(UpdatePopupAction)).
|
|
||||||
Post("/delete", new(DeleteAction)).
|
|
||||||
Get("/selectPopup", new(SelectPopupAction)).
|
|
||||||
EndAll()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
package groups
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/utils"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/lists"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
|
||||||
|
|
||||||
type SelectPopupAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *SelectPopupAction) RunGet(params struct {
|
|
||||||
GroupIds string
|
|
||||||
}) {
|
|
||||||
selectedGroupIds := utils.SplitNumbers(params.GroupIds)
|
|
||||||
|
|
||||||
groupsResp, err := this.RPC().MessageRecipientGroupRPC().FindAllEnabledMessageRecipientGroups(this.AdminContext(), &pb.FindAllEnabledMessageRecipientGroupsRequest{})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
groupMaps := []maps.Map{}
|
|
||||||
for _, group := range groupsResp.MessageRecipientGroups {
|
|
||||||
if lists.ContainsInt64(selectedGroupIds, group.Id) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
groupMaps = append(groupMaps, maps.Map{
|
|
||||||
"id": group.Id,
|
|
||||||
"name": group.Name,
|
|
||||||
"isOn": group.IsOn,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["groups"] = groupMaps
|
|
||||||
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
package groups
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/actions"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
|
||||||
|
|
||||||
type UpdatePopupAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *UpdatePopupAction) Init() {
|
|
||||||
this.Nav("", "", "")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *UpdatePopupAction) RunGet(params struct {
|
|
||||||
GroupId int64
|
|
||||||
}) {
|
|
||||||
groupResp, err := this.RPC().MessageRecipientGroupRPC().FindEnabledMessageRecipientGroup(this.AdminContext(), &pb.FindEnabledMessageRecipientGroupRequest{MessageRecipientGroupId: params.GroupId})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
group := groupResp.MessageRecipientGroup
|
|
||||||
if group == nil {
|
|
||||||
this.NotFound("messageRecipientGroup", params.GroupId)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Data["group"] = maps.Map{
|
|
||||||
"id": group.Id,
|
|
||||||
"name": group.Name,
|
|
||||||
"isOn": group.IsOn,
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *UpdatePopupAction) RunPost(params struct {
|
|
||||||
GroupId int64
|
|
||||||
Name string
|
|
||||||
IsOn bool
|
|
||||||
|
|
||||||
Must *actions.Must
|
|
||||||
CSRF *actionutils.CSRF
|
|
||||||
}) {
|
|
||||||
params.Must.
|
|
||||||
Field("name", params.Name).
|
|
||||||
Require("请输入分组名称")
|
|
||||||
|
|
||||||
_, err := this.RPC().MessageRecipientGroupRPC().UpdateMessageRecipientGroup(this.AdminContext(), &pb.UpdateMessageRecipientGroupRequest{
|
|
||||||
MessageRecipientGroupId: params.GroupId,
|
|
||||||
Name: params.Name,
|
|
||||||
IsOn: params.IsOn,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Success()
|
|
||||||
}
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
package recipients
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
|
||||||
|
|
||||||
type IndexAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *IndexAction) Init() {
|
|
||||||
this.Nav("", "", "recipient")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *IndexAction) RunGet(params struct {
|
|
||||||
}) {
|
|
||||||
// TODO 增加系统用户、媒介类型等条件搜索
|
|
||||||
countResp, err := this.RPC().MessageRecipientRPC().CountAllEnabledMessageRecipients(this.AdminContext(), &pb.CountAllEnabledMessageRecipientsRequest{
|
|
||||||
AdminId: 0,
|
|
||||||
MediaType: "",
|
|
||||||
MessageRecipientGroupId: 0,
|
|
||||||
Keyword: "",
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
count := countResp.Count
|
|
||||||
page := this.NewPage(count)
|
|
||||||
this.Data["page"] = page.AsHTML()
|
|
||||||
|
|
||||||
recipientsResp, err := this.RPC().MessageRecipientRPC().ListEnabledMessageRecipients(this.AdminContext(), &pb.ListEnabledMessageRecipientsRequest{
|
|
||||||
AdminId: 0,
|
|
||||||
MediaType: "",
|
|
||||||
MessageRecipientGroupId: 0,
|
|
||||||
Keyword: "",
|
|
||||||
Offset: page.Offset,
|
|
||||||
Size: page.Size,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
recipientMaps := []maps.Map{}
|
|
||||||
for _, recipient := range recipientsResp.MessageRecipients {
|
|
||||||
if recipient.Admin == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if recipient.MessageMediaInstance == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
recipientMaps = append(recipientMaps, maps.Map{
|
|
||||||
"id": recipient.Id,
|
|
||||||
"admin": maps.Map{
|
|
||||||
"id": recipient.Admin.Id,
|
|
||||||
"fullname": recipient.Admin.Fullname,
|
|
||||||
"username": recipient.Admin.Username,
|
|
||||||
},
|
|
||||||
"groups": recipient.MessageRecipientGroups,
|
|
||||||
"isOn": recipient.IsOn,
|
|
||||||
"instance": maps.Map{
|
|
||||||
"name": recipient.MessageMediaInstance.Name,
|
|
||||||
},
|
|
||||||
"user": recipient.User,
|
|
||||||
"description": recipient.Description,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["recipients"] = recipientMaps
|
|
||||||
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
package recipients
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/configloaders"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/helpers"
|
|
||||||
"github.com/iwind/TeaGo"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
TeaGo.BeforeStart(func(server *TeaGo.Server) {
|
|
||||||
server.
|
|
||||||
Helper(helpers.NewUserMustAuth(configloaders.AdminModuleCodeAdmin)).
|
|
||||||
Data("teaMenu", "admins").
|
|
||||||
Data("teaSubMenu", "recipients").
|
|
||||||
Prefix("/admins/recipients").
|
|
||||||
Get("", new(IndexAction)).
|
|
||||||
GetPost("/createPopup", new(CreatePopupAction)).
|
|
||||||
GetPost("/update", new(UpdateAction)).
|
|
||||||
Post("/delete", new(DeleteAction)).
|
|
||||||
Post("/mediaOptions", new(MediaOptionsAction)).
|
|
||||||
Get("/recipient", new(RecipientAction)).
|
|
||||||
GetPost("/test", new(TestAction)).
|
|
||||||
EndAll()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@@ -1,267 +0,0 @@
|
|||||||
package instances
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/monitorconfigs"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/actions"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
|
||||||
|
|
||||||
type CreatePopupAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *CreatePopupAction) Init() {
|
|
||||||
this.Nav("", "", "")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *CreatePopupAction) RunGet(params struct{}) {
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *CreatePopupAction) RunPost(params struct {
|
|
||||||
Name string
|
|
||||||
MediaType string
|
|
||||||
|
|
||||||
EmailSmtp string
|
|
||||||
EmailUsername string
|
|
||||||
EmailPassword string
|
|
||||||
EmailFrom string
|
|
||||||
|
|
||||||
WebHookURL string
|
|
||||||
WebHookMethod string
|
|
||||||
WebHookHeaderNames []string
|
|
||||||
WebHookHeaderValues []string
|
|
||||||
WebHookContentType string
|
|
||||||
WebHookParamNames []string
|
|
||||||
WebHookParamValues []string
|
|
||||||
WebHookBody string
|
|
||||||
|
|
||||||
ScriptType string
|
|
||||||
ScriptPath string
|
|
||||||
ScriptLang string
|
|
||||||
ScriptCode string
|
|
||||||
ScriptCwd string
|
|
||||||
ScriptEnvNames []string
|
|
||||||
ScriptEnvValues []string
|
|
||||||
|
|
||||||
DingTalkWebHookURL string
|
|
||||||
|
|
||||||
QyWeixinCorporateId string
|
|
||||||
QyWeixinAgentId string
|
|
||||||
QyWeixinAppSecret string
|
|
||||||
QyWeixinTextFormat string
|
|
||||||
|
|
||||||
QyWeixinRobotWebHookURL string
|
|
||||||
QyWeixinRobotTextFormat string
|
|
||||||
|
|
||||||
AliyunSmsSign string
|
|
||||||
AliyunSmsTemplateCode string
|
|
||||||
AliyunSmsTemplateVarNames []string
|
|
||||||
AliyunSmsTemplateVarValues []string
|
|
||||||
AliyunSmsAccessKeyId string
|
|
||||||
AliyunSmsAccessKeySecret string
|
|
||||||
|
|
||||||
TelegramToken string
|
|
||||||
|
|
||||||
RateMinutes int32
|
|
||||||
RateCount int32
|
|
||||||
|
|
||||||
HashLife int32
|
|
||||||
|
|
||||||
Description string
|
|
||||||
|
|
||||||
Must *actions.Must
|
|
||||||
CSRF *actionutils.CSRF
|
|
||||||
}) {
|
|
||||||
params.Must.
|
|
||||||
Field("name", params.Name).
|
|
||||||
Require("请输入媒介名称").
|
|
||||||
Field("mediaType", params.MediaType).
|
|
||||||
Require("请选择媒介类型")
|
|
||||||
|
|
||||||
options := maps.Map{}
|
|
||||||
|
|
||||||
switch params.MediaType {
|
|
||||||
case "email":
|
|
||||||
params.Must.
|
|
||||||
Field("emailSmtp", params.EmailSmtp).
|
|
||||||
Require("请输入SMTP地址").
|
|
||||||
Field("emailUsername", params.EmailUsername).
|
|
||||||
Require("请输入邮箱账号").
|
|
||||||
Field("emailPassword", params.EmailPassword).
|
|
||||||
Require("请输入密码或授权码")
|
|
||||||
|
|
||||||
options["smtp"] = params.EmailSmtp
|
|
||||||
options["username"] = params.EmailUsername
|
|
||||||
options["password"] = params.EmailPassword
|
|
||||||
options["from"] = params.EmailFrom
|
|
||||||
case "webHook":
|
|
||||||
params.Must.
|
|
||||||
Field("webHookURL", params.WebHookURL).
|
|
||||||
Require("请输入URL地址").
|
|
||||||
Match("(?i)^(http|https)://", "URL地址必须以http或https开头").
|
|
||||||
Field("webHookMethod", params.WebHookMethod).
|
|
||||||
Require("请选择请求方法")
|
|
||||||
|
|
||||||
options["url"] = params.WebHookURL
|
|
||||||
options["method"] = params.WebHookMethod
|
|
||||||
options["contentType"] = params.WebHookContentType
|
|
||||||
|
|
||||||
headers := []maps.Map{}
|
|
||||||
if len(params.WebHookHeaderNames) > 0 {
|
|
||||||
for index, name := range params.WebHookHeaderNames {
|
|
||||||
if index < len(params.WebHookHeaderValues) {
|
|
||||||
headers = append(headers, maps.Map{
|
|
||||||
"name": name,
|
|
||||||
"value": params.WebHookHeaderValues[index],
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
options["headers"] = headers
|
|
||||||
|
|
||||||
if params.WebHookContentType == "params" {
|
|
||||||
webHookParams := []maps.Map{}
|
|
||||||
for index, name := range params.WebHookParamNames {
|
|
||||||
if index < len(params.WebHookParamValues) {
|
|
||||||
webHookParams = append(webHookParams, maps.Map{
|
|
||||||
"name": name,
|
|
||||||
"value": params.WebHookParamValues[index],
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
options["params"] = webHookParams
|
|
||||||
} else if params.WebHookContentType == "body" {
|
|
||||||
options["body"] = params.WebHookBody
|
|
||||||
}
|
|
||||||
case "script":
|
|
||||||
if params.ScriptType == "path" {
|
|
||||||
params.Must.
|
|
||||||
Field("scriptPath", params.ScriptPath).
|
|
||||||
Require("请输入脚本路径")
|
|
||||||
} else if params.ScriptType == "code" {
|
|
||||||
params.Must.
|
|
||||||
Field("scriptCode", params.ScriptCode).
|
|
||||||
Require("请输入脚本代码")
|
|
||||||
} else {
|
|
||||||
params.Must.
|
|
||||||
Field("scriptPath", params.ScriptPath).
|
|
||||||
Require("请输入脚本路径")
|
|
||||||
}
|
|
||||||
|
|
||||||
options["scriptType"] = params.ScriptType
|
|
||||||
options["path"] = params.ScriptPath
|
|
||||||
options["scriptLang"] = params.ScriptLang
|
|
||||||
options["script"] = params.ScriptCode
|
|
||||||
options["cwd"] = params.ScriptCwd
|
|
||||||
|
|
||||||
env := []maps.Map{}
|
|
||||||
for index, envName := range params.ScriptEnvNames {
|
|
||||||
if index < len(params.ScriptEnvValues) {
|
|
||||||
env = append(env, maps.Map{
|
|
||||||
"name": envName,
|
|
||||||
"value": params.ScriptEnvValues[index],
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
options["env"] = env
|
|
||||||
case "dingTalk":
|
|
||||||
params.Must.
|
|
||||||
Field("dingTalkWebHookURL", params.DingTalkWebHookURL).
|
|
||||||
Require("请输入Hook地址").
|
|
||||||
Match("^https:", "Hook地址必须以https://开头")
|
|
||||||
|
|
||||||
options["webHookURL"] = params.DingTalkWebHookURL
|
|
||||||
case "qyWeixin":
|
|
||||||
params.Must.
|
|
||||||
Field("qyWeixinCorporateId", params.QyWeixinCorporateId).
|
|
||||||
Require("请输入企业ID").
|
|
||||||
Field("qyWeixinAgentId", params.QyWeixinAgentId).
|
|
||||||
Require("请输入应用AgentId").
|
|
||||||
Field("qyWeixinSecret", params.QyWeixinAppSecret).
|
|
||||||
Require("请输入应用Secret")
|
|
||||||
|
|
||||||
options["corporateId"] = params.QyWeixinCorporateId
|
|
||||||
options["agentId"] = params.QyWeixinAgentId
|
|
||||||
options["appSecret"] = params.QyWeixinAppSecret
|
|
||||||
options["textFormat"] = params.QyWeixinTextFormat
|
|
||||||
case "qyWeixinRobot":
|
|
||||||
params.Must.
|
|
||||||
Field("qyWeixinRobotWebHookURL", params.QyWeixinRobotWebHookURL).
|
|
||||||
Require("请输入WebHook地址").
|
|
||||||
Match("^https:", "WebHook地址必须以https://开头")
|
|
||||||
|
|
||||||
options["webHookURL"] = params.QyWeixinRobotWebHookURL
|
|
||||||
options["textFormat"] = params.QyWeixinRobotTextFormat
|
|
||||||
case "aliyunSms":
|
|
||||||
params.Must.
|
|
||||||
Field("aliyunSmsSign", params.AliyunSmsSign).
|
|
||||||
Require("请输入签名名称").
|
|
||||||
Field("aliyunSmsTemplateCode", params.AliyunSmsTemplateCode).
|
|
||||||
Require("请输入模板CODE").
|
|
||||||
Field("aliyunSmsAccessKeyId", params.AliyunSmsAccessKeyId).
|
|
||||||
Require("请输入AccessKey ID").
|
|
||||||
Field("aliyunSmsAccessKeySecret", params.AliyunSmsAccessKeySecret).
|
|
||||||
Require("请输入AccessKey Secret")
|
|
||||||
|
|
||||||
options["sign"] = params.AliyunSmsSign
|
|
||||||
options["templateCode"] = params.AliyunSmsTemplateCode
|
|
||||||
options["accessKeyId"] = params.AliyunSmsAccessKeyId
|
|
||||||
options["accessKeySecret"] = params.AliyunSmsAccessKeySecret
|
|
||||||
|
|
||||||
variables := []maps.Map{}
|
|
||||||
for index, name := range params.AliyunSmsTemplateVarNames {
|
|
||||||
if index < len(params.AliyunSmsTemplateVarValues) {
|
|
||||||
variables = append(variables, maps.Map{
|
|
||||||
"name": name,
|
|
||||||
"value": params.AliyunSmsTemplateVarValues[index],
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
options["variables"] = variables
|
|
||||||
case "telegram":
|
|
||||||
params.Must.
|
|
||||||
Field("telegramToken", params.TelegramToken).
|
|
||||||
Require("请输入机器人Token")
|
|
||||||
options["token"] = params.TelegramToken
|
|
||||||
default:
|
|
||||||
this.Fail("错误的媒介类型")
|
|
||||||
}
|
|
||||||
|
|
||||||
optionsJSON, err := json.Marshal(options)
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var rateConfig = &monitorconfigs.RateConfig{
|
|
||||||
Minutes: params.RateMinutes,
|
|
||||||
Count: params.RateCount,
|
|
||||||
}
|
|
||||||
rateJSON, err := json.Marshal(rateConfig)
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
resp, err := this.RPC().MessageMediaInstanceRPC().CreateMessageMediaInstance(this.AdminContext(), &pb.CreateMessageMediaInstanceRequest{
|
|
||||||
Name: params.Name,
|
|
||||||
MediaType: params.MediaType,
|
|
||||||
ParamsJSON: optionsJSON,
|
|
||||||
Description: params.Description,
|
|
||||||
RateJSON: rateJSON,
|
|
||||||
HashLife: params.HashLife,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
defer this.CreateLogInfo(codes.MessageMediaInstance_LogCreateMessageMediaInstance, resp.MessageMediaInstanceId)
|
|
||||||
|
|
||||||
this.Success()
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
package instances
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
)
|
|
||||||
|
|
||||||
type DeleteAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *DeleteAction) RunPost(params struct {
|
|
||||||
InstanceId int64
|
|
||||||
}) {
|
|
||||||
defer this.CreateLogInfo(codes.MessageMediaInstance_LogDeleteMessageMediaInstance, params.InstanceId)
|
|
||||||
|
|
||||||
_, err := this.RPC().MessageMediaInstanceRPC().DeleteMessageMediaInstance(this.AdminContext(), &pb.DeleteMessageMediaInstanceRequest{MessageMediaInstanceId: params.InstanceId})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Success()
|
|
||||||
}
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
package instances
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
|
||||||
|
|
||||||
type IndexAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *IndexAction) Init() {
|
|
||||||
this.Nav("", "", "instance")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *IndexAction) RunGet(params struct {
|
|
||||||
}) {
|
|
||||||
// TODO 增加系统用户、媒介类型等条件搜索
|
|
||||||
countResp, err := this.RPC().MessageMediaInstanceRPC().CountAllEnabledMessageMediaInstances(this.AdminContext(), &pb.CountAllEnabledMessageMediaInstancesRequest{
|
|
||||||
MediaType: "",
|
|
||||||
Keyword: "",
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
count := countResp.Count
|
|
||||||
page := this.NewPage(count)
|
|
||||||
this.Data["page"] = page.AsHTML()
|
|
||||||
|
|
||||||
instancesResp, err := this.RPC().MessageMediaInstanceRPC().ListEnabledMessageMediaInstances(this.AdminContext(), &pb.ListEnabledMessageMediaInstancesRequest{
|
|
||||||
MediaType: "",
|
|
||||||
Keyword: "",
|
|
||||||
Offset: page.Offset,
|
|
||||||
Size: page.Size,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
instanceMaps := []maps.Map{}
|
|
||||||
for _, instance := range instancesResp.MessageMediaInstances {
|
|
||||||
if instance.MessageMedia == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
instanceMaps = append(instanceMaps, maps.Map{
|
|
||||||
"id": instance.Id,
|
|
||||||
"name": instance.Name,
|
|
||||||
"isOn": instance.IsOn,
|
|
||||||
"media": maps.Map{
|
|
||||||
"name": instance.MessageMedia.Name,
|
|
||||||
},
|
|
||||||
"description": instance.Description,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["instances"] = instanceMaps
|
|
||||||
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
package instances
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/configloaders"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/helpers"
|
|
||||||
"github.com/iwind/TeaGo"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
TeaGo.BeforeStart(func(server *TeaGo.Server) {
|
|
||||||
server.
|
|
||||||
Helper(helpers.NewUserMustAuth(configloaders.AdminModuleCodeAdmin)).
|
|
||||||
Data("teaMenu", "admins").
|
|
||||||
Data("teaSubMenu", "instances").
|
|
||||||
Prefix("/admins/recipients/instances").
|
|
||||||
Get("", new(IndexAction)).
|
|
||||||
GetPost("/createPopup", new(CreatePopupAction)).
|
|
||||||
GetPost("/update", new(UpdateAction)).
|
|
||||||
Post("/delete", new(DeleteAction)).
|
|
||||||
Get("/instance", new(InstanceAction)).
|
|
||||||
GetPost("/test", new(TestAction)).
|
|
||||||
Post("/options", new(OptionsAction)).
|
|
||||||
EndAll()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
package instances
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/monitorconfigs"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
|
||||||
|
|
||||||
type InstanceAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *InstanceAction) Init() {
|
|
||||||
this.Nav("", "", "instance")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *InstanceAction) RunGet(params struct {
|
|
||||||
InstanceId int64
|
|
||||||
}) {
|
|
||||||
instanceResp, err := this.RPC().MessageMediaInstanceRPC().FindEnabledMessageMediaInstance(this.AdminContext(), &pb.FindEnabledMessageMediaInstanceRequest{MessageMediaInstanceId: params.InstanceId})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
instance := instanceResp.MessageMediaInstance
|
|
||||||
if instance == nil || instance.MessageMedia == nil {
|
|
||||||
this.NotFound("messageMediaInstance", params.InstanceId)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
mediaParams := maps.Map{}
|
|
||||||
if len(instance.ParamsJSON) > 0 {
|
|
||||||
err = json.Unmarshal(instance.ParamsJSON, &mediaParams)
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 频率
|
|
||||||
var rateConfig = &monitorconfigs.RateConfig{}
|
|
||||||
if len(instance.RateJSON) > 0 {
|
|
||||||
err = json.Unmarshal(instance.RateJSON, rateConfig)
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Data["instance"] = maps.Map{
|
|
||||||
"id": instance.Id,
|
|
||||||
"name": instance.Name,
|
|
||||||
"isOn": instance.IsOn,
|
|
||||||
"media": maps.Map{
|
|
||||||
"type": instance.MessageMedia.Type,
|
|
||||||
"name": instance.MessageMedia.Name,
|
|
||||||
},
|
|
||||||
"description": instance.Description,
|
|
||||||
"params": mediaParams,
|
|
||||||
"rate": rateConfig,
|
|
||||||
"hashLife": instance.HashLife,
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
package instances
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
|
||||||
|
|
||||||
// 媒介类型选项
|
|
||||||
type OptionsAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *OptionsAction) RunPost(params struct{}) {
|
|
||||||
resp, err := this.RPC().MessageMediaInstanceRPC().ListEnabledMessageMediaInstances(this.AdminContext(), &pb.ListEnabledMessageMediaInstancesRequest{
|
|
||||||
Offset: 0,
|
|
||||||
Size: 1000,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
instanceMaps := []maps.Map{}
|
|
||||||
for _, instance := range resp.MessageMediaInstances {
|
|
||||||
instanceMaps = append(instanceMaps, maps.Map{
|
|
||||||
"id": instance.Id,
|
|
||||||
"name": instance.Name,
|
|
||||||
"description": instance.Description,
|
|
||||||
"media": maps.Map{
|
|
||||||
"type": instance.MessageMedia.Type,
|
|
||||||
"name": instance.MessageMedia.Name,
|
|
||||||
"userDescription": instance.MessageMedia.UserDescription,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["instances"] = instanceMaps
|
|
||||||
|
|
||||||
this.Success()
|
|
||||||
}
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
package instances
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/actions"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
|
||||||
|
|
||||||
type TestAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *TestAction) Init() {
|
|
||||||
this.Nav("", "", "test")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *TestAction) RunGet(params struct {
|
|
||||||
InstanceId int64
|
|
||||||
}) {
|
|
||||||
instanceResp, err := this.RPC().MessageMediaInstanceRPC().FindEnabledMessageMediaInstance(this.AdminContext(), &pb.FindEnabledMessageMediaInstanceRequest{MessageMediaInstanceId: params.InstanceId})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
instance := instanceResp.MessageMediaInstance
|
|
||||||
if instance == nil || instance.MessageMedia == nil {
|
|
||||||
this.NotFound("messageMediaInstance", params.InstanceId)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
mediaParams := maps.Map{}
|
|
||||||
if len(instance.ParamsJSON) > 0 {
|
|
||||||
err = json.Unmarshal(instance.ParamsJSON, &mediaParams)
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Data["instance"] = maps.Map{
|
|
||||||
"id": instance.Id,
|
|
||||||
"isOn": instance.IsOn,
|
|
||||||
"media": maps.Map{
|
|
||||||
"type": instance.MessageMedia.Type,
|
|
||||||
"name": instance.MessageMedia.Name,
|
|
||||||
"userDescription": instance.MessageMedia.UserDescription,
|
|
||||||
},
|
|
||||||
"description": instance.Description,
|
|
||||||
"params": mediaParams,
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *TestAction) RunPost(params struct {
|
|
||||||
InstanceId int64
|
|
||||||
Subject string
|
|
||||||
Body string
|
|
||||||
User string
|
|
||||||
|
|
||||||
Must *actions.Must
|
|
||||||
CSRF *actionutils.CSRF
|
|
||||||
}) {
|
|
||||||
params.Must.
|
|
||||||
Field("instanceId", params.InstanceId).
|
|
||||||
Gt(0, "请选择正确的媒介")
|
|
||||||
|
|
||||||
resp, err := this.RPC().MessageTaskRPC().CreateMessageTask(this.AdminContext(), &pb.CreateMessageTaskRequest{
|
|
||||||
RecipientId: 0,
|
|
||||||
InstanceId: params.InstanceId,
|
|
||||||
User: params.User,
|
|
||||||
Subject: params.Subject,
|
|
||||||
Body: params.Body,
|
|
||||||
IsPrimary: true,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.Data["taskId"] = resp.MessageTaskId
|
|
||||||
|
|
||||||
defer this.CreateLogInfo(codes.MessageTask_LogCreateTestingMessageTask, resp.MessageTaskId)
|
|
||||||
|
|
||||||
this.Success()
|
|
||||||
}
|
|
||||||
@@ -1,317 +0,0 @@
|
|||||||
package instances
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/monitorconfigs"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/actions"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
|
||||||
|
|
||||||
type UpdateAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *UpdateAction) Init() {
|
|
||||||
this.Nav("", "", "update")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *UpdateAction) RunGet(params struct {
|
|
||||||
InstanceId int64
|
|
||||||
}) {
|
|
||||||
instanceResp, err := this.RPC().MessageMediaInstanceRPC().FindEnabledMessageMediaInstance(this.AdminContext(), &pb.FindEnabledMessageMediaInstanceRequest{MessageMediaInstanceId: params.InstanceId})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
instance := instanceResp.MessageMediaInstance
|
|
||||||
if instance == nil || instance.MessageMedia == nil {
|
|
||||||
this.NotFound("messageMediaInstance", params.InstanceId)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
mediaParams := maps.Map{}
|
|
||||||
if len(instance.ParamsJSON) > 0 {
|
|
||||||
err = json.Unmarshal(instance.ParamsJSON, &mediaParams)
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var rateConfig = &monitorconfigs.RateConfig{}
|
|
||||||
if len(instance.RateJSON) > 0 {
|
|
||||||
err = json.Unmarshal(instance.RateJSON, rateConfig)
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Data["instance"] = maps.Map{
|
|
||||||
"id": instance.Id,
|
|
||||||
"name": instance.Name,
|
|
||||||
"isOn": instance.IsOn,
|
|
||||||
"media": maps.Map{
|
|
||||||
"type": instance.MessageMedia.Type,
|
|
||||||
"name": instance.MessageMedia.Name,
|
|
||||||
},
|
|
||||||
"description": instance.Description,
|
|
||||||
"params": mediaParams,
|
|
||||||
"rate": rateConfig,
|
|
||||||
"hashLife": instance.HashLife,
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *UpdateAction) RunPost(params struct {
|
|
||||||
InstanceId int64
|
|
||||||
Name string
|
|
||||||
MediaType string
|
|
||||||
|
|
||||||
EmailSmtp string
|
|
||||||
EmailUsername string
|
|
||||||
EmailPassword string
|
|
||||||
EmailFrom string
|
|
||||||
|
|
||||||
WebHookURL string
|
|
||||||
WebHookMethod string
|
|
||||||
WebHookHeaderNames []string
|
|
||||||
WebHookHeaderValues []string
|
|
||||||
WebHookContentType string
|
|
||||||
WebHookParamNames []string
|
|
||||||
WebHookParamValues []string
|
|
||||||
WebHookBody string
|
|
||||||
|
|
||||||
ScriptType string
|
|
||||||
ScriptPath string
|
|
||||||
ScriptLang string
|
|
||||||
ScriptCode string
|
|
||||||
ScriptCwd string
|
|
||||||
ScriptEnvNames []string
|
|
||||||
ScriptEnvValues []string
|
|
||||||
|
|
||||||
DingTalkWebHookURL string
|
|
||||||
|
|
||||||
QyWeixinCorporateId string
|
|
||||||
QyWeixinAgentId string
|
|
||||||
QyWeixinAppSecret string
|
|
||||||
QyWeixinTextFormat string
|
|
||||||
|
|
||||||
QyWeixinRobotWebHookURL string
|
|
||||||
QyWeixinRobotTextFormat string
|
|
||||||
|
|
||||||
AliyunSmsSign string
|
|
||||||
AliyunSmsTemplateCode string
|
|
||||||
AliyunSmsTemplateVarNames []string
|
|
||||||
AliyunSmsTemplateVarValues []string
|
|
||||||
AliyunSmsAccessKeyId string
|
|
||||||
AliyunSmsAccessKeySecret string
|
|
||||||
|
|
||||||
TelegramToken string
|
|
||||||
|
|
||||||
GroupIds string
|
|
||||||
Description string
|
|
||||||
IsOn bool
|
|
||||||
|
|
||||||
RateMinutes int32
|
|
||||||
RateCount int32
|
|
||||||
|
|
||||||
HashLife int32
|
|
||||||
|
|
||||||
Must *actions.Must
|
|
||||||
CSRF *actionutils.CSRF
|
|
||||||
}) {
|
|
||||||
defer this.CreateLogInfo(codes.MessageMediaInstance_LogUpdateMessageMediaInstance, params.InstanceId)
|
|
||||||
|
|
||||||
params.Must.
|
|
||||||
Field("name", params.Name).
|
|
||||||
Require("请输入媒介名称").
|
|
||||||
Field("mediaType", params.MediaType).
|
|
||||||
Require("请选择媒介类型")
|
|
||||||
|
|
||||||
options := maps.Map{}
|
|
||||||
|
|
||||||
switch params.MediaType {
|
|
||||||
case "email":
|
|
||||||
params.Must.
|
|
||||||
Field("emailSmtp", params.EmailSmtp).
|
|
||||||
Require("请输入SMTP地址").
|
|
||||||
Field("emailUsername", params.EmailUsername).
|
|
||||||
Require("请输入邮箱账号").
|
|
||||||
Field("emailPassword", params.EmailPassword).
|
|
||||||
Require("请输入密码或授权码")
|
|
||||||
|
|
||||||
options["smtp"] = params.EmailSmtp
|
|
||||||
options["username"] = params.EmailUsername
|
|
||||||
options["password"] = params.EmailPassword
|
|
||||||
options["from"] = params.EmailFrom
|
|
||||||
case "webHook":
|
|
||||||
params.Must.
|
|
||||||
Field("webHookURL", params.WebHookURL).
|
|
||||||
Require("请输入URL地址").
|
|
||||||
Match("(?i)^(http|https)://", "URL地址必须以http或https开头").
|
|
||||||
Field("webHookMethod", params.WebHookMethod).
|
|
||||||
Require("请选择请求方法")
|
|
||||||
|
|
||||||
options["url"] = params.WebHookURL
|
|
||||||
options["method"] = params.WebHookMethod
|
|
||||||
options["contentType"] = params.WebHookContentType
|
|
||||||
|
|
||||||
headers := []maps.Map{}
|
|
||||||
if len(params.WebHookHeaderNames) > 0 {
|
|
||||||
for index, name := range params.WebHookHeaderNames {
|
|
||||||
if index < len(params.WebHookHeaderValues) {
|
|
||||||
headers = append(headers, maps.Map{
|
|
||||||
"name": name,
|
|
||||||
"value": params.WebHookHeaderValues[index],
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
options["headers"] = headers
|
|
||||||
|
|
||||||
if params.WebHookContentType == "params" {
|
|
||||||
webHookParams := []maps.Map{}
|
|
||||||
for index, name := range params.WebHookParamNames {
|
|
||||||
if index < len(params.WebHookParamValues) {
|
|
||||||
webHookParams = append(webHookParams, maps.Map{
|
|
||||||
"name": name,
|
|
||||||
"value": params.WebHookParamValues[index],
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
options["params"] = webHookParams
|
|
||||||
} else if params.WebHookContentType == "body" {
|
|
||||||
options["body"] = params.WebHookBody
|
|
||||||
}
|
|
||||||
case "script":
|
|
||||||
if params.ScriptType == "path" {
|
|
||||||
params.Must.
|
|
||||||
Field("scriptPath", params.ScriptPath).
|
|
||||||
Require("请输入脚本路径")
|
|
||||||
} else if params.ScriptType == "code" {
|
|
||||||
params.Must.
|
|
||||||
Field("scriptCode", params.ScriptCode).
|
|
||||||
Require("请输入脚本代码")
|
|
||||||
} else {
|
|
||||||
params.Must.
|
|
||||||
Field("scriptPath", params.ScriptPath).
|
|
||||||
Require("请输入脚本路径")
|
|
||||||
}
|
|
||||||
|
|
||||||
options["scriptType"] = params.ScriptType
|
|
||||||
options["path"] = params.ScriptPath
|
|
||||||
options["scriptLang"] = params.ScriptLang
|
|
||||||
options["script"] = params.ScriptCode
|
|
||||||
options["cwd"] = params.ScriptCwd
|
|
||||||
|
|
||||||
env := []maps.Map{}
|
|
||||||
for index, envName := range params.ScriptEnvNames {
|
|
||||||
if index < len(params.ScriptEnvValues) {
|
|
||||||
env = append(env, maps.Map{
|
|
||||||
"name": envName,
|
|
||||||
"value": params.ScriptEnvValues[index],
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
options["env"] = env
|
|
||||||
case "dingTalk":
|
|
||||||
params.Must.
|
|
||||||
Field("dingTalkWebHookURL", params.DingTalkWebHookURL).
|
|
||||||
Require("请输入Hook地址").
|
|
||||||
Match("^https:", "Hook地址必须以https://开头")
|
|
||||||
|
|
||||||
options["webHookURL"] = params.DingTalkWebHookURL
|
|
||||||
case "qyWeixin":
|
|
||||||
params.Must.
|
|
||||||
Field("qyWeixinCorporateId", params.QyWeixinCorporateId).
|
|
||||||
Require("请输入企业ID").
|
|
||||||
Field("qyWeixinAgentId", params.QyWeixinAgentId).
|
|
||||||
Require("请输入应用AgentId").
|
|
||||||
Field("qyWeixinSecret", params.QyWeixinAppSecret).
|
|
||||||
Require("请输入应用Secret")
|
|
||||||
|
|
||||||
options["corporateId"] = params.QyWeixinCorporateId
|
|
||||||
options["agentId"] = params.QyWeixinAgentId
|
|
||||||
options["appSecret"] = params.QyWeixinAppSecret
|
|
||||||
options["textFormat"] = params.QyWeixinTextFormat
|
|
||||||
case "qyWeixinRobot":
|
|
||||||
params.Must.
|
|
||||||
Field("qyWeixinRobotWebHookURL", params.QyWeixinRobotWebHookURL).
|
|
||||||
Require("请输入WebHook地址").
|
|
||||||
Match("^https:", "WebHook地址必须以https://开头")
|
|
||||||
|
|
||||||
options["webHookURL"] = params.QyWeixinRobotWebHookURL
|
|
||||||
options["textFormat"] = params.QyWeixinRobotTextFormat
|
|
||||||
case "aliyunSms":
|
|
||||||
params.Must.
|
|
||||||
Field("aliyunSmsSign", params.AliyunSmsSign).
|
|
||||||
Require("请输入签名名称").
|
|
||||||
Field("aliyunSmsTemplateCode", params.AliyunSmsTemplateCode).
|
|
||||||
Require("请输入模板CODE").
|
|
||||||
Field("aliyunSmsAccessKeyId", params.AliyunSmsAccessKeyId).
|
|
||||||
Require("请输入AccessKey ID").
|
|
||||||
Field("aliyunSmsAccessKeySecret", params.AliyunSmsAccessKeySecret).
|
|
||||||
Require("请输入AccessKey Secret")
|
|
||||||
|
|
||||||
options["sign"] = params.AliyunSmsSign
|
|
||||||
options["templateCode"] = params.AliyunSmsTemplateCode
|
|
||||||
options["accessKeyId"] = params.AliyunSmsAccessKeyId
|
|
||||||
options["accessKeySecret"] = params.AliyunSmsAccessKeySecret
|
|
||||||
|
|
||||||
variables := []maps.Map{}
|
|
||||||
for index, name := range params.AliyunSmsTemplateVarNames {
|
|
||||||
if index < len(params.AliyunSmsTemplateVarValues) {
|
|
||||||
variables = append(variables, maps.Map{
|
|
||||||
"name": name,
|
|
||||||
"value": params.AliyunSmsTemplateVarValues[index],
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
options["variables"] = variables
|
|
||||||
case "telegram":
|
|
||||||
params.Must.
|
|
||||||
Field("telegramToken", params.TelegramToken).
|
|
||||||
Require("请输入机器人Token")
|
|
||||||
options["token"] = params.TelegramToken
|
|
||||||
default:
|
|
||||||
this.Fail("错误的媒介类型")
|
|
||||||
}
|
|
||||||
|
|
||||||
optionsJSON, err := json.Marshal(options)
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var rateConfig = &monitorconfigs.RateConfig{
|
|
||||||
Minutes: params.RateMinutes,
|
|
||||||
Count: params.RateCount,
|
|
||||||
}
|
|
||||||
rateJSON, err := json.Marshal(rateConfig)
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = this.RPC().MessageMediaInstanceRPC().UpdateMessageMediaInstance(this.AdminContext(), &pb.UpdateMessageMediaInstanceRequest{
|
|
||||||
MessageMediaInstanceId: params.InstanceId,
|
|
||||||
Name: params.Name,
|
|
||||||
MediaType: params.MediaType,
|
|
||||||
ParamsJSON: optionsJSON,
|
|
||||||
Description: params.Description,
|
|
||||||
RateJSON: rateJSON,
|
|
||||||
HashLife: params.HashLife,
|
|
||||||
IsOn: params.IsOn,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Success()
|
|
||||||
}
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
package logs
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
timeutil "github.com/iwind/TeaGo/utils/time"
|
|
||||||
)
|
|
||||||
|
|
||||||
type IndexAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *IndexAction) Init() {
|
|
||||||
this.Nav("", "", "log")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *IndexAction) RunGet(params struct{}) {
|
|
||||||
countResp, err := this.RPC().MessageTaskLogRPC().CountMessageTaskLogs(this.AdminContext(), &pb.CountMessageTaskLogsRequest{})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
page := this.NewPage(countResp.Count)
|
|
||||||
this.Data["page"] = page.AsHTML()
|
|
||||||
|
|
||||||
logsResp, err := this.RPC().MessageTaskLogRPC().ListMessageTaskLogs(this.AdminContext(), &pb.ListMessageTaskLogsRequest{
|
|
||||||
Offset: page.Offset,
|
|
||||||
Size: page.Size,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
logMaps := []maps.Map{}
|
|
||||||
for _, log := range logsResp.MessageTaskLogs {
|
|
||||||
if log.MessageTask.MessageRecipient != nil {
|
|
||||||
log.MessageTask.User = log.MessageTask.MessageRecipient.User
|
|
||||||
}
|
|
||||||
logMaps = append(logMaps, maps.Map{
|
|
||||||
"task": maps.Map{
|
|
||||||
"id": log.MessageTask.Id,
|
|
||||||
"user": log.MessageTask.User,
|
|
||||||
"subject": log.MessageTask.Subject,
|
|
||||||
"body": log.MessageTask.Body,
|
|
||||||
"instance": maps.Map{
|
|
||||||
"id": log.MessageTask.MessageMediaInstance.Id,
|
|
||||||
"name": log.MessageTask.MessageMediaInstance.Name,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"isOk": log.IsOk,
|
|
||||||
"error": log.Error,
|
|
||||||
"response": log.Response,
|
|
||||||
"createdTime": timeutil.FormatTime("Y-m-d H:i:s", log.CreatedAt),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["logs"] = logMaps
|
|
||||||
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package logs
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/configloaders"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/helpers"
|
|
||||||
"github.com/iwind/TeaGo"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
TeaGo.BeforeStart(func(server *TeaGo.Server) {
|
|
||||||
server.
|
|
||||||
Helper(helpers.NewUserMustAuth(configloaders.AdminModuleCodeAdmin)).
|
|
||||||
Data("teaMenu", "admins").
|
|
||||||
Data("teaSubMenu", "recipients").
|
|
||||||
Prefix("/admins/recipients/logs").
|
|
||||||
Get("", new(IndexAction)).
|
|
||||||
EndAll()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
package recipients
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
|
||||||
|
|
||||||
// 媒介类型选项
|
|
||||||
type MediaOptionsAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *MediaOptionsAction) RunPost(params struct{}) {
|
|
||||||
resp, err := this.RPC().MessageMediaRPC().FindAllMessageMedias(this.AdminContext(), &pb.FindAllMessageMediasRequest{})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
mediaMaps := []maps.Map{}
|
|
||||||
for _, media := range resp.MessageMedias {
|
|
||||||
mediaMaps = append(mediaMaps, maps.Map{
|
|
||||||
"id": media.Id,
|
|
||||||
"type": media.Type,
|
|
||||||
"name": media.Name,
|
|
||||||
"description": media.Description,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["medias"] = mediaMaps
|
|
||||||
|
|
||||||
this.Success()
|
|
||||||
}
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
package recipients
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
|
||||||
|
|
||||||
type RecipientAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *RecipientAction) Init() {
|
|
||||||
this.Nav("", "", "recipient")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *RecipientAction) RunGet(params struct {
|
|
||||||
RecipientId int64
|
|
||||||
}) {
|
|
||||||
recipientResp, err := this.RPC().MessageRecipientRPC().FindEnabledMessageRecipient(this.AdminContext(), &pb.FindEnabledMessageRecipientRequest{MessageRecipientId: params.RecipientId})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
recipient := recipientResp.MessageRecipient
|
|
||||||
if recipient == nil || recipient.Admin == nil || recipient.MessageMediaInstance == nil {
|
|
||||||
this.NotFound("messageRecipient", params.RecipientId)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Data["recipient"] = maps.Map{
|
|
||||||
"id": recipient.Id,
|
|
||||||
"admin": maps.Map{
|
|
||||||
"id": recipient.Admin.Id,
|
|
||||||
"fullname": recipient.Admin.Fullname,
|
|
||||||
"username": recipient.Admin.Username,
|
|
||||||
},
|
|
||||||
"groups": recipient.MessageRecipientGroups,
|
|
||||||
"isOn": recipient.IsOn,
|
|
||||||
"instance": maps.Map{
|
|
||||||
"id": recipient.MessageMediaInstance.Id,
|
|
||||||
"name": recipient.MessageMediaInstance.Name,
|
|
||||||
"description": recipient.MessageMediaInstance.Description,
|
|
||||||
},
|
|
||||||
"user": recipient.User,
|
|
||||||
"description": recipient.Description,
|
|
||||||
"timeFrom": recipient.TimeFrom,
|
|
||||||
"timeTo": recipient.TimeTo,
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
|
||||||
|
|
||||||
package tasks
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
)
|
|
||||||
|
|
||||||
type DeleteAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *DeleteAction) RunPost(params struct {
|
|
||||||
TaskId int64
|
|
||||||
}) {
|
|
||||||
defer this.CreateLogInfo(codes.MessageTask_LogDeleteMessageTask, params.TaskId)
|
|
||||||
|
|
||||||
_, err := this.RPC().MessageTaskRPC().DeleteMessageTask(this.AdminContext(), &pb.DeleteMessageTaskRequest{MessageTaskId: params.TaskId})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Success()
|
|
||||||
}
|
|
||||||
@@ -1,103 +0,0 @@
|
|||||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
|
||||||
|
|
||||||
package tasks
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
timeutil "github.com/iwind/TeaGo/utils/time"
|
|
||||||
)
|
|
||||||
|
|
||||||
type IndexAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *IndexAction) Init() {
|
|
||||||
this.Nav("", "", "task")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *IndexAction) RunGet(params struct {
|
|
||||||
Status int32
|
|
||||||
}) {
|
|
||||||
this.Data["status"] = params.Status
|
|
||||||
if params.Status > 3 {
|
|
||||||
params.Status = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
countWaitingResp, err := this.RPC().MessageTaskRPC().CountMessageTasksWithStatus(this.AdminContext(), &pb.CountMessageTasksWithStatusRequest{Status: pb.CountMessageTasksWithStatusRequest_MessageTaskStatusNone})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var countWaiting = countWaitingResp.Count
|
|
||||||
this.Data["countWaiting"] = countWaiting
|
|
||||||
|
|
||||||
countFailedResp, err := this.RPC().MessageTaskRPC().CountMessageTasksWithStatus(this.AdminContext(), &pb.CountMessageTasksWithStatusRequest{Status: pb.CountMessageTasksWithStatusRequest_MessageTaskStatusFailed})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var countFailed = countFailedResp.Count
|
|
||||||
this.Data["countFailed"] = countFailed
|
|
||||||
|
|
||||||
// 列表
|
|
||||||
var total = int64(0)
|
|
||||||
switch params.Status {
|
|
||||||
case 0:
|
|
||||||
total = countWaiting
|
|
||||||
case 3:
|
|
||||||
total = countFailed
|
|
||||||
}
|
|
||||||
page := this.NewPage(total)
|
|
||||||
this.Data["page"] = page.AsHTML()
|
|
||||||
|
|
||||||
var taskMaps = []maps.Map{}
|
|
||||||
tasksResp, err := this.RPC().MessageTaskRPC().ListMessageTasksWithStatus(this.AdminContext(), &pb.ListMessageTasksWithStatusRequest{
|
|
||||||
Status: pb.ListMessageTasksWithStatusRequest_Status(params.Status),
|
|
||||||
Offset: page.Offset,
|
|
||||||
Size: page.Size,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for _, task := range tasksResp.MessageTasks {
|
|
||||||
var resultMap = maps.Map{}
|
|
||||||
var result = task.Result
|
|
||||||
if result != nil {
|
|
||||||
resultMap = maps.Map{
|
|
||||||
"isOk": result.IsOk,
|
|
||||||
"error": result.Error,
|
|
||||||
"response": result.Response,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//var recipients = []string{}
|
|
||||||
var user = ""
|
|
||||||
var instanceMap maps.Map
|
|
||||||
if task.MessageRecipient != nil {
|
|
||||||
user = task.MessageRecipient.User
|
|
||||||
if task.MessageRecipient.MessageMediaInstance != nil {
|
|
||||||
instanceMap = maps.Map{
|
|
||||||
"id": task.MessageRecipient.MessageMediaInstance.Id,
|
|
||||||
"name": task.MessageRecipient.MessageMediaInstance.Name,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
taskMaps = append(taskMaps, maps.Map{
|
|
||||||
"id": task.Id,
|
|
||||||
"subject": task.Subject,
|
|
||||||
"body": task.Body,
|
|
||||||
"createdTime": timeutil.FormatTime("Y-m-d H:i:s", task.CreatedAt),
|
|
||||||
"result": resultMap,
|
|
||||||
"status": task.Status,
|
|
||||||
"user": user,
|
|
||||||
"instance": instanceMap,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
this.Data["tasks"] = taskMaps
|
|
||||||
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
package tasks
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/configloaders"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/helpers"
|
|
||||||
"github.com/iwind/TeaGo"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
TeaGo.BeforeStart(func(server *TeaGo.Server) {
|
|
||||||
server.
|
|
||||||
Helper(helpers.NewUserMustAuth(configloaders.AdminModuleCodeAdmin)).
|
|
||||||
Data("teaMenu", "admins").
|
|
||||||
Data("teaSubMenu", "recipients").
|
|
||||||
Prefix("/admins/recipients/tasks").
|
|
||||||
Get("", new(IndexAction)).
|
|
||||||
Post("/taskInfo", new(TaskInfoAction)).
|
|
||||||
Post("/delete", new(DeleteAction)).
|
|
||||||
EndAll()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
package tasks
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
|
||||||
|
|
||||||
type TaskInfoAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *TaskInfoAction) Init() {
|
|
||||||
this.Nav("", "", "")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *TaskInfoAction) RunPost(params struct {
|
|
||||||
TaskId int64
|
|
||||||
}) {
|
|
||||||
resp, err := this.RPC().MessageTaskRPC().FindEnabledMessageTask(this.AdminContext(), &pb.FindEnabledMessageTaskRequest{MessageTaskId: params.TaskId})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if resp.MessageTask == nil {
|
|
||||||
this.NotFound("messageTask", params.TaskId)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
result := resp.MessageTask.Result
|
|
||||||
this.Data["status"] = resp.MessageTask.Status
|
|
||||||
this.Data["result"] = maps.Map{
|
|
||||||
"isOk": result.IsOk,
|
|
||||||
"response": result.Response,
|
|
||||||
"error": result.Error,
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Success()
|
|
||||||
}
|
|
||||||
@@ -1,114 +0,0 @@
|
|||||||
package recipients
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/actions"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
)
|
|
||||||
|
|
||||||
type TestAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *TestAction) Init() {
|
|
||||||
this.Nav("", "", "test")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *TestAction) RunGet(params struct {
|
|
||||||
RecipientId int64
|
|
||||||
}) {
|
|
||||||
recipientResp, err := this.RPC().MessageRecipientRPC().FindEnabledMessageRecipient(this.AdminContext(), &pb.FindEnabledMessageRecipientRequest{MessageRecipientId: params.RecipientId})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
recipient := recipientResp.MessageRecipient
|
|
||||||
if recipient == nil || recipient.Admin == nil || recipient.MessageMediaInstance == nil {
|
|
||||||
this.NotFound("messageRecipient", params.RecipientId)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Data["recipient"] = maps.Map{
|
|
||||||
"id": recipient.Id,
|
|
||||||
"admin": maps.Map{
|
|
||||||
"id": recipient.Admin.Id,
|
|
||||||
"fullname": recipient.Admin.Fullname,
|
|
||||||
"username": recipient.Admin.Username,
|
|
||||||
},
|
|
||||||
"instance": maps.Map{
|
|
||||||
"id": recipient.MessageMediaInstance.Id,
|
|
||||||
"name": recipient.MessageMediaInstance.Name,
|
|
||||||
"description": recipient.MessageMediaInstance.Description,
|
|
||||||
},
|
|
||||||
"user": recipient.User,
|
|
||||||
}
|
|
||||||
|
|
||||||
instanceResp, err := this.RPC().MessageMediaInstanceRPC().FindEnabledMessageMediaInstance(this.AdminContext(), &pb.FindEnabledMessageMediaInstanceRequest{MessageMediaInstanceId: recipient.MessageMediaInstance.Id})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
instance := instanceResp.MessageMediaInstance
|
|
||||||
if instance == nil || instance.MessageMedia == nil {
|
|
||||||
this.NotFound("messageMediaInstance", recipient.MessageMediaInstance.Id)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
mediaParams := maps.Map{}
|
|
||||||
if len(instance.ParamsJSON) > 0 {
|
|
||||||
err = json.Unmarshal(instance.ParamsJSON, &mediaParams)
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Data["instance"] = maps.Map{
|
|
||||||
"id": instance.Id,
|
|
||||||
"isOn": instance.IsOn,
|
|
||||||
"media": maps.Map{
|
|
||||||
"type": instance.MessageMedia.Type,
|
|
||||||
"name": instance.MessageMedia.Name,
|
|
||||||
"userDescription": instance.MessageMedia.UserDescription,
|
|
||||||
},
|
|
||||||
"description": instance.Description,
|
|
||||||
"params": mediaParams,
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *TestAction) RunPost(params struct {
|
|
||||||
InstanceId int64
|
|
||||||
Subject string
|
|
||||||
Body string
|
|
||||||
User string
|
|
||||||
|
|
||||||
Must *actions.Must
|
|
||||||
CSRF *actionutils.CSRF
|
|
||||||
}) {
|
|
||||||
params.Must.
|
|
||||||
Field("instanceId", params.InstanceId).
|
|
||||||
Gt(0, "请选择正确的媒介")
|
|
||||||
|
|
||||||
resp, err := this.RPC().MessageTaskRPC().CreateMessageTask(this.AdminContext(), &pb.CreateMessageTaskRequest{
|
|
||||||
RecipientId: 0,
|
|
||||||
InstanceId: params.InstanceId,
|
|
||||||
User: params.User,
|
|
||||||
Subject: params.Subject,
|
|
||||||
Body: params.Body,
|
|
||||||
IsPrimary: true,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
this.Data["taskId"] = resp.MessageTaskId
|
|
||||||
|
|
||||||
defer this.CreateLogInfo(codes.MessageTask_LogCreateTestingMessageTask, resp.MessageTaskId)
|
|
||||||
|
|
||||||
this.Success()
|
|
||||||
}
|
|
||||||
@@ -1,144 +0,0 @@
|
|||||||
package recipients
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/utils"
|
|
||||||
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/langs/codes"
|
|
||||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
||||||
"github.com/iwind/TeaGo/actions"
|
|
||||||
"github.com/iwind/TeaGo/maps"
|
|
||||||
"regexp"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
type UpdateAction struct {
|
|
||||||
actionutils.ParentAction
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *UpdateAction) Init() {
|
|
||||||
this.Nav("", "", "update")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *UpdateAction) RunGet(params struct {
|
|
||||||
RecipientId int64
|
|
||||||
}) {
|
|
||||||
recipientResp, err := this.RPC().MessageRecipientRPC().FindEnabledMessageRecipient(this.AdminContext(), &pb.FindEnabledMessageRecipientRequest{MessageRecipientId: params.RecipientId})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
recipient := recipientResp.MessageRecipient
|
|
||||||
if recipient == nil || recipient.Admin == nil || recipient.MessageMediaInstance == nil {
|
|
||||||
this.NotFound("messageRecipient", params.RecipientId)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var timeFromHour = ""
|
|
||||||
var timeFromMinute = ""
|
|
||||||
var timeFromSecond = ""
|
|
||||||
|
|
||||||
if len(recipient.TimeFrom) > 0 {
|
|
||||||
var pieces = strings.Split(recipient.TimeFrom, ":")
|
|
||||||
timeFromHour = pieces[0]
|
|
||||||
timeFromMinute = pieces[1]
|
|
||||||
timeFromSecond = pieces[2]
|
|
||||||
}
|
|
||||||
|
|
||||||
var timeToHour = ""
|
|
||||||
var timeToMinute = ""
|
|
||||||
var timeToSecond = ""
|
|
||||||
if len(recipient.TimeTo) > 0 {
|
|
||||||
var pieces = strings.Split(recipient.TimeTo, ":")
|
|
||||||
timeToHour = pieces[0]
|
|
||||||
timeToMinute = pieces[1]
|
|
||||||
timeToSecond = pieces[2]
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Data["recipient"] = maps.Map{
|
|
||||||
"id": recipient.Id,
|
|
||||||
"admin": maps.Map{
|
|
||||||
"id": recipient.Admin.Id,
|
|
||||||
"fullname": recipient.Admin.Fullname,
|
|
||||||
"username": recipient.Admin.Username,
|
|
||||||
},
|
|
||||||
"groups": recipient.MessageRecipientGroups,
|
|
||||||
"isOn": recipient.IsOn,
|
|
||||||
"instance": maps.Map{
|
|
||||||
"id": recipient.MessageMediaInstance.Id,
|
|
||||||
"name": recipient.MessageMediaInstance.Name,
|
|
||||||
},
|
|
||||||
"user": recipient.User,
|
|
||||||
"description": recipient.Description,
|
|
||||||
"timeFromHour": timeFromHour,
|
|
||||||
"timeFromMinute": timeFromMinute,
|
|
||||||
"timeFromSecond": timeFromSecond,
|
|
||||||
"timeToHour": timeToHour,
|
|
||||||
"timeToMinute": timeToMinute,
|
|
||||||
"timeToSecond": timeToSecond,
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Show()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *UpdateAction) RunPost(params struct {
|
|
||||||
RecipientId int64
|
|
||||||
|
|
||||||
AdminId int64
|
|
||||||
User string
|
|
||||||
InstanceId int64
|
|
||||||
|
|
||||||
GroupIds string
|
|
||||||
Description string
|
|
||||||
IsOn bool
|
|
||||||
|
|
||||||
TimeFromHour string
|
|
||||||
TimeFromMinute string
|
|
||||||
TimeFromSecond string
|
|
||||||
|
|
||||||
TimeToHour string
|
|
||||||
TimeToMinute string
|
|
||||||
TimeToSecond string
|
|
||||||
|
|
||||||
Must *actions.Must
|
|
||||||
CSRF *actionutils.CSRF
|
|
||||||
}) {
|
|
||||||
defer this.CreateLogInfo(codes.MessageRecipient_LogUpdateMessageRecipient, params.RecipientId)
|
|
||||||
|
|
||||||
params.Must.
|
|
||||||
Field("adminId", params.AdminId).
|
|
||||||
Gt(0, "请选择系统用户").
|
|
||||||
Field("instanceId", params.InstanceId).
|
|
||||||
Gt(0, "请选择媒介")
|
|
||||||
|
|
||||||
groupIds := utils.SplitNumbers(params.GroupIds)
|
|
||||||
|
|
||||||
var digitReg = regexp.MustCompile(`^\d+$`)
|
|
||||||
|
|
||||||
var timeFrom = ""
|
|
||||||
if digitReg.MatchString(params.TimeFromHour) && digitReg.MatchString(params.TimeFromMinute) && digitReg.MatchString(params.TimeFromSecond) {
|
|
||||||
timeFrom = params.TimeFromHour + ":" + params.TimeFromMinute + ":" + params.TimeFromSecond
|
|
||||||
}
|
|
||||||
|
|
||||||
var timeTo = ""
|
|
||||||
if digitReg.MatchString(params.TimeToHour) && digitReg.MatchString(params.TimeToMinute) && digitReg.MatchString(params.TimeToSecond) {
|
|
||||||
timeTo = params.TimeToHour + ":" + params.TimeToMinute + ":" + params.TimeToSecond
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := this.RPC().MessageRecipientRPC().UpdateMessageRecipient(this.AdminContext(), &pb.UpdateMessageRecipientRequest{
|
|
||||||
MessageRecipientId: params.RecipientId,
|
|
||||||
AdminId: params.AdminId,
|
|
||||||
MessageMediaInstanceId: params.InstanceId,
|
|
||||||
User: params.User,
|
|
||||||
MessageRecipientGroupIds: groupIds,
|
|
||||||
Description: params.Description,
|
|
||||||
IsOn: params.IsOn,
|
|
||||||
TimeFrom: timeFrom,
|
|
||||||
TimeTo: timeTo,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
this.ErrorPage(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
this.Success()
|
|
||||||
}
|
|
||||||
@@ -154,17 +154,6 @@ func (this *IndexAction) RunPost(params struct{}) {
|
|||||||
"version": "",
|
"version": "",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if resp.MonitorNodeUpgradeInfo != nil {
|
|
||||||
this.Data["monitorNodeUpgradeInfo"] = maps.Map{
|
|
||||||
"count": resp.MonitorNodeUpgradeInfo.CountNodes,
|
|
||||||
"version": resp.MonitorNodeUpgradeInfo.NewVersion,
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.Data["monitorNodeUpgradeInfo"] = maps.Map{
|
|
||||||
"count": 0,
|
|
||||||
"version": "",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if resp.ApiNodeUpgradeInfo != nil {
|
if resp.ApiNodeUpgradeInfo != nil {
|
||||||
this.Data["apiNodeUpgradeInfo"] = maps.Map{
|
this.Data["apiNodeUpgradeInfo"] = maps.Map{
|
||||||
"count": resp.ApiNodeUpgradeInfo.CountNodes,
|
"count": resp.ApiNodeUpgradeInfo.CountNodes,
|
||||||
|
|||||||
@@ -1,49 +0,0 @@
|
|||||||
{$layout}
|
|
||||||
|
|
||||||
<first-menu>
|
|
||||||
<a href="" class="item" @click.prevent="createNode()">[添加节点]</a>
|
|
||||||
</first-menu>
|
|
||||||
|
|
||||||
<p class="comment" v-if="nodes.length == 0">暂时还没有节点。</p>
|
|
||||||
|
|
||||||
<table class="ui table selectable celled" v-if="nodes.length > 0">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>节点名称</th>
|
|
||||||
<th class="width6 center">版本号</th>
|
|
||||||
<th class="width5 center">CPU</th>
|
|
||||||
<th class="width5 center">内存</th>
|
|
||||||
<th class="center width10">状态</th>
|
|
||||||
<th class="two op">操作</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tr v-for="node in nodes">
|
|
||||||
<td><a :href="'/settings/monitorNodes/node?nodeId=' + node.id">{{node.name}}</a></td>
|
|
||||||
<td class="center">
|
|
||||||
<span v-if="node.status.buildVersion.length > 0">v{{node.status.buildVersion}}</span>
|
|
||||||
<span v-else class="disabled">-</span>
|
|
||||||
</td>
|
|
||||||
<td class="center">
|
|
||||||
<span v-if="node.status.isActive" :class="{red:node.status.cpuUsage > 0.80}">{{node.status.cpuUsageText}}</span>
|
|
||||||
<span v-else class="disabled">-</span>
|
|
||||||
</td>
|
|
||||||
<td class="center">
|
|
||||||
<span v-if="node.status.isActive" :class="{red:node.status.memUsage > 0.80}">{{node.status.memUsageText}}</span>
|
|
||||||
<span v-else class="disabled">-</span>
|
|
||||||
</td>
|
|
||||||
<td class="center">
|
|
||||||
<span v-if="!node.isOn"><label-on :v-is-on="node.isOn"></label-on></span>
|
|
||||||
<div v-else-if="node.status.isActive">
|
|
||||||
<span class="green">运行中</span>
|
|
||||||
</div>
|
|
||||||
<span v-else-if="node.status.updatedAt > 0" class="red">已断开</span>
|
|
||||||
<span v-else-if="node.status.updatedAt == 0" class="red">未连接</span>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a :href="'/settings/monitorNodes/node?nodeId=' + node.id">详情</a>
|
|
||||||
<a href="" @click.prevent="deleteNode(node.id)">删除</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<div class="page" v-html="page"></div>
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
Tea.context(function () {
|
|
||||||
// 创建节点
|
|
||||||
this.createNode = function () {
|
|
||||||
teaweb.popup("/settings/monitorNodes/node/createPopup", {
|
|
||||||
width: "50em",
|
|
||||||
height: "30em",
|
|
||||||
callback: function () {
|
|
||||||
teaweb.success("保存成功", function () {
|
|
||||||
teaweb.reload()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 删除节点
|
|
||||||
this.deleteNode = function (nodeId) {
|
|
||||||
let that = this
|
|
||||||
teaweb.confirm("确定要删除此节点吗?", function () {
|
|
||||||
that.$post("/settings/monitorNodes/delete")
|
|
||||||
.params({
|
|
||||||
nodeId: nodeId
|
|
||||||
})
|
|
||||||
.refresh()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
<first-menu>
|
|
||||||
<menu-item href="/settings/monitorNodes">节点列表</menu-item>
|
|
||||||
<span class="item">|</span>
|
|
||||||
<menu-item :href="'/settings/monitorNodes/node?nodeId=' + node.id" code="index">"{{node.name}}"详情</menu-item>
|
|
||||||
<menu-item :href="'/settings/monitorNodes/node/logs?nodeId=' + node.id" code="log">运行日志</menu-item>
|
|
||||||
<menu-item :href="'/settings/monitorNodes/node/install?nodeId=' + node.id" code="install">安装节点</menu-item>
|
|
||||||
<menu-item :href="'/settings/monitorNodes/node/update?nodeId=' + node.id" code="update">修改节点</menu-item>
|
|
||||||
</first-menu>
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
{$layout "layout_popup"}
|
|
||||||
|
|
||||||
<h3>添加监控节点</h3>
|
|
||||||
<form class="ui form" method="post" data-tea-action="$" data-tea-success="success">
|
|
||||||
<table class="ui table selectable definition">
|
|
||||||
<tr>
|
|
||||||
<td class="title">节点名称 *</td>
|
|
||||||
<td>
|
|
||||||
<input type="text" name="name" maxlength="100" ref="focus"/>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td colspan="2"><more-options-indicator></more-options-indicator></td>
|
|
||||||
</tr>
|
|
||||||
<tbody v-show="moreOptionsVisible">
|
|
||||||
<tr>
|
|
||||||
<td>描述</td>
|
|
||||||
<td>
|
|
||||||
<textarea name="description" maxlength="200" rows="3"></textarea>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>是否启用</td>
|
|
||||||
<td>
|
|
||||||
<div class="ui checkbox">
|
|
||||||
<input type="checkbox" name="isOn" value="1" checked="checked"/>
|
|
||||||
<label></label>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<submit-btn></submit-btn>
|
|
||||||
</form>
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
Tea.context(function () {
|
|
||||||
|
|
||||||
})
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
{$layout}
|
|
||||||
{$template "menu"}
|
|
||||||
|
|
||||||
<table class="ui table selectable definition">
|
|
||||||
<tr>
|
|
||||||
<td class="title">节点名称</td>
|
|
||||||
<td>
|
|
||||||
{{node.name}}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>状态</td>
|
|
||||||
<td>
|
|
||||||
<label-on :v-is-on="node.isOn"></label-on>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>描述</td>
|
|
||||||
<td>
|
|
||||||
<span v-if="node.description.length > 0">{{node.description}}</span>
|
|
||||||
<span v-else class="disabled">暂时还没有描述。</span>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
{$layout}
|
|
||||||
{$template "menu"}
|
|
||||||
{$template "/code_editor"}
|
|
||||||
|
|
||||||
<h3>安装步骤</h3>
|
|
||||||
<ol class="ui list">
|
|
||||||
<li>按照下面的配置信息替换<code-label>configs/api.yaml</code-label>内容;如果文件不存在,请先创建</li>
|
|
||||||
<li>使用<code-label>bin/edge-monitor start</code-label>启动节点</li>
|
|
||||||
<li>可以在<code-label>logs/run.log</code-label>中查看启动是否有异常</li>
|
|
||||||
<li>配置修改后,使用<code-label>bin/edge-monitor restart</code-label>重启节点</li>
|
|
||||||
</ol>
|
|
||||||
|
|
||||||
<div class="ui divider"></div>
|
|
||||||
<h3>配置信息</h3>
|
|
||||||
<table class="ui table definition selectable">
|
|
||||||
<tr>
|
|
||||||
<td class="title">配置文件</td>
|
|
||||||
<td>
|
|
||||||
configs/api.yaml <download-link :v-element="'api-code'" :v-file="'api.yaml'">[下载]</download-link>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td class="title">配置内容</td>
|
|
||||||
<td>
|
|
||||||
<source-code-box id="api-code" type="text/yaml">rpc:
|
|
||||||
endpoints: [ {{apiEndpoints}} ]
|
|
||||||
nodeId: "{{node.uniqueId}}"
|
|
||||||
secret: "{{node.secret}}"</source-code-box>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
{$layout}
|
|
||||||
{$template "menu"}
|
|
||||||
{$template "/datepicker"}
|
|
||||||
|
|
||||||
<div class="margin"></div>
|
|
||||||
<form method="get" action="/settings/monitorNodes/node/logs" class="ui form" autocomplete="off">
|
|
||||||
<input type="hidden" name="nodeId" :value="nodeId"/>
|
|
||||||
<div class="ui fields inline">
|
|
||||||
<div class="ui field">
|
|
||||||
<input type="text" name="dayFrom" placeholder="开始日期" v-model="dayFrom" value="" style="width:8em" id="day-from-picker"/>
|
|
||||||
</div>
|
|
||||||
<div class="ui field">
|
|
||||||
<input type="text" name="dayTo" placeholder="结束日期" v-model="dayTo" value="" style="width:8em" id="day-to-picker"/>
|
|
||||||
</div>
|
|
||||||
<div class="ui field">
|
|
||||||
<select class="ui dropdown" name="level" v-model="level">
|
|
||||||
<option value="">[级别]</option>
|
|
||||||
<option value="error">错误</option>
|
|
||||||
<option value="warning">警告</option>
|
|
||||||
<option value="info">信息</option>
|
|
||||||
<option value="success">成功</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="ui field">
|
|
||||||
<input type="text" name="keyword" style="width:10em" v-model="keyword" placeholder="关键词"/>
|
|
||||||
</div>
|
|
||||||
<div class="ui field">
|
|
||||||
<button type="submit" class="ui button">查询</button>
|
|
||||||
</div>
|
|
||||||
<div class="ui field" v-if="dayFrom.length > 0 || dayTo.length > 0 || keyword.length > 0 || level.length > 0">
|
|
||||||
<a :href="'/settings/monitorNodes/node/logs?nodeId=' + nodeId">[清除条件]</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<p class="comment" v-if="logs.length == 0">暂时还没有日志。</p>
|
|
||||||
|
|
||||||
<table class="ui table selectable" v-if="logs.length > 0">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tr v-for="log in logs">
|
|
||||||
<td>
|
|
||||||
<node-log-row :v-log="log" :v-keyword="keyword"></node-log-row>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<div class="page" v-html="page"></div>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
Tea.context(function () {
|
|
||||||
this.$delay(function () {
|
|
||||||
teaweb.datepicker("day-from-picker")
|
|
||||||
teaweb.datepicker("day-to-picker")
|
|
||||||
})
|
|
||||||
})
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
{$layout}
|
|
||||||
|
|
||||||
{$template "menu"}
|
|
||||||
|
|
||||||
<form method="post" class="ui form" data-tea-action="$" data-tea-success="success">
|
|
||||||
<input type="hidden" name="nodeId" :value="node.id"/>
|
|
||||||
<input type="hidden" name="sslPolicyId" :value="node.sslPolicyId"/>
|
|
||||||
<table class="ui table selectable definition">
|
|
||||||
<tr>
|
|
||||||
<td class="title">节点名称 *</td>
|
|
||||||
<td>
|
|
||||||
<input type="text" name="name" maxlength="100" ref="focus" v-model="node.name"/>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td colspan="2"><more-options-indicator></more-options-indicator></td>
|
|
||||||
</tr>
|
|
||||||
<tbody v-show="moreOptionsVisible">
|
|
||||||
<tr>
|
|
||||||
<td>描述</td>
|
|
||||||
<td>
|
|
||||||
<textarea name="description" maxlength="200" rows="3" v-model="node.description"></textarea>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>是否启用</td>
|
|
||||||
<td>
|
|
||||||
<div class="ui checkbox">
|
|
||||||
<input type="checkbox" name="isOn" value="1" v-model="node.isOn"/>
|
|
||||||
<label></label>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<submit-btn></submit-btn>
|
|
||||||
</form>
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
Tea.context(function () {
|
|
||||||
this.success = NotifySuccess("保存成功", "/settings/monitorNodes/node?nodeId=" + this.node.id)
|
|
||||||
})
|
|
||||||
Reference in New Issue
Block a user