src/org/objectweb/cjdbc/controller/monitoring/SQLMonitoring.java

説明を見る。
00001 00025 package org.objectweb.cjdbc.controller.monitoring; 00026 00027 import java.util.ArrayList; 00028 import java.util.Collection; 00029 import java.util.Hashtable; 00030 import java.util.Iterator; 00031 00032 import org.objectweb.cjdbc.common.log.Trace; 00033 import org.objectweb.cjdbc.common.sql.AbstractRequest; 00034 import org.objectweb.cjdbc.common.util.Stats; 00035 import org.objectweb.cjdbc.common.xml.DatabasesXmlTags; 00036 00043 public class SQLMonitoring extends Monitoring 00044 { 00045 private Hashtable statList; // SQL query -> Stat 00046 private ArrayList ruleList; 00047 private boolean defaultRule; 00048 00049 private static Trace logger = null; 00050 00056 public SQLMonitoring(String vdbName) 00057 { 00058 statList = new Hashtable(); 00059 ruleList = new ArrayList(); 00060 logger = Trace.getLogger("org.objectweb.cjdbc.controller.monitoring." 00061 + vdbName); 00062 } 00063 00070 public final void logRequestTime(AbstractRequest request, long time) 00071 { 00072 Stats stat = getStatForRequest(request); 00073 if (stat == null) 00074 return; 00075 stat.incrementCount(); 00076 stat.updateTime(time); 00077 if (logger.isDebugEnabled()) 00078 logger.debug(time + " " + stat.getName()); 00079 } 00080 00086 public final void logError(AbstractRequest request) 00087 { 00088 Stats stat = getStatForRequest(request); 00089 if (stat == null) 00090 return; 00091 stat.incrementError(); 00092 if (logger.isDebugEnabled()) 00093 logger.debug("ERROR " + stat.getName()); 00094 } 00095 00101 public final void logCacheHit(AbstractRequest request) 00102 { 00103 Stats stat = getStatForRequest(request); 00104 if (stat == null) 00105 return; 00106 stat.incrementCacheHit(); 00107 if (logger.isDebugEnabled()) 00108 logger.debug("Cache hit " + stat.getName()); 00109 } 00110 00116 public final void resetRequestStat(AbstractRequest request) 00117 { 00118 Stats stat = getStatForRequest(request); 00119 if (stat == null) 00120 return; 00121 stat.reset(); 00122 } 00123 00132 public final Stats getStatForRequest(AbstractRequest request) 00133 { 00134 String sql = monitorRequestRule(request); 00135 if (sql == null) 00136 return null; 00137 00138 // Note that the Hashtable is synchronized 00139 Stats stat = (Stats) statList.get(sql); 00140 if (stat == null) 00141 { // No entry for this query, create a new Stats entry 00142 stat = new Stats(sql); 00143 statList.put(sql, stat); 00144 } 00145 return stat; 00146 } 00147 00153 public String[][] getAllStatsInformation() 00154 { 00155 Collection values = statList.values(); 00156 String[][] result = new String[values.size()][]; 00157 int i = 0; 00158 for (Iterator iter = values.iterator(); iter.hasNext(); i++) 00159 { 00160 Stats stat = (Stats) iter.next(); 00161 result[i] = stat.toStringTable(); 00162 } 00163 return result; 00164 } 00165 00169 public void dumpAllStatsInformation() 00170 { 00171 if (logger.isInfoEnabled()) 00172 { 00173 for (Iterator iter = statList.values().iterator(); iter.hasNext();) 00174 { 00175 Stats stat = (Stats) iter.next(); 00176 logger.info(stat.singleLineDisplay()); 00177 } 00178 } 00179 } 00180 00181 /* 00182 * Rules Management 00183 */ 00184 00190 public boolean getDefaultRule() 00191 { 00192 return defaultRule; 00193 } 00194 00200 public void setDefaultRule(boolean monitoring) 00201 { 00202 this.defaultRule = monitoring; 00203 } 00204 00210 public void addRule(SQLMonitoringRule rule) 00211 { 00212 this.ruleList.add(rule); 00213 } 00214 00222 private String monitorRequestRule(AbstractRequest request) 00223 { 00224 for (int i = 0; i < ruleList.size(); i++) 00225 { 00226 SQLMonitoringRule rule = (SQLMonitoringRule) ruleList.get(i); 00227 String sql = rule.matches(request); 00228 if (sql != null) 00229 { // This rule matches 00230 if (rule.isMonitoring()) 00231 return sql; 00232 else 00233 return null; 00234 } 00235 } 00236 00237 // No rule matched, use the default rule 00238 if (defaultRule) 00239 { 00240 if (request.getSqlSkeleton() == null) 00241 return request.getSQL(); 00242 else 00243 return request.getSqlSkeleton(); 00244 } 00245 else 00246 return null; 00247 } 00248 00252 public ArrayList getRuleList() 00253 { 00254 return ruleList; 00255 } 00256 00260 public String getXmlImpl() 00261 { 00262 String info = "<" + DatabasesXmlTags.ELT_SQLMonitoring + " " 00263 + DatabasesXmlTags.ATT_defaultMonitoring + "=\""; 00264 info += getDefaultRule(); 00265 info += "\">"; 00266 for (int i = 0; i < ruleList.size(); i++) 00267 { 00268 SQLMonitoringRule rule = (SQLMonitoringRule) ruleList.get(i); 00269 info += rule.getXml(); 00270 } 00271 info += "</" + DatabasesXmlTags.ELT_SQLMonitoring + ">"; 00272 return info; 00273 } 00274 00275 }

CJDBCversion1.0.4に対してTue Oct 12 15:16:03 2004に生成されました。 doxygen 1.3.8