1 23 24 package org.continuent.sequoia.controller.monitoring; 25 26 import java.util.ArrayList ; 27 import java.util.Collection ; 28 import java.util.Hashtable ; 29 import java.util.Iterator ; 30 31 import org.continuent.sequoia.common.log.Trace; 32 import org.continuent.sequoia.common.util.Stats; 33 import org.continuent.sequoia.common.xml.DatabasesXmlTags; 34 import org.continuent.sequoia.controller.requests.AbstractRequest; 35 36 42 public class SQLMonitoring extends Monitoring 43 { 44 private Hashtable statList; private ArrayList ruleList; 46 private boolean defaultRule; 47 48 private static Trace logger = null; 49 50 55 public SQLMonitoring(String vdbName) 56 { 57 statList = new Hashtable (); 58 ruleList = new ArrayList (); 59 logger = Trace.getLogger("org.continuent.sequoia.controller.monitoring." 60 + vdbName); 61 setActive(true); 62 } 63 64 67 public void cleanStats() 68 { 69 statList.clear(); 70 } 71 72 78 public final void logRequestTime(AbstractRequest request) 79 { 80 Stats stat = getStatForRequest(request); 81 if (stat == null) 82 return; 83 stat.incrementCount(); 84 long time = request.getEndTime() - request.getStartTime(); 85 stat.updateTime(time); 86 if (logger.isDebugEnabled()) 87 logger.debug(time + "ms for " + stat.getName()); 88 } 89 90 95 public final void logError(AbstractRequest request) 96 { 97 Stats stat = getStatForRequest(request); 98 if (stat == null) 99 return; 100 stat.incrementError(); 101 if (logger.isDebugEnabled()) 102 logger.debug("ERROR " + stat.getName()); 103 } 104 105 110 public final void logCacheHit(AbstractRequest request) 111 { 112 Stats stat = getStatForRequest(request); 113 if (stat == null) 114 return; 115 stat.incrementCacheHit(); 116 if (logger.isDebugEnabled()) 117 logger.debug("Cache hit " + stat.getName()); 118 } 119 120 125 public final void resetRequestStat(AbstractRequest request) 126 { 127 Stats stat = getStatForRequest(request); 128 if (stat == null) 129 return; 130 stat.reset(); 131 } 132 133 141 public final Stats getStatForRequest(AbstractRequest request) 142 { 143 String sql = monitorRequestRule(request); 144 if (sql == null) 145 return null; 146 147 Stats stat = (Stats) statList.get(sql); 149 if (stat == null) 150 { stat = new Stats(sql); 152 statList.put(sql, stat); 153 } 154 return stat; 155 } 156 157 162 public String [][] getAllStatsInformation() 163 { 164 Collection values = statList.values(); 165 String [][] result = new String [values.size()][]; 166 int i = 0; 167 for (Iterator iter = values.iterator(); iter.hasNext(); i++) 168 { 169 Stats stat = (Stats) iter.next(); 170 result[i] = stat.toStringTable(); 171 } 172 return result; 173 } 174 175 178 public void dumpAllStatsInformation() 179 { 180 if (logger.isInfoEnabled()) 181 { 182 for (Iterator iter = statList.values().iterator(); iter.hasNext();) 183 { 184 Stats stat = (Stats) iter.next(); 185 logger.info(stat.singleLineDisplay()); 186 } 187 } 188 } 189 190 193 194 199 public boolean getDefaultRule() 200 { 201 return defaultRule; 202 } 203 204 209 public void setDefaultRule(boolean monitoring) 210 { 211 this.defaultRule = monitoring; 212 } 213 214 219 public void addRule(SQLMonitoringRule rule) 220 { 221 this.ruleList.add(rule); 222 } 223 224 231 private String monitorRequestRule(AbstractRequest request) 232 { 233 for (int i = 0; i < ruleList.size(); i++) 234 { 235 SQLMonitoringRule rule = (SQLMonitoringRule) ruleList.get(i); 236 String sql = rule.matches(request); 237 if (sql != null) 238 { if (rule.isMonitoring()) 240 return sql; 241 else 242 return null; 243 } 244 } 245 246 if (defaultRule) 248 return request.getSqlOrTemplate(); 249 else 250 return null; 251 } 252 253 256 public ArrayList getRuleList() 257 { 258 return ruleList; 259 } 260 261 264 public String getXmlImpl() 265 { 266 String info = "<" + DatabasesXmlTags.ELT_SQLMonitoring + " " 267 + DatabasesXmlTags.ATT_defaultMonitoring + "=\""; 268 String defaultMonitoring = getDefaultRule() ? "on" : "off"; 269 info += defaultMonitoring; 270 info += "\">"; 271 for (int i = 0; i < ruleList.size(); i++) 272 { 273 SQLMonitoringRule rule = (SQLMonitoringRule) ruleList.get(i); 274 info += rule.getXml(); 275 } 276 info += "</" + DatabasesXmlTags.ELT_SQLMonitoring + ">"; 277 return info; 278 } 279 280 } | Popular Tags |