1
0

marge: 合并代码,包名变更be.ems

This commit is contained in:
TsMask
2024-03-18 15:22:47 +08:00
parent df904f5328
commit 78bd110b03
393 changed files with 7870 additions and 5170 deletions

View File

@@ -10,11 +10,11 @@ import (
"strings"
"time"
"ems.agt/lib/dborm"
"ems.agt/lib/global"
"ems.agt/lib/log"
"ems.agt/lib/services"
"ems.agt/restagent/config"
"be.ems/lib/dborm"
"be.ems/lib/global"
"be.ems/lib/log"
"be.ems/lib/services"
"be.ems/restagent/config"
"xorm.io/xorm"
"github.com/go-resty/resty/v2"
@@ -115,6 +115,27 @@ var (
CustomUriAlarmsFmt = config.UriPrefix + "/faultManagement/v1/elementType/%s/objectType/alarms"
)
var client = resty.New()
func init() {
/*
client.
SetTimeout(10 * time.Second).
SetRetryCount(1).
SetRetryWaitTime(1 * time.Second).
SetRetryMaxWaitTime(2 * time.Second).
SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) {
return 0, errors.New("quota exceeded")
})
*/
client.
SetTimeout(time.Duration(500 * time.Millisecond))
// SetRetryCount(1).
// SetRetryWaitTime(time.Duration(1 * time.Second)).
// SetRetryMaxWaitTime(time.Duration(2 * time.Second))
//client.SetTimeout(2 * time.Second)
}
var xEngine *xorm.Engine
type DatabaseClient struct {
@@ -439,8 +460,8 @@ func PostAlarmFromNF(w http.ResponseWriter, r *http.Request) {
if err = AlarmEmailForward(&alarmData); err != nil {
log.Error("Failed to AlarmEmailForward:", err)
}
if err = AlarmForwardBySMS(&alarmData); err != nil {
log.Error("Failed to AlarmForwardBySMS:", err)
if err = AlarmForwardBySMSC(&alarmData); err != nil {
log.Error("Failed to AlarmForwardBySMSC:", err)
}
}
}
@@ -482,7 +503,7 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
apiUri := fmt.Sprintf(UriAlarmsFmt, strings.ToLower(ne.NeType))
requestURI2NF := fmt.Sprintf("%s%s", hostUri, apiUri)
log.Debug("requestURI2NF: Get ", requestURI2NF)
client := resty.New()
// client := resty.New()
response, err := client.R().
EnableTrace().
SetHeaders(map[string]string{"User-Agent": config.GetDefaultUserAgent()}).
@@ -498,7 +519,12 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
switch response.StatusCode() {
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
body := response.Body()
log.Debug("Request body:", string(body))
if len(body) == 0 || body == nil {
log.Infof("Empty alarm body from neType=%s, neId=%s", ne.NeType, ne.NeId)
//services.ResponseInternalServerError500ProcessError(w, err)
continue
}
//log.Debug("Request body:", string(body))
err = json.Unmarshal(body, &alarmArray)
if err != nil {
@@ -518,7 +544,7 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
continue
}
if alarmArray == nil {
log.Info("Not found sync alarms, neType=%s, neId=%s", ne.NeType, ne.NeId)
log.Infof("Not found sync alarms, neType=%s, neId=%s", ne.NeType, ne.NeId)
//services.ResponseInternalServerError500ProcessError(w, err)
continue
}
@@ -536,7 +562,7 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
Where("ne_type=? and ne_id=? and alarm_id=? and alarm_status=1", alarmData.NeType, alarmData.NeId, alarmData.AlarmId).
Exist()
if err == nil || !exist {
log.Info("Not found active alarm: ne_id=%s, alarm_id=%s", alarmData.NeId, alarmData.AlarmId)
log.Infof("Not found active alarm: ne_id=%s, alarm_id=%s", alarmData.NeId, alarmData.AlarmId)
continue
}
alarmData.ClearType = ClearTypeAutoClear
@@ -708,8 +734,8 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
if err = AlarmEmailForward(&alarmData); err != nil {
log.Error("Failed to AlarmEmailForward:", err)
}
if err = AlarmForwardBySMS(&alarmData); err != nil {
log.Error("Failed to AlarmForwardBySMS:", err)
if err = AlarmForwardBySMSC(&alarmData); err != nil {
log.Error("Failed to AlarmForwardBySMSC:", err)
}
}
}
@@ -717,5 +743,5 @@ func GetAlarmFromNF(w http.ResponseWriter, r *http.Request) {
}
}
}
services.ResponseStatusOK200Null(w)
services.ResponseStatusOK204NoContent(w)
}

