001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.geronimo.console.jsr77;
018
019 import java.io.Serializable;
020 import java.text.NumberFormat;
021
022 /**
023 * @version $Rev: 476061 $ $Date: 2006-11-17 01:36:50 -0500 (Fri, 17 Nov 2006) $
024 */
025 public class DynamicServerInfo implements Serializable {
026 private final static long BYTES_MAX = 2048;
027 private final static long KB_MAX = BYTES_MAX * 1024l;
028 private final static long MB_MAX = KB_MAX * 1024l;
029 private final static long GB_MAX = MB_MAX * 1024l;
030 private final static long TB_MAX = GB_MAX * 1024l;
031 private final static double KB_DIV = 1024;
032 private final static double MB_DIV = KB_DIV*1024d;
033 private final static double GB_DIV = MB_DIV*1024d;
034 private final static double TB_DIV = GB_DIV*1024d;
035 private NumberFormat dec2Format;
036 private String memoryCurrent;
037 private String memoryMost;
038 private String memoryAllocated;
039 private String upTime;
040 private long bytesCurrent, bytesMost, bytesAllocated;
041
042 public DynamicServerInfo(long upTime) {
043 this.upTime = calculateTime(upTime);
044 memoryAllocated = memoryCurrent = memoryMost = "Unknown";
045 }
046
047 public DynamicServerInfo(long memoryCurrent, long memoryMost, long memoryAllocated, long upTime) {
048 dec2Format = NumberFormat.getNumberInstance();
049 dec2Format.setMaximumFractionDigits(2);
050 bytesCurrent = memoryCurrent;
051 bytesMost = memoryMost;
052 bytesAllocated = memoryAllocated;
053 this.memoryCurrent = calculateMemory(memoryCurrent);
054 this.memoryMost = calculateMemory(memoryMost);
055 this.memoryAllocated = calculateMemory(memoryAllocated);
056 this.upTime = calculateTime(upTime);
057 }
058
059 private String calculateMemory(long bytes) {
060 if(bytes < BYTES_MAX) {
061 return bytes+" B";
062 } else if(bytes < KB_MAX) {
063 return dec2Format.format((double)bytes/KB_DIV)+" kB";
064 } else if(bytes < MB_MAX) {
065 return dec2Format.format((double)bytes/MB_DIV)+" MB";
066 } else if(bytes < GB_MAX) {
067 return dec2Format.format((double)bytes/GB_DIV)+" GB";
068 } else if(bytes < TB_MAX) {
069 return dec2Format.format((double)bytes/TB_DIV)+" TB";
070 } else {
071 return "Out of range";
072 }
073 }
074
075 private String calculateTime(long millis) {
076 int secs = (int)(millis/1000L);
077 int days = secs/86400;
078 secs = secs % 86400;
079 int hours = secs/3600;
080 secs = secs % 3600;
081 int minutes = secs / 60;
082 secs = secs % 60;
083 StringBuffer buf = new StringBuffer();
084 if(days > 1) {
085 buf.append(' ').append(days).append(" days");
086 } else if(days > 0) {
087 buf.append(' ').append(days).append(" day");
088 }
089 if(hours > 1) {
090 buf.append(' ').append(hours).append(" hours");
091 } else if(hours > 0) {
092 buf.append(' ').append(hours).append(" hour");
093 }
094 if(minutes > 1) {
095 buf.append(' ').append(minutes).append(" minutes");
096 } else if(minutes > 0) {
097 buf.append(' ').append(minutes).append(" minute");
098 }
099 if(secs > 1) {
100 buf.append(' ').append(secs).append(" seconds");
101 } else if(secs > 0) {
102 buf.append(' ').append(secs).append(" second");
103 }
104 buf.delete(0,1);
105 return buf.toString();
106 }
107
108 public String getMemoryCurrent() {
109 return memoryCurrent;
110 }
111
112 public String getMemoryMost() {
113 return memoryMost;
114 }
115
116 public String getMemoryAllocated() {
117 return memoryAllocated;
118 }
119
120 public String getUpTime() {
121 return upTime;
122 }
123
124 public long getBytesCurrent() {
125 return bytesCurrent;
126 }
127
128 public long getBytesMost() {
129 return bytesMost;
130 }
131
132 public long getBytesAllocated() {
133 return bytesAllocated;
134 }
135 }