
org.jolokia.discovery.AgentDetails Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jolokia-core Show documentation
Show all versions of jolokia-core Show documentation
jar file containing servlet and helper classes
package org.jolokia.discovery;
import java.util.Map;
import org.jolokia.Version;
import org.jolokia.config.ConfigKey;
import org.jolokia.config.Configuration;
import org.jolokia.util.NetworkUtil;
import org.json.simple.JSONObject;
import static org.jolokia.discovery.AbstractDiscoveryMessage.Payload;
import static org.jolokia.discovery.AbstractDiscoveryMessage.Payload.*;
/**
* Agent details describing this agent. This information during
* discovery of the agent. This object is mutable so that since
* the information is possible collected peu-a-peu through various
* channels.
*
* @author roland
* @since 31.01.14
*/
public class AgentDetails {
// Detected server handle
private String serverVendor, serverProduct, serverVersion;
// The URL on which an agent is listening
private String url;
// Whether the agent is secure via. If null, not information about the security
// mode could be collected.
private Boolean secured;
// Agent version
private String agentVersion;
// Agent id
private String agentId;
// Description for the agent
private String agentDescription;
// Whether initialization is done and no further update is allowed
private boolean sealed;
public AgentDetails(String pAgentId) {
agentVersion = Version.getAgentVersion();
agentId = pAgentId;
if (agentId == null) {
throw new IllegalArgumentException("No agent id given");
}
sealed = false;
}
public AgentDetails(Configuration pConfig) {
this(NetworkUtil.replaceExpression(pConfig.get(ConfigKey.AGENT_ID)));
agentDescription = pConfig.get(ConfigKey.AGENT_DESCRIPTION);
}
/**
* Constructor used when the input has been parsed
*
* @param pMsgData data send via multicast
*/
public AgentDetails(Map pMsgData) {
serverVendor = (String) pMsgData.get(SERVER_VENDOR);
serverProduct = (String) pMsgData.get(SERVER_PRODUCT);
serverVersion = (String) pMsgData.get(SERVER_VERSION);
url = (String) pMsgData.get(URL);
if (pMsgData.containsKey(SECURED)) {
secured = (Boolean) pMsgData.get(SECURED);
}
agentVersion = (String) pMsgData.get(AGENT_VERSION);
agentDescription = (String) pMsgData.get(AGENT_DESCRIPTION);
agentId = (String) pMsgData.get(AGENT_ID);
if (agentId == null) {
throw new IllegalArgumentException("No agent id given");
}
sealed = true;
}
/**
* Single method for updating the server information when the server has been detected
*
* @param pVendor vendor of the deteted container
* @param pProduct name of the contained
* @param pVersion server version (not Jolokia's version!)
*/
public void setServerInfo(String pVendor, String pProduct, String pVersion) {
checkSeal();
serverVendor = pVendor;
serverProduct = pProduct;
serverVersion = pVersion;
}
public void setUrl(String pUrl) {
checkSeal();
url = pUrl;
}
public void setSecured(Boolean pSecured) {
checkSeal();
secured = pSecured;
}
private void checkSeal() {
if (sealed) {
throw new IllegalStateException("Cannot update agent details because it is already initialized and sealed");
}
}
/**
* Check if either url or security information is missing.
* @return true if url or security information is missing and the initialization has not already be done
*/
public boolean isInitRequired() {
return !sealed && (isUrlMissing() || isSecuredMissing());
}
public boolean isUrlMissing() {
return url == null;
}
public boolean isSecuredMissing() {
return secured == null;
}
/**
* Seal this details so that no further updates are possible
*/
public void seal() {
sealed = true;
}
/**
* Get the ID specific for these agent
* @return unique id identifying this agent or null if no ID was given.
*/
public String getAgentId() {
return agentId;
}
/**
* Get the details as JSON Object
*
* @return
*/
public JSONObject toJSONObject() {
JSONObject resp = new JSONObject();
add(resp, URL,url);
if (secured != null) {
add(resp, SECURED, secured);
}
add(resp, SERVER_VENDOR, serverVendor);
add(resp, SERVER_PRODUCT, serverProduct);
add(resp, SERVER_VERSION, serverVersion);
add(resp, AGENT_VERSION, agentVersion);
add(resp, AGENT_ID, agentId);
add(resp, AGENT_DESCRIPTION,agentDescription);
return resp;
}
@Override
public String toString() {
return "AgentDetails{" + toJSONObject().toJSONString() + "}";
}
// =======================================================================================
private void add(JSONObject pResp, Payload pKey, Object pValue) {
if (pValue != null) {
pResp.put(pKey.toString().toLowerCase(),pValue);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy