Skip to content

Commit

Permalink
feat(notify): add AlarmPolicyType and ReceiverChannelName to Message
Browse files Browse the repository at this point in the history
Signed-off-by: Feng Kun <[email protected]>
  • Loading branch information
kevinfeng authored and tke-robot committed May 18, 2020
1 parent 5271b65 commit 8528873
Show file tree
Hide file tree
Showing 9 changed files with 303 additions and 164 deletions.
4 changes: 4 additions & 0 deletions api/notify/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,10 @@ type MessageSpec struct {
ChannelMessageID string
// +optional
AlarmPolicyName string
// +optional
AlarmPolicyType string
// +optional
ReceiverChannelName string
}

// MessageStatus represents information about the status of a message.
Expand Down
5 changes: 4 additions & 1 deletion api/notify/v1/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,10 @@ func AddFieldLabelConversionsForMessage(scheme *runtime.Scheme) error {
"spec.username",
"spec.channelMessageID",
"status.phase",
"metadata.name":
"metadata.name",
"spec.alarmPolicyName",
"spec.alarmPolicyType",
"spec.receiverChannelName":
return label, value, nil
default:
return "", "", fmt.Errorf("field label not supported: %s", label)
Expand Down
310 changes: 196 additions & 114 deletions api/notify/v1/generated.pb.go

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions api/notify/v1/generated.proto

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions api/notify/v1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,10 @@ type MessageSpec struct {
ChannelMessageID string `json:"channelMessageID,omitempty" protobuf:"bytes,8,opt,name=channelMessageID"`
// +optional
AlarmPolicyName string `json:"alarmPolicyName,omitempty" protobuf:"bytes,9,opt,name=alarmPolicyName"`
// +optional
AlarmPolicyType string `json:"alarmPolicyType,omitempty" protobuf:"bytes,10,opt,name=alarmPolicyType"`
// +optional
ReceiverChannelName string `json:"receiverChannelName,omitempty" protobuf:"bytes,11,opt,name=receiverChannelName"`
}

// MessageStatus represents information about the status of a message.
Expand Down
4 changes: 4 additions & 0 deletions api/notify/v1/zz_generated.conversion.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions api/openapi/zz_generated.openapi.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

106 changes: 62 additions & 44 deletions pkg/notify/controller/messagerequest/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -289,14 +289,16 @@ func (c *Controller) persistUpdate(ctx context.Context, messageRequest *v1.Messa
}

type sentMessage struct {
receiverName string
receiverChannel v1.ReceiverChannel
identity string
username string
header string
body string
messageID string
alarmPolicyName string
receiverName string
receiverChannel v1.ReceiverChannel
identity string
username string
header string
body string
messageID string
alarmPolicyName string
alarmPolicyType string
receiverChannelName string
}

func (c *Controller) sendMessage(ctx context.Context, messageRequest *v1.MessageRequest) (sentMessages []sentMessage, failedReceiverErrors map[string]string) {
Expand Down Expand Up @@ -354,22 +356,30 @@ func (c *Controller) sendMessage(ctx context.Context, messageRequest *v1.Message
}
receivers = append(receivers, receiver)
}
var alarmPolicyName string
var (
alarmPolicyName string
alarmPolicyType string
)
if v, ok := messageRequest.Spec.Variables["alarmPolicyName"]; ok {
alarmPolicyName = v
}
if v, ok := messageRequest.Spec.Variables["alarmPolicyType"]; ok {
alarmPolicyType = v
}
if channel.Spec.Webhook != nil && template.Spec.Text != nil {
content, err := webhook.Send(channel.Spec.Webhook, template.Spec.Text, receivers, messageRequest.Spec.Variables)
if err != nil {
failedReceiverErrors[strings.Join(receiversSet.List(), ",")] = err.Error()
return
}
sentMessages = append(sentMessages, sentMessage{
receiverName: strings.Join(receiversSet.List(), ","),
receiverChannel: v1.ReceiverChannelWebhook,
identity: channel.Spec.Webhook.URL,
body: content,
alarmPolicyName: alarmPolicyName,
receiverName: strings.Join(receiversSet.List(), ","),
receiverChannel: v1.ReceiverChannelWebhook,
identity: channel.Spec.Webhook.URL,
body: content,
alarmPolicyName: alarmPolicyName,
alarmPolicyType: alarmPolicyType,
receiverChannelName: channel.Name,
})
return
}
Expand All @@ -393,13 +403,15 @@ func (c *Controller) sendMessage(ctx context.Context, messageRequest *v1.Message
continue
}
sentMessages = append(sentMessages, sentMessage{
receiverName: receiverName,
receiverChannel: v1.ReceiverChannelMobile,
identity: mobile,
username: receiver.Spec.Username,
body: body,
messageID: messageID,
alarmPolicyName: alarmPolicyName,
receiverName: receiverName,
receiverChannel: v1.ReceiverChannelMobile,
identity: mobile,
username: receiver.Spec.Username,
body: body,
messageID: messageID,
alarmPolicyName: alarmPolicyName,
alarmPolicyType: alarmPolicyType,
receiverChannelName: channel.Name,
})
}
if template.Spec.Wechat != nil {
Expand All @@ -419,13 +431,15 @@ func (c *Controller) sendMessage(ctx context.Context, messageRequest *v1.Message
continue
}
sentMessages = append(sentMessages, sentMessage{
receiverName: receiverName,
username: receiver.Spec.Username,
receiverChannel: v1.ReceiverChannelWechatOpenID,
identity: openID,
body: body,
messageID: messageID,
alarmPolicyName: alarmPolicyName,
receiverName: receiverName,
username: receiver.Spec.Username,
receiverChannel: v1.ReceiverChannelWechatOpenID,
identity: openID,
body: body,
messageID: messageID,
alarmPolicyName: alarmPolicyName,
alarmPolicyType: alarmPolicyType,
receiverChannelName: channel.Name,
})
}
if template.Spec.Text != nil {
Expand All @@ -445,13 +459,15 @@ func (c *Controller) sendMessage(ctx context.Context, messageRequest *v1.Message
continue
}
sentMessages = append(sentMessages, sentMessage{
receiverName: receiverName,
username: receiver.Spec.Username,
receiverChannel: v1.ReceiverChannelEmail,
identity: email,
header: header,
body: body,
alarmPolicyName: alarmPolicyName,
receiverName: receiverName,
username: receiver.Spec.Username,
receiverChannel: v1.ReceiverChannelEmail,
identity: email,
header: header,
body: body,
alarmPolicyName: alarmPolicyName,
alarmPolicyType: alarmPolicyType,
receiverChannelName: channel.Name,
})
}
if templateCount == 0 {
Expand All @@ -468,15 +484,17 @@ func (c *Controller) archiveMessage(ctx context.Context, messageRequest *v1.Mess
Name: fmt.Sprintf("%s-%s", messageRequest.ObjectMeta.Name, strings.Split(sentMessage.receiverName, ",")[0]),
},
Spec: v1.MessageSpec{
TenantID: messageRequest.Spec.TenantID,
ReceiverName: sentMessage.receiverName,
ReceiverChannel: sentMessage.receiverChannel,
Identity: sentMessage.identity,
Username: sentMessage.username,
Header: sentMessage.header,
Body: sentMessage.body,
ChannelMessageID: sentMessage.messageID,
AlarmPolicyName: sentMessage.alarmPolicyName,
TenantID: messageRequest.Spec.TenantID,
ReceiverName: sentMessage.receiverName,
ReceiverChannel: sentMessage.receiverChannel,
Identity: sentMessage.identity,
Username: sentMessage.username,
Header: sentMessage.header,
Body: sentMessage.body,
ChannelMessageID: sentMessage.messageID,
AlarmPolicyName: sentMessage.alarmPolicyName,
AlarmPolicyType: sentMessage.alarmPolicyType,
ReceiverChannelName: sentMessage.receiverChannelName,
},
Status: v1.MessageStatus{
Phase: v1.MessageUnread,
Expand Down
16 changes: 11 additions & 5 deletions pkg/notify/registry/message/strategy.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,9 @@ func MatchMessage(label labels.Selector, field fields.Selector) storage.Selectio
"spec.channelMessageID",
"status.phase",
"metadata.name",
"spec.alarmPolicyName",
"spec.alarmPolicyType",
"spec.receiverChannelName",
},
}
}
Expand All @@ -146,11 +149,14 @@ func MatchMessage(label labels.Selector, field fields.Selector) storage.Selectio
func ToSelectableFields(message *notify.Message) fields.Set {
objectMetaFieldsSet := genericregistry.ObjectMetaFieldsSet(&message.ObjectMeta, false)
specificFieldsSet := fields.Set{
"spec.tenantID": message.Spec.TenantID,
"spec.receiverName": message.Spec.ReceiverName,
"spec.username": message.Spec.Username,
"spec.channelMessageID": message.Spec.ChannelMessageID,
"status.phase": string(message.Status.Phase),
"spec.tenantID": message.Spec.TenantID,
"spec.receiverName": message.Spec.ReceiverName,
"spec.username": message.Spec.Username,
"spec.channelMessageID": message.Spec.ChannelMessageID,
"status.phase": string(message.Status.Phase),
"spec.alarmPolicyName": message.Spec.AlarmPolicyName,
"spec.alarmPolicyType": message.Spec.AlarmPolicyType,
"spec.receiverChannelName": message.Spec.ReceiverChannelName,
}
return genericregistry.MergeFieldsSets(objectMetaFieldsSet, specificFieldsSet)
}
Expand Down

0 comments on commit 8528873

Please sign in to comment.