It is possible to add an endpoint to Helidon SE that can show information about the application.
You can add custom information to this endpoint.
In order to enable the endpoint you need to add the dependency io.helidon.webserver.observe:helidon-webserver-observe-info
to your pom.xml
file.
This will add the endpoint /observe/info
to your application.
You can add key-value pairs to your configuration or code that will be exposed in the endpoint.
To start using the endpoint you must add the following dependency to your pom.xml
file:
<dependency> <groupId>io.helidon.webserver.observe</groupId> <artifactId>helidon-webserver-observe-info</artifactId> </dependency>
You can define the information that should be exposed by the endpoint in your configuration file.
Any property name and value prefixed with server.features.observe.observers.info.values.
will be added to the endpoint:
# File: src/main/resources/application.properties ... server.features.observe.observers.info.values.version=1.0.2 server.features.observe.observers.info.values.app-name=Helidon-Sample ...
Instead of using fixed values for the properties you can also use values from properties coming from the pom.xml
file.
You can refer to properties name using @{property}@
or ${property}
syntax.
You must enable resource filtering in your pom.xml
:
... <build> ... <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>application.properties</include> </includes> </resource> </resources> ... </build> ...
So for our previous example you can also use the POM project properties project.version
and project.artifactId
in the application.properties
file.
When the file is copied to the target
directory by Maven the placeholders will be replaced with the actual values.
# File: src/main/resources/application.properties ... server.features.observe.observers.info.values.version=@project.version@ server.features.observe.observers.info.values.app-name=@project.artifactId@ ...
Next you need to read the configuration file and use it to configure a WebServer
instance:
import io.helidon.config.Config; import io.helidon.webserver.WebServer; ... public static void main(String[] args) { ... Config config = Config.create(); WebServer server = WebServer.builder() ... .config(config.get("server")) .build() .start(); } ...
Instead of defining the properties for the /observe/info
endpoint in a properties file you can also programmatically define them in your code.
You must create a InfoObserver
object and add the properties to the instance using the addValues
method.
This InfoObserver
object can be assigned as ObserverFeature
to a WebServer
instance.
In the following example you can see how to define a version
and app-name
property with some hardcoded value in the application code.
import io.helidon.webserver.WebServer; import io.helidon.webserver.observe.ObserveFeature; import io.helidon.webserver.observe.info.InfoObserver; import java.util.Map; ... public static void main(String[] args) { ... // Create InfoObserver instance and add properties version and app-name. InfoObserver infoObserver = InfoObserver.builder() .addValues(Map.of("version", "1.0.0", "app-name", "Helidon-Sample")) .build(); WebServer server = WebServer.builder() ... // Add observe feature with info observer. .addFeature(ObserveFeature.create(infoObserver)) .build() .start(); } ...
If you start your Helidon SE application you can see the information in the /observe/info
endpoint.
In the following example we use a curl
command to get the information:
$ curl -s -X GET --location "http://localhost:8080/observe/info" | jq . { "app-name": "Helidon-Sample", "version": "1.0.0" } $
Written with Helidon SE 4.1.6.