Java tutorial
/** * JWatch - Quartz Monitor: http://code.google.com/p/jwatch/ * Copyright (C) 2011 Roy Russo and the original author or authors. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA **/ package org.jwatch.handler; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.jwatch.domain.connection.QuartzConnectService; import org.jwatch.domain.connection.QuartzConnectServiceImpl; import org.jwatch.domain.instance.QuartzInstance; import org.jwatch.domain.instance.QuartzInstanceService; import org.jwatch.domain.quartz.Job; import org.jwatch.domain.quartz.Scheduler; import org.jwatch.domain.quartz.Trigger; import org.jwatch.listener.notification.EventService; import org.jwatch.listener.notification.JobEvent; import org.jwatch.listener.settings.QuartzConfig; import org.jwatch.util.GlobalConstants; import org.jwatch.util.JSONUtil; import org.jwatch.util.SettingsUtil; import org.jwatch.util.Tools; import java.net.UnknownHostException; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; /** * All interactions with QuartzInstance objects are handled through this class. * * @author <a href="mailto:royrusso@gmail.com">Roy Russo</a> * Date: Apr 8, 2011 4:31:24 PM */ public class QuartzInstanceHandler { static Logger log = Logger.getLogger(QuartzInstanceHandler.class); /** * Returns instances found. For now, it pulls from the config file every time. * * @return * @see org.jwatch.domain.instance.QuartzInstanceService */ public static JSONObject loadInstances() { JSONObject jsonObject = new JSONObject(); try { QuartzInstanceService.initQuartzInstanceMap(); Map qMap = QuartzInstanceService.getQuartzInstanceMap(); if (qMap != null) { JSONArray jsonArray = new JSONArray(); for (Iterator it = qMap.entrySet().iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); String k = (String) entry.getKey(); QuartzInstance quartzInstance = (QuartzInstance) qMap.get(k); QuartzConfig quartzConfig = new QuartzConfig(quartzInstance); JSONObject jo = JSONObject.fromObject(quartzConfig); jsonArray.add(jo); } jsonObject.put(GlobalConstants.JSON_DATA_ROOT_KEY, jsonArray); jsonObject.put(GlobalConstants.JSON_TOTAL_COUNT, qMap.size()); } jsonObject.put(GlobalConstants.JSON_SUCCESS_KEY, true); } catch (Throwable t) { jsonObject.put(GlobalConstants.JSON_SUCCESS_KEY, false); } return jsonObject; } /** * Given JMX connection settings: this will connect to the instance, and if successful * persist the new instance in the settings file and memory map. * * @param map * @return success/failure */ public static JSONObject createInstance(Map map) { JSONObject jsonObject = new JSONObject(); try { String host = StringUtils.trimToNull((String) map.get("host")); int port = Integer.valueOf(StringUtils.trimToNull((String) map.get("port"))); String username = StringUtils.trimToNull((String) map.get("userName")); String password = StringUtils.trimToNull((String) map.get("password")); if (StringUtils.trimToNull(host) != null) { QuartzConfig quartzConfig = new QuartzConfig(Tools.generateUUID(), host, port, username, password); QuartzConnectService quartzConnectService = new QuartzConnectServiceImpl(); QuartzInstance quartzInstance = quartzConnectService.initInstance(quartzConfig); if (quartzInstance == null) { log.error(GlobalConstants.MESSAGE_FAILED_CONNECT + " " + quartzConfig); jsonObject = JSONUtil.buildError(GlobalConstants.MESSAGE_FAILED_CONNECT + " " + quartzConfig); return jsonObject; } // persist QuartzInstanceService.putQuartzInstance(quartzInstance); SettingsUtil.saveConfig(quartzConfig); jsonObject.put(GlobalConstants.JSON_DATA_ROOT_KEY, quartzConfig); jsonObject.put(GlobalConstants.JSON_SUCCESS_KEY, true); } else { jsonObject.put(GlobalConstants.JSON_MESSAGE, GlobalConstants.MESSAGE_CONFIG_EMPTY); jsonObject.put(GlobalConstants.JSON_SUCCESS_KEY, false); } } catch (UnknownHostException e) { log.error(e); jsonObject = JSONUtil.buildError("Unknown Host. " + GlobalConstants.MESSAGE_ERR_CHECK_LOG); } catch (Throwable t) { log.error(t); jsonObject = JSONUtil.buildError(GlobalConstants.MESSAGE_ERR_CHECK_LOG); } return jsonObject; } /** * Given a Quartz Instance id, it will load the schedulers associated with it from the in-memory map. * * @param map * @return */ public static JSONObject getSchedulersForForQuartzInstance(Map map) { JSONObject jsonObject = new JSONObject(); JSONArray jsonArray = new JSONArray(); String qiid = StringUtils.trimToNull((String) map.get("uuid")); try { QuartzInstance quartzInstance = QuartzInstanceService.getQuartzInstanceByID(qiid); if (quartzInstance != null) { int totalCount = 0; List<Scheduler> schedulers = quartzInstance.getSchedulerList(); if (schedulers != null && schedulers.size() > 0) { totalCount = schedulers.size(); for (int i = 0; i < schedulers.size(); i++) { Scheduler scheduler = schedulers.get(i); JSONObject o = JSONObject.fromObject(scheduler); jsonArray.add(o); } } jsonObject.put(GlobalConstants.JSON_SUCCESS_KEY, true); jsonObject.put(GlobalConstants.JSON_DATA_ROOT_KEY, jsonArray); jsonObject.put(GlobalConstants.JSON_TOTAL_COUNT, totalCount); } } catch (Throwable t) { log.error(t); jsonObject = JSONUtil.buildError(GlobalConstants.MESSAGE_ERR_CHECK_LOG); } return jsonObject; } public static JSONObject getJobsForScheduler(Map map) { JSONObject jsonObject = new JSONObject(); JSONArray jsonArray = new JSONArray(); int totalCount = 0; String uuidInstance = StringUtils.trimToNull((String) map.get("uuidInstance")); try { if (uuidInstance != null) { String[] arr = uuidInstance.split("@@"); String uuid = arr[0]; String scheduleID = arr[1]; QuartzInstance quartzInstance = QuartzInstanceService.getQuartzInstanceByID(uuid); if (quartzInstance != null) { List<Job> jobs = quartzInstance.getJmxAdapter().getJobDetails(quartzInstance, scheduleID); if (jobs != null && jobs.size() > 0) { totalCount = jobs.size(); for (int i = 0; i < jobs.size(); i++) { Job job = jobs.get(i); JSONObject o = JSONObject.fromObject(job); o.put("nextFireTime", Tools.toStringFromDate(job.getNextFireTime(), null)); jsonArray.add(o); } } } } jsonObject.put(GlobalConstants.JSON_SUCCESS_KEY, true); jsonObject.put(GlobalConstants.JSON_DATA_ROOT_KEY, jsonArray); jsonObject.put(GlobalConstants.JSON_TOTAL_COUNT, totalCount); } catch (Throwable t) { log.error(t); jsonObject = JSONUtil.buildError(GlobalConstants.MESSAGE_ERR_LOAD_JOBS); } return jsonObject; } public static JSONObject getSchedulerInfo(Map map) { JSONObject jsonObject = new JSONObject(); String uuidInstance = StringUtils.trimToNull((String) map.get("uuidInstance")); try { if (uuidInstance != null) { String[] arr = uuidInstance.split("@@"); String uuid = arr[0]; String scheduleID = arr[1]; QuartzInstance quartzInstance = QuartzInstanceService.getQuartzInstanceByID(uuid); if (quartzInstance != null) { Scheduler scheduler = quartzInstance.getJmxAdapter().getScheduler(quartzInstance, scheduleID); if (scheduler != null) { jsonObject = JSONObject.fromObject(scheduler); } } } jsonObject.put(GlobalConstants.JSON_SUCCESS_KEY, true); } catch (Throwable t) { log.error(t); jsonObject = JSONUtil.buildError(GlobalConstants.MESSAGE_ERR_LOAD_SCHEDULER); } return jsonObject; } public static JSONObject getTriggersForJob(Map map) { JSONObject jsonObject = new JSONObject(); JSONArray jsonArray = new JSONArray(); String qiid = StringUtils.trimToNull((String) map.get("uuid")); String jobName = StringUtils.trimToNull((String) map.get("jobName")); String groupName = StringUtils.trimToNull((String) map.get("groupName")); String scheduleID = StringUtils.trimToNull((String) map.get("sid")); int totalCount = 0; try { QuartzInstance quartzInstance = QuartzInstanceService.getQuartzInstanceByID(qiid); List<Trigger> triggers = quartzInstance.getJmxAdapter().getTriggersForJob(quartzInstance, scheduleID, jobName, groupName); if (triggers != null && triggers.size() > 0) { totalCount = triggers.size(); for (int i = 0; i < triggers.size(); i++) { Trigger trigger = triggers.get(i); JSONObject object = JSONObject.fromObject(trigger); object.put("endTime", Tools.toStringFromDate(trigger.getEndTime(), null)); object.put("finaleFireTime", Tools.toStringFromDate(trigger.getFinalFireTime(), null)); object.put("nextFireTime", Tools.toStringFromDate(trigger.getNextFireTime(), null)); object.put("previousFireTime", Tools.toStringFromDate(trigger.getPreviousFireTime(), null)); object.put("startTime", Tools.toStringFromDate(trigger.getStartTime(), null)); jsonArray.add(object); } } jsonObject.put(GlobalConstants.JSON_DATA_ROOT_KEY, jsonArray); jsonObject.put(GlobalConstants.JSON_SUCCESS_KEY, true); jsonObject.put(GlobalConstants.JSON_TOTAL_COUNT, totalCount); } catch (Throwable t) { log.error(t); jsonObject = JSONUtil.buildError(GlobalConstants.MESSAGE_ERR_LOAD_TRIGGERS); } return jsonObject; } public static JSONObject getJobsList(Map map) { JSONObject jsonObject = new JSONObject(); JSONArray jsonArray = new JSONArray(); int totalCount = 0; try { LinkedList events = EventService.getEventList(); if (events != null && events.size() > 0) { totalCount = events.size() > EventService.getMaxShowEventListSize() ? EventService.getMaxShowEventListSize() : events.size(); for (int i = 0; i < events.size(); i++) { JobEvent jEvent = (JobEvent) events.get(i); JSONObject object = JSONObject.fromObject(jEvent); object.put("fireTime", Tools.toStringFromDate(jEvent.getFireTime(), null)); object.put("nextFireTime", Tools.toStringFromDate(jEvent.getNextFireTime(), null)); object.put("previousFireTime", Tools.toStringFromDate(jEvent.getPreviousFireTime(), null)); object.put("scheduledFireTime", Tools.toStringFromDate(jEvent.getScheduledFireTime(), null)); jsonArray.add(object); if (i == EventService.getMaxShowEventListSize() - 1) { break; } } } jsonObject.put(GlobalConstants.JSON_DATA_ROOT_KEY, jsonArray); jsonObject.put(GlobalConstants.JSON_SUCCESS_KEY, true); jsonObject.put(GlobalConstants.JSON_TOTAL_COUNT, totalCount); } catch (Throwable t) { log.error(t); jsonObject = JSONUtil.buildError(GlobalConstants.MESSAGE_ERR_TAIL_JOBS); } return jsonObject; } }