mirror of
https://github.com/ctripcorp/zeus.git
synced 2024-09-22 00:26:05 +08:00
add clean job
This commit is contained in:
parent
3940731d61
commit
f2a46f4649
29
src/main/java/com/ctrip/zeus/clean/CleanDbJob.java
Normal file
29
src/main/java/com/ctrip/zeus/clean/CleanDbJob.java
Normal file
|
@ -0,0 +1,29 @@
|
|||
package com.ctrip.zeus.clean;
|
||||
|
||||
import com.ctrip.zeus.executor.TaskWorker;
|
||||
import org.quartz.DisallowConcurrentExecution;
|
||||
import org.quartz.JobExecutionContext;
|
||||
import org.quartz.JobExecutionException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.scheduling.quartz.QuartzJobBean;
|
||||
|
||||
/**
|
||||
* Created by fanqq on 2015/10/16.
|
||||
*/
|
||||
@DisallowConcurrentExecution
|
||||
public class CleanDbJob extends QuartzJobBean {
|
||||
CleanDbManager cleanDbManager;
|
||||
Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||
@Override
|
||||
protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
|
||||
try{
|
||||
cleanDbManager.run();
|
||||
}catch (Exception e){
|
||||
logger.warn("[clean db job] clean db exception."+e.getMessage(),e);
|
||||
}
|
||||
}
|
||||
public void setCleanDbManager(CleanDbManager cleanDbManager) {
|
||||
this.cleanDbManager = cleanDbManager;
|
||||
}
|
||||
}
|
54
src/main/java/com/ctrip/zeus/clean/CleanDbManager.java
Normal file
54
src/main/java/com/ctrip/zeus/clean/CleanDbManager.java
Normal file
|
@ -0,0 +1,54 @@
|
|||
package com.ctrip.zeus.clean;
|
||||
|
||||
import com.ctrip.zeus.service.clean.CleanFilter;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by fanqq on 2015/10/16.
|
||||
*/
|
||||
@Component("cleanDbManager")
|
||||
public class CleanDbManager {
|
||||
private static Long ticks = 0L;
|
||||
@Resource
|
||||
private CleanFilter oprationLogCleanFilter;
|
||||
@Resource
|
||||
private CleanFilter taskCleanFilter;
|
||||
|
||||
private List<CleanFilter> filters = new ArrayList<>();
|
||||
private boolean inited = false;
|
||||
Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||
|
||||
public void run() throws Exception{
|
||||
init();
|
||||
for (CleanFilter filter : filters){
|
||||
if (filter.interval() == 0){
|
||||
continue;
|
||||
}
|
||||
if (ticks % filter.interval() == 0){
|
||||
try {
|
||||
filter.runFilter();
|
||||
}catch (Exception e){
|
||||
logger.warn("[Clean Manager]Execute Clean Filter Failed.Filter:"+filter.getClass().getSimpleName(),e);
|
||||
}
|
||||
}
|
||||
}
|
||||
ticks++;
|
||||
}
|
||||
|
||||
private void init() {
|
||||
if (inited){
|
||||
return;
|
||||
}
|
||||
|
||||
filters.add(oprationLogCleanFilter);
|
||||
filters.add(taskCleanFilter);
|
||||
|
||||
inited = true;
|
||||
}
|
||||
}
|
16
src/main/java/com/ctrip/zeus/service/clean/CleanFilter.java
Normal file
16
src/main/java/com/ctrip/zeus/service/clean/CleanFilter.java
Normal file
|
@ -0,0 +1,16 @@
|
|||
package com.ctrip.zeus.service.clean;
|
||||
|
||||
/**
|
||||
* Created by fanqq on 2015/10/20.
|
||||
*/
|
||||
public interface CleanFilter {
|
||||
/**
|
||||
* Filter runner.
|
||||
*/
|
||||
public void runFilter()throws Exception;
|
||||
|
||||
/**
|
||||
* return interval . Unit for hours. never run if return 0 .
|
||||
*/
|
||||
public int interval();
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
package com.ctrip.zeus.service.clean.impl;
|
||||
|
||||
import com.ctrip.zeus.dal.core.*;
|
||||
import com.ctrip.zeus.service.clean.CleanFilter;
|
||||
import com.ctrip.zeus.service.query.SlbCriteriaQuery;
|
||||
import com.netflix.config.DynamicIntProperty;
|
||||
import com.netflix.config.DynamicPropertyFactory;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Created by fanqq on 2015/10/20.
|
||||
*/
|
||||
public class ConfCleanFilter implements CleanFilter {
|
||||
@Resource
|
||||
private NginxConfDao nginxConfDao;
|
||||
@Resource
|
||||
private NginxConfServerDao nginxConfServerDao;
|
||||
@Resource
|
||||
private NginxConfUpstreamDao nginxConfUpstreamDao;
|
||||
@Resource
|
||||
private SlbCriteriaQuery slbCriteriaQuery;
|
||||
private static DynamicIntProperty confSaveCounts = DynamicPropertyFactory.getInstance().getIntProperty("config.save.count", 100000);
|
||||
|
||||
@Override
|
||||
public void runFilter() throws Exception {
|
||||
Set<Long> slbIds = slbCriteriaQuery.queryAll();
|
||||
for (Long slbId : slbIds){
|
||||
//remove nginx_conf
|
||||
NginxConfDo nginxConfDo = nginxConfDao.findBySlbIdAndMaxVersion(slbId, NginxConfEntity.READSET_FULL);
|
||||
nginxConfDao.deleteBySlbIdLessThanVersion(new NginxConfDo().setVersion(nginxConfDo.getVersion()-confSaveCounts.get()).setSlbId(slbId));
|
||||
|
||||
//remove nginx_conf_server
|
||||
NginxConfServerDo nginxConfServerDo = nginxConfServerDao.findBySlbIdAndMaxVersion(slbId,NginxConfServerEntity.READSET_FULL);
|
||||
nginxConfServerDao.deleteBySlbIdLessThanVersion(new NginxConfServerDo().setSlbId(slbId).setVersion(nginxConfServerDo.getVersion()-confSaveCounts.get()));
|
||||
|
||||
//remove nginx_conf_upstreams
|
||||
NginxConfUpstreamDo nginxConfUpstreamDo = nginxConfUpstreamDao.findBySlbIdAndMaxVersion(slbId,NginxConfUpstreamEntity.READSET_FULL);
|
||||
nginxConfUpstreamDao.deleteBySlbIdLessThanVersion(new NginxConfUpstreamDo().setSlbId(slbId).setVersion(nginxConfUpstreamDo.getVersion()-confSaveCounts.get()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int interval() {
|
||||
return 12;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package com.ctrip.zeus.service.clean.impl;
|
||||
|
||||
import com.ctrip.zeus.dal.core.OperationLogDao;
|
||||
import com.ctrip.zeus.dal.core.OperationLogDo;
|
||||
import com.ctrip.zeus.service.clean.CleanFilter;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.unidal.dal.jdbc.DalException;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* Created by fanqq on 2015/10/20.
|
||||
*/
|
||||
@Service("oprationLogCleanFilter")
|
||||
public class OprationLogCleanFilter implements CleanFilter {
|
||||
@Resource
|
||||
private OperationLogDao operationLogDao;
|
||||
|
||||
Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||
@Override
|
||||
public void runFilter() throws Exception {
|
||||
Calendar rightNow = Calendar.getInstance();
|
||||
rightNow.setTime(new Date());
|
||||
rightNow.add(Calendar.DAY_OF_YEAR,-7);
|
||||
Date dt = rightNow.getTime();
|
||||
operationLogDao.deleteBeforeDatetime(new OperationLogDo().setDatetime(dt));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int interval() {
|
||||
return 12;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package com.ctrip.zeus.service.clean.impl;
|
||||
|
||||
import com.ctrip.zeus.dal.core.TaskDao;
|
||||
import com.ctrip.zeus.dal.core.TaskDo;
|
||||
import com.ctrip.zeus.service.clean.CleanFilter;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.unidal.dal.jdbc.DalException;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* Created by fanqq on 2015/10/20.
|
||||
*/
|
||||
@Service("taskCleanFilter")
|
||||
public class TaskCleanFilter implements CleanFilter {
|
||||
@Resource
|
||||
private TaskDao taskDao ;
|
||||
Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||
|
||||
@Override
|
||||
public void runFilter() throws Exception {
|
||||
Calendar rightNow = Calendar.getInstance();
|
||||
rightNow.setTime(new Date());
|
||||
rightNow.add(Calendar.DAY_OF_YEAR,-7);
|
||||
Date dt = rightNow.getTime();
|
||||
this.taskDao.deleteBeforeDatetime(new TaskDo().setCreateTime(dt));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int interval() {
|
||||
return 12;
|
||||
}
|
||||
}
|
|
@ -24,6 +24,18 @@
|
|||
]]>
|
||||
</statement>
|
||||
</query>
|
||||
<query name="find-by-slb-id-and-max-version" type="SELECT">
|
||||
<param name="slb-id"/>
|
||||
<statement>
|
||||
<![CDATA[
|
||||
SELECT <FIELDS/>
|
||||
FROM <TABLE/>
|
||||
WHERE <FIELD name='slb-id'/> = ${slb-id}
|
||||
ORDER BY <FIELD name='version'/> DESC
|
||||
LIMIT 1
|
||||
]]>
|
||||
</statement>
|
||||
</query>
|
||||
<query name="find-by-slb-id-and-version" type="SELECT">
|
||||
<param name="slb-id"/>
|
||||
<param name="version"/>
|
||||
|
@ -47,6 +59,17 @@
|
|||
]]>
|
||||
</statement>
|
||||
</query>
|
||||
<query name="delete-by-slb-id-less-than-version" type="DELETE">
|
||||
<param name="slb-id"/>
|
||||
<param name="version"/>
|
||||
<statement>
|
||||
<![CDATA[
|
||||
DELETE FROM <TABLE/>
|
||||
WHERE <FIELD name='slb-id'/> = ${slb-id}
|
||||
AND <FIELD name='version'/> < ${version}
|
||||
]]>
|
||||
</statement>
|
||||
</query>
|
||||
</query-defs>
|
||||
</entity>
|
||||
<entity name="nginx-conf-server" table="nginx_conf_server" alias="ncs">
|
||||
|
@ -100,6 +123,18 @@
|
|||
]]>
|
||||
</statement>
|
||||
</query>
|
||||
<query name="find-by-slb-id-and-max-version" type="SELECT">
|
||||
<param name="slb-id"/>
|
||||
<statement>
|
||||
<![CDATA[
|
||||
SELECT <FIELDS/>
|
||||
FROM <TABLE/>
|
||||
WHERE <FIELD name='slb-id'/> = ${slb-id}
|
||||
ORDER BY <FIELD name='version'/> DESC
|
||||
LIMIT 1
|
||||
]]>
|
||||
</statement>
|
||||
</query>
|
||||
<query name="delete-by-slb-id-from-version" type="DELETE">
|
||||
<param name="slb-id"/>
|
||||
<param name="version"/>
|
||||
|
@ -111,6 +146,17 @@
|
|||
]]>
|
||||
</statement>
|
||||
</query>
|
||||
<query name="delete-by-slb-id-less-than-version" type="DELETE">
|
||||
<param name="slb-id"/>
|
||||
<param name="version"/>
|
||||
<statement>
|
||||
<![CDATA[
|
||||
DELETE FROM <TABLE/>
|
||||
WHERE <FIELD name='slb-id'/> = ${slb-id}
|
||||
AND <FIELD name='version'/> < ${version}
|
||||
]]>
|
||||
</statement>
|
||||
</query>
|
||||
</query-defs>
|
||||
</entity>
|
||||
<entity name="nginx-conf-upstream" table="nginx_conf_upstream" alias="ncs">
|
||||
|
@ -164,6 +210,18 @@
|
|||
]]>
|
||||
</statement>
|
||||
</query>
|
||||
<query name="find-by-slb-id-and-max-version" type="SELECT">
|
||||
<param name="slb-id"/>
|
||||
<statement>
|
||||
<![CDATA[
|
||||
SELECT <FIELDS/>
|
||||
FROM <TABLE/>
|
||||
WHERE <FIELD name='slb-id'/> = ${slb-id}
|
||||
ORDER BY <FIELD name='version'/> DESC
|
||||
LIMIT 1
|
||||
]]>
|
||||
</statement>
|
||||
</query>
|
||||
<query name="delete-by-slb-id-from-version" type="DELETE">
|
||||
<param name="slb-id"/>
|
||||
<param name="version"/>
|
||||
|
@ -175,6 +233,17 @@
|
|||
]]>
|
||||
</statement>
|
||||
</query>
|
||||
<query name="delete-by-slb-id-less-than-version" type="DELETE">
|
||||
<param name="slb-id"/>
|
||||
<param name="version"/>
|
||||
<statement>
|
||||
<![CDATA[
|
||||
DELETE FROM <TABLE/>
|
||||
WHERE <FIELD name='slb-id'/> = ${slb-id}
|
||||
AND <FIELD name='version'/> < ${version}
|
||||
]]>
|
||||
</statement>
|
||||
</query>
|
||||
</query-defs>
|
||||
</entity>
|
||||
<entity name="nginx-server" table="nginx_server" alias="ns">
|
||||
|
|
|
@ -77,6 +77,23 @@
|
|||
<property name="repeatInterval" value="1000"/>
|
||||
</bean>
|
||||
|
||||
<bean id="cleanManagerDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
|
||||
<property name="jobClass" value="com.ctrip.zeus.clean.CleanDbJob"/>
|
||||
<property name="jobDataMap">
|
||||
<map>
|
||||
<entry key="cleanDbManager" value-ref="cleanDbManager" />
|
||||
</map>
|
||||
</property>
|
||||
<property name="durability" value="true"/>
|
||||
</bean>
|
||||
|
||||
<!-- Run the job every 1h = 60*60*1000=3600000 ms with initial delay of 1 second -->
|
||||
<bean id="cleanManagerTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
|
||||
<property name="jobDetail" ref="cleanManagerDetail"/>
|
||||
<property name="startDelay" value="1000"/>
|
||||
<property name="repeatInterval" value="3600000"/>
|
||||
</bean>
|
||||
|
||||
<!-- Scheduler factory bean to glue together jobDetails and triggers to Configure Quartz Scheduler -->
|
||||
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
|
||||
<property name="jobDetails">
|
||||
|
@ -85,6 +102,7 @@
|
|||
<ref bean="operationLogCleanDetail"/>
|
||||
<ref bean="taskWorkerDetail"/>
|
||||
<ref bean="taskCleanDetail"/>
|
||||
<ref bean="cleanManagerDetail"/>
|
||||
</list>
|
||||
</property>
|
||||
<property name="triggers">
|
||||
|
@ -93,6 +111,7 @@
|
|||
<ref bean="operationLogCleanTrigger"/>
|
||||
<ref bean="taskWorkerTrigger"/>
|
||||
<ref bean="taskCleanTrigger"/>
|
||||
<ref bean="cleanManagerTrigger"/>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
|
|
Loading…
Reference in a new issue