mirror of
https://github.com/ctripcorp/zeus.git
synced 2024-09-22 08:36:24 +08:00
change to quartz job
This commit is contained in:
parent
61ac933e0a
commit
e140635e37
47
src/main/java/com/ctrip/zeus/nginx/NginxStatusFetcher.java
Normal file
47
src/main/java/com/ctrip/zeus/nginx/NginxStatusFetcher.java
Normal file
|
@ -0,0 +1,47 @@
|
|||
package com.ctrip.zeus.nginx;
|
||||
|
||||
import com.ctrip.zeus.client.LocalClient;
|
||||
import com.ctrip.zeus.nginx.entity.TrafficStatus;
|
||||
import com.ctrip.zeus.util.RollingTrafficStatus;
|
||||
import org.quartz.JobExecutionException;
|
||||
import org.springframework.scheduling.quartz.QuartzJobBean;
|
||||
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/**
|
||||
* Created by zhoumy on 2015/6/3.
|
||||
*/
|
||||
public class NginxStatusFetcher extends QuartzJobBean {
|
||||
|
||||
private RollingTrafficStatus rollingTrafficStatus;
|
||||
private AtomicInteger tick = new AtomicInteger();
|
||||
|
||||
public List<TrafficStatus> getResult() {
|
||||
return rollingTrafficStatus.getResult();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void executeInternal(org.quartz.JobExecutionContext jobExecutionContext) throws JobExecutionException {
|
||||
if (tick.incrementAndGet() == 10) {
|
||||
clearDirtyRecords(System.currentTimeMillis());
|
||||
tick.set(0);
|
||||
}
|
||||
fetchTrafficStatus();
|
||||
}
|
||||
|
||||
private void fetchTrafficStatus() {
|
||||
String stubStatus = LocalClient.getInstance().getStubStatus();
|
||||
String reqStatus = LocalClient.getInstance().getReqStatuses();
|
||||
rollingTrafficStatus.add(stubStatus, reqStatus);
|
||||
}
|
||||
|
||||
private void clearDirtyRecords(long stamp) {
|
||||
rollingTrafficStatus.clearDirty(stamp);
|
||||
}
|
||||
|
||||
private void setRollingTrafficStatus(RollingTrafficStatus rollingTrafficStatus) {
|
||||
this.rollingTrafficStatus = rollingTrafficStatus;
|
||||
}
|
||||
}
|
|
@ -123,9 +123,6 @@ public class SlbAdminServer extends AbstractServer {
|
|||
@Override
|
||||
protected void doStart() throws Exception {
|
||||
server.start();
|
||||
|
||||
//Set traffic status collector daemon thread
|
||||
TrafficStatusCollector.getInstance().start();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -12,6 +12,7 @@ import com.ctrip.zeus.nginx.entity.TrafficStatus;
|
|||
import com.ctrip.zeus.service.build.NginxConfService;
|
||||
import com.ctrip.zeus.service.model.SlbRepository;
|
||||
import com.ctrip.zeus.service.nginx.NginxService;
|
||||
import com.ctrip.zeus.util.RollingTrafficStatus;
|
||||
import com.ctrip.zeus.util.S;
|
||||
import com.ctrip.zeus.util.TrafficStatusCollector;
|
||||
import com.netflix.config.DynamicIntProperty;
|
||||
|
@ -40,6 +41,8 @@ public class NginxServiceImpl implements NginxService {
|
|||
private NginxConfService nginxConfService;
|
||||
@Resource
|
||||
private NginxServerDao nginxServerDao;
|
||||
@Resource
|
||||
private RollingTrafficStatus rollingTrafficStatus;
|
||||
|
||||
|
||||
private Logger logger = LoggerFactory.getLogger(NginxServiceImpl.class);
|
||||
|
@ -280,7 +283,7 @@ public class NginxServiceImpl implements NginxService {
|
|||
|
||||
@Override
|
||||
public List<TrafficStatus> getLocalTrafficStatus() {
|
||||
List<TrafficStatus> l = TrafficStatusCollector.getInstance().getResult();
|
||||
List<TrafficStatus> l = rollingTrafficStatus.getResult();
|
||||
for (TrafficStatus trafficStatus : l) {
|
||||
trafficStatus.setServerIp(S.getIp());
|
||||
}
|
||||
|
|
|
@ -3,17 +3,23 @@ package com.ctrip.zeus.util;
|
|||
import com.ctrip.zeus.nginx.entity.ReqStatus;
|
||||
import com.ctrip.zeus.nginx.entity.TrafficStatus;
|
||||
import com.google.common.base.Preconditions;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Created by zhoumy on 2015/5/6.
|
||||
*/
|
||||
@Component("rollingTrafficStatus")
|
||||
public class RollingTrafficStatus {
|
||||
private final CircularArray buckets;
|
||||
private final int numberOfBuckets;
|
||||
private final int interval;
|
||||
|
||||
public RollingTrafficStatus() {
|
||||
this(10, 60);
|
||||
}
|
||||
|
||||
/**
|
||||
* Collecting data and offering statistics of a given time over defined interval.
|
||||
* For example, if you want to track 1-minute data per 10 minutes, it doesn't empty out every 10 minutes,
|
||||
|
|
|
@ -13,16 +13,11 @@ public class TrafficStatusCollector {
|
|||
private final int syncInterval;
|
||||
private final int size;
|
||||
private final RollingTrafficStatus rollingTrafficStatus;
|
||||
private final static TrafficStatusCollector instance = new TrafficStatusCollector();
|
||||
|
||||
public TrafficStatusCollector() {
|
||||
this(60, 10);
|
||||
}
|
||||
|
||||
public static TrafficStatusCollector getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
public TrafficStatusCollector(int syncInterval, int size) {
|
||||
this.syncInterval = syncInterval;
|
||||
this.size = size;
|
||||
|
|
|
@ -18,5 +18,30 @@
|
|||
<aop:aspectj-autoproxy proxy-target-class="true"/>
|
||||
|
||||
<bean id="dbLockFactory" class="com.ctrip.zeus.lock.DbLockFactory"/>
|
||||
|
||||
<import resource="dao-beans.xml"/>
|
||||
<bean id="rollingTrafficStatus" class="com.ctrip.zeus.util.RollingTrafficStatus" />
|
||||
<bean id="nginxStatusFetcherDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
|
||||
<property name="jobClass" value="com.ctrip.zeus.nginx.NginxStatusFetcher"/>
|
||||
<property name="durability" value="true" />
|
||||
</bean>
|
||||
<!-- Run the job every 2 seconds with initial delay of 1 second -->
|
||||
<bean id="nginxStatusFetcherTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
|
||||
<property name="jobDetail" ref="nginxStatusFetcherDetail"/>
|
||||
<property name="startDelay" value="1000"/>
|
||||
<property name="repeatInterval" value="1000"/>
|
||||
</bean>
|
||||
<!-- Scheduler factory bean to glue together jobDetails and triggers to Configure Quartz Scheduler -->
|
||||
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
|
||||
<property name="jobDetails">
|
||||
<list>
|
||||
<ref bean="nginxStatusFetcherDetail"/>
|
||||
</list>
|
||||
</property>
|
||||
<property name="triggers">
|
||||
<list>
|
||||
<ref bean="nginxStatusFetcherTrigger"/>
|
||||
</list>
|
||||
</property>
|
||||
</bean>
|
||||
</beans>
|
||||
|
|
Loading…
Reference in a new issue