package com.sohu.cache.schedule.jobs; import com.sohu.cache.client.service.ClientReportCostDistriService; import com.sohu.cache.client.service.ClientReportValueDistriService; import com.sohu.cache.stats.instance.InstanceStatsCenter; import com.sohu.cache.util.ConstUtils; import org.apache.commons.lang.math.NumberUtils; import org.quartz.JobExecutionContext; import org.quartz.SchedulerContext; import org.springframework.context.ApplicationContext; import org.springframework.jdbc.core.JdbcTemplate; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * Created by yijunzhang on 14-12-8. */ public class CleanUpStatisticsJob extends CacheBaseJob { private static final long serialVersionUID = 8815839394475276540L; private static final String CLEAN_APP_HOUR_COMMAND_STATISTICS = "delete from app_hour_command_statistics where create_time < ?"; private static final String CLEAN_APP_MINUTE_COMMAND_STATISTICS = "delete from app_minute_command_statistics where create_time < ?"; private static final String CLEAN_APP_HOUR_STATISTICS = "delete from app_hour_statistics where create_time < ?"; private static final String CLEAN_APP_MINUTE_STATISTICS = "delete from app_minute_statistics where create_time < ?"; /** * 清除客户端耗时汇总数据 */ private static final String CLEAN_APP_CLIENT_MINUTE_COST_TOTAL = "delete from app_client_costtime_minute_stat_total where collect_time < ?"; //清除服务器统计数据 private static final String CLEAN_SERVER_STAT_STATISTICS = "delete from server_stat where cdate < ?"; @Override public void action(JobExecutionContext context) { if (!ConstUtils.WHETHER_SCHEDULE_CLEAN_DATA) { return; } try { SchedulerContext schedulerContext = context.getScheduler().getContext(); ApplicationContext applicationContext = (ApplicationContext) schedulerContext.get(APPLICATION_CONTEXT_KEY); InstanceStatsCenter InstanceStatsCenter = applicationContext.getBean("instanceStatsCenter", InstanceStatsCenter.class); try { InstanceStatsCenter.cleanUpStandardStats(5); } catch (Exception e) { logger.error(e.getMessage(), e); } JdbcTemplate jdbcTemplate = applicationContext.getBean("jdbcTemplate", JdbcTemplate.class); Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.add(Calendar.DAY_OF_MONTH, -31); Date time = calendar.getTime(); int cleanCount = jdbcTemplate.update(CLEAN_APP_HOUR_COMMAND_STATISTICS, time); logger.warn("clean_app_hour_command_statistics count={}", cleanCount); cleanCount = jdbcTemplate.update(CLEAN_APP_MINUTE_COMMAND_STATISTICS, time); logger.warn("clean_app_minute_command_statistics count={}", cleanCount); cleanCount = jdbcTemplate.update(CLEAN_APP_HOUR_STATISTICS, time); logger.warn("clean_app_hour_statistics count={}", cleanCount); cleanCount = jdbcTemplate.update(CLEAN_APP_MINUTE_STATISTICS, time); logger.warn("clean_app_minute_statistics count={}", cleanCount); //清除客户端耗时数据(保存2天) ClientReportCostDistriService clientReportCostDistriService = applicationContext.getBean( "clientReportCostDistriService", ClientReportCostDistriService.class); calendar.setTime(new Date()); calendar.add(Calendar.DAY_OF_MONTH, -2); long timeFormat = NumberUtils.toLong(new SimpleDateFormat("yyyyMMddHHmm00").format(calendar.getTime())); cleanCount = clientReportCostDistriService.deleteBeforeCollectTime(timeFormat); logger.warn("clean_app_client_costtime_minute_stat count={}", cleanCount); //清除客户端耗时汇总数据(保存14天) calendar.setTime(new Date()); calendar.add(Calendar.DAY_OF_MONTH, -14); timeFormat = NumberUtils.toLong(new SimpleDateFormat("yyyyMMddHHmm00").format(calendar.getTime())); cleanCount = jdbcTemplate.update(CLEAN_APP_CLIENT_MINUTE_COST_TOTAL, timeFormat); logger.warn("clean_app_client_costtime_minute_stat_total count={}", cleanCount); //清除客户端值数据(保存2天) ClientReportValueDistriService clientReportValueDistriService = applicationContext.getBean( "clientReportValueDistriService", ClientReportValueDistriService.class); calendar.setTime(new Date()); calendar.add(Calendar.DAY_OF_MONTH, -2); timeFormat = NumberUtils.toLong(new SimpleDateFormat("yyyyMMddHHmm00").format(calendar.getTime())); cleanCount = clientReportValueDistriService.deleteBeforeCollectTime(timeFormat); logger.warn("clean_app_client_value_minute_stats count={}", cleanCount); //清除服务器统计数据 calendar.setTime(new Date()); calendar.add(Calendar.DAY_OF_MONTH, -7); String date = new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()); cleanCount = jdbcTemplate.update(CLEAN_SERVER_STAT_STATISTICS, date); logger.warn("clean_server_stat_total count={}", cleanCount); } catch (Exception e) { logger.error(e.getMessage(), e); } } }