blob: 7d4061692b8efbfcd25111fa0551abe057b905b0 [file] [log] [blame]
= Camel Console
The `camel-console` is available from *Camel 3.15* and newer versions.
IMPORTANT: The Camel Developer Console is intended assisting developers and can display
various information about a running Camel application. This is very handy during development and testing.
However, the Camel Developer Console is not recommended for production use.
Camel comes with a set of consoles out of the box from `camel-console` and `camel-catalog-console` JARs.
These consoles can display general information about the running JVM and the OS Environment, and of course
Camel related information such as runtime metrics of the Camel routes, and a lot more.
== Using Camel Console
The `camel-console` must be added to the classpath, and enabled either via
[source,java]
----
CamelContext context = ...
context.setDevConsole(true);
----
If using Camel Main / Spring Boot / Quarkus etc then the console can be enabled via
configuration:
[source,properties]
----
camel.main.dev-console-enabled = true
----
=== Dev Console and Camel Spring Boot
The Camel developer console is available in Spring Boot as an _actuator_. To enable the console
you need to add dependency:
[source,xml]
----
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-console-starter</artifactId>
</dependency>
----
To include more details such as route metrics you need to include JMX management:
[source,xml]
----
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-management-starter</artifactId>
</dependency>
----
And finally you **must** enable `camel` in the exposed list of HTTP actuator endpoints in `application.properties` as shown:
[source,properties]
----
management.endpoints.web.exposure.include=info,health,camel
----
The console is then available on HTTP (using default port):
[source,text]
----
http://localhost:8080/actuator/camel
----
This will list the available consoles, and you can then call a console by its id, such as `routes`:
[source,text]
----
http://localhost:8080/actuator/camel/routes
----
=== Dev Console and Camel JBang
The Developer Console is easily available when using xref:camel-jbang.adoc[Camel JBang],
by the `--console` argument when running Camel JBang.
For example to run a Camel route from `foo.yaml` and additional configurations from `myapp.properties` you can run as follows
and have the console started and accessible from `http://localhost:8080/q/dev`
[source,bash]
----
$ camel run foo.yaml myapp.properties --console
----
== Writing Custom Dev Consoles
To write a custom console, you need to add `camel-console` as dependency, as it comes with the
base class `AbstractDevConsole` which we extend for our console.
[source,java]
----
@DevConsole("foo")
public class FooConsole extends AbstractDevConsole {
public FooConsole() {
super("acme", "foo", "Foolish", "A foolish console that outputs something");
}
@Override
protected String doCallText(Map<String, Object> options) {
StringBuilder sb = new StringBuilder();
sb.append("Hello from my custom console");
// more stuff here
return sb.toString();
}
@Override
protected JsonObject doCallJson(Map<String, Object> options) {
JsonObject root = new JsonObject();
root.put("message", "Hello from my custom console");
// more stuff here
return root;
}
}
----
The class must be annotated with `DevConsole` and the unique id of the console (must be unique across all consoles).
In the constructor the console specifies which group, id, display title, and description to use.
The `doCallText` and `doCallJson` methods is responsible for gathering the information the console should output.
If the console does not support either text or json output, then the methods can return `null`,
and override the `supportMediaType` method and return `true` for the media-type that are supported.
=== Supported Media Types
A console can support any of, or all of the following types:
- TEXT
- JSON
The intention for `TEXT` is to be plain/text based that can be outputted in CLI and other low-level tools.
For `JSON` then the intention is the console outputs a json dataset with key/value pairs that
holds the information, which can be displayed in a custom fashion such as in a web browser, or IDE tool such as VSCode.
=== Maven Configuration
To make Camel able to discover custom dev consoles, then the xref:camel-component-maven-plugin.adoc[came-component-maven-plugin]
must be used, such as:
[source,xml]
----
<build>
<plugins>
<plugin>
<groupId>org.apache.camel</groupId>
<artifactId>camel-component-maven-plugin</artifactId>
<version>${camel-version}</version>
<executions>
<execution>
<id>generate</id>
<goals>
<goal>generate</goal>
</goals>
<phase>process-classes</phase>
</execution>
<execution>
<id>generate-postcompile</id>
<goals>
<goal>generate-postcompile</goal>
</goals>
<phase>prepare-package</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
<goal>add-resource</goal>
</goals>
<configuration>
<sources>
<source>src/generated/java</source>
</sources>
<resources>
<resource>
<directory>src/generated/resources</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
----