View Javadoc

1   /**
2    *
3    * Copyright 2003-2004 The Apache Software Foundation
4    *
5    *  Licensed under the Apache License, Version 2.0 (the "License");
6    *  you may not use this file except in compliance with the License.
7    *  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   *  Unless required by applicable law or agreed to in writing, software
12   *  distributed under the License is distributed on an "AS IS" BASIS,
13   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   *  See the License for the specific language governing permissions and
15   *  limitations under the License.
16   */
17  package org.apache.geronimo.console.jsr77;
18  
19  import java.io.Serializable;
20  import java.text.NumberFormat;
21  
22  /**
23   * @version $Rev: 392639 $ $Date: 2006-04-08 17:22:16 -0700 (Sat, 08 Apr 2006) $
24   */
25  public class DynamicServerInfo implements Serializable {
26      private final static long BYTES_MAX = 2048;
27      private final static long KB_MAX = BYTES_MAX * 1024l;
28      private final static long MB_MAX = KB_MAX * 1024l;
29      private final static long GB_MAX = MB_MAX * 1024l;
30      private final static long TB_MAX = GB_MAX * 1024l;
31      private final static double KB_DIV = 1024;
32      private final static double MB_DIV = KB_DIV*1024d;
33      private final static double GB_DIV = MB_DIV*1024d;
34      private final static double TB_DIV = GB_DIV*1024d;
35      private NumberFormat dec2Format;
36      private String memoryCurrent;
37      private String memoryMost;
38      private String memoryAllocated;
39      private String upTime;
40      private long bytesCurrent, bytesMost, bytesAllocated;
41  
42      public DynamicServerInfo(long upTime) {
43          this.upTime = calculateTime(upTime);
44          memoryAllocated = memoryCurrent = memoryMost = "Unknown";
45      }
46  
47      public DynamicServerInfo(long memoryCurrent, long memoryMost, long memoryAllocated, long upTime) {
48          dec2Format = NumberFormat.getNumberInstance();
49          dec2Format.setMaximumFractionDigits(2);
50          bytesCurrent = memoryCurrent;
51          bytesMost = memoryMost;
52          bytesAllocated = memoryAllocated;
53          this.memoryCurrent = calculateMemory(memoryCurrent);
54          this.memoryMost = calculateMemory(memoryMost);
55          this.memoryAllocated = calculateMemory(memoryAllocated);
56          this.upTime = calculateTime(upTime);
57      }
58  
59      private String calculateMemory(long bytes) {
60          if(bytes < BYTES_MAX) {
61              return bytes+" B";
62          } else if(bytes < KB_MAX) {
63              return dec2Format.format((double)bytes/KB_DIV)+" kB";
64          } else if(bytes < MB_MAX) {
65              return dec2Format.format((double)bytes/MB_DIV)+" MB";
66          } else if(bytes < GB_MAX) {
67              return dec2Format.format((double)bytes/GB_DIV)+" GB";
68          } else if(bytes < TB_MAX) {
69              return dec2Format.format((double)bytes/TB_DIV)+" TB";
70          } else {
71              return "Out of range";
72          }
73      }
74  
75      private String calculateTime(long millis) {
76          int secs = (int)(millis/1000L);
77          int days = secs/86400;
78          secs = secs % 86400;
79          int hours = secs/3600;
80          secs = secs % 3600;
81          int minutes = secs / 60;
82          secs = secs % 60;
83          StringBuffer buf = new StringBuffer();
84          if(days > 1) {
85              buf.append(' ').append(days).append(" days");
86          } else if(days > 0) {
87              buf.append(' ').append(days).append(" day");
88          }
89          if(hours > 1) {
90              buf.append(' ').append(hours).append(" hours");
91          } else if(hours > 0) {
92              buf.append(' ').append(hours).append(" hour");
93          }
94          if(minutes > 1) {
95              buf.append(' ').append(minutes).append(" minutes");
96          } else if(minutes > 0) {
97              buf.append(' ').append(minutes).append(" minute");
98          }
99          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 }