View File

@@ -6,9 +6,9 @@ import (
"fmt"
"strings"
"ems.agt/lib/dborm"
"ems.agt/lib/log"
"ems.agt/restagent/config"
"be.ems/lib/dborm"
"be.ems/lib/log"
"be.ems/restagent/config"
"gopkg.in/gomail.v2"
)

View File

@@ -5,10 +5,14 @@ import (
"fmt"
"net/http"
"net/url"
"time"
"ems.agt/lib/dborm"
"ems.agt/lib/log"
"ems.agt/restagent/config"
"be.ems/lib/dborm"
"be.ems/lib/log"
"be.ems/restagent/config"
"github.com/linxGnu/gosmpp"
"github.com/linxGnu/gosmpp/data"
"github.com/linxGnu/gosmpp/pdu"
)
func AlarmForwardBySMS(alarmData *Alarm) error {
@@ -80,8 +84,8 @@ func AlarmForwardBySMS(alarmData *Alarm) error {
// 解析响应
if resp.StatusCode == http.StatusOK {
log.Info("SMS sent successfully!")
operResult := fmt.Sprintf("SMS sent successfully!")
operResult := "SMS sent successfully!"
log.Info(operResult)
forwardLog.OperResult = operResult
affected, err := dborm.XormInsertAlarmForwardLog(forwardLog)
if err != nil && affected <= 0 {
@@ -101,3 +105,144 @@ func AlarmForwardBySMS(alarmData *Alarm) error {
}
return nil
}
func AlarmForwardBySMPP(alarmData *Alarm) error {
log.Info("AlarmForwardBySMPP processing... ")
auth := gosmpp.Auth{
SMSC: config.GetYamlConfig().Alarm.SMSC.Addr,
SystemID: config.GetYamlConfig().Alarm.SMSC.UserName,
Password: config.GetYamlConfig().Alarm.SMSC.Password,
SystemType: "",
}
// conn, err := gosmpp.NonTLSDialer(auth.SMSC)
// connection := gosmpp.NewConnection(conn)
trans, err := gosmpp.NewSession(
gosmpp.TXConnector(gosmpp.NonTLSDialer, auth),
gosmpp.Settings{
ReadTimeout: 2 * time.Second,
OnPDU: func(p pdu.PDU, _ bool) {
log.Debug("%+v", p)
},
OnSubmitError: func(_ pdu.PDU, err error) {
log.Error(err)
},
OnRebindingError: func(err error) {
log.Error(err)
},
OnClosed: func(state gosmpp.State) {
log.Error(state)
},
}, -1)
if err != nil {
log.Error(err)
return err
}
defer func() {
_ = trans.Close()
}()
toUsers, err := dborm.XormGetAlarmForward("SMS")
if err != nil {
log.Error("Failed to XormGetAlarmForward:", err)
return err
} else if toUsers == nil {
err := errors.New("not found forward phone number")
log.Error(err)
return err
}
// sending SMS(s)
for _, toUser := range *toUsers {
forwardLog := &dborm.AlarmForwardLog{
NeType: alarmData.NeType,
NeID: alarmData.NeId,
AlarmID: alarmData.AlarmId,
AlarmTitle: alarmData.AlarmTitle,
AlarmSeq: alarmData.AlarmSeq,
EventTime: alarmData.EventTime,
ToUser: toUser,
}
message := alarmData.AlarmTitle + "from" + alarmData.NeType + alarmData.NeId + "at" + alarmData.EventTime
if err = trans.Transceiver().Submit(newSubmitSM(toUser, message)); err != nil {
operResult := fmt.Sprintf("Failed to submit short message:%v", err)
log.Error(operResult)
forwardLog.OperResult = operResult
} else {
operResult := "SMS sent successfully!"
log.Trace(operResult)
forwardLog.OperResult = operResult
}
affected, err := dborm.XormInsertAlarmForwardLog(forwardLog)
if err != nil && affected <= 0 {
log.Error("Failed to insert data:", err)
continue
}
}
return nil
}
func handlePDU() func(pdu.PDU) (pdu.PDU, bool) {
return func(p pdu.PDU) (pdu.PDU, bool) {
switch pd := p.(type) {
case *pdu.Unbind:
log.Trace("Unbind Received")
return pd.GetResponse(), true
case *pdu.UnbindResp:
log.Trace("UnbindResp Received")
case *pdu.SubmitSMResp:
log.Trace("SubmitSMResp Received")
case *pdu.GenericNack:
log.Trace("GenericNack Received")
case *pdu.EnquireLinkResp:
fmt.Println("EnquireLinkResp Received")
case *pdu.EnquireLink:
log.Trace("EnquireLink Received")
return pd.GetResponse(), false
case *pdu.DataSM:
log.Trace("DataSM receiver")
return pd.GetResponse(), false
case *pdu.DeliverSM:
log.Trace("DeliverSM receiver")
return pd.GetResponse(), false
}
return nil, false
}
}
func newSubmitSM(phoneNumber string, message string) *pdu.SubmitSM {
// build up submitSM
srcAddr := pdu.NewAddress()
srcAddr.SetTon(5)
srcAddr.SetNpi(0)
_ = srcAddr.SetAddress("alarm notification:")
destAddr := pdu.NewAddress()
destAddr.SetTon(1)
destAddr.SetNpi(1)
_ = destAddr.SetAddress(phoneNumber)
submitSM := pdu.NewSubmitSM().(*pdu.SubmitSM)
submitSM.SourceAddr = srcAddr
submitSM.DestAddr = destAddr
_ = submitSM.Message.SetMessageWithEncoding(message, data.UCS2)
submitSM.ProtocolID = 0
submitSM.RegisteredDelivery = 1
submitSM.ReplaceIfPresentFlag = 0
submitSM.EsmClass = 0
return submitSM
}

60
features/fm/ucpcli.go Normal file
View File

@@ -0,0 +1,60 @@
package fm
import (
"fmt"
"strings"
"be.ems/lib/log"
"be.ems/restagent/config"
"github.com/chzyer/readline"
"github.com/go-gsm/ucp"
)
func AlarmForwardBySMSC(alarmData *Alarm) error {
opt := &ucp.Options{
Addr: config.GetYamlConfig().Alarm.SMSC.Addr,
User: config.GetYamlConfig().Alarm.SMSC.UserName,
Password: config.GetYamlConfig().Alarm.SMSC.Password,
AccessCode: "",
}
client := ucp.New(opt)
if err := client.Connect(); err != nil {
log.Error("Failed to connect:", err)
return err
}
defer client.Close()
reader, _ := readline.New(">>> ")
defer reader.Close()
for {
fmt.Print(">>> ")
lines, _ := reader.Readline()
fields := strings.Fields(lines)
if len(fields) == 1 {
// exit CLI
if fields[0] == "exit" {
return nil
}
// display help message
if fields[0] == "help" {
log.Trace("\n\tSend a 'message' to 'receiver' with a 'sender' mask\n\t>>> sender receiver message\n\n\tExit the cli\n\t>>> exit\n")
}
}
// sender receiver message...
if len(fields) >= 3 {
sender := fields[0]
receiver := fields[1]
message := strings.Join(fields[2:], " ")
ids, err := client.Send(sender, receiver, message)
if err != nil {
log.Error(err)
} else {
log.Debug("%v", ids)
}
}
}
}