diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..cfd1885 --- /dev/null +++ b/.classpath @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore index 37e641d..257ac83 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ -target/ -.classpath -.project -.settings/ - +target/ +.settings/ + +/work diff --git a/.project b/.project new file mode 100644 index 0000000..a435710 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + graphite-plugin + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/README.md b/README.md index e69de29..43115d2 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,4 @@ +This plugin allows you to send the following metrics to one or more graphite servers: number of tests, tests skipped, tests failed, build duration, cobertura total line coverage and cobertura total branch coverage. + + +If you don't have a graphite server you can use : https://www.hostedgraphite.com to test. \ No newline at end of file diff --git a/pom.xml b/pom.xml index 58e327b..586b9d5 100644 --- a/pom.xml +++ b/pom.xml @@ -1,31 +1,31 @@ - + 4.0.0 org.jenkins-ci.plugins plugin - 1.509.1 - graphiteIntegrator - 1.2-SNAPSHOT + 1.2.1-SNAPSHOT hpi https://wiki.jenkins-ci.org/display/JENKINS/Graphite-plugin - + - joachim_rodrigues - joachim rodrigues - rodrigues.joachim@gmail.com + joachim_rodrigues + joachim rodrigues + rodrigues.joachim@gmail.com - + - scm:git:ssh://github.com/jenkinsci/graphite-plugin.git - scm:git:ssh://git@github.com/jenkinsci/graphite-plugin.git - https://github.com/jenkinsci/graphite-plugin - - + scm:git:ssh://github.com/jenkinsci/graphite-plugin.git + scm:git:ssh://git@github.com/jenkinsci/graphite-plugin.git + https://github.com/jenkinsci/graphite-plugin + + @@ -33,32 +33,33 @@ org.apache.maven.plugins maven-compiler-plugin + 2.3.2 - 1.7 - 1.7 + 1.6 + 1.6 - + maven-release-plugin - deploy + deploy - - repo.jenkins-ci.org - http://repo.jenkins-ci.org/public/ - - - - - repo.jenkins-ci.org - http://repo.jenkins-ci.org/public/ - - + + repo.jenkins-ci.org + http://repo.jenkins-ci.org/public/ + + + + + repo.jenkins-ci.org + http://repo.jenkins-ci.org/public/ + + @@ -66,17 +67,22 @@ cobertura 2.0.3 + + org.jenkins-ci.plugins + junit + 1.3 + - - maven.jenkins-ci.org - http://maven.jenkins-ci.org:8081/content/repositories/releases/ - - + + maven.jenkins-ci.org + http://maven.jenkins-ci.org:8081/content/repositories/releases/ + + - - 1.95 + + 1.112 diff --git a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/DescriptorImpl.java b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/DescriptorImpl.java index 61f9f21..2141b82 100644 --- a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/DescriptorImpl.java +++ b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/DescriptorImpl.java @@ -29,13 +29,16 @@ public final class DescriptorImpl extends BuildStepDescriptor impleme /** * */ - private final CopyOnWriteList servers = new CopyOnWriteList<>(); + private final CopyOnWriteList servers = new CopyOnWriteList(); /** * */ private GraphiteValidator validator = new GraphiteValidator(); + + private String baseQueueName; + /** * The default constructor. */ @@ -116,10 +119,16 @@ public Publisher newInstance(StaplerRequest req, JSONObject formData) { @Override public boolean configure(StaplerRequest req, JSONObject formData) { servers.replaceBy(req.bindParametersToList(Server.class, "serverBinding.")); + baseQueueName = formData.optString("baseQueueName", ""); save(); return true; } +public String getBaseQueueName(){ + return baseQueueName; + } + + /** * @param ip * @param port @@ -188,4 +197,22 @@ public FormValidation doCheckPort(@QueryParameter final String value) { return FormValidation.ok("Port is correctly configured"); } + + /** + * + * @param value + * @return + */ + public FormValidation doCheckBaseQueueName(@QueryParameter final String value) { + if(!validator.isBaseQueueNamePresent(value)){ + return FormValidation.ok(); + } + + if(!validator.validateBaseQueueName(value)){ + return FormValidation.error("Please "); + } + + return FormValidation.ok("Base queue name is correctly Configured"); + + } } diff --git a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/GraphitePublisher.java b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/GraphitePublisher.java index 8d3054d..56205c9 100644 --- a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/GraphitePublisher.java +++ b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/GraphitePublisher.java @@ -33,240 +33,244 @@ */ public class GraphitePublisher extends Notifier { - /** + /** * */ - @Extension - public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl(); + @Extension + public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl(); - /** + /** * */ - private String selectedIp; + private String selectedIp; - /** + /** * */ - private String selectedMetric; - - /** - * - */ - private String protocol; - - /** + private String selectedMetric; + + /** * */ - private List metrics = new ArrayList<>(); + private String protocol; + + private List metrics = new ArrayList(); - /** + /** * */ - public GraphitePublisher() { - } + public GraphitePublisher() { + } - /** + /** * */ - public GraphitePublisher(String ip, String metric, String protocol) { - this.selectedIp = ip; - this.selectedMetric = metric; - this.protocol = protocol; - System.out.println("IP: " + ip); - System.out.println("Protocol: " + protocol); - } - - /** + public GraphitePublisher(String ip, String metric, String protocol) { + this.selectedIp = ip; + this.selectedMetric = metric; + this.protocol = protocol; + System.out.println("IP: " + ip); + System.out.println("Protocol: " + protocol); + + } + + /** * */ - public List getMetrics() { - return metrics; - } + public List getMetrics() { + return metrics; + } - /** + /** * */ - public String getSelectedIp() { - String ipTemp = selectedIp; - if (ipTemp == null) { - Server[] servers = DESCRIPTOR.getServers(); - if (servers.length > 0) { - ipTemp = servers[0].getIp(); - } - } - return ipTemp; - } - - /** + public String getSelectedIp() { + String ipTemp = selectedIp; + if (ipTemp == null) { + Server[] servers = DESCRIPTOR.getServers(); + if (servers.length > 0) { + ipTemp = servers[0].getIp(); + } + } + return ipTemp; + } + + /** * */ - public String getSelectedMetric() { - String metricTemp = selectedMetric; - if (metricTemp == null) { - Metric[] metrics = DESCRIPTOR.getMetrics(); - if (metrics.length > 0) { - metricTemp = metrics[0].getName(); - } - } - return metricTemp; - } - - /** + public String getSelectedMetric() { + String metricTemp = selectedMetric; + if (metricTemp == null) { + Metric[] metrics = DESCRIPTOR.getMetrics(); + if (metrics.length > 0) { + metricTemp = metrics[0].getName(); + } + } + return metricTemp; + } + + /** * */ - public void setSelectedIp(String ip) { - this.selectedIp = ip; - } + public void setSelectedIp(String ip) { + this.selectedIp = ip; + } - /** + /** * */ - public void setSelectedMetric(String metric) { - this.selectedMetric = metric; - } + public void setSelectedMetric(String metric) { + this.selectedMetric = metric; + } - /** + /** * */ - public Server getServer() { - Server[] servers = DESCRIPTOR.getServers(); - if (selectedIp == null && servers.length > 0) { - return servers[0]; - } - for (Server server : servers) { - if (server.getIp().equals(selectedIp)) { - return server; - } - } - return null; - } - - /* - * (non-Javadoc) - * - * @see hudson.tasks.BuildStepCompatibilityLayer#prebuild(hudson.model.AbstractBuild, hudson.model.BuildListener) - */ - @Override - public boolean prebuild(AbstractBuild build, BuildListener listener) { - return true; - } - - /* - * (non-Javadoc) - * - * @see hudson.tasks.Publisher#needsToRunAfterFinalized() - */ - @Override - public boolean needsToRunAfterFinalized() { - return true; - } - - /* - * (non-Javadoc) - * - * @see hudson.tasks.BuildStep#getRequiredMonitorService() - */ - @Override - public BuildStepMonitor getRequiredMonitorService() { - return BuildStepMonitor.NONE; - } - - /* - * (non-Javadoc) - * - * @see hudson.tasks.Notifier#getDescriptor() - */ - @Override - public BuildStepDescriptor getDescriptor() { - return DESCRIPTOR; - } - - /* - * (non-Javadoc) - * - * @see hudson.tasks.BuildStepCompatibilityLayer#perform(hudson.model.AbstractBuild, hudson.Launcher, - * hudson.model.BuildListener) - */ - @Override - public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener) - throws InterruptedException, IOException { - - // EDITED: We do not want to exit if build fails - if (build.getResult() == Result.ABORTED) { - return true; - } - - if (getServer() == null) { - return false; - } - - listener.getLogger().println("Connecting to " + getServer().getDescription()); - - GraphiteLogger graphiteLogger = new GraphiteLogger(listener.getLogger()); - - AbstractMetric metricSender = null; - - List coberturaMetrics = null; - - for (Metric metric : metrics) { - if (metric.name.equals(MetricsEnum.BUILD_DURATION.name())) { - metricSender = new BuildDurationMetric(build, listener.getLogger(), graphiteLogger); - metricSender.sendMetric(getServer(), metric); - } - if(metric.name.equals(MetricsEnum.BUILD_FAILED.name())){ - metricSender = new BuildFailedMetric(build, listener.getLogger(), graphiteLogger); - metricSender.sendMetric(getServer(), metric); - } - if(metric.name.equals(MetricsEnum.BUILD_SUCCESSFUL.name())){ - metricSender = new BuildSuccessfulMetric(build, listener.getLogger(), graphiteLogger); - metricSender.sendMetric(getServer(), metric); - } - if (isCoberturaMetric(metric)) { - if (!isCoberturaListInitialized(coberturaMetrics)) { - coberturaMetrics = new ArrayList<>(); - } - coberturaMetrics.add(metric); - } - if (metric.name.equals(MetricsEnum.FAIL_TESTS.name())) { - metricSender = new FailTestsMetric(build, listener.getLogger(), graphiteLogger); - metricSender.sendMetric(getServer(), metric); - } - if (metric.name.equals(MetricsEnum.SKIPED_TESTS.name())) { - metricSender = new SkipTestsMetric(build, listener.getLogger(), graphiteLogger); - metricSender.sendMetric(getServer(), metric); - } - if (metric.name.equals(MetricsEnum.TOTAL_TESTS.name())) { - metricSender = new TotalTestsMetric(build, listener.getLogger(), graphiteLogger); - metricSender.sendMetric(getServer(), metric); - } - } - if (isCoberturaListInitialized(coberturaMetrics)) { - metricSender = new CoberturaCodeCoverageMetric(build, listener.getLogger(), graphiteLogger); - metricSender.sendMetric(getServer(), coberturaMetrics.toArray(new Metric[coberturaMetrics.size()])); - } - - return true; - } - - /** - * @param coberturaMetrics - * @return - */ - private boolean isCoberturaListInitialized(List coberturaMetrics) { - return coberturaMetrics != null; - } - - /** - * @param metric - * @return - */ - private boolean isCoberturaMetric(Metric metric) { - return (// metric.name.equals(MetricsEnum.COBERTURA_PACKAGE_BRANCH_COVERAGE.name()) - // || metric.name.equals(MetricsEnum.COBERTURA_PACKAGE_LINE_COVERAGE.name()) - // || - metric.name.equals(MetricsEnum.COBERTURA_TOTAL_BRANCH_COVERAGE.name()) || metric.name - .equals(MetricsEnum.COBERTURA_TOTAL_LINE_COVERAGE.name()) - - ); - } + public Server getServer() { + Server[] servers = DESCRIPTOR.getServers(); + if (selectedIp == null && servers.length > 0) { + return servers[0]; + } + for (Server server : servers) { + if (server.getIp().equals(selectedIp)) { + return server; + } + } + return null; + } + + /* + * (non-Javadoc) + * + * @see + * hudson.tasks.BuildStepCompatibilityLayer#prebuild(hudson.model.AbstractBuild + * , hudson.model.BuildListener) + */ + @Override + public boolean prebuild(AbstractBuild build, BuildListener listener) { + return true; + } + + /* + * (non-Javadoc) + * + * @see hudson.tasks.Publisher#needsToRunAfterFinalized() + */ + @Override + public boolean needsToRunAfterFinalized() { + return true; + } + + /* + * (non-Javadoc) + * + * @see hudson.tasks.BuildStep#getRequiredMonitorService() + */ + @Override + public BuildStepMonitor getRequiredMonitorService() { + return BuildStepMonitor.NONE; + } + + /* + * (non-Javadoc) + * + * @see hudson.tasks.Notifier#getDescriptor() + */ + @Override + public BuildStepDescriptor getDescriptor() { + return DESCRIPTOR; + } + + /* + * (non-Javadoc) + * + * @see + * hudson.tasks.BuildStepCompatibilityLayer#perform(hudson.model.AbstractBuild + * , hudson.Launcher, hudson.model.BuildListener) + */ + @Override + public boolean perform(AbstractBuild build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException { + + if (build.getResult() == Result.ABORTED) { + return true; + } + + if (getServer() == null) { + return false; + } + + listener.getLogger().println("Connecting to " + getServer().getDescription()); + + GraphiteLogger graphiteLogger = new GraphiteLogger(listener.getLogger()); + + AbstractMetric metricSender = null; + + List coberturaMetrics = null; + + for (Metric metric : metrics) { + if (metric.name.equals(MetricsEnum.BUILD_DURATION.name())) { + metricSender = new BuildDurationMetric(build, listener.getLogger(), graphiteLogger, DESCRIPTOR.getBaseQueueName()); + metricSender.sendMetric(getServer(), metric); + } + if (metric.name.equals(MetricsEnum.BUILD_FAILED.name())) { + metricSender = new BuildFailedMetric(build, listener.getLogger(), graphiteLogger, DESCRIPTOR.getBaseQueueName()); + metricSender.sendMetric(getServer(), metric); + } + if (metric.name.equals(MetricsEnum.BUILD_SUCCESSFUL.name())) { + metricSender = new BuildSuccessfulMetric(build, listener.getLogger(), graphiteLogger, DESCRIPTOR.getBaseQueueName()); + metricSender.sendMetric(getServer(), metric); + } + if (isCoberturaMetric(metric)) { + if (!isCoberturaListInitialized(coberturaMetrics)) { + coberturaMetrics = new ArrayList(); + } + coberturaMetrics.add(metric); + } + // If a Freestyle Build has been configured (without publishing + // JUnit XML Results) these will fail. + // Added simple null check in for now to be safe. + if (build.getTestResultAction() != null) { + if (metric.name.equals(MetricsEnum.FAIL_TESTS.name())) { + metricSender = new FailTestsMetric(build, listener.getLogger(), graphiteLogger, DESCRIPTOR.getBaseQueueName()); + metricSender.sendMetric(getServer(), metric); + } + if (metric.name.equals(MetricsEnum.SKIPED_TESTS.name())) { + metricSender = new SkipTestsMetric(build, listener.getLogger(), graphiteLogger, DESCRIPTOR.getBaseQueueName()); + metricSender.sendMetric(getServer(), metric); + } + if (metric.name.equals(MetricsEnum.TOTAL_TESTS.name())) { + metricSender = new TotalTestsMetric(build, listener.getLogger(), graphiteLogger, DESCRIPTOR.getBaseQueueName()); + metricSender.sendMetric(getServer(), metric); + } + } + } + if (isCoberturaListInitialized(coberturaMetrics)) { + metricSender = new CoberturaCodeCoverageMetric(build, listener.getLogger(), graphiteLogger, DESCRIPTOR.getBaseQueueName()); + metricSender.sendMetric(getServer(), coberturaMetrics.toArray(new Metric[coberturaMetrics.size()])); + } + + return true; + } + + /** + * @param coberturaMetrics + * @return + */ + private boolean isCoberturaListInitialized(List coberturaMetrics) { + return coberturaMetrics != null; + } + + /** + * @param metric + * @return + */ + private boolean isCoberturaMetric(Metric metric) { + return (// metric.name.equals(MetricsEnum.COBERTURA_PACKAGE_BRANCH_COVERAGE.name()) + // || + // metric.name.equals(MetricsEnum.COBERTURA_PACKAGE_LINE_COVERAGE.name()) + // || + metric.name.equals(MetricsEnum.COBERTURA_TOTAL_BRANCH_COVERAGE.name()) || metric.name.equals(MetricsEnum.COBERTURA_TOTAL_LINE_COVERAGE.name()) + + ); + } } diff --git a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/Metric.java b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/Metric.java index 4ef8dd7..f9bcb43 100644 --- a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/Metric.java +++ b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/Metric.java @@ -4,6 +4,7 @@ */ package org.jenkinsci.plugins.graphiteIntegrator; + /** * * @author joachimrodrigues @@ -41,4 +42,8 @@ public void setQueueName(String queueName) { this.queueName = queueName; } + public String getFullQueueAndName(){ + return queueName.concat(".").concat(name); + } + } diff --git a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/Server.java b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/Server.java index 0a6d5c1..bf3a3c0 100644 --- a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/Server.java +++ b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/Server.java @@ -5,30 +5,28 @@ package org.jenkinsci.plugins.graphiteIntegrator; /** - * + * * @author joachimrodrigues */ public class Server { - String ip; - + String port; - + String description; - + String protocol; - public String getProtocol() { - return protocol; - } + return protocol; + } - public void setProtocol(String protocol) { - this.protocol = protocol; - } + public void setProtocol(String protocol) { + this.protocol = protocol; + } - public String getIp() { + public String getIp() { return ip; } @@ -51,7 +49,5 @@ public void setPort(String port) { public void setDescription(String description) { this.description = description; } - - -} +} diff --git a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/loggers/GraphiteLogger.java b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/loggers/GraphiteLogger.java index f17deb0..f36112f 100644 --- a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/loggers/GraphiteLogger.java +++ b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/loggers/GraphiteLogger.java @@ -70,7 +70,7 @@ private void logToGraphiteTCP(String graphiteHost, String graphitePort, String q Socket conn = new Socket(graphiteHost, Integer.parseInt(graphitePort)); DataOutputStream dos = new DataOutputStream(conn.getOutputStream()); - String data = queue + " " + metric + "\n"; + String data = queue + " " + metric + " " + (System.currentTimeMillis()/1000) + "\n"; dos.writeBytes(data); conn.close(); } diff --git a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/AbstractMetric.java b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/AbstractMetric.java index eed2238..2acb1a7 100644 --- a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/AbstractMetric.java +++ b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/AbstractMetric.java @@ -1,12 +1,16 @@ package org.jenkinsci.plugins.graphiteIntegrator.metrics; import hudson.model.AbstractBuild; + import java.io.IOException; import java.io.PrintStream; import java.net.UnknownHostException; + +import org.apache.commons.lang.StringUtils; import org.jenkinsci.plugins.graphiteIntegrator.loggers.GraphiteLogger; import org.jenkinsci.plugins.graphiteIntegrator.Metric; import org.jenkinsci.plugins.graphiteIntegrator.Server; + import utils.GraphiteValidator; /** @@ -19,6 +23,7 @@ public abstract class AbstractMetric { protected final AbstractBuild build; protected final PrintStream logger; protected final GraphiteLogger graphiteLogger; + protected final String baseQueueName; /** * @@ -26,10 +31,11 @@ public abstract class AbstractMetric { * @param logger * @param graphiteLogger */ - public AbstractMetric(AbstractBuild build, PrintStream logger, GraphiteLogger graphiteLogger) { + public AbstractMetric(AbstractBuild build, PrintStream logger, GraphiteLogger graphiteLogger, String baseQueueName) { this.build = build; this.logger = logger; this.graphiteLogger = graphiteLogger; + this.baseQueueName = baseQueueName; } /** @@ -41,27 +47,37 @@ public AbstractMetric(AbstractBuild build, PrintStream logger, GraphiteLog */ protected void sendMetric(Server server, Metric metric, String value) throws UnknownHostException, IOException { - logger.println("Trying sending to server : " + server.getIp() + ":" + server.getPort() + " On queue : " + logger.println("Trying to send metric to Graphite server : " + server.getIp() + ":" + server.getPort() + ", Metric name: " + metric.getName() + " On queue : " + metric.getQueueName() + " With value : " + value); if (server.getProtocol().equals("UDP")) { - logger.println("Metric " + value + " correctly sended to " + server.getIp() + ":" + server.getPort() + if (validator.isListening(server.getIp(), Integer.parseInt(server.getPort()))) { + graphiteLogger.logToGraphite(server.getIp(), server.getPort(), getCheckedBaseQueueName() + metric.getFullQueueAndName(), value.trim(), server.getProtocol()); + logger.println("Metric: " + metric.getName() + " with value: "+ value + " correctly sent to " + server.getIp() + ":" + server.getPort() + " on " + metric.getQueueName() + "using UDP"); - graphiteLogger.logToGraphite(server.getIp(), server.getPort(), metric.getQueueName(), value.trim(), server.getProtocol()); + } } else if (server.getProtocol().equals("TCP")) { if (validator.isListening(server.getIp(), Integer.parseInt(server.getPort()))) { - graphiteLogger.logToGraphite(server.getIp(), server.getPort(), metric.getQueueName(), value.trim(), server.getProtocol()); - - logger.println("Metric " + value + " correctly sended to " + server.getIp() + ":" + server.getIp() - + " on " + metric.getQueueName()); - + graphiteLogger.logToGraphite(server.getIp(), server.getPort(), getCheckedBaseQueueName() + metric.getFullQueueAndName(), value.trim(), server.getProtocol()); + logger.println("Metric: " + metric.getName() + " with value: "+ value + " correctly sent to " + server.getIp() + ":" + server.getPort() + + " on " + metric.getQueueName()); } else { - logger.println("Metric " + value + " failed when sended to " + server.getIp() + ":" + server.getIp() - + " on " + metric.getQueueName()); - + logger.println("Metric: " + metric.getName() + " with value: "+ value + " failed when sent to " + server.getIp() + ":" + server.getPort() + + " on " + metric.getQueueName()); } } } + + /** + * Check if base queuename is null or whitespace and return empty, otherwise return the base queue name with a full stop appended + * @return + */ + protected String getCheckedBaseQueueName(){ + if(StringUtils.isBlank(baseQueueName)){ + return ""; + } + return baseQueueName.concat("."); + } /** * diff --git a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/BuildDurationMetric.java b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/BuildDurationMetric.java index 942d31e..702ade3 100644 --- a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/BuildDurationMetric.java +++ b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/BuildDurationMetric.java @@ -1,45 +1,45 @@ -/* - * To change this template, choose Tools | Templates and open the template in the editor. - */ -package org.jenkinsci.plugins.graphiteIntegrator.metrics; - -import hudson.model.AbstractBuild; -import java.io.IOException; -import java.io.PrintStream; -import java.net.UnknownHostException; -import org.jenkinsci.plugins.graphiteIntegrator.loggers.GraphiteLogger; -import org.jenkinsci.plugins.graphiteIntegrator.Metric; -import org.jenkinsci.plugins.graphiteIntegrator.Server; - -/** - * - * @author joachimrodrigues - */ -public class BuildDurationMetric extends AbstractMetric { - - /** - * - * @param build - * @param logger - * @param graphiteLogger - */ - public BuildDurationMetric(AbstractBuild build, PrintStream logger, GraphiteLogger graphiteLogger) { - super(build, logger, graphiteLogger); - } - - /** - * - * @param server - * @param metric - * @throws UnknownHostException - * @throws IOException - */ - @Override - public void sendMetric(Server server, Metric... metric) throws UnknownHostException, IOException { - - String metricToSend = String.valueOf((new Long(build.getDuration()).intValue() / 1000)); - - sendMetric(server, metric[0], metricToSend); - } - -} +/* + * To change this template, choose Tools | Templates and open the template in the editor. + */ +package org.jenkinsci.plugins.graphiteIntegrator.metrics; + +import hudson.model.AbstractBuild; +import java.io.IOException; +import java.io.PrintStream; +import java.net.UnknownHostException; +import org.jenkinsci.plugins.graphiteIntegrator.loggers.GraphiteLogger; +import org.jenkinsci.plugins.graphiteIntegrator.Metric; +import org.jenkinsci.plugins.graphiteIntegrator.Server; + +/** + * + * @author joachimrodrigues + */ +public class BuildDurationMetric extends AbstractMetric { + + /** + * + * @param build + * @param logger + * @param graphiteLogger + */ + public BuildDurationMetric(AbstractBuild build, PrintStream logger, GraphiteLogger graphiteLogger, String baseQueueName) { + super(build, logger, graphiteLogger, baseQueueName); + } + + /** + * + * @param server + * @param metric + * @throws UnknownHostException + * @throws IOException + */ + @Override + public void sendMetric(Server server, Metric... metric) throws UnknownHostException, IOException { + + String metricToSend = String.valueOf((new Long(build.getDuration()).intValue() / 1000)); + + sendMetric(server, metric[0], metricToSend); + } + +} diff --git a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/BuildFailedMetric.java b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/BuildFailedMetric.java index 78b6553..dc20898 100644 --- a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/BuildFailedMetric.java +++ b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/BuildFailedMetric.java @@ -23,8 +23,8 @@ public class BuildFailedMetric extends AbstractMetric { * @param logger * @param graphiteLogger */ - public BuildFailedMetric(AbstractBuild build, PrintStream logger, GraphiteLogger graphiteLogger) { - super(build, logger, graphiteLogger); + public BuildFailedMetric(AbstractBuild build, PrintStream logger, GraphiteLogger graphiteLogger, String baseQueueName) { + super(build, logger, graphiteLogger, baseQueueName); } /** diff --git a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/BuildSuccessfulMetric.java b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/BuildSuccessfulMetric.java index 4ded52d..cbbd7e0 100644 --- a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/BuildSuccessfulMetric.java +++ b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/BuildSuccessfulMetric.java @@ -23,8 +23,8 @@ public class BuildSuccessfulMetric extends AbstractMetric { * @param logger * @param graphiteLogger */ - public BuildSuccessfulMetric(AbstractBuild build, PrintStream logger, GraphiteLogger graphiteLogger) { - super(build, logger, graphiteLogger); + public BuildSuccessfulMetric(AbstractBuild build, PrintStream logger, GraphiteLogger graphiteLogger, String baseQueueName) { + super(build, logger, graphiteLogger, baseQueueName); } /** @@ -36,13 +36,13 @@ public BuildSuccessfulMetric(AbstractBuild build, PrintStream logger, Grap */ @Override public void sendMetric(Server server, Metric... metric) throws UnknownHostException, IOException { - - if(build.getResult() == Result.SUCCESS){ - String metricToSend = String.valueOf(1); - sendMetric(server, metric[0], metricToSend); - } - - - } - - } \ No newline at end of file + + if(build.getResult().isCompleteBuild() && build.getResult() == Result.SUCCESS){ + String metricToSend = String.valueOf(1); + sendMetric(server, metric[0], metricToSend); + } + + + } + +} diff --git a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/CoberturaCodeCoverageMetric.java b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/CoberturaCodeCoverageMetric.java index 0c6e3f0..f946661 100644 --- a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/CoberturaCodeCoverageMetric.java +++ b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/CoberturaCodeCoverageMetric.java @@ -1,114 +1,118 @@ -/* - * To change this template, choose Tools | Templates and open the template in the editor. - */ -package org.jenkinsci.plugins.graphiteIntegrator.metrics; - -import hudson.model.AbstractBuild; -import java.io.File; -import java.io.IOException; -import java.io.PrintStream; -import java.math.BigDecimal; -import java.net.UnknownHostException; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import net.sourceforge.cobertura.check.PackageCoverage; -import net.sourceforge.cobertura.coveragedata.ClassData; -import net.sourceforge.cobertura.coveragedata.CoverageDataFileHandler; -import net.sourceforge.cobertura.coveragedata.ProjectData; -import org.jenkinsci.plugins.graphiteIntegrator.loggers.GraphiteLogger; -import org.jenkinsci.plugins.graphiteIntegrator.Metric; -import org.jenkinsci.plugins.graphiteIntegrator.Server; -import utils.MetricsEnum; - -/** - * - * @author joachimrodrigues - */ -public class CoberturaCodeCoverageMetric extends AbstractMetric { - - /** - * - * @param build - * @param logger - * @param graphiteLogger - */ - public CoberturaCodeCoverageMetric(AbstractBuild build, PrintStream logger, GraphiteLogger graphiteLogger) { - super(build, logger, graphiteLogger); - } - - @Override - public void sendMetric(Server server, Metric... metrics) throws UnknownHostException, IOException { - - File dataFile = new File(build.getWorkspace() + "/target/cobertura/cobertura.ser"); - - ProjectData projectData = CoverageDataFileHandler.loadCoverageData(dataFile); - - if (projectData == null) { - logger.print("Error: Unable to read from data file " + dataFile.getAbsolutePath()); - } - - double totalLines = 0; - double totalLinesCovered = 0; - double totalBranches = 0; - double totalBranchesCovered = 0; - - Iterator iter = projectData.getClasses().iterator(); - while (iter.hasNext()) { - ClassData classData = (ClassData) iter.next(); - - totalBranches += classData.getNumberOfValidBranches(); - totalBranchesCovered += classData.getNumberOfCoveredBranches(); - - totalLines += classData.getNumberOfValidLines(); - totalLinesCovered += classData.getNumberOfCoveredLines(); - - // for next release : - // PackageCoverage packageCoverage = getPackageCoverage(classData.getPackageName()); - // packageCoverage.addBranchCount(classData.getNumberOfValidBranches()); - // packageCoverage.addBranchCoverage(classData.getNumberOfCoveredBranches()); - // - // packageCoverage.addLineCount(classData.getNumberOfValidLines()); - // packageCoverage.addLineCoverage(classData.getNumberOfCoveredLines()); - // - // + percentage(classData.getLineCoverageRate()) + "%, branch coverage rate: " - // + percentage(classData.getBranchCoverageRate()) + "%"); - - } - - for (int i = 0; i < metrics.length; i++) { - if (metrics[i].getName().equals(MetricsEnum.COBERTURA_TOTAL_LINE_COVERAGE.name())) { - sendMetric(server, metrics[i], percentage(totalLinesCovered / totalLines)); - } - if (metrics[i].getName().equals(MetricsEnum.COBERTURA_TOTAL_BRANCH_COVERAGE.name())) { - sendMetric(server, metrics[i], percentage(totalBranchesCovered / totalBranches)); - } - } - - } - - Map packageCoverageMap = new HashMap(); - - /** - * @param packageName - * @return - */ - private PackageCoverage getPackageCoverage(String packageName) { - PackageCoverage packageCoverage = packageCoverageMap.get(packageName); - if (packageCoverage == null) { - packageCoverage = new PackageCoverage(); - packageCoverageMap.put(packageName, packageCoverage); - } - return packageCoverage; - } - - /** - * @param coverateRate - * @return - */ - private String percentage(double coverateRate) { - BigDecimal decimal = new BigDecimal(coverateRate * 100); - return decimal.setScale(1, BigDecimal.ROUND_DOWN).toString(); - } - -} +/* + * To change this template, choose Tools | Templates and open the template in the editor. + */ +package org.jenkinsci.plugins.graphiteIntegrator.metrics; + +import hudson.model.AbstractBuild; + +import java.io.File; +import java.io.IOException; +import java.io.PrintStream; +import java.math.BigDecimal; +import java.net.UnknownHostException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import net.sourceforge.cobertura.check.PackageCoverage; +import net.sourceforge.cobertura.coveragedata.ClassData; +import net.sourceforge.cobertura.coveragedata.CoverageDataFileHandler; +import net.sourceforge.cobertura.coveragedata.ProjectData; + +import org.jenkinsci.plugins.graphiteIntegrator.loggers.GraphiteLogger; +import org.jenkinsci.plugins.graphiteIntegrator.Metric; +import org.jenkinsci.plugins.graphiteIntegrator.Server; + +import utils.MetricsEnum; + +/** + * + * @author joachimrodrigues + */ +public class CoberturaCodeCoverageMetric extends AbstractMetric { + + /** + * + * @param build + * @param logger + * @param graphiteLogger + */ + public CoberturaCodeCoverageMetric(AbstractBuild build, PrintStream logger, GraphiteLogger graphiteLogger, String baseQueueName) { + super(build, logger, graphiteLogger, baseQueueName); + } + + @Override + public void sendMetric(Server server, Metric... metrics) throws UnknownHostException, IOException { + + File dataFile = new File(build.getWorkspace() + "/target/cobertura/cobertura.ser"); + + ProjectData projectData = CoverageDataFileHandler.loadCoverageData(dataFile); + + if (projectData == null) { + logger.print("Error: Unable to read from data file " + dataFile.getAbsolutePath()); + } + + double totalLines = 0; + double totalLinesCovered = 0; + double totalBranches = 0; + double totalBranchesCovered = 0; + + Iterator iter = projectData.getClasses().iterator(); + while (iter.hasNext()) { + ClassData classData = (ClassData) iter.next(); + + totalBranches += classData.getNumberOfValidBranches(); + totalBranchesCovered += classData.getNumberOfCoveredBranches(); + + totalLines += classData.getNumberOfValidLines(); + totalLinesCovered += classData.getNumberOfCoveredLines(); + + // for next release : + // PackageCoverage packageCoverage = getPackageCoverage(classData.getPackageName()); + // packageCoverage.addBranchCount(classData.getNumberOfValidBranches()); + // packageCoverage.addBranchCoverage(classData.getNumberOfCoveredBranches()); + // + // packageCoverage.addLineCount(classData.getNumberOfValidLines()); + // packageCoverage.addLineCoverage(classData.getNumberOfCoveredLines()); + // + // + percentage(classData.getLineCoverageRate()) + "%, branch coverage rate: " + // + percentage(classData.getBranchCoverageRate()) + "%"); + + } + + for (int i = 0; i < metrics.length; i++) { + if (metrics[i].getName().equals(MetricsEnum.COBERTURA_TOTAL_LINE_COVERAGE.name())) { + sendMetric(server, metrics[i], percentage(totalLinesCovered / totalLines)); + } + if (metrics[i].getName().equals(MetricsEnum.COBERTURA_TOTAL_BRANCH_COVERAGE.name())) { + sendMetric(server, metrics[i], percentage(totalBranchesCovered / totalBranches)); + } + } + + } + + Map packageCoverageMap = new HashMap(); + + /** + * @param packageName + * @return + */ + private PackageCoverage getPackageCoverage(String packageName) { + PackageCoverage packageCoverage = packageCoverageMap.get(packageName); + if (packageCoverage == null) { + packageCoverage = new PackageCoverage(); + packageCoverageMap.put(packageName, packageCoverage); + } + return packageCoverage; + } + + /** + * @param coverateRate + * @return + */ + private String percentage(double coverateRate) { + BigDecimal decimal = new BigDecimal(coverateRate * 100); + return decimal.setScale(1, BigDecimal.ROUND_DOWN).toString(); + } + +} diff --git a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/FailTestsMetric.java b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/FailTestsMetric.java index 469cab8..8dd3768 100644 --- a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/FailTestsMetric.java +++ b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/FailTestsMetric.java @@ -1,44 +1,51 @@ -/* - * To change this template, choose Tools | Templates and open the template in the editor. - */ -package org.jenkinsci.plugins.graphiteIntegrator.metrics; - -import hudson.model.AbstractBuild; -import java.io.IOException; -import java.io.PrintStream; -import java.net.UnknownHostException; -import org.jenkinsci.plugins.graphiteIntegrator.loggers.GraphiteLogger; -import org.jenkinsci.plugins.graphiteIntegrator.Metric; -import org.jenkinsci.plugins.graphiteIntegrator.Server; - -/** - * - * @author joachimrodrigues - */ -public class FailTestsMetric extends AbstractMetric { - - /** - * - * @param build - * @param logger - * @param graphiteLogger - */ - public FailTestsMetric(AbstractBuild build, PrintStream logger, GraphiteLogger graphiteLogger) { - super(build, logger, graphiteLogger); - } - - /** - * - * @param server - * @param metric - * @throws UnknownHostException - * @throws IOException - */ - @Override - public void sendMetric(Server server, Metric... metric) throws UnknownHostException, IOException { - - String metricToSend = Integer.toString(build.getTestResultAction().getFailCount()); - - sendMetric(server, metric[0], metricToSend); - } -} +/* + * To change this template, choose Tools | Templates and open the template in the editor. + */ +package org.jenkinsci.plugins.graphiteIntegrator.metrics; + +import hudson.model.AbstractBuild; +import hudson.tasks.test.AbstractTestResultAction; + +import java.io.IOException; +import java.io.PrintStream; +import java.net.UnknownHostException; + +import org.jenkinsci.plugins.graphiteIntegrator.Metric; +import org.jenkinsci.plugins.graphiteIntegrator.Server; +import org.jenkinsci.plugins.graphiteIntegrator.loggers.GraphiteLogger; + +/** + * + * @author joachimrodrigues + */ +public class FailTestsMetric extends AbstractMetric { + + /** + * + * @param build + * @param logger + * @param graphiteLogger + */ + public FailTestsMetric(AbstractBuild build, PrintStream logger, GraphiteLogger graphiteLogger, String baseQueueName) { + super(build, logger, graphiteLogger, baseQueueName); + } + + /** + * + * @param server + * @param metric + * @throws UnknownHostException + * @throws IOException + */ + @Override + public void sendMetric(Server server, Metric... metric) throws UnknownHostException, IOException { + final AbstractTestResultAction testResult = build.getAction(AbstractTestResultAction.class); + + if (testResult != null) { + final String metricToSend = Integer.toString(testResult.getFailCount()); + + sendMetric(server, metric[0], metricToSend); + } + } + +} diff --git a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/SkipTestsMetric.java b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/SkipTestsMetric.java index 18c50aa..9bb6618 100644 --- a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/SkipTestsMetric.java +++ b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/SkipTestsMetric.java @@ -1,44 +1,50 @@ -/* - * To change this template, choose Tools | Templates and open the template in the editor. - */ -package org.jenkinsci.plugins.graphiteIntegrator.metrics; - -import hudson.model.AbstractBuild; -import java.io.IOException; -import java.io.PrintStream; -import java.net.UnknownHostException; -import org.jenkinsci.plugins.graphiteIntegrator.loggers.GraphiteLogger; -import org.jenkinsci.plugins.graphiteIntegrator.Metric; -import org.jenkinsci.plugins.graphiteIntegrator.Server; - -/** - * - * @author joachimrodrigues - */ -public class SkipTestsMetric extends AbstractMetric { - - /** - * - * @param build - * @param logger - * @param graphiteLogger - */ - public SkipTestsMetric(AbstractBuild build, PrintStream logger, GraphiteLogger graphiteLogger) { - super(build, logger, graphiteLogger); - } - - /** - * - * @param server - * @param metric - * @throws UnknownHostException - * @throws IOException - */ - @Override - public void sendMetric(Server server, Metric... metric) throws UnknownHostException, IOException { - - String metricToSend = Integer.toString(build.getTestResultAction().getSkipCount()); - - sendMetric(server, metric[0], metricToSend); - } -} +/* + * To change this template, choose Tools | Templates and open the template in the editor. + */ +package org.jenkinsci.plugins.graphiteIntegrator.metrics; + +import hudson.model.AbstractBuild; +import hudson.tasks.test.AbstractTestResultAction; + +import java.io.IOException; +import java.io.PrintStream; +import java.net.UnknownHostException; + +import org.jenkinsci.plugins.graphiteIntegrator.Metric; +import org.jenkinsci.plugins.graphiteIntegrator.Server; +import org.jenkinsci.plugins.graphiteIntegrator.loggers.GraphiteLogger; + +/** + * + * @author joachimrodrigues + */ +public class SkipTestsMetric extends AbstractMetric { + + /** + * + * @param build + * @param logger + * @param graphiteLogger + */ + public SkipTestsMetric(AbstractBuild build, PrintStream logger, GraphiteLogger graphiteLogger, String baseQueueName) { + super(build, logger, graphiteLogger, baseQueueName); + } + + /** + * + * @param server + * @param metric + * @throws UnknownHostException + * @throws IOException + */ + @Override + public void sendMetric(Server server, Metric... metric) throws UnknownHostException, IOException { + final AbstractTestResultAction testResult = build.getAction(AbstractTestResultAction.class); + + if (testResult != null) { + final String metricToSend = Integer.toString(testResult.getSkipCount()); + + sendMetric(server, metric[0], metricToSend); + } + } +} diff --git a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/TotalTestsMetric.java b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/TotalTestsMetric.java index e547f46..c307e70 100644 --- a/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/TotalTestsMetric.java +++ b/src/main/java/org/jenkinsci/plugins/graphiteIntegrator/metrics/TotalTestsMetric.java @@ -1,44 +1,50 @@ -/* - * To change this template, choose Tools | Templates and open the template in the editor. - */ -package org.jenkinsci.plugins.graphiteIntegrator.metrics; - -import hudson.model.AbstractBuild; -import java.io.IOException; -import java.io.PrintStream; -import java.net.UnknownHostException; -import org.jenkinsci.plugins.graphiteIntegrator.loggers.GraphiteLogger; -import org.jenkinsci.plugins.graphiteIntegrator.Metric; -import org.jenkinsci.plugins.graphiteIntegrator.Server; - -/** - * - * @author joachimrodrigues - */ -public class TotalTestsMetric extends AbstractMetric { - - /** - * - * @param build - * @param logger - * @param graphiteLogger - */ - public TotalTestsMetric(AbstractBuild build, PrintStream logger, GraphiteLogger graphiteLogger) { - super(build, logger, graphiteLogger); - } - - /** - * - * @param server - * @param metric - * @throws UnknownHostException - * @throws IOException - */ - @Override - public void sendMetric(Server server, Metric... metric) throws UnknownHostException, IOException { - - String metricToSend = Integer.toString(build.getTestResultAction().getTotalCount()); - - sendMetric(server, metric[0], metricToSend); - } -} +/* + * To change this template, choose Tools | Templates and open the template in the editor. + */ +package org.jenkinsci.plugins.graphiteIntegrator.metrics; + +import hudson.model.AbstractBuild; +import hudson.tasks.test.AbstractTestResultAction; + +import java.io.IOException; +import java.io.PrintStream; +import java.net.UnknownHostException; + +import org.jenkinsci.plugins.graphiteIntegrator.Metric; +import org.jenkinsci.plugins.graphiteIntegrator.Server; +import org.jenkinsci.plugins.graphiteIntegrator.loggers.GraphiteLogger; + +/** + * + * @author joachimrodrigues + */ +public class TotalTestsMetric extends AbstractMetric { + + /** + * + * @param build + * @param logger + * @param graphiteLogger + */ + public TotalTestsMetric(AbstractBuild build, PrintStream logger, GraphiteLogger graphiteLogger, String baseQueueName) { + super(build, logger, graphiteLogger, baseQueueName); + } + + /** + * + * @param server + * @param metric + * @throws UnknownHostException + * @throws IOException + */ + @Override + public void sendMetric(Server server, Metric... metric) throws UnknownHostException, IOException { + final AbstractTestResultAction testResult = build.getAction(AbstractTestResultAction.class); + + if (testResult != null) { + final String metricToSend = Integer.toString(testResult.getTotalCount()); + + sendMetric(server, metric[0], metricToSend); + } + } +} diff --git a/src/main/java/utils/GraphiteValidator.java b/src/main/java/utils/GraphiteValidator.java index 8addbcf..573d505 100644 --- a/src/main/java/utils/GraphiteValidator.java +++ b/src/main/java/utils/GraphiteValidator.java @@ -6,6 +6,8 @@ import java.net.Socket; import java.util.regex.Pattern; +import org.apache.commons.lang.StringUtils; + /** * * @author joachimrodrigues @@ -91,5 +93,21 @@ public boolean isDescriptionTooLong(String description) { } return false; } + + /** + * + * @param baseQueueName + * @return + */ + public boolean isBaseQueueNamePresent(String baseQueueName) { + return StringUtils.isNotBlank(baseQueueName); + } + + public boolean validateBaseQueueName(String value) { + if(value.endsWith(".")){ + return false; + } + return true; + } } diff --git a/src/main/resources/index.jelly b/src/main/resources/index.jelly index 6323c59..c19f9a5 100644 --- a/src/main/resources/index.jelly +++ b/src/main/resources/index.jelly @@ -1,3 +1,4 @@ +
This plugin allows you to send these metrics : number of tests, tests skipped, tests failed, build duration, cobertura total line coverage and cobertura total branch coverage to one or more graphite servers. diff --git a/src/main/resources/org/jenkinsci/plugins/graphiteIntegrator/GraphitePublisher/config.jelly b/src/main/resources/org/jenkinsci/plugins/graphiteIntegrator/GraphitePublisher/config.jelly index fa660c0..c2534b3 100644 --- a/src/main/resources/org/jenkinsci/plugins/graphiteIntegrator/GraphitePublisher/config.jelly +++ b/src/main/resources/org/jenkinsci/plugins/graphiteIntegrator/GraphitePublisher/config.jelly @@ -1,3 +1,4 @@ + diff --git a/src/main/resources/org/jenkinsci/plugins/graphiteIntegrator/GraphitePublisher/global.jelly b/src/main/resources/org/jenkinsci/plugins/graphiteIntegrator/GraphitePublisher/global.jelly index 51f8871..4537f25 100644 --- a/src/main/resources/org/jenkinsci/plugins/graphiteIntegrator/GraphitePublisher/global.jelly +++ b/src/main/resources/org/jenkinsci/plugins/graphiteIntegrator/GraphitePublisher/global.jelly @@ -1,3 +1,4 @@ + @@ -30,9 +31,9 @@ + + + + + + \ No newline at end of file diff --git a/src/main/resources/org/jenkinsci/plugins/graphiteIntegrator/GraphitePublisher/global.properties b/src/main/resources/org/jenkinsci/plugins/graphiteIntegrator/GraphitePublisher/global.properties index 287cfb8..148de88 100644 --- a/src/main/resources/org/jenkinsci/plugins/graphiteIntegrator/GraphitePublisher/global.properties +++ b/src/main/resources/org/jenkinsci/plugins/graphiteIntegrator/GraphitePublisher/global.properties @@ -8,4 +8,5 @@ test_graphite_server_connection=Test connection testing_graphite_server_connection=Testing connection... delete_current_server=delete this server --> delete_current_graphite_server_button=delete me -graphite_servers_adding_protocol=Network protocol \ No newline at end of file +graphite_servers_adding_protocol=Network protocol +base_graphite_queue_name=Base Graphite Queue Name : diff --git a/src/main/webapp/help/global/graphite_base_queue_name.html b/src/main/webapp/help/global/graphite_base_queue_name.html new file mode 100644 index 0000000..2543990 --- /dev/null +++ b/src/main/webapp/help/global/graphite_base_queue_name.html @@ -0,0 +1,5 @@ +Set the base queue name. This will appear at the beginning of every job's queue. +It's a convenient way to set a default base section of the queue without repeating it in every job. + +i.e.: +jenkins.team4.server1.builds