This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch ra in repository https://gitbox.apache.org/repos/asf/camel.git
commit d538b204e5552e6ad8cc3eec19bf945399f182b7 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon May 27 19:39:44 2024 +0200 CAMEL-20798: Add RemoteAddress to endpoints so they can tell the url/hostname etc for the system it connects. This is needed for better monitoring, tracing and management. Add this information into camel-tracer as tags. --- .../component/thrift/ThriftConfiguration.java | 1 + .../camel/component/thrift/ThriftConsumer.java | 5 +++++ .../camel/component/thrift/ThriftEndpoint.java | 13 ++++++++++- .../camel/component/twilio/TwilioEndpoint.java | 26 +++++++++++++++++++++- .../camel/component/undertow/UndertowConsumer.java | 5 +++++ .../camel/component/undertow/UndertowEndpoint.java | 19 +++++++++++++++- .../camel/component/weather/WeatherEndpoint.java | 13 ++++++++++- .../camel/component/web3j/Web3jEndpoint.java | 13 ++++++++++- .../component/wordpress/WordpressEndpoint.java | 23 +++++++++++++++++-- .../camel/component/workday/WorkdayEndpoint.java | 23 ++++++++++++++++++- .../apache/camel/component/xmpp/XmppEndpoint.java | 22 +++++++++++++++++- .../camel/component/zeebe/ZeebeEndpoint.java | 25 +++++++++++++++++++-- .../camel/component/zendesk/ZendeskEndpoint.java | 21 ++++++++++++++++- 13 files changed, 197 insertions(+), 12 deletions(-) diff --git a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftConfiguration.java b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftConfiguration.java index a549b2505e2..85cf4d5a814 100644 --- a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftConfiguration.java +++ b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftConfiguration.java @@ -28,6 +28,7 @@ import org.apache.camel.support.jsse.SSLContextParameters; public class ThriftConfiguration { @UriPath + @Metadata(required = true) private String host; @UriPath diff --git a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftConsumer.java b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftConsumer.java index 67dbf49eff6..11e8e2cff60 100644 --- a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftConsumer.java +++ b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftConsumer.java @@ -64,6 +64,11 @@ public class ThriftConsumer extends DefaultConsumer { this.configuration = configuration; } + @Override + public boolean isHostedService() { + return true; + } + public ThriftConfiguration getConfiguration() { return configuration; } diff --git a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftEndpoint.java b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftEndpoint.java index a0d23f35b98..0d8afaf8f0a 100644 --- a/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftEndpoint.java +++ b/components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftEndpoint.java @@ -20,6 +20,7 @@ import org.apache.camel.Category; import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.Producer; +import org.apache.camel.spi.EndpointServiceLocation; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.support.DefaultEndpoint; @@ -30,7 +31,7 @@ import org.apache.camel.support.SynchronousDelegateProducer; */ @UriEndpoint(firstVersion = "2.20.0", scheme = "thrift", title = "Thrift", syntax = "thrift:host:port/service", category = { Category.RPC, Category.TRANSFORMATION }, headersClass = ThriftConstants.class) -public class ThriftEndpoint extends DefaultEndpoint { +public class ThriftEndpoint extends DefaultEndpoint implements EndpointServiceLocation { @UriParam private ThriftConfiguration configuration; @UriParam(defaultValue = "false", label = "advanced", @@ -49,6 +50,16 @@ public class ThriftEndpoint extends DefaultEndpoint { servicePackage = ThriftUtils.extractServicePackage(configuration.getService()); } + @Override + public String getServiceUrl() { + return configuration.getHost() + ":" + configuration.getPort(); + } + + @Override + public String getServiceProtocol() { + return "thrift"; + } + public ThriftConfiguration getConfiguration() { return configuration; } diff --git a/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioEndpoint.java b/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioEndpoint.java index 042611cc405..b0f1dd35c47 100644 --- a/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioEndpoint.java +++ b/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioEndpoint.java @@ -23,6 +23,7 @@ import java.util.Map; import com.twilio.http.TwilioRestClient; import org.apache.camel.Category; +import org.apache.camel.Component; import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.Producer; @@ -32,6 +33,7 @@ import org.apache.camel.component.twilio.internal.TwilioApiName; import org.apache.camel.component.twilio.internal.TwilioConstants; import org.apache.camel.component.twilio.internal.TwilioPropertiesHelper; import org.apache.camel.spi.BeanIntrospection; +import org.apache.camel.spi.EndpointServiceLocation; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.support.PluginHelper; @@ -45,7 +47,7 @@ import org.apache.camel.support.component.ApiMethodPropertiesHelper; @UriEndpoint(firstVersion = "2.20.0", scheme = "twilio", title = "Twilio", syntax = "twilio:apiName/methodName", apiSyntax = "apiName/methodName", category = { Category.API, Category.MESSAGING, Category.CLOUD }) -public class TwilioEndpoint extends AbstractApiEndpoint<TwilioApiName, TwilioConfiguration> { +public class TwilioEndpoint extends AbstractApiEndpoint<TwilioApiName, TwilioConfiguration> implements EndpointServiceLocation { protected static final Map<String, String> EXECUTOR_METHOD_MAP; @@ -70,7 +72,29 @@ public class TwilioEndpoint extends AbstractApiEndpoint<TwilioApiName, TwilioCon endpointConfiguration); this.component = component; this.configuration = endpointConfiguration; + } + + @Override + public TwilioComponent getComponent() { + return (TwilioComponent) super.getComponent(); + } + + @Override + public String getServiceUrl() { + return "https://twilio.com"; + } + @Override + public String getServiceProtocol() { + return "rest"; + } + + @Override + public Map<String, String> getServiceMetadata() { + if (getComponent().getUsername() != null) { + return Map.of("username", getComponent().getUsername()); + } + return null; } @Override diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java index 02f9556df87..8140a009953 100644 --- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java +++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowConsumer.java @@ -73,6 +73,11 @@ public class UndertowConsumer extends DefaultConsumer implements HttpHandler, Su super(endpoint, processor); } + @Override + public boolean isHostedService() { + return true; + } + public boolean isRest() { return rest; } diff --git a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java index 16efda19a92..6113cf8508c 100644 --- a/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java +++ b/components/camel-undertow/src/main/java/org/apache/camel/component/undertow/UndertowEndpoint.java @@ -40,6 +40,7 @@ import org.apache.camel.component.undertow.UndertowConstants.EventType; import org.apache.camel.component.undertow.handlers.CamelWebSocketHandler; import org.apache.camel.component.undertow.spi.UndertowSecurityProvider; import org.apache.camel.http.base.cookie.CookieHandler; +import org.apache.camel.spi.EndpointServiceLocation; import org.apache.camel.spi.HeaderFilterStrategy; import org.apache.camel.spi.HeaderFilterStrategyAware; import org.apache.camel.spi.Metadata; @@ -61,7 +62,7 @@ import org.xnio.Options; @UriEndpoint(firstVersion = "2.16.0", scheme = "undertow", title = "Undertow", syntax = "undertow:httpURI", category = { Category.HTTP, Category.NETWORKING }, lenientProperties = true, headersClass = UndertowConstants.class) -public class UndertowEndpoint extends DefaultEndpoint implements AsyncEndpoint, HeaderFilterStrategyAware, DiscoverableService { +public class UndertowEndpoint extends DefaultEndpoint implements AsyncEndpoint, HeaderFilterStrategyAware, DiscoverableService, EndpointServiceLocation { private static final Logger LOG = LoggerFactory.getLogger(UndertowEndpoint.class); @@ -144,6 +145,22 @@ public class UndertowEndpoint extends DefaultEndpoint implements AsyncEndpoint, this.component = component; } + @Override + public String getServiceUrl() { + if (httpURI != null) { + return httpURI.toString(); + } + return null; + } + + @Override + public String getServiceProtocol() { + if (httpURI != null) { + return httpURI.getScheme(); + } + return null; + } + @Override public UndertowComponent getComponent() { return component; diff --git a/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherEndpoint.java b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherEndpoint.java index a5cb97c08b4..712f740f354 100644 --- a/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherEndpoint.java +++ b/components/camel-weather/src/main/java/org/apache/camel/component/weather/WeatherEndpoint.java @@ -20,6 +20,7 @@ import org.apache.camel.Category; import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.Producer; +import org.apache.camel.spi.EndpointServiceLocation; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.support.DefaultPollingEndpoint; @@ -30,7 +31,7 @@ import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; */ @UriEndpoint(firstVersion = "2.12.0", scheme = "weather", title = "Weather", syntax = "weather:name", category = { Category.API }, headersClass = WeatherConstants.class) -public class WeatherEndpoint extends DefaultPollingEndpoint { +public class WeatherEndpoint extends DefaultPollingEndpoint implements EndpointServiceLocation { @UriParam private final WeatherConfiguration configuration; @@ -43,6 +44,16 @@ public class WeatherEndpoint extends DefaultPollingEndpoint { this.weatherQuery = new WeatherQuery(getConfiguration()); } + @Override + public String getServiceUrl() { + return "http://api.openweathermap.org/data/2.5"; + } + + @Override + public String getServiceProtocol() { + return "http"; + } + @Override public Consumer createConsumer(Processor processor) throws Exception { WeatherConsumer answer = new WeatherConsumer(this, processor); diff --git a/components/camel-web3j/src/main/java/org/apache/camel/component/web3j/Web3jEndpoint.java b/components/camel-web3j/src/main/java/org/apache/camel/component/web3j/Web3jEndpoint.java index 6b04db7dc5b..829207a4b86 100644 --- a/components/camel-web3j/src/main/java/org/apache/camel/component/web3j/Web3jEndpoint.java +++ b/components/camel-web3j/src/main/java/org/apache/camel/component/web3j/Web3jEndpoint.java @@ -22,6 +22,7 @@ import org.apache.camel.Category; import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.Producer; +import org.apache.camel.spi.EndpointServiceLocation; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; @@ -45,7 +46,7 @@ import org.web3j.quorum.Quorum; */ @UriEndpoint(firstVersion = "2.22.0", scheme = "web3j", title = "Web3j Ethereum Blockchain", syntax = "web3j:nodeAddress", category = { Category.BLOCKCHAIN }, headersClass = Web3jConstants.class) -public class Web3jEndpoint extends DefaultEndpoint { +public class Web3jEndpoint extends DefaultEndpoint implements EndpointServiceLocation { private static final Logger LOG = LoggerFactory.getLogger(Web3jEndpoint.class); private Web3j web3j; @@ -63,6 +64,16 @@ public class Web3jEndpoint extends DefaultEndpoint { this.nodeAddress = remaining; } + @Override + public String getServiceUrl() { + return nodeAddress; + } + + @Override + public String getServiceProtocol() { + return "json-rpc"; + } + @Override protected void doStart() throws Exception { this.web3j = buildService(nodeAddress, configuration); diff --git a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressEndpoint.java b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressEndpoint.java index f1f32f1a2ed..1791ab1c8e9 100644 --- a/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressEndpoint.java +++ b/components/camel-wordpress/src/main/java/org/apache/camel/component/wordpress/WordpressEndpoint.java @@ -33,6 +33,7 @@ import org.apache.camel.component.wordpress.consumer.WordpressUserConsumer; import org.apache.camel.component.wordpress.producer.WordpressPostProducer; import org.apache.camel.component.wordpress.producer.WordpressUserProducer; import org.apache.camel.component.wordpress.proxy.WordpressOperationType; +import org.apache.camel.spi.EndpointServiceLocation; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; @@ -47,9 +48,9 @@ import org.apache.camel.util.PropertiesHelper; */ @UriEndpoint(firstVersion = "2.21.0", scheme = "wordpress", title = "WordPress", syntax = "wordpress:operation", category = { Category.CLOUD, Category.API, Category.CMS }) -public class WordpressEndpoint extends DefaultEndpoint { +public class WordpressEndpoint extends DefaultEndpoint implements EndpointServiceLocation { - public static final String ENDPOINT_SERVICE_POST = "post, user"; + public static final String ENDPOINT_SERVICE_POST = "post,user"; @UriPath(description = "The endpoint operation.", enums = ENDPOINT_SERVICE_POST) @Metadata(required = true) @@ -67,6 +68,24 @@ public class WordpressEndpoint extends DefaultEndpoint { this.configuration = configuration; } + @Override + public String getServiceUrl() { + return configuration.getUrl(); + } + + @Override + public String getServiceProtocol() { + return "http"; + } + + @Override + public Map<String, String> getServiceMetadata() { + if (configuration.getUser() != null) { + return Map.of("username", configuration.getUser()); + } + return null; + } + public WordpressConfiguration getConfiguration() { return configuration; } diff --git a/components/camel-workday/src/main/java/org/apache/camel/component/workday/WorkdayEndpoint.java b/components/camel-workday/src/main/java/org/apache/camel/component/workday/WorkdayEndpoint.java index 533f59de93e..fbda5b47b1d 100644 --- a/components/camel-workday/src/main/java/org/apache/camel/component/workday/WorkdayEndpoint.java +++ b/components/camel-workday/src/main/java/org/apache/camel/component/workday/WorkdayEndpoint.java @@ -23,16 +23,19 @@ import org.apache.camel.Producer; import org.apache.camel.component.workday.producer.WorkdayCommonAPIProducer; import org.apache.camel.component.workday.producer.WorkdayDefaultProducer; import org.apache.camel.component.workday.producer.WorkdayReportProducer; +import org.apache.camel.spi.EndpointServiceLocation; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.support.DefaultEndpoint; +import java.util.Map; + /** * Detect and parse documents using Workday. */ @UriEndpoint(firstVersion = "3.1.0", scheme = "workday", title = "Workday", syntax = "workday:entity:path", producerOnly = true, category = { Category.CLOUD, Category.API, Category.SAAS }, headersClass = WorkdayDefaultProducer.class) -public class WorkdayEndpoint extends DefaultEndpoint { +public class WorkdayEndpoint extends DefaultEndpoint implements EndpointServiceLocation { @UriParam private WorkdayConfiguration workdayConfiguration; @@ -45,6 +48,24 @@ public class WorkdayEndpoint extends DefaultEndpoint { this.workdayConfiguration = configuration; } + @Override + public String getServiceUrl() { + return workdayConfiguration.getHost(); + } + + @Override + public String getServiceProtocol() { + return "rest"; + } + + @Override + public Map<String, String> getServiceMetadata() { + if (workdayConfiguration.getClientId() != null) { + return Map.of("clientId", workdayConfiguration.getClientId()); + } + return null; + } + public Producer createProducer() throws Exception { switch (workdayConfiguration.getEntity()) { case report: diff --git a/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppEndpoint.java b/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppEndpoint.java index 2acb8b8f387..0c39c2723f9 100644 --- a/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppEndpoint.java +++ b/components/camel-xmpp/src/main/java/org/apache/camel/component/xmpp/XmppEndpoint.java @@ -20,11 +20,13 @@ import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.List; +import java.util.Map; import org.apache.camel.Category; import org.apache.camel.Consumer; import org.apache.camel.Processor; import org.apache.camel.Producer; +import org.apache.camel.spi.EndpointServiceLocation; import org.apache.camel.spi.HeaderFilterStrategy; import org.apache.camel.spi.HeaderFilterStrategyAware; import org.apache.camel.spi.Metadata; @@ -59,7 +61,7 @@ import org.slf4j.LoggerFactory; @UriEndpoint(firstVersion = "1.0", scheme = "xmpp", title = "XMPP", syntax = "xmpp:host:port/participant", alternativeSyntax = "xmpp:user:password@host:port/participant", category = { Category.CHAT, Category.MESSAGING }, headersClass = XmppConstants.class) -public class XmppEndpoint extends DefaultEndpoint implements HeaderFilterStrategyAware { +public class XmppEndpoint extends DefaultEndpoint implements HeaderFilterStrategyAware, EndpointServiceLocation { private static final Logger LOG = LoggerFactory.getLogger(XmppEndpoint.class); @@ -112,6 +114,24 @@ public class XmppEndpoint extends DefaultEndpoint implements HeaderFilterStrateg super(uri, component); } + @Override + public String getServiceUrl() { + return host + ":" + port; + } + + @Override + public String getServiceProtocol() { + return "xmpp"; + } + + @Override + public Map<String, String> getServiceMetadata() { + if (user != null) { + return Map.of("username", user); + } + return null; + } + @Override public Producer createProducer() throws Exception { if (room != null) { diff --git a/components/camel-zeebe/src/main/java/org/apache/camel/component/zeebe/ZeebeEndpoint.java b/components/camel-zeebe/src/main/java/org/apache/camel/component/zeebe/ZeebeEndpoint.java index b4e3b99fd51..a60681049d6 100644 --- a/components/camel-zeebe/src/main/java/org/apache/camel/component/zeebe/ZeebeEndpoint.java +++ b/components/camel-zeebe/src/main/java/org/apache/camel/component/zeebe/ZeebeEndpoint.java @@ -23,6 +23,7 @@ import org.apache.camel.Processor; import org.apache.camel.Producer; import org.apache.camel.component.zeebe.internal.OperationName; import org.apache.camel.component.zeebe.internal.ZeebeService; +import org.apache.camel.spi.EndpointServiceLocation; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; @@ -30,13 +31,15 @@ import org.apache.camel.spi.UriPath; import org.apache.camel.support.DefaultEndpoint; import org.apache.camel.util.ObjectHelper; +import java.util.Map; + /** * Zeebe component which integrates with Camunda Zeebe to interact with the API. */ @UriEndpoint(firstVersion = "3.21.0", scheme = "zeebe", title = "Zeebe", syntax = "zeebe:operationName", category = { Category.WORKFLOW, Category.SAAS }, headersClass = ZeebeConstants.class) -public class ZeebeEndpoint extends DefaultEndpoint { +public class ZeebeEndpoint extends DefaultEndpoint implements EndpointServiceLocation { @UriPath(label = "common", description = "The operation to use", enums = "startProcess," + "cancelProcess,publishMessage,completeJob,failJob,updateJobRetries,worker,throwError,deployResource") @@ -60,10 +63,28 @@ public class ZeebeEndpoint extends DefaultEndpoint { public ZeebeEndpoint(String uri, ZeebeComponent component, OperationName operationName) { super(uri, component); - this.operationName = operationName; } + @Override + public String getServiceUrl() { + return getComponent().getGatewayHost() + ":" + getComponent().getGatewayPort(); + } + + @Override + public String getServiceProtocol() { + return "rpc"; + } + + @Override + public Map<String, String> getServiceMetadata() { + if (getComponent().getClientId() != null) { + return Map.of("clientId", getComponent().getClientId()); + } + return null; + } + + public Producer createProducer() throws Exception { ObjectHelper.notNull(operationName, "operationName"); diff --git a/components/camel-zendesk/src/main/java/org/apache/camel/component/zendesk/ZendeskEndpoint.java b/components/camel-zendesk/src/main/java/org/apache/camel/component/zendesk/ZendeskEndpoint.java index bb75e9ec9b3..b28d08164d9 100644 --- a/components/camel-zendesk/src/main/java/org/apache/camel/component/zendesk/ZendeskEndpoint.java +++ b/components/camel-zendesk/src/main/java/org/apache/camel/component/zendesk/ZendeskEndpoint.java @@ -27,6 +27,7 @@ import org.apache.camel.component.zendesk.internal.ZendeskApiName; import org.apache.camel.component.zendesk.internal.ZendeskConstants; import org.apache.camel.component.zendesk.internal.ZendeskHelper; import org.apache.camel.component.zendesk.internal.ZendeskPropertiesHelper; +import org.apache.camel.spi.EndpointServiceLocation; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; import org.apache.camel.support.component.AbstractApiEndpoint; @@ -41,7 +42,7 @@ import org.zendesk.client.v2.Zendesk; @UriEndpoint(firstVersion = "2.19.0", scheme = "zendesk", title = "Zendesk", syntax = "zendesk:methodName", apiSyntax = "methodName", consumerPrefix = "consumer", category = { Category.CLOUD, Category.API, Category.SAAS }) -public class ZendeskEndpoint extends AbstractApiEndpoint<ZendeskApiName, ZendeskConfiguration> { +public class ZendeskEndpoint extends AbstractApiEndpoint<ZendeskApiName, ZendeskConfiguration> implements EndpointServiceLocation { @UriParam private ZendeskConfiguration configuration; @@ -55,6 +56,24 @@ public class ZendeskEndpoint extends AbstractApiEndpoint<ZendeskApiName, Zendesk this.configuration = endpointConfiguration; } + @Override + public String getServiceUrl() { + return configuration.getServerUrl(); + } + + @Override + public String getServiceProtocol() { + return "rest"; + } + + @Override + public Map<String, String> getServiceMetadata() { + if (configuration.getUsername() != null) { + return Map.of("username", configuration.getUsername()); + } + return null; + } + @Override public ZendeskComponent getComponent() { return (ZendeskComponent) super.getComponent();