New features;
-Block resets data to zero values -Auto-reset on 3 consecutive failures -Auto-block on 10 consecutive failures -%CPU and Logical IO on OraMonWeb overview for each monitor, sortable
Showing
4 changed files
with
35 additions
and
2 deletions
... | @@ -98,7 +98,7 @@ function dataHandler() { | ... | @@ -98,7 +98,7 @@ function dataHandler() { |
98 | } | 98 | } |
99 | </script> | 99 | </script> |
100 | 100 | ||
101 | <h1>OraMon Web 1.1 with JmxMon</h1> | 101 | <h1>OraMon Web 1.2</h1> |
102 | 102 | ||
103 | <h2>Status Oracle Monitors</h2> | 103 | <h2>Status Oracle Monitors</h2> |
104 | <p>Number of monitors: <%= se.lil.om.Registry.getList().size() %></p> | 104 | <p>Number of monitors: <%= se.lil.om.Registry.getList().size() %></p> |
... | @@ -117,6 +117,8 @@ function dataHandler() { | ... | @@ -117,6 +117,8 @@ function dataHandler() { |
117 | <th>Name</th> | 117 | <th>Name</th> |
118 | <th>Instance</th> | 118 | <th>Instance</th> |
119 | <th>Connection String</th> | 119 | <th>Connection String</th> |
120 | <th>%CPU</th> | ||
121 | <th>Logical IO/s</th> | ||
120 | <th>Data Calls</th> | 122 | <th>Data Calls</th> |
121 | <th>Success</th> | 123 | <th>Success</th> |
122 | <th>Failed</th> | 124 | <th>Failed</th> |
... | @@ -127,10 +129,13 @@ function dataHandler() { | ... | @@ -127,10 +129,13 @@ function dataHandler() { |
127 | <th>Action</th> | 129 | <th>Action</th> |
128 | </tr> | 130 | </tr> |
129 | <% for (OraMon mon : se.lil.om.Registry.getList()) { %> | 131 | <% for (OraMon mon : se.lil.om.Registry.getList()) { %> |
132 | <% Double cpu=0D; Double lio=0D; try {cpu=mon.getCPUPercent();} catch(Throwable t) {} try {lio=mon.getLogicalReadsPerSecond();} catch(Throwable t) {} %> | ||
130 | <tr> | 133 | <tr> |
131 | <td><%= mon.getFriendlyName() %></td> | 134 | <td><%= mon.getFriendlyName() %></td> |
132 | <td><%= mon.getDBName() %></td> | 135 | <td><%= mon.getDBName() %></td> |
133 | <td><%= mon.getConString() %></td> | 136 | <td><%= mon.getConString() %></td> |
137 | <td><%= String.format("%.2f", cpu) %></td> | ||
138 | <td><%= String.format("%.2f", lio) %></td> | ||
134 | <td><%= mon.getDataCalled() %></td> | 139 | <td><%= mon.getDataCalled() %></td> |
135 | <td><%= mon.getDataSucceeded() %></td> | 140 | <td><%= mon.getDataSucceeded() %></td> |
136 | <td><%= mon.getDataFailed() %></td> | 141 | <td><%= mon.getDataFailed() %></td> | ... | ... |
No preview for this file type
No preview for this file type
... | @@ -26,6 +26,7 @@ public class OraMon { | ... | @@ -26,6 +26,7 @@ public class OraMon { |
26 | 26 | ||
27 | int getDataCalls = 0; | 27 | int getDataCalls = 0; |
28 | int getDataSucess = 0; | 28 | int getDataSucess = 0; |
29 | int getDataBadirad = 0; | ||
29 | 30 | ||
30 | boolean getPdbs = false; | 31 | boolean getPdbs = false; |
31 | Collector colPdbSysStat = null; | 32 | Collector colPdbSysStat = null; |
... | @@ -39,6 +40,11 @@ public class OraMon { | ... | @@ -39,6 +40,11 @@ public class OraMon { |
39 | 40 | ||
40 | public void setBlockedState(Boolean blockedState) { | 41 | public void setBlockedState(Boolean blockedState) { |
41 | this.blocked = blockedState; | 42 | this.blocked = blockedState; |
43 | if(this.blocked) { | ||
44 | reset(); | ||
45 | try {conn.close();} | ||
46 | catch (Exception e) {} | ||
47 | } | ||
42 | } | 48 | } |
43 | 49 | ||
44 | public boolean getBlockedState() { | 50 | public boolean getBlockedState() { |
... | @@ -108,6 +114,7 @@ public class OraMon { | ... | @@ -108,6 +114,7 @@ public class OraMon { |
108 | LongDelta cpuTime = new LongDelta("cpuTime"); | 114 | LongDelta cpuTime = new LongDelta("cpuTime"); |
109 | LongDelta niwTime = new LongDelta("niwTime"); | 115 | LongDelta niwTime = new LongDelta("niwTime"); |
110 | public double getCPUPercent(boolean excludeNonIdleWaitTime, String pdbName) throws Throwable { | 116 | public double getCPUPercent(boolean excludeNonIdleWaitTime, String pdbName) throws Throwable { |
117 | if(numCpus < 1) return 0D; | ||
111 | double cpuPerSec; | 118 | double cpuPerSec; |
112 | if(pdbName == null) cpuPerSec = cpuTime.getPerSecondValue(); | 119 | if(pdbName == null) cpuPerSec = cpuTime.getPerSecondValue(); |
113 | else cpuPerSec = colPdbCPU.getPerSecValue(pdbName + strCpuTime); | 120 | else cpuPerSec = colPdbCPU.getPerSecValue(pdbName + strCpuTime); |
... | @@ -234,6 +241,7 @@ public class OraMon { | ... | @@ -234,6 +241,7 @@ public class OraMon { |
234 | } | 241 | } |
235 | 242 | ||
236 | public double getOsLoadPerCPU() throws Throwable { | 243 | public double getOsLoadPerCPU() throws Throwable { |
244 | if(this.numCpus < 1) return 0D; | ||
237 | double num = this.numCpus; | 245 | double num = this.numCpus; |
238 | double load = getOsLoad(); | 246 | double load = getOsLoad(); |
239 | return load / num; | 247 | return load / num; |
... | @@ -334,9 +342,25 @@ public class OraMon { | ... | @@ -334,9 +342,25 @@ public class OraMon { |
334 | Lock lock = new ReentrantLock(); | 342 | Lock lock = new ReentrantLock(); |
335 | Throwable lastEx = null; | 343 | Throwable lastEx = null; |
336 | 344 | ||
345 | public void reset() { | ||
346 | colSysStat = new Collector("colSysStat"); | ||
347 | colOsStat = new Collector("colOsStat"); | ||
348 | colPdbSysStat = null; | ||
349 | colPdbCPU = null; | ||
350 | pdbSet = null; | ||
351 | cpuTime = new LongDelta("cpuTime"); | ||
352 | niwTime = new LongDelta("niwTime"); | ||
353 | osLoad = new DoubleDelta(); | ||
354 | numCpus = 0; | ||
355 | } | ||
356 | |||
337 | public boolean getData(long ageTs, String pdbName) throws Throwable { | 357 | public boolean getData(long ageTs, String pdbName) throws Throwable { |
338 | //Check if we are blocked. If we are, just return with false telling the caller we did not update. | 358 | //Check if we are blocked. If we are, just return with false telling the caller we did not update. |
339 | if(this.blocked) return false; | 359 | if(this.blocked) { |
360 | // Reset all data | ||
361 | reset(); | ||
362 | return false; | ||
363 | } | ||
340 | 364 | ||
341 | //Check age (unless pdbName was set for the first time, in that case we need to discard the cached data) | 365 | //Check age (unless pdbName was set for the first time, in that case we need to discard the cached data) |
342 | if(getPdbs == false && pdbName != null) { | 366 | if(getPdbs == false && pdbName != null) { |
... | @@ -442,8 +466,10 @@ public class OraMon { | ... | @@ -442,8 +466,10 @@ public class OraMon { |
442 | getDataSucess++; | 466 | getDataSucess++; |
443 | lastFetchTSns = System.nanoTime(); | 467 | lastFetchTSns = System.nanoTime(); |
444 | lastRTns = lastFetchTSns - startTSns; | 468 | lastRTns = lastFetchTSns - startTSns; |
469 | getDataBadirad = 0; | ||
445 | return true; | 470 | return true; |
446 | } catch (Throwable e) { | 471 | } catch (Throwable e) { |
472 | getDataBadirad += 1; | ||
447 | Throwable lastCause = e.getCause(); | 473 | Throwable lastCause = e.getCause(); |
448 | Throwable thisCause = e; | 474 | Throwable thisCause = e; |
449 | while(lastCause != null) { thisCause = lastCause; lastCause = thisCause.getCause(); } | 475 | while(lastCause != null) { thisCause = lastCause; lastCause = thisCause.getCause(); } |
... | @@ -457,6 +483,8 @@ public class OraMon { | ... | @@ -457,6 +483,8 @@ public class OraMon { |
457 | } | 483 | } |
458 | lastFetchTSns = System.nanoTime(); | 484 | lastFetchTSns = System.nanoTime(); |
459 | lastRTns = lastFetchTSns - startTSns; | 485 | lastRTns = lastFetchTSns - startTSns; |
486 | if(getDataBadirad >= 3) reset(); | ||
487 | if(getDataBadirad >=10) setBlockedState(true); | ||
460 | throw (e); | 488 | throw (e); |
461 | } finally { | 489 | } finally { |
462 | lock.unlock(); | 490 | lock.unlock(); | ... | ... |
-
Please register or sign in to post a comment