This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch cc in repository https://gitbox.apache.org/repos/asf/camel.git
commit 54699c01947e3d5fa9003c78b4057eb7e8301628 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Wed Nov 29 15:06:51 2023 +0100 CAMEL-20164: camel-quartz: Add dev console. --- .../services/org/apache/camel/dev-console/quartz | 2 + .../camel/component/quartz/QuartzConsole.java | 202 +++++++++++++++++++++ .../camel/component/quartz/QuartzEndpoint.java | 1 - .../QuartzCronRouteWithStartDateEndDateTest.java | 1 + 4 files changed, 205 insertions(+), 1 deletion(-) diff --git a/components/camel-quartz/src/generated/resources/META-INF/services/org/apache/camel/dev-console/quartz b/components/camel-quartz/src/generated/resources/META-INF/services/org/apache/camel/dev-console/quartz new file mode 100644 index 00000000000..ee877d2bf69 --- /dev/null +++ b/components/camel-quartz/src/generated/resources/META-INF/services/org/apache/camel/dev-console/quartz @@ -0,0 +1,2 @@ +# Generated by camel build tools - do NOT edit this file! +class=org.apache.camel.component.quartz.QuartzConsole diff --git a/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzConsole.java b/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzConsole.java new file mode 100644 index 00000000000..3fdbcfcf97c --- /dev/null +++ b/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzConsole.java @@ -0,0 +1,202 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.quartz; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import org.apache.camel.spi.annotations.DevConsole; +import org.apache.camel.support.console.AbstractDevConsole; +import org.apache.camel.util.json.JsonArray; +import org.apache.camel.util.json.JsonObject; +import org.quartz.JobExecutionContext; +import org.quartz.Scheduler; +import org.quartz.SchedulerMetaData; + +@DevConsole("quartz") +public class QuartzConsole extends AbstractDevConsole { + + public QuartzConsole() { + super("camel", "quartz", "Quartz", "Quartz Scheduler"); + } + + @Override + protected String doCallText(Map<String, Object> options) { + StringBuilder sb = new StringBuilder(); + + QuartzComponent quartz = getCamelContext().getComponent("quartz", QuartzComponent.class); + if (quartz != null) { + Scheduler scheduler = quartz.getScheduler(); + try { + sb.append(String.format(" Scheduler Name: %s\n", scheduler.getSchedulerName())); + sb.append(String.format(" Scheduler Id: %s\n", scheduler.getSchedulerInstanceId())); + SchedulerMetaData meta = scheduler.getMetaData(); + if (meta != null) { + sb.append(String.format(" Quartz Version: %s\n", meta.getVersion())); + String since = SimpleDateFormat.getDateTimeInstance().format(meta.getRunningSince()); + sb.append(String.format(" Running Since: %s\n", since)); + sb.append(String.format(" Total Counter: %s\n", meta.getNumberOfJobsExecuted())); + sb.append(String.format(" Started: %s\n", meta.isStarted())); + sb.append(String.format(" Shutdown: %s\n", meta.isShutdown())); + sb.append(String.format(" In Standby Mode: %s\n", meta.isInStandbyMode())); + sb.append(String.format(" Thread Pool Class: %s\n", meta.getThreadPoolClass().getName())); + sb.append(String.format(" Thread Pool Size: %d\n", meta.getThreadPoolSize())); + sb.append(String.format(" Job Store Class: %s\n", meta.getJobStoreClass().getName())); + sb.append(String.format(" Job Store Clustered: %s\n", meta.isJobStoreClustered())); + sb.append(String.format(" Job Store Supports Persistence: %s\n", meta.isJobStoreSupportsPersistence())); + } + + List<JobExecutionContext> jobs = scheduler.getCurrentlyExecutingJobs(); + sb.append(String.format(" Currently Executing Jobs: %d\n", jobs.size())); + if (!jobs.isEmpty()) { + sb.append("\n"); + sb.append("Jobs:\n"); + sb.append("\n"); + for (JobExecutionContext job : jobs) { + sb.append(String.format(" Job Id: %s\n", job.getFireInstanceId())); + + String type = (String) job.getJobDetail().getJobDataMap().get(QuartzConstants.QUARTZ_TRIGGER_TYPE); + sb.append(String.format(" Trigger Type: %s\n", type)); + String cron = (String) job.getJobDetail().getJobDataMap() + .get(QuartzConstants.QUARTZ_TRIGGER_CRON_EXPRESSION); + if (cron != null) { + sb.append(String.format(" Cron: %s\n", cron)); + } + String routeId = (String) job.getJobDetail().getJobDataMap().get("routeId"); + if (routeId != null) { + sb.append(String.format(" Route Id: %s\n", routeId)); + } + String uri = (String) job.getJobDetail().getJobDataMap().get(QuartzConstants.QUARTZ_ENDPOINT_URI); + if (cron != null) { + sb.append(String.format(" Endpoint Uri: %s\n", uri)); + } + Date d = job.getTrigger().getPreviousFireTime(); + if (d != null) { + sb.append(String.format(" Prev Fire Time: %s\n", + SimpleDateFormat.getDateTimeInstance().format(d))); + } + d = job.getFireTime(); + if (d != null) { + sb.append( + String.format(" Fire Time: %s\n", SimpleDateFormat.getDateTimeInstance().format(d))); + } + d = job.getTrigger().getNextFireTime(); + if (d != null) { + sb.append(String.format(" Next Fire Time: %s\n", + SimpleDateFormat.getDateTimeInstance().format(d))); + } + d = job.getTrigger().getFinalFireTime(); + if (d != null) { + sb.append(String.format(" Final Fire Time: %s\n", + SimpleDateFormat.getDateTimeInstance().format(d))); + } + sb.append(String.format(" Recovering: %s\n", job.isRecovering())); + sb.append(String.format(" Refire Count: %s\n", job.getRefireCount())); + sb.append(String.format(" Misfire Instruction: %s\n", job.getTrigger().getMisfireInstruction())); + + sb.append("\n"); + } + } + } catch (Exception e) { + // ignore + } + } + + return sb.toString(); + } + + @Override + protected Map<String, Object> doCallJson(Map<String, Object> options) { + JsonObject root = new JsonObject(); + + QuartzComponent quartz = getCamelContext().getComponent("quartz", QuartzComponent.class); + if (quartz != null) { + Scheduler scheduler = quartz.getScheduler(); + try { + root.put("schedulerName", scheduler.getSchedulerName()); + root.put("schedulerInstanceId", scheduler.getSchedulerInstanceId()); + SchedulerMetaData meta = scheduler.getMetaData(); + if (meta != null) { + root.put("quartzVersion", meta.getVersion()); + root.put("runningSince", meta.getRunningSince().getTime()); + root.put("totalCounter", meta.getNumberOfJobsExecuted()); + root.put("started", meta.isStarted()); + root.put("shutdown", meta.isShutdown()); + root.put("inStandbyMode", meta.isInStandbyMode()); + root.put("threadPoolClass", meta.getThreadPoolClass().getName()); + root.put("threadPoolSize", meta.getThreadPoolSize()); + root.put("jpbStoreClass", meta.getJobStoreClass().getName()); + root.put("jpbStoreClustered", meta.isJobStoreClustered()); + root.put("jpbStoreSupportsPersistence", meta.isJobStoreSupportsPersistence()); + } + + List<JobExecutionContext> jobs = scheduler.getCurrentlyExecutingJobs(); + root.put("currentExecutingJobs", jobs.size()); + if (!jobs.isEmpty()) { + JsonArray arr = new JsonArray(); + root.put("jobs", arr); + for (JobExecutionContext job : jobs) { + JsonObject jo = new JsonObject(); + jo.put("jobId", job.getFireInstanceId()); + + String type = (String) job.getJobDetail().getJobDataMap().get(QuartzConstants.QUARTZ_TRIGGER_TYPE); + jo.put("triggerType", type); + String cron = (String) job.getJobDetail().getJobDataMap() + .get(QuartzConstants.QUARTZ_TRIGGER_CRON_EXPRESSION); + if (cron != null) { + jo.put("cron", cron); + } + String routeId = (String) job.getJobDetail().getJobDataMap().get("routeId"); + if (routeId != null) { + jo.put("routeId", routeId); + } + String uri = (String) job.getJobDetail().getJobDataMap().get(QuartzConstants.QUARTZ_ENDPOINT_URI); + if (cron != null) { + jo.put("uri", uri); + } + Date d = job.getTrigger().getPreviousFireTime(); + if (d != null) { + jo.put("prevFireTime", d.getTime()); + } + d = job.getFireTime(); + if (d != null) { + jo.put("fireTime", d.getTime()); + } + d = job.getTrigger().getNextFireTime(); + if (d != null) { + jo.put("nextFireTime", d.getTime()); + } + d = job.getTrigger().getFinalFireTime(); + if (d != null) { + jo.put("finalFireTime", d.getTime()); + } + jo.put("recovering", job.isRecovering()); + jo.put("refireCount", job.getRefireCount()); + jo.put("misfireInstruction", job.getTrigger().getMisfireInstruction()); + arr.add(jo); + } + } + } catch (Exception e) { + // ignore + } + } + + return root; + } +} diff --git a/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzEndpoint.java b/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzEndpoint.java index 667ca8c4fad..645ea0b752b 100644 --- a/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzEndpoint.java +++ b/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzEndpoint.java @@ -16,7 +16,6 @@ */ package org.apache.camel.component.quartz; -import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; diff --git a/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/QuartzCronRouteWithStartDateEndDateTest.java b/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/QuartzCronRouteWithStartDateEndDateTest.java index b39084a2073..daadcb126d5 100644 --- a/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/QuartzCronRouteWithStartDateEndDateTest.java +++ b/components/camel-quartz/src/test/java/org/apache/camel/component/quartz/QuartzCronRouteWithStartDateEndDateTest.java @@ -21,6 +21,7 @@ import java.util.Calendar; import java.util.Date; import java.util.TimeZone; import java.util.concurrent.TimeUnit; + import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.hamcrest.CoreMatchers;