package org.rhq.enterprise.server.measurement;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.SchedulerException;
import org.rhq.core.domain.common.EntityContext;
import org.rhq.enterprise.server.scheduler.SchedulerLocal;
import org.rhq.enterprise.server.scheduler.jobs.AbstractStatefulJob;
import org.rhq.enterprise.server.util.LookupUtil;
/**
* Job that asynchronously notifies agents of metric schedule updates.
*/
public class NotifyAgentsOfScheduleUpdatesJob extends AbstractStatefulJob {
private final Log log = LogFactory.getLog(MeasurementScheduleManagerBean.class);
@Override
public void executeJobCode(JobExecutionContext context) throws JobExecutionException {
JobDataMap jobDataMap = context.getMergedJobDataMap();
final String triggerName = (String) jobDataMap.get(MeasurementScheduleManagerBean.TRIGGER_NAME);
final String triggerGroupName = (String) jobDataMap.get(MeasurementScheduleManagerBean.TRIGGER_GROUP_NAME);
SchedulerLocal scheduler = LookupUtil.getSchedulerBean();
try {
scheduler.unscheduleJob(triggerName, triggerGroupName);
} catch (SchedulerException e) {
log.error("Failed to unschedule Quartz trigger [" + triggerName + "].", e);
}
String scheduleSubQuery = (String) jobDataMap.get(MeasurementScheduleManagerBean.SCHEDULE_SUBQUERY);
EntityContext entityContext = new EntityContext(
Integer.parseInt((String) jobDataMap.get(MeasurementScheduleManagerBean.ENTITYCONTEXT_RESOURCEID)),
Integer.parseInt((String) jobDataMap.get(MeasurementScheduleManagerBean.ENTITYCONTEXT_GROUPID)),
Integer.parseInt((String) jobDataMap.get(MeasurementScheduleManagerBean.ENTITYCONTEXT_PARENT_RESOURCEID)),
Integer.parseInt((String) jobDataMap.get(MeasurementScheduleManagerBean.ENTITYCONTEXT_RESOURCETYPEID))
);
MeasurementScheduleManagerLocal scheduleManager = LookupUtil.getMeasurementScheduleManager();
scheduleManager.notifyAgentsOfScheduleUpdates(entityContext, scheduleSubQuery);
}
}