85 lines
2.6 KiB
Go
85 lines
2.6 KiB
Go
package repository
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"ems.agt/src/framework/datasource"
|
|
"ems.agt/src/framework/logger"
|
|
"ems.agt/src/modules/network_element/model"
|
|
)
|
|
|
|
// 实例化数据层 PerfKPIImpl 结构体
|
|
var NewPerfKPIImpl = &PerfKPIImpl{}
|
|
|
|
// PerfKPIImpl 性能统计 数据层处理
|
|
type PerfKPIImpl struct{}
|
|
|
|
// SelectGoldKPI 通过网元指标数据信息
|
|
func (r *PerfKPIImpl) SelectGoldKPI(query model.GoldKPIQuery, kpiIds []string) []map[string]any {
|
|
// 查询条件拼接
|
|
var conditions []string
|
|
var params []any
|
|
if query.RmUID != "" {
|
|
conditions = append(conditions, "gk.rm_uid = ?")
|
|
params = append(params, query.RmUID)
|
|
}
|
|
if query.NeType != "" {
|
|
conditions = append(conditions, "gk.ne_type = ?")
|
|
params = append(params, query.NeType)
|
|
}
|
|
if query.StartTime != "" {
|
|
conditions = append(conditions, "gk.start_time >= ?")
|
|
params = append(params, query.StartTime)
|
|
}
|
|
if query.EndTime != "" {
|
|
conditions = append(conditions, "gk.start_time <= ?")
|
|
params = append(params, query.EndTime)
|
|
}
|
|
// 构建查询条件语句
|
|
whereSql := ""
|
|
if len(conditions) > 0 {
|
|
whereSql += " where " + strings.Join(conditions, " and ")
|
|
}
|
|
|
|
// 查询字段列
|
|
timeFormat := "DATE_FORMAT(gk.start_time, '%Y-%m-%d %H:')"
|
|
minuteGroup := fmt.Sprintf("LPAD(FLOOR(MINUTE(gk.start_time) / %d) * %d, 2, '0')", query.Interval, query.Interval)
|
|
groupByField := fmt.Sprintf("CONCAT( %s, %s ) AS timeGroup", timeFormat, minuteGroup)
|
|
var fields = []string{
|
|
groupByField,
|
|
"min(CASE WHEN gk.index != '' THEN gk.index ELSE 0 END) AS startIndex",
|
|
"min(CASE WHEN gk.ne_name != '' THEN gk.ne_name ELSE 0 END) AS neName",
|
|
}
|
|
for _, kid := range kpiIds {
|
|
str := fmt.Sprintf("sum(CASE WHEN gk.kpi_id = '%s' THEN gk.value ELSE 0 END) AS '%s'", kid, kid)
|
|
fields = append(fields, str)
|
|
}
|
|
fieldsSql := strings.Join(fields, ",")
|
|
|
|
// 查询数据
|
|
if query.SortField == "" {
|
|
query.SortField = "timeGroup"
|
|
}
|
|
if query.SortOrder == "" {
|
|
query.SortOrder = "desc"
|
|
}
|
|
orderSql := fmt.Sprintf(" order by %s %s", query.SortField, query.SortOrder)
|
|
querySql := fmt.Sprintf("SELECT %s FROM gold_kpi gk %s GROUP BY timeGroup %s", fieldsSql, whereSql, orderSql)
|
|
results, err := datasource.RawDB("", querySql, params)
|
|
if err != nil {
|
|
logger.Errorf("query err => %v", err)
|
|
}
|
|
return results
|
|
}
|
|
|
|
// SelectGoldKPITitle 通过网元指标数据信息
|
|
func (r *PerfKPIImpl) SelectGoldKPITitle(neType string) []model.GoldKPITitle {
|
|
result := []model.GoldKPITitle{}
|
|
tx := datasource.DefaultDB().Table("kpi_title").Where("ne_type = ?", neType).Find(&result)
|
|
if err := tx.Error; err != nil {
|
|
logger.Errorf("Delete err => %v", err)
|
|
}
|
|
return result
|
|
}
|