package monitor import ( "fmt" "rtzh_elec_temperature/logger" "rtzh_elec_temperature/models/bo" "rtzh_elec_temperature/rtelec_app_public_lib/service" "rtzh_elec_temperature/tools" "strconv" "strings" "time" "github.com/spf13/cast" "github.com/astaxie/beego/orm" ) type DataMonitor struct { } func StartDataMonitor() { go dataTimoutMonitorStart() go tableSizeMonitorStart() go logSizeMonitorStart() go autoMakeReport() } //数据采集超时处理进程启动 func dataTimoutMonitorStart() { for { time.Sleep(time.Minute * 3) } } //业务数据表容量监测.每天监测一次 func tableSizeMonitorStart() { logger.Logger.Println("启动过期数据自动清理进程") m := new(DataMonitor) m.dataAutoClear() for { nowHour := time.Now().Format("15") //每天早上0点清理一次 dataTimoutMonitorHour, _ := bo.GetSysParamValue("dataClearHour", "01") if nowHour != dataTimoutMonitorHour { time.Sleep(time.Minute * 50) continue } m.dataAutoClear() time.Sleep(time.Minute * 50) } } //附件自动清理 func (t *DataMonitor) dataAutoClear() { db := orm.NewOrm() sql := "select * from t_data_clear_data where skeepday>0 order by id" list := []orm.Params{} _, err := db.Raw(sql).Values(&list) if err != nil { logger.Logger.Error(err) return } if len(list) == 0 { return } for _, row := range list { skeepday := tools.IsEmpty(row["skeepday"]) colname := tools.IsEmpty(row["colname"]) tname := tools.IsEmpty(row["tablename"]) if colname == "" { //时间字段列名,未指定时采用默认列名 colname = "create_time" } logger.Logger.Debug(fmt.Sprintf("正在清理数据表%s %s天之前的过期数据", tname, skeepday)) sql1 := "delete from " + tname + " where " + colname + " 0 { did := cast.ToString(rowset[0]["device_id"]) if obj, h := vmp_min[did]; h { obj[colname] = cast.ToString(rowset[0]["min"]) } else { vmp_min[did] = map[string]interface{}{colname: cast.ToString(rowset[0]["min"])} } if obj, h := vmp_max[did]; h { obj[colname] = cast.ToString(rowset[0]["max"]) } else { vmp_max[did] = map[string]interface{}{colname: cast.ToString(rowset[0]["max"])} } if obj, h := vmp_avg[did]; h { obj[colname] = cast.ToString(rowset[0]["avg"]) } else { vmp_avg[did] = map[string]interface{}{colname: cast.ToString(rowset[0]["avg"])} } } } maxtable := localTableName + "_max_day" mintable := localTableName + "_min_day" avgtable := localTableName + "_avg_day" mSqlCols := []string{"day", "device_id"} mSqlValues := []string{nowday} mChars := []string{"?", "?"} for did, vs := range vmp_max { mSqlValues = append(mSqlValues, did) for k, v := range vs { mSqlValues = append(mSqlValues, cast.ToString(v)) mSqlCols = append(mSqlCols, k) mChars = append(mChars, "?") } mSql := fmt.Sprintf("insert into %s(%s)values(%s)", maxtable, strings.Join(mSqlCols, ","), strings.Join(mChars, ",")) _, err := dbo.Raw(mSql, mSqlValues).Exec() if err != nil { logger.Logger.Error(err, fmt.Sprintf("SQL:%s 参数:%+v", mSql, mSqlValues)) } logger.Logger.Debug(fmt.Sprintf("SQL:%s 参数:%+v", mSql, mSqlValues)) } mSqlCols = []string{"day", "device_id"} mSqlValues = []string{nowday} mChars = []string{"?", "?"} for did, vs := range vmp_min { mSqlValues = append(mSqlValues, did) for k, v := range vs { mSqlValues = append(mSqlValues, cast.ToString(v)) mSqlCols = append(mSqlCols, k) mChars = append(mChars, "?") } mSql := fmt.Sprintf("insert into %s(%s)values(%s)", mintable, strings.Join(mSqlCols, ","), strings.Join(mChars, ",")) _, err := dbo.Raw(mSql, mSqlValues).Exec() if err != nil { logger.Logger.Error(err, fmt.Sprintf("SQL:%s 参数:%+v", mSql, mSqlValues)) } logger.Logger.Debug(fmt.Sprintf("SQL:%s 参数:%+v", mSql, mSqlValues)) } mSqlCols = []string{"day", "device_id"} mSqlValues = []string{nowday} mChars = []string{"?", "?"} for did, vs := range vmp_avg { mSqlValues = append(mSqlValues, did) for k, v := range vs { mSqlValues = append(mSqlValues, cast.ToString(v)) mSqlCols = append(mSqlCols, k) mChars = append(mChars, "?") } mSql := fmt.Sprintf("insert into %s(%s)values(%s)", avgtable, strings.Join(mSqlCols, ","), strings.Join(mChars, ",")) _, err := dbo.Raw(mSql, mSqlValues).Exec() if err != nil { logger.Logger.Error(err, fmt.Sprintf("SQL:%s 参数:%+v", mSql, mSqlValues)) } logger.Logger.Debug(fmt.Sprintf("SQL:%s 参数:%+v", mSql, mSqlValues)) } } time.Sleep(1 * time.Minute) }