This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch stop in repository https://gitbox.apache.org/repos/asf/camel.git
commit d94ed06f1c9a5497cf3d766a865a819cd6f83532 Author: Claus Ibsen <[email protected]> AuthorDate: Thu Oct 10 17:43:05 2024 +0200 CAMEL-21335: camel-core - Should log summary when starting and stopping routes manually via API or jbang --- .../camel/impl/engine/AbstractCamelContext.java | 94 +++++++++++++++++++++- .../camel/cli/connector/LocalCliConnector.java | 28 ++++--- 2 files changed, 110 insertions(+), 12 deletions(-) diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java index 571c6985d1b..93940f7e738 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java @@ -1050,6 +1050,11 @@ public abstract class AbstractCamelContext extends BaseService public void startAllRoutes() throws Exception { internalRouteStartupManager.doStartOrResumeRoutes(this, routeServices, true, true, false, false); + + if (startupSummaryLevel != StartupSummaryLevel.Oneline + && startupSummaryLevel != StartupSummaryLevel.Off) { + logRouteStartSummary(LoggingLevel.INFO); + } } private void doStopRoutes(RouteController controller, Comparator<RouteStartupOrder> comparator) throws Exception { @@ -1113,6 +1118,10 @@ public abstract class AbstractCamelContext extends BaseService } public void startRoute(String routeId) throws Exception { + startRoute(routeId, LoggingLevel.INFO); + } + + public void startRoute(String routeId, LoggingLevel loggingLevel) throws Exception { lock.lock(); try { DefaultRouteError.reset(this, routeId); @@ -1121,6 +1130,7 @@ public abstract class AbstractCamelContext extends BaseService if (routeService != null) { try { startRouteService(routeService, false); + logRouteState(routeService.getRoute(), "Started", loggingLevel); } catch (Exception e) { DefaultRouteError.set(this, routeId, Phase.START, e); throw e; @@ -1132,6 +1142,10 @@ public abstract class AbstractCamelContext extends BaseService } public void resumeRoute(String routeId) throws Exception { + resumeRoute(routeId, LoggingLevel.INFO); + } + + public void resumeRoute(String routeId, LoggingLevel loggingLevel) throws Exception { lock.lock(); try { DefaultRouteError.reset(this, routeId); @@ -1139,7 +1153,7 @@ public abstract class AbstractCamelContext extends BaseService try { if (!routeSupportsSuspension(routeId)) { // start route if suspension is not supported - startRoute(routeId); + startRoute(routeId, loggingLevel); return; } @@ -1149,6 +1163,7 @@ public abstract class AbstractCamelContext extends BaseService // must resume the route as well Route route = getRoute(routeId); ServiceHelper.resumeService(route); + logRouteState(routeService.getRoute(), "Resumed", loggingLevel); } } catch (Exception e) { DefaultRouteError.set(this, routeId, Phase.RESUME, e); @@ -3186,6 +3201,83 @@ public abstract class AbstractCamelContext extends BaseService } } + protected void logRouteStartSummary(LoggingLevel loggingLevel) { + CamelLogger logger = new CamelLogger(LOG, loggingLevel); + if (logger.shouldLog()) { + int total = 0; + int started = 0; + int kamelets = 0; + int templates = 0; + int rests = 0; + boolean registerKamelets = false; + boolean registerTemplates = true; + ManagementStrategy ms = getManagementStrategy(); + if (ms != null && ms.getManagementAgent() != null) { + registerKamelets = ms.getManagementAgent().getRegisterRoutesCreateByKamelet(); + registerTemplates = ms.getManagementAgent().getRegisterRoutesCreateByTemplate(); + } + List<String> lines = new ArrayList<>(); + + final ShutdownStrategy shutdownStrategy = camelContextExtension.getShutdownStrategy(); + if (shutdownStrategy != null && shutdownStrategy.isShutdownRoutesInReverseOrder()) { + routeStartupOrder.sort(Comparator.comparingInt(RouteStartupOrder::getStartupOrder).reversed()); + } else { + routeStartupOrder.sort(Comparator.comparingInt(RouteStartupOrder::getStartupOrder)); + } + for (RouteStartupOrder order : routeStartupOrder) { + total++; + String id = order.getRoute().getRouteId(); + String status = getRouteStatus(id).name(); + if (order.getRoute().isCreatedByKamelet()) { + kamelets++; + } else if (order.getRoute().isCreatedByRouteTemplate()) { + templates++; + } else if (order.getRoute().isCreatedByRestDsl()) { + rests++; + } + boolean skip = (!registerKamelets && order.getRoute().isCreatedByKamelet()) + || (!registerTemplates && order.getRoute().isCreatedByRouteTemplate()); + if (!skip && ServiceStatus.Started.name().equals(status)) { + started++; + } + // use basic endpoint uri to not log verbose details or potential sensitive data + String uri = order.getRoute().getEndpoint().getEndpointBaseUri(); + uri = URISupport.sanitizeUri(uri); + if (startupSummaryLevel == StartupSummaryLevel.Verbose || !skip) { + lines.add(String.format(" %s %s (%s)", status, id, uri)); + } + } + int newTotal = total; + if (!registerKamelets) { + newTotal -= kamelets; + } + if (!registerTemplates) { + newTotal -= templates; + } + StringJoiner sj = new StringJoiner(" "); + sj.add("total:" + newTotal); + if (total != started) { + sj.add("started:" + started); + } + if (kamelets > 0) { + sj.add("kamelets:" + kamelets); + } + if (templates > 0) { + sj.add("templates:" + templates); + } + if (rests > 0) { + sj.add("rest-dsl:" + rests); + } + logger.log(String.format("Routes started (%s)", sj)); + // if we are default/verbose then log each route line + if (startupSummaryLevel == StartupSummaryLevel.Default || startupSummaryLevel == StartupSummaryLevel.Verbose) { + for (String line : lines) { + logger.log(line); + } + } + } + } + public void startRouteDefinitions() throws Exception { } diff --git a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java index 279eecc1f0c..365996552e9 100644 --- a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java +++ b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java @@ -910,18 +910,24 @@ public class LocalCliConnector extends ServiceSupport implements CliConnector, C private void doActionRouteTask(JsonObject root) { // id is a pattern String[] patterns = root.getString("id").split(","); - // find matching IDs - List<String> ids = camelContext.getRoutes() - .stream().map(Route::getRouteId) - .filter(routeId -> { - for (String p : patterns) { - if (PatternHelper.matchPattern(routeId, p)) { - return true; + boolean all = patterns.length == 1 && "*".equals(patterns[0]); + List<String> ids; + if (all) { + ids = List.of("*"); + } else { + // find matching IDs + ids = camelContext.getRoutes() + .stream().map(Route::getRouteId) + .filter(routeId -> { + for (String p : patterns) { + if (PatternHelper.matchPattern(routeId, p)) { + return true; + } } - } - return false; - }) - .toList(); + return false; + }) + .toList(); + } for (String id : ids) { String command = root.getString("command"); try {
