package com.epam.cisen.jenkins; import com.epam.cisen.core.api.dto.CIInitializer; import com.epam.cisen.core.api.dto.CiReport; import com.epam.cisen.core.connector.BaseXMLParser; import com.epam.cisen.jenkins.connector.JenkinsConnection; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; public class JenkinsWorker { private static final String LAST_BUILD_XPATH = "/job/CISEN_buildflow/4/"; public CiReport checkStatus(JenkinsConfig config) { JenkinsConnection connection = new JenkinsConnection(config); try { String lastBuildsXML = connection.readBuildInfo(config.getJobName()); BaseXMLParser lastBuildParser = new BaseXMLParser(lastBuildsXML); return toReport(lastBuildParser); } catch (Exception e) { // TODO: add output into log System.out.printf(e.getMessage()); } return null; } private CiReport toReport(BaseXMLParser build) throws Exception { CiReport report = new CiReport(); report.setSystemId(build.get("/mavenModuleSetBuild/id")); //TODO: set property //report.setBuildId(build.getAttribute("/build", "id"));?? report.setBuildNumber(build.get("/mavenModuleSetBuild/number")); report.setStatus(toStatus(build.get("/mavenModuleSetBuild/result"))); report.setUrl(build.get("/mavenModuleSetBuild/url")); report.setTextStatus(build.get("/mavenModuleSetBuild/fullDisplayName")); report.setStartTime(Long.valueOf(build.get("/mavenModuleSetBuild/timestamp"))); report.setDuration(Long.valueOf(build.get("/mavenModuleSetBuild/duration"))); final NodeList userList = build.getNodeList("/mavenModuleSetBuild/culprit"); for (int i = 0; i < userList.getLength(); i++) { final NodeList userData = userList.item(i).getChildNodes(); for (int j = 0; j < userData.getLength(); j++) { final Node item = userData.item(j); if("fullName".equals(item.getNodeName())) { CIInitializer runner = new CIInitializer(); runner.setAction(CIInitializer.Action.PUSH); runner.setUserId(item.getTextContent()); report.addInitializer(runner); } } } return report; } private CiReport.Status toStatus(String status) { if ("SUCCESS".equalsIgnoreCase(status)) { return CiReport.Status.GREEN; } return CiReport.Status.RED; } }