-
Notifications
You must be signed in to change notification settings - Fork 52
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Validate HTTP connectivity for Agent traces port #464
Validate HTTP connectivity for Agent traces port #464
Conversation
d20b98e
to
b8e26e6
Compare
0404aa5
to
0260867
Compare
df3e530
to
d70595b
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Dropped some comments
DatadogUtilities.severe(logger, ex, "Failed to create socket to host: " + host + ", port: " + port); | ||
return ex.getMessage(); | ||
try { | ||
Set<String> endpoints = DatadogAgentClient.fetchAgentEndpoints(new HttpClient(10_000), agentHost, agentTraceCollectionPort); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we have a constant to name that 10_000
?
Also, I'm seeing that this is the timeout
. This means that if the plugin cannot communicate with the Datadog Agent, the request can take 10 seconds? This might be confusing for customers if there's no indication that the plugin is doing something under the hood.
If that's the case, could we limit the timeout to something lower (1 second? 2 seconds at most?) to provide quicker feedback.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've lowered the timeout to 2 seconds just to be on the safe side, and moved the value to a named constant.
if (!endpoints.isEmpty()) { | ||
return FormValidation.ok("Success!"); | ||
} else { | ||
return FormValidation.error("The agent returned empty endpoints list"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should use a more user-friendly error here to indicate what happened (Maybe something like Failed to communicate with host xxxxxx
or similar?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Makes sense, updated the message
DatadogUtilities.severe(logger, ex, "Failed to create socket to host: " + host + ", port: " + port); | ||
return ex.getMessage(); | ||
try { | ||
Set<String> endpoints = DatadogAgentClient.fetchAgentEndpoints(new HttpClient(10_000), agentHost, agentTraceCollectionPort); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there a way that the plugin can send traces directly over TCP socket? Or this is not possible anymore?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure if this was ever possible, I haven't seen it neither in the plugin nor in the Java tracer.
Requirements for Contributing to this repository
What does this PR do?
Improves connectivity check for Agent traces port.
Current check only verifies that a TCP socket can be opened using the Agent's host and configured traces port.
Traces are sent over HTTP, so it is possible that there is TCP connectivity, but not HTTP connectivity (for example, if there is an HTTP proxy in between Jenkins and the Agent).
The improved check verifies HTTP connectivity: it sends an HTTP request to the agent's
/info
endpoint. The check is considered successful if the info can be retrieved.Description of the Change
Alternate Designs
Possible Drawbacks
Verification Process
Additional Notes
Release Notes
Review checklist (to be filled by reviewers)
changelog/
label attached. If applicable it should have thebackward-incompatible
label attached.do-not-merge/
label attached.kind/
andseverity/
labels attached at least.