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.monitoring.console; 018 019 import java.text.Format; 020 import java.text.SimpleDateFormat; 021 import java.util.ArrayList; 022 import java.util.Date; 023 024 public class StatsGraph { 025 private String GraphName; 026 private String DivName; 027 private String Description; 028 private String DivDefine; 029 private String DivImplement; 030 private String XAxisLabel; 031 private String YAxisLabel; 032 private int SnapshotDuration; 033 private int TimeFrame; 034 private int PointCount; 035 private String HexColor; 036 private String GraphJS; 037 038 public StatsGraph(Integer graph_id, String graphName, String description, 039 String xAxisLabel, String yAxisLabel, char data1operation, 040 ArrayList<Object> dataSet1, String operation, char data2operation, 041 ArrayList<Object> dataSet2, ArrayList<Object> snapshotTimes, 042 int snapshotDuration, int timeFrame, String hexColor, 043 float warninglevel1, float warninglevel2) { 044 045 DivName = "graph" + graph_id + "Container"; 046 GraphName = graphName; 047 Description = description; 048 XAxisLabel = xAxisLabel; 049 YAxisLabel = yAxisLabel; 050 SnapshotDuration = snapshotDuration; 051 TimeFrame = timeFrame; 052 PointCount = dataSet1.size(); 053 HexColor = hexColor; 054 055 DivImplement = "<div id=\"" + DivName 056 + "\" style=\"height: 220px;\"></div><br><div id='" + DivName 057 + "Sub' style='text-align: center;'>" + yAxisLabel + " vs. " 058 + xAxisLabel + "</div>" + "\n"; 059 060 GraphJS = "var " + "graph" + graph_id 061 + " = new dojox.charting.Chart2D(\"" + DivName + "\");\n" 062 + "graph" + graph_id 063 + ".addPlot(\"default\", {type: \"Areas\"});\n" + "graph" 064 + graph_id + ".setTheme(dojox.charting.themes.PlotKit.blue);\n"; 065 066 // Setup the x tick marks on the chart 067 Format formatter = new SimpleDateFormat("HH:mm"); 068 if ((timeFrame / 1440) > 7) 069 formatter = new SimpleDateFormat("M/d"); 070 else { 071 if ((timeFrame / 60) > 24) 072 formatter = new SimpleDateFormat("E a"); 073 else { 074 formatter = new SimpleDateFormat("HH:mm"); 075 } 076 } 077 GraphJS += "graph" + graph_id + ".addAxis(\"x\", {labels: ["; 078 for (int i = 1; i < dataSet1.size(); i++) { 079 Date date = new Date((Long) snapshotTimes.get(i)); 080 GraphJS += "{value: " + (i) + ", text: '" + formatter.format(date); 081 if ((i+1) != dataSet1.size()) 082 GraphJS += "' }, \n"; 083 else 084 GraphJS += "' } \n"; 085 } 086 GraphJS += "]});\n"; 087 GraphJS += "graph" + graph_id + ".addAxis(\"y\", {vertical: true});\n"; 088 089 GraphJS += "graph" + graph_id + ".addSeries(\"Series" + graph_id 090 + "\", ["; 091 if (data1operation == 'D' && data2operation == 'D') { 092 for (int i = 1; i < dataSet1.size(); i++) { 093 if (((Long) dataSet1.get(i) - (Long) dataSet1.get(i - 1)) < 0) 094 dataSet1.set(i - 1, dataSet1.get(i)); 095 GraphJS = GraphJS 096 + ((Long) dataSet1.get(i) - (Long) dataSet1.get(i - 1)); 097 // ensure there is not a division by 0 098 GraphJS += appendOperation(operation, (Long) dataSet2.get(i) 099 - (Long) dataSet2.get(i - 1)); 100 if ((i+1) != dataSet1.size()) 101 GraphJS += ","; 102 } 103 } 104 if (data1operation == 'D' && data2operation != 'D') { 105 for (int i = 1; i < dataSet1.size(); i++) { 106 GraphJS = GraphJS 107 + ((Long) dataSet1.get(i) - (Long) dataSet1.get(i - 1)); 108 // ensure there is not a division by 0 109 GraphJS += appendOperation(operation, (Long) dataSet2.get(i)); 110 if ((i+1) != dataSet1.size()) 111 GraphJS += ","; 112 } 113 } 114 if (data1operation != 'D' && data2operation == 'D') { 115 for (int i = 1; i < dataSet1.size(); i++) { 116 GraphJS = GraphJS + dataSet1.get(i); 117 // ensure there is not a division by 0 118 GraphJS += appendOperation(operation, (Long) dataSet2.get(i) 119 - (Long) dataSet2.get(i - 1)); 120 if ((i+1) != dataSet1.size()) 121 GraphJS += ","; 122 } 123 } 124 if (data1operation != 'D' && data2operation != 'D') { 125 for (int i = 1; i < dataSet1.size(); i++) { 126 GraphJS = GraphJS + dataSet1.get(i); 127 // ensure there is not a division by 0 128 GraphJS += appendOperation(operation, (Long) dataSet2.get(i)); 129 if ((i+1) != dataSet1.size()) 130 GraphJS += ","; 131 } 132 } 133 134 GraphJS = GraphJS + "]);\n"; 135 136 GraphJS = GraphJS + "graph" + graph_id + ".render();\n"; 137 138 } 139 140 public StatsGraph(Integer graph_id, String graphName, String description, 141 String xAxisLabel, String yAxisLabel, char data1operation, 142 ArrayList<Object> dataSet1, String operation, 143 ArrayList<Object> snapshotTimes, int snapshotDuration, 144 int timeFrame, String hexColor, float warninglevel1, 145 float warninglevel2) { 146 147 DivName = "graph" + graph_id + "Container"; 148 GraphName = graphName; 149 Description = description; 150 XAxisLabel = xAxisLabel; 151 YAxisLabel = yAxisLabel; 152 SnapshotDuration = snapshotDuration; 153 TimeFrame = timeFrame; 154 PointCount = dataSet1.size(); 155 HexColor = hexColor; 156 157 DivImplement = "<div id=\"" + DivName 158 + "\" style=\"height: 220px;\"></div><br><div id='" + DivName 159 + "Sub' style='text-align: center;'>" + yAxisLabel + " vs. " 160 + xAxisLabel + "</div>" + "\n"; 161 162 GraphJS = "var " + "graph" + graph_id 163 + " = new dojox.charting.Chart2D(\"" + DivName + "\");\n" 164 + "graph" + graph_id 165 + ".addPlot(\"default\", {type: \"Areas\"});\n" + "graph" 166 + graph_id + ".setTheme(dojox.charting.themes.PlotKit.blue);\n"; 167 168 // Setup the x tick marks on the chart 169 Format formatter = new SimpleDateFormat("HH:mm"); 170 if ((timeFrame / 1440) > 7) 171 formatter = new SimpleDateFormat("M/d"); 172 else { 173 if ((timeFrame / 60) > 24) 174 formatter = new SimpleDateFormat("E a"); 175 else { 176 formatter = new SimpleDateFormat("HH:mm"); 177 } 178 } 179 GraphJS += "graph" + graph_id + ".addAxis(\"x\", {labels: ["; 180 for (int i = 1; i < dataSet1.size(); i++) { 181 Date date = new Date((Long) snapshotTimes.get(i)); 182 GraphJS += "{value: " + (i) + ", text: '" + formatter.format(date); 183 if ((i+1) != dataSet1.size()) 184 GraphJS += "' }, \n"; 185 else 186 GraphJS += "' } \n"; 187 } 188 GraphJS += "]});\n"; 189 GraphJS += "graph" + graph_id + ".addAxis(\"y\", {vertical: true});\n"; 190 191 GraphJS += "graph" + graph_id + ".addSeries(\"Series" + graph_id 192 + "\", ["; 193 if (data1operation == 'D') 194 for (int i = 1; i < dataSet1.size(); i++) { 195 GraphJS = GraphJS 196 + ((Long) dataSet1.get(i) - (Long) dataSet1.get(i - 1)) + operation; 197 if ((i+1) != dataSet1.size()) 198 GraphJS += ",\n"; 199 } 200 if (data1operation != 'D') 201 for (int i = 1; i < dataSet1.size(); i++) { 202 GraphJS = GraphJS + dataSet1.get(i) + operation; 203 if ((i+1) != dataSet1.size()) 204 GraphJS += ",\n"; 205 } 206 207 GraphJS = GraphJS + "]);\n"; 208 209 GraphJS = GraphJS + "graph" + graph_id + ".render();\n"; 210 } 211 212 private String appendOperation(String operation, Long number) { 213 String retval = ""; 214 // ensure there is not a division by 0 215 if (operation.endsWith("/") && number == 0) { 216 retval += "*0"; 217 } else { 218 retval += operation + number; 219 } 220 return retval; 221 } 222 223 public StatsGraph() { 224 225 } 226 227 public void redraw() { 228 229 } 230 231 public String getJS() { 232 return GraphJS; 233 } 234 235 public String getDiv() { 236 return DivDefine; 237 } 238 239 public String getDivImplement() { 240 return DivImplement; 241 } 242 243 public String getDivName() { 244 return DivName; 245 } 246 247 public String getXAxis() { 248 return XAxisLabel; 249 } 250 251 public String getYAxis() { 252 return YAxisLabel; 253 } 254 255 public String getName() { 256 return GraphName; 257 } 258 259 public String getDescription() { 260 return Description; 261 } 262 263 public int getSnapshotDuration() { 264 return SnapshotDuration; 265 } 266 267 public int getTimeFrame() { 268 return TimeFrame; 269 } 270 271 public int getPointCount() { 272 return PointCount; 273 } 274 275 public String getColor() { 276 return HexColor; 277 } 278 }