package com.rayo.server.jmx;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.NumberFormat;
import java.util.Locale;
import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedResource;
import com.rayo.server.admin.AdminService;
@ManagedResource(objectName="com.rayo:Type=Info", description="Application Information")
public class Info implements InfoMXBean {
private AdminService adminService;
private NumberFormat fmtI = new DecimalFormat("###,###", new DecimalFormatSymbols(Locale.ENGLISH));
private long startupTime;
public Info() {
this.startupTime = System.currentTimeMillis();
}
@Override
@ManagedAttribute(description="Build Number")
public long getBuildNumber() {
return adminService.getBuildNumber();
}
@Override
@ManagedAttribute(description="Version Number")
public String getVersionNumber() {
return adminService.getVersionNumber();
}
@Override
@ManagedAttribute(description="Build Id")
public String getBuildId() {
return adminService.getBuildId();
}
public void setAdminService(AdminService adminService) {
this.adminService = adminService;
}
public void applicationStarted() {
this.startupTime = System.currentTimeMillis();
}
@Override
@ManagedAttribute(description="Build Id")
public String getUptime() {
long uptime = System.currentTimeMillis() - startupTime;
return printDuration(uptime);
}
private String printDuration(long uptime) {
StringBuffer up = new StringBuffer();
uptime /= 1000;
long days = uptime / 60 / 60 / 24;
if (days > 0) {
up.append(fmtI.format(days) + "d ");
}
long hours = uptime / 60 / 60;
if (hours > 0) {
if (hours > 60) {
hours = hours % 60;
}
up.append(fmtI.format(hours) + "h ");
}
long minutes = uptime / 60 ;
if (minutes > 0) {
if (minutes > 60) {
minutes = minutes % 60;
}
up.append(fmtI.format(minutes) + "m ");
}
long seconds = uptime ;
if (seconds > 0) {
if (seconds > 60) {
seconds = seconds % 60;
}
up.append(fmtI.format(seconds) + "s ");
}
return up.toString();
}
}