├── .classpath
├── .gitignore
├── README.md
├── build.xml
├── deploy.sh
├── designnotes.txt
├── hazelcast.xml
├── jamon
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── com
│ │ ├── jamonapi
│ │ ├── ActivityStats.java
│ │ ├── BasicNanoTimingMonitor.java
│ │ ├── BasicTimingMonitor.java
│ │ ├── CompositeListener.java
│ │ ├── CopyJAMonListener.java
│ │ ├── Counter.java
│ │ ├── DecoMon.java
│ │ ├── FactoryDisabled.java
│ │ ├── FactoryEnabled.java
│ │ ├── FrequencyDist.java
│ │ ├── FrequencyDistBase.java
│ │ ├── FrequencyDistImp.java
│ │ ├── JAMonArrayBufferListener.java
│ │ ├── JAMonBufferListener.java
│ │ ├── JAMonDetailValue.java
│ │ ├── JAMonFilter.java
│ │ ├── JAMonListener.java
│ │ ├── JAMonListenerFactory.java
│ │ ├── JamonPropertiesLoader.java
│ │ ├── ListenerType.java
│ │ ├── Listeners.java
│ │ ├── Mon.java
│ │ ├── MonInternals.java
│ │ ├── MonKey.java
│ │ ├── MonKeyBase.java
│ │ ├── MonKeyImp.java
│ │ ├── MonKeyItem.java
│ │ ├── MonKeyItemBase.java
│ │ ├── Monitor.java
│ │ ├── MonitorComposite.java
│ │ ├── MonitorCompositeIterator.java
│ │ ├── MonitorFactory.java
│ │ ├── MonitorFactoryInterface.java
│ │ ├── MonitorImp.java
│ │ ├── MonitorInt.java
│ │ ├── NExtremeArrayBufferHolder.java
│ │ ├── NullMonitor.java
│ │ ├── Range.java
│ │ ├── RangeBase.java
│ │ ├── RangeHolder.java
│ │ ├── RangeImp.java
│ │ ├── RowData.java
│ │ ├── SharedJAMonBufferListener.java
│ │ ├── TestClassPerformance.java
│ │ ├── TimeMon.java
│ │ ├── TimeMon2.java
│ │ ├── TimeMonNano.java
│ │ ├── aop
│ │ │ ├── JAMonEJBInterceptor.java
│ │ │ ├── general
│ │ │ │ └── JAMonInterceptor.java
│ │ │ └── spring
│ │ │ │ ├── JamonAopKeyHelper.java
│ │ │ │ ├── JamonAopKeyHelperInt.java
│ │ │ │ ├── JamonAopKeyHelperSimple.java
│ │ │ │ ├── JamonAspect.java
│ │ │ │ ├── MonitorAnnotation.java
│ │ │ │ └── SystemAopPointcutDefinitions.java
│ │ ├── distributed
│ │ │ ├── DistributedUtils.java
│ │ │ ├── HazelcastFilePersister.java
│ │ │ ├── HazelcastPersister.java
│ │ │ ├── HazelcastPersisterImp.java
│ │ │ ├── JamonDataPersister.java
│ │ │ ├── JamonDataPersisterDecorator.java
│ │ │ ├── JamonDataPersisterFactory.java
│ │ │ ├── JamonDataPersisterTimerTask.java
│ │ │ ├── JamonServletContextListener.java
│ │ │ ├── LocalJamonDataPersister.java
│ │ │ ├── LocalJamonFilePersister.java
│ │ │ └── MonitorCompositeCombiner.java
│ │ ├── http
│ │ │ ├── HttpMon.java
│ │ │ ├── HttpMonFactory.java
│ │ │ ├── HttpMonItem.java
│ │ │ ├── HttpMonManage.java
│ │ │ ├── HttpMonNull.java
│ │ │ ├── HttpMonRequest.java
│ │ │ ├── JAMonJettyHandler.java
│ │ │ ├── JAMonJettyHandlerNew.java
│ │ │ ├── JAMonServletFilter.java
│ │ │ ├── JAMonTomcatValve.java
│ │ │ ├── JettyHttpMonFactory.java
│ │ │ └── JettyHttpMonItem.java
│ │ ├── jmx
│ │ │ ├── ExceptionDeltaMXBeanImp.java
│ │ │ ├── ExceptionMXBean.java
│ │ │ ├── ExceptionMXBeanImp.java
│ │ │ ├── FreeDiskSpace.java
│ │ │ ├── GcMXBean.java
│ │ │ ├── GcMXBeanImp.java
│ │ │ ├── HttpStatusDeltaMXBeanImp.java
│ │ │ ├── HttpStatusMXBean.java
│ │ │ ├── HttpStatusMXBeanImp.java
│ │ │ ├── JamonJmxBeanProperty.java
│ │ │ ├── JamonJmxBeanPropertyDefault.java
│ │ │ ├── JamonMXBean.java
│ │ │ ├── JamonMXBeanImp.java
│ │ │ ├── JmxUtils.java
│ │ │ ├── Log4jDeltaMXBeanImp.java
│ │ │ ├── Log4jMXBean.java
│ │ │ ├── Log4jMXBeanImp.java
│ │ │ ├── MonitorDelta.java
│ │ │ ├── MonitorDeltaMXBeanImp.java
│ │ │ ├── MonitorDeltaMsMXBeanImp.java
│ │ │ ├── MonitorMXBean.java
│ │ │ ├── MonitorMXBeanFactory.java
│ │ │ ├── MonitorMXBeanImp.java
│ │ │ ├── MonitorMsMXBean.java
│ │ │ └── MonitorMsMXBeanImp.java
│ │ ├── log4j
│ │ │ └── JAMonAppender.java
│ │ ├── package.html
│ │ ├── proxy
│ │ │ ├── JAMonDataSource.java
│ │ │ ├── JAMonDriver.java
│ │ │ ├── JDBCMonProxy.java
│ │ │ ├── MonProxy.java
│ │ │ ├── MonProxyFactory.java
│ │ │ ├── MonProxyFactoryImp.java
│ │ │ ├── MonProxyLabeler.java
│ │ │ ├── MonProxyLabelerInt.java
│ │ │ ├── Params.java
│ │ │ └── SQLDeArger.java
│ │ └── utils
│ │ │ ├── AppBaseException.java
│ │ │ ├── AppMap.java
│ │ │ ├── ArrayElementComparator.java
│ │ │ ├── ArraySorter.java
│ │ │ ├── BufferHolder.java
│ │ │ ├── BufferList.java
│ │ │ ├── BufferListDetailData.java
│ │ │ ├── Command.java
│ │ │ ├── CommandIterator.java
│ │ │ ├── DateMathComparator.java
│ │ │ ├── DefaultGeneralizer.java
│ │ │ ├── DetailData.java
│ │ │ ├── DetailDataWrapper.java
│ │ │ ├── EnumIterator.java
│ │ │ ├── FIFOBufferHolder.java
│ │ │ ├── FileUtils.java
│ │ │ ├── Generalizer.java
│ │ │ ├── JAMonArrayComparator.java
│ │ │ ├── JAMonComparator.java
│ │ │ ├── LocaleContext.java
│ │ │ ├── Logger.java
│ │ │ ├── Misc.java
│ │ │ ├── NExtremeBufferHolder.java
│ │ │ ├── NumberDelta.java
│ │ │ ├── SerializationUtils.java
│ │ │ ├── ToArray.java
│ │ │ └── package.html
│ │ ├── jamontomcat
│ │ ├── JAMonTomcat55Valve.java
│ │ └── JAMonTomcat6Valve.java
│ │ └── overview.html
│ └── test
│ ├── java
│ └── com
│ │ └── jamonapi
│ │ ├── BasicNanoTimingMonitorTest.java
│ │ ├── BasicTimingMonitorTest.java
│ │ ├── CompositeListenerTest.java
│ │ ├── CounterTest.java
│ │ ├── JAMonListenerFactoryTest.java
│ │ ├── JamonPropertiesLoaderTest.java
│ │ ├── ListenerTypeTest.java
│ │ ├── MonKeyBaseTest.java
│ │ ├── MonitorCompositeIteratorTest.java
│ │ ├── MonitorCompositeTest.java
│ │ ├── MonitorFactoryTest.java
│ │ ├── MultiThreadedTest.java
│ │ ├── MultiThreadedTestHelper.java
│ │ ├── TimeMon2Test.java
│ │ ├── aop
│ │ ├── general
│ │ │ └── JAMonInterceptorTest.java
│ │ └── spring
│ │ │ ├── HelloSpringBean.java
│ │ │ ├── JamonAopKeyHelperSimpleTest.java
│ │ │ ├── JamonAopKeyHelperTest.java
│ │ │ ├── JamonAspectTest.java
│ │ │ └── MonitorMe.java
│ │ ├── distributed
│ │ ├── DistributedJamonHazelcastTest.java
│ │ ├── DistributedUtilsTest.java
│ │ ├── JamonDataPersisterDecoratorTest.java
│ │ ├── JamonDataPersisterFactoryTest.java
│ │ ├── JamonDataPersisterTimerTaskTest.java
│ │ ├── LocalJamonDataPersisterTest.java
│ │ ├── LocalJamonFilePersisterTest.java
│ │ └── MonitorCompositeCombinerTest.java
│ │ ├── http
│ │ └── HttpMonItemTest.java
│ │ ├── jmx
│ │ ├── ExceptionDeltaMXBeanImpTest.java
│ │ ├── ExceptionMXBeanImpTest.java
│ │ ├── FreeDiskSpaceTest.java
│ │ ├── GcMXBeanImpTest.java
│ │ ├── HttpStatusDeltaMXBeanImpTest.java
│ │ ├── HttpStatusMXBeanImpTest.java
│ │ ├── JamonJmxBeanPropertyDefaultTest.java
│ │ ├── JamonMXBeanImpTest.java
│ │ ├── JmxUtilsTest.java
│ │ ├── Log4jMXBeanImpTest.java
│ │ ├── MonitorDeltaMXBeanImpTest.java
│ │ ├── MonitorDeltaMsMXBeanImpTest.java
│ │ ├── MonitorDeltaTest.java
│ │ ├── MonitorMXBeanFactoryTest.java
│ │ ├── MonitorMXBeanImpTest.java
│ │ └── MonitorMsMXBeanImpTest.java
│ │ ├── log4j
│ │ └── Log4jTest.java
│ │ ├── proxy
│ │ ├── JAMonDriverTest.java
│ │ ├── MonProxyTest.java
│ │ └── SQLDeArgerTest.java
│ │ └── utils
│ │ ├── AppMapTest.java
│ │ ├── ArraySorterTest.java
│ │ ├── BufferListTest.java
│ │ ├── CommandIteratorTest.java
│ │ ├── DateMathComparatorTest.java
│ │ ├── FileUtilsTest.java
│ │ ├── Log4jUtils.java
│ │ ├── MiscTest.java
│ │ ├── NumberDeltaTest.java
│ │ └── SerializationUtilsTest.java
│ └── resources
│ ├── applicationContext.xml
│ ├── hazelcast_bak.xml
│ ├── jamonapi.properties
│ ├── jamonapi2.properties
│ ├── log4j2.xml
│ ├── log4j2_defaults.xml
│ └── minimalApplicationContext.xml
├── jamon_osmon
├── pom.xml
└── src
│ └── main
│ └── resources
│ └── osmon
│ ├── httpprog.sh
│ ├── jadd.sh
│ ├── jamon_readme.txt
│ ├── jencode.sh
│ ├── jgetdata.sh
│ ├── jgetmon.sh
│ ├── jreset.sh
│ ├── jskip.sh
│ ├── jstart.sh
│ ├── jstop.sh
│ ├── jtest.sh
│ └── urlencode.sed
├── jamon_war
├── pom.xml
└── src
│ └── main
│ └── webapp
│ ├── META-INF
│ └── context.xml
│ ├── WEB-INF
│ ├── lib
│ │ ├── fdsapi-1.2.jar
│ │ ├── hsqldb.jar
│ │ ├── jakarta-oro-2.0.8.jar
│ │ └── xss-html-filter-1.5.jar
│ ├── web.warContent
│ └── web.xml
│ ├── css
│ ├── JAMonStyles.css
│ └── formatteddataset.css
│ ├── exceptions.htm
│ ├── exceptions.jsp
│ ├── images
│ ├── asc.gif
│ ├── desc.gif
│ ├── fds_banner2.jpg
│ ├── fds_demodb_er.jpg
│ ├── fds_logo_small.jpg
│ ├── jamon_banner3.jpg
│ ├── jamon_small.jpg
│ └── monmodify.gif
│ ├── jamonadmin.jsp
│ ├── jamonhelp.htm
│ ├── log4j.jsp
│ ├── menu.jsp
│ ├── mondetail.jsp
│ ├── mondetailhelp.htm
│ ├── monmanage.jsp
│ ├── query.html
│ ├── query.jsp
│ ├── sleep.jsp
│ ├── sql.htm
│ └── sql.jsp
├── pom.xml
├── push.sh
├── sourceforge_files.sh
└── src
├── JAMonUsersGuide
├── BroadVision_sample.html
├── ColdFusion_sample.html
├── JAMonAdmin.html
├── JAMonDemoOutput.html
├── JAMonLicense.html
├── JAMonStyles.css
├── JAMon_PB.zip
├── MonitorFilter.html
├── WebSphereOro.html
├── additional_example.html
├── asc.gif
├── console1.gif
├── desc.gif
├── distributed_jamon.html
├── distributed_jamon1.png
├── distributed_jamon_stacktrace.png
├── fds_logo_fulltext_blue2_150.jpg
├── http_monitoring.html
├── httpsession_sample.html
├── index.html
├── jamon1.jpg
├── jamon271.html
├── jamon272.html
├── jamon_22.ppt
├── jamon_banner3.jpg
├── jamon_docs.css
├── jamon_ejb.html
├── jamon_exception_bufflistener.jpg
├── jamon_exception_details_aop.png
├── jamon_exception_modify.jpg
├── jamon_httpmon.png
├── jamon_httpmon_details.jpg
├── jamon_interface.html
├── jamon_jmx_custommetrics.png
├── jamon_jmx_deltas.png
├── jamon_jmx_deltas_log4j.png
├── jamon_jmx_exceptions.png
├── jamon_jmx_gc.png
├── jamon_jmx_gc_details.png
├── jamon_jmx_gc_mem.png
├── jamon_jmx_gc_scavenge.png
├── jamon_jmx_gc_time.png
├── jamon_jmx_httpstatuscodes.png
├── jamon_jmx_log4j.png
├── jamon_jmx_managing.png
├── jamon_jmx_pagerequests.png
├── jamon_jmx_sql.png
├── jamon_listener1.jpg
├── jamon_listener2.jpg
├── jamon_listener3.jpg
├── jamon_listener_modify.jpg
├── jamon_log4j_bufflistener.jpg
├── jamon_log4j_generalize1.jpg
├── jamon_log4j_generalize2.jpg
├── jamon_log4j_min.jpg
├── jamon_servlet_filter.html
├── jamon_spring_aop.jpg
├── jamon_sql.html
├── jamon_sql_details.png
├── jamon_sql_jdbc.png
├── jamon_sql_summary.png
├── jamon_war.html
├── jamon_war_admin.png
├── jamon_war_menu.png
├── jamon_war_ranges.png
├── jamonlisteners.html
├── javadoc
│ ├── allclasses-frame.html
│ ├── allclasses-noframe.html
│ ├── com
│ │ └── jamonapi
│ │ │ ├── AccumulateMonitor.html
│ │ │ ├── AccumulateMonitorInterface.html
│ │ │ ├── ActiveStatsMonitor.html
│ │ │ ├── BaseMonitor.html
│ │ │ ├── BasicTimingMonitor.html
│ │ │ ├── LastAccessMonitor.html
│ │ │ ├── MinimalMonitor.html
│ │ │ ├── Monitor.html
│ │ │ ├── MonitorComposite.html
│ │ │ ├── MonitorConverter.html
│ │ │ ├── MonitorFactory.html
│ │ │ ├── MonitorFactoryInterface.html
│ │ │ ├── MonitorLeafFactory.html
│ │ │ ├── MonitorLeafFactoryInterface.html
│ │ │ ├── MonitorReportInterface.html
│ │ │ ├── NullAccumulateMonitor.html
│ │ │ ├── NullMonitor.html
│ │ │ ├── TestClass.html
│ │ │ ├── TestClassPerformance.html
│ │ │ ├── TimeStatsDistMonitor.html
│ │ │ ├── TimeStatsMonitor.html
│ │ │ ├── TimingMonitor.html
│ │ │ ├── package-frame.html
│ │ │ ├── package-summary.html
│ │ │ ├── package-tree.html
│ │ │ └── utils
│ │ │ ├── AppBaseException.html
│ │ │ ├── AppConstants.html
│ │ │ ├── AppMap.html
│ │ │ ├── Command.html
│ │ │ ├── CommandIterator.html
│ │ │ ├── CompositeNode.html
│ │ │ ├── EnumIterator.html
│ │ │ ├── FileUtils.html
│ │ │ ├── LeafNode.html
│ │ │ ├── Logger.html
│ │ │ ├── Misc.html
│ │ │ ├── NodeTree.html
│ │ │ ├── ResultSetUtils.html
│ │ │ ├── package-frame.html
│ │ │ ├── package-summary.html
│ │ │ └── package-tree.html
│ ├── constant-values.html
│ ├── deprecated-list.html
│ ├── help-doc.html
│ ├── index-all.html
│ ├── index.html
│ ├── overview-frame.html
│ ├── overview-summary.html
│ ├── overview-tree.html
│ ├── package-list
│ ├── packages.html
│ ├── serialized-form.html
│ └── stylesheet.css
├── jboss_server.xml
├── jetty.xml
├── jmx_jamon.html
├── log4j_jamonappender.html
├── log4j_jamonappender.xml
├── presentation
│ ├── jamon.htm
│ └── jamon_files
│ │ ├── buttons.gif
│ │ ├── error.htm
│ │ ├── filelist.xml
│ │ ├── frame.htm
│ │ ├── fullscreen.htm
│ │ ├── master01.htm
│ │ ├── master04.htm
│ │ ├── master04.xml
│ │ ├── master04_image001.jpg
│ │ ├── master04_image029.gif
│ │ ├── master04_stylesheet.css
│ │ ├── notes_flag.gif
│ │ ├── oledata.mso
│ │ ├── outline.htm
│ │ ├── pres.xml
│ │ ├── preview.wmf
│ │ ├── script.js
│ │ ├── slide0001.htm
│ │ ├── slide0001_image031.jpg
│ │ ├── slide0001_image032.jpg
│ │ ├── slide0061.htm
│ │ ├── slide0063.htm
│ │ ├── slide0063_image057.png
│ │ ├── slide0063_image058.jpg
│ │ ├── slide0063_image059.png
│ │ ├── slide0063_image060.jpg
│ │ ├── slide0085.htm
│ │ ├── slide0085_image066.jpg
│ │ ├── slide0086.htm
│ │ ├── slide0086_image036.wmz
│ │ ├── slide0086_image037.gif
│ │ ├── slide0086_image038.emz
│ │ ├── slide0086_image039.gif
│ │ ├── slide0112.htm
│ │ ├── slide0112_image051.png
│ │ ├── slide0112_image052.jpg
│ │ ├── slide0112_image053.gif
│ │ ├── slide0112_image054.jpg
│ │ ├── slide0114.htm
│ │ ├── slide0114_image045.png
│ │ ├── slide0114_image046.jpg
│ │ ├── slide0114_image047.gif
│ │ ├── slide0114_image048.png
│ │ ├── slide0114_image049.jpg
│ │ ├── slide0115.htm
│ │ ├── slide0120.htm
│ │ ├── slide0121.htm
│ │ ├── slide0121_image062.gif
│ │ ├── slide0121_image063.png
│ │ ├── slide0121_image064.jpg
│ │ ├── slide0122.htm
│ │ ├── slide0122_image041.gif
│ │ ├── slide0122_image042.png
│ │ ├── slide0122_image043.jpg
│ │ ├── v3_blank_notes.htm
│ │ ├── v3_document.htm
│ │ ├── v3_endshow.htm
│ │ ├── v3_master04_background.jpg
│ │ ├── v3_master04_image003.gif
│ │ ├── v3_master04_image005.gif
│ │ ├── v3_master04_image007.gif
│ │ ├── v3_master04_image010.gif
│ │ ├── v3_master04_image013.gif
│ │ ├── v3_master04_image015.gif
│ │ ├── v3_master04_image017.gif
│ │ ├── v3_master04_image019.gif
│ │ ├── v3_master04_image023.gif
│ │ ├── v3_master04_image026.gif
│ │ ├── v3_master04_image028.gif
│ │ ├── v3_navigation_bar.htm
│ │ ├── v3_next_active.gif
│ │ ├── v3_next_disabled.gif
│ │ ├── v3_outline_collapse.gif
│ │ ├── v3_outline_collapsed.htm
│ │ ├── v3_outline_expand.gif
│ │ ├── v3_outline_expanded.htm
│ │ ├── v3_outline_navigation_bar.htm
│ │ ├── v3_prev_active.gif
│ │ ├── v3_prev_disabled.gif
│ │ ├── v3_slide0001.htm
│ │ ├── v3_slide0001_image002.jpg
│ │ ├── v3_slide0001_notes_pane.htm
│ │ ├── v3_slide0061.htm
│ │ ├── v3_slide0061_image018.gif
│ │ ├── v3_slide0063.htm
│ │ ├── v3_slide0063_image020.jpg
│ │ ├── v3_slide0063_image021.jpg
│ │ ├── v3_slide0063_image022.gif
│ │ ├── v3_slide0085.htm
│ │ ├── v3_slide0085_image027.jpg
│ │ ├── v3_slide0086.htm
│ │ ├── v3_slide0086_image008.gif
│ │ ├── v3_slide0086_image009.gif
│ │ ├── v3_slide0086_notes_pane.htm
│ │ ├── v3_slide0112.htm
│ │ ├── v3_slide0112_image016.jpg
│ │ ├── v3_slide0112_notes_pane.htm
│ │ ├── v3_slide0114.htm
│ │ ├── v3_slide0114_image014.gif
│ │ ├── v3_slide0114_notes_pane.htm
│ │ ├── v3_slide0115.htm
│ │ ├── v3_slide0115_image004.gif
│ │ ├── v3_slide0115_notes_pane.htm
│ │ ├── v3_slide0120.htm
│ │ ├── v3_slide0120_image006.gif
│ │ ├── v3_slide0121.htm
│ │ ├── v3_slide0121_image024.gif
│ │ ├── v3_slide0121_image025.jpg
│ │ ├── v3_slide0122.htm
│ │ ├── v3_slide0122_image011.gif
│ │ ├── v3_slide0122_image012.jpg
│ │ ├── v3_slide0122_notes_pane.htm
│ │ └── v3_space.gif
├── spring_aop_exceptions.png
├── spring_aop_monitoring.html
├── testingwithjamon.html
├── testingwithjamon.rtf
└── tomcat6_server.xml
├── ant
└── build.xml
├── doc
└── javadoc
│ ├── allclasses-frame.html
│ ├── allclasses-noframe.html
│ ├── com
│ └── jamonapi
│ │ ├── BasicNanoTimingMonitor.html
│ │ ├── BasicTimingMonitor.html
│ │ ├── CompositeListener.html
│ │ ├── CopyJAMonListener.html
│ │ ├── FactoryDisabled.html
│ │ ├── FactoryEnabled.html
│ │ ├── FrequencyDist.html
│ │ ├── JAMonArrayBufferListener.html
│ │ ├── JAMonBufferListener.HeaderInfo.html
│ │ ├── JAMonBufferListener.html
│ │ ├── JAMonDetailValue.html
│ │ ├── JAMonFilter.html
│ │ ├── JAMonListener.html
│ │ ├── JAMonListenerFactory.html
│ │ ├── ListenerType.html
│ │ ├── Mon.html
│ │ ├── MonKey.html
│ │ ├── MonKeyBase.html
│ │ ├── MonKeyImp.html
│ │ ├── MonKeyItem.html
│ │ ├── MonKeyItemBase.html
│ │ ├── Monitor.html
│ │ ├── MonitorComposite.html
│ │ ├── MonitorFactory.html
│ │ ├── MonitorFactoryInterface.html
│ │ ├── NExtremeArrayBufferHolder.html
│ │ ├── NullMonitor.html
│ │ ├── Range.html
│ │ ├── RangeHolder.html
│ │ ├── SharedJAMonBufferListener.html
│ │ ├── TestClassPerformance.html
│ │ ├── http
│ │ ├── HttpMon.html
│ │ ├── HttpMonFactory.html
│ │ ├── JAMonJettyHandler.html
│ │ ├── JAMonServletFilter.html
│ │ ├── JAMonTomcatValve.html
│ │ ├── JettyHttpMonFactory.html
│ │ ├── package-frame.html
│ │ ├── package-summary.html
│ │ └── package-tree.html
│ │ ├── log4j
│ │ ├── JAMonAppender.html
│ │ ├── Log4jBufferListener.html
│ │ ├── Log4jMonKey.html
│ │ ├── package-frame.html
│ │ ├── package-summary.html
│ │ └── package-tree.html
│ │ ├── package-frame.html
│ │ ├── package-summary.html
│ │ ├── package-tree.html
│ │ ├── proxy
│ │ ├── JAMonDataSource.html
│ │ ├── JAMonDriver.html
│ │ ├── MonProxy.html
│ │ ├── MonProxyFactory.html
│ │ ├── MonProxyFactoryImp.html
│ │ ├── MonProxyLabeler.html
│ │ ├── MonProxyLabelerInt.html
│ │ ├── SQLDeArger.html
│ │ ├── package-frame.html
│ │ ├── package-summary.html
│ │ └── package-tree.html
│ │ └── utils
│ │ ├── AppBaseException.html
│ │ ├── AppMap.html
│ │ ├── BufferHolder.html
│ │ ├── BufferList.html
│ │ ├── BufferListDetailData.html
│ │ ├── Command.html
│ │ ├── CommandIterator.html
│ │ ├── DateMathComparator.html
│ │ ├── DefaultGeneralizer.html
│ │ ├── DetailData.html
│ │ ├── DetailDataWrapper.html
│ │ ├── EnumIterator.html
│ │ ├── FIFOBufferHolder.html
│ │ ├── FileUtils.html
│ │ ├── Generalizer.html
│ │ ├── JAMonArrayComparator.html
│ │ ├── JAMonComparator.html
│ │ ├── LocaleContext.html
│ │ ├── Logger.html
│ │ ├── Misc.html
│ │ ├── NExtremeBufferHolder.html
│ │ ├── ToArray.html
│ │ ├── package-frame.html
│ │ ├── package-summary.html
│ │ └── package-tree.html
│ ├── constant-values.html
│ ├── deprecated-list.html
│ ├── help-doc.html
│ ├── index-all.html
│ ├── index.html
│ ├── overview-frame.html
│ ├── overview-summary.html
│ ├── overview-tree.html
│ ├── package-list
│ ├── resources
│ └── inherit.gif
│ ├── serialized-form.html
│ └── stylesheet.css
├── docs
├── .#jamon_intro.key.1.1
├── jamon.ppt
├── jamon271.pages
├── jamon272.pages
├── jamon_demo.key
├── jamon_intro.key
├── jamonusers
│ ├── jamonhsqldb.doc
│ ├── jamonhsqldb_changes.doc
│ └── jamonprbreference.ppt
└── osmonitoring_demo.key
├── images
├── jamon1.jpg
├── jamon1_oval.jpg
├── jamon_banner3.jpg
└── jamon_small.jpg
└── web.xml
/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
Sample call: 6 | *
{@code 7 | * BasicTimingMonitor mon=new BasicNanoTimingMonitor(); 8 | * mon.start(); 9 | * ...code being monitored... 10 | * mon.stop(); 11 | * }12 | * 13 | **/ 14 | 15 | final public class BasicNanoTimingMonitor { 16 | // Note. this class does not implement the Monitor interface and is not used in the 17 | // rest of the monitor framework. However it can be used if performance comparable 18 | // to simple times to currentTimeMillis() are required. 19 | private long startTime; 20 | 21 | public void start() { 22 | startTime=System.nanoTime(); 23 | } 24 | 25 | public long stop() { 26 | return System.nanoTime()-startTime; 27 | } 28 | } 29 | 30 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/BasicTimingMonitor.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; 2 | 3 | /** The most basic of timing Monitors. It is very close in performance to making straight calls to System.currentTimeMillis(). 4 | * This class is used primarily for comparison to the best case performance numbers for all of the other Monitors, 5 | * however it may also be used to make timing measurements. 6 | * 7 | *
BasicTimingMonitors are not thread safe. Monitors returned via MonitorFactory are.
8 | * 9 | *Sample call:
10 | *{@code 11 | * BasicTimingMonitor mon=new BasicTimingMonitor(); 12 | * mon.start(); 13 | * ...code being monitored... 14 | * mon.stop(); 15 | * }16 | **/ 17 | 18 | final public class BasicTimingMonitor { 19 | // Note. this class does not implement the Monitor interface and is not used in the 20 | // rest of the monitor framework. However it can be used if performance comparable 21 | // to simple times to currentTimeMillis() are required. 22 | private long startTime; 23 | 24 | public void start() { 25 | startTime=System.currentTimeMillis(); 26 | } 27 | 28 | public long stop() { 29 | return System.currentTimeMillis()-startTime; 30 | } 31 | } 32 | 33 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/CopyJAMonListener.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; 2 | 3 | /** A listener implements this interface if it also can act as a factory. copy() 4 | * should return an exact copy of the JAMonListener 5 | * 6 | * @author steve souza 7 | */ 8 | public interface CopyJAMonListener { 9 | public JAMonListener copy(); 10 | } 11 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/Counter.java: -------------------------------------------------------------------------------- 1 | 2 | package com.jamonapi; 3 | 4 | import java.io.Serializable; 5 | 6 | /** 7 | * Simple counter class used to track activity stats 8 | * 9 | * Created on December 16, 2005, 9:11 PM 10 | * @author ssouza 11 | */ 12 | 13 | final class Counter implements Serializable { 14 | 15 | private static final long serialVersionUID = 278L; 16 | private double count; 17 | private boolean enabled=true; 18 | 19 | /** explicitly set the counters value */ 20 | public void setCount(double value) { 21 | if (enabled) { 22 | count=value; 23 | } 24 | } 25 | 26 | /** return the counters value 27 | */ 28 | public double getCount() { 29 | if (enabled) { 30 | return count; 31 | } else 32 | return 0; 33 | 34 | } 35 | 36 | /** decrement the counters value 37 | */ 38 | public void decrement() { 39 | if (enabled) { 40 | --count; 41 | } 42 | } 43 | 44 | /** increment the counters value 45 | */ 46 | public void increment() { 47 | if (enabled) { 48 | ++count; 49 | } 50 | } 51 | 52 | /** increment the counters value and return it 53 | */ 54 | public double incrementAndReturn() { 55 | if (enabled) { 56 | return ++count; 57 | } else 58 | return 0; 59 | } 60 | 61 | /** enable (true) or disable (false) the counter */ 62 | public void enable(boolean enable) { 63 | this.enabled=enable; 64 | } 65 | 66 | /** return true if the counter is enabled */ 67 | public boolean isEnabled() { 68 | return enabled; 69 | } 70 | 71 | } 72 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/DecoMon.java: -------------------------------------------------------------------------------- 1 | 2 | package com.jamonapi; 3 | 4 | /** 5 | * This class is a wrapper for the internal data structure of a Monitor. It adds info specific to this monitor 6 | * too such as the details of the key. However, it uses the data of the underlying monitor (such as hits/total/avg etc). 7 | * DecoMon stood for decorator though I suspec that this is no longer the decorator pattern. It seems to be a useful 8 | * pattern of passing around hte internals and merging them with another classes differences though I am not sure what that 9 | * pattern is (similar to flyweight but with different intent). 10 | * 11 | * @author ssouza 12 | * 13 | */ 14 | 15 | class DecoMon extends MonitorImp { 16 | 17 | private static final long serialVersionUID = 278L; 18 | 19 | // The two following fields are unique to this instance. MonInternals are shared 20 | // by all monitors with this same logical key. 21 | private MonKey decoKey; 22 | 23 | /** Creates a new instance of BaseMon. It takes a reference to the enabled monitor it calls */ 24 | public DecoMon(MonInternals monData) { 25 | super(monData); 26 | 27 | } 28 | 29 | public DecoMon(MonKey key, MonInternals monData) { 30 | super(monData); 31 | this.decoKey=key; 32 | } 33 | 34 | /** Get the key for this monitor. Example: MonKey could contain "pageHits", "ms." */ 35 | @Override 36 | public MonKey getMonKey() { 37 | if (decoKey!=null) 38 | return decoKey; 39 | else 40 | return monData.key; 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/FrequencyDist.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; 2 | 3 | /** 4 | * FrequencyDist's are what Ranges are made of. They are buckets of aggregate stats 5 | * within the monitor. For example a FrequencyDist for ms. may be 0-10 ms., 20-40 ms. 6 | * etc. They have end points, and all FrequencyDists within a range equate to 7 | * the entire range of possible values for a monitor. 8 | * 9 | */ 10 | 11 | public interface FrequencyDist extends MonitorInt { 12 | /** Get the end value of the FrequencyDist.*/ 13 | public double getEndValue(); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/FrequencyDistBase.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; import com.jamonapi.utils.LocaleContext; import java.text.DecimalFormat; /** * Base class for FrequencyDists. Note toString() is used to display ActivityStats in the jamonadmin.jsp page. * Values will be 0 if activity stats tracking is not enabled. */ final class FrequencyDistBase extends FrequencyDistImp { private static final long serialVersionUID = 278L; /** Creates a new instance of FrequencyDistBase */ public FrequencyDistBase(String displayHeader, double endValue, String name) { this.monData.displayHeader = displayHeader; this.endValue = endValue; this.monData.name = name; } private String format(double value) { DecimalFormat decimalFormat = LocaleContext.getFloatingPointFormatter(); return decimalFormat.format(value); } @Override public String toString() { if (!isEnabled() || monData.hits == 0) return ""; else { StringBuffer buff = new StringBuffer(); buff.append(format(getHits())); buff.append("/"); buff.append(format(getAvg())); buff.append(" ("); buff.append(format(getAvgActive())).append("/"); buff.append(format(getAvgPrimaryActive())).append("/"); buff.append(format(getAvgGlobalActive())).append(")"); return buff.toString(); } } } -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/FrequencyDistImp.java: -------------------------------------------------------------------------------- 1 | 2 | 3 | package com.jamonapi; 4 | 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * Class that implements metrics for different buckets. For example for time a bucket could be any monitors that take between 20 ms. and 40 ms. These buckets allow for seeing better granularity of the monitors of a given label. 10 | * 11 | * @author stevesouza 12 | * 13 | */ 14 | 15 | abstract class FrequencyDistImp extends MonitorImp implements FrequencyDist { 16 | 17 | private static final long serialVersionUID = 278L; 18 | protected double endValue; 19 | 20 | @Override 21 | public List getBasicHeader(List header) { 22 | // Frequencies don't get displayed basic headers. 23 | return header; 24 | } 25 | 26 | @Override 27 | public List getHeader(List header) { 28 | super.getHeader(header); 29 | header.add(monData.name+"AvgActive"); 30 | header.add(monData.name+"AvgPrimaryActive"); 31 | header.add(monData.name+"AvgGlobalActive"); 32 | return header; 33 | } 34 | 35 | @Override 36 | public List getDisplayHeader(List header) { 37 | header.add(monData.displayHeader); 38 | return header; 39 | } 40 | 41 | @Override 42 | public List getBasicRowData(List rowData) { 43 | // This is not called as basic rowdata doesn't inlcude frequencydists 44 | return rowData; 45 | } 46 | 47 | 48 | @Override 49 | public List getRowData(List rowData) { 50 | super.getRowData(rowData); 51 | rowData.add(new Double(getAvgActive())); 52 | rowData.add(new Double(getAvgPrimaryActive())); 53 | rowData.add(new Double(getAvgGlobalActive())); 54 | return rowData; 55 | } 56 | 57 | @Override 58 | public List getRowDisplayData(List rowData) { 59 | rowData.add(toString()); 60 | return rowData; 61 | } 62 | 63 | public double getEndValue() { 64 | return endValue; 65 | } 66 | 67 | 68 | } 69 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/JAMonArrayBufferListener.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; 2 | 3 | 4 | import com.jamonapi.utils.BufferList; 5 | 6 | /** 7 | * Listener that stores monitor information in a buffer (List) 8 | * @author stevesouza 9 | * 10 | */ 11 | public class JAMonArrayBufferListener extends JAMonBufferListener { 12 | 13 | private static final long serialVersionUID = 278L; 14 | 15 | /** 16 | * Constructor that creates this object with its default name (the class 17 | * name) 18 | */ 19 | public JAMonArrayBufferListener() { 20 | super("JAMonArrayBufferListener"); 21 | } 22 | 23 | /** Pass in the jamonListener name */ 24 | public JAMonArrayBufferListener(String name) { 25 | super(name); 26 | } 27 | 28 | /** Name the listener and pass in the jamon BufferList to use */ 29 | public JAMonArrayBufferListener(String name, BufferList list) { 30 | super(name, list); 31 | } 32 | 33 | 34 | /** 35 | * When this event is fired the monitor will be added to the rolling buffer. 36 | * If it is a log4j monitor the buffer will be specific to log4j fields 37 | * (i.e.LoggingEvent info such as threadname, formattedmessage, exception 38 | * stack trace and a few others. If it is not then the super class's 39 | * processEvent is called. 40 | * 41 | */ 42 | @Override 43 | public void processEvent(Monitor mon) { 44 | JAMonDetailValue jamDetail=mon.getJAMonDetailRow(); 45 | jamDetail.setKeyToString(false); 46 | addRow(jamDetail); 47 | } 48 | 49 | 50 | /** Makes a usable copy of this BufferListener */ 51 | @Override 52 | public JAMonListener copy() { 53 | return new JAMonArrayBufferListener(getName(), getBufferList().copy()); 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/JAMonListener.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; 2 | 3 | import java.io.Serializable; 4 | import java.util.EventListener; 5 | 6 | /** Interface that can be implemented if you want to code something to listen for JAMon events 7 | * such as a new max/min/max active have occured, or even if the monitor has fired. It also implements 8 | * the java EventListener tag interface. 9 | * 10 | * @author steve souza 11 | * 12 | */ 13 | 14 | public interface JAMonListener extends EventListener, Serializable { 15 | /** Gets the name of this listener */ 16 | public String getName(); 17 | 18 | /** Set the name of the listener */ 19 | public void setName(String name); 20 | 21 | /** Called and the current monitor is past in. This allows for the listener to take any action such as looking for new maximums, logging the information or anything else that is useful */ 22 | public void processEvent(Monitor mon); 23 | } 24 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/Listeners.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; 2 | 3 | import java.io.Serializable; 4 | 5 | /** Holds any {@code ListenerType}'s that a {@code Monitor} has. 6 | * 7 | * @author stevesouza 8 | * 9 | */ 10 | 11 | final class Listeners implements Serializable { 12 | public static final String VALUE = "value"; 13 | public static final String MAX = "max"; 14 | public static final String MAXACTIVE = "maxactive"; 15 | public static final String MIN = "min"; 16 | private static final String[] listenerTypes = { VALUE, MAX, MAXACTIVE, MIN }; 17 | 18 | static final int VALUE_LISTENER_INDEX=0; 19 | static final int MAX_LISTENER_INDEX=1; 20 | static final int MAXACTIVE_LISTENER_INDEX=2; 21 | static final int MIN_LISTENER_INDEX=3; 22 | private static final long serialVersionUID = 278L; 23 | private final ListenerType[] listenerArray=new ListenerType[4]; 24 | 25 | Listeners(Object lockObj) { 26 | for (int i=0;i
MonKeyItems can be placed as objects in MonKeyImp, and MonKeyBase
12 | * 13 | *Note toString() should always return the more generalized form.
14 | * 15 | * @author steve souza 16 | * 17 | */ 18 | 19 | public interface MonKeyItem extends Serializable { 20 | static final long serialVersionUID = 279L; 21 | static final String INSTANCE_HEADER = "Instance"; 22 | static final String DEFAULT_INSTANCE_NAME = "local"; 23 | 24 | public Object getDetails(); 25 | public void setDetails(Object details); 26 | 27 | /** Now that jamon can track data on multiple vm's we need a way to better identify the keys. A typical 28 | * value for this might be: myapp_jetty9_production. It is not part of the key used for aggregation (in the map) 29 | * but is used for informational purposes in the jamon report 30 | * 31 | * @param instanceName 32 | */ 33 | public void setInstanceName(String instanceName); 34 | public String getInstanceName(); 35 | 36 | } 37 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/NullMonitor.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; 2 | 3 | /** Do nothing monitor i.e. noop */ 4 | public class NullMonitor extends MonitorImp { 5 | 6 | private static final long serialVersionUID = 278L; 7 | 8 | public NullMonitor() { 9 | disable(); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/Range.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; 2 | 3 | 4 | /** Class that contains buckets of time that are tracked within a monitor. 5 | */ 6 | public interface Range extends JAMonListener { 7 | 8 | /**Return a FrequencyDist associated with the passed in value. */ 9 | public FrequencyDist getFrequencyDist(double value); 10 | 11 | /** Return the array of all FrequencyDists in this range*/ 12 | public FrequencyDist[] getFrequencyDists(); 13 | 14 | /** Add a value to the FrequencyDist associated with the value that is passed */ 15 | public void add(double value); 16 | 17 | /** Reset all FrequencyDists associated with this Range */ 18 | public void reset(); 19 | 20 | /** Get the logical operator associated with the top end point. Possible values 21 | * are < and <= 22 | **/ 23 | public String getLogicalOperator(); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/RowData.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; 2 | 3 | import java.util.List; 4 | 5 | /** Used to implement getting data from monitors, keys and frequencyDist. Purely 6 | * an interface of implementation details of no interest to the end user. Used to create 7 | * header, and row data for tabular data representations. */ 8 | 9 | interface RowData { 10 | /** i.e. Label */ 11 | public List getBasicHeader(List header); 12 | 13 | /** i.e. Get all key columns as part of the header i.e. Label, Units. This will include range headers */ 14 | public List getHeader(List header); 15 | 16 | /** i.e. Get the display header. Often same as getHeader */ 17 | public List getDisplayHeader(List header); 18 | 19 | /** Get all data for a row including range data */ 20 | public List getRowData(List rowData); 21 | 22 | /** Get all data for a row excluding row ranges, and put key data into one cell */ 23 | public List getBasicRowData(List rowData); 24 | 25 | /** Get data excluding ranges, but break out key columns */ 26 | public List getRowDisplayData(List rowData); 27 | } 28 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/SharedJAMonBufferListener.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; 2 | 3 | import com.jamonapi.utils.BufferList; 4 | 5 | 6 | /** Class that works like JAMonBufferListeners but allows users to share buffers 7 | * between monitors with the jamon gui... 8 | * 9 | * @author steve souza 10 | * 11 | */ 12 | 13 | public class SharedJAMonBufferListener extends JAMonBufferListener { 14 | private static final long serialVersionUID = 278L; 15 | private int ID=1; 16 | private boolean factory=true; 17 | 18 | public SharedJAMonBufferListener() { 19 | super("SharedJAMonBufferListener"); 20 | } 21 | 22 | /** Pass in the jamonListener name */ 23 | public SharedJAMonBufferListener(String name){ 24 | super(name); 25 | } 26 | 27 | /** Name the listener and pass in the jamon BufferList to use */ 28 | public SharedJAMonBufferListener(String name, BufferList list) { 29 | super(name, list); 30 | } 31 | 32 | /** Returns a usable copy of this object and puts that object into the JAMonListenerFactory so it can be used 33 | * by other Monitor's 34 | */ 35 | @Override 36 | public JAMonListener copy() { 37 | // If this is a factory creator it creates a numbered version and it 38 | // can be used to share between different monitors 39 | if (factory) { 40 | SharedJAMonBufferListener listener=new SharedJAMonBufferListener("_"+getName()+getNextID(), getBufferList().copy()); 41 | listener.setFactoryInstance(false); 42 | JAMonListenerFactory.put(listener); 43 | return listener; 44 | } else 45 | return this; 46 | 47 | } 48 | 49 | private synchronized int getNextID() { 50 | return ID++; 51 | } 52 | 53 | private void setFactoryInstance(boolean factoryInstance) { 54 | factory=factoryInstance; 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/TimeMon2.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; 2 | 3 | 4 | final class TimeMon2 extends TimeMon { 5 | 6 | private static final long serialVersionUID = 278L; 7 | 8 | public TimeMon2() { 9 | super(new MonKeyImp("timer","ms."),new MonInternals()); 10 | monData.setActivityStats(new ActivityStats()); 11 | monData.isTimeMonitor=true; 12 | } 13 | 14 | 15 | @Override 16 | public String toString() { 17 | return getLastValue()+" ms."; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/aop/JAMonEJBInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.aop; 2 | 3 | import com.jamonapi.aop.general.JAMonInterceptor; 4 | 5 | /** 6 | * Class for monitoring EJB's via AOP. This class exists for 7 | * mainly for backward compatibility with previous versions of JAMon. 8 | */ 9 | public class JAMonEJBInterceptor extends JAMonInterceptor { 10 | 11 | /** 12 | * Mimic the labels of the original implementation. 13 | */ 14 | public JAMonEJBInterceptor() { 15 | super("javax.ejb.EJBException"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/aop/spring/JamonAopKeyHelperSimple.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.aop.spring; 2 | 3 | import com.jamonapi.utils.Misc; 4 | import org.aspectj.lang.ProceedingJoinPoint; 5 | import org.springframework.stereotype.Component; 6 | 7 | /** 8 | * Created by stevesouza on 6/8/14. Simple implementation of creating jamon keys (labels and details). The usage 9 | * of arguments is a noop; 10 | */ 11 | @Component 12 | public class JamonAopKeyHelperSimple implements JamonAopKeyHelperIntIt is good to have a class that has common aop pointcuts for your application. These can be reused and built 8 | * upon elsewhere. Note cglib requires a noarg constructor. It can be private. You would also have to 9 | * have setters for any of the values that the actual constructor (say a 2 arg constructor takes). 10 | * These can also be private.
11 | * 12 | * Created by stevesouza on 5/26/14. 13 | */ 14 | @Aspect 15 | public class SystemAopPointcutDefinitions { 16 | 17 | /** Pointcut that would monitor any public methods */ 18 | @Pointcut("execution(public * *(..))") 19 | public void anyPublicMethod() {} 20 | 21 | /** Some useful pointcut tips... 22 | * com.stevesouza..* - .. means stevesouza and any of its subpackages. 23 | * com.stevesouza.* - means only in com.stevesouza and none of its subpackages 24 | * combining them expression="execution(* package1.*.*(..)) || execution(* package2.*.*(..))" 25 | */ 26 | 27 | /** The pointcut below will find all methods in all types marked with @MonitorAnnotation */ 28 | @Pointcut("within(@com.jamonapi.aop.spring.MonitorAnnotation *)") 29 | public void monitorAnnotatedClass() {} 30 | 31 | /** The pointcut below will find all methods marked with @MonitorAnnotation 32 | */ 33 | @Pointcut("anyPublicMethod() && @annotation(com.jamonapi.aop.spring.MonitorAnnotation)") 34 | public void monitorAnnotatedMethod() {} 35 | } 36 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/distributed/HazelcastFilePersister.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.distributed; 2 | 3 | /** Class that interacts with HazelCast to save jamon data to it so data from any jvm's in the hazelcast cluster 4 | * can be visible via the jamon web app. Note in most cases hazelcast exceptions are not bubbled up in this class 5 | * as jamon should still be availalbe even if HazelCast has issues. The exceptions and stack traces can be 6 | * seen in jamon however. 7 | * 8 | * Created by stevesouza on 7/6/14. 9 | */ 10 | 11 | public class HazelcastFilePersister extends HazelcastPersister { 12 | 13 | public HazelcastFilePersister() { 14 | super(new HazelcastPersisterImp(), new LocalJamonFilePersister()); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/distributed/HazelcastPersister.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.distributed; 2 | 3 | /** Wrapper for HazelCast persister that provides other services such as monitoring. 4 | * 5 | * Created by stevesouza on 7/6/14. 6 | */ 7 | 8 | public class HazelcastPersister extends JamonDataPersisterDecorator { 9 | 10 | public HazelcastPersister() { 11 | this(new HazelcastPersisterImp(), new LocalJamonDataPersister()); 12 | } 13 | 14 | HazelcastPersister(HazelcastPersisterImp hazelcastPersisterImp) { 15 | super(hazelcastPersisterImp, new LocalJamonDataPersister()); 16 | } 17 | 18 | HazelcastPersister(JamonDataPersister persister, LocalJamonDataPersister localJamonData) { 19 | super(persister, localJamonData); 20 | } 21 | 22 | 23 | public void shutDownHazelCast() { 24 | ((HazelcastPersisterImp) getJamonDataPersister()).shutDownHazelCast(); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/distributed/JamonDataPersister.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.distributed; 2 | 3 | import com.jamonapi.MonitorComposite; 4 | 5 | import java.util.Set; 6 | 7 | /** 8 | * Interface that supports saving different jamon data sets. The key should be 9 | * a uniquely identifiable jvm instance name (i.e. server) that has meaning to you 10 | * (for example: hostname:9809 or 111.222.333.4444:9878, myapp_jetty_production). 11 | * Because each host can have multiple instance names so make sure each jvm is unique. 12 | * The value saved is JAMon's MonitorComposite data (i.e. MonitorFactory.getRootMonitor()) 13 | */ 14 | public interface JamonDataPersister { 15 | 16 | /** 17 | * 18 | * @return Return a list of all the jvm server instances being tracked. 19 | */ 20 | public SetFor further information on JAMon go to www.jamonapi.com 5 |
Steve Souza - admin@jamonapi.com JAMon
6 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/proxy/MonProxyLabelerInt.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.proxy; 2 | 3 | import java.lang.reflect.Method; 4 | 5 | /** This method is called by MonProxy to determine the jamon summary label for each method invoked. It also creates a monitor when the interface throws an 6 | * exception. getSummaryLabel(...) and getExceptionLabel(...) are called respectively for each type of monitor. You can replace the default implementation 7 | * with your own should you want. Simply call MonProxy.setLabeler(...) and it will be used. 8 | * Note you should implement public Object clone(). 9 | */ 10 | public interface MonProxyLabelerInt extends Cloneable { 11 | /** Summary label that you want jamon to use */ 12 | public String getSummaryLabel(Method method); 13 | 14 | /** When an exception is thrown this returns what jamon label do you want to use */ 15 | public String getExceptionLabel(Method method); 16 | 17 | /** Note init is called at time of initialization. This is a good time to get the class name being monitored for example 18 | * via something like monProxy.getMonitoredObject().getClass().getName() 19 | */ 20 | public void init(MonProxy monProxy); 21 | 22 | public Object clone(); 23 | } 24 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/proxy/Params.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.proxy; 2 | 3 | 4 | import com.jamonapi.utils.BufferList; 5 | 6 | import java.util.List; 7 | 8 | /** Various parameters that are needed by all proxy jamon monitors. They 9 | * are passed around via this object and so shared by all. 10 | */ 11 | class Params { 12 | // if the following are set to true/false it affects all proxy monitors. 13 | boolean isEnabled=true; 14 | boolean isInterfaceEnabled=true; 15 | boolean isSQLSummaryEnabled=true; 16 | boolean isSQLDetailEnabled=true; 17 | boolean isResultSetEnabled=false; 18 | 19 | // ongoing counters that let you know the id of the sql statement executed since the server has been up 20 | long sqlID=0; 21 | 22 | // variables that store and display any sql executed. 23 | String[] sqlHeader={"ID", "StartTime", "Executiontime", "StatementReuse", "SQL", "ExceptionStackTrace", "MethodName", }; 24 | BufferList sqlBuffer=new BufferList(sqlHeader, 100); 25 | 26 | // any String entries put in this data structure will have a record that shows up in jamon if a query has the string. A good use for this 27 | // is table names. 28 | List matchStrings; 29 | 30 | @Override 31 | public String toString() { 32 | return "isEnabled="+isEnabled+ 33 | ", isInterfaceEnabled="+isInterfaceEnabled+ 34 | ", isSQLSummaryEnabled="+isSQLSummaryEnabled+ 35 | ", isSQLDetailEnabled="+isSQLDetailEnabled+ 36 | ", isResultSetEnabled="+isResultSetEnabled; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/utils/AppBaseException.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.utils; 2 | 3 | import java.io.PrintWriter; 4 | import java.io.StringWriter; 5 | 6 | public class AppBaseException extends java.lang.Exception { 7 | private static final long serialVersionUID = 278L; 8 | String errorIndicator=""; 9 | 10 | public AppBaseException() { 11 | super(); 12 | } 13 | 14 | public AppBaseException(String msg) { 15 | super(msg); 16 | } 17 | 18 | public AppBaseException(String msg, String errorIndicator) { 19 | this(msg); 20 | this.errorIndicator = errorIndicator; 21 | } 22 | 23 | public String getErrorIndicator() { 24 | return errorIndicator; 25 | } 26 | 27 | public static RuntimeException getRuntimeException(Exception e) { 28 | // NOTE THIS should eventually be replaced by the CommandIterator.iterate() function that throws 29 | // a runtimeexception instead of an Exception 30 | StringWriter sw=new StringWriter(); 31 | e.printStackTrace(new PrintWriter(sw)); 32 | return new RuntimeException(sw.toString()); 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/utils/ArrayElementComparator.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.utils; 2 | 3 | import java.io.Serializable; 4 | import java.util.Comparator; 5 | 6 | /** Maps a Comparator to a column number of an array starting at position 0. Used by JAMonArrayComparator */ 7 | class ArrayElementComparator implements Comparator, Serializable { 8 | private static final long serialVersionUID = 278L; 9 | // Used to compare elements of an array that reside within the same column. The Object[][] array itself 10 | // will be sorted according to this algorithm. 11 | 12 | private int sortCol; 13 | private Comparator comparator; 14 | 15 | /** Constructor that takes the position in array to be compared as well as it's comparator */ 16 | public ArrayElementComparator(int sortCol, Comparator comparator) { 17 | this.comparator=comparator; 18 | this.sortCol=sortCol; 19 | } 20 | 21 | 22 | public ArrayElementComparator(int sortCol, boolean naturalOrder) { 23 | comparator=new JAMonComparator(naturalOrder); 24 | this.sortCol=sortCol; 25 | } 26 | 27 | 28 | /** Return col to be sorted/compared */ 29 | public int getSortCol() { 30 | return sortCol; 31 | } 32 | 33 | /** Call the comparator on the column */ 34 | public int compare(Object o1, Object o2) { 35 | return comparator.compare(o1, o2); 36 | } 37 | 38 | 39 | @Override 40 | public String toString() { 41 | return "sortCol="+sortCol+", comparator="+comparator; 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/utils/BufferHolder.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.utils; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | 6 | 7 | /** Interface used to add/remove values from a BufferList based on whether shouldReplaceWith(...) 8 | * returns true or not. 9 | * 10 | */ 11 | public interface BufferHolder extends Serializable { 12 | /** Remove the smallest element from the BufferList if the buffer is full and shouldReplaceWith(...) 13 | * returns true. 14 | * 15 | * @param replaceWithObj 16 | */ 17 | public void remove(Object replaceWithObj); 18 | 19 | /** Add the passed object to the array if BufferList is not full or shouldReplaceWith returns true*/ 20 | public void add(Object replaceWithObj); 21 | 22 | /** Returns true if this object is greater than the smallest value in the buffer */ 23 | public boolean shouldReplaceWith(Object replaceWithObj); 24 | 25 | /** Get the underlying collection */ 26 | public List getCollection(); 27 | 28 | /** Get the Collection in sorted order */ 29 | public List getOrderedCollection(); 30 | 31 | public void setCollection(List list); 32 | 33 | /** return a usable copy of the BufferHolder */ 34 | public BufferHolder copy(); 35 | } 36 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/utils/Command.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.utils; 2 | 3 | /** 4 | * Simple interface that is used in the implementation of the Gang Of 4 Command pattern in Java. 5 | * Implement this Interface to pass a command to an internal iterator. 6 | **/ 7 | public interface Command { 8 | public void execute(Object value) throws Exception; 9 | } 10 | 11 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/utils/CommandIterator.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.utils; 2 | 3 | import java.util.Collection; 4 | import java.util.Enumeration; 5 | import java.util.Iterator; 6 | import java.util.Map; 7 | 8 | /** Used with the Command interface to implement the Gang of 4 Command pattern to execute some logic for 9 | * every entry of various iterators. This class allows a Command object to be passed to various iterators. 10 | * This capability is also similar to function pointers in C. 11 | **/ 12 | public class CommandIterator extends java.lang.Object { 13 | 14 | private CommandIterator() { 15 | } 16 | 17 | /** Iterate through a Map passing Command object a Map.Entry. 18 | * 19 | *Command code would look something like:
20 | *{@code 21 | * entry = (Map.Entry) object; 22 | * entry.getKey(), entry.getValue(); 23 | * }24 | **/ 25 | public static void iterate(Map map, Command command)throws Exception { 26 | iterate(map.entrySet().iterator() , command); 27 | } 28 | 29 | /** Iterate through a Collection passing the Command object each element in the collection. **/ 30 | public static void iterate(Collection collection, Command command)throws Exception { 31 | iterate(collection.iterator() , command); 32 | } 33 | 34 | 35 | /** Iterate through an Enumeration passing the Command object each element in the Collection **/ 36 | public static void iterate(Enumeration enumer, Command command)throws Exception { 37 | iterate(new EnumIterator(enumer) , command); 38 | } 39 | 40 | /** Iterate passing each Command each Object that is being iterated **/ 41 | public static void iterate(Iterator iterator, Command command)throws Exception { 42 | while (iterator.hasNext()) { 43 | command.execute(iterator.next()); 44 | } 45 | } 46 | 47 | } 48 | 49 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/utils/DefaultGeneralizer.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.utils; 2 | 3 | import com.jamonapi.proxy.SQLDeArger; 4 | 5 | public class DefaultGeneralizer implements Generalizer { 6 | 7 | /** Replaces numbers and quoted strings with '?'. For example 8 | *
Example: 8 | *
For further information on JAMon go to www.jamonapi.com 5 |
Steve Souza - admin@jamonapi.com JAMon
6 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamontomcat/JAMonTomcat6Valve.java: -------------------------------------------------------------------------------- 1 | package com.jamontomcat; 2 | 3 | import com.jamonapi.http.HttpMonFactory; 4 | 5 | public class JAMonTomcat6Valve extends JAMonTomcat55Valve { 6 | 7 | public JAMonTomcat6Valve() { 8 | httpMonFactory=new HttpMonFactory("com.jamontomcat.http.JAMonTomcat6Valve"); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/overview.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/jamon/src/main/java/com/overview.html -------------------------------------------------------------------------------- /jamon/src/test/java/com/jamonapi/BasicNanoTimingMonitorTest.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.assertj.core.api.Assertions.assertThat; 6 | 7 | public class BasicNanoTimingMonitorTest { 8 | 9 | @Test 10 | public void testTiming() throws InterruptedException { 11 | final int NANO=1000*1000; 12 | BasicNanoTimingMonitor mon=new BasicNanoTimingMonitor(); 13 | mon.start(); 14 | Thread.sleep(10); 15 | // can't say for sure how long the timer should have bee set for, but should be close to the sleep time. 16 | assertThat(mon.stop()).isGreaterThan(5*NANO); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /jamon/src/test/java/com/jamonapi/BasicTimingMonitorTest.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.assertj.core.api.Assertions.assertThat; 6 | 7 | 8 | public class BasicTimingMonitorTest { 9 | 10 | @Test 11 | public void testTiming() throws InterruptedException { 12 | BasicTimingMonitor mon=new BasicTimingMonitor(); 13 | mon.start(); 14 | Thread.sleep(10); 15 | // can't say for sure how long the timer should have bee set for, but should be close to the sleep time. 16 | assertThat(mon.stop()).isGreaterThan(5); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /jamon/src/test/java/com/jamonapi/CounterTest.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.assertj.core.api.Assertions.assertThat; 6 | 7 | public class CounterTest { 8 | 9 | @Test 10 | public void testSetCount() { 11 | Counter counter=new Counter(); 12 | 13 | assertThat(counter.getCount()).isEqualTo(0); 14 | 15 | counter.setCount(150); 16 | assertThat(counter.getCount()).isEqualTo(150); 17 | 18 | counter.setCount(-150); 19 | assertThat(counter.getCount()).isEqualTo(-150); 20 | } 21 | 22 | @Test 23 | public void testIncrementDecrement() { 24 | Counter counter=new Counter(); 25 | 26 | counter.decrement(); 27 | assertThat(counter.getCount()).isEqualTo(-1); 28 | 29 | counter.increment(); 30 | assertThat(counter.getCount()).isEqualTo(0); 31 | 32 | counter.increment(); 33 | assertThat(counter.getCount()).isEqualTo(1); 34 | 35 | assertThat(counter.incrementAndReturn()).isEqualTo(2); 36 | } 37 | 38 | 39 | @Test 40 | public void testEnableDisable() { 41 | Counter counter=new Counter(); 42 | 43 | counter.enable(false); 44 | 45 | counter.increment(); 46 | assertThat(counter.getCount()).isEqualTo(0); 47 | 48 | counter.decrement(); 49 | counter.decrement(); 50 | counter.decrement(); 51 | assertThat(counter.getCount()).isEqualTo(0); 52 | 53 | counter.setCount(100); 54 | assertThat(counter.getCount()).isEqualTo(0); 55 | 56 | counter.enable(true); 57 | assertThat(counter.incrementAndReturn()).isEqualTo(1); 58 | counter.decrement(); 59 | assertThat(counter.getCount()).isEqualTo(0); 60 | } 61 | 62 | } 63 | -------------------------------------------------------------------------------- /jamon/src/test/java/com/jamonapi/MultiThreadedTestHelper.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; 2 | 3 | 4 | /** Class used to help in the jamon multi-threaded tests JAMon. */ 5 | public class MultiThreadedTestHelper implements Runnable { 6 | 7 | static final int THREADS=25000; private int threadNum; 8 | long lobits, hibits; 9 | Monitor mon; 10 | 11 | 12 | public MultiThreadedTestHelper(int threadNum, long lobits, long hibits, Monitor mon) { this.threadNum=threadNum; this.lobits=lobits; this.hibits=hibits; this.mon=mon; 13 | } 14 | 15 | 16 | 17 | public void run() { 18 | // Alternating threads are either setting the high or lo bit. The idea is that if a thread // is interrupted before mon.increase(...) we may get a different value in mon than expected. // The expected value is compared to the actual value in main(...). try { long incr=0; if (threadNum%2==0) { incr=lobits; } else incr=hibits; mon.add(incr); } catch(Exception e) { throw new RuntimeException(e.getMessage()); } } 19 | 20 | static class TimingMonitorThreads implements Runnable { Monitor mon; TimingMonitorThreads(Monitor mon) { this.mon=mon; } 21 | public void run() { mon.start().stop(); MonitorFactory.start("multi-threaded test").stop(); MonitorFactory.start("multi-threaded test").stop(); MonitorFactory.start("multi-threaded test").stop(); MonitorFactory.start("multi-threaded test").stop(); } } 22 | 23 | } 24 | 25 | 26 | -------------------------------------------------------------------------------- /jamon/src/test/java/com/jamonapi/TimeMon2Test.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.assertj.core.api.Assertions.assertThat; 6 | 7 | 8 | public class TimeMon2Test { 9 | 10 | @Test 11 | public void testTiming() throws InterruptedException { 12 | TimeMon2 mon=new TimeMon2(); 13 | mon.start(); 14 | Thread.sleep(50); 15 | mon.stop(); 16 | assertThat(mon.getHits()).isEqualTo(1); 17 | // can't say for sure how long the timer should have been set for, but should be close to the sleep time. 18 | assertThat(mon.getTotal()).isGreaterThan(40); 19 | assertThat(mon.getAvg()).isGreaterThan(40); 20 | assertThat(mon.getLastValue()).isGreaterThan(40); 21 | assertThat(mon.getMin()).isGreaterThan(40); 22 | assertThat(mon.getMax()).isGreaterThan(40); 23 | assertThat(mon.getUnits()).isEqualTo("ms."); 24 | assertThat(mon.getActive()).isEqualTo(0); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /jamon/src/test/java/com/jamonapi/aop/spring/HelloSpringBean.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.aop.spring; 2 | 3 | /** 4 | * Created by stevesouza on 6/16/14. 5 | */ 6 | public class HelloSpringBean { 7 | 8 | public String getMyString() { 9 | return "hi"; 10 | } 11 | 12 | public void setMyString(String string) throws InterruptedException { 13 | Thread.sleep(50); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /jamon/src/test/java/com/jamonapi/aop/spring/JamonAopKeyHelperSimpleTest.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.aop.spring; 2 | 3 | import org.aspectj.lang.ProceedingJoinPoint; 4 | import org.aspectj.lang.Signature; 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | 8 | import java.io.FileNotFoundException; 9 | 10 | import static org.assertj.core.api.Assertions.assertThat; 11 | import static org.mockito.Mockito.mock; 12 | import static org.mockito.Mockito.when; 13 | 14 | public class JamonAopKeyHelperSimpleTest { 15 | 16 | private static final String SIGNATURE = "void com.stevesouza.spring.MonitorMeClass.anotherMethod(String)"; 17 | private static final String EXCEPTION_LABEL = FileNotFoundException.class.getName(); 18 | 19 | private JamonAopKeyHelperSimple helper = new JamonAopKeyHelperSimple(); 20 | 21 | private ProceedingJoinPoint pjp; 22 | private Signature signature; 23 | 24 | @Before 25 | public void setUp() { 26 | pjp = mock(ProceedingJoinPoint.class); 27 | signature = mock(Signature.class); 28 | when(pjp.getSignature()).thenReturn(signature); 29 | when(signature.toString()).thenReturn(SIGNATURE); 30 | } 31 | 32 | @Test 33 | public void testGetLabel() throws Exception { 34 | assertThat(helper.getLabel(pjp)).isEqualTo(SIGNATURE); 35 | } 36 | 37 | @Test 38 | public void testGetExceptionLabel() throws Exception { 39 | assertThat(helper.getExceptionLabel(new FileNotFoundException())).isEqualTo(EXCEPTION_LABEL); 40 | } 41 | 42 | @Test 43 | public void testGetDetails() throws Exception { 44 | assertThat(helper.getDetails(pjp)).isEqualTo(SIGNATURE); 45 | } 46 | 47 | @Test 48 | public void testGetDetails_WithException() throws Exception { 49 | assertThat(helper.getDetails(pjp, new FileNotFoundException())).startsWith("stackTrace=java.io.FileNotFoundException"); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /jamon/src/test/java/com/jamonapi/aop/spring/MonitorMe.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.aop.spring; 2 | 3 | import java.io.FileNotFoundException; 4 | 5 | /** 6 | * Created by stevesouza on 6/16/14. 7 | */ 8 | public class MonitorMe { 9 | 10 | public void anotherMethodForMe() throws InterruptedException { 11 | Thread.sleep(10); 12 | } 13 | 14 | public void anotherMethod(String fileName) throws FileNotFoundException { 15 | throw new FileNotFoundException("file not found"); 16 | } 17 | 18 | public void helloWorld() { 19 | 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /jamon/src/test/java/com/jamonapi/distributed/JamonDataPersisterFactoryTest.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.distributed; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.assertj.core.api.Assertions.assertThat; 6 | 7 | public class JamonDataPersisterFactoryTest { 8 | 9 | @Test 10 | public void testGet_WithHazelCast() throws Exception { 11 | JamonDataPersister jamonDataPersister = JamonDataPersisterFactory.get(); 12 | assertThat(jamonDataPersister).isInstanceOf(HazelcastPersister.class); 13 | ((HazelcastPersister) jamonDataPersister).shutDownHazelCast(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /jamon/src/test/java/com/jamonapi/distributed/JamonDataPersisterTimerTaskTest.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.distributed; 2 | 3 | import org.junit.Test; 4 | 5 | import java.util.Timer; 6 | 7 | import static org.mockito.Mockito.*; 8 | 9 | public class JamonDataPersisterTimerTaskTest { 10 | 11 | private JamonDataPersister jamonDataPersister = mock(JamonDataPersister.class); 12 | 13 | @Test 14 | public void testTimer() throws InterruptedException { 15 | JamonDataPersisterTimerTask task = new JamonDataPersisterTimerTask(jamonDataPersister); 16 | Timer timer = task.schedule(100); 17 | Thread.sleep(1000); 18 | // not sure that it would always be exact so giving the amount of times 19 | // it is called a range. 20 | verify(jamonDataPersister, atLeast(8)).put(); 21 | verify(jamonDataPersister, atMost(13)).put(); 22 | timer.cancel(); 23 | } 24 | 25 | 26 | } 27 | -------------------------------------------------------------------------------- /jamon/src/test/java/com/jamonapi/distributed/LocalJamonDataPersisterTest.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.distributed; 2 | 3 | import com.jamonapi.MonitorComposite; 4 | import com.jamonapi.MonitorFactory; 5 | import org.junit.After; 6 | import org.junit.Before; 7 | import org.junit.Test; 8 | 9 | import static org.assertj.core.api.Assertions.assertThat; 10 | 11 | public class LocalJamonDataPersisterTest { 12 | 13 | private LocalJamonDataPersister localJamonData; 14 | @Before 15 | public void setUp() { 16 | localJamonData = new LocalJamonDataPersister(); 17 | MonitorFactory.start("mytestmonitor").stop(); 18 | } 19 | 20 | @After 21 | public void cleanUp() { 22 | MonitorFactory.reset(); 23 | } 24 | 25 | @Test 26 | public void testGetInstances() throws Exception { 27 | assertThat(localJamonData.getInstances()).containsOnly(localJamonData.getInstance()); 28 | } 29 | 30 | @Test 31 | public void testPut() throws Exception { 32 | localJamonData.put(); 33 | assertThat(localJamonData.getInstances()).hasSize(1); 34 | assertThat(localJamonData.get(LocalJamonDataPersister.INSTANCE).getNumRows()).isEqualTo(2); 35 | } 36 | 37 | @Test 38 | public void testGet() throws Exception { 39 | MonitorComposite monitorComposite = localJamonData.get(LocalJamonDataPersister.INSTANCE); 40 | assertThat(monitorComposite.getReport()).isEqualTo(MonitorFactory.getRootMonitor().getReport()); 41 | } 42 | 43 | @Test 44 | public void testGet_WithInvalidArg() throws Exception { 45 | MonitorComposite monitorComposite = localJamonData.get("i_do_not_exist_instance"); 46 | assertThat(monitorComposite).isNull(); 47 | } 48 | 49 | @Test 50 | public void testRemove() throws Exception { 51 | localJamonData.put(); 52 | localJamonData.remove(LocalJamonDataPersister.INSTANCE); 53 | MonitorComposite monitorComposite = localJamonData.get(LocalJamonDataPersister.INSTANCE); 54 | assertThat(monitorComposite.getNumRows()).isEqualTo(1); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /jamon/src/test/java/com/jamonapi/jmx/ExceptionDeltaMXBeanImpTest.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | import com.jamonapi.Monitor; 4 | import com.jamonapi.MonitorFactory; 5 | import org.junit.After; 6 | import org.junit.Before; 7 | import org.junit.Test; 8 | 9 | import static org.assertj.core.api.Assertions.assertThat; 10 | 11 | public class ExceptionDeltaMXBeanImpTest { 12 | 13 | private ExceptionDeltaMXBeanImp bean = new ExceptionDeltaMXBeanImp(); 14 | 15 | @Before 16 | public void setUp() throws Exception { 17 | MonitorFactory.reset(); 18 | } 19 | 20 | @After 21 | public void tearDown() throws Exception { 22 | MonitorFactory.reset(); 23 | } 24 | 25 | @Test 26 | public void testGetExceptionCount() throws Exception { 27 | MonitorFactory.add(ExceptionMXBean.LABEL, ExceptionMXBean.UNITS, 1); 28 | MonitorFactory.add(ExceptionMXBean.LABEL, ExceptionMXBean.UNITS, 1); 29 | assertThat(bean.getExceptionCount()).isEqualTo(2); 30 | // getExceptionCount returns a delta - the difference - between the count now 31 | // (3) vs the previous count when getExceptionCount() was called (2), so the 32 | // following should return 1. 33 | MonitorFactory.add(ExceptionMXBean.LABEL, ExceptionMXBean.UNITS, 1); 34 | assertThat(bean.getExceptionCount()).isEqualTo(1); 35 | } 36 | 37 | @Test 38 | public void testGetExceptionCount_NoExist() throws Exception { 39 | assertThat(bean.getExceptionCount()).isEqualTo(0); 40 | } 41 | 42 | @Test 43 | public void testGetExceptionCount_StartedNotStopped() throws Exception { 44 | Monitor mon = MonitorFactory.start(ExceptionMXBean.LABEL); 45 | assertThat(bean.getExceptionCount()).isEqualTo(0); 46 | } 47 | } -------------------------------------------------------------------------------- /jamon/src/test/java/com/jamonapi/jmx/HttpStatusMXBeanImpTest.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | import com.jamonapi.MonitorFactory; 4 | import org.junit.After; 5 | import org.junit.Before; 6 | import org.junit.Test; 7 | 8 | import static org.assertj.core.api.Assertions.assertThat; 9 | 10 | public class HttpStatusMXBeanImpTest { 11 | private HttpStatusMXBean bean = new HttpStatusMXBeanImp(); 12 | 13 | @Before 14 | public void setUp() throws Exception { 15 | MonitorFactory.reset(); 16 | } 17 | 18 | @After 19 | public void tearDown() throws Exception { 20 | MonitorFactory.reset(); 21 | } 22 | 23 | @Test 24 | public void testGet1xx() throws Exception { 25 | createStatusCodeMonitors(1); 26 | assertThat(bean.get1xx()).isEqualTo(1); 27 | } 28 | 29 | @Test 30 | public void testGet2xx() throws Exception { 31 | createStatusCodeMonitors(2); 32 | assertThat(bean.get2xx()).isEqualTo(2); 33 | } 34 | 35 | @Test 36 | public void testGet3xx() throws Exception { 37 | createStatusCodeMonitors(3); 38 | assertThat(bean.get3xx()).isEqualTo(3); 39 | } 40 | 41 | @Test 42 | public void testGet4xx() throws Exception { 43 | createStatusCodeMonitors(4); 44 | assertThat(bean.get4xx()).isEqualTo(4); 45 | } 46 | 47 | @Test 48 | public void testGet5xx() throws Exception { 49 | createStatusCodeMonitors(5); 50 | assertThat(bean.get5xx()).isEqualTo(5); 51 | } 52 | 53 | private void createStatusCodeMonitors(int statusCode) { 54 | for (int i=0;i
10 |
11 | <%
12 | var factory = CreateJavaObject('com.jamonapi.MonitorFactory');
13 | var outMonitor = factory.start("outerMonitor");
14 | if(Error.set)
15 | {
16 | Response.write("Error in settng");
17 | RETURN();
18 | }
19 | var innerMonitor = "";
20 | for (var i=0; i<=10000; i++) {
21 | innerMonitor=factory.start("innerMonitor");
22 | innerMonitor.stop();
23 |
24 | }
25 | outMonitor.stop();
26 | %>
27 |
28 | <%= factory.getReport() %>
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/src/JAMonUsersGuide/ColdFusion_sample.html:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/ColdFusion_sample.html
--------------------------------------------------------------------------------
/src/JAMonUsersGuide/JAMonDemoOutput.html:
--------------------------------------------------------------------------------
1 | Culture - Joseph Hill, Albert Walker, Kenneth DayesPosting by Jeroen Borgers
11 | 12 | JAMon-2.0 WebSphere 5.1 jakarta-oro classloading problem 13 | 14 |If you run JAMon-2.0 in WebSphere (5.1) and when starting the JAMonAdmin.jsp page, 15 | you get the error message:
16 | 17 |Error 500: org.apache.oro.text.regex.Util: method 18 | split(Ljava/util/Collection;Lorg/apache/oro/text/regex/PatternMatcher;Lorg/apache/oro/text/regex/Pattern;Ljava/lang/String;)V 19 | not found
20 | 21 |You probably have a jakarta-oro classloading problem. Oro classes are 22 | available from a websphere-internal jar.
23 | 24 |Solution:
25 | 26 |Put jakarta-oro-2.0.8.jar "in front" in the classloader hierarchy: 27 | WebSphereConsole-> server -> Process Definitions -> JVM -> set classpath 28 | = path_including_jakarta-oro-2.0.8.jar
29 | 30 |Details:
31 | 32 |See 33 | http://www-128.ibm.com/developerworks/websphere/techjournal/0406_brown/0406_brown.html 34 | clarifies the issue. When I execute the class finder servlet with the 35 | org.apache.oro.text.regex.Util class, 36 | it reports that this class is loaded from websphere/lib/jyton.jar. Nice 37 | tool this servlet BTW.
38 | 39 |However, the solution provided by the article does *not* work.
40 | 41 |The solution can be found at 42 | http://www.nabble.com/Re:-OpenCms6.0.0-on-IBM-WebSphere-5.1-p1061848.html
43 | 44 |Note: if your app uses jakarta-oro of a different version than 2.0.8, 45 | you may have another version conflict to deal with.
46 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/asc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/asc.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/console1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/console1.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/desc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/desc.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/distributed_jamon1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/distributed_jamon1.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/distributed_jamon_stacktrace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/distributed_jamon_stacktrace.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/fds_logo_fulltext_blue2_150.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/fds_logo_fulltext_blue2_150.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/httpsession_sample.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/httpsession_sample.html -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon1.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_22.ppt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_22.ppt -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_banner3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_banner3.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_docs.css: -------------------------------------------------------------------------------- 1 | .indent { 2 | margin-left: 25px; 3 | } 4 | 5 | h1 { 6 | color: #337ab7; 7 | } 8 | 9 | h2 { 10 | color: #337ab7; 11 | } 12 | 13 | #menu { 14 | position: fixed; 15 | right: 0; 16 | top: 10%; 17 | width: 15em; 18 | margin-top: -2.5em; 19 | color: #000099; 20 | } 21 | 22 | .homedoc { 23 | width: 90%; 24 | } 25 | 26 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_exception_bufflistener.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_exception_bufflistener.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_exception_details_aop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_exception_details_aop.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_exception_modify.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_exception_modify.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_httpmon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_httpmon.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_httpmon_details.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_httpmon_details.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_jmx_custommetrics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_jmx_custommetrics.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_jmx_deltas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_jmx_deltas.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_jmx_deltas_log4j.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_jmx_deltas_log4j.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_jmx_exceptions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_jmx_exceptions.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_jmx_gc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_jmx_gc.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_jmx_gc_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_jmx_gc_details.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_jmx_gc_mem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_jmx_gc_mem.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_jmx_gc_scavenge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_jmx_gc_scavenge.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_jmx_gc_time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_jmx_gc_time.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_jmx_httpstatuscodes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_jmx_httpstatuscodes.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_jmx_log4j.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_jmx_log4j.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_jmx_managing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_jmx_managing.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_jmx_pagerequests.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_jmx_pagerequests.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_jmx_sql.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_jmx_sql.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_listener1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_listener1.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_listener2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_listener2.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_listener3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_listener3.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_listener_modify.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_listener_modify.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_log4j_bufflistener.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_log4j_bufflistener.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_log4j_generalize1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_log4j_generalize1.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_log4j_generalize2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_log4j_generalize2.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_log4j_min.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_log4j_min.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_spring_aop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_spring_aop.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_sql_details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_sql_details.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_sql_jdbc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_sql_jdbc.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_sql_summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_sql_summary.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_war_admin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_war_admin.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_war_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_war_menu.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/jamon_war_ranges.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/jamon_war_ranges.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/javadoc/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
22 | This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
23 |
24 | Link toNon-frame version.
22 | | 23 |
All Classes
29 |
30 |
31 | Packages
32 | |
38 |
42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/javadoc/overview-summary.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/javadoc/overview-summary.html -------------------------------------------------------------------------------- /src/JAMonUsersGuide/javadoc/package-list: -------------------------------------------------------------------------------- 1 | com.jamonapi 2 | com.jamonapi.utils 3 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/javadoc/packages.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |This presentation contains content that your browser may not be able to show 16 | properly. This presentation was optimized for more recent versions of Microsoft 17 | Internet Explorer.
18 | 19 |If you would like to proceed anyway, click here.
20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/frame.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
16 | End of slide show, click to exit.
23 | | 24 | |
27 | | Just read 28 | |
29 |
23 | | 24 | |
27 | | Would have been
28 | nice to know during development. 29 | |
30 |
23 | Interfaces
24 |
25 | 26 | HttpMon |
27 |
34 | Classes
35 |
36 | 37 | HttpMonFactory 38 | 39 | JAMonJettyHandler 40 | 41 | JAMonServletFilter 42 | 43 | JAMonTomcatValve 44 | 45 | JettyHttpMonFactory |
46 |
23 | Classes
24 |
25 | 26 | JAMonAppender 27 | 28 | Log4jBufferListener 29 | 30 | Log4jMonKey |
31 |
22 | | 23 |
---|
All Classes
29 |
30 |
31 | Packages
32 | |
44 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/src/doc/javadoc/package-list:
--------------------------------------------------------------------------------
1 | com.jamonapi
2 | com.jamonapi.http
3 | com.jamonapi.log4j
4 | com.jamonapi.proxy
5 | com.jamonapi.utils
6 |
--------------------------------------------------------------------------------
/src/doc/javadoc/resources/inherit.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/doc/javadoc/resources/inherit.gif
--------------------------------------------------------------------------------
/src/doc/javadoc/stylesheet.css:
--------------------------------------------------------------------------------
1 | /* Javadoc style sheet */
2 |
3 | /* Define colors, fonts and other style attributes here to override the defaults */
4 |
5 | /* Page background color */
6 | body { background-color: #FFFFFF; color:#000000 }
7 |
8 | /* Headings */
9 | h1 { font-size: 145% }
10 |
11 | /* Table colors */
12 | .TableHeadingColor { background: #CCCCFF; color:#000000 } /* Dark mauve */
13 | .TableSubHeadingColor { background: #EEEEFF; color:#000000 } /* Light mauve */
14 | .TableRowColor { background: #FFFFFF; color:#000000 } /* White */
15 |
16 | /* Font used in left-hand frame lists */
17 | .FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
18 | .FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
19 | .FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
20 |
21 | /* Navigation bar fonts and colors */
22 | .NavBarCell1 { background-color:#EEEEFF; color:#000000} /* Light mauve */
23 | .NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */
24 | .NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;}
25 | .NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;}
26 |
27 | .NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
28 | .NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
29 |
30 |
--------------------------------------------------------------------------------
/src/docs/.#jamon_intro.key.1.1:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/docs/.#jamon_intro.key.1.1
--------------------------------------------------------------------------------
/src/docs/jamon.ppt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/docs/jamon.ppt
--------------------------------------------------------------------------------
/src/docs/jamon271.pages:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/docs/jamon271.pages
--------------------------------------------------------------------------------
/src/docs/jamon272.pages:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/docs/jamon272.pages
--------------------------------------------------------------------------------
/src/docs/jamon_demo.key:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/docs/jamon_demo.key
--------------------------------------------------------------------------------
/src/docs/jamon_intro.key:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/docs/jamon_intro.key
--------------------------------------------------------------------------------
/src/docs/jamonusers/jamonhsqldb.doc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/docs/jamonusers/jamonhsqldb.doc
--------------------------------------------------------------------------------
/src/docs/jamonusers/jamonhsqldb_changes.doc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/docs/jamonusers/jamonhsqldb_changes.doc
--------------------------------------------------------------------------------
/src/docs/jamonusers/jamonprbreference.ppt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/docs/jamonusers/jamonprbreference.ppt
--------------------------------------------------------------------------------
/src/docs/osmonitoring_demo.key:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/docs/osmonitoring_demo.key
--------------------------------------------------------------------------------
/src/images/jamon1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/images/jamon1.jpg
--------------------------------------------------------------------------------
/src/images/jamon1_oval.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/images/jamon1_oval.jpg
--------------------------------------------------------------------------------
/src/images/jamon_banner3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/images/jamon_banner3.jpg
--------------------------------------------------------------------------------
/src/images/jamon_small.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/images/jamon_small.jpg
--------------------------------------------------------------------------------
/src/web.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |