This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 6d1b3ba8afd CAMEL-21335: camel-core - Should log summary when starting
and stopping routes manually via API or jbang (#15914)
6d1b3ba8afd is described below
commit 6d1b3ba8afda769e1b1bf167d4142ead01c9eba2
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Oct 10 18:02:03 2024 +0200
CAMEL-21335: camel-core - Should log summary when starting and stopping
routes manually via API or jbang (#15914)
---
.../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 {