You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2018/12/03 02:56:25 UTC

[servicecomb-service-center] 02/04: SCB-1049 Add alarm model

This is an automated email from the ASF dual-hosted git repository.

littlecui pushed a commit to branch alarm
in repository https://gitbox.apache.org/repos/asf/servicecomb-service-center.git

commit ff2740f4f2649ee0fec6d2341139b780eee91c1b
Author: little-cui <su...@qq.com>
AuthorDate: Thu Nov 29 18:38:42 2018 +0800

    SCB-1049 Add alarm model
---
 server/alarm/alarm.go               | 61 ++++++++++++++++++++++++++++++++++++-
 server/alarm/{alarm.go => field.go} | 32 ++++++++++++++-----
 2 files changed, 84 insertions(+), 9 deletions(-)

diff --git a/server/alarm/alarm.go b/server/alarm/alarm.go
index fc6feef..64281b9 100644
--- a/server/alarm/alarm.go
+++ b/server/alarm/alarm.go
@@ -15,11 +15,70 @@
 
 package alarm
 
+import (
+	nf "github.com/apache/servicecomb-service-center/server/service/notification"
+	"sync/atomic"
+)
+
+type ID int32
+
 const (
-	CodeBackendConnectionRefuse = iota
+	CodeBackendConnectionRefuse ID = iota
 	CodeServerOverload
 	CodeServiceQuotaLimit
 	CodeInstanceQuotaLimit
 	CodeDiagnoseFailure
 	CodeInternalError
+	typeEnd
 )
+
+const Subject = "__ALARM_CENTER__"
+
+var latestId = int32(typeEnd)
+
+type AlarmEvent struct {
+	nf.Event
+	Id     ID
+	fields map[string]interface{}
+}
+
+func (ae *AlarmEvent) FieldBool(key string) bool {
+	v, _ := ae.fields[key].(bool)
+	return v
+}
+
+func (ae *AlarmEvent) FieldString(key string) string {
+	v, _ := ae.fields[key].(string)
+	return v
+}
+
+func (ae *AlarmEvent) FieldInt64(key string) int64 {
+	v, _ := ae.fields[key].(int64)
+	return v
+}
+
+func (ae *AlarmEvent) FieldInt(key string) int {
+	v, _ := ae.fields[key].(int)
+	return v
+}
+
+func (ae *AlarmEvent) FieldFloat64(key string) float64 {
+	v, _ := ae.fields[key].(float64)
+	return v
+}
+
+func RegisterAlarmSource() ID {
+	return ID(atomic.AddInt32(&latestId, 1))
+}
+
+func Alarm(id ID, fields ...Field) error {
+	ae := &AlarmEvent{
+		Event:  nf.NewEvent(nf.NOTIFTY, Subject, ""),
+		Id:     id,
+		fields: make(map[string]interface{}, len(fields)),
+	}
+	for _, f := range fields {
+		ae.fields[f.Key] = f.Value
+	}
+	return nf.GetNotifyService().Publish(ae)
+}
diff --git a/server/alarm/alarm.go b/server/alarm/field.go
similarity index 63%
copy from server/alarm/alarm.go
copy to server/alarm/field.go
index fc6feef..33e6aff 100644
--- a/server/alarm/alarm.go
+++ b/server/alarm/field.go
@@ -15,11 +15,27 @@
 
 package alarm
 
-const (
-	CodeBackendConnectionRefuse = iota
-	CodeServerOverload
-	CodeServiceQuotaLimit
-	CodeInstanceQuotaLimit
-	CodeDiagnoseFailure
-	CodeInternalError
-)
+type Field struct {
+	Key   string
+	Value interface{}
+}
+
+func FieldBool(key string, v bool) Field {
+	return Field{Key: key, Value: v}
+}
+
+func FieldString(key string, v string) Field {
+	return Field{Key: key, Value: v}
+}
+
+func FieldInt64(key string, v int64) Field {
+	return Field{Key: key, Value: v}
+}
+
+func FieldInt(key string, v int) Field {
+	return Field{Key: key, Value: v}
+}
+
+func FieldFloat64(key string, v float64) Field {
+	return Field{Key: key, Value: v}
+}