This commit is contained in:
TsMask
2023-08-22 19:25:39 +08:00
parent 38d3b7450e
commit 96de169777
45 changed files with 881 additions and 676 deletions

View 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, "", ""))
}

View 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))
}

View 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, "", ""))
// }

View 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))
}

View 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))
}

View 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, "", ""))
}

View 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)
}

View 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))
}