Get master hostname from master computer object.

Jenkins.getDisplayName() is useless and returns "Jenkins". Get the name
of the master via the Jenkins master computer object. Fall back on
doing a DNS name lookup otherwise.

Change-Id: Icee4e22e9ca989fd1faa6d27f4dad3be76da6385
This commit is contained in:
Clark Boylan 2014-01-28 16:51:09 -08:00
parent 7e2ca62e1c
commit df9ee54284
2 changed files with 30 additions and 7 deletions

View File

@ -38,7 +38,7 @@ public enum Phase {
STARTED, COMPLETED, FINISHED;
@SuppressWarnings({ "unchecked", "rawtypes" })
public String handlePhase(Run run, String status, TaskListener listener) {
public String handlePhase(Run run, String status, String masterName, TaskListener listener) {
Jenkins jenkins = Jenkins.getInstance();
HudsonNotificationProperty property = (HudsonNotificationProperty)
run.getParent().getProperty(HudsonNotificationProperty.class);
@ -47,7 +47,7 @@ public enum Phase {
jenkins.getDescriptor(HudsonNotificationProperty.class);
if ((property != null && property.isEnabled()) ||
(globalProperty != null && globalProperty.isGloballyEnabled())) {
return buildMessage(run.getParent(), run, status);
return buildMessage(run.getParent(), run, status, masterName);
}
return null;
}
@ -55,7 +55,7 @@ public enum Phase {
private Gson gson = new GsonBuilder().setFieldNamingPolicy(
FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();
private String buildMessage(Job job, Run run, String status) {
private String buildMessage(Job job, Run run, String status, String masterName) {
JobState jobState = new JobState();
jobState.setName(job.getName());
jobState.setUrl(job.getUrl());
@ -70,13 +70,15 @@ public enum Phase {
if (rootUrl != null) {
buildState.setFullUrl(rootUrl + run.getUrl());
}
if (masterName != null) {
buildState.setHostName(masterName);
}
Executor executor = run.getExecutor();
if (executor != null) {
Computer computer = executor.getOwner();
if (computer != null) {
buildState.setNodeName(computer.getName());
buildState.setHostName(jenkins.getDisplayName());
}
}

View File

@ -18,12 +18,16 @@
package org.jenkinsci.plugins.ZMQEventPublisher;
import hudson.Extension;
import hudson.model.Computer;
import hudson.model.Result;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.model.listeners.RunListener;
import hudson.util.DaemonThreadFactory;
import jenkins.model.Jenkins;
import java.net.InetAddress;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.logging.Level;
import java.util.logging.Logger;
@ -43,18 +47,35 @@ public class RunListenerImpl extends RunListener<Run> {
new DaemonThreadFactory();
private ZMQRunnable ZMQRunner;
private Thread thread;
private String masterName;
public RunListenerImpl() {
super(Run.class);
ZMQRunner = new ZMQRunnable(queue);
thread = threadFactory.newThread(ZMQRunner);
thread.start();
Computer master = null;
String hostname = null;
// query Jenkins for master's name
try {
master = Jenkins.getInstance().getComputer("");
if (master != null) {
hostname = master.getHostName();
}
else {
// master node may not be enabled so get masterName from system
hostname = java.net.InetAddress.getLocalHost().getHostName();
}
} catch (Exception e) {
}
masterName = hostname;
}
@Override
public void onCompleted(Run build, TaskListener listener) {
String event = "onCompleted";
String json = Phase.COMPLETED.handlePhase(build, getStatus(build), listener);
String json = Phase.COMPLETED.handlePhase(build, getStatus(build), masterName, listener);
sendEvent(event, json);
}
@ -70,14 +91,14 @@ public class RunListenerImpl extends RunListener<Run> {
@Override
public void onFinalized(Run build) {
String event = "onFinalized";
String json = Phase.FINISHED.handlePhase(build, getStatus(build), TaskListener.NULL);
String json = Phase.FINISHED.handlePhase(build, getStatus(build), masterName, TaskListener.NULL);
sendEvent(event, json);
}
@Override
public void onStarted(Run build, TaskListener listener) {
String event = "onStarted";
String json = Phase.STARTED.handlePhase(build, getStatus(build), listener);
String json = Phase.STARTED.handlePhase(build, getStatus(build), masterName, listener);
sendEvent(event, json);
}