Tidy up and add error option to logging
Formatted the files so far getting rid of theose pesky tabs. Also added the error logging options to the logging wrapper classes.
This commit is contained in:
parent
82ed9cc10b
commit
5f25b065aa
8 changed files with 144 additions and 146 deletions
|
@ -1,8 +1,8 @@
|
||||||
package uk.xlab.teamcity.phabricator;
|
package uk.xlab.teamcity.phabricator;
|
||||||
|
|
||||||
public class Constants {
|
public class Constants {
|
||||||
public static final String BUILD_FEATURE_TYPE = "phabricator-build-feature";
|
public static final String BUILD_FEATURE_TYPE = "phabricator-build-feature";
|
||||||
public static final String PLUGIN_NAME = "phabricator";
|
public static final String PLUGIN_NAME = "phabricator";
|
||||||
public static final String PLUGIN_DISPLAY_NAME = "Phabricator Plugin";
|
public static final String PLUGIN_DISPLAY_NAME = "Phabricator Plugin";
|
||||||
public static final String PHABRICATOR_URL_SETTING = "phabricator_url_setting";
|
public static final String PHABRICATOR_URL_SETTING = "phabricator_url_setting";
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
package uk.xlab.teamcity.phabricator;
|
package uk.xlab.teamcity.phabricator;
|
||||||
|
|
||||||
public interface IPhabricatorPluginLogger {
|
public interface IPhabricatorPluginLogger {
|
||||||
public void info(String message);
|
|
||||||
public void warn(String message, Exception e);
|
public void info(String message);
|
||||||
|
|
||||||
|
public void warn(String message, Exception e);
|
||||||
|
|
||||||
|
public void error(String message, Exception e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,13 +4,18 @@ import jetbrains.buildServer.log.Loggers;
|
||||||
|
|
||||||
public final class PhabricatorAgentLogger implements IPhabricatorPluginLogger {
|
public final class PhabricatorAgentLogger implements IPhabricatorPluginLogger {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void info(String message) {
|
public void info(String message) {
|
||||||
Loggers.AGENT.info(String.format("Phabricator Plugin: %s", message));
|
Loggers.AGENT.info(String.format("Phabricator Plugin: %s", message));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void warn(String message, Exception e) {
|
public void warn(String message, Exception e) {
|
||||||
Loggers.AGENT.warn(String.format("Phabricator Plugin: %s", message), e);
|
Loggers.AGENT.warn(String.format("Phabricator Plugin: %s", message), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void error(String message, Exception e) {
|
||||||
|
Loggers.AGENT.error(String.format("Phabricator Plugin: %s", message), e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,43 +3,41 @@ package uk.xlab.teamcity.phabricator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds all the parameters set on the build applied by the
|
* Holds all the parameters set on the build applied by the harbormaster trigger
|
||||||
* harbormaster trigger from phabricator. It also has the
|
* from phabricator. It also has the methods used to communicate the build
|
||||||
* methods used to communicate the build result back to
|
* result back to harbormaster
|
||||||
* harbormaster
|
|
||||||
*
|
*
|
||||||
* @author steven.cooney
|
* @author steven.cooney
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class PhabricatorPluginConfig {
|
public class PhabricatorPluginConfig {
|
||||||
|
|
||||||
private IPhabricatorPluginLogger logger;
|
private IPhabricatorPluginLogger logger;
|
||||||
private Map<String, String> params;
|
private Map<String, String> params;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the appropriate logger depending if the class is
|
* Set the appropriate logger depending if the class is called from the SERVER
|
||||||
* called from the SERVER or AGENT
|
* or AGENT
|
||||||
*
|
*
|
||||||
* @param logger
|
* @param logger
|
||||||
*/
|
*/
|
||||||
public void setLogger(PhabricatorServerLogger logger) {
|
public void setLogger(PhabricatorServerLogger logger) {
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Take a copy of all build parameters which will then
|
* Take a copy of all build parameters which will then be parsed
|
||||||
* be parsed
|
*
|
||||||
*
|
* @param parameters
|
||||||
* @param parameters
|
*/
|
||||||
*/
|
public void setParameters(Map<String, String> parameters) {
|
||||||
public void setParameters(Map<String, String> parameters) {
|
params = parameters;
|
||||||
params = parameters;
|
|
||||||
|
|
||||||
logger.info(String.format("Looking for parameters"));
|
logger.info(String.format("Looking for parameters"));
|
||||||
for (String param : params.keySet()) {
|
for (String param : params.keySet()) {
|
||||||
if (param != null) {
|
if (param != null) {
|
||||||
logger.info(String.format("Found %s", param));
|
logger.info(String.format("Found %s", param));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,22 +4,18 @@ import jetbrains.buildServer.log.Loggers;
|
||||||
|
|
||||||
public final class PhabricatorServerLogger implements IPhabricatorPluginLogger {
|
public final class PhabricatorServerLogger implements IPhabricatorPluginLogger {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void info(String message) {
|
public void info(String message) {
|
||||||
Loggers.SERVER.info(String.format("Phabricator Plugin: %s", message));
|
Loggers.SERVER.info(String.format("Phabricator Plugin: %s", message));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void warn(String message, Exception e) {
|
public void warn(String message, Exception e) {
|
||||||
Loggers.SERVER.warn(String.format("Phabricator Plugin: %s", message), e);
|
Loggers.SERVER.warn(String.format("Phabricator Plugin: %s", message), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// public void agentInfo(String message) {
|
@Override
|
||||||
// Loggers.AGENT.info(String.format("Phabricator Plugin: %s", message));
|
public void error(String message, Exception e) {
|
||||||
// }
|
Loggers.SERVER.error(String.format("Phabricator Plugin: %s", message), e);
|
||||||
//
|
}
|
||||||
// public void agentWarn(String message, Exception e) {
|
|
||||||
// Loggers.AGENT.warn(String.format("Phabricator Plugin: %s", message), e);
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,48 +17,48 @@ import jetbrains.buildServer.serverSide.SRunningBuild;
|
||||||
*/
|
*/
|
||||||
public class BuildTracker implements Runnable {
|
public class BuildTracker implements Runnable {
|
||||||
|
|
||||||
private SRunningBuild build;
|
private SRunningBuild build;
|
||||||
private PhabricatorServerLogger logger;
|
private PhabricatorServerLogger logger;
|
||||||
private PhabricatorPluginConfig phabricatorConfig;
|
private PhabricatorPluginConfig phabricatorConfig;
|
||||||
|
|
||||||
public BuildTracker(SRunningBuild runningBuild, PhabricatorServerLogger phabLogger) {
|
public BuildTracker(SRunningBuild runningBuild, PhabricatorServerLogger phabLogger) {
|
||||||
build = runningBuild;
|
build = runningBuild;
|
||||||
logger = phabLogger;
|
logger = phabLogger;
|
||||||
|
|
||||||
phabricatorConfig = new PhabricatorPluginConfig();
|
phabricatorConfig = new PhabricatorPluginConfig();
|
||||||
phabricatorConfig.setLogger(logger);
|
phabricatorConfig.setLogger(logger);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
// Attempt to get the parameters set by the phabricator build feature. If non
|
// Attempt to get the parameters set by the phabricator build feature. If non
|
||||||
// are set then the feature is not turned on.
|
// are set then the feature is not turned on.
|
||||||
Collection<SBuildFeatureDescriptor> phabricatorBuildFeatureParameters = build
|
Collection<SBuildFeatureDescriptor> phabricatorBuildFeatureParameters = build
|
||||||
.getBuildFeaturesOfType(Constants.BUILD_FEATURE_TYPE);
|
.getBuildFeaturesOfType(Constants.BUILD_FEATURE_TYPE);
|
||||||
|
|
||||||
// Check if the build is part of a configuration which
|
// Check if the build is part of a configuration which
|
||||||
// uses the phabricator build feature.
|
// uses the phabricator build feature.
|
||||||
if (!phabricatorBuildFeatureParameters.isEmpty()) {
|
if (!phabricatorBuildFeatureParameters.isEmpty()) {
|
||||||
logger.info("Tracking build " + build.getBuildNumber());
|
logger.info("Tracking build " + build.getBuildNumber());
|
||||||
|
|
||||||
// Gather together all the build and phabricator parameters
|
// Gather together all the build and phabricator parameters
|
||||||
Map<String, String> params = new HashMap<>();
|
Map<String, String> params = new HashMap<>();
|
||||||
params.putAll(build.getBuildOwnParameters());
|
params.putAll(build.getBuildOwnParameters());
|
||||||
params.putAll(phabricatorBuildFeatureParameters.iterator().next().getParameters());
|
params.putAll(phabricatorBuildFeatureParameters.iterator().next().getParameters());
|
||||||
|
|
||||||
// Setup plugin specific configuration
|
// Setup plugin specific configuration
|
||||||
// TODO: implement AppConfig as PluginConfig
|
// TODO: implement AppConfig as PluginConfig
|
||||||
phabricatorConfig.setParameters(params);
|
phabricatorConfig.setParameters(params);
|
||||||
|
|
||||||
while (!build.isFinished()) {
|
while (!build.isFinished()) {
|
||||||
// Wait until the build finishes
|
// Wait until the build finishes
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info(String.format("Build %s finished: %s", build.getBuildNumber(), build.getBuildStatus()));
|
logger.info(String.format("Build %s finished: %s", build.getBuildNumber(), build.getBuildStatus()));
|
||||||
|
|
||||||
if (build.getStatusDescriptor().isSuccessful()) {
|
if (build.getStatusDescriptor().isSuccessful()) {
|
||||||
logger.info("Successful Build");
|
logger.info("Successful Build");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,33 +8,30 @@ import jetbrains.buildServer.serverSide.SRunningBuild;
|
||||||
import jetbrains.buildServer.util.EventDispatcher;
|
import jetbrains.buildServer.util.EventDispatcher;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Listen for builds been started and track their progress
|
* Listen for builds been started and track their progress with BuildTracker
|
||||||
* with BuildTracker
|
|
||||||
*
|
*
|
||||||
* @author steven.cooney
|
* @author steven.cooney
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class PhabricatorBuildServerAdapter extends BuildServerAdapter {
|
public class PhabricatorBuildServerAdapter extends BuildServerAdapter {
|
||||||
|
|
||||||
private PhabricatorServerLogger logger;
|
private PhabricatorServerLogger logger;
|
||||||
|
|
||||||
public PhabricatorBuildServerAdapter(
|
public PhabricatorBuildServerAdapter(@NotNull final EventDispatcher<BuildServerListener> buildServerListener,
|
||||||
@NotNull final EventDispatcher<BuildServerListener> buildServerListener,
|
@NotNull final PhabricatorServerLogger phabLogger) {
|
||||||
@NotNull final PhabricatorServerLogger phabLogger
|
buildServerListener.addListener(this);
|
||||||
) {
|
logger = phabLogger;
|
||||||
buildServerListener.addListener(this);
|
|
||||||
logger = phabLogger;
|
logger.info("Build server adapter registered");
|
||||||
|
}
|
||||||
logger.info("Build server adapter registered");
|
|
||||||
}
|
@Override
|
||||||
|
public void buildStarted(@NotNull SRunningBuild runningBuild) {
|
||||||
@Override
|
super.buildStarted(runningBuild);
|
||||||
public void buildStarted(@NotNull SRunningBuild runningBuild) {
|
|
||||||
super.buildStarted(runningBuild);
|
// Do the work in a separate thread to avoid blocking
|
||||||
|
// other builds monitored by this adapter (this might be
|
||||||
// Do the work in a separate thread to avoid blocking
|
// a tad overkill)
|
||||||
// other builds monitored by this adapter (this might be
|
new Thread(new BuildTracker(runningBuild, logger)).start();
|
||||||
// a tad overkill)
|
}
|
||||||
new Thread(new BuildTracker(runningBuild, logger)).start();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,50 +8,48 @@ import jetbrains.buildServer.serverSide.BuildFeature;
|
||||||
import jetbrains.buildServer.web.openapi.PluginDescriptor;
|
import jetbrains.buildServer.web.openapi.PluginDescriptor;
|
||||||
|
|
||||||
public class PhabricatorPluginBuildFeature extends BuildFeature {
|
public class PhabricatorPluginBuildFeature extends BuildFeature {
|
||||||
|
|
||||||
private final String myEditUrl;
|
|
||||||
private PhabricatorServerLogger logger;
|
|
||||||
|
|
||||||
public PhabricatorPluginBuildFeature(
|
|
||||||
@NotNull final PluginDescriptor pluginDescriptor,
|
|
||||||
@NotNull final PhabricatorServerLogger phabLogger
|
|
||||||
) {
|
|
||||||
myEditUrl = pluginDescriptor.getPluginResourcesPath("phabricatorBuildFeature.jsp");
|
|
||||||
logger = phabLogger;
|
|
||||||
|
|
||||||
logger.info("Build feature registered");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getType() {
|
|
||||||
return Constants.BUILD_FEATURE_TYPE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
private final String myEditUrl;
|
||||||
public String getDisplayName() {
|
private PhabricatorServerLogger logger;
|
||||||
return Constants.PLUGIN_DISPLAY_NAME;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
public PhabricatorPluginBuildFeature(@NotNull final PluginDescriptor pluginDescriptor,
|
||||||
public String getEditParametersUrl() {
|
@NotNull final PhabricatorServerLogger phabLogger) {
|
||||||
return myEditUrl;
|
myEditUrl = pluginDescriptor.getPluginResourcesPath("phabricatorBuildFeature.jsp");
|
||||||
}
|
logger = phabLogger;
|
||||||
|
|
||||||
@Override
|
logger.info("Build feature registered");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getType() {
|
||||||
|
return Constants.BUILD_FEATURE_TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDisplayName() {
|
||||||
|
return Constants.PLUGIN_DISPLAY_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getEditParametersUrl() {
|
||||||
|
return myEditUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isMultipleFeaturesPerBuildTypeAllowed() {
|
public boolean isMultipleFeaturesPerBuildTypeAllowed() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Populates the Parameters Description on the build features page
|
* Populates the Parameters Description on the build features page
|
||||||
*/
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public String describeParameters(@NotNull final Map<String, String> params) {
|
public String describeParameters(@NotNull final Map<String, String> params) {
|
||||||
String url = "";
|
String url = "";
|
||||||
|
|
||||||
for(String key : params.keySet()){
|
for (String key : params.keySet()) {
|
||||||
if(key.equals(Constants.PHABRICATOR_URL_SETTING)){
|
if (key.equals(Constants.PHABRICATOR_URL_SETTING)) {
|
||||||
url = params.get(key);
|
url = params.get(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue