com.liferay.jenkins.results.parser.JobReport Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of com.liferay.jenkins.results.parser
Show all versions of com.liferay.jenkins.results.parser
Liferay Jenkins Results Parser
/**
* SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
package com.liferay.jenkins.results.parser;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.json.JSONArray;
import org.json.JSONObject;
/**
* @author Michael Hashimoto
*/
public class JobReport {
public static JobReport getInstance(String jenkinsJobURLString) {
try {
return getInstance(new URL(jenkinsJobURLString));
}
catch (MalformedURLException malformedURLException) {
throw new RuntimeException(malformedURLException);
}
}
public static JobReport getInstance(URL jenkinsJobURL) {
String key = JenkinsResultsParserUtil.getRemoteURL(
jenkinsJobURL.toString());
if (!_jobReports.containsKey(key)) {
_jobReports.put(key, new JobReport(jenkinsJobURL));
}
return _jobReports.get(key);
}
public JenkinsMaster getJenkinsMaster() {
if (_jenkinsMaster != null) {
return _jenkinsMaster;
}
Matcher matcher = _jobURLPattern.matcher(String.valueOf(getJobURL()));
if (!matcher.find()) {
throw new RuntimeException("Invalid Job URL");
}
_jenkinsMaster = JenkinsMaster.getInstance(
matcher.group("masterHostname"));
return _jenkinsMaster;
}
public String getJobName() {
Matcher matcher = _jobURLPattern.matcher(String.valueOf(getJobURL()));
if (!matcher.find()) {
throw new RuntimeException("Invalid Job URL");
}
return matcher.group("jobName");
}
public URL getJobURL() {
return _jobURL;
}
public List getTopLevelBuildReports(
int maxBuildCount) {
if (_topLevelBuildReports != null) {
return _topLevelBuildReports;
}
_topLevelBuildReports = new ArrayList<>();
try {
JSONObject jsonObject = JenkinsResultsParserUtil.toJSONObject(
JenkinsResultsParserUtil.combine(
String.valueOf(getJobURL()), "/api/json?tree=",
"builds[actions[parameters[name,value]],*]"));
if (jsonObject == null) {
return _topLevelBuildReports;
}
JSONArray buildsJSONArray = jsonObject.optJSONArray("builds");
if (buildsJSONArray == JSONObject.NULL) {
return _topLevelBuildReports;
}
for (int i = 0; i < buildsJSONArray.length(); i++) {
if (_topLevelBuildReports.size() >= maxBuildCount) {
break;
}
JSONObject buildJSONObject = buildsJSONArray.getJSONObject(i);
if (buildJSONObject == JSONObject.NULL) {
continue;
}
_topLevelBuildReports.add(
BuildReportFactory.newTopLevelBuildReport(
buildJSONObject, this));
}
return _topLevelBuildReports;
}
catch (IOException ioException) {
return _topLevelBuildReports;
}
}
private JobReport(URL jobURL) {
Matcher matcher = _jobURLPattern.matcher(String.valueOf(jobURL));
if (!matcher.find()) {
throw new RuntimeException("Invalid Job URL");
}
try {
_jobURL = new URL(
JenkinsResultsParserUtil.combine(
"https://", matcher.group("masterHostname"),
".liferay.com/job/", matcher.group("jobName")));
}
catch (MalformedURLException malformedURLException) {
throw new RuntimeException(malformedURLException);
}
}
private static final Map _jobReports = new HashMap<>();
private static final Pattern _jobURLPattern = Pattern.compile(
"https?://(?test-\\d+-\\d+)(\\.liferay\\.com)?/job/" +
"(?[^/]+)/?");
private JenkinsMaster _jenkinsMaster;
private final URL _jobURL;
private List _topLevelBuildReports;
}