|
15 | 15 | import org.apache.commons.collections4.MapUtils; |
16 | 16 | import org.apache.commons.lang.BooleanUtils; |
17 | 17 | import org.apache.commons.lang.StringUtils; |
| 18 | +import org.apache.commons.lang.time.DateUtils; |
18 | 19 | import org.slf4j.Logger; |
19 | 20 | import org.slf4j.LoggerFactory; |
20 | 21 | import org.springframework.util.Assert; |
21 | 22 |
|
| 23 | +import java.text.SimpleDateFormat; |
22 | 24 | import java.util.*; |
| 25 | +import java.util.concurrent.TimeUnit; |
23 | 26 |
|
24 | 27 | /** |
25 | 28 | * Created by yijunzhang on 14-9-17. |
@@ -258,12 +261,32 @@ public List<Map<String, Object>> queryDiffMapList(long beginTime, long endTime, |
258 | 261 |
|
259 | 262 | @Override |
260 | 263 | public void cleanUpStandardStats(int day) { |
261 | | - Calendar calendar = Calendar.getInstance(); |
262 | | - calendar.setTime(new Date()); |
263 | | - calendar.add(Calendar.DAY_OF_MONTH, -Math.abs(day)); |
264 | | - Date deleteTime = calendar.getTime(); |
265 | | - int deleteCount = instanceStatsDao.deleteStandardStatsByCreatedTime(deleteTime); |
266 | | - logger.warn("cleanUpStandardStats: {} day deleteCount={}", day, deleteCount); |
| 264 | + try { |
| 265 | + SimpleDateFormat minSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| 266 | + SimpleDateFormat hourSdf = new SimpleDateFormat("yyyy-MM-dd HH"); |
| 267 | + // 基准时间 |
| 268 | + Date baseTime = DateUtils.addDays(hourSdf.parse(minSdf.format(new Date())), 0 - day); |
| 269 | + Date startTime = null; //删除开始时间 |
| 270 | + Date endTime = null; //删除结束时间 |
| 271 | + int mins = 24 * 60 * (day - 1); //天换算分钟数,保留一天数据 |
| 272 | + int perMin = 10; //每10分钟区间做一次删除 |
| 273 | + long beginTime = System.currentTimeMillis(); |
| 274 | + for (int count = 1; count <= mins / perMin; count++) { |
| 275 | + startTime = DateUtils.addMinutes(baseTime, perMin * (count - 1)); |
| 276 | + endTime = DateUtils.addMinutes(baseTime, perMin * count); |
| 277 | + long startMills = System.currentTimeMillis(); |
| 278 | + instanceStatsDao.deleteStandardStatsByScanTime(startTime, endTime); |
| 279 | + logger.warn("execute delete task cost:{} ms ,time :{},{}", System.currentTimeMillis() - startMills, minSdf.format(startTime), minSdf.format(endTime)); |
| 280 | + try { |
| 281 | + TimeUnit.MILLISECONDS.sleep(10); |
| 282 | + } catch (InterruptedException e) { |
| 283 | + logger.error(e.getMessage(), e); |
| 284 | + } |
| 285 | + } |
| 286 | + logger.info("cleanUpStandardStats total costTime =" + (System.currentTimeMillis() - beginTime) / 1000 + " s"); |
| 287 | + } catch (Exception e) { |
| 288 | + logger.error(e.getMessage(), e); |
| 289 | + } |
267 | 290 | } |
268 | 291 |
|
269 | 292 | public void setInstanceDao(InstanceDao instanceDao) { |
|
0 commit comments