package com.sohu.cache.schedule.impl;
import com.sohu.cache.dao.InstanceDao;
import com.sohu.cache.dao.MachineDao;
import com.sohu.cache.dao.QuartzDao;
import com.sohu.cache.entity.InstanceInfo;
import com.sohu.cache.entity.MachineInfo;
import com.sohu.cache.entity.TriggerInfo;
import com.sohu.cache.machine.MachineCenter;
import com.sohu.cache.redis.RedisCenter;
import com.sohu.cache.schedule.TriggerCenter;
import com.sohu.cache.util.ConstUtils;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.TriggerKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.Assert;
import java.util.List;
/**
* trigger管理接口的实现
*
* @author: lingguo
* @time: 2014/10/13 14:03
*/
public class TriggerCenterImpl implements TriggerCenter {
private Logger logger = LoggerFactory.getLogger(this.getClass());
private Scheduler clusterScheduler;
private QuartzDao quartzDao;
private RedisCenter redisCenter;
private MachineCenter machineCenter;
private InstanceDao instanceDao;
private MachineDao machineDao;
/**
* 增加一个新trigger
*
* @param jobGroup trigger所属的job分组:redis/machine/machineMonitor
* @param ip
* @param port
* @return
*/
@Override
public boolean addTrigger(String jobGroup, String ip, int port) {
Assert.hasText(jobGroup, "jobGroup is invalid: " + jobGroup);
Assert.hasText(ip, "ip is invalid, ip: " + ip);
Assert.isTrue(port > 0, "port is invalid, port: " + port);
boolean opResult = false;
if (jobGroup.equals(ConstUtils.REDIS_JOB_GROUP)) {
InstanceInfo instanceInfo = instanceDao.getInstByIpAndPort(ip, port);
opResult = redisCenter.deployRedisCollection(instanceInfo.getAppId(), ip, port);
} else if (jobGroup.equals(ConstUtils.REDIS_SLOWLOG_JOB_GROUP)) {
InstanceInfo instanceInfo = instanceDao.getInstByIpAndPort(ip, port);
opResult = redisCenter.deployRedisSlowLogCollection(instanceInfo.getAppId(), ip, port);
} else if (jobGroup.equals(ConstUtils.MACHINE_JOB_GROUP)) {
MachineInfo machineInfo = machineDao.getMachineInfoByIp(ip);
opResult = machineCenter.deployMachineCollection(machineInfo.getId(), ip);
} else if (jobGroup.equals(ConstUtils.MACHINE_MONITOR_JOB_GROUP)) {
MachineInfo machineInfo = machineDao.getMachineInfoByIp(ip);
opResult = machineCenter.deployMachineMonitor(machineInfo.getId(), ip);
} else if (jobGroup.equals(ConstUtils.SERVER_TRIGGER_GROUP)) {
MachineInfo machineInfo = machineDao.getMachineInfoByIp(ip);
opResult = machineCenter.deployServerCollection(machineInfo.getId(), ip);
}
return opResult;
}
/**
* 暂停trigger
*
* @param triggerKey
* @return 操作成功返回true,否则返回false;
*/
@Override
public boolean pauseTrigger(TriggerKey triggerKey) {
boolean opResult = true;
try {
clusterScheduler.pauseTrigger(triggerKey);
} catch (SchedulerException e) {
logger.error(e.getMessage(), e);
opResult = false;
}
return opResult;
}
/**
* 恢复暂停的trigger
*
* @param triggerKey
*/
@Override
public boolean resumeTrigger(TriggerKey triggerKey) {
boolean opResult = true;
try {
clusterScheduler.resumeTrigger(triggerKey);
} catch (SchedulerException e) {
logger.error(e.getMessage(), e);
opResult = false;
}
return opResult;
}
/**
* 删除一个trigger
*
* @param triggerKey
* @return
*/
@Override
public boolean removeTrigger(TriggerKey triggerKey) {
boolean opResult = true;
try {
clusterScheduler.unscheduleJob(triggerKey);
} catch (SchedulerException e) {
logger.error(e.getMessage(), e);
opResult = false;
}
return opResult;
}
/**
* 查询特定job类型下的所有trigger
*
* @param jobGroup job类型:redis/machine/machineMonitor
* @return
*/
@Override
public List<TriggerInfo> getTriggersByJobGroup(String jobGroup) {
List<TriggerInfo> triggersOfGroup = null;
try {
triggersOfGroup = quartzDao.getTriggersByJobGroup(jobGroup);
} catch (Exception e) {
logger.error("jobGroup: {}", jobGroup, e);
}
return triggersOfGroup;
}
/**
* 返回所有的trigger
*
* @return
*/
@Override
public List<TriggerInfo> getAllTriggers() {
List<TriggerInfo> allTriggers = null;
try {
allTriggers = quartzDao.getAllTriggers();
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return allTriggers;
}
/**
* 查询trigger,模糊匹配trigger name或trigger group
*
* @param queryString trigger name或trigger group的关键字
* @return
*/
@Override
public List<TriggerInfo> searchTriggerByNameOrGroup(String queryString) {
List<TriggerInfo> matchTriggers = null;
try {
matchTriggers = quartzDao.searchTriggerByNameOrGroup(queryString);
} catch (Exception e) {
logger.error("queryString: {}", queryString, e);
}
return matchTriggers;
}
public void setClusterScheduler(Scheduler scheduler) {
this.clusterScheduler = scheduler;
}
public void setQuartzDao(QuartzDao quartzDao) {
this.quartzDao = quartzDao;
}
public void setInstanceDao(InstanceDao instanceDao) {
this.instanceDao = instanceDao;
}
public void setMachineDao(MachineDao machineDao) {
this.machineDao = machineDao;
}
public void setRedisCenter(RedisCenter redisCenter) {
this.redisCenter = redisCenter;
}
public void setMachineCenter(MachineCenter machineCenter) {
this.machineCenter = machineCenter;
}
}