refactor: 重构更新多个文件中的相关调用
This commit is contained in:
@@ -13,18 +13,22 @@ import (
|
||||
"be.ems/features/pm/kpi_c_report"
|
||||
"be.ems/features/pm/kpi_c_title"
|
||||
"be.ems/lib/config"
|
||||
"be.ems/lib/core/ctx"
|
||||
"be.ems/lib/dborm"
|
||||
evaluate "be.ems/lib/eval"
|
||||
"be.ems/lib/global"
|
||||
"be.ems/lib/log"
|
||||
"be.ems/lib/services"
|
||||
|
||||
"be.ems/src/framework/database/db"
|
||||
"be.ems/src/framework/utils/date"
|
||||
"be.ems/src/framework/utils/parse"
|
||||
neDataModel "be.ems/src/modules/network_data/model"
|
||||
neDataService "be.ems/src/modules/network_data/service"
|
||||
neService "be.ems/src/modules/network_element/service"
|
||||
wsService "be.ems/src/modules/ws/service"
|
||||
|
||||
"github.com/go-resty/resty/v2"
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
"github.com/gorilla/mux"
|
||||
"xorm.io/xorm"
|
||||
)
|
||||
|
||||
type Response struct {
|
||||
@@ -76,7 +80,7 @@ type KpiData struct {
|
||||
StartTime string `json:"startTime" xorm:"start_time"`
|
||||
EndTime string `json:"endTime" xorm:"end_time"`
|
||||
Index int `json:"index" xorm:"index"`
|
||||
Granularity int8 `json:"granularity" xorm:"granularity"`
|
||||
Granularity int64 `json:"granularity" xorm:"granularity"`
|
||||
KPIValues []KPIVal `json:"kpiValues" xorm:"json 'kpi_values'"`
|
||||
//CreatedAt int64 `json:"createdAt" xorm:"created 'created_at'"`
|
||||
CreatedAt int64 `json:"createdAt" xorm:"'created_at'"`
|
||||
@@ -105,84 +109,6 @@ var (
|
||||
CustomUriMeasureTask = config.UriPrefix + "/performanceManagement/{apiVersion}/measureTask/{netype}"
|
||||
)
|
||||
|
||||
var xEngine *xorm.Engine
|
||||
|
||||
type DatabaseClient struct {
|
||||
dbType string
|
||||
dbUrl string
|
||||
dbConnMaxLifetime time.Duration
|
||||
dbMaxIdleConns int
|
||||
dbMaxOpenConns int
|
||||
IsShowSQL bool
|
||||
|
||||
XEngine *xorm.Engine
|
||||
}
|
||||
|
||||
var DbClient DatabaseClient
|
||||
|
||||
func InitDbClient(dbType, dbUser, dbPassword, dbHost, dbPort, dbName, dbParam string) error {
|
||||
DbClient.dbUrl = fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?%s",
|
||||
dbUser, dbPassword, dbHost, dbPort, dbName, dbParam)
|
||||
DbClient.dbType = dbType
|
||||
DbClient.dbConnMaxLifetime = 0
|
||||
DbClient.dbMaxIdleConns = 0
|
||||
DbClient.dbMaxOpenConns = 0
|
||||
if log.GetLevel() == log.LOG_TRACE {
|
||||
DbClient.IsShowSQL = true
|
||||
}
|
||||
log.Debugf("dbType:%s dbUrl:%s:", dbType, DbClient.dbUrl)
|
||||
|
||||
var err error
|
||||
DbClient.XEngine, err = xorm.NewEngine(DbClient.dbType, DbClient.dbUrl)
|
||||
if err != nil {
|
||||
log.Error("Failed to connet database:", err)
|
||||
return err
|
||||
}
|
||||
DbClient.XEngine.SetConnMaxLifetime(DbClient.dbConnMaxLifetime)
|
||||
DbClient.XEngine.SetMaxIdleConns(DbClient.dbMaxIdleConns)
|
||||
DbClient.XEngine.SetMaxOpenConns(DbClient.dbMaxOpenConns)
|
||||
DbClient.XEngine.DatabaseTZ = time.Local // 必须
|
||||
DbClient.XEngine.TZLocation = time.Local // 必须
|
||||
if DbClient.IsShowSQL {
|
||||
DbClient.XEngine.ShowSQL(true)
|
||||
}
|
||||
xEngine = DbClient.XEngine
|
||||
|
||||
// exist, err := xEngine.IsTableExist("kpi_report")
|
||||
// if err != nil {
|
||||
// log.Error("Failed to IsTableExist:", err)
|
||||
// return err
|
||||
// }
|
||||
// if exist {
|
||||
// // 复制表结构到新表
|
||||
// sql := fmt.Sprintf("CREATE TABLE IF NOT EXISTS `%s` AS SELECT * FROM kpi_report WHERE 1=0", "kpi_report_amf")
|
||||
// _, err := xEngine.Exec(sql)
|
||||
// if err != nil {
|
||||
// log.Error("Failed to Exec:", err)
|
||||
// return err
|
||||
// }
|
||||
// }
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func XormConnectDatabase(dbType, dbUser, dbPassword, dbHost, dbPort, dbName string) (*xorm.Engine, error) {
|
||||
sqlStr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local",
|
||||
dbUser, dbPassword, dbHost, dbPort, dbName)
|
||||
log.Debugf("dbType:%s Connect to:%s:******@tcp(%s:%s)/%s?charset=utf8mb4&collation=utf8mb4_general_ci&parseTime=true&loc=Local",
|
||||
dbType, dbUser, dbHost, dbPort, dbName)
|
||||
var err error
|
||||
xEngine, err = xorm.NewEngine(dbType, sqlStr) //1、Create xorm engine
|
||||
if err != nil {
|
||||
log.Error("Failed to connect database:", err)
|
||||
return nil, err
|
||||
}
|
||||
if log.GetLevel() == log.LOG_TRACE {
|
||||
xEngine.ShowSQL(true)
|
||||
}
|
||||
return xEngine, nil
|
||||
}
|
||||
|
||||
func GetDateFromTimeString(fmtString string, timeString string) string {
|
||||
t, _ := time.ParseInLocation(fmtString, timeString, time.Local)
|
||||
return t.Format("2006-01-02")
|
||||
@@ -197,6 +123,167 @@ func GetDateTimeFromTimeString(fmtString string, timeString string) string {
|
||||
func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PostKPIReportFromNF processing... ")
|
||||
|
||||
apiVer := ctx.GetParam(r, "apiVersion")
|
||||
if apiVer != global.ApiVersionV1 {
|
||||
log.Error("Uri api version is invalid. apiVersion:", apiVer)
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
var kpiReport KpiReport
|
||||
if err := ctx.ShouldBindJSON(r, &kpiReport); err != nil {
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
kpiIndexStr := ctx.GetParam(r, "index")
|
||||
|
||||
// insert kpi_report table, no session
|
||||
saveKPIData(kpiReport, parse.Number(kpiIndexStr))
|
||||
saveKPIDataC(kpiReport, parse.Number(kpiIndexStr))
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
}
|
||||
|
||||
// saveKPIData 存储KPI数据并推送到ws订阅组
|
||||
func saveKPIData(kpiReport KpiReport, index int64) int64 {
|
||||
timestamp := kpiReport.Timestamp
|
||||
taskPeriod := kpiReport.Task.Period
|
||||
taskNe := kpiReport.Task.NE
|
||||
taskNeKPIs := kpiReport.Task.NE.KPIs
|
||||
// 时间数据处理
|
||||
receiverTime := date.ParseStrToDate(timestamp, date.YYYY_MM_DDTHH_MM_SSZ)
|
||||
startTime := date.ParseStrToDate(taskPeriod.StartTime, date.YYYY_MM_DDTHH_MM_SSZ)
|
||||
endTime := date.ParseStrToDate(taskPeriod.EndTime, date.YYYY_MM_DDTHH_MM_SSZ)
|
||||
granularity := parse.Number(endTime.Sub(startTime).Seconds())
|
||||
// kpi data数据json
|
||||
KpiValues := make([]map[string]any, 0)
|
||||
for _, v := range taskNeKPIs {
|
||||
KpiValues = append(KpiValues, map[string]any{
|
||||
"kpiId": v.KPIID,
|
||||
"value": v.Value,
|
||||
"err": v.Err,
|
||||
})
|
||||
}
|
||||
KpiValuesByte, _ := json.Marshal(KpiValues)
|
||||
kpiData := neDataModel.KpiReport{
|
||||
NeType: taskNe.NeType,
|
||||
NeName: taskNe.NEName,
|
||||
RmUid: taskNe.RmUID,
|
||||
Date: date.ParseDateToStr(receiverTime, "2006-01-02"),
|
||||
StartTime: date.ParseDateToStr(startTime, "15:04:05"),
|
||||
EndTime: date.ParseDateToStr(endTime, "15:04:05"),
|
||||
Index: index,
|
||||
Granularity: granularity,
|
||||
KpiValues: string(KpiValuesByte),
|
||||
CreatedAt: receiverTime.UnixMilli(), // 时间戳毫秒实际记录到秒
|
||||
}
|
||||
insertId := neDataService.NewKpiReport.Insert(kpiData)
|
||||
if insertId > 0 {
|
||||
// 指标事件对象
|
||||
kpiEvent := map[string]any{
|
||||
"neType": kpiData.NeType,
|
||||
"neName": kpiData.NeName,
|
||||
"rmUID": kpiData.RmUid,
|
||||
"startIndex": kpiData.Index,
|
||||
"timeGroup": kpiData.CreatedAt,
|
||||
// kip_id ...
|
||||
}
|
||||
for _, v := range taskNeKPIs {
|
||||
kpiEvent[v.KPIID] = v.Value
|
||||
}
|
||||
|
||||
// 发送到匹配的网元
|
||||
neInfo := neService.NewNeInfo.FindByRmuid(kpiData.RmUid)
|
||||
if neInfo.RmUID == kpiData.RmUid {
|
||||
// 推送到ws订阅组
|
||||
wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s%s_%s", wsService.GROUP_KPI, neInfo.NeType, neInfo.NeId), kpiEvent)
|
||||
if neInfo.NeType == "UPF" {
|
||||
wsService.NewWSSend.ByGroupID(wsService.GROUP_KPI_UPF+neInfo.NeId, kpiEvent)
|
||||
}
|
||||
}
|
||||
}
|
||||
return insertId
|
||||
}
|
||||
|
||||
// saveKPIDataC 存储自定义KPI数据并推送到ws订阅组
|
||||
func saveKPIDataC(kpiReport KpiReport, index int64) int64 {
|
||||
timestamp := kpiReport.Timestamp
|
||||
taskPeriod := kpiReport.Task.Period
|
||||
taskNe := kpiReport.Task.NE
|
||||
taskNeKPIs := kpiReport.Task.NE.KPIs
|
||||
// 时间数据处理
|
||||
receiverTime := date.ParseStrToDate(timestamp, date.YYYY_MM_DDTHH_MM_SSZ)
|
||||
startTime := date.ParseStrToDate(taskPeriod.StartTime, date.YYYY_MM_DDTHH_MM_SSZ)
|
||||
endTime := date.ParseStrToDate(taskPeriod.EndTime, date.YYYY_MM_DDTHH_MM_SSZ)
|
||||
granularity := parse.Number(endTime.Sub(startTime).Seconds())
|
||||
// kpi data数据
|
||||
KpiValues := make([]map[string]any, 0)
|
||||
kpiValMap := map[string]any{}
|
||||
for _, v := range taskNeKPIs {
|
||||
kpiValMap[v.KPIID] = v.Value
|
||||
}
|
||||
// 自定义kpiId数据
|
||||
cTitles := kpi_c_title.GetActiveKPICList(taskNe.NeType)
|
||||
for _, v := range cTitles {
|
||||
item := map[string]any{
|
||||
"kpiId": *v.KpiID,
|
||||
"value": 0,
|
||||
"err": "",
|
||||
}
|
||||
// 计算结果
|
||||
result, err := evaluate.CalcExpr(*v.Expression, kpiValMap)
|
||||
if err != nil {
|
||||
item["value"] = 0
|
||||
item["err"] = err.Error()
|
||||
} else {
|
||||
item["value"] = result
|
||||
}
|
||||
KpiValues = append(KpiValues, item)
|
||||
}
|
||||
|
||||
KpiValuesByte, _ := json.Marshal(KpiValues)
|
||||
kpiData := neDataModel.KpiCReport{
|
||||
NeType: taskNe.NeType,
|
||||
NeName: taskNe.NEName,
|
||||
RmUid: taskNe.RmUID,
|
||||
Date: date.ParseDateToStr(receiverTime, "2006-01-02"),
|
||||
StartTime: date.ParseDateToStr(startTime, "15:04:05"),
|
||||
EndTime: date.ParseDateToStr(endTime, "15:04:05"),
|
||||
Index: index,
|
||||
Granularity: granularity,
|
||||
KpiValues: string(KpiValuesByte),
|
||||
CreatedAt: receiverTime.UnixMilli(), // 时间戳毫秒实际记录到秒
|
||||
}
|
||||
insertId := neDataService.NewKpiCReport.Insert(kpiData)
|
||||
if insertId > 0 {
|
||||
// 指标事件对象
|
||||
kpiEvent := map[string]any{
|
||||
"neType": kpiData.NeType,
|
||||
"neName": kpiData.NeName,
|
||||
"rmUID": kpiData.RmUid,
|
||||
"startIndex": kpiData.Index,
|
||||
"timeGroup": kpiData.CreatedAt,
|
||||
// kip_id ...
|
||||
}
|
||||
for _, v := range KpiValues {
|
||||
kpiEvent[fmt.Sprint(v["kpiId"])] = v["value"]
|
||||
}
|
||||
|
||||
// 发送到匹配的网元
|
||||
neInfo := neService.NewNeInfo.FindByRmuid(kpiData.RmUid)
|
||||
if neInfo.RmUID == kpiData.RmUid {
|
||||
// 推送自定义KPI到ws订阅组
|
||||
wsService.NewWSSend.ByGroupID(fmt.Sprintf("%s%s_%s", wsService.GROUP_KPI_C, neInfo.NeType, neInfo.NeId), kpiEvent)
|
||||
}
|
||||
}
|
||||
return insertId
|
||||
}
|
||||
|
||||
// process KPI report post message from NFs 旧版
|
||||
func PostKPIReportFromNFOld(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("PostKPIReportFromNF processing... ")
|
||||
|
||||
vars := mux.Vars(r)
|
||||
apiVer := vars["apiVersion"]
|
||||
if apiVer != global.ApiVersionV1 {
|
||||
@@ -224,9 +311,9 @@ func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
endTime := global.GetFmtTimeString(layout, kpiReport.Task.Period.EndTime, time.DateTime)
|
||||
// get time granularity from startTime and endTime
|
||||
seconds, _ := global.GetSecondDuration(startTime, endTime)
|
||||
var granularity int8 = 60
|
||||
var granularity int64 = 60
|
||||
if seconds != 0 && seconds <= math.MaxInt8 && seconds >= math.MinInt8 {
|
||||
granularity = int8(seconds)
|
||||
granularity = int64(seconds)
|
||||
}
|
||||
|
||||
// insert into new kpi_report_xxx table
|
||||
@@ -269,8 +356,9 @@ func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// insert kpi_report table, no session
|
||||
tableName := "kpi_report_" + strings.ToLower(kpiReport.Task.NE.NeType)
|
||||
affected, err := xEngine.Table(tableName).Insert(kpiData)
|
||||
if err != nil && affected <= 0 {
|
||||
// affected, err := xEngine.Table(tableName).Insert(kpiData)
|
||||
tx := db.DB("").Table(tableName).Create(kpiData)
|
||||
if tx.Error != nil && tx.RowsAffected <= 0 {
|
||||
log.Errorf("Failed to insert %s:%v", tableName, err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
@@ -283,12 +371,12 @@ func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
Date: kpiData.Date,
|
||||
StartTime: &kpiData.StartTime,
|
||||
EndTime: &kpiData.EndTime,
|
||||
Index: int16(kpiData.Index),
|
||||
Index: int64(kpiData.Index),
|
||||
Granularity: &kpiData.Granularity,
|
||||
}
|
||||
|
||||
// 发送到匹配的网元
|
||||
neInfo := neService.NewNeInfo.SelectNeInfoByRmuid(kpiData.RmUid)
|
||||
neInfo := neService.NewNeInfo.FindByRmuid(kpiData.RmUid)
|
||||
// custom kpi report to FE
|
||||
kpiCEvent := map[string]any{
|
||||
// kip_id ...
|
||||
@@ -301,23 +389,23 @@ func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
"createdAt": kpiData.CreatedAt,
|
||||
"granularity": kpiData.Granularity,
|
||||
}
|
||||
kpiCList := kpi_c_title.GetActiveKPICList(kpiData.NEType)
|
||||
for _, k := range kpiCList {
|
||||
result, err := evaluate.CalcExpr(*k.Expression, kpiValMap)
|
||||
kpiCVal := new(kpi_c_report.KpiCVal)
|
||||
kpiCVal.KPIID = *k.KpiID
|
||||
if err != nil {
|
||||
kpiCVal.Value = 0.0
|
||||
kpiCVal.Err = err.Error()
|
||||
} else {
|
||||
kpiCVal.Value = result
|
||||
}
|
||||
// kpiCList := kpi_c_title.GetActiveKPICList(kpiData.NEType)
|
||||
// for _, k := range kpiCList {
|
||||
// result, err := evaluate.CalcExpr(*k.Expression, kpiValMap)
|
||||
// kpiCVal := new(kpi_c_report.KpiCVal)
|
||||
// kpiCVal.KPIID = *k.KpiID
|
||||
// if err != nil {
|
||||
// kpiCVal.Value = 0.0
|
||||
// kpiCVal.Err = err.Error()
|
||||
// } else {
|
||||
// kpiCVal.Value = result
|
||||
// }
|
||||
|
||||
report.KpiValues = append(report.KpiValues, *kpiCVal)
|
||||
// report.KpiValues = append(report.KpiValues, *kpiCVal)
|
||||
|
||||
// set KPIC event kpiid and value
|
||||
kpiCEvent[kpiCVal.KPIID] = kpiCVal.Value
|
||||
}
|
||||
// // set KPIC event kpiid and value
|
||||
// kpiCEvent[kpiCVal.KPIID] = kpiCVal.Value
|
||||
// }
|
||||
|
||||
// KPI自定义指标入库
|
||||
kpi_c_report.InsertKpiCReport(kpiData.NEType, report)
|
||||
@@ -335,11 +423,19 @@ func PostKPIReportFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
}
|
||||
|
||||
type MeasureTask struct {
|
||||
Tasks []Task `json:"Tasks"`
|
||||
NotifyUrl string `json:"NotifyUrl"` /* "http://xEngine.xEngine.xEngine.x:xxxx/api/rest/performanceManagement/v1/elementType/smf/objectType/measureReport */
|
||||
// type MeasureTask struct {
|
||||
// Tasks []Task `json:"Tasks"`
|
||||
// NotifyUrl string `json:"NotifyUrl"` /* "http://xEngine.xEngine.xEngine.x:xxxx/api/rest/performanceManagement/v1/elementType/smf/objectType/measureReport */
|
||||
// }
|
||||
type ScheduleJ struct {
|
||||
Type string `json:"Type"`
|
||||
Days []int `json:"Days"`
|
||||
}
|
||||
|
||||
type Period struct {
|
||||
Start string `json:"Start"`
|
||||
End string `json:"End"`
|
||||
}
|
||||
type Task struct {
|
||||
Id int `json:"Id"`
|
||||
|
||||
@@ -347,9 +443,9 @@ type Task struct {
|
||||
EndTime string `json:"EndTime"`
|
||||
|
||||
Schedule struct {
|
||||
Type string `json:"Type"` // 计划类型:Weekly/Monthly, 如果type为"", 则任务以StartTime和EndTime为条件进行统计, 否则以Shedule方式进行
|
||||
Days []int `json:"Days"` // Weekly: [0,1,...,5,6] 星期日为0, Monthly: [1,2,3,...,30,31]
|
||||
Periods []dborm.Period `json:"Periods"`
|
||||
Type string `json:"Type"` // 计划类型:Weekly/Monthly, 如果type为"", 则任务以StartTime和EndTime为条件进行统计, 否则以Shedule方式进行
|
||||
Days []int `json:"Days"` // Weekly: [0,1,...,5,6] 星期日为0, Monthly: [1,2,3,...,30,31]
|
||||
Periods []Period `json:"Periods"`
|
||||
/*
|
||||
Periods []struct {
|
||||
Start string `json:"Start"` // 零点或者零点加测量粒度的整数倍
|
||||
@@ -358,8 +454,8 @@ type Task struct {
|
||||
*/
|
||||
} `json:"Schedule"`
|
||||
|
||||
GranulOption string `json:"GranulOption"` // 测量粒度选项:15M/30M/60M/24H
|
||||
KPISet []dborm.KpiSetJ `json:"KPISet"`
|
||||
GranulOption string `json:"GranulOption"` // 测量粒度选项:15M/30M/60M/24H
|
||||
KPISet []KpiSetJ `json:"KPISet"`
|
||||
/*
|
||||
KPISet []struct {
|
||||
Code string `json:"Code"` // 统计编码 如:SMFHA01
|
||||
@@ -367,7 +463,31 @@ type Task struct {
|
||||
} `json:"KPISet"`
|
||||
*/
|
||||
}
|
||||
type KpiSetJ struct {
|
||||
Code string `json:"Code"` // 统计编码 如:SMFHA01
|
||||
KPIs []string `json:"KPIs` // 指标项集合 ["SMF.AttCreatePduSession", "SMF.AttCreatePduSession._Dnn"]
|
||||
}
|
||||
|
||||
type MeasureTask struct {
|
||||
Id int `json:"id" xorm:"pk 'id' autoincr"`
|
||||
NeType string `json:"neType" xorm:"ne_type"`
|
||||
NeIds []string `json:"neIds" xorm:"ne_ids"`
|
||||
KpiSet []KpiSetJ `json:"KPISet" xorm:"kpi_set"`
|
||||
StartTime string `json:"startTime" xorm:"start_time"`
|
||||
EndTime string `json:"endTime" xorm:"end_time"`
|
||||
Periods []Period `json:"Periods" xorm:"periods`
|
||||
Schedule []ScheduleJ `json:"Schedule" xorm:"schedule"`
|
||||
GranulOption string `json:"granulOption" xorm:"granul_option"`
|
||||
Status string `json:"status" xorm:"status"`
|
||||
AccountID string `json:"accountId" xorm:"account_id"`
|
||||
Comment string `json:"comment" xorm:"comment"`
|
||||
CreateTime string `json:"createTime" xorm:"create_time"`
|
||||
UpdateTime string `json:"updateTime" xorm:"update_time"`
|
||||
DeleteTime string `json:"deleteTime xorm:"delete_time"`
|
||||
|
||||
Tasks []Task `json:"Tasks"`
|
||||
NotifyUrl string `json:"NotifyUrl"` /* "http://xEngine.xEngine.xEngine.x:xxxx/api/rest/performanceManagement/v1/elementType/smf/objectType/measureReport */
|
||||
}
|
||||
type MeasureReport struct {
|
||||
Id int `json:"Id"`
|
||||
TimeStamp string `json:"TimeStamp"`
|
||||
@@ -394,6 +514,33 @@ type MeasureReport struct {
|
||||
} `json:"Report"`
|
||||
}
|
||||
|
||||
func GetMeasureTask(taskId int) (*MeasureTask, error) {
|
||||
log.Debug("GetMeasureTask processing... ")
|
||||
|
||||
measureTask := new(MeasureTask)
|
||||
tx := db.DB("").Table("measure_task").Where("id=?", taskId).Find(measureTask)
|
||||
if tx.Error != nil {
|
||||
log.Error("Failed to get table measure_task from database:", tx.Error)
|
||||
|
||||
return nil, tx.Error
|
||||
}
|
||||
|
||||
log.Debug("Measure Task:", measureTask)
|
||||
return measureTask, nil
|
||||
}
|
||||
|
||||
func XormGetActiveMeasureTask(measureTasks *[]MeasureTask) (*[]MeasureTask, error) {
|
||||
log.Debug("XormGetActiveMeasureTask processing... ")
|
||||
tx := db.DB("").Table("measure_task").Where("status='Active'").Find(measureTasks)
|
||||
if tx.Error != nil {
|
||||
log.Error("Failed to get table measure_task:", tx.Error)
|
||||
return nil, tx.Error
|
||||
}
|
||||
|
||||
log.Debug("measureTasks:", measureTasks)
|
||||
return measureTasks, nil
|
||||
}
|
||||
|
||||
type MeasureData struct {
|
||||
// Id int `json:"id" xorm:"pk 'id' autoincr"`
|
||||
Id int `json:"id" xorm:"-"`
|
||||
@@ -438,8 +585,6 @@ func PostMeasureReportFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
_ = json.Unmarshal(body, &measureReport)
|
||||
log.Debug("measureReport:", measureReport)
|
||||
|
||||
session := xEngine.NewSession()
|
||||
defer session.Close()
|
||||
measureData := new(MeasureData)
|
||||
layout := global.DateTime
|
||||
measureData.Date = GetDateFromTimeString(layout, measureReport.Report.Period.StartTime)
|
||||
@@ -469,8 +614,8 @@ func PostMeasureReportFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
measureData.Value = v.Value
|
||||
log.Debug("measureData:", measureData)
|
||||
|
||||
affected, err := session.Insert(measureData)
|
||||
if err != nil && affected <= 0 {
|
||||
err := db.DB("").Create(measureData).Error
|
||||
if err != nil {
|
||||
log.Error("Failed to insert measure_data:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
@@ -480,8 +625,8 @@ func PostMeasureReportFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
measureData.Value = 0
|
||||
log.Debug("measureData:", measureData)
|
||||
|
||||
affected, err := session.Insert(measureData)
|
||||
if err != nil && affected <= 0 {
|
||||
err := db.DB("").Create(measureData).Error
|
||||
if err != nil {
|
||||
log.Error("Failed to insert measure_data:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
@@ -514,7 +659,7 @@ func PostMeasureTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
measureTask.Tasks = make([]Task, 1)
|
||||
for _, taskId := range taskIds {
|
||||
id, _ := strconv.Atoi(taskId)
|
||||
task, err := dborm.GetMeasureTask(id)
|
||||
task, err := GetMeasureTask(id)
|
||||
if err != nil {
|
||||
log.Error("Failed to connect database: ", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
@@ -634,7 +779,7 @@ func PostMeasureTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("StatusCode: ", response.StatusCode())
|
||||
switch response.StatusCode() {
|
||||
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
|
||||
taskInfo := new(dborm.MeasureTask)
|
||||
taskInfo := new(MeasureTask)
|
||||
taskInfo.Status = dborm.MeasureTaskStatusActive
|
||||
taskInfo.CreateTime = time.Now().Format(time.DateTime)
|
||||
affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo)
|
||||
@@ -688,7 +833,7 @@ func DeleteMeasureTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
respMsg := make(map[string]interface{})
|
||||
for _, taskId := range taskIds {
|
||||
id, _ := strconv.Atoi(taskId)
|
||||
task, err := dborm.GetMeasureTask(id)
|
||||
task, err := GetMeasureTask(id)
|
||||
if err != nil {
|
||||
log.Error("Failed to connect database: ", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
@@ -711,7 +856,7 @@ func DeleteMeasureTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("neIds:", task.NeIds)
|
||||
if len(task.NeIds) == 0 {
|
||||
log.Warn("Not found target NE in the measure task")
|
||||
taskInfo := new(dborm.MeasureTask)
|
||||
taskInfo := new(MeasureTask)
|
||||
taskInfo.Status = dborm.MeasureTaskStatusDeleted
|
||||
affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo)
|
||||
if err != nil {
|
||||
@@ -745,7 +890,7 @@ func DeleteMeasureTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
if err != nil {
|
||||
// to avoid can't delete the task for abnormal NF
|
||||
log.Error("Failed to resty delete:", err)
|
||||
taskInfo := new(dborm.MeasureTask)
|
||||
taskInfo := new(MeasureTask)
|
||||
taskInfo.Status = dborm.MeasureTaskStatusDeleted
|
||||
affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo)
|
||||
if err != nil {
|
||||
@@ -762,7 +907,7 @@ func DeleteMeasureTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Info("StatusCode: ", response.StatusCode())
|
||||
switch response.StatusCode() {
|
||||
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
|
||||
taskInfo := new(dborm.MeasureTask)
|
||||
taskInfo := new(MeasureTask)
|
||||
taskInfo.Status = dborm.MeasureTaskStatusDeleted
|
||||
affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo)
|
||||
if err != nil {
|
||||
@@ -781,7 +926,7 @@ func DeleteMeasureTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
respMsg["error"] = body
|
||||
}
|
||||
} else {
|
||||
taskInfo := new(dborm.MeasureTask)
|
||||
taskInfo := new(MeasureTask)
|
||||
taskInfo.Status = dborm.MeasureTaskStatusDeleted
|
||||
affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo)
|
||||
if err != nil {
|
||||
@@ -819,7 +964,7 @@ func PatchMeasureTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
respMsg := make(map[string]interface{})
|
||||
for _, taskId := range taskIds {
|
||||
id, _ := strconv.Atoi(taskId)
|
||||
task, err := dborm.GetMeasureTask(id)
|
||||
task, err := GetMeasureTask(id)
|
||||
if err != nil {
|
||||
log.Error("Failed to connect database: ", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
@@ -842,7 +987,7 @@ func PatchMeasureTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
if len(task.NeIds) == 0 {
|
||||
taskInfo := new(dborm.MeasureTask)
|
||||
taskInfo := new(MeasureTask)
|
||||
taskInfo.Status = dborm.MeasureTaskStatusInactive
|
||||
affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo)
|
||||
if err != nil {
|
||||
@@ -865,7 +1010,7 @@ func PatchMeasureTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
if neInfo == nil {
|
||||
taskInfo := new(dborm.MeasureTask)
|
||||
taskInfo := new(MeasureTask)
|
||||
taskInfo.Status = dborm.MeasureTaskStatusInactive
|
||||
affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo)
|
||||
if err != nil {
|
||||
@@ -897,7 +1042,7 @@ func PatchMeasureTaskToNF(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("StatusCode: ", response.StatusCode())
|
||||
switch response.StatusCode() {
|
||||
case http.StatusOK, http.StatusCreated, http.StatusNoContent, http.StatusAccepted:
|
||||
taskInfo := new(dborm.MeasureTask)
|
||||
taskInfo := new(MeasureTask)
|
||||
taskInfo.Status = dborm.MeasureTaskStatusInactive
|
||||
affected, err := dborm.XormUpdateTableById(id, dborm.TableNameMeasureTask, taskInfo)
|
||||
if err != nil {
|
||||
@@ -975,15 +1120,12 @@ func PostMeasurementFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
_ = json.Unmarshal(body, &measurement)
|
||||
log.Debug("measurement:", measurement)
|
||||
|
||||
session := dborm.DbClient.XEngine.NewSession()
|
||||
defer session.Close()
|
||||
|
||||
// layout := global.DateTime
|
||||
layout := time.RFC3339
|
||||
measurement.Date = GetDateFromTimeString(layout, measurement.StartTime)
|
||||
measurement.StartTime = GetDateTimeFromTimeString(layout, measurement.StartTime)
|
||||
affected, err := session.Table("nbi_pm").Insert(measurement)
|
||||
if err != nil && affected <= 0 {
|
||||
tx := db.DB("").Table("nbi_pm").Create(measurement)
|
||||
if tx.Error != nil && tx.RowsAffected <= 0 {
|
||||
log.Error("Failed to insert nbi_pm:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
@@ -1059,14 +1201,11 @@ func GetMeasurementFromNF(w http.ResponseWriter, r *http.Request) {
|
||||
_ = json.Unmarshal(response.Body(), &measurement)
|
||||
log.Debug("measurement:", measurement)
|
||||
|
||||
session := dborm.DbClient.XEngine.NewSession()
|
||||
defer session.Close()
|
||||
|
||||
layout := time.RFC3339
|
||||
measurement.Date = GetDateFromTimeString(layout, measurement.StartTime)
|
||||
measurement.StartTime = GetDateTimeFromTimeString(layout, measurement.StartTime)
|
||||
affected, err := session.Table("nbi_pm").Insert(measurement)
|
||||
if err != nil && affected <= 0 {
|
||||
tx := db.DB("").Table("nbi_pm").Create(measurement)
|
||||
if tx.Error != nil && tx.RowsAffected <= 0 {
|
||||
log.Error("Failed to insert nbi_pm:", err)
|
||||
services.ResponseInternalServerError500DatabaseOperationFailed(w)
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user