001package org.javasimon.jdbc4.jmx; 002 003import org.javasimon.Manager; 004import org.javasimon.Simon; 005import org.javasimon.SimonState; 006import org.javasimon.Stopwatch; 007import org.javasimon.utils.SimonUtils; 008 009/** 010 * Jdbc MXBean implementation. See {@link JdbcMXBean} for interface 011 * documentation. 012 * Most methods are implemented by calling the {@link Manager}. 013 * 014 * @author Radovan Sninsky 015 * @author <a href="mailto:virgo47@gmail.com">Richard "Virgo" Richter</a> 016 * @since 2 017 */ 018public class JdbcMXBeanImpl implements JdbcMXBean { 019 private Manager manager; 020 private String prefix; 021 022 /** 023 * MXBean constructor with prefix initialization to default ({@code org.javasimon.jdbc}). 024 * 025 * @param manager instance of {@link Manager}, typically {@code SimonManager.manager()}. 026 */ 027 public JdbcMXBeanImpl(Manager manager) { 028 this.manager = manager; 029 this.prefix = "org.javasimon.jdbc"; 030 } 031 032 /** 033 * MXBean constructor with custom prefix initialization. 034 * 035 * @param manager instance of {@link Manager}, typically {@code SimonManager.manager()}. 036 * @param prefix custom prefix 037 */ 038 public JdbcMXBeanImpl(Manager manager, String prefix) { 039 this.manager = manager; 040 this.prefix = prefix; 041 } 042 043 public String getPrefix() { 044 return prefix; 045 } 046 047 public void setPrefix(String value) { 048 prefix = value; 049 } 050 051 public void enableMonitoring() { 052 Simon s = manager.getSimon(prefix); 053 if (s != null) { 054 s.setState(SimonState.ENABLED, true); 055 } 056 } 057 058 public void disableMonitoring() { 059 Simon s = manager.getSimon(prefix); 060 if (s != null) { 061 s.setState(SimonState.DISABLED, true); 062 } 063 } 064 065 public boolean isMonitoringEnabled() { 066 return manager.getSimon(prefix) != null && manager.getSimon(prefix).isEnabled(); 067 } 068 069 public JdbcObjectInfo connectionsStat() { 070 Stopwatch s = manager.getStopwatch(prefix + ".conn"); 071 072 if (s != null) { 073 return new JdbcObjectInfo( 074 s.getActive(), 075 s.getMaxActive(), 076 s.getMaxActiveTimestamp(), 077 s.getCounter(), 078 s.getCounter() - s.getActive(), 079 s.getMin(), 080 s.getMax(), 081 s.getTotal() 082 ); 083 } 084 return null; 085 } 086 087 public JdbcObjectInfo statementsStat() { 088 Stopwatch s = manager.getStopwatch(prefix + ".stmt"); 089 090 if (s != null) { 091 return new JdbcObjectInfo( 092 s.getActive(), 093 s.getMaxActive(), 094 s.getMaxActiveTimestamp(), 095 s.getCounter(), 096 s.getCounter() - s.getActive(), 097 s.getMin(), 098 s.getMax(), 099 s.getTotal() 100 ); 101 } 102 return null; 103 } 104 105 public JdbcObjectInfo resultsetsStat() { 106 return null; 107 } 108 109 public String[] getSqlCommands() { 110 Simon s = manager.getSimon(prefix + ".sql"); 111 if (s != null) { 112 String[] names = new String[s.getChildren().size()]; 113 int i = 0; 114 for (Simon sn : s.getChildren()) { 115 names[i++] = SimonUtils.localName(sn.getName()); 116 } 117 return names; 118 } else { 119 return new String[0]; 120 } 121 } 122 123 public org.javasimon.jmx.StopwatchSample getSqlCommandStat(String cmdId) { 124 if (manager.getSimon(prefix + ".sql." + cmdId) != null) { 125 return new org.javasimon.jmx.StopwatchSample( 126 manager.getStopwatch(prefix + ".sql." + cmdId).sample()); 127 } 128 return null; 129 } 130 131 public String[] getSqls(String cmdId) { 132 Simon s = manager.getSimon(prefix + ".sql." + cmdId); 133 if (s != null) { 134 String[] names = new String[s.getChildren().size()]; 135 int i = 0; 136 for (Simon sn : s.getChildren()) { 137 names[i++] = SimonUtils.localName(sn.getName()); 138 } 139 return names; 140 } else { 141 return new String[0]; 142 } 143 } 144 145 public org.javasimon.jmx.StopwatchSample getSqlStat(String sqlId) { 146 if (manager != null) { 147 for (String simonName : manager.getSimonNames()) { 148 if (SimonUtils.localName(simonName).equals(sqlId)) { 149 return new org.javasimon.jmx.StopwatchSample( 150 manager.getStopwatch(simonName).sample()); 151 } 152 } 153 } 154 return null; 155 } 156}