From 0465d5dbb4699b9bb8831a321bd75ee268615fbd Mon Sep 17 00:00:00 2001 From: Shelwin Xiao <562687381@qq.com> Date: Tue, 26 Nov 2019 16:48:03 +0800 Subject: [PATCH] send data to elasticsearch successfully --- .../pipelinemonitor/BuildStatusListener.java | 50 +++++++++++-------- .../PipelineMonitorWriter.java | 4 +- .../persistence/AbstractRemoteServerDao.java | 9 +++- .../persistence/RemoteServerDao.java | 2 +- .../pipelinemonitor/util/JsonUtil.java | 38 ++++++++++++++ 5 files changed, 77 insertions(+), 26 deletions(-) create mode 100644 src/main/java/io/jenkins/plugins/pipelinemonitor/util/JsonUtil.java diff --git a/src/main/java/io/jenkins/plugins/pipelinemonitor/BuildStatusListener.java b/src/main/java/io/jenkins/plugins/pipelinemonitor/BuildStatusListener.java index 48f3fcb..24e6334 100644 --- a/src/main/java/io/jenkins/plugins/pipelinemonitor/BuildStatusListener.java +++ b/src/main/java/io/jenkins/plugins/pipelinemonitor/BuildStatusListener.java @@ -45,27 +45,35 @@ public void onCompleted(final Run run, TaskListener listener) { PipelineMonitorWriter pmWrite = new PipelineMonitorWriter(run, errorStream, listener, run.getCharset()); - pmWrite.write(); - - /* - * final String buildResult; Result result = run.getResult(); if (result == null) { buildResult - * = "ONGOING"; } else { buildResult = result.toString(); } - * - * BuildStatus build = new BuildStatus(); - * build.setJenkinsUrl(Jenkins.getInstance().getRootUrl()); - * build.setJobName(run.getParent().getName()); build.setNumber(run.getNumber()); - * build.setResult(buildResult); build.setDuration(run.getDuration()); - * - * RestClientUtil.postToService("http://10.183.42.147:8080", build); - * - * TestResultAction testResultAction = run.getAction(TestResultAction.class); TestResults - * testResults = TestResults.fromJUnitTestResults(testResultAction); - * RestClientUtil.postToService("http://10.183.42.147:8080", testResults); - * - * CoberturaBuildAction coberturaAction = run.getAction(CoberturaBuildAction.class); - * CodeCoverage codeCoverage = CodeCoverage.fromCobertura(coberturaAction); - * RestClientUtil.postToService("http://10.183.42.147:8080", codeCoverage); - */ + + pmWrite.write(null); + + + final String buildResult; + Result result = run.getResult(); + if (result == null) { + buildResult = "ONGOING"; + } else { + buildResult = result.toString(); + } + + BuildStatus build = new BuildStatus(); + build.setJenkinsUrl(Jenkins.getInstance().getRootUrl()); + build.setJobName(run.getParent().getName()); + build.setNumber(run.getNumber()); + build.setResult(buildResult); + build.setDuration(run.getDuration()); + + pmWrite.write(build); + + TestResultAction testResultAction = run.getAction(TestResultAction.class); + TestResults testResults = TestResults.fromJUnitTestResults(testResultAction); + pmWrite.write(testResults); + + CoberturaBuildAction coberturaAction = run.getAction(CoberturaBuildAction.class); + CodeCoverage codeCoverage = CodeCoverage.fromCobertura(coberturaAction); + pmWrite.write(codeCoverage); + } /** diff --git a/src/main/java/io/jenkins/plugins/pipelinemonitor/PipelineMonitorWriter.java b/src/main/java/io/jenkins/plugins/pipelinemonitor/PipelineMonitorWriter.java index b685b35..6cb130c 100644 --- a/src/main/java/io/jenkins/plugins/pipelinemonitor/PipelineMonitorWriter.java +++ b/src/main/java/io/jenkins/plugins/pipelinemonitor/PipelineMonitorWriter.java @@ -85,8 +85,8 @@ String getJenkinsUrl() { return Jenkins.getInstance().getRootUrl(); } - public void write() { - JSONObject payload = dao.buildPayload(buildData); + public void write(Object object) { + JSONObject payload = dao.buildPayload(buildData, object); try { dao.push(payload.toString()); } catch (IOException e) { diff --git a/src/main/java/io/jenkins/plugins/pipelinemonitor/persistence/AbstractRemoteServerDao.java b/src/main/java/io/jenkins/plugins/pipelinemonitor/persistence/AbstractRemoteServerDao.java index 171d2cd..a4d3eb1 100644 --- a/src/main/java/io/jenkins/plugins/pipelinemonitor/persistence/AbstractRemoteServerDao.java +++ b/src/main/java/io/jenkins/plugins/pipelinemonitor/persistence/AbstractRemoteServerDao.java @@ -27,6 +27,8 @@ import org.apache.commons.lang.time.FastDateFormat; +import io.jenkins.plugins.pipelinemonitor.util.JsonUtil; + /** * Abstract data access object for Logstash indexers. * @@ -36,9 +38,12 @@ public abstract class AbstractRemoteServerDao implements RemoteServerDao { @Override - public JSONObject buildPayload(BuildData buildData) { + public JSONObject buildPayload(BuildData buildData, Object object) { JSONObject payload = new JSONObject(); - payload.put("data", buildData.toJson()); + payload.put("build", buildData.toJson()); + if (object != null) { + payload.put("result", JsonUtil.convertToJson(object)); + } payload.put("source", "jenkins"); payload.put("@timestamp", FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss.SSSZ") .format(Calendar.getInstance().getTime())); diff --git a/src/main/java/io/jenkins/plugins/pipelinemonitor/persistence/RemoteServerDao.java b/src/main/java/io/jenkins/plugins/pipelinemonitor/persistence/RemoteServerDao.java index 830c861..7eb25c4 100644 --- a/src/main/java/io/jenkins/plugins/pipelinemonitor/persistence/RemoteServerDao.java +++ b/src/main/java/io/jenkins/plugins/pipelinemonitor/persistence/RemoteServerDao.java @@ -54,5 +54,5 @@ static enum ServerType { * @param logLines The log data to transmit, not null * @return The formatted JSON object, never null */ - public JSONObject buildPayload(BuildData buildData); + public JSONObject buildPayload(BuildData buildData, Object object); } diff --git a/src/main/java/io/jenkins/plugins/pipelinemonitor/util/JsonUtil.java b/src/main/java/io/jenkins/plugins/pipelinemonitor/util/JsonUtil.java new file mode 100644 index 0000000..d464cb8 --- /dev/null +++ b/src/main/java/io/jenkins/plugins/pipelinemonitor/util/JsonUtil.java @@ -0,0 +1,38 @@ +package io.jenkins.plugins.pipelinemonitor.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.util.logging.Level; +import java.util.logging.Logger; +import net.sf.json.JSONObject; +import net.sf.json.JSONSerializer; + + +public class JsonUtil { + + private static final Logger LOGGER = Logger.getLogger(JsonUtil.class.getName()); + + protected JsonUtil() { + throw new IllegalAccessError("Utility class"); + } + + /** + * covert object to json. + * + * @param object object. + * @return json. + */ + public static JSONObject convertToJson(Object object) { + ObjectMapper mapper = new ObjectMapper(); + String convertedJson = ""; + try { + convertedJson = mapper.writeValueAsString(object); + return JSONObject.fromObject(convertedJson); + } catch (JsonProcessingException e) { + LOGGER.log(Level.WARNING, "Json conversion failed for object " + object, e); + } + return JSONObject.fromObject(convertedJson); + } + +}