ref: v3变更,,根据网元上报动态建表kpi/cdr/ue
This commit is contained in:
@@ -105,12 +105,77 @@ func (r KpiReport) Insert(neType string, param model.KpiReport) int64 {
|
||||
tableName := fmt.Sprintf("kpi_report_%s", strings.ToLower(neType))
|
||||
// 执行插入
|
||||
if err := db.DB("").Table(tableName).Create(¶m).Error; err != nil {
|
||||
logger.Errorf("insert err => %v", err.Error())
|
||||
errMsg := err.Error()
|
||||
// 动态创建表
|
||||
if strings.HasPrefix(errMsg, "Error 1146 (42S02): Table") {
|
||||
if err := r.createTableByMySQL(neType); err != nil {
|
||||
logger.Errorf("create table err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
}
|
||||
if strings.HasPrefix(errMsg, "SQL logic error: no such table") {
|
||||
if err := r.createTableBySQLite(neType); err != nil {
|
||||
logger.Errorf("create table err => %v", err.Error())
|
||||
return 0
|
||||
}
|
||||
}
|
||||
logger.Errorf("insert err => %v", errMsg)
|
||||
return 0
|
||||
}
|
||||
return param.ID
|
||||
}
|
||||
|
||||
// createTableByMySQL 创建表MySQL
|
||||
func (r KpiReport) createTableByMySQL(neType string) error {
|
||||
lowerNeType := strings.ToLower(neType)
|
||||
sql := fmt.Sprintf(
|
||||
`
|
||||
CREATE TABLE IF NOT EXISTS kpi_report_%s (
|
||||
id int NOT NULL AUTO_INCREMENT,
|
||||
ne_id bigint DEFAULT '0' COMMENT '网元ID',
|
||||
created_time bigint DEFAULT '0' COMMENT '创建时间',
|
||||
record_time bigint DEFAULT '0' COMMENT '记录时间',
|
||||
index int NOT NULL COMMENT 'Index of the report',
|
||||
granularity int DEFAULT '60' COMMENT 'Time granualarity: 5/10/.../60/300 (second)',
|
||||
kpi_values text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin COMMENT 'KPI values JSON String',
|
||||
PRIMARY KEY (id) USING BTREE,
|
||||
KEY idx_kpi_%s_ne_at (ne_id DESC, created_time DESC) USING BTREE COMMENT '索引-网元ID_记录时间'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KPI_%s';
|
||||
`,
|
||||
lowerNeType, lowerNeType, strings.ToUpper(neType),
|
||||
)
|
||||
_, err := db.ExecDB("", sql, nil)
|
||||
return err
|
||||
}
|
||||
|
||||
// createTableBySQLite 创建表SQLite
|
||||
func (r KpiReport) createTableBySQLite(neType string) error {
|
||||
lowerNeType := strings.ToLower(neType)
|
||||
sql := fmt.Sprintf(
|
||||
`
|
||||
CREATE TABLE IF NOT EXISTS "kpi_report_%s" (
|
||||
"id" integer NOT NULL,
|
||||
"ne_id" integer,
|
||||
"created_time" integer,
|
||||
"record_time" integer,
|
||||
"index" integer NOT NULL,
|
||||
"granularity" integer,
|
||||
"kpi_values" text,
|
||||
PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS "idx_kpi_%s_ne_at"
|
||||
ON "kpi_report_%s" (
|
||||
"ne_id" DESC,
|
||||
"created_time" DESC
|
||||
);
|
||||
`,
|
||||
lowerNeType, lowerNeType, lowerNeType,
|
||||
)
|
||||
_, err := db.ExecDB("", sql, nil)
|
||||
return err
|
||||
}
|
||||
|
||||
// Select 查询数据
|
||||
func (r KpiReport) Select(neType string, neId int64, beginTime, endTime int64) []model.KpiReport {
|
||||
rows := []model.KpiReport{}
|
||||
|
||||
Reference in New Issue
Block a user