added ActiveMQ style uptime at shutdown
This commit is contained in:
parent
1d91680a6d
commit
3ef184aba5
|
@ -86,8 +86,8 @@ public interface ActiveMQServerLogger extends BasicLogger {
|
||||||
void serverStarted(String fullVersion, SimpleString nodeId, String identity);
|
void serverStarted(String fullVersion, SimpleString nodeId, String identity);
|
||||||
|
|
||||||
@LogMessage(level = Logger.Level.INFO)
|
@LogMessage(level = Logger.Level.INFO)
|
||||||
@Message(id = 221002, value = "Apache ActiveMQ Artemis Message Broker version {0} [{1}] stopped", format = Message.Format.MESSAGE_FORMAT)
|
@Message(id = 221002, value = "Apache ActiveMQ Artemis Message Broker version {0} [{1}] stopped, uptime {2}", format = Message.Format.MESSAGE_FORMAT)
|
||||||
void serverStopped(String version, SimpleString nodeId);
|
void serverStopped(String version, SimpleString nodeId, String uptime);
|
||||||
|
|
||||||
@LogMessage(level = Logger.Level.INFO)
|
@LogMessage(level = Logger.Level.INFO)
|
||||||
@Message(id = 221003, value = "Trying to deploy queue {0}", format = Message.Format.MESSAGE_FORMAT)
|
@Message(id = 221003, value = "Trying to deploy queue {0}", format = Message.Format.MESSAGE_FORMAT)
|
||||||
|
|
|
@ -26,6 +26,7 @@ import java.lang.management.ManagementFactory;
|
||||||
import java.security.AccessController;
|
import java.security.AccessController;
|
||||||
import java.security.PrivilegedAction;
|
import java.security.PrivilegedAction;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
@ -133,6 +134,7 @@ import org.apache.activemq.artemis.utils.ExecutorFactory;
|
||||||
import org.apache.activemq.artemis.utils.OrderedExecutorFactory;
|
import org.apache.activemq.artemis.utils.OrderedExecutorFactory;
|
||||||
import org.apache.activemq.artemis.utils.ReusableLatch;
|
import org.apache.activemq.artemis.utils.ReusableLatch;
|
||||||
import org.apache.activemq.artemis.utils.SecurityFormatter;
|
import org.apache.activemq.artemis.utils.SecurityFormatter;
|
||||||
|
import org.apache.activemq.artemis.utils.TimeUtils;
|
||||||
import org.apache.activemq.artemis.utils.VersionLoader;
|
import org.apache.activemq.artemis.utils.VersionLoader;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -266,6 +268,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
|
||||||
|
|
||||||
private ServiceRegistry serviceRegistry;
|
private ServiceRegistry serviceRegistry;
|
||||||
|
|
||||||
|
private Date startDate;
|
||||||
// Constructors
|
// Constructors
|
||||||
// ---------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -369,6 +372,8 @@ public class ActiveMQServerImpl implements ActiveMQServer {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
startDate = new Date();
|
||||||
|
|
||||||
state = SERVER_STATE.STARTING;
|
state = SERVER_STATE.STARTING;
|
||||||
|
|
||||||
if (haPolicy == null) {
|
if (haPolicy == null) {
|
||||||
|
@ -771,10 +776,10 @@ public class ActiveMQServerImpl implements ActiveMQServer {
|
||||||
scaledDownNodeIDs.clear();
|
scaledDownNodeIDs.clear();
|
||||||
|
|
||||||
if (identity != null) {
|
if (identity != null) {
|
||||||
ActiveMQServerLogger.LOGGER.serverStopped("identity=" + identity + ",version=" + getVersion().getFullVersion(), tempNodeID);
|
ActiveMQServerLogger.LOGGER.serverStopped("identity=" + identity + ",version=" + getVersion().getFullVersion(), tempNodeID, getUptime());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ActiveMQServerLogger.LOGGER.serverStopped(getVersion().getFullVersion(), tempNodeID);
|
ActiveMQServerLogger.LOGGER.serverStopped(getVersion().getFullVersion(), tempNodeID, getUptime());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2075,4 +2080,22 @@ public class ActiveMQServerImpl implements ActiveMQServer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getUptime() {
|
||||||
|
long delta = getUptimeMillis();
|
||||||
|
|
||||||
|
if (delta == 0) {
|
||||||
|
return "not started";
|
||||||
|
}
|
||||||
|
|
||||||
|
return TimeUtils.printDuration(delta);
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getUptimeMillis() {
|
||||||
|
if (startDate == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Date().getTime() - startDate.getTime();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,77 @@
|
||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
* <p>
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* <p>
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.activemq.artemis.utils;
|
||||||
|
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
import java.text.DecimalFormatSymbols;
|
||||||
|
import java.text.NumberFormat;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Time utils.
|
||||||
|
*
|
||||||
|
* @version
|
||||||
|
*/
|
||||||
|
public final class TimeUtils {
|
||||||
|
|
||||||
|
private TimeUtils() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prints the duration in a human readable format as X days Y hours Z minutes etc.
|
||||||
|
*
|
||||||
|
* @param uptime the uptime in millis
|
||||||
|
* @return the time used for displaying on screen or in logs
|
||||||
|
*/
|
||||||
|
public static String printDuration(double uptime) {
|
||||||
|
// Code taken from Karaf
|
||||||
|
// https://svn.apache.org/repos/asf/karaf/trunk/shell/commands/src/main/java/org/apache/karaf/shell/commands/impl/InfoAction.java
|
||||||
|
|
||||||
|
NumberFormat fmtI = new DecimalFormat("###,###", new DecimalFormatSymbols(Locale.ENGLISH));
|
||||||
|
NumberFormat fmtD = new DecimalFormat("###,##0.000", new DecimalFormatSymbols(Locale.ENGLISH));
|
||||||
|
|
||||||
|
uptime /= 1000;
|
||||||
|
if (uptime < 60) {
|
||||||
|
return fmtD.format(uptime) + " seconds";
|
||||||
|
}
|
||||||
|
uptime /= 60;
|
||||||
|
if (uptime < 60) {
|
||||||
|
long minutes = (long) uptime;
|
||||||
|
String s = fmtI.format(minutes) + (minutes > 1 ? " minutes" : " minute");
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
uptime /= 60;
|
||||||
|
if (uptime < 24) {
|
||||||
|
long hours = (long) uptime;
|
||||||
|
long minutes = (long) ((uptime - hours) * 60);
|
||||||
|
String s = fmtI.format(hours) + (hours > 1 ? " hours" : " hour");
|
||||||
|
if (minutes != 0) {
|
||||||
|
s += " " + fmtI.format(minutes) + (minutes > 1 ? " minutes" : " minute");
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
uptime /= 24;
|
||||||
|
long days = (long) uptime;
|
||||||
|
long hours = (long) ((uptime - days) * 24);
|
||||||
|
String s = fmtI.format(days) + (days > 1 ? " days" : " day");
|
||||||
|
if (hours != 0) {
|
||||||
|
s += " " + fmtI.format(hours) + (hours > 1 ? " hours" : " hour");
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue