refactor: 重构更新多个文件中的相关调用

This commit is contained in:
TsMask
2025-02-20 10:11:40 +08:00
parent f3c33b31ac
commit 5b9bcd6660
34 changed files with 1243 additions and 1894 deletions

View File

@@ -1,13 +1,15 @@
package kpi_c_report
import (
"encoding/json"
"fmt"
"net/http"
"strconv"
"strings"
"be.ems/lib/dborm"
"be.ems/lib/services"
"be.ems/src/framework/database/db"
"be.ems/src/framework/utils/parse"
"github.com/gin-gonic/gin"
)
@@ -31,7 +33,7 @@ func (k *KpiCReport) Get(c *gin.Context) {
return
}
tableName := TableName() + "_" + strings.ToLower(querys.NeType)
dbg := dborm.DefaultDB().Table(tableName)
dbg := db.DB("").Model(&KpiCReport{}).Table(tableName)
if querys.NeID != "" {
conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=? and n.status=1)")
@@ -69,7 +71,7 @@ func (k *KpiCReport) Get(c *gin.Context) {
dbg = dbg.Order(orderBy)
}
//err := dborm.DefaultDB().Table(tableName).Where(whereSql, params...).Find(&reports).Error
//err := db.DB("").Table(tableName).Where(whereSql, params...).Find(&reports).Error
err := dbg.Find(&reports).Error
if err != nil {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
@@ -98,7 +100,7 @@ func (k *KpiCReport) GetReport2FE(c *gin.Context) {
return
}
tableName := TableName() + "_" + strings.ToLower(querys.NeType)
dbg := dborm.DefaultDB().Table(tableName)
dbg := db.DB("").Model(&KpiCReport{}).Table(tableName)
if querys.NeID != "" {
conditions = append(conditions, "rm_uid = (select n.rm_uid from ne_info n where n.ne_type=? and n.ne_id=? and n.status=1)")
@@ -108,11 +110,11 @@ func (k *KpiCReport) GetReport2FE(c *gin.Context) {
return
}
if querys.StartTime != "" {
conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) >= ?")
conditions = append(conditions, "created_at >= ?")
params = append(params, querys.StartTime)
}
if querys.EndTime != "" {
conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) <= ?")
conditions = append(conditions, "created_at <= ?")
params = append(params, querys.EndTime)
}
conditions = append(conditions, "kpi_values != 'null'")
@@ -136,7 +138,7 @@ func (k *KpiCReport) GetReport2FE(c *gin.Context) {
dbg = dbg.Order(orderBy)
}
//err := dborm.DefaultDB().Table(tableName).Where(whereSql, params...).Find(&reports).Error
//err := db.DB("").Table(tableName).Where(whereSql, params...).Find(&reports).Error
err := dbg.Find(&results).Error
if err != nil {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
@@ -156,14 +158,24 @@ func (k *KpiCReport) GetReport2FE(c *gin.Context) {
"createdAt": r.CreatedAt,
"granularity": r.Granularity,
}
// 解析 JSON 字符串为 map
var kpiValues []map[string]any
err := json.Unmarshal([]byte(r.KpiValues), &kpiValues)
if err != nil {
continue
}
for _, k := range r.KpiValues {
formatted := fmt.Sprintf("%.3f", k.Value)
// 遍历 kpiValues 数组
for _, k := range kpiValues {
kpiId := fmt.Sprint(k["kpiId"])
value := parse.Number(k["value"])
formatted := fmt.Sprintf("%.3d", value)
formattedFloat, err := strconv.ParseFloat(formatted, 64)
if err != nil {
formattedFloat = 0
}
report[k.KPIID] = formattedFloat
report[kpiId] = formattedFloat
}
reports = append(reports, report)
}
@@ -190,14 +202,14 @@ func (k *KpiCReport) GetTotalList(c *gin.Context) {
return
}
tableName := TableName() + "_" + strings.ToLower(querys.NeType)
dbg := dborm.DefaultDB().Table(tableName)
dbg := db.DB("").Model(&KpiCReport{}).Table(tableName)
if querys.StartTime != "" {
conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) >= ?")
conditions = append(conditions, "created_at >= ?")
params = append(params, querys.StartTime)
}
if querys.EndTime != "" {
conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) <= ?")
conditions = append(conditions, "created_at <= ?")
params = append(params, querys.EndTime)
}
conditions = append(conditions, "kpi_values != 'null'")
@@ -230,7 +242,7 @@ func (k *KpiCReport) GetTotalList(c *gin.Context) {
dbg = dbg.Order(orderBy)
}
//err := dborm.DefaultDB().Table(tableName).Where(whereSql, params...).Find(&reports).Error
//err := db.DB("").Table(tableName).Where(whereSql, params...).Find(&reports).Error
err = dbg.Find(&reports).Error
if err != nil {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
@@ -259,8 +271,7 @@ func (k *KpiCReport) Total(c *gin.Context) {
return
}
tableName := TableName() + "_" + strings.ToLower(querys.NeType)
dbg := dborm.DefaultDB().Table(tableName)
dbg := db.DB("").Model(&KpiCReport{}).Table(tableName)
if querys.StartTime != "" {
conditions = append(conditions, "(UNIX_TIMESTAMP(created_at) * 1000) >= ?")
params = append(params, querys.StartTime)
@@ -293,7 +304,8 @@ func (k *KpiCReport) Post(c *gin.Context) {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return
}
if err := dborm.DefaultDB().Create(&report).Error; err != nil {
dbg := db.DB("").Model(&KpiCReport{})
if err := dbg.Create(&report).Error; err != nil {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return
}
@@ -303,8 +315,8 @@ func (k *KpiCReport) Post(c *gin.Context) {
func (k *KpiCReport) Put(c *gin.Context) {
var report KpiCReport
id := c.Param("id")
if err := dborm.DefaultDB().First(&report, id).Error; err != nil {
dbg := db.DB("").Model(&KpiCReport{})
if err := dbg.First(&report, id).Error; err != nil {
c.JSON(http.StatusOK, services.ErrResp("custom indicator report not found"))
return
}
@@ -313,14 +325,14 @@ func (k *KpiCReport) Put(c *gin.Context) {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return
}
dborm.DefaultDB().Save(&report)
db.DB("").Model(&KpiCReport{}).Save(&report)
c.JSON(http.StatusOK, services.DataResp(report))
}
func (k *KpiCReport) Delete(c *gin.Context) {
id := c.Param("id")
if err := dborm.DefaultDB().Delete(&KpiCReport{}, id).Error; err != nil {
if err := db.DB("").Delete(&KpiCReport{}, id).Error; err != nil {
c.JSON(http.StatusOK, services.ErrResp("custom indicator report not found"))
return
}
@@ -330,7 +342,8 @@ func (k *KpiCReport) Delete(c *gin.Context) {
func InsertKpiCReport(neType string, report KpiCReport) {
tableName := TableName() + "_" + strings.ToLower(neType)
if err := dborm.DefaultDB().Table(tableName).Create(&report).Error; err != nil {
dbg := db.DB("").Model(&KpiCReport{})
if err := dbg.Table(tableName).Create(&report).Error; err != nil {
return
}
}

View File

@@ -1,32 +1,17 @@
package kpi_c_report
import (
"database/sql/driver"
"encoding/json"
"fmt"
"time"
)
type KpiCVal struct {
KPIID string `json:"kpi_id" gorm:"column:kpi_id"`
Value float64 `json:"value" gorm:"column:value"`
Err string `json:"err" gorm:"column:err"`
}
type KpiCValues []KpiCVal
type KpiCReport struct {
ID int `gorm:"column:id;primary_key;auto_increment" json:"id"`
NeType *string `gorm:"column:ne_type;default:NULL" json:"neType,omitempty"`
NeName *string `gorm:"column:ne_name;default:" json:"neName,omitempty"`
RmUID *string `gorm:"column:rm_uid;default:NULL" json:"rmUid,omitempty"`
Date string `gorm:"column:date" json:"date"` // time.Time `gorm:"column:date" json:"date"`
StartTime *string `gorm:"column:start_time;default:NULL" json:"startTime,omitempty"`
EndTime *string `gorm:"column:end_time;default:NULL" json:"endTime,omitempty"`
Index int16 `gorm:"column:index" json:"index"`
Granularity *int8 `gorm:"column:granularity;default:60" json:"granularity,omitempty"` //Time granualarity: 5/10/.../60/300 (second)
KpiValues KpiCValues `gorm:"column:kpi_values;type:json" json:"kpiValues,omitempty"`
CreatedAt *time.Time `gorm:"column:created_at;default:current_timestamp()" json:"createdAt,omitempty"`
ID int `gorm:"column:id;primary_key;auto_increment" json:"id"`
NeType *string `gorm:"column:ne_type;default:NULL" json:"neType,omitempty"`
NeName *string `gorm:"column:ne_name;default:" json:"neName,omitempty"`
RmUID *string `gorm:"column:rm_uid;" json:"rmUid,omitempty"`
Date string `gorm:"column:date" json:"date"` // time.Time `gorm:"column:date" json:"date"`
StartTime *string `gorm:"column:start_time" json:"startTime,omitempty"`
EndTime *string `gorm:"column:end_time" json:"endTime,omitempty"`
Index int64 `gorm:"column:index" json:"index"`
Granularity *int64 `gorm:"column:granularity" json:"granularity,omitempty"` //Time granualarity: 5/10/.../60/300 (second)
KpiValues string `gorm:"column:kpi_values" json:"kpiValues,omitempty"`
CreatedAt *int64 `gorm:"column:created_at" json:"createdAt,omitempty"`
}
type KpiCReportQuery struct {
@@ -55,17 +40,3 @@ type KpiCReport2FE struct {
func TableName() string {
return "kpi_c_report"
}
// 将 KpiCValues 转换为 JSON 字节
func (k KpiCValues) Value() (driver.Value, error) {
return json.Marshal(k)
}
// 从字节中扫描 KpiCValues
func (k *KpiCValues) Scan(value interface{}) error {
b, ok := value.([]byte)
if !ok {
return fmt.Errorf("failed to scan value: %v", value)
}
return json.Unmarshal(b, k)
}

View File

@@ -4,13 +4,16 @@ import (
"fmt"
"net/http"
"regexp"
"sort"
"strconv"
"strings"
"time"
"be.ems/lib/dborm"
"be.ems/lib/log"
"be.ems/lib/services"
"be.ems/src/framework/utils/ctx"
"be.ems/src/framework/database/db"
"be.ems/src/framework/reqctx"
"github.com/gin-gonic/gin"
)
@@ -19,7 +22,7 @@ func (k *KpiCTitle) GetToalList(c *gin.Context) {
var titles []KpiCTitle
var conditions []string
var params []any
i18n := ctx.AcceptLanguage(c)
i18n := reqctx.AcceptLanguage(c)
var querys KpiCTitleQuery
if err := c.ShouldBindQuery(&querys); err != nil {
@@ -27,7 +30,7 @@ func (k *KpiCTitle) GetToalList(c *gin.Context) {
return
}
dbg := dborm.DefaultDB().Table(k.TableName())
dbg := db.DB("").Model(&KpiCTitle{})
// construct condition to get
if neType := querys.NeType; neType != "" {
conditions = append(conditions, "ne_type = ?")
@@ -37,7 +40,7 @@ func (k *KpiCTitle) GetToalList(c *gin.Context) {
conditions = append(conditions, "status = ?")
params = append(params, status)
} else {
conditions = append(conditions, "status != 'Deleted'")
conditions = append(conditions, "status != '2'")
}
whereSql := ""
@@ -81,7 +84,7 @@ func (k *KpiCTitle) Get(c *gin.Context) {
var titles []KpiCTitle
var conditions []string
var params []any
i18n := ctx.AcceptLanguage(c)
i18n := reqctx.AcceptLanguage(c)
// construct condition to get
if neType := c.Query("neType"); neType != "" {
@@ -92,14 +95,14 @@ func (k *KpiCTitle) Get(c *gin.Context) {
conditions = append(conditions, "status = ?")
params = append(params, status)
} else {
conditions = append(conditions, "status != 'Deleted'")
conditions = append(conditions, "status != '2'")
}
whereSql := ""
if len(conditions) > 0 {
whereSql += strings.Join(conditions, " and ")
}
if err := dborm.DefaultDB().Where(whereSql, params...).Find(&titles).Error; err != nil {
if err := db.DB("").Where(whereSql, params...).Find(&titles).Error; err != nil {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return
}
@@ -126,11 +129,18 @@ func (k *KpiCTitle) expressionAlias(titles []KpiCTitle, i18n string) {
} else {
sql = fmt.Sprintf("SELECT en_title FROM kpi_title WHERE kpi_id='%s'", match[1])
}
err := dborm.XCoreDB().QueryRow(sql).Scan(&alias)
m, err := db.RawDB("", sql, nil)
if err != nil {
log.Warn("Failed to QueryRow:", err)
continue
}
if len(m) > 0 {
if i18n == "zh" {
alias = fmt.Sprintf("%v", m[0]["cn_title"])
} else {
alias = fmt.Sprintf("%v", m[0]["en_title"])
}
}
title.ExprAlias = regexp.MustCompile(match[1]).ReplaceAllString(title.ExprAlias, alias)
}
}
@@ -149,7 +159,7 @@ func (k *KpiCTitle) Total(c *gin.Context) {
conditions = append(conditions, "status = ?")
params = append(params, status)
} else {
conditions = append(conditions, "status != 'Deleted'")
conditions = append(conditions, "status != '2'")
}
whereSql := ""
@@ -157,7 +167,7 @@ func (k *KpiCTitle) Total(c *gin.Context) {
whereSql += strings.Join(conditions, " and ")
}
var total int64 = 0
if err := dborm.DefaultDB().Table(k.TableName()).Where(whereSql, params...).Count(&total).Error; err != nil {
if err := db.DB("").Table(k.TableName()).Where(whereSql, params...).Count(&total).Error; err != nil {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return
}
@@ -166,31 +176,56 @@ func (k *KpiCTitle) Total(c *gin.Context) {
}
func (k *KpiCTitle) Post(c *gin.Context) {
var title, res KpiCTitle
var title KpiCTitle
if err := c.ShouldBindJSON(&title); err != nil {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return
}
userName := ctx.LoginUserToUserName(c)
userName := reqctx.LoginUserToUserName(c)
title.CreatedBy = &userName
result := dborm.DefaultDB().Where("ne_type=? and (kpi_id=? or title=?) and status!='Deleted'", title.NeType, title.KpiID, title.Title).First(&title)
tx := db.DB("").Model(&KpiCTitle{})
result := tx.Where("ne_type=? and (kpi_id=? or title=?) and status!='2'", title.NeType, title.KpiID, title.Title).First(&title)
if result.RowsAffected > 0 {
c.JSON(http.StatusOK, services.ErrResp("custom indicator already exist"))
return
}
// Regexp match like AMF.C.01
kpiIDRegexp := "^" + *title.NeType + "\\.C\\.[0-9]{2}$"
ret := dborm.DefaultDB().Table("kpi_c_title").
Where("ne_type=? and kpi_id REGEXP ? ORDER BY kpi_id DESC LIMIT 1", title.NeType, kpiIDRegexp).Scan(&res)
if err := ret.Error; err != nil {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return
}
// kpiIDRegexp := "^" + *title.NeType + "\\.C\\.[0-9]{2}$"
// ret := db.DB("").Table("kpi_c_title").
// Where("ne_type=? and kpi_id REGEXP ? ORDER BY kpi_id DESC LIMIT 1", title.NeType, kpiIDRegexp).Scan(&res)
// if err := ret.Error; err != nil {
// c.JSON(http.StatusOK, services.ErrResp(err.Error()))
// return
// }
titles := []KpiCTitle{}
ret := db.DB("").Model(&KpiCTitle{})
ret = ret.Select("kpi_id").Where("ne_type=?", title.NeType).Find(&titles)
newKpiID := *title.NeType + ".C" + ".01"
if ret.RowsAffected != 0 {
maxKpiID := *res.KpiID
suffixInt := 1
prefixStr := fmt.Sprintf("%s.C.", *title.NeType)
sort.SliceStable(titles, func(i, j int) bool {
vi := *titles[i].KpiID
vj := *titles[j].KpiID
if strings.HasPrefix(vi, prefixStr) && strings.HasPrefix(vj, prefixStr) {
vvi := strings.Replace(vi, prefixStr, "", 1)
vvii, err := strconv.Atoi(vvi)
if err != nil {
return false
}
vvj := strings.Replace(vj, prefixStr, "", 1)
vvjj, err := strconv.Atoi(vvj)
if err != nil {
return false
}
return vvii > vvjj // desc
}
return false
})
maxKpiID := *titles[0].KpiID
prefix := maxKpiID[:len(maxKpiID)-2]
suffix := maxKpiID[len(maxKpiID)-2:]
suffixInt, err := strconv.Atoi(suffix)
@@ -209,25 +244,26 @@ func (k *KpiCTitle) Post(c *gin.Context) {
newKpiID = prefix + newSuffix
}
title.KpiID = &newKpiID
if err := dborm.DefaultDB().Create(&title).Error; err != nil {
txx := db.DB("").Model(&KpiCTitle{})
if err := txx.Create(&title).Error; err != nil {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return
}
kpiCReportTable := "kpi_c_report_" + strings.ToLower(*title.NeType)
if !dborm.DefaultDB().Migrator().HasTable(kpiCReportTable) {
if !db.DB("").Migrator().HasTable(kpiCReportTable) {
// clone table "kpi_c_report" to "kpi_c_report_{neType}"
sql := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s AS SELECT * FROM %s WHERE 1=0", kpiCReportTable, "kpi_c_report")
if _, err := dborm.ExecSQL(sql, nil); err != nil {
if _, err := db.ExecDB("", sql, nil); err != nil {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return
}
sql = fmt.Sprintf("ALTER TABLE %s MODIFY COLUMN `id` int(11) NOT NULL AUTO_INCREMENT FIRST,ADD PRIMARY KEY IF NOT EXISTS (`id`)", kpiCReportTable)
if _, err := dborm.ExecSQL(sql, nil); err != nil {
if _, err := db.ExecDB("", sql, nil); err != nil {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return
}
sql = fmt.Sprintf("ALTER TABLE %s ADD INDEX IF NOT EXISTS `idx_timestamp`(`created_at`) USING BTREE, ADD INDEX IF NOT EXISTS `idx_uid_datetime`(`rm_uid`, `date`, `start_time`) USING BTREE", kpiCReportTable)
if _, err := dborm.ExecSQL(sql, nil); err != nil {
if _, err := db.ExecDB("", sql, nil); err != nil {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return
}
@@ -239,7 +275,7 @@ func (k *KpiCTitle) Put(c *gin.Context) {
var title KpiCTitle
id := c.Param("id")
if err := dborm.DefaultDB().First(&title, id).Error; err != nil {
if err := db.DB("").First(&title, id).Error; err != nil {
c.JSON(http.StatusOK, services.ErrResp("custom indicator not found"))
return
}
@@ -248,7 +284,8 @@ func (k *KpiCTitle) Put(c *gin.Context) {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return
}
dborm.DefaultDB().Save(&title)
title.UpdatedAt = time.Now().UnixMilli()
db.DB("").Save(&title)
c.JSON(http.StatusOK, services.DataResp(title))
}
@@ -256,7 +293,7 @@ func (k *KpiCTitle) Put(c *gin.Context) {
func (k *KpiCTitle) Delete(c *gin.Context) {
id := c.Param("id")
if err := dborm.DefaultDB().Table(k.TableName()).Where("id=?", id).Update("status", "Deleted").Error; err != nil {
if err := db.DB("").Table(k.TableName()).Where("id=?", id).Update("status", "2").Error; err != nil {
c.JSON(http.StatusOK, services.ErrResp(err.Error()))
return
}
@@ -267,7 +304,7 @@ func (k *KpiCTitle) Delete(c *gin.Context) {
func GetActiveKPICList(neType string) []KpiCTitle {
k := new([]KpiCTitle)
err := dborm.DefaultDB().Where("`ne_type` = ? and `status` = 'Active'", neType).Find(&k).Error
err := db.DB("").Where("`ne_type` = ? and `status` = '1'", neType).Find(&k).Error
if err != nil {
return nil
}

View File

@@ -1,23 +1,21 @@
package kpi_c_title
import "time"
const (
MAX_KPI_C_ID = 99
)
type KpiCTitle struct {
ID int `gorm:"column:id;primary_key;auto_increment" json:"id"`
NeType *string `gorm:"column:ne_type;default:NULL," json:"neType,omitempty"`
KpiID *string `gorm:"column:kpi_id;default:NULL," json:"kpiId,omitempty"`
Title *string `gorm:"column:title;default:NULL," json:"title,omitempty"`
Expression *string `gorm:"column:expression;default:NULL," json:"expression,omitempty"`
ExprAlias string `gorm:"-" json:"exprAlias"`
Status string `gorm:"column:status;default:'Active'" json:"status"`
Unit *string `gorm:"column:unit" json:"unit,omitempty"`
Description *string `gorm:"column:description;default:NULL," json:"description,omitempty"`
CreatedBy *string `gorm:"column:created_by;default:NULL," json:"createdBy,omitempty"`
UpdatedAt *time.Time `gorm:"column:updated_at;default:current_timestamp()," json:"updatedAt,omitempty"`
ID int `gorm:"column:id;primary_key;auto_increment" json:"id"`
NeType *string `gorm:"column:ne_type" json:"neType,omitempty"`
KpiID *string `gorm:"column:kpi_id" json:"kpiId,omitempty"`
Title *string `gorm:"column:title" json:"title,omitempty"`
Expression *string `gorm:"column:expression" json:"expression,omitempty"`
ExprAlias string `gorm:"-" json:"exprAlias"`
Status string `gorm:"column:status" json:"status"` // 0-Inactive/1-Active/2-Deleted
Unit *string `gorm:"column:unit" json:"unit,omitempty"`
Description *string `gorm:"column:description" json:"description,omitempty"`
CreatedBy *string `gorm:"column:created_by" json:"createdBy,omitempty"`
UpdatedAt int64 `gorm:"column:updated_at" json:"updatedAt,omitempty"`
}
type KpiCTitleQuery struct {

View File

@@ -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