重构
This commit is contained in:
22
handle/api/close_conn_alarm.go
Normal file
22
handle/api/close_conn_alarm.go
Normal file
@@ -0,0 +1,22 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"omc/core"
|
||||
|
||||
"github.com/aceld/zinx/ziface"
|
||||
"github.com/aceld/zinx/znet"
|
||||
)
|
||||
|
||||
var CloseConnAlarmMsgID uint32 = 10
|
||||
var CloseConnAlarmMsgType uint32 = 10
|
||||
var CloseConnAlarmMsgName string = "closeConnAlarm"
|
||||
|
||||
// closeConnAlarm 关闭连接
|
||||
type CloseConnAlarm struct {
|
||||
znet.BaseRouter
|
||||
}
|
||||
|
||||
func (s *CloseConnAlarm) Handle(request ziface.IRequest) {
|
||||
request.GetConnection().Stop()
|
||||
request.GetConnection().SendMsg(CloseConnAlarmMsgType, core.ResultSuccess(CloseConnAlarmMsgName, "", ""))
|
||||
}
|
||||
46
handle/api/req_cmca_login_alarm.go
Normal file
46
handle/api/req_cmca_login_alarm.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"omc/core"
|
||||
"omc/core/manage"
|
||||
"omc/core/utils"
|
||||
|
||||
"github.com/aceld/zinx/ziface"
|
||||
"github.com/aceld/zinx/zlog"
|
||||
"github.com/aceld/zinx/znet"
|
||||
)
|
||||
|
||||
var ReqCMCALoginAlarmMsgID uint32 = 11
|
||||
var ReqCMCALoginAlarmMsgType uint32 = 11
|
||||
var ReqCMCALoginAlarmMsgName string = "reqCMCALoginAlarm"
|
||||
|
||||
// reqCMCALoginAlarm CMCA认证方式登录
|
||||
type ReqCMCALoginAlarm struct {
|
||||
znet.BaseRouter
|
||||
}
|
||||
|
||||
func (*ReqCMCALoginAlarm) Handle(request ziface.IRequest) {
|
||||
|
||||
// 获取当前请求的通道
|
||||
m := manage.GetManager(request.GetConnection().GetName())
|
||||
if m == nil {
|
||||
zlog.Ins().ErrorF("server internal error")
|
||||
request.GetConnection().SendMsg(ReqLoginAlarmMsgType, core.ResultError(ReqLoginAlarmMsgName, "server internal error", ""))
|
||||
return
|
||||
}
|
||||
uid, err := request.GetConnection().GetProperty("UID")
|
||||
if err != nil {
|
||||
zlog.Ins().ErrorF("GetProperty UID error %s", err)
|
||||
request.GetConnection().Stop()
|
||||
return
|
||||
}
|
||||
// seqNo 32位长度 0-9A-Z
|
||||
seqNo := utils.SeqNo(32)
|
||||
m.SetSeqNo(uid.(string), seqNo)
|
||||
|
||||
// 发送信息
|
||||
msgData := map[string]string{
|
||||
"seqNo": seqNo,
|
||||
}
|
||||
request.GetConnection().SendMsg(ReqCMCALoginAlarmMsgType, core.Result(ReqCMCALoginAlarmMsgName, msgData))
|
||||
}
|
||||
83
handle/api/req_cmca_login_seq copy.go
Normal file
83
handle/api/req_cmca_login_seq copy.go
Normal file
@@ -0,0 +1,83 @@
|
||||
package api
|
||||
|
||||
// import (
|
||||
// "omc/core"
|
||||
// "omc/core/manage"
|
||||
// "omc/core/parse"
|
||||
// "omc/handle/service"
|
||||
|
||||
// "github.com/aceld/zinx/ziface"
|
||||
// "github.com/aceld/zinx/zlog"
|
||||
// "github.com/aceld/zinx/znet"
|
||||
// )
|
||||
|
||||
// var ReqCMCALoginSeqMsgID uint32 = 12
|
||||
// var ReqCMCALoginSeqMsgType uint32 = 13
|
||||
// var ReqCMCALoginSeqMsgName string = "ackCMCALoginSeq"
|
||||
|
||||
// // reqCMCALoginSeq CMCA认证方式登录随机码
|
||||
// type ReqCMCALoginSeq struct {
|
||||
// znet.BaseRouter
|
||||
// }
|
||||
|
||||
// // reqCMCALoginAlarm;user=omc;key=base64Key;cert=cer;type=msg"
|
||||
// func (s *ReqCMCALoginSeq) Handle(request ziface.IRequest) {
|
||||
// // 登录消息处理
|
||||
// body, err := parse.RequestBodyDecode(request, []string{"user", "key", "cert", "type"})
|
||||
// if err != nil {
|
||||
// zlog.Ins().ErrorF("inlaid message body %s", err.Error())
|
||||
// request.GetConnection().SendMsg(ReqCMCALoginSeqMsgType, core.ResultError(ReqCMCALoginSeqMsgName, err.Error(), ""))
|
||||
// return
|
||||
// }
|
||||
|
||||
// // 获取当前请求的通道
|
||||
// m := manage.GetManager(request.GetConnection().GetName())
|
||||
// if m == nil {
|
||||
// zlog.Ins().ErrorF("server internal error")
|
||||
// request.GetConnection().SendMsg(ReqLoginAlarmMsgType, core.ResultError(ReqLoginAlarmMsgName, "server internal error", ""))
|
||||
// return
|
||||
// }
|
||||
// uid, err := request.GetConnection().GetProperty("UID")
|
||||
// if err != nil {
|
||||
// zlog.Ins().ErrorF("GetProperty UID error %s", err)
|
||||
// request.GetConnection().Stop()
|
||||
// return
|
||||
// }
|
||||
|
||||
// // 账户和消息类型
|
||||
// username := body.Data["key"]
|
||||
// tp := body.Data["type"]
|
||||
|
||||
// //登录信息check
|
||||
// seqNo := m.GetUserByPID(uid.(string)).SeqNo
|
||||
// if ok, err := service.CMCALogin(seqNo, username, body.Data["cert"]); !ok || err != nil {
|
||||
// zlog.Ins().ErrorF("LoginFail %s", err)
|
||||
// request.GetConnection().SendMsg(ReqLoginAlarmMsgType, core.Result(ReqLoginAlarmMsgName, map[string]string{
|
||||
// "result": "autherror",
|
||||
// "resDesc": err.Error(),
|
||||
// }))
|
||||
// // 已登录的,登录错误超过3次,断开连接
|
||||
// if uid != nil || uid != "" {
|
||||
// isClose, _ := m.LoginFail(uid.(string))
|
||||
// if isClose {
|
||||
// request.GetConnection().Stop()
|
||||
// return
|
||||
// }
|
||||
// }
|
||||
// return
|
||||
// }
|
||||
|
||||
// // manager 用户登录更新
|
||||
// err = m.LoginSuccess(uid.(string), username, tp)
|
||||
// if err != nil {
|
||||
// zlog.Ins().ErrorF("manager:%s", err)
|
||||
// request.GetConnection().SendMsg(ReqLoginAlarmMsgType, core.Result(ReqLoginAlarmMsgName, map[string]string{
|
||||
// "result": "autherror",
|
||||
// "resDesc": err.Error(),
|
||||
// }))
|
||||
// return
|
||||
// }
|
||||
|
||||
// zlog.Ins().InfoF("user login loginSuccess,username:%s, type:%s, channel:%s", username, tp, request.GetConnection().GetName())
|
||||
// request.GetConnection().SendMsg(ReqLoginAlarmMsgType, core.ResultSuccess(ReqLoginAlarmMsgName, "", ""))
|
||||
// }
|
||||
47
handle/api/req_cmca_login_seq.go
Normal file
47
handle/api/req_cmca_login_seq.go
Normal file
@@ -0,0 +1,47 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"omc/core"
|
||||
"omc/core/manage"
|
||||
"omc/core/utils"
|
||||
|
||||
"github.com/aceld/zinx/ziface"
|
||||
"github.com/aceld/zinx/zlog"
|
||||
"github.com/aceld/zinx/znet"
|
||||
)
|
||||
|
||||
var ReqCMCALoginSeqMsgID uint32 = 12
|
||||
var ReqCMCALoginSeqMsgType uint32 = 13
|
||||
var ReqCMCALoginSeqMsgName string = "ackCMCALoginSeq"
|
||||
|
||||
// reqCMCALoginSeq CMCA认证方式登录随机码
|
||||
type ReqCMCALoginSeq struct {
|
||||
znet.BaseRouter
|
||||
}
|
||||
|
||||
// reqCMCALoginAlarm;user=omc;key=base64Key;cert=cer;type=msg"
|
||||
func (s *ReqCMCALoginSeq) Handle(request ziface.IRequest) {
|
||||
|
||||
// 获取当前请求的通道
|
||||
m := manage.GetManager(request.GetConnection().GetName())
|
||||
if m == nil {
|
||||
zlog.Ins().ErrorF("server internal error")
|
||||
request.GetConnection().SendMsg(ReqCMCALoginSeqMsgType, core.ResultError(ReqCMCALoginSeqMsgName, "server internal error", ""))
|
||||
return
|
||||
}
|
||||
uid, err := request.GetConnection().GetProperty("UID")
|
||||
if err != nil {
|
||||
zlog.Ins().ErrorF("GetProperty UID error %s", err)
|
||||
request.GetConnection().Stop()
|
||||
return
|
||||
}
|
||||
// seqNo 32位长度 0-9A-Z
|
||||
seqNo := utils.SeqNo(32)
|
||||
m.SetSeqNo(uid.(string), seqNo)
|
||||
|
||||
// 发送信息
|
||||
msgData := map[string]string{
|
||||
"seqNo": seqNo,
|
||||
}
|
||||
request.GetConnection().SendMsg(ReqCMCALoginSeqMsgType, core.Result(ReqCMCALoginSeqMsgName, msgData))
|
||||
}
|
||||
40
handle/api/req_heart_beat.go
Normal file
40
handle/api/req_heart_beat.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"omc/core"
|
||||
"omc/core/parse"
|
||||
|
||||
"github.com/aceld/zinx/ziface"
|
||||
"github.com/aceld/zinx/zlog"
|
||||
"github.com/aceld/zinx/znet"
|
||||
)
|
||||
|
||||
var ReqHeartBeatMsgID uint32 = 8
|
||||
var ReqHeartBeatMsgType uint32 = 9
|
||||
var ReqHeartBeatName string = "ackHeartBeat"
|
||||
|
||||
// ReqHeartBeat 心跳
|
||||
type ReqHeartBeat struct {
|
||||
znet.BaseRouter
|
||||
}
|
||||
|
||||
// reqHeartBeat;reqId=12
|
||||
func (s *ReqHeartBeat) Handle(request ziface.IRequest) {
|
||||
// 解包
|
||||
body, err := parse.RequestBodyDecode(request, nil)
|
||||
if err != nil {
|
||||
zlog.Ins().ErrorF("inlaid message body %s", err.Error())
|
||||
request.GetConnection().SendMsg(ReqHeartBeatMsgType, core.ResultError(ReqHeartBeatName, "inlaid message body", ""))
|
||||
return
|
||||
}
|
||||
|
||||
reqId, ok := body.Data["reqId"]
|
||||
if !ok {
|
||||
zlog.Ins().ErrorF("missing parameter of message body")
|
||||
request.GetConnection().SendMsg(ReqHeartBeatMsgType, core.ResultError(ReqHeartBeatName, "missing parameter of message body", ""))
|
||||
return
|
||||
}
|
||||
|
||||
//ack
|
||||
request.GetConnection().SendMsg(ReqHeartBeatMsgType, core.ResultSuccess(ReqHeartBeatName, "ok", reqId))
|
||||
}
|
||||
81
handle/api/req_login_alarm.go
Normal file
81
handle/api/req_login_alarm.go
Normal file
@@ -0,0 +1,81 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"omc/core"
|
||||
"omc/core/manage"
|
||||
"omc/core/parse"
|
||||
"omc/handle/service"
|
||||
|
||||
"github.com/aceld/zinx/ziface"
|
||||
"github.com/aceld/zinx/zlog"
|
||||
"github.com/aceld/zinx/znet"
|
||||
)
|
||||
|
||||
var ReqLoginAlarmMsgID uint32 = 1
|
||||
var ReqLoginAlarmMsgType uint32 = 2
|
||||
var ReqLoginAlarmMsgName string = "ackLoginAlarm"
|
||||
|
||||
// reqLoginAlarm 登录
|
||||
type ReqLoginAlarm struct {
|
||||
znet.BaseRouter
|
||||
}
|
||||
|
||||
// reqLoginAlarm;user=omc;key=omc;type=msg
|
||||
func (s *ReqLoginAlarm) Handle(request ziface.IRequest) {
|
||||
// 登录消息处理
|
||||
body, err := parse.RequestBodyDecode(request, []string{"user", "key", "type"})
|
||||
// 账户密码
|
||||
username := body.Data["user"]
|
||||
key := body.Data["key"]
|
||||
if err != nil || username == "" || key == "" {
|
||||
zlog.Ins().ErrorF("inlaid message body %s", err.Error())
|
||||
request.GetConnection().SendMsg(ReqLoginAlarmMsgType, core.ResultError(ReqLoginAlarmMsgName, "inlaid message body", ""))
|
||||
return
|
||||
}
|
||||
|
||||
// 获取当前请求的通道
|
||||
m := manage.GetManager(request.GetConnection().GetName())
|
||||
if m == nil {
|
||||
zlog.Ins().ErrorF("server internal error")
|
||||
request.GetConnection().SendMsg(ReqLoginAlarmMsgType, core.ResultError(ReqLoginAlarmMsgName, "server internal error", ""))
|
||||
return
|
||||
}
|
||||
uid, err := request.GetConnection().GetProperty("UID")
|
||||
if err != nil {
|
||||
zlog.Ins().ErrorF("GetProperty UID error %s", err)
|
||||
request.GetConnection().Stop()
|
||||
return
|
||||
}
|
||||
|
||||
// 登录信息
|
||||
err = service.UserLogin(username, key)
|
||||
if err != nil {
|
||||
zlog.Ins().ErrorF("LoginFail %s", err)
|
||||
request.GetConnection().SendMsg(ReqLoginAlarmMsgType, core.Result(ReqLoginAlarmMsgName, map[string]string{
|
||||
"result": "autherror",
|
||||
"resDesc": err.Error(),
|
||||
}))
|
||||
// 已登录的,登录错误超过3次,断开连接
|
||||
if uid != nil || uid != "" {
|
||||
isClose, _ := m.LoginFail(uid.(string))
|
||||
if isClose {
|
||||
request.GetConnection().Stop()
|
||||
return
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// manager 用户登录更新
|
||||
err = m.LoginSuccess(uid.(string), username, key)
|
||||
if err != nil {
|
||||
zlog.Ins().ErrorF("manager:%s", err)
|
||||
request.GetConnection().SendMsg(ReqLoginAlarmMsgType, core.Result(ReqLoginAlarmMsgName, map[string]string{
|
||||
"result": "autherror",
|
||||
"resDesc": err.Error(),
|
||||
}))
|
||||
return
|
||||
}
|
||||
zlog.Ins().InfoF("user login loginSuccess,username:%s, type:%s, channel:%s", username, key, request.GetConnection().GetName())
|
||||
request.GetConnection().SendMsg(ReqLoginAlarmMsgType, core.ResultSuccess(ReqLoginAlarmMsgName, "", ""))
|
||||
}
|
||||
100
handle/api/req_sync_alarm_file.go
Normal file
100
handle/api/req_sync_alarm_file.go
Normal file
@@ -0,0 +1,100 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"omc/conf"
|
||||
"omc/core"
|
||||
"omc/core/consts"
|
||||
"omc/core/file"
|
||||
"omc/core/manage"
|
||||
"omc/core/parse"
|
||||
"omc/handle/service"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/aceld/zinx/ziface"
|
||||
"github.com/aceld/zinx/zlog"
|
||||
"github.com/aceld/zinx/znet"
|
||||
)
|
||||
|
||||
var ackSyncAlarmFileMsgID uint32 = 6
|
||||
var ackSyncAlarmFileMsgName string = "ackSyncAlarmFile"
|
||||
|
||||
// SyncAlarmFileApi 文件方式同步告警请求
|
||||
type SyncAlarmFileApi struct {
|
||||
znet.BaseRouter
|
||||
}
|
||||
|
||||
// Handle
|
||||
// reqSyncAlarmFile;reqId=33;startTime=2014-11-27 10:00:00;endTime=2014-11-27 10:30:00; syncSource =0
|
||||
func (*SyncAlarmFileApi) Handle(request ziface.IRequest) {
|
||||
// 消息处理
|
||||
checker := []string{"reqId", "syncSource"}
|
||||
body, err := parse.RequestBodyDecode(request, checker)
|
||||
if err != nil {
|
||||
zlog.Ins().ErrorF("inlaid message body %s", err.Error())
|
||||
request.GetConnection().SendMsg(ackSyncAlarmFileMsgID, core.ResultError(ackSyncAlarmFileMsgName, err.Error(), ""))
|
||||
return
|
||||
}
|
||||
|
||||
reqId := body.Data["reqId"]
|
||||
|
||||
//管理模块
|
||||
m := manage.GetManager(request.GetConnection().GetName())
|
||||
if m == nil {
|
||||
zlog.Ins().ErrorF("server internal error")
|
||||
request.GetConnection().SendMsg(ackSyncAlarmFileMsgID, core.ResultError(ackSyncAlarmFileMsgName, "server internal error", reqId))
|
||||
return
|
||||
}
|
||||
|
||||
// 检查用户是否登录
|
||||
u := m.GetUserByPID(body.UID)
|
||||
if !u.LoginState || u.AlarmType != consts.FILE {
|
||||
zlog.Ins().ErrorF("no permissions ")
|
||||
request.GetConnection().SendMsg(ackSyncAlarmFileMsgID, core.ResultError(ackSyncAlarmFileMsgName, "no permissions", reqId))
|
||||
return
|
||||
}
|
||||
//查询需要上报的告警信息
|
||||
start := ""
|
||||
end := ""
|
||||
syncSource := ""
|
||||
alarmSeq := 0
|
||||
fmt.Println("body.Data:", body.Data)
|
||||
//map[alarmSeq:1 reqId:35 syncSource:1]
|
||||
// map[endTime:2023-07-15 23:59:59 reqId:34 startTime:2023-01-08 16:07:00 syncSource:0]
|
||||
if v, ok := body.Data["startTime"]; ok {
|
||||
start = v
|
||||
}
|
||||
if v, ok := body.Data["endTime"]; ok {
|
||||
end = v
|
||||
}
|
||||
if v, ok := body.Data["syncSource"]; ok {
|
||||
syncSource = v
|
||||
}
|
||||
if v, ok := body.Data["alarmSeq"]; ok {
|
||||
if seq, err := strconv.Atoi(v); err == nil {
|
||||
alarmSeq = seq
|
||||
}
|
||||
}
|
||||
neBind, _ := parse.ConvertBindFlag(m.BindFlag)
|
||||
alarms, err := service.GetAlarm(neBind.NeType, neBind.NeId, start, end, syncSource, alarmSeq)
|
||||
if err != nil || len(alarms) == 0 {
|
||||
|
||||
request.GetConnection().SendMsg(ackSyncAlarmFileMsgID, core.ResultError(ackSyncAlarmFileMsgName, "not find record", reqId))
|
||||
return
|
||||
}
|
||||
//ack
|
||||
request.GetConnection().SendMsg(ackSyncAlarmFileMsgID, core.ResultSuccess(ackSyncAlarmFileMsgName, "", reqId))
|
||||
|
||||
//打包结果文件
|
||||
//打包生成文件
|
||||
var meta file.FileMeta
|
||||
meta.DirRoot = conf.OmcConf.FTPRoot
|
||||
meta.Province = m.Province
|
||||
meta.DeviceCode = m.DeviceCode
|
||||
meta.Index = "001"
|
||||
meta.Time = time.Now().Format("20060102150405")
|
||||
meta.Compress = false
|
||||
go service.GenFile(request, &meta, alarms)
|
||||
|
||||
}
|
||||
69
handle/api/req_sync_alarm_msg.go
Normal file
69
handle/api/req_sync_alarm_msg.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"omc/core"
|
||||
"omc/core/manage"
|
||||
"omc/core/parse"
|
||||
"omc/handle/service"
|
||||
"strconv"
|
||||
|
||||
"github.com/aceld/zinx/ziface"
|
||||
"github.com/aceld/zinx/zlog"
|
||||
"github.com/aceld/zinx/znet"
|
||||
)
|
||||
|
||||
var ReqSyncAlarmMsgID uint32 = 3
|
||||
var ReqSyncAlarmMsgType uint32 = 4
|
||||
var ReqSyncAlarmMsgName string = "ackSyncAlarmMsg"
|
||||
|
||||
// reqSyncAlarmMsg 消息同步
|
||||
type ReqSyncAlarmMsg struct {
|
||||
znet.BaseRouter
|
||||
}
|
||||
|
||||
// reqSyncAlarmMsg
|
||||
func (s *ReqSyncAlarmMsg) Handle(request ziface.IRequest) {
|
||||
// 消息处理
|
||||
checker := []string{"reqId", "alarmSeq"}
|
||||
body, err := parse.RequestBodyDecode(request, checker)
|
||||
reqId := body.Data["reqId"]
|
||||
if err != nil || reqId == "" {
|
||||
zlog.Ins().ErrorF("inlaid message body %s", err.Error())
|
||||
request.GetConnection().SendMsg(ReqSyncAlarmMsgType, core.ResultError(ReqSyncAlarmMsgName, err.Error(), ""))
|
||||
return
|
||||
}
|
||||
|
||||
//管理模块
|
||||
m := manage.GetManager(request.GetConnection().GetName())
|
||||
if m == nil {
|
||||
zlog.Ins().ErrorF("server internal error")
|
||||
request.GetConnection().SendMsg(ReqSyncAlarmMsgType, core.ResultError(ReqSyncAlarmMsgName, "server internal error", reqId))
|
||||
return
|
||||
}
|
||||
|
||||
// 检查用户是否登录
|
||||
u := m.GetUserByPID(body.UID)
|
||||
if !u.LoginState {
|
||||
zlog.Ins().ErrorF("no permissions ")
|
||||
request.GetConnection().SendMsg(ReqSyncAlarmMsgType, core.ResultError(ReqSyncAlarmMsgName, "no permissions", reqId))
|
||||
return
|
||||
}
|
||||
|
||||
alarmSeq, err := strconv.Atoi(body.Data["alarmSeq"])
|
||||
if err != nil || alarmSeq < 1 {
|
||||
zlog.Ins().ErrorF("invalid parameter of message body")
|
||||
request.GetConnection().SendMsg(ReqSyncAlarmMsgType, core.ResultError(ReqSyncAlarmMsgName, "invalid parameter of message body", reqId))
|
||||
return
|
||||
}
|
||||
|
||||
//check alarmSeq 是否存在
|
||||
neBind, _ := parse.ConvertBindFlag(m.BindFlag)
|
||||
alarms, _ := service.GetRealTimeAlarm(neBind.NeType, neBind.NeId, int32(alarmSeq))
|
||||
if len(alarms) == 0 {
|
||||
request.GetConnection().SendMsg(ReqSyncAlarmMsgType, core.ResultError(ReqSyncAlarmMsgName, "alarm seq does not exist", reqId))
|
||||
return
|
||||
}
|
||||
//更新实时上报的alarm seq
|
||||
m.UpdateAlarmSeq(int32(alarmSeq))
|
||||
request.GetConnection().SendMsg(ReqSyncAlarmMsgType, core.ResultSuccess(ReqSyncAlarmMsgName, "ok", reqId))
|
||||
}
|
||||
33
handle/model/alarm.go
Normal file
33
handle/model/alarm.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package model
|
||||
|
||||
import "time"
|
||||
|
||||
type Alarm struct {
|
||||
Id int
|
||||
AlarmSeq int
|
||||
AlarmId string
|
||||
NeId string
|
||||
AlarmCode int
|
||||
AlarmTitle string
|
||||
EventTime time.Time
|
||||
AlarmType string
|
||||
OrigSeverity string
|
||||
PVFlag string
|
||||
NeName string
|
||||
NeType string
|
||||
ObjectName string
|
||||
ObjectUID string
|
||||
ObjectType string
|
||||
LocationInfo string
|
||||
Province string
|
||||
AlarmStatus int
|
||||
SpecificProblem string
|
||||
SpecificProblemID string
|
||||
AddInfo string
|
||||
ClearType int
|
||||
ClearTime time.Time
|
||||
}
|
||||
|
||||
func (Alarm) TableName() string {
|
||||
return "alarm"
|
||||
}
|
||||
21
handle/model/nbi_alarm_log.go
Normal file
21
handle/model/nbi_alarm_log.go
Normal file
@@ -0,0 +1,21 @@
|
||||
package model
|
||||
|
||||
import "time"
|
||||
|
||||
type NbiAlarmLog struct {
|
||||
ID int64
|
||||
AId int64
|
||||
OpUser string
|
||||
SrcIp string
|
||||
NeType string
|
||||
NeId string
|
||||
AlarmSeq int64
|
||||
AlarmId string
|
||||
AlarmCode int
|
||||
EventTime time.Time
|
||||
LogTime time.Time
|
||||
}
|
||||
|
||||
func (NbiAlarmLog) TableName() string {
|
||||
return "nbi_alarm_log"
|
||||
}
|
||||
39
handle/model/user.go
Normal file
39
handle/model/user.go
Normal file
@@ -0,0 +1,39 @@
|
||||
package model
|
||||
|
||||
import "time"
|
||||
|
||||
// 用户表实体信息
|
||||
type User struct {
|
||||
Id int `json:"id"`
|
||||
AccountId string `json:"account_id"`
|
||||
Name string `json:"name"`
|
||||
RealName string `json:"real_name"`
|
||||
Sn string `json:"sn"`
|
||||
Gender string `json:"gender"`
|
||||
Email string `json:"email"`
|
||||
IdCardNumber string `json:"id_card_number"`
|
||||
Description string `json:"description"`
|
||||
TelephoneNumber string `json:"telephone_number"`
|
||||
Phone string `json:"phone"`
|
||||
Mobile string `json:"mobile"`
|
||||
EmployeeNumber string `json:"employee_number"`
|
||||
EmployeeType string `json:"employee_type"`
|
||||
Organize string `json:"organize"`
|
||||
SupporterCorpName string `json:"supporter_corp_name"`
|
||||
StartTime time.Time `json:"start_time"`
|
||||
EndTime time.Time `json:"end_time"`
|
||||
Password string `json:"password"`
|
||||
PasswordSha512 string `json:"password_sha512"`
|
||||
ChangePasswordFlag int `json:"change_password_flag"`
|
||||
PasswordExpiration string `json:"password_expiration"`
|
||||
Status string `json:"status"`
|
||||
UserExpiration string `json:"user_expiration"`
|
||||
GroupName string `json:"group_name"`
|
||||
Profile string `json:"profile"`
|
||||
CreateTime time.Time `json:"create_time"`
|
||||
UpdateTime time.Time `json:"update_time"`
|
||||
}
|
||||
|
||||
func (User) TableName() string {
|
||||
return "user"
|
||||
}
|
||||
66
handle/service/login.go
Normal file
66
handle/service/login.go
Normal file
@@ -0,0 +1,66 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"crypto/x509"
|
||||
"encoding/base64"
|
||||
"encoding/pem"
|
||||
"errors"
|
||||
"omc/ca"
|
||||
"omc/conf"
|
||||
"omc/core/db"
|
||||
"omc/core/utils"
|
||||
"omc/handle/model"
|
||||
|
||||
"github.com/aceld/zinx/zlog"
|
||||
)
|
||||
|
||||
// UserLogin 用户登录
|
||||
func UserLogin(name, passwd string) error {
|
||||
// 用户名密码校验
|
||||
var user model.User
|
||||
err := db.Client.Model(&model.User{}).Where("account_id=?", name).First(&user).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := utils.Compare(user.Password, passwd); err != nil {
|
||||
zlog.Ins().ErrorF("Password Login[%s]:%s", name, err)
|
||||
return errors.New("incorrect username and password")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func CMCALogin(source, sign, cert string) (login bool, err error) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
zlog.Ins().ErrorF("CMCALogin panic:%v", r)
|
||||
}
|
||||
}()
|
||||
//base64 解码签名数据
|
||||
signBytes, err := base64.StdEncoding.DecodeString(sign)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
//证书加载
|
||||
block, _ := pem.Decode([]byte(cert))
|
||||
|
||||
//证书解析
|
||||
certBody, err := x509.ParseCertificate(block.Bytes)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
//证书校验
|
||||
if conf.OmcConf.CA.Check {
|
||||
if err := ca.VerifyCert(certBody); err != nil {
|
||||
return false, err
|
||||
}
|
||||
}
|
||||
|
||||
//签名验证
|
||||
err = ca.VerifyRSA([]byte(source), signBytes, certBody)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
92
handle/service/real_time_alarm.go
Normal file
92
handle/service/real_time_alarm.go
Normal file
@@ -0,0 +1,92 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"omc/core/db"
|
||||
"omc/core/emun"
|
||||
"omc/handle/model"
|
||||
|
||||
"github.com/aceld/zinx/zlog"
|
||||
)
|
||||
|
||||
type OmcAlarm struct {
|
||||
AId int64 `json:"-"`
|
||||
AlarmSeq int32 `json:"alarmSeq"` //告警序列号
|
||||
AlarmTitle string `json:"alarmTitle"` //告警事件标题
|
||||
AlarmStatus int32 `json:"alarmStatus"` //告警状态
|
||||
AlarmType string `json:"alarmType"` //告警类型
|
||||
OrigSeverity int32 `json:"origSeverity"` //原始级别
|
||||
EventTime string `json:"eventTime"` //事件发生时间
|
||||
AlarmId string `json:"alarmId"` //告警事件唯一标识
|
||||
SpecificProblemID string `json:"specificProblemID"` //告警问题原因ID
|
||||
SpecificProblem string `json:"specificProblem"` //告警问题原因
|
||||
NeUID string `json:"neUID"` //告警网元UID
|
||||
NeName string `json:"neName"` //告警网元名称
|
||||
NeType string `json:"neType"` //告警网元设备类型
|
||||
ObjectUID string `json:"objectUID"` //告警定位对象UID
|
||||
ObjectName string `json:"objectName"` //告警定位对象名称
|
||||
ObjectType string `json:"objectType"` //告警定位对象资源类型
|
||||
LocationInfo string `json:"locationInfo"` //告警定位信息
|
||||
AddInfo string `json:"addInfo"` //告警辅助信息[条件必选]
|
||||
PVFlag string `json:"PVFlag"` //网元虚实性[条件必选]
|
||||
Province string `json:"province"` //网元服务省份
|
||||
}
|
||||
|
||||
// GetRealTimeAlarm 获取最新的告警信息
|
||||
func GetRealTimeAlarm(neType, neId string, alarmSeq int32) ([]OmcAlarm, error) {
|
||||
var alarms []model.Alarm
|
||||
var result []OmcAlarm
|
||||
if err := db.Client.Model(&model.Alarm{}).Where("ne_type = ? and ne_id = ? and alarm_seq >= ?", neType, neId, alarmSeq).Order("alarm_seq asc").Find(&alarms).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range alarms {
|
||||
var item OmcAlarm
|
||||
item.AlarmSeq = int32(v.AlarmSeq)
|
||||
item.AlarmTitle = v.AlarmTitle
|
||||
item.AlarmStatus = int32(v.AlarmStatus)
|
||||
item.AlarmType = v.AlarmType
|
||||
item.OrigSeverity = emun.OrigSeverity(v.OrigSeverity)
|
||||
item.EventTime = v.EventTime.Format("2006-01-02 15:04:05")
|
||||
item.AlarmId = v.AlarmId
|
||||
item.SpecificProblemID = v.SpecificProblemID
|
||||
item.SpecificProblem = v.SpecificProblem
|
||||
item.NeUID = v.NeId
|
||||
item.NeName = v.NeName
|
||||
item.NeType = v.NeType
|
||||
item.ObjectUID = v.ObjectUID
|
||||
item.ObjectName = v.NeName
|
||||
item.ObjectType = v.ObjectType
|
||||
item.LocationInfo = v.LocationInfo
|
||||
item.AddInfo = v.AddInfo
|
||||
item.PVFlag = v.PVFlag
|
||||
item.Province = v.Province
|
||||
item.AId = int64(v.Id)
|
||||
result = append(result, item)
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// GetLastAlarmSeq 获取最新的alarm seq
|
||||
func GetLastAlarmSeq(neType, neId string) int32 {
|
||||
var alarm model.Alarm
|
||||
if err := db.Client.Model(&model.Alarm{}).Where("ne_type = ? and ne_id = ?", neType, neId).Order("alarm_seq desc").First(&alarm).Error; err != nil {
|
||||
zlog.Ins().ErrorF("db error %s", err)
|
||||
return 0
|
||||
}
|
||||
return int32(alarm.AlarmSeq) + 1
|
||||
}
|
||||
|
||||
func GenAlarm(alarm OmcAlarm) []byte {
|
||||
data, _ := json.Marshal(&alarm)
|
||||
return data
|
||||
}
|
||||
|
||||
func MaxAlarm(current int32, alarms []OmcAlarm) int32 {
|
||||
var req = current
|
||||
for _, v := range alarms {
|
||||
if v.AlarmSeq > req {
|
||||
req = v.AlarmSeq
|
||||
}
|
||||
}
|
||||
return req
|
||||
}
|
||||
209
handle/service/sysn_alarm_file.go
Normal file
209
handle/service/sysn_alarm_file.go
Normal file
@@ -0,0 +1,209 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"omc/core"
|
||||
"omc/core/db"
|
||||
"omc/core/emun"
|
||||
"omc/core/file"
|
||||
"omc/handle/model"
|
||||
"time"
|
||||
|
||||
"github.com/aceld/zinx/ziface"
|
||||
)
|
||||
|
||||
var AckSyncAlarmFileResultMsgID uint32 = 9
|
||||
|
||||
func GenFile(request ziface.IRequest, meta *file.FileMeta, data []OmcAlarm) {
|
||||
//生成文件内容
|
||||
dataBuff := bytes.NewBuffer([]byte{})
|
||||
for _, v := range data {
|
||||
b, _ := json.Marshal(v)
|
||||
binary.Write(dataBuff, binary.BigEndian, b)
|
||||
binary.Write(dataBuff, binary.BigEndian, '\r')
|
||||
binary.Write(dataBuff, binary.BigEndian, '\n')
|
||||
}
|
||||
|
||||
file, err := file.GenFile(meta, dataBuff.Bytes())
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
//发送文件同步信息
|
||||
msgData := core.Result("ackSyncOmcAlarmFileResult", map[string]string{
|
||||
"reqId": meta.ReqId,
|
||||
"result": "succ",
|
||||
"fileName": file,
|
||||
"resDesc": "",
|
||||
})
|
||||
request.GetConnection().SendMsg(AckSyncAlarmFileResultMsgID, msgData)
|
||||
}
|
||||
|
||||
// GetAlarmOfAlarmSeq 获取告警信息
|
||||
func GetAlarmOfAlarmSeq(neType, neId string, alarmSeq int) ([]OmcAlarm, error) {
|
||||
var alarms []model.Alarm
|
||||
var result []OmcAlarm
|
||||
|
||||
query := db.Client.Model(&model.Alarm{}).Where("ne_type = ? and ne_id = ? and alarm_seq > ?", neType, neId, alarmSeq)
|
||||
if err := query.Order("alarm_seq asc").Find(&alarms).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range alarms {
|
||||
var item OmcAlarm
|
||||
item.AlarmSeq = int32(v.AlarmSeq)
|
||||
item.AlarmTitle = v.AlarmTitle
|
||||
item.AlarmStatus = int32(v.AlarmStatus)
|
||||
item.AlarmType = v.AlarmType
|
||||
item.OrigSeverity = emun.OrigSeverity(v.OrigSeverity)
|
||||
item.EventTime = v.EventTime.Format("2006-01-02 15:04:05")
|
||||
item.AlarmId = v.AlarmId
|
||||
item.SpecificProblemID = v.SpecificProblemID
|
||||
item.SpecificProblem = v.SpecificProblem
|
||||
item.NeUID = v.NeId
|
||||
item.NeName = v.NeName
|
||||
item.NeType = v.NeType
|
||||
item.ObjectUID = v.ObjectUID
|
||||
item.ObjectName = v.NeName
|
||||
item.ObjectType = v.ObjectType
|
||||
item.LocationInfo = v.LocationInfo
|
||||
item.AddInfo = v.AddInfo
|
||||
item.PVFlag = v.PVFlag
|
||||
item.Province = v.Province
|
||||
result = append(result, item)
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
//GetAlarm
|
||||
|
||||
/*
|
||||
1 如果syncSource=1 && alarmSeq 为空: 从北向告警上报日志中(nbi_alarm_log)取数据ID,然后反查告警信息表(alarm)取出告警日志
|
||||
|
||||
2 其他情况: 从告警信息表中取数据, 数据来源为设备告警事件
|
||||
|
||||
*/
|
||||
|
||||
func GetAlarm(neType, neId, startTime, endTime, syncSource string, alarmSeq int) ([]OmcAlarm, error) {
|
||||
if syncSource == "0" {
|
||||
return GetAlarmOfEventTime(neType, neId, startTime, endTime)
|
||||
|
||||
} else {
|
||||
if alarmSeq > 0 {
|
||||
return GetAlarmOfAlarmSeq(neType, neId, alarmSeq)
|
||||
} else {
|
||||
return GetAlarmOfLog(neType, neId, startTime, endTime)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetAlarmOfEventTime 获取告警信息
|
||||
func GetAlarmOfEventTime(neType, neId, startTime, endTime string) ([]OmcAlarm, error) {
|
||||
var alarms []model.Alarm
|
||||
var result []OmcAlarm
|
||||
|
||||
if startTime == "" && endTime == "" {
|
||||
return result, nil
|
||||
}
|
||||
query := db.Client.Model(&model.Alarm{}).Where("ne_type = ? and ne_id = ?", neType, neId)
|
||||
if startTime != "" {
|
||||
t1, err := time.Parse("2006-01-02 15:04:05", startTime)
|
||||
if err != nil {
|
||||
return nil, errors.New("startTime invalid")
|
||||
}
|
||||
query = query.Where("event_time > ?", t1)
|
||||
}
|
||||
if endTime != "" {
|
||||
t2, err := time.Parse("2006-01-02 15:04:05", endTime)
|
||||
if err != nil {
|
||||
return nil, errors.New("endTime invalid")
|
||||
}
|
||||
query = query.Where("event_time < ?", t2)
|
||||
}
|
||||
if err := query.Order("alarm_seq asc").Find(&alarms).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range alarms {
|
||||
var item OmcAlarm
|
||||
item.AlarmSeq = int32(v.AlarmSeq)
|
||||
item.AlarmTitle = v.AlarmTitle
|
||||
item.AlarmStatus = int32(v.AlarmStatus)
|
||||
item.AlarmType = v.AlarmType
|
||||
item.OrigSeverity = emun.OrigSeverity(v.OrigSeverity)
|
||||
item.EventTime = v.EventTime.Format("2006-01-02 15:04:05")
|
||||
item.AlarmId = v.AlarmId
|
||||
item.SpecificProblemID = v.SpecificProblemID
|
||||
item.SpecificProblem = v.SpecificProblem
|
||||
item.NeUID = v.NeId
|
||||
item.NeName = v.NeName
|
||||
item.NeType = v.NeType
|
||||
item.ObjectUID = v.ObjectUID
|
||||
item.ObjectName = v.NeName
|
||||
item.ObjectType = v.ObjectType
|
||||
item.LocationInfo = v.LocationInfo
|
||||
item.AddInfo = v.AddInfo
|
||||
item.PVFlag = v.PVFlag
|
||||
item.Province = v.Province
|
||||
result = append(result, item)
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// GetAlarmOfLog 获取告警信息
|
||||
func GetAlarmOfLog(neType, neId, startTime, endTime string) ([]OmcAlarm, error) {
|
||||
var alarms []model.Alarm
|
||||
var result []OmcAlarm
|
||||
|
||||
if startTime == "" && endTime == "" {
|
||||
return result, nil
|
||||
}
|
||||
var aIDs []int64
|
||||
query := db.Client.Model(&model.NbiAlarmLog{}).Select("distinct a_id").Where("ne_type = ? and ne_id = ?", neType, neId)
|
||||
if startTime != "" {
|
||||
t1, err := time.Parse("2006-01-02 15:04:05", startTime)
|
||||
if err != nil {
|
||||
return nil, errors.New("startTime invalid")
|
||||
}
|
||||
query = query.Where("log_time >= ?", t1)
|
||||
}
|
||||
if endTime != "" {
|
||||
t2, err := time.Parse("2006-01-02 15:04:05", endTime)
|
||||
if err != nil {
|
||||
return nil, errors.New("endTime invalid")
|
||||
}
|
||||
query = query.Where("log_time <= ?", t2)
|
||||
}
|
||||
if err := query.Order("alarm_seq asc").Find(&aIDs).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := db.Client.Model(&model.Alarm{}).Where("id in (?)", aIDs).Find(&alarms).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range alarms {
|
||||
var item OmcAlarm
|
||||
item.AlarmSeq = int32(v.AlarmSeq)
|
||||
item.AlarmTitle = v.AlarmTitle
|
||||
item.AlarmStatus = int32(v.AlarmStatus)
|
||||
item.AlarmType = v.AlarmType
|
||||
item.OrigSeverity = emun.OrigSeverity(v.OrigSeverity)
|
||||
item.EventTime = v.EventTime.Format("2006-01-02 15:04:05")
|
||||
item.AlarmId = v.AlarmId
|
||||
item.SpecificProblemID = v.SpecificProblemID
|
||||
item.SpecificProblem = v.SpecificProblem
|
||||
item.NeUID = v.NeId
|
||||
item.NeName = v.NeName
|
||||
item.NeType = v.NeType
|
||||
item.ObjectUID = v.ObjectUID
|
||||
item.ObjectName = v.NeName
|
||||
item.ObjectType = v.ObjectType
|
||||
item.LocationInfo = v.LocationInfo
|
||||
item.AddInfo = v.AddInfo
|
||||
item.PVFlag = v.PVFlag
|
||||
item.Province = v.Province
|
||||
result = append(result, item)
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
Reference in New Issue
Block a user