write new code of an alert event management handler
This commit is contained in:
parent
65f71348d6
commit
58e54afed2
|
|
@ -1,6 +1,8 @@
|
|||
// Package alert define alert event struct of modelRT project
|
||||
package alert
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"sync"
|
||||
|
||||
"modelRT/constant"
|
||||
|
|
@ -23,19 +25,57 @@ type Event struct {
|
|||
|
||||
// EventManager define store and manager alert event struct
|
||||
type EventManager struct {
|
||||
mu sync.RWMutex
|
||||
events map[constant.AlertLevel][]Event
|
||||
}
|
||||
|
||||
// AddEvent 添加一个新的报警事件
|
||||
// EventSet define alert event set implement sort.Interface
|
||||
type EventSet []Event
|
||||
|
||||
func (es EventSet) Len() int {
|
||||
return len(es)
|
||||
}
|
||||
|
||||
func (es EventSet) Less(i, j int) bool {
|
||||
return es[i].StartTime < es[j].StartTime
|
||||
}
|
||||
|
||||
func (es EventSet) Swap(i, j int) {
|
||||
es[i], es[j] = es[j], es[i]
|
||||
}
|
||||
|
||||
// AddEvent define add a alert event to event manager
|
||||
func (am *EventManager) AddEvent(event Event) {
|
||||
am.mu.Lock()
|
||||
defer am.mu.Unlock()
|
||||
|
||||
am.events[event.Level] = append(am.events[event.Level], event)
|
||||
}
|
||||
|
||||
// GetEventsByLevel 根据报警等级查找报警事件
|
||||
// GetEventsByLevel define get alert event by alert level
|
||||
func (am *EventManager) GetEventsByLevel(level constant.AlertLevel) []Event {
|
||||
am.mu.Lock()
|
||||
defer am.mu.Unlock()
|
||||
|
||||
return am.events[level]
|
||||
}
|
||||
|
||||
// GetRangeEventsByLevel define get range alert event by alert level
|
||||
func (am *EventManager) GetRangeEventsByLevel(targetLevel constant.AlertLevel) []Event {
|
||||
var targetEvents []Event
|
||||
|
||||
am.mu.Lock()
|
||||
defer am.mu.Unlock()
|
||||
|
||||
for level, events := range am.events {
|
||||
if targetLevel <= level {
|
||||
targetEvents = append(targetEvents, events...)
|
||||
}
|
||||
}
|
||||
sort.Sort(EventSet(targetEvents))
|
||||
return targetEvents
|
||||
}
|
||||
|
||||
// InitAlertEventManager define new alert event manager
|
||||
func InitAlertEventManager() *EventManager {
|
||||
return &EventManager{
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ type ModelRTConfig struct {
|
|||
PostgresDBURI string `mapstructure:"-"`
|
||||
}
|
||||
|
||||
// ReadAndInitConfig return wave record project config struct
|
||||
// ReadAndInitConfig return modelRT project config struct
|
||||
func ReadAndInitConfig(configDir, configName, configType string) (modelRTConfig ModelRTConfig) {
|
||||
config := viper.New()
|
||||
config.AddConfigPath(configDir)
|
||||
|
|
|
|||
|
|
@ -33,3 +33,25 @@ func (a AlertLevel) String() string {
|
|||
return "Unknown"
|
||||
}
|
||||
}
|
||||
|
||||
func (a AlertLevel) LevelCompare(b AlertLevel) bool {
|
||||
return a <= b
|
||||
}
|
||||
|
||||
// // AlertLevelFromString convert string to alert level
|
||||
// func AlertLevelFromString(level int64) AlertLevel {
|
||||
// switch level {
|
||||
// case :
|
||||
// return AllAlertLevel
|
||||
// case "INFO":
|
||||
// return InfoAlertLevel
|
||||
// case "WARNING":
|
||||
// return WarningAlertLevel
|
||||
// case "ERROR":
|
||||
// return ErrorAlertLevel
|
||||
// case "FATAL":
|
||||
// return FatalAlertLevel
|
||||
// default:
|
||||
// return AllAlertLevel
|
||||
// }
|
||||
// }
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
package constant
|
||||
|
||||
const (
|
||||
// DevelopmentLogMode define development operator environment for wave record project
|
||||
// DevelopmentLogMode define development operator environment for modelRT project
|
||||
DevelopmentLogMode = "development"
|
||||
// ProductionLogMode define production operator environment for wave record project
|
||||
// ProductionLogMode define production operator environment for modelRT project
|
||||
ProductionLogMode = "production"
|
||||
)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,46 @@
|
|||
// Package handler provides HTTP handlers for various endpoints.
|
||||
package handler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"modelRT/alert"
|
||||
"modelRT/constant"
|
||||
"modelRT/logger"
|
||||
"modelRT/network"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// QueryAlertEventHandler define query alert event process API
|
||||
func QueryAlertEventHandler(c *gin.Context) {
|
||||
var targetLevel constant.AlertLevel
|
||||
|
||||
logger := logger.GetLoggerInstance()
|
||||
alertManger := alert.GetAlertMangerInstance()
|
||||
|
||||
levelStr := c.Query("level")
|
||||
level, err := strconv.Atoi(levelStr)
|
||||
if err != nil {
|
||||
logger.Error("convert alert level string to int failed", zap.Error(err))
|
||||
|
||||
resp := network.FailureResponse{
|
||||
Code: -1,
|
||||
Msg: err.Error(),
|
||||
}
|
||||
c.JSON(http.StatusOK, resp)
|
||||
}
|
||||
targetLevel = constant.AlertLevel(level)
|
||||
events := alertManger.GetRangeEventsByLevel(targetLevel)
|
||||
|
||||
resp := network.SuccessResponse{
|
||||
Code: 0,
|
||||
Msg: "success",
|
||||
PayLoad: map[string]interface{}{
|
||||
"events": events,
|
||||
},
|
||||
}
|
||||
c.JSON(http.StatusOK, resp)
|
||||
}
|
||||
|
|
@ -31,9 +31,10 @@ func ComponentAnchorReplaceHandler(c *gin.Context) {
|
|||
var request network.ComponetAnchorReplaceRequest
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
logger.Error("unmarshal component anchor point replace info failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
}
|
||||
c.JSON(http.StatusOK, resp)
|
||||
return
|
||||
|
|
@ -45,9 +46,10 @@ func ComponentAnchorReplaceHandler(c *gin.Context) {
|
|||
result := pgClient.WithContext(cancelCtx).Model(&orm.Component{}).Where("global_uuid = ?", uuid).Find(&componentInfo)
|
||||
if result.Error != nil {
|
||||
logger.Error("query component detail info failed", zap.Error(result.Error))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: result.Error.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: result.Error.Error(),
|
||||
}
|
||||
c.JSON(http.StatusOK, resp)
|
||||
return
|
||||
|
|
@ -56,9 +58,10 @@ func ComponentAnchorReplaceHandler(c *gin.Context) {
|
|||
if result.RowsAffected == 0 {
|
||||
err := fmt.Errorf("query component detail info by uuid failed:%w", constant.ErrQueryRowZero)
|
||||
logger.Error("query component detail info from table is empty", zap.String("table_name", "component"))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
}
|
||||
c.JSON(http.StatusOK, resp)
|
||||
return
|
||||
|
|
@ -71,9 +74,10 @@ func ComponentAnchorReplaceHandler(c *gin.Context) {
|
|||
result = pgClient.WithContext(cancelCtx).Table(tableName).Where("global_uuid = ?", uuid).Find(&unmarshalMap)
|
||||
if result.Error != nil {
|
||||
logger.Error("query model detail info failed", zap.Error(result.Error))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: result.Error.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: result.Error.Error(),
|
||||
}
|
||||
c.JSON(http.StatusOK, resp)
|
||||
return
|
||||
|
|
@ -82,9 +86,10 @@ func ComponentAnchorReplaceHandler(c *gin.Context) {
|
|||
if unmarshalMap == nil {
|
||||
err := fmt.Errorf("query model detail info by uuid failed:%w", constant.ErrQueryRowZero)
|
||||
logger.Error("query model detail info from table is empty", zap.String("table_name", tableName))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
}
|
||||
c.JSON(http.StatusOK, resp)
|
||||
return
|
||||
|
|
@ -97,7 +102,8 @@ func ComponentAnchorReplaceHandler(c *gin.Context) {
|
|||
diagram.UpdateAnchorValue(componentInfo.ID, anchorName)
|
||||
|
||||
resp := network.SuccessResponse{
|
||||
SuccessResponseHeader: network.SuccessResponseHeader{Status: http.StatusOK},
|
||||
Code: http.StatusOK,
|
||||
Msg: "success",
|
||||
PayLoad: map[string]interface{}{
|
||||
"uuid": request.UUID,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -24,9 +24,10 @@ func CircuitDiagramCreateHandler(c *gin.Context) {
|
|||
var request network.CircuitDiagramCreateRequest
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
logger.Error("unmarshal circuit diagram create info failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
}
|
||||
c.JSON(http.StatusOK, resp)
|
||||
return
|
||||
|
|
@ -35,9 +36,10 @@ func CircuitDiagramCreateHandler(c *gin.Context) {
|
|||
graph, err := diagram.GetGraphMap(request.PageID)
|
||||
if err != nil {
|
||||
logger.Error("get topologic data from set by pageID failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"page_id": request.PageID,
|
||||
},
|
||||
|
|
@ -62,9 +64,10 @@ func CircuitDiagramCreateHandler(c *gin.Context) {
|
|||
}
|
||||
|
||||
logger.Error("format uuid from string failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"topologic_info": topologicLink,
|
||||
},
|
||||
|
|
@ -85,9 +88,10 @@ func CircuitDiagramCreateHandler(c *gin.Context) {
|
|||
tx.Rollback()
|
||||
|
||||
logger.Error("create topologic info into DB failed", zap.Any("topologic_info", topologicCreateInfos), zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"topologic_infos": topologicCreateInfos,
|
||||
},
|
||||
|
|
@ -106,9 +110,10 @@ func CircuitDiagramCreateHandler(c *gin.Context) {
|
|||
tx.Rollback()
|
||||
|
||||
logger.Error("insert component info into DB failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"component_infos": request.ComponentInfos,
|
||||
},
|
||||
|
|
@ -123,9 +128,10 @@ func CircuitDiagramCreateHandler(c *gin.Context) {
|
|||
tx.Rollback()
|
||||
|
||||
logger.Error("create component model into DB failed", zap.Any("component_infos", request.ComponentInfos), zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"uuid": request.PageID,
|
||||
"component_infos": request.ComponentInfos,
|
||||
|
|
@ -142,9 +148,10 @@ func CircuitDiagramCreateHandler(c *gin.Context) {
|
|||
tx.Rollback()
|
||||
|
||||
logger.Error("unmarshal component params info failed", zap.String("component_params", componentInfo.Params), zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"uuid": componentInfo.UUID,
|
||||
"component_params": componentInfo.Params,
|
||||
|
|
@ -159,9 +166,10 @@ func CircuitDiagramCreateHandler(c *gin.Context) {
|
|||
tx.Rollback()
|
||||
|
||||
logger.Error("format params json info to map failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"uuid": componentInfo.UUID,
|
||||
"component_params": componentInfo.Params,
|
||||
|
|
@ -182,7 +190,8 @@ func CircuitDiagramCreateHandler(c *gin.Context) {
|
|||
// commit transaction
|
||||
tx.Commit()
|
||||
resp := network.SuccessResponse{
|
||||
SuccessResponseHeader: network.SuccessResponseHeader{Status: http.StatusOK},
|
||||
Code: http.StatusOK,
|
||||
Msg: "success",
|
||||
PayLoad: map[string]interface{}{
|
||||
"page_id": request.PageID,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -29,9 +29,10 @@ func CircuitDiagramDeleteHandler(c *gin.Context) {
|
|||
var request network.CircuitDiagramDeleteRequest
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
logger.Error("unmarshal circuit diagram del info failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
}
|
||||
c.JSON(http.StatusOK, resp)
|
||||
return
|
||||
|
|
@ -40,9 +41,10 @@ func CircuitDiagramDeleteHandler(c *gin.Context) {
|
|||
graph, err := diagram.GetGraphMap(request.PageID)
|
||||
if err != nil {
|
||||
logger.Error("get topologic data from set by pageID failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"page_id": request.PageID,
|
||||
},
|
||||
|
|
@ -67,9 +69,10 @@ func CircuitDiagramDeleteHandler(c *gin.Context) {
|
|||
}
|
||||
|
||||
logger.Error("format uuid from string failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"topologic_info": topologicLink,
|
||||
},
|
||||
|
|
@ -91,9 +94,10 @@ func CircuitDiagramDeleteHandler(c *gin.Context) {
|
|||
tx.Rollback()
|
||||
|
||||
logger.Error("delete topologic info into DB failed", zap.Any("topologic_info", topologicDelInfo), zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"topologic_info": topologicDelInfo,
|
||||
},
|
||||
|
|
@ -107,9 +111,10 @@ func CircuitDiagramDeleteHandler(c *gin.Context) {
|
|||
tx.Rollback()
|
||||
|
||||
logger.Error("delete topologic info failed", zap.Any("topologic_info", topologicDelInfo), zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"topologic_info": topologicDelInfo,
|
||||
},
|
||||
|
|
@ -132,9 +137,10 @@ func CircuitDiagramDeleteHandler(c *gin.Context) {
|
|||
tx.Rollback()
|
||||
|
||||
logger.Error("format uuid from string failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"uuid": componentInfo.UUID,
|
||||
},
|
||||
|
|
@ -155,9 +161,10 @@ func CircuitDiagramDeleteHandler(c *gin.Context) {
|
|||
}
|
||||
|
||||
logger.Error("query component info into postgresDB failed", zap.String("component_global_uuid", componentInfo.UUID), zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"uuid": componentInfo.UUID,
|
||||
},
|
||||
|
|
@ -176,9 +183,10 @@ func CircuitDiagramDeleteHandler(c *gin.Context) {
|
|||
}
|
||||
|
||||
logger.Error("delete component info into postgresDB failed", zap.String("component_global_uuid", componentInfo.UUID), zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"uuid": componentInfo.UUID,
|
||||
},
|
||||
|
|
@ -200,9 +208,10 @@ func CircuitDiagramDeleteHandler(c *gin.Context) {
|
|||
|
||||
msg := fmt.Sprintf("delete component info from table %s failed", modelStruct.ReturnTableName())
|
||||
logger.Error(msg, zap.String("component_global_uuid", componentInfo.UUID), zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"uuid": componentInfo.UUID,
|
||||
},
|
||||
|
|
@ -222,7 +231,8 @@ func CircuitDiagramDeleteHandler(c *gin.Context) {
|
|||
// commit transaction
|
||||
tx.Commit()
|
||||
resp := network.SuccessResponse{
|
||||
SuccessResponseHeader: network.SuccessResponseHeader{Status: http.StatusOK},
|
||||
Code: http.StatusOK,
|
||||
Msg: "success",
|
||||
PayLoad: map[string]interface{}{
|
||||
"page_id": request.PageID,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -31,9 +31,10 @@ func CircuitDiagramLoadHandler(c *gin.Context) {
|
|||
pageID, err := strconv.ParseInt(c.Query("page_id"), 10, 64)
|
||||
if err != nil {
|
||||
logger.Error("get pageID from url param failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"page_id": pageID,
|
||||
},
|
||||
|
|
@ -45,9 +46,10 @@ func CircuitDiagramLoadHandler(c *gin.Context) {
|
|||
topologicInfo, err := diagram.GetGraphMap(pageID)
|
||||
if err != nil {
|
||||
logger.Error("get topologic data from set by pageID failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"page_id": pageID,
|
||||
},
|
||||
|
|
@ -66,9 +68,9 @@ func CircuitDiagramLoadHandler(c *gin.Context) {
|
|||
if err != nil {
|
||||
logger.Error("get component id info from DB by uuid failed", zap.Error(err))
|
||||
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"uuid": componentUUID,
|
||||
},
|
||||
|
|
@ -80,9 +82,10 @@ func CircuitDiagramLoadHandler(c *gin.Context) {
|
|||
componentParams, err := diagram.GetComponentMap(component.ID)
|
||||
if err != nil {
|
||||
logger.Error("get component data from set by uuid failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"uuid": componentUUID,
|
||||
},
|
||||
|
|
@ -99,9 +102,9 @@ func CircuitDiagramLoadHandler(c *gin.Context) {
|
|||
if err != nil {
|
||||
logger.Error("get component id info from DB by uuid failed", zap.Error(err))
|
||||
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"uuid": topologicInfo.RootVertex,
|
||||
},
|
||||
|
|
@ -113,9 +116,10 @@ func CircuitDiagramLoadHandler(c *gin.Context) {
|
|||
rootComponentParam, err := diagram.GetComponentMap(rootComponent.ID)
|
||||
if err != nil {
|
||||
logger.Error("get component data from set by uuid failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"uuid": rootVertexUUID,
|
||||
},
|
||||
|
|
@ -128,10 +132,8 @@ func CircuitDiagramLoadHandler(c *gin.Context) {
|
|||
payLoad["component_params"] = componentParamMap
|
||||
|
||||
resp := network.SuccessResponse{
|
||||
SuccessResponseHeader: network.SuccessResponseHeader{
|
||||
Status: http.StatusOK,
|
||||
ErrMsg: "",
|
||||
},
|
||||
Code: http.StatusOK,
|
||||
Msg: "success",
|
||||
PayLoad: payLoad,
|
||||
}
|
||||
c.JSON(http.StatusOK, resp)
|
||||
|
|
|
|||
|
|
@ -22,9 +22,10 @@ func CircuitDiagramUpdateHandler(c *gin.Context) {
|
|||
var request network.CircuitDiagramUpdateRequest
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
logger.Error("unmarshal circuit diagram update info failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
}
|
||||
c.JSON(http.StatusOK, resp)
|
||||
return
|
||||
|
|
@ -33,9 +34,10 @@ func CircuitDiagramUpdateHandler(c *gin.Context) {
|
|||
graph, err := diagram.GetGraphMap(request.PageID)
|
||||
if err != nil {
|
||||
logger.Error("get topologic data from set by pageID failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"page_id": request.PageID,
|
||||
},
|
||||
|
|
@ -49,9 +51,10 @@ func CircuitDiagramUpdateHandler(c *gin.Context) {
|
|||
changeInfo, err := network.ParseUUID(topologicLink)
|
||||
if err != nil {
|
||||
logger.Error("format uuid from string failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"topologic_info": topologicLink,
|
||||
},
|
||||
|
|
@ -71,9 +74,10 @@ func CircuitDiagramUpdateHandler(c *gin.Context) {
|
|||
tx.Rollback()
|
||||
|
||||
logger.Error("update topologic info into DB failed", zap.Any("topologic_info", topologicChangeInfo), zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"topologic_info": topologicChangeInfo,
|
||||
},
|
||||
|
|
@ -87,9 +91,10 @@ func CircuitDiagramUpdateHandler(c *gin.Context) {
|
|||
tx.Rollback()
|
||||
|
||||
logger.Error("update topologic info failed", zap.Any("topologic_info", topologicChangeInfo), zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"topologic_info": topologicChangeInfo,
|
||||
},
|
||||
|
|
@ -103,9 +108,10 @@ func CircuitDiagramUpdateHandler(c *gin.Context) {
|
|||
componentID, err := database.UpdateComponentIntoDB(c, tx, componentInfo)
|
||||
if err != nil {
|
||||
logger.Error("udpate component info into DB failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"page_id": request.PageID,
|
||||
"component_info": request.ComponentInfos,
|
||||
|
|
@ -120,9 +126,10 @@ func CircuitDiagramUpdateHandler(c *gin.Context) {
|
|||
err = database.UpdateModelIntoDB(c, tx, componentID, componentInfo.ComponentType, componentInfo.Params)
|
||||
if err != nil {
|
||||
logger.Error("udpate component model info into DB failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"page_id": request.PageID,
|
||||
"component_info": request.ComponentInfos,
|
||||
|
|
@ -137,9 +144,10 @@ func CircuitDiagramUpdateHandler(c *gin.Context) {
|
|||
paramsJSON, err := simplejson.NewJson([]byte(componentInfo.Params))
|
||||
if err != nil {
|
||||
logger.Error("unmarshal component info by concurrent map failed", zap.String("component_params", componentInfo.Params), zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"uuid": componentInfo.UUID,
|
||||
"component_params": componentInfo.Params,
|
||||
|
|
@ -152,9 +160,10 @@ func CircuitDiagramUpdateHandler(c *gin.Context) {
|
|||
componentMap, err := paramsJSON.Map()
|
||||
if err != nil {
|
||||
logger.Error("format params json info to map failed", zap.Error(err))
|
||||
header := network.FailResponseHeader{Status: http.StatusBadRequest, ErrMsg: err.Error()}
|
||||
|
||||
resp := network.FailureResponse{
|
||||
FailResponseHeader: header,
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
PayLoad: map[string]interface{}{
|
||||
"uuid": componentInfo.UUID,
|
||||
"component_params": componentInfo.Params,
|
||||
|
|
@ -176,7 +185,8 @@ func CircuitDiagramUpdateHandler(c *gin.Context) {
|
|||
tx.Commit()
|
||||
|
||||
resp := network.SuccessResponse{
|
||||
SuccessResponseHeader: network.SuccessResponseHeader{Status: http.StatusOK},
|
||||
Code: http.StatusOK,
|
||||
Msg: "success",
|
||||
PayLoad: map[string]interface{}{
|
||||
"page_id": request.PageID,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -0,0 +1,46 @@
|
|||
// Package handler provides HTTP handlers for various endpoints.
|
||||
package handler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"modelRT/alert"
|
||||
"modelRT/constant"
|
||||
"modelRT/logger"
|
||||
"modelRT/network"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// QueryRealTimeDataHandler define query real time data process API
|
||||
func QueryRealTimeDataHandler(c *gin.Context) {
|
||||
var targetLevel constant.AlertLevel
|
||||
|
||||
logger := logger.GetLoggerInstance()
|
||||
alertManger := alert.GetAlertMangerInstance()
|
||||
|
||||
levelStr := c.Query("level")
|
||||
level, err := strconv.Atoi(levelStr)
|
||||
if err != nil {
|
||||
logger.Error("convert alert level string to int failed", zap.Error(err))
|
||||
|
||||
resp := network.FailureResponse{
|
||||
Code: http.StatusBadRequest,
|
||||
Msg: err.Error(),
|
||||
}
|
||||
c.JSON(http.StatusOK, resp)
|
||||
}
|
||||
targetLevel = constant.AlertLevel(level)
|
||||
events := alertManger.GetRangeEventsByLevel(targetLevel)
|
||||
|
||||
resp := network.SuccessResponse{
|
||||
Code: http.StatusOK,
|
||||
Msg: "success",
|
||||
PayLoad: map[string]interface{}{
|
||||
"events": events,
|
||||
},
|
||||
}
|
||||
c.JSON(http.StatusOK, resp)
|
||||
}
|
||||
|
|
@ -87,10 +87,10 @@ func RealTimeDataReceivehandler(c *gin.Context) {
|
|||
}
|
||||
|
||||
func processResponse(code int64, msg string, payload map[string]interface{}) []byte {
|
||||
resp := network.RealTimeDataReceiveResponse{
|
||||
Code: code,
|
||||
Msg: msg,
|
||||
PayLoad: payload,
|
||||
resp := map[string]interface{}{
|
||||
"code": code,
|
||||
"msg": msg,
|
||||
"payload": payload,
|
||||
}
|
||||
|
||||
respByte, err := jsoniter.Marshal(resp)
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
// Package logger define log struct of wave record project
|
||||
// Package logger define log struct of modelRT project
|
||||
package logger
|
||||
|
||||
import (
|
||||
|
|
|
|||
6
main.go
6
main.go
|
|
@ -127,6 +127,12 @@ func main() {
|
|||
// anchor api
|
||||
engine.POST("/model/anchor_replace", handler.ComponentAnchorReplaceHandler)
|
||||
|
||||
// alert api
|
||||
engine.GET("/alert/events/query", handler.QueryAlertEventHandler)
|
||||
|
||||
// real time data api
|
||||
engine.GET("/rt/datas/query", handler.QueryRealTimeDataHandler)
|
||||
|
||||
// dashborad api
|
||||
dashboard := engine.Group("/dashboard", limiter.Middleware)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,9 +0,0 @@
|
|||
// Package network define struct of network operation
|
||||
package network
|
||||
|
||||
// RealTimeDataReceiveResponse defines response params of real time data receive api
|
||||
type RealTimeDataReceiveResponse struct {
|
||||
Code int64 `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
PayLoad map[string]interface{} `json:"payload"`
|
||||
}
|
||||
|
|
@ -1,22 +1,14 @@
|
|||
// Package network define struct of network operation
|
||||
package network
|
||||
|
||||
type SuccessResponseHeader struct {
|
||||
Status int `json:"status" example:"200"`
|
||||
ErrMsg string `json:"err_msg"`
|
||||
}
|
||||
|
||||
type FailResponseHeader struct {
|
||||
Status int `json:"status" example:"400"`
|
||||
ErrMsg string `json:"err_msg"`
|
||||
}
|
||||
|
||||
type FailureResponse struct {
|
||||
FailResponseHeader `json:"header"`
|
||||
PayLoad map[string]interface{} `json:"payload" swaggertype:"object,string" example:"key:value"`
|
||||
Code int `json:"code" example:"200"`
|
||||
Msg string `json:"msg"`
|
||||
PayLoad map[string]interface{} `json:"payload" swaggertype:"object,string" example:"key:value"`
|
||||
}
|
||||
|
||||
type SuccessResponse struct {
|
||||
SuccessResponseHeader `json:"header"`
|
||||
PayLoad map[string]interface{} `json:"payload" swaggertype:"object,string" example:"key:value"`
|
||||
Code int `json:"code" example:"200"`
|
||||
Msg string `json:"msg"`
|
||||
PayLoad map[string]interface{} `json:"payload" swaggertype:"object,string" example:"key:value"`
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue