src/org/objectweb/cjdbc/controller/monitoring/datacollector/DataCollector.java

説明を見る。
00001 00025 package org.objectweb.cjdbc.controller.monitoring.datacollector; 00026 00027 import java.util.ArrayList; 00028 00029 import javax.management.NotCompliantMBeanException; 00030 import javax.management.ObjectName; 00031 00032 import org.objectweb.cjdbc.common.exceptions.DataCollectorException; 00033 import org.objectweb.cjdbc.common.exceptions.ExceptionTypes; 00034 import org.objectweb.cjdbc.common.i18n.Translate; 00035 import org.objectweb.cjdbc.common.jmx.JmxConstants; 00036 import org.objectweb.cjdbc.common.jmx.JmxException; 00037 import org.objectweb.cjdbc.common.jmx.mbeans.DataCollectorMBean; 00038 import org.objectweb.cjdbc.common.log.Trace; 00039 import org.objectweb.cjdbc.common.monitor.AbstractDataCollector; 00040 import org.objectweb.cjdbc.common.monitor.DataCollection; 00041 import org.objectweb.cjdbc.common.monitor.backend.ActiveConnectionsCollector; 00042 import org.objectweb.cjdbc.common.monitor.backend.ActiveTransactionCollector; 00043 import org.objectweb.cjdbc.common.monitor.backend.PendingRequestsCollector; 00044 import org.objectweb.cjdbc.common.monitor.backend.ReadRequestsCollector; 00045 import org.objectweb.cjdbc.common.monitor.backend.RequestsCollector; 00046 import org.objectweb.cjdbc.common.monitor.backend.TransactionsCollector; 00047 import org.objectweb.cjdbc.common.monitor.backend.WriteRequestsCollector; 00048 import org.objectweb.cjdbc.common.monitor.cache.CacheEntriesCollector; 00049 import org.objectweb.cjdbc.common.monitor.cache.CountHitsCollector; 00050 import org.objectweb.cjdbc.common.monitor.cache.CountInsertCollector; 00051 import org.objectweb.cjdbc.common.monitor.cache.CountSelectCollector; 00052 import org.objectweb.cjdbc.common.monitor.cache.HitsRatioCollector; 00053 import org.objectweb.cjdbc.common.monitor.client.ClientActiveTimeCollector; 00054 import org.objectweb.cjdbc.common.monitor.client.ClientBytesReadCollector; 00055 import org.objectweb.cjdbc.common.monitor.client.ClientBytesWrittenCollector; 00056 import org.objectweb.cjdbc.common.monitor.client.ClientReadingSpeedCollector; 00057 import org.objectweb.cjdbc.common.monitor.client.ClientWritingSpeedCollector; 00058 import org.objectweb.cjdbc.common.monitor.controller.ControllerIdleThreadsCollector; 00059 import org.objectweb.cjdbc.common.monitor.controller.ControllerWorkerPendingQueueCollector; 00060 import org.objectweb.cjdbc.common.monitor.controller.ThreadsCountCollector; 00061 import org.objectweb.cjdbc.common.monitor.controller.TotalMemoryCollector; 00062 import org.objectweb.cjdbc.common.monitor.controller.UsedMemoryCollector; 00063 import org.objectweb.cjdbc.common.monitor.scheduler.NumberReadCollector; 00064 import org.objectweb.cjdbc.common.monitor.scheduler.NumberRequestsCollector; 00065 import org.objectweb.cjdbc.common.monitor.scheduler.NumberWriteCollector; 00066 import org.objectweb.cjdbc.common.monitor.scheduler.PendingTransactionsCollector; 00067 import org.objectweb.cjdbc.common.monitor.scheduler.PendingWritesCollector; 00068 import org.objectweb.cjdbc.common.monitor.virtualdatabase.ActiveDatabaseThreadCollector; 00069 import org.objectweb.cjdbc.common.monitor.virtualdatabase.DatabaseThreadsCollector; 00070 import org.objectweb.cjdbc.common.monitor.virtualdatabase.PendingDatabaseConnectionCollector; 00071 import org.objectweb.cjdbc.controller.backend.DatabaseBackend; 00072 import org.objectweb.cjdbc.controller.cache.result.AbstractResultCache; 00073 import org.objectweb.cjdbc.controller.core.Controller; 00074 import org.objectweb.cjdbc.controller.jmx.AbstractStandardMBean; 00075 import org.objectweb.cjdbc.controller.jmx.MBeanServerManager; 00076 import org.objectweb.cjdbc.controller.recoverylog.AbstractRecoveryLog; 00077 import org.objectweb.cjdbc.controller.scheduler.AbstractScheduler; 00078 import org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabase; 00079 import org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabaseWorkerThread; 00080 00088 public class DataCollector extends AbstractStandardMBean 00089 implements 00090 DataCollectorMBean, 00091 DataCollection 00092 { 00094 static Trace logger = Trace.getLogger("org.objectweb.cjdbc.controller.jmx"); 00095 Controller controller; 00096 00106 public DataCollector(Controller controller) 00107 throws NotCompliantMBeanException, JmxException 00108 { 00109 super(DataCollectorMBean.class); 00110 this.controller = controller; 00111 ObjectName objectName = JmxConstants.getDataCollectorObjectName(); 00112 MBeanServerManager.registerMBean(this, objectName); 00113 00114 } 00115 00119 public String getAssociatedString() 00120 { 00121 return "datacollector"; 00122 } 00123 00131 private VirtualDatabase getVirtualDatabase(String name) 00132 throws DataCollectorException 00133 { 00134 VirtualDatabase vd = controller.getVirtualDatabase(name); 00135 if (vd == null) 00136 throw new DataCollectorException("Unknown Database"); 00137 return vd; 00138 } 00139 00143 public String[][] retrieveBackendsData() throws DataCollectorException 00144 { 00145 throw new DataCollectorException("Not Implemented"); 00146 } 00147 00151 public String[][] retrieveBackendsData(String virtualDatabasename) 00152 throws DataCollectorException 00153 { 00154 VirtualDatabase vdb = getVirtualDatabase(virtualDatabasename); 00155 try 00156 { 00157 vdb.acquireReadLockBackendLists(); 00158 } 00159 catch (InterruptedException e) 00160 { 00161 String msg = Translate.get("virtualdatabase.fail.read.lock", e); 00162 throw new DataCollectorException(msg); 00163 } 00164 ArrayList backends = vdb.getBackends(); 00165 int backendListSize = backends.size(); 00166 String[][] data = new String[backendListSize][]; 00167 for (int i = 0; i < backendListSize; i++) 00168 { 00169 data[i] = ((DatabaseBackend) backends.get(i)).getBackendData(); 00170 } 00171 vdb.releaseReadLockBackendLists(); 00172 return data; 00173 } 00174 00178 public String[][] retrieveCacheData() throws DataCollectorException 00179 { 00180 throw new DataCollectorException(ExceptionTypes.NOT_IMPLEMENTED); 00181 00182 } 00183 00187 public String[][] retrieveRecoveryLogData(String databaseName) 00188 throws DataCollectorException 00189 { 00190 VirtualDatabase vdb = getVirtualDatabase(databaseName); 00191 AbstractRecoveryLog log = vdb.getRequestManager().getRecoveryLog(); 00192 if (log == null) 00193 throw new DataCollectorException(ExceptionTypes.NO_RECOVERY_LOG); 00194 return log.getData(); 00195 } 00196 00200 public String[][] retrieveCacheData(String virtualDatabasename) 00201 throws DataCollectorException 00202 { 00203 VirtualDatabase vdb = getVirtualDatabase(virtualDatabasename); 00204 AbstractResultCache cache = vdb.getRequestManager().getResultCache(); 00205 if (cache == null) 00206 throw new DataCollectorException(ExceptionTypes.NO_CACHE_ENABLED); 00207 else 00208 { 00209 try 00210 { 00211 return cache.getCacheData(); 00212 } 00213 catch (Exception e) 00214 { 00215 throw new DataCollectorException(e.getMessage()); 00216 } 00217 } 00218 } 00219 00223 public String[][] retrieveCacheStatsData() throws DataCollectorException 00224 { 00225 throw new DataCollectorException(ExceptionTypes.NOT_IMPLEMENTED); 00226 } 00227 00231 public String[][] retrieveCacheStatsData(String virtualDatabasename) 00232 throws DataCollectorException 00233 { 00234 VirtualDatabase vdb = getVirtualDatabase(virtualDatabasename); 00235 AbstractResultCache cache = vdb.getRequestManager().getResultCache(); 00236 if (cache == null) 00237 throw new DataCollectorException("No Cache enabled."); 00238 else 00239 { 00240 try 00241 { 00242 return cache.getCacheStatsData(); 00243 } 00244 catch (Exception e) 00245 { 00246 throw new DataCollectorException(e.getMessage()); 00247 } 00248 } 00249 } 00250 00254 public String[][] retrieveClientsData() throws DataCollectorException 00255 { 00256 throw new DataCollectorException("Not Implemented"); 00257 } 00258 00262 public String[][] retrieveClientsData(String virtualDatabasename) 00263 throws DataCollectorException 00264 { 00265 VirtualDatabase vdb = getVirtualDatabase(virtualDatabasename); 00266 ArrayList activeThreads = vdb.getActiveThreads(); 00267 int size = activeThreads.size(); 00268 String[][] data = new String[size][]; 00269 for (int i = 0; i < size; i++) 00270 { 00271 data[i] = ((VirtualDatabaseWorkerThread) activeThreads.get(i)) 00272 .retrieveClientData(); 00273 } 00274 return data; 00275 } 00276 00280 public String[][] retrieveControllerLoadData() 00281 { 00282 long total = Runtime.getRuntime().totalMemory(); 00283 long free = Runtime.getRuntime().freeMemory(); 00284 String[][] data = new String[1][6]; 00285 data[0][0] = controller.getIPAddress(); 00286 data[0][1] = "" + total / 1024 / 1024; 00287 data[0][2] = "" + (total - free) / 1024 / 1024; 00288 data[0][3] = "" + Thread.activeCount(); 00289 data[0][4] = "" 00290 + controller.getConnectionThread() 00291 .getControllerServerThreadPendingQueueSize(); 00292 data[0][5] = "" + controller.getConnectionThread().getIdleWorkerThreads(); 00293 return data; 00294 } 00295 00299 public String[][] retrieveSQLStats() throws DataCollectorException 00300 { 00301 throw new DataCollectorException("Not Implemented"); 00302 } 00303 00307 public String[][] retrieveSQLStats(String virtualDatabasename) 00308 throws DataCollectorException 00309 { 00310 VirtualDatabase vdb = getVirtualDatabase(virtualDatabasename); 00311 if (vdb.getSQLMonitor() == null) 00312 throw new DataCollectorException("No SQL monitoring enabled."); 00313 else 00314 return vdb.getSQLMonitor().getAllStatsInformation(); 00315 } 00316 00320 public String[][] retrieveVirtualDatabasesData() 00321 { 00322 ArrayList dbs = controller.getVirtualDatabases(); 00323 int size = dbs.size(); 00324 String[][] data = new String[size][4]; 00325 VirtualDatabase db; 00326 for (int i = 0; i < size; i++) 00327 { 00328 db = (VirtualDatabase) dbs.get(i); 00329 data[i][0] = db.getName(); 00330 data[i][1] = "" + db.getActiveThreads().size(); 00331 data[i][2] = "" + db.getPendingConnections().size(); 00332 data[i][3] = "" + db.getCurrentNbOfThreads(); 00333 } 00334 return data; 00335 } 00336 00340 public Controller getController() 00341 { 00342 return controller; 00343 } 00344 00348 public String[][] retrieveSchedulerData(String virtualDatabasename) 00349 throws DataCollectorException 00350 { 00351 VirtualDatabase vdb = getVirtualDatabase(virtualDatabasename); 00352 AbstractScheduler scheduler = vdb.getRequestManager().getScheduler(); 00353 String[][] data = new String[1][]; 00354 data[0] = scheduler.getSchedulerData(); 00355 return data; 00356 } 00357 00361 public AbstractDataCollector retrieveDataCollectorInstance(int dataType, 00362 String targetName, String virtualDbName) throws DataCollectorException 00363 { 00364 switch (dataType) 00365 { 00366 /* 00367 * Controller Collectors 00368 */ 00369 case CONTROLLER_TOTAL_MEMORY : 00370 return new TotalMemoryCollector(controller); 00371 case CONTROLLER_USED_MEMORY : 00372 return new UsedMemoryCollector(controller); 00373 case CONTROLLER_WORKER_PENDING_QUEUE : 00374 return new ControllerWorkerPendingQueueCollector(controller); 00375 case CONTROLLER_THREADS_NUMBER : 00376 return new ThreadsCountCollector(controller); 00377 case CONTROLLER_IDLE_WORKER_THREADS : 00378 return new ControllerIdleThreadsCollector(controller); 00379 /* 00380 * Backend collectors 00381 */ 00382 case BACKEND_ACTIVE_TRANSACTION : 00383 return new ActiveTransactionCollector(targetName, virtualDbName); 00384 case BACKEND_PENDING_REQUESTS : 00385 return new PendingRequestsCollector(targetName, virtualDbName); 00386 case BACKEND_TOTAL_ACTIVE_CONNECTIONS : 00387 return new ActiveConnectionsCollector(targetName, virtualDbName); 00388 case BACKEND_TOTAL_REQUEST : 00389 return new RequestsCollector(targetName, virtualDbName); 00390 case BACKEND_TOTAL_READ_REQUEST : 00391 return new ReadRequestsCollector(targetName, virtualDbName); 00392 case BACKEND_TOTAL_WRITE_REQUEST : 00393 return new WriteRequestsCollector(targetName, virtualDbName); 00394 case BACKEND_TOTAL_TRANSACTIONS : 00395 return new TransactionsCollector(targetName, virtualDbName); 00396 /* 00397 * VirtualDatabase collectors 00398 */ 00399 case DATABASES_ACTIVE_THREADS : 00400 return new ActiveDatabaseThreadCollector(virtualDbName); 00401 case DATABASES_PENDING_CONNECTIONS : 00402 return new PendingDatabaseConnectionCollector(virtualDbName); 00403 case DATABASES_NUMBER_OF_THREADS : 00404 return new DatabaseThreadsCollector(virtualDbName); 00405 /* 00406 * Cache stats collectors 00407 */ 00408 case CACHE_STATS_COUNT_HITS : 00409 return new CountHitsCollector(virtualDbName); 00410 case CACHE_STATS_COUNT_INSERT : 00411 return new CountInsertCollector(virtualDbName); 00412 case CACHE_STATS_COUNT_SELECT : 00413 return new CountSelectCollector(virtualDbName); 00414 case CACHE_STATS_HITS_PERCENTAGE : 00415 return new HitsRatioCollector(virtualDbName); 00416 case CACHE_STATS_NUMBER_ENTRIES : 00417 return new CacheEntriesCollector(virtualDbName); 00418 /* 00419 * Scheduler collectors 00420 */ 00421 case SCHEDULER_NUMBER_READ : 00422 return new NumberReadCollector(virtualDbName); 00423 case SCHEDULER_NUMBER_REQUESTS : 00424 return new NumberRequestsCollector(virtualDbName); 00425 case SCHEDULER_NUMBER_WRITES : 00426 return new NumberWriteCollector(virtualDbName); 00427 case SCHEDULER_PENDING_TRANSACTIONS : 00428 return new PendingTransactionsCollector(virtualDbName); 00429 case SCHEDULER_PENDING_WRITES : 00430 return new PendingWritesCollector(virtualDbName); 00431 /* 00432 * Client collectors 00433 */ 00434 case CLIENT_BYTES_READ : 00435 return new ClientBytesReadCollector(virtualDbName, targetName); 00436 case CLIENT_BYTES_WRITTEN : 00437 return new ClientBytesWrittenCollector(virtualDbName, targetName); 00438 case CLIENT_TIME_ACTIVE : 00439 return new ClientActiveTimeCollector(virtualDbName, targetName); 00440 case CLIENT_READING_SPEED : 00441 return new ClientReadingSpeedCollector(virtualDbName, targetName); 00442 case CLIENT_WRITING_SPEED : 00443 return new ClientWritingSpeedCollector(virtualDbName, targetName); 00444 /* 00445 * Unknown collector 00446 */ 00447 default : 00448 throw new DataCollectorException(ExceptionTypes.INVALID_COLLECTOR_TYPE); 00449 } 00450 } 00451 00455 public long retrieveData(AbstractDataCollector collector) 00456 throws DataCollectorException 00457 { 00458 // Get the new value and return it 00459 // recall reference to controller (is transient in collector) 00460 collector.setController(controller); 00461 return collector.collectValue(); 00462 } 00463 00467 public boolean hasVirtualDatabase(String name) 00468 { 00469 return controller.hasVirtualDatabase(name); 00470 } 00471 }

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