Lagt till stöd att läsa in hela OSSTAT tabellen och därmed stöd för att
hantera flera tabeller i OraMon. Skapat räknare för busy percent och load. Load är dock en double i oracle tabellen och vi läser den som en long just nu så load fungerar inte. Busy percent fungerar dock fint. Även rättat en bug i getData genom att göra escape på citattecken då den returnerar oracle felmeddelanden (som kan innehålla citat tecken).
Showing
9 changed files
with
64 additions
and
11 deletions
No preview for this file type
JavaMonWeb/jetty/.gitignore
0 → 100644
No preview for this file type
... | @@ -84,7 +84,7 @@ public class OraMonRESTgetData extends HttpServlet { | ... | @@ -84,7 +84,7 @@ public class OraMonRESTgetData extends HttpServlet { |
84 | 84 | ||
85 | } catch (Throwable e) { | 85 | } catch (Throwable e) { |
86 | response.setStatus(500); | 86 | response.setStatus(500); |
87 | response.getWriter().println("{\"error\":true,\"msg\":\""+e.toString().replace("\n"," ").trim()+"\"}"); | 87 | response.getWriter().println("{\"error\":true,\"msg\":\""+e.toString().replace("\n"," ").replace("\"","\\\"").trim()+"\"}"); |
88 | e.printStackTrace(); | 88 | e.printStackTrace(); |
89 | } | 89 | } |
90 | } | 90 | } | ... | ... |
... | @@ -78,6 +78,9 @@ public class OraMonRESTgetMetrics extends HttpServlet { | ... | @@ -78,6 +78,9 @@ public class OraMonRESTgetMetrics extends HttpServlet { |
78 | sb.append("{\"name\":\"Cpus (#)" + aStr + "\",\"value\":" + item.getNumberOfCPUs() + "}"); | 78 | sb.append("{\"name\":\"Cpus (#)" + aStr + "\",\"value\":" + item.getNumberOfCPUs() + "}"); |
79 | sb.append(",{\"name\":\"Cpu Time (ms/s)" + aStr + "\",\"value\":" + item.getCPUTimePerSecond() + "}"); | 79 | sb.append(",{\"name\":\"Cpu Time (ms/s)" + aStr + "\",\"value\":" + item.getCPUTimePerSecond() + "}"); |
80 | sb.append(",{\"name\":\"Cpu Usage (%)" + aStr + "\",\"value\":" + item.getCPUPercent() + "}"); | 80 | sb.append(",{\"name\":\"Cpu Usage (%)" + aStr + "\",\"value\":" + item.getCPUPercent() + "}"); |
81 | sb.append(",{\"name\":\"OS Cpu Usage (%)" + aStr + "\",\"value\":" + item.getOsBusyPercent() + "}"); | ||
82 | sb.append(",{\"name\":\"OS Load (#)" + aStr + "\",\"value\":" + item.getOsLoad() + "}"); | ||
83 | sb.append(",{\"name\":\"OS Load per Cpu (#)" + aStr + "\",\"value\":" + item.getOsLoadPerCPU() + "}"); | ||
81 | sb.append(",{\"name\":\"Logical Reads (#/s)" + aStr + "\",\"value\":" + item.getLogicalReadsPerSecond() + "}"); | 84 | sb.append(",{\"name\":\"Logical Reads (#/s)" + aStr + "\",\"value\":" + item.getLogicalReadsPerSecond() + "}"); |
82 | sb.append(",{\"name\":\"Consistent Gets (#/s)" + aStr + "\",\"value\":" + item.getPerSecondValue("consistent gets") + "}"); | 85 | sb.append(",{\"name\":\"Consistent Gets (#/s)" + aStr + "\",\"value\":" + item.getPerSecondValue("consistent gets") + "}"); |
83 | sb.append(",{\"name\":\"DB Block Gets (#/s)" + aStr + "\",\"value\":" + item.getPerSecondValue("db block gets") + "}"); | 86 | sb.append(",{\"name\":\"DB Block Gets (#/s)" + aStr + "\",\"value\":" + item.getPerSecondValue("db block gets") + "}"); | ... | ... |
... | @@ -35,6 +35,19 @@ class Collector { | ... | @@ -35,6 +35,19 @@ class Collector { |
35 | } | 35 | } |
36 | } | 36 | } |
37 | 37 | ||
38 | public long getCurrentValue(String name) throws Throwable { | ||
39 | LongDelta myDelta = null; | ||
40 | for(int x = 0; x<list.size() && myDelta == null; x++) { | ||
41 | if(name.equals(list.get(x).name)) { | ||
42 | myDelta = list.get(x); | ||
43 | } | ||
44 | } | ||
45 | if(myDelta != null) | ||
46 | return myDelta.getCurrentValue(); | ||
47 | else | ||
48 | return 0; | ||
49 | } | ||
50 | |||
38 | public long getPerSecValue(String name) throws Throwable { | 51 | public long getPerSecValue(String name) throws Throwable { |
39 | LongDelta myDelta = null; | 52 | LongDelta myDelta = null; |
40 | for(int x = 0; x<list.size() && myDelta == null; x++) { | 53 | for(int x = 0; x<list.size() && myDelta == null; x++) { | ... | ... |
... | @@ -34,6 +34,10 @@ class LongDelta { | ... | @@ -34,6 +34,10 @@ class LongDelta { |
34 | return 0; | 34 | return 0; |
35 | } | 35 | } |
36 | } | 36 | } |
37 | public long getCurrentValue() throws Throwable { | ||
38 | if(this.curValue != null) return this.curValue; | ||
39 | else return 0; | ||
40 | } | ||
37 | public long getSeconds() throws Throwable { | 41 | public long getSeconds() throws Throwable { |
38 | if(this.lastFetch != null && this.curFetch != null) { | 42 | if(this.lastFetch != null && this.curFetch != null) { |
39 | long numSeconds = (this.curFetch.getTime() - this.lastFetch.getTime()) / 1000; | 43 | long numSeconds = (this.curFetch.getTime() - this.lastFetch.getTime()) / 1000; | ... | ... |
... | @@ -12,7 +12,11 @@ public class OraMon { | ... | @@ -12,7 +12,11 @@ public class OraMon { |
12 | String conPass = "passw0rd"; | 12 | String conPass = "passw0rd"; |
13 | String dbName = null; | 13 | String dbName = null; |
14 | 14 | ||
15 | Collector col = new Collector(); | 15 | public static final int SYSSTAT = 1; |
16 | public static final int OSSTAT = 2; | ||
17 | |||
18 | Collector colSysStat = new Collector(); | ||
19 | Collector colOsStat = new Collector(); | ||
16 | 20 | ||
17 | int getDataCalls = 0; | 21 | int getDataCalls = 0; |
18 | int getDataSucess = 0; | 22 | int getDataSucess = 0; |
... | @@ -53,13 +57,40 @@ public class OraMon { | ... | @@ -53,13 +57,40 @@ public class OraMon { |
53 | } | 57 | } |
54 | 58 | ||
55 | public long getPerSecondValue(String name) throws Throwable { | 59 | public long getPerSecondValue(String name) throws Throwable { |
56 | return col.getPerSecValue(name); | 60 | return getPerSecondValue(name, SYSSTAT); |
61 | } | ||
62 | |||
63 | public long getPerSecondValue(String name, int table) throws Throwable { | ||
64 | switch (table) { | ||
65 | case OSSTAT: | ||
66 | return colOsStat.getPerSecValue(name); | ||
67 | case SYSSTAT: | ||
68 | return colSysStat.getPerSecValue(name); | ||
69 | default: | ||
70 | return colSysStat.getPerSecValue(name); | ||
71 | } | ||
57 | } | 72 | } |
58 | 73 | ||
59 | public String getDBName() throws Throwable { | 74 | public String getDBName() throws Throwable { |
60 | return this.dbName; | 75 | return this.dbName; |
61 | } | 76 | } |
62 | 77 | ||
78 | public double getOsBusyPercent() throws Throwable { | ||
79 | double idle = getPerSecondValue("IDLE_TIME", OSSTAT); | ||
80 | double busy = getPerSecondValue("BUSY_TIME", OSSTAT); | ||
81 | return busy/(busy+idle); | ||
82 | } | ||
83 | |||
84 | public long getOsLoad() throws Throwable { | ||
85 | return colOsStat.getCurrentValue("LOAD"); | ||
86 | } | ||
87 | |||
88 | public double getOsLoadPerCPU() throws Throwable { | ||
89 | double num = this.numCpus; | ||
90 | double load = colOsStat.getCurrentValue("LOAD"); | ||
91 | return load / num; | ||
92 | } | ||
93 | |||
63 | public double getBufferCacheHitRatioPercent() throws Throwable { | 94 | public double getBufferCacheHitRatioPercent() throws Throwable { |
64 | double conGetsCache = getPerSecondValue("consistent gets from cache"); | 95 | double conGetsCache = getPerSecondValue("consistent gets from cache"); |
65 | double dbBlocksCache = getPerSecondValue("db block gets from cache"); | 96 | double dbBlocksCache = getPerSecondValue("db block gets from cache"); |
... | @@ -150,16 +181,16 @@ public class OraMon { | ... | @@ -150,16 +181,16 @@ public class OraMon { |
150 | rset.close(); | 181 | rset.close(); |
151 | } | 182 | } |
152 | 183 | ||
153 | //Get values for CPU calculation | 184 | //Get the entire V_$OSSTAT table from DB |
154 | rset = stmt.executeQuery("select value from V$OSSTAT where STAT_NAME = 'NUM_CPUS'"); | 185 | colOsStat.update(stmt.executeQuery("select systimestamp, stat_name, value from V$OSSTAT")); |
155 | rset.next(); | 186 | |
156 | this.numCpus = rset.getInt(1); | 187 | //Set numCpus |
157 | rset.close(); | 188 | this.numCpus = (int) colOsStat.getCurrentValue("NUM_CPUS"); |
158 | 189 | ||
159 | cpuTime.update(stmt.executeQuery("select systimestamp, value from V$SYS_TIME_MODEL where stat_name='DB CPU'"), true); | 190 | cpuTime.update(stmt.executeQuery("select systimestamp, value from V$SYS_TIME_MODEL where stat_name='DB CPU'"), true); |
160 | 191 | ||
161 | // Get the entire V_$SYSSTAT table from DB | 192 | //Get the entire V_$SYSSTAT table from DB |
162 | col.update(stmt.executeQuery("select systimestamp, name, value from V$SYSSTAT")); | 193 | colSysStat.update(stmt.executeQuery("select systimestamp, name, value from V$SYSSTAT")); |
163 | 194 | ||
164 | stmt.close(); | 195 | stmt.close(); |
165 | getDataSucess++; | 196 | getDataSucess++; | ... | ... |
-
Please register or sign in to post a comment