package com.smartcodeltd.jenkinsci.plugins.buildmonitor.installation;
import com.smartcodeltd.jenkinsci.plugins.buildmonitor.facade.StaticJenkinsAPIs;
import static com.google.common.base.Charsets.UTF_8;
import static com.google.common.hash.Hashing.sha256;
public class BuildMonitorInstallation {
private static final String UNKNOWN = "unknown";
private String anonymousCorrelationId = UNKNOWN;
private final StaticJenkinsAPIs jenkins;
public BuildMonitorInstallation() {
this(new StaticJenkinsAPIs());
}
public BuildMonitorInstallation(StaticJenkinsAPIs jenkinsAPIs) {
this.jenkins = jenkinsAPIs;
}
/**
* Used to make sure that the anonymous Build Monitor stats are not double-counted,
* as in a typical setup there's one Jenkins, but multiple Build Monitors.
*/
public String anonymousCorrelationId() {
// we only need to calculate this once
if (UNKNOWN.equalsIgnoreCase(anonymousCorrelationId)) {
anonymousCorrelationId = sha256().hashString(jenkins.encodedPublicKey(), UTF_8).toString();
}
return anonymousCorrelationId;
}
public int size() {
// Jenkins caches this value already, no need to cache it again
return jenkins.numberOfUsers();
}
public Audience audience() {
return (jenkins.isDevelopmentMode() || buildMonitorVersion().contains("SNAPSHOT"))
? Audience.BuildMonitorDevelopers
: Audience.EndUsers;
}
private static final BuildMonitorBuildProperties buildProperties = new BuildMonitorBuildProperties("build-monitor.properties");
public String buildMonitorVersion() {
return buildProperties.get("version");
}
}