├── .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 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | playground/src/main/resources/data/out/* 2 | 3 | # Files to exclude. Taken from 4 | # http://gary-rowe.com/agilestack/2012/10/12/a-gitignore-file-for-intellij-and-eclipse-with-maven/ 5 | 6 | # Eclipse 7 | # intellij 8 | .idea/ 9 | *.iml 10 | *.iws 11 | .#* 12 | 13 | # Mac 14 | .DS_Store 15 | 16 | #CVS 17 | CVS/ 18 | 19 | 20 | 21 | # Maven 22 | log/ 23 | target/ 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # jamonapi 2 | 3 | The Java Application Monitor (JAMon) is a free, simple, high performance, thread safe, Java API that allows developers to easily monitor production applications. 4 | 5 | see [jamonapi.sourceforge.net](http://jamonapi.sourceforge.net) for more information. 6 | 7 | The JAMon repositories on both sourceforge and github are the latest version of JAMon. 8 | * https://github.com/stevensouza/jamonapi 9 | * https://sourceforge.net/p/jamonapi/jamonapi/ci/master/tree/ 10 | 11 | ```xml 12 | 13 | 14 | com.jamonapi 15 | jamon 16 | 2.82 17 | 18 | 19 | ``` 20 | -------------------------------------------------------------------------------- /deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | cp jamon/target/jamon-2.82.jar /Applications/myapps/jetty/jetty-distribution-9.2.6.v20141205/lib/jamon/ 3 | cp jamon/target/jamon-2.82.jar /Applications/myapps/jetty/jetty-distribution-9.2.1.v20140609/lib/ext/. 4 | cp jamon/target/jamon-2.82.jar /Applications/myapps/vagrant/dev1/jetty-distribution-9.2.1.v20140609/lib/ext/. 5 | cp jamon/target/jamon-2.82.jar /Applications/myapps/tomcat/apache-tomcat-8.0.8/lib/. 6 | cp jamon/target/jamon-2.82.jar /Applications/myapps/tomcat/apache-tomcat-7.0.54/lib/. 7 | 8 | cp jamon_war/target/jamon.war /Applications/myapps/jetty/jetty-distribution-9.2.6.v20141205/lib/jamon/jamon.war 9 | cp jamon_war/target/jamon.war /Applications/myapps/jetty/jetty-distribution-9.2.1.v20140609/webapps/. 10 | cp jamon_war/target/jamon.war /Applications/myapps/vagrant/dev1/jetty-distribution-9.2.1.v20140609/webapps/. 11 | cp jamon_war/target/jamon.war /Applications/myapps/tomcat/apache-tomcat-8.0.8/webapps/. 12 | cp jamon_war/target/jamon.war /Applications/myapps/tomcat/apache-tomcat-7.0.54/webapps/. 13 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/ActivityStats.java: -------------------------------------------------------------------------------- 1 | 2 | package com.jamonapi; 3 | 4 | import java.io.Serializable; 5 | 6 | /** 7 | * Class used to track the number of active monitors (including global/primary/this). 8 | * It allows you to see how many monitors are concurrently running at any given time. 9 | * 10 | */ 11 | 12 | final class ActivityStats implements Serializable { 13 | 14 | private static final long serialVersionUID = 278L; 15 | 16 | final Counter allActive; // the number of monitors that are now running 17 | final Counter primaryActive; // the number of monitors marked primary that are now running 18 | final Counter thisActive; // the number of monitors of this type that are running 19 | 20 | /** Creates a new instance of Counters */ 21 | ActivityStats(Counter thisActive, Counter primaryActive, Counter allActive) { 22 | this.thisActive=thisActive; 23 | this.primaryActive=primaryActive; 24 | this.allActive=allActive; 25 | } 26 | 27 | ActivityStats() { 28 | this(new Counter(),new Counter(),new Counter()); 29 | } 30 | 31 | /** The number of all active monitors running */ 32 | public double getGlobalActive() { 33 | return allActive.getCount(); 34 | } 35 | 36 | /** The number of primary monitors running */ 37 | public double getPrimaryActive() { 38 | return primaryActive.getCount(); 39 | } 40 | 41 | /** The number monitors of this type that are running */ 42 | public double getActive() { 43 | return thisActive.getCount(); 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/BasicNanoTimingMonitor.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi; 2 | 3 | /** The most basic of timing Monitors using nanosecond timing. 4 | * 5 | *

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;iFor example the generalized form of a query would be something like: select * from table where 9 | * name=?. The detail form would be something like: select * from table where name='steve'

10 | * 11 | *

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 JamonAopKeyHelperInt { 13 | @Override 14 | public String getLabel(ProceedingJoinPoint proceedingJoinPoint) { 15 | return proceedingJoinPoint.getSignature().toString(); 16 | } 17 | 18 | @Override 19 | public String getExceptionLabel(Throwable exception) { 20 | return exception.getClass().getName(); 21 | } 22 | 23 | @Override 24 | public String getDetails(ProceedingJoinPoint proceedingJoinPoint) { 25 | return proceedingJoinPoint.getSignature().toString(); 26 | } 27 | 28 | @Override 29 | public String getDetails(ProceedingJoinPoint proceedingJoinPoint, Throwable exception) { 30 | return new StringBuffer("stackTrace=") 31 | .append(Misc.getExceptionTrace(exception)) 32 | .toString(); 33 | } 34 | 35 | /** This method is a noop 36 | * 37 | * @param useArgsWithMethodDetails 38 | */ 39 | @Override 40 | public void setUseArgsWithMethodDetails(boolean useArgsWithMethodDetails) { 41 | 42 | } 43 | 44 | /** This method is a noop 45 | * 46 | * @param useArgsWithExceptionDetails 47 | */ 48 | @Override 49 | public void setUseArgsWithExceptionDetails(boolean useArgsWithExceptionDetails) { 50 | 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/aop/spring/MonitorAnnotation.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.aop.spring; 2 | 3 | /** 4 | * This tag annotation is intended to be used on Spring classes and/or methods that should be monitored. If the class 5 | * is annotated then all methods would be available for monitoring. Alternatively the class need not be annotated 6 | * and individual methods could be. You would still have to specify to spring that the JamonAspect would need to monitor 7 | * classes with this annotation. See the applicationContext.xml in the testing code for some examples (which are 8 | * commented out). 9 | */ 10 | 11 | import java.lang.annotation.ElementType; 12 | import java.lang.annotation.Retention; 13 | import java.lang.annotation.RetentionPolicy; 14 | import java.lang.annotation.Target; 15 | 16 | 17 | @Retention(RetentionPolicy.RUNTIME) 18 | @Target({ElementType.METHOD, ElementType.TYPE}) 19 | public @interface MonitorAnnotation { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/aop/spring/SystemAopPointcutDefinitions.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.aop.spring; 2 | 3 | import org.aspectj.lang.annotation.Aspect; 4 | import org.aspectj.lang.annotation.Pointcut; 5 | 6 | /** 7 | *

It 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 Set getInstances(); 21 | 22 | /** get this instance name. i.e. the key that identifies this host, application or jvm */ 23 | public String getInstance(); 24 | 25 | /** 26 | * Puts the default data (MonitorFactory.getRootMonitor()) in with the default key (For example 'local') 27 | */ 28 | public void put(); 29 | 30 | /** 31 | * Puts the default data (MonitorFactory.getRootMonitor()) in with the specified key (For example 'jetty-local') 32 | */ 33 | public void put(String instanceKey); 34 | 35 | /** 36 | * 37 | * @param instanceKey identifier of jvm server instance being monitored 38 | * @return jamon data for the server 39 | */ 40 | public MonitorComposite get(String instanceKey); 41 | 42 | /** 43 | * Remove the monitoring data. Depending on the implementation this could remove the data from memory or a 44 | * data store. 45 | * 46 | * @param instanceKey 47 | */ 48 | public void remove(String instanceKey); 49 | 50 | } 51 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/distributed/JamonDataPersisterFactory.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.distributed; 2 | 3 | import com.jamonapi.JamonPropertiesLoader; 4 | 5 | import java.util.Properties; 6 | 7 | /** 8 | * Class that instanciates the JamonDataPersister class. Note this could be a local implementation or a distributed implementation 9 | * such as HazelCast. By default it tries to use HazelCast if the HazelCast jar is in the classpath, 10 | * or else it falls back to the local implementation 11 | * 12 | * Created by stevesouza on 7/6/14. 13 | */ 14 | public class JamonDataPersisterFactory { 15 | 16 | private static JamonDataPersisterFactory factory = new JamonDataPersisterFactory(); 17 | private JamonDataPersister jamonDataPersister; 18 | private String jamonDataPersisterName; 19 | private Properties jamonProperties; 20 | 21 | private JamonDataPersisterFactory() { 22 | jamonProperties = JamonPropertiesLoader.PROPS; 23 | jamonDataPersisterName = jamonProperties.getProperty("jamonDataPersister"); 24 | } 25 | 26 | public static JamonDataPersister get() { 27 | if (factory.jamonDataPersister ==null) { 28 | factory.initialize(); 29 | } 30 | return factory.jamonDataPersister; 31 | } 32 | 33 | public static Properties getJamonProperties() { 34 | return factory.jamonProperties; 35 | } 36 | 37 | // initialize with HazelCast implementation if you can. If not use the local implementation. 38 | private void initialize() { 39 | jamonDataPersister = create(jamonDataPersisterName); 40 | if (jamonDataPersister ==null) { 41 | jamonDataPersister = new LocalJamonFilePersister(); 42 | } 43 | } 44 | 45 | private static JamonDataPersister create(String className) { 46 | try { 47 | return (JamonDataPersister) Class.forName(className).newInstance(); 48 | } catch (Throwable e) { 49 | } 50 | return null; 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/distributed/JamonDataPersisterTimerTask.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.distributed; 2 | 3 | import java.util.Timer; 4 | import java.util.TimerTask; 5 | 6 | /** 7 | * Task that starts a thread that will call the JamonDataPersister put method on a timer. The put method persists jamon data 8 | * (MonitorComposite which is serializable). The JamonServletContextListener automatically starts this thread for 9 | * web applications. 10 | * 11 | * Created by stevesouza on 7/7/14. 12 | */ 13 | public class JamonDataPersisterTimerTask extends TimerTask { 14 | private final JamonDataPersister jamonDataPersister; 15 | 16 | public JamonDataPersisterTimerTask(JamonDataPersister jamonDataPersister) { 17 | this.jamonDataPersister = jamonDataPersister; 18 | } 19 | 20 | /** This method saves the jamon data. Save is used loosely. It can do anything it wants. For example the 21 | * HazelCast implementation sends the data to the HazelCast cluster, but it is not saved to disk. Other 22 | * implementations could save to other clustered environments such as Reddis, or Hadoop. The data saved 23 | * could replace previously saved data or make additional copies (for example append) 24 | */ 25 | @Override 26 | public void run() { 27 | jamonDataPersister.put(); 28 | } 29 | 30 | /** Start thread that will save jamon data (MonitorComposite). 31 | * 32 | * @param refreshRateInMs frequency save should be executed. 33 | * @return The scheduled timer. 34 | */ 35 | public Timer schedule(int refreshRateInMs) { 36 | Timer timer = new Timer(JamonDataPersisterTimerTask.class.getSimpleName()+"-saveJamonData"); 37 | // use refreshRate for 1st value: when to start, and how long to wait until next one. 38 | timer.scheduleAtFixedRate(this, refreshRateInMs, refreshRateInMs); 39 | return timer; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/distributed/LocalJamonDataPersister.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.distributed; 2 | 3 | import com.jamonapi.MonitorComposite; 4 | import com.jamonapi.MonitorFactory; 5 | 6 | import java.util.Set; 7 | import java.util.TreeSet; 8 | 9 | /** 10 | * Class that returns the static jamon data for the jvm as returned by MonitorFactory.getRootMonitor() 11 | * 12 | */ 13 | public class LocalJamonDataPersister implements JamonDataPersister { 14 | public static final String INSTANCE = "local"; 15 | protected final Set instances = new TreeSet(); 16 | 17 | public LocalJamonDataPersister() { 18 | instances.add(INSTANCE); 19 | } 20 | 21 | @Override 22 | public Set getInstances() { 23 | return instances; 24 | } 25 | 26 | @Override 27 | public String getInstance() { 28 | return INSTANCE; 29 | } 30 | 31 | /** 32 | * This is a noop. The only key supproted is 'local' and the only data supported is MonitorFactory.getRootMonitor() 33 | */ 34 | @Override 35 | public void put() { 36 | } 37 | 38 | /** 39 | * This is a noop. The only key supported is 'local' and the only data supported is MonitorFactory.getRootMonitor() 40 | */ 41 | @Override 42 | public void put(String instanceKey) { 43 | 44 | } 45 | 46 | @Override 47 | public MonitorComposite get(String instanceKey) { 48 | if (INSTANCE.equalsIgnoreCase(instanceKey)) { 49 | return MonitorFactory.getRootMonitor(); 50 | } 51 | 52 | return null; 53 | } 54 | 55 | @Override 56 | public void remove(String instanceKey) { 57 | if (INSTANCE.equalsIgnoreCase(instanceKey)) { 58 | MonitorFactory.reset(); 59 | } 60 | } 61 | 62 | 63 | 64 | } 65 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/http/HttpMon.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.http; 2 | 3 | import javax.servlet.ServletException; 4 | import java.io.IOException; 5 | 6 | /** Generic monitoring interface used with HttpServletRequest, and HttpServletResponse objects used in servlet containers. 7 | * It will also monitor any objects that implement these interfaces as well as any of the methods the implementing classes 8 | * add to the interface. Examples would be requests/responses provided by tomcat, jboss, jetty containers. 9 | * 10 | * @author steve souza 11 | * 12 | */ 13 | public interface HttpMon { 14 | 15 | public HttpMon start(); 16 | 17 | public void stop(); 18 | 19 | public String getDetailLabel(); 20 | 21 | public void setException(Throwable t); 22 | 23 | public void throwException(Throwable t) throws IOException, ServletException; 24 | 25 | public Throwable getException(); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/http/HttpMonNull.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.http; 2 | 3 | import javax.servlet.ServletException; 4 | import java.io.IOException; 5 | 6 | /** 7 | * HttpMon that is used instead of HttpMonRequest when monitoring is disabled. 8 | * Essentially this class will be used as a singleton with noop methods. 9 | * 10 | * @author steve souza 11 | * 12 | */ 13 | class HttpMonNull implements HttpMon { 14 | 15 | HttpMonNull() { 16 | } 17 | 18 | public HttpMon start() { 19 | return this; 20 | } 21 | 22 | public void stop() { 23 | } 24 | 25 | public String getDetailLabel() { 26 | return ""; 27 | } 28 | 29 | public Throwable getException() { 30 | return null; 31 | } 32 | 33 | public void setException(Throwable t) { 34 | } 35 | 36 | public void throwException(Throwable t) throws IOException, ServletException { 37 | if (t instanceof ServletException) 38 | throw (ServletException)t; 39 | else if (t instanceof IOException) 40 | throw (IOException)t; 41 | else 42 | throw new ServletException(t); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/http/JettyHttpMonFactory.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.http; 2 | 3 | /** 4 | * Factory used in the JAMonJettyHandler. Usually this need not be used directly, but via JAMonJettyHandler. 5 | * 6 | */ 7 | public class JettyHttpMonFactory extends HttpMonFactory { 8 | 9 | private static final long serialVersionUID = 278L; 10 | 11 | public JettyHttpMonFactory(String labelPrefix) { 12 | super(labelPrefix); 13 | } 14 | 15 | @Override 16 | HttpMonItem createHttpMonItem(String label) { 17 | return new JettyHttpMonItem(label, this); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/http/JettyHttpMonItem.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.http; 2 | 3 | 4 | import com.jamonapi.Monitor; 5 | import com.jamonapi.MonitorFactory; 6 | import org.mortbay.jetty.Request; 7 | 8 | /** 9 | * Used to monitor jetty requests via the JAMonJettyHandler. 10 | */ 11 | class JettyHttpMonItem extends HttpMonItem { 12 | 13 | JettyHttpMonItem() { 14 | } 15 | 16 | JettyHttpMonItem(String label, HttpMonFactory httpMonFactory) { 17 | super(label, httpMonFactory); 18 | } 19 | 20 | 21 | /** 22 | * Note. I am no longer sure that the following statements still hold true for jetty. 2/15/15 23 | * 24 | * Jetty Handlers does not let jamon start/stop time them. It seems the request is done by the time jamon gets it. 25 | * To overcome this use the jetty api to get the time of a request for a page. If it isn't a jetty request then call 26 | * the parent. Note although start is called because the timing for jetty is done after the request is finished 27 | * 'active' statistics will not be accurate. 28 | */ 29 | @Override 30 | // Only called if this is a time monitor i.e units are 'ms.' 31 | Monitor startTimeMon(HttpMonRequest httpMonBase) { 32 | if (httpMonBase.getRequest() instanceof Request) 33 | return MonitorFactory.getMonitor(getMonKey(httpMonBase)).start(); 34 | else 35 | return super.startTimeMon(httpMonBase); 36 | } 37 | 38 | // Only called if this is a time monitor i.e units are 'ms.' 39 | @Override 40 | void stopTimeMon(HttpMonRequest httpMonBase) { 41 | if (httpMonBase.getRequest() instanceof Request) { 42 | Request request=(Request)httpMonBase.getRequest(); 43 | Monitor mon=httpMonBase.getNextTimeMon(); 44 | if (mon!=null) { 45 | mon.add(System.currentTimeMillis()-request.getTimeStamp()).stop();// figure elapsed time and then decrement active. 46 | } 47 | } else 48 | super.stopTimeMon(httpMonBase); 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/jmx/ExceptionDeltaMXBeanImp.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | import com.jamonapi.utils.NumberDelta; 4 | 5 | import javax.management.ObjectName; 6 | 7 | /** 8 | * Implementation that tracks exceptions deltas/changes between calls of the number of exceptions caught by jamon. 9 | */ 10 | public class ExceptionDeltaMXBeanImp extends ExceptionMXBeanImp { 11 | private NumberDelta delta = new NumberDelta(); 12 | 13 | public static ObjectName getObjectName() { 14 | return JmxUtils.getObjectName(ExceptionMXBean.class.getPackage().getName() + ":type=delta,name=Exceptions"); 15 | } 16 | 17 | @Override 18 | public long getExceptionCount() { 19 | long count = super.getExceptionCount(); 20 | return (long) delta.setValue(count).getDelta(); 21 | } 22 | 23 | 24 | } 25 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/jmx/ExceptionMXBean.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * MxBean that tracks the count of the number of exceptions thrown. It also shows the full stacktrace of the 7 | * most recent exception thrown. 8 | */ 9 | public interface ExceptionMXBean { 10 | static final String LABEL = "com.jamonapi.Exceptions"; 11 | static final String UNITS = "Exception"; 12 | /** 13 | * Get the stacktrace in string format of the most recently thrown exception. 14 | * @return stacktrace 15 | */ 16 | public String getMostRecentException(); 17 | 18 | /** 19 | * Get the total count of exceptions thrown. 20 | * 21 | * @return number of exceptions thrown 22 | */ 23 | public long getExceptionCount(); 24 | 25 | /** 26 | * Get the date of the most recently thrown exception. 27 | * 28 | * @return date 29 | */ 30 | public Date getWhen(); 31 | } 32 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/jmx/ExceptionMXBeanImp.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | import com.jamonapi.JAMonBufferListener; 4 | import com.jamonapi.JAMonListener; 5 | import com.jamonapi.Monitor; 6 | import com.jamonapi.MonitorFactory; 7 | 8 | import javax.management.ObjectName; 9 | import java.util.Date; 10 | 11 | /** 12 | * Track exceptions caught by jamon. 13 | */ 14 | public class ExceptionMXBeanImp implements ExceptionMXBean { 15 | private static final int STACKTRACE_INDEX = 1; 16 | public static ObjectName getObjectName() { 17 | return JmxUtils.getObjectName(ExceptionMXBean.class.getPackage().getName() + ":type=current,name=Exceptions"); 18 | } 19 | 20 | @Override 21 | public String getMostRecentException() { 22 | if (!MonitorFactory.exists(LABEL, UNITS)) { 23 | return "No exceptions have been thrown"; 24 | } 25 | if (!MonitorFactory.getMonitor(LABEL, UNITS).hasListener("value", "FIFOBuffer")) { 26 | return "Exception Stacktrace tracking is not enabled."; 27 | } 28 | JAMonListener listener = MonitorFactory.getMonitor(LABEL, UNITS).getListenerType("value").getListener("FIFOBuffer"); 29 | if (!(listener instanceof JAMonBufferListener) || ((JAMonBufferListener) listener).isEmpty()) { 30 | return "There are no stacktraces"; 31 | } 32 | 33 | return getMostRecentStacktrace((JAMonBufferListener) listener); 34 | } 35 | 36 | @Override 37 | public long getExceptionCount() { 38 | return JmxUtils.getCount(LABEL, UNITS); 39 | } 40 | 41 | @Override 42 | public Date getWhen() { 43 | return JmxUtils.getDate(LABEL, UNITS, Monitor.LASTACCESS); 44 | } 45 | 46 | private static String getMostRecentStacktrace(JAMonBufferListener listener) { 47 | Object[][] stackTraces = listener.getDetailData().getData(); 48 | int mostRecent = stackTraces.length-1; 49 | return stackTraces[mostRecent][STACKTRACE_INDEX].toString(); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/jmx/FreeDiskSpace.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | import java.io.File; 4 | 5 | /** 6 | * Give free disk space. On my mac getFreeSpace() roughly maps to 'Avail', and 7 | * getTotalSpace() maps to 'Size'. I used the definition of 1000 as that seems to be the more standard 8 | * definition for drive sizes. Note units for the methods in this calls are in GB. 9 | * 10 | * df -H 11 | * Filesystem Size Used Avail Capacity iused ifree %iused Mounted on 12 | * /dev/disk1 499G 210G 289G 43% 51291254 70507400 42% 13 | */ 14 | class FreeDiskSpace { 15 | static final double GB = 1000L*1000L*1000L; 16 | private File dir; 17 | 18 | /** 19 | * Defaults to root directory. 20 | */ 21 | public FreeDiskSpace() { 22 | this(new File(File.separator)); 23 | } 24 | 25 | /** 26 | * 27 | * @param dir absolute directory location to check diskspace for 28 | */ 29 | public FreeDiskSpace(File dir) { 30 | this.dir = dir; 31 | } 32 | 33 | /** 34 | * 35 | * @return free space in GB 36 | */ 37 | public double getFreeSpace() { 38 | return dir.getFreeSpace()/GB; 39 | } 40 | 41 | /** 42 | * 43 | * @return freeSpace/totalSpace 44 | */ 45 | public double getFreeSpacePercent() { 46 | return getFreeSpace()/getTotalSpace(); 47 | } 48 | 49 | /** 50 | * 51 | * @return total space in GB 52 | */ 53 | public double getTotalSpace() { 54 | return dir.getTotalSpace()/GB; 55 | } 56 | 57 | public String getAbsolutePath() { 58 | return dir.getAbsolutePath(); 59 | } 60 | 61 | public String toString() { 62 | return "path="+getAbsolutePath()+", freeSpace="+getFreeSpace()+" GB, totalSpace="+getTotalSpace()+" GB, freeSpacePercent="+getFreeSpacePercent(); 63 | } 64 | 65 | } 66 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/jmx/GcMXBean.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * MxBean that gives information about the most recent gc firing. This could be a major or minor collection. 7 | */ 8 | public interface GcMXBean { 9 | /** 10 | * @return String containing detailed information about the most recent gc firing. 11 | */ 12 | public String getGcInfo(); 13 | 14 | /** 15 | * 16 | * @return date of the most recent gc firing. 17 | */ 18 | public Date getWhen(); 19 | 20 | /** 21 | * @return duration of the most recent gc firing in ms. 22 | */ 23 | public long getDuration(); 24 | } 25 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/jmx/HttpStatusDeltaMXBeanImp.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | import com.jamonapi.utils.NumberDelta; 4 | 5 | import javax.management.ObjectName; 6 | 7 | /** 8 | * MXBean that exposes jamon httpStatus metrics deltas. It tracks counts in between invocations for the httpStatus 9 | * 1xx, 2xx, 3xx, 4xx and 5xx 10 | * 11 | * http://en.wikipedia.org/wiki/List_of_HTTP_status_codes 12 | */ 13 | public class HttpStatusDeltaMXBeanImp extends HttpStatusMXBeanImp { 14 | private NumberDelta status1xx = new NumberDelta(); 15 | private NumberDelta status2xx = new NumberDelta(); 16 | private NumberDelta status3xx = new NumberDelta(); 17 | private NumberDelta status4xx = new NumberDelta(); 18 | private NumberDelta status5xx = new NumberDelta(); 19 | 20 | public static ObjectName getObjectName() { 21 | return JmxUtils.getObjectName(HttpStatusDeltaMXBeanImp.class.getPackage().getName() + ":type=delta,name=HttpStatusCodes"); 22 | } 23 | 24 | @Override 25 | public long get1xx() { 26 | long count = super.get1xx(); 27 | return (long) status1xx.setValue(count).getDelta(); } 28 | 29 | @Override 30 | public long get2xx() { 31 | long count = super.get2xx(); 32 | return (long) status2xx.setValue(count).getDelta(); } 33 | 34 | @Override 35 | public long get3xx() { 36 | long count = super.get3xx(); 37 | return (long) status3xx.setValue(count).getDelta(); } 38 | 39 | @Override 40 | public long get4xx() { 41 | long count = super.get4xx(); 42 | return (long) status4xx.setValue(count).getDelta(); } 43 | 44 | @Override 45 | public long get5xx() { 46 | long count = super.get5xx(); 47 | return (long) status5xx.setValue(count).getDelta(); } 48 | } 49 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/jmx/HttpStatusMXBean.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | /** 4 | * MxBean that counts httpStatus frequency. 1xx, 2xx, 3xx, 4xx, 5xx 5 | * 6 | * Associated jamon monitoring label is of the format: 7 | * com.jamonapi.http.response.getStatus().summary: 8 | * 9 | * http://en.wikipedia.org/wiki/List_of_HTTP_status_codes 10 | */ 11 | 12 | public interface HttpStatusMXBean { 13 | static final String UNITS = "httpStatus"; 14 | static final String LABEL = "com.jamonapi.http.response.getStatus().summary: "; 15 | 16 | public long get1xx(); 17 | public long get2xx(); 18 | public long get3xx(); 19 | public long get4xx(); 20 | public long get5xx(); 21 | } 22 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/jmx/HttpStatusMXBeanImp.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | import javax.management.ObjectName; 4 | 5 | /** 6 | * MXBean that exposes jamon http status counts for 1xx, 2xx, 3xx, 4xx, 5xx. Where 4xx would include a count of 7 | * http status 404 and any else in the 400 series. 8 | * 9 | * http://en.wikipedia.org/wiki/List_of_HTTP_status_codes 10 | * 11 | */ 12 | public class HttpStatusMXBeanImp implements HttpStatusMXBean { 13 | public static ObjectName getObjectName() { 14 | return JmxUtils.getObjectName(HttpStatusMXBeanImp.class.getPackage().getName() + ":type=current,name=HttpStatusCodes"); 15 | } 16 | 17 | private long getCount(String label) { 18 | return JmxUtils.getCount(LABEL+label, UNITS); 19 | } 20 | 21 | @Override 22 | public long get1xx() { 23 | return getCount("1xx"); 24 | } 25 | 26 | @Override 27 | public long get2xx() { 28 | return getCount("2xx"); 29 | } 30 | 31 | @Override 32 | public long get3xx() { 33 | return getCount("3xx"); 34 | } 35 | 36 | @Override 37 | public long get4xx() { 38 | return getCount("4xx"); 39 | } 40 | 41 | @Override 42 | public long get5xx() { 43 | return getCount("5xx"); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/jmx/JamonJmxBeanProperty.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | /** 4 | * Represents a value used to grab a jmx entries values from a jamon monitor. This is used 5 | * to configure jamon jmx. 6 | */ 7 | public interface JamonJmxBeanProperty { 8 | /** 9 | * example: com.jamonapi.Exceptions 10 | */ 11 | String getLabel(); 12 | 13 | /** 14 | * example: Exception 15 | */ 16 | String getUnits(); 17 | 18 | /** 19 | * Return logical name to be used instead of label, or empty string if it doesn't exist. 20 | */ 21 | String getName(); 22 | } 23 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/jmx/JamonJmxBeanPropertyDefault.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | 4 | /** 5 | * Value object that holds the label, units and logical name of a monitor. This is used 6 | * to get values from jamon for display in jmx. 7 | */ 8 | public class JamonJmxBeanPropertyDefault implements JamonJmxBeanProperty { 9 | protected final String label; 10 | protected final String units; 11 | protected final String name; 12 | 13 | public JamonJmxBeanPropertyDefault(String label, String units, String name) { 14 | this.label = label; 15 | this.units = units; 16 | this.name = name; 17 | } 18 | 19 | /** example: com.jamonapi.Exceptions */ 20 | public String getLabel() { 21 | return label; 22 | } 23 | 24 | /** example: Exception */ 25 | public String getUnits() { 26 | return units; 27 | } 28 | 29 | /** Return logical name to be used instead of label, or empty string if it doesn't exist. */ 30 | public String getName() { 31 | return name; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/jmx/JamonMXBean.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | /** 4 | * MXBean that allows for basic management of jamon. 5 | */ 6 | public interface JamonMXBean { 7 | public String getVersion(); 8 | public boolean getEnabled(); 9 | public void setEnabled(boolean enable); 10 | public void reset(); 11 | } 12 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/jmx/JamonMXBeanImp.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | import com.jamonapi.MonitorFactory; 4 | 5 | import javax.management.ObjectName; 6 | 7 | /** 8 | * MXBean that allows you to manage jamon 9 | */ 10 | public class JamonMXBeanImp implements JamonMXBean { 11 | 12 | public static ObjectName getObjectName() { 13 | return JmxUtils.getObjectName(JamonMXBeanImp.class.getPackage().getName() + ":type=current,name=Jamon"); 14 | } 15 | 16 | @Override 17 | public String getVersion() { 18 | return MonitorFactory.getVersion(); 19 | } 20 | 21 | @Override 22 | public boolean getEnabled() { 23 | return MonitorFactory.isEnabled(); 24 | } 25 | 26 | @Override 27 | public void setEnabled(boolean enable) { 28 | MonitorFactory.setEnabled(enable); 29 | } 30 | 31 | @Override 32 | public void reset() { 33 | MonitorFactory.reset(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/jmx/Log4jMXBean.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | /** 4 | * MxBean that counts how many times each of the various log4j logging methods is called (i.e. 5 | * TRACE, DEBUG, INFO, ERROR, ... 6 | */ 7 | public interface Log4jMXBean { 8 | static final String UNITS = "log4j"; 9 | public long getTrace(); 10 | public long getDebug(); 11 | public long getWarn(); 12 | public long getInfo(); 13 | public long getError(); 14 | public long getFatal(); 15 | public long getTotal(); 16 | } 17 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/jmx/Log4jMXBeanImp.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | import javax.management.ObjectName; 4 | 5 | /** 6 | * MXBean that exposes jamon log4j metrics. Note jamon log4j tracking must be enabled. It tracks counts 7 | * for each of the log levels (DEBUG, INFO,...) 8 | * 9 | */ 10 | public class Log4jMXBeanImp implements Log4jMXBean { 11 | public static ObjectName getObjectName() { 12 | return JmxUtils.getObjectName(Log4jMXBeanImp.class.getPackage().getName() + ":type=current,name=Log4j"); 13 | } 14 | 15 | @Override 16 | public long getTrace() { 17 | return getCount("com.jamonapi.log4j.JAMonAppender.TRACE"); 18 | } 19 | 20 | @Override 21 | public long getDebug() { 22 | return getCount("com.jamonapi.log4j.JAMonAppender.DEBUG"); 23 | } 24 | 25 | @Override 26 | public long getWarn() { 27 | return getCount("com.jamonapi.log4j.JAMonAppender.WARN"); 28 | } 29 | 30 | @Override 31 | public long getInfo() { 32 | return getCount("com.jamonapi.log4j.JAMonAppender.INFO"); 33 | } 34 | 35 | @Override 36 | public long getError() { 37 | return getCount("com.jamonapi.log4j.JAMonAppender.ERROR"); 38 | } 39 | 40 | @Override 41 | public long getFatal() { 42 | return getCount("com.jamonapi.log4j.JAMonAppender.FATAL"); 43 | } 44 | 45 | @Override 46 | public long getTotal() { 47 | return getCount("com.jamonapi.log4j.JAMonAppender.TOTAL"); 48 | } 49 | 50 | private long getCount(String label) { 51 | return JmxUtils.getCount(label, UNITS); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/jmx/MonitorMXBean.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * Interface for configurable jamon jmx beans. Essentially it exposes the values of a monitor. 7 | */ 8 | public interface MonitorMXBean { 9 | public double getTotal(); 10 | public double getAvg(); 11 | public double getMin(); 12 | public double getMax(); 13 | public double getHits(); 14 | public double getStdDev(); 15 | public Date getFirstAccess(); 16 | public Date getLastAccess(); 17 | public double getLastValue(); 18 | public double getActive(); 19 | public double getMaxActive(); 20 | public double getAvgActive(); 21 | public String getLabel(); 22 | public String getUnits(); 23 | public String getName(); 24 | } 25 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/jmx/MonitorMsMXBean.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.jmx; 2 | 3 | /** 4 | * Interface that tracks range counts for 'ms.' based jamon monitors 5 | */ 6 | public interface MonitorMsMXBean extends MonitorMXBean { 7 | public long get_Count00_LessThan_0ms(); 8 | public long get_Count01_0_10ms(); 9 | public long get_Count02_10_20ms(); 10 | public long get_Count03_20_40ms(); 11 | public long get_Count04_40_80ms(); 12 | public long get_Count05_80_160ms(); 13 | public long get_Count06_160_320ms(); 14 | public long get_Count07_320_640ms(); 15 | public long get_Count08_640_1280ms(); 16 | public long get_Count09_1280_2560ms(); 17 | public long get_Count10_2560_5120ms(); 18 | public long get_Count11_5120_10240ms(); 19 | public long get_Count12_10240_20480ms(); 20 | public long get_Count13_GreaterThan_20480ms(); 21 | } 22 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/package.html: -------------------------------------------------------------------------------- 1 | 2 | This package contains classes and interfaces used to monitor Java applications. 3 | 4 |

For 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 | *
    9 | *
  • Original=ERROR Invalid login name: 'ssouza', 404 10 | * --> becomes=ERROR Invalid login name: ?,? 11 | * 12 | *
  • Original=ERROR Invalid login name: ssouza, _404 13 | * --> becomes (no change)=ERROR Invalid login name: ssouza, _404 14 | *
15 | */ 16 | public String generalize(String detail) { 17 | return new SQLDeArger(detail).getParsedSQL(); 18 | } 19 | 20 | 21 | 22 | } 23 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/utils/DetailData.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.utils; 2 | 3 | import java.io.Serializable; 4 | 5 | /** Interface for array tabular data */ 6 | public interface DetailData extends Serializable { 7 | public String[] getHeader(); 8 | public Object[][] getData(); 9 | } 10 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/utils/DetailDataWrapper.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.utils; 2 | 3 | public class DetailDataWrapper implements DetailData { 4 | 5 | private static final long serialVersionUID = 278L; 6 | private String[] header; 7 | private Object[][] data; 8 | 9 | public DetailDataWrapper(String[] header, Object[][] data) { 10 | this.header=header; 11 | this.data=data; 12 | } 13 | 14 | public String[] getHeader() { 15 | return header; 16 | } 17 | 18 | public Object[][] getData() { 19 | return data; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/utils/EnumIterator.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.utils; 2 | 3 | import java.util.Enumeration; 4 | 5 | 6 | /** Simple Wrapper utility class that makes an Enumeration behave like an Iterator. **/ 7 | public class EnumIterator extends java.lang.Object implements java.util.Iterator { 8 | Enumeration enumer; 9 | 10 | public EnumIterator(Enumeration enumer) { 11 | this.enumer=enumer; 12 | } 13 | 14 | public boolean hasNext() { 15 | return enumer.hasMoreElements(); 16 | } 17 | 18 | public Object next() { 19 | return enumer.nextElement(); 20 | } 21 | 22 | public void remove() { 23 | throw new UnsupportedOperationException(); 24 | } 25 | 26 | } 27 | 28 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/utils/FIFOBufferHolder.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.utils; 2 | 3 | import java.util.LinkedList; 4 | import java.util.List; 5 | 6 | /** First-in, first-out buffer. When the BufferList is filled the first element is removed to 7 | * make room for the newest value, then the second oldest etc. Used in BufferList and subsequently 8 | * JAMonBufferListeners. 9 | * 10 | */ 11 | public class FIFOBufferHolder implements BufferHolder { 12 | private static final long serialVersionUID = 278L; 13 | private LinkedList bufferList=new LinkedList(); 14 | 15 | public void add(Object replaceWithObj) { 16 | bufferList.addLast(replaceWithObj); 17 | } 18 | 19 | public void remove(Object replaceWithObj) { 20 | bufferList.removeFirst(); 21 | } 22 | 23 | public boolean shouldReplaceWith(Object replaceWithObj) { 24 | return true; 25 | } 26 | 27 | public List getCollection() { 28 | return bufferList; 29 | } 30 | 31 | public List getOrderedCollection() { 32 | return bufferList; 33 | 34 | } 35 | 36 | public void setCollection(List list) { 37 | this.bufferList=(LinkedList) list; 38 | 39 | } 40 | 41 | public BufferHolder copy() { 42 | return new FIFOBufferHolder(); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/utils/Generalizer.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.utils; 2 | 3 | /** This class interface will return a detail form in the getDetailLabel method which 4 | * is appropriate for logging. getSummaryLabel returns a label that is appropriate for jamon 5 | * (i.e. not too unique). toString() should always return the more general/summary label. 6 | * 7 | *

Example: 8 | *

    9 | *
  1. getDetailLabel()=select * from table where key=100 and name='mindy' 10 | *
  2. getLabel()=select * from table where key=? and name=? 11 | *
  3. toString()=getLabel() 12 | *
13 | */ 14 | public interface Generalizer { 15 | public String generalize(String detail); 16 | } 17 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/utils/Logger.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.utils; 2 | 3 | /** Very Simple Utility class used for Logging. **/ 4 | public class Logger { 5 | String prefix=""; 6 | 7 | protected Logger() { 8 | } 9 | 10 | private static Logger logger = new Logger(); 11 | 12 | private static Logger createInstance() { 13 | return logger; 14 | } 15 | 16 | public static void log(Object obj) { 17 | createInstance().instanceLog(obj); 18 | } 19 | 20 | public static void logInfo(Object obj) { 21 | // This function will be able to be disabled at runtime. i.e. do nothing whereas log is permanent. 22 | // for now they do the same thing however. 23 | createInstance().instanceLog(obj); 24 | } 25 | 26 | public static void logDebug(Object obj) { 27 | // This function will be able to be disabled at runtime. i.e. do nothing whereas log is permanent. 28 | // for now they do the same thing however. 29 | createInstance().instanceLog(obj); 30 | } 31 | 32 | protected void instanceLog(Object obj) { 33 | System.out.println(prefix+obj); 34 | } 35 | } 36 | 37 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/utils/NumberDelta.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.utils; 2 | 3 | /** This class takes successive values and returns the difference or delta between them. Can be used to 4 | * get data from jamon from one run and compare it to the next run. The deltal could be graphed for values like 5 | * avg, min, max, lastValue etc. 6 | * 7 | * In pseudocode you would graph the difference between this jamon run and the previous one like this. 8 | * 9 | * currentMoniotr.getAvg()-previousMonitor.getAvg(); 10 | * 11 | * Or using NumberDelta 12 | * NumberDelta delta=new NumberDelta(); 13 | * delta.setValue(mon.getAvg()); 14 | * ...time elapses... 15 | * delta.setValue(mon.getAvg()); 16 | * System.out.println(delta.getDelta()); 17 | * 18 | * */ 19 | 20 | public class NumberDelta { 21 | private double prevValue; 22 | private double value; 23 | 24 | public NumberDelta setValue(double val) { 25 | prevValue=value; 26 | this.value=val; 27 | return this; 28 | } 29 | 30 | public double getDelta() { 31 | return value-prevValue; 32 | } 33 | 34 | 35 | 36 | } 37 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/utils/ToArray.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.utils; 2 | 3 | /** Interface used to return info from a monitor. Primarily will be used in the JAMonBufferListener 4 | * class. 5 | * 6 | */ 7 | public interface ToArray { 8 | public Object[] toArray(); 9 | } 10 | -------------------------------------------------------------------------------- /jamon/src/main/java/com/jamonapi/utils/package.html: -------------------------------------------------------------------------------- 1 | 2 | This package contains utility classes used by the JAMon implementation that are of general use beyond JAMon. 3 | 4 |

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 list = new ArrayList(); 28 | list.add(1); 29 | list.add(2); 30 | list.add(3); 31 | list.add(4); 32 | 33 | CommandIterator.iterate(list, createAssertCommand()); 34 | } 35 | 36 | @Test 37 | public void testVector() throws Exception { 38 | Vector vector = new Vector(); 39 | vector.addElement(1); 40 | vector.addElement(2); 41 | vector.addElement(3); 42 | vector.addElement(4); 43 | 44 | CommandIterator.iterate(vector.elements(), createAssertCommand()); 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /jamon/src/test/java/com/jamonapi/utils/NumberDeltaTest.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.utils; 2 | 3 | import org.junit.After; 4 | import org.junit.Before; 5 | import org.junit.Test; 6 | 7 | import static org.assertj.core.api.Assertions.assertThat; 8 | 9 | public class NumberDeltaTest { 10 | 11 | private NumberDelta delta=new NumberDelta(); 12 | @Before 13 | public void setUp() throws Exception { 14 | 15 | } 16 | 17 | @After 18 | public void tearDown() throws Exception { 19 | 20 | } 21 | 22 | @Test 23 | public void testDefaultDelta() throws Exception { 24 | assertThat(delta.getDelta()).isEqualTo(0); 25 | } 26 | 27 | @Test 28 | public void testWithValue1() throws Exception { 29 | delta.setValue(1); 30 | assertThat(delta.getDelta()).isEqualTo(1); 31 | } 32 | 33 | @Test 34 | public void testWith2Numbers() throws Exception { 35 | delta.setValue(1).setValue(101); 36 | assertThat(delta.getDelta()).isEqualTo(100); 37 | } 38 | 39 | @Test 40 | public void testWith3Numbers() throws Exception { 41 | delta.setValue(1); 42 | delta.setValue(101); 43 | delta.setValue(1001); 44 | assertThat(delta.getDelta()).isEqualTo(900); 45 | } 46 | @Test 47 | public void testWithNegative() throws Exception { 48 | delta.setValue(-100); 49 | delta.setValue(100); 50 | assertThat(delta.getDelta()).isEqualTo(200); 51 | } 52 | 53 | @Test 54 | public void testWithNegative2() throws Exception { 55 | delta.setValue(100); 56 | delta.setValue(-100); 57 | assertThat(delta.getDelta()).isEqualTo(-200); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /jamon/src/test/java/com/jamonapi/utils/SerializationUtilsTest.java: -------------------------------------------------------------------------------- 1 | package com.jamonapi.utils; 2 | 3 | import org.junit.Test; 4 | 5 | import java.io.ByteArrayInputStream; 6 | import java.io.ByteArrayOutputStream; 7 | 8 | import static org.assertj.core.api.Assertions.assertThat; 9 | 10 | 11 | public class SerializationUtilsTest { 12 | 13 | @Test 14 | public void testSerializeDeserialize() throws Throwable { 15 | String message = "serialize/deserialize me steve"; 16 | ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 17 | SerializationUtils.serialize(message, outputStream); 18 | String answer = SerializationUtils.deserialize(new ByteArrayInputStream(outputStream.toByteArray())); 19 | assertThat(answer).isEqualTo(message); 20 | } 21 | 22 | @Test 23 | public void testDeepCopy() throws Throwable { 24 | String message = "serialize/deserialize me steve"; 25 | String answer = SerializationUtils.deepCopy(message); 26 | assertThat(answer).isEqualTo(message); 27 | } 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /jamon/src/test/resources/jamonapi2.properties: -------------------------------------------------------------------------------- 1 | # jamon properties that allow for configuration of how jamon will run. http://www.jamonampi.com 2 | # Note pathnames need to be escaped: path=c:\\docs\\doc1 3 | 4 | distributedDataRefreshRateInMinutes=2 5 | jamonDataPersister=com.jamonapi.distributed.DistributedJamonHazelcastPersister2 6 | jamonDataPersister.label=myapplication name 7 | jamonDataPersister.label.prefix=myprefix: 8 | jamonDataPersister.directory=persistence/jamondata 9 | 10 | jamonListener[1].key=com.jamonapi.Exceptions, Exception 11 | jamonListener[1].name=FIFOBuffer 12 | jamonListener[1].type=value 13 | 14 | jamonListener[2].key=java.lang.RuntimeException, Exception 15 | jamonListener[2].name=FIFOBuffer 16 | jamonListener[2].type=value 17 | 18 | # uses defaults of value, and FIFOBuffer 19 | jamonListener[3].key=com.jamonapi.http.JAMonJettyHandlerNew.request.allPages, ms. 20 | 21 | # Test to see if it overwrites default of com.jamonapi.Exceptions fifobuffer. 22 | jamonListener[50].key=com.jamonapi.log4j.JAMonAppender.ERROR, log4j 23 | 24 | # jmx beans 25 | jamonJmxBean[1].key=com.jamonapi.http.JAMonJettyHandlerNew.request.allPages, ms., com.jamonapi.http.JAMonTomcatValve.request.allPages, ms., Jamon.HttpPageRequests 26 | jamonJmxBean[2].key=MonProxy-SQL-Type: All, ms., Sql 27 | jamonJmxBean[3].key=MonProxy-SQL-Type: All, ms. 28 | 29 | # When different instances jamon data is aggregated this variable specifies how many servers the detail summary will hold before 30 | # rolling over. 31 | monitorCompositeCombiner.summaryFifoBufferSize=500 32 | # Size for any BufferListeners that are to be combined from the various servers. 33 | monitorCompositeCombiner.combinedFifoBufferSize=300 34 | 35 | -------------------------------------------------------------------------------- /jamon/src/test/resources/log4j2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /jamon/src/test/resources/log4j2_defaults.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /jamon/src/test/resources/minimalApplicationContext.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | 14 | 15 | 16 | 17 | 18 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /jamon_osmon/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4.0.0 3 | 4 | 5 | com.jamonapi 6 | jamon-parent 7 | 2.82 8 | 9 | 10 | com.jamonapi 11 | jamon_osmon 12 | jar 13 | JAMon OS Monitoring 14 | 15 | 16 | jamon-osmon-${project.version} 17 | 18 | 19 | src/main/resources 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /jamon_osmon/src/main/resources/osmon/httpprog.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Author: Steve Souza http://www.jamonapi.com 3 | # httpprog help: returns curl, wget or empty string if there is neither 4 | # Note wget encodes a url by default whereas curl does not so they are treated differently 5 | 6 | 7 | # Change jamonserver to point to your jamon instance. 8 | jamonserver=http://localhost:8080/jamon/ 9 | 10 | 11 | # determine if wget or curl is installed. 12 | httprequestprog=`which wget` 13 | # if wget was found then use it else if curl is found use it. 14 | if [ -n "$httprequestprog" ] 15 | then 16 | # -q = quiet - needed because otherwise wget spews out a whole lot including a progressbar. 17 | # -O - = Send output to stdout - needed because you want the file output directly (in stead of in a downloaded file). 18 | httprequestprog="wget -q -O - " 19 | else 20 | httprequestprog=`which curl` 21 | if [ -n "${httprequestprog}" ] 22 | then 23 | httprequestprog=curl 24 | fi 25 | fi 26 | 27 | # if there is a program echo the command for jamon else echo nothing. 28 | if [ -n "$httprequestprog" ] 29 | then 30 | echo ${httprequestprog}" "${jamonserver} 31 | fi 32 | 33 | -------------------------------------------------------------------------------- /jamon_osmon/src/main/resources/osmon/jadd.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Author: Steve Souza - http://www.jamonapi.com - (see jamon_readme.txt for more info) 3 | # jadd help: 4 | # curl "http://localhost:8080/jamon/Mon?add=os.helloworld&units=bytes&value=125.9" 5 | 6 | 7 | # Change jamonserver to point to your jamon instance. 8 | jamoncommand=Mon?add 9 | jamonerrormessage= 10 | 11 | # if no arg value provided to script it is an error 12 | if [ -z "$1" ] && [ -z "$2" ] && [ -z "$3" ] 13 | then 14 | jamonerrormessage="Error: Incorrect calling syntax. You must provide a label, units, and an integer or float value. Optionally you can provide a detail value: add.sh os.mylabel myunits 20.5 mydetailsisoptional" 15 | fi 16 | 17 | 18 | # determine if wget or curl is installed. 19 | httprequestprog=`httpprog.sh` 20 | 21 | # if their is no program (i.e. value is null) then create an error message 22 | if [ -z "$httprequestprog" ] 23 | then 24 | jamonerrormessage="Error: wget or curl must be available." 25 | fi 26 | 27 | 28 | # if the error message is empty then proceed 29 | if [ -z "$jamonerrormessage" ] 30 | then 31 | jamonaddlabel=`jencode.sh "${1}"` 32 | jamonunits=${2} 33 | jamonvalue=${3} 34 | jamondetail= 35 | if [ -n "${4}" ] 36 | then 37 | jamondetail=`jencode.sh "${4}"` 38 | fi 39 | 40 | # curl http://localhost:8080/jamon/Mon?add=os.test&units=bytes&value=100 41 | executeprog=${httprequestprog}${jamoncommand}'='${jamonaddlabel}'&units='${jamonunits}'&value='${jamonvalue} 42 | 43 | if [ -n "${jamondetail}" ] 44 | then 45 | # curl http://localhost:8080/jamon/Mon?start=os.test&detail=heysteve 46 | executeprog=${executeprog}'&detail='${jamondetail} 47 | fi 48 | 49 | ## echo "command is: "${executeprog} 50 | ## execute command 51 | 52 | ${executeprog} 53 | else 54 | echo ${jamonerrormessage} 55 | fi -------------------------------------------------------------------------------- /jamon_osmon/src/main/resources/osmon/jencode.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Author: Steve Souza - http://www.jamonapi.com - (see jamon_readme.txt for more info) 3 | # jendode help: jencode.sh "my long string to encode" 4 | # The check below finds the sed file even if the script is not executed from the directory where the script exists. 5 | # 6 | # Note if you don't want to run this script as bash or have an older version of bash that doesn't properly set jamondir 7 | # you can simply run it is an sh script and hardcode the directory where the jamon OS mon scripts are located (minus the trailing '\' 8 | # for example: /myscripts/osmon ) 9 | jamondir=`dirname ${BASH_SOURCE[0]}` 10 | ###jamonencode=`httpprog.sh` 11 | 12 | # wget already encodes 13 | # else if current directory then no need for path 14 | ###if [ "${jamonencode:0:4}" = "wget" ] 15 | ### then 16 | ### echo "$1" 17 | ###elif [ "${jamondir}" = "." ] 18 | if [ "${jamondir}" = "." ] 19 | then 20 | echo "$1" | sed -f urlencode.sed 21 | else 22 | echo "$1" | sed -f $jamondir/urlencode.sed 23 | fi 24 | -------------------------------------------------------------------------------- /jamon_osmon/src/main/resources/osmon/jgetdata.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Author: Steve Souza - http://www.jamonapi.com - (see jamon_readme.txt for more info) 3 | # start help: 4 | # curl "http://localhost:8080/jamon/jamonadmin.jsp?outputTypeValue=xml&ArraySQL=hello%20world" 5 | # Types for output are currently: html, xml (default if not provided), csv. 6 | # ArraySQL lets you put in a string or query to filter by. 7 | # note to remove empty rows from output simply pipe this script in the following manner: getdata.sh | sed -e '/^$/d' 8 | # or getdata.sh csv myfilter | sed -e '/^$/d' 9 | 10 | # Change jamonserver to point to your jamon instance. 11 | jamoncommand=jamonadmin.jsp? 12 | jamondatatype= 13 | jamonerrormessage= 14 | 15 | # if no arg value provided to script it is an error 16 | if [ -z "$1" ] 17 | then 18 | jamondatatype=xml 19 | else 20 | jamondatatype=${1} 21 | fi 22 | 23 | 24 | # determine if wget or curl is installed. 25 | httprequestprog=`httpprog.sh` 26 | 27 | # if their is no program (i.e. value is null) then create an error message 28 | if [ -z "$httprequestprog" ] 29 | then 30 | jamonerrormessage="Error: wget or curl must be available." 31 | fi 32 | 33 | 34 | # if the error message is empty then proceed 35 | if [ -z "$jamonerrormessage" ] 36 | then 37 | jamonarraysql= 38 | if [ -n "${2}" ] 39 | then 40 | jamonarraysql=`jencode.sh "${2}"` 41 | fi 42 | 43 | # curl "http://localhost:8080/jamon/jamonadmin.jsp?outputTypeValue=xml" 44 | executeprog=${httprequestprog}${jamoncommand}'outputTypeValue='${jamondatatype} 45 | if [ -n "${jamonarraysql}" ] 46 | then 47 | # curl "http://localhost:8080/jamon/jamonadmin.jsp?outputTypeValue=xml&ArraySQL=hello%20world" 48 | executeprog=${executeprog}'&ArraySQL='${jamonarraysql} 49 | fi 50 | 51 | # echo "command is: "${executeprog} 52 | ## execute command 53 | ${executeprog} 54 | else 55 | echo ${jamonerrormessage} 56 | fi -------------------------------------------------------------------------------- /jamon_osmon/src/main/resources/osmon/jgetmon.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Author: Steve Souza - http://www.jamonapi.com - (see jamon_readme.txt for more info) 3 | # start help: 4 | # curl "http://localhost:8080/jamon/Mon?get=mylabel&units=myunits&type=avg" 5 | # for time monitors you must provide the units as follows: (note mon returns a string with all values of the monitor) 6 | # curl "http://localhost:8080/jamon/Mon?get=mylabel&units=ms.&type=mon" 7 | 8 | 9 | 10 | # Change jamonserver to point to your jamon instance. 11 | jamoncommand=Mon?get 12 | jamonerrormessage= 13 | 14 | # if no arg value provided to script it is an error 15 | if [ -z "$1" ] && [ -z "$2" ] && [ -z "$3" ] 16 | then 17 | jamonerrormessage="Error: Incorrect calling syntax. You must provide a label, units, and a type (mon, avg, total, min, max, value, lastaccess, firstaccess, stddev, active). " 18 | fi 19 | 20 | 21 | # determine if wget or curl is installed. 22 | httprequestprog=`httpprog.sh` 23 | 24 | # if their is no program (i.e. value is null) then create an error message 25 | if [ -z "$httprequestprog" ] 26 | then 27 | jamonerrormessage="Error: wget or curl must be available." 28 | fi 29 | 30 | 31 | # if the error message is empty then proceed 32 | if [ -z "$jamonerrormessage" ] 33 | then 34 | jamongetlabel=`jencode.sh "${1}"` 35 | jamonunits=${2} 36 | jamongettype=${3} 37 | 38 | # curl http://localhost:8080/jamon/Mon?add=os.test&units=bytes&value=100 39 | executeprog=${httprequestprog}${jamoncommand}'='${jamongetlabel}'&units='${jamonunits}'&type='${jamongettype} 40 | 41 | ## execute command 42 | ${executeprog} 43 | else 44 | echo ${jamonerrormessage} 45 | fi -------------------------------------------------------------------------------- /jamon_osmon/src/main/resources/osmon/jreset.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Author: Steve Souza - http://www.jamonapi.com - (see jamon_readme.txt for more info) 3 | # start help: 4 | # curl "http://localhost:8080/jamon/jamonadmin.jsp?outputTypeValue=xml&ArraySQL=hello%20world" 5 | # Types for output are currently: html, xml (default if not provided), csv. 6 | # ArraySQL lets you put in a string or query to filter by. 7 | # note to remove empty rows from output simply pipe this script in the following manner: getdata.sh | sed -e '/^$/d' 8 | # or getdata.sh csv myfilter | sed -e '/^$/d' 9 | 10 | # Change jamonserver to point to your jamon instance. 11 | jamoncommand=jamonadmin.jsp?action=Reset 12 | jamondatatype= 13 | jamonerrormessage= 14 | 15 | 16 | # determine if wget or curl is installed. 17 | httprequestprog=`httpprog.sh` 18 | 19 | # if their is no program (i.e. value is null) then create an error message 20 | if [ -z "$httprequestprog" ] 21 | then 22 | jamonerrormessage="Error: wget or curl must be available." 23 | fi 24 | 25 | 26 | # if the error message is empty then proceed 27 | if [ -z "$jamonerrormessage" ] 28 | then 29 | 30 | # curl "http://localhost:8080/jamon/jamonadmin.jsp?action=Reset" 31 | executeprog=${httprequestprog}${jamoncommand} 32 | 33 | 34 | ## echo "command is: "${executeprog} 35 | ## execute command 36 | ${executeprog} 37 | else 38 | echo ${jamonerrormessage} 39 | fi -------------------------------------------------------------------------------- /jamon_osmon/src/main/resources/osmon/jskip.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Author: Steve Souza - http://www.jamonapi.com - (see jamon_readme.txt for more info) 3 | # stop help: 4 | # curl "http://localhost:8080/jamon/Mon?skip=os.hello%20world" 5 | 6 | 7 | jamoncommand=Mon?skip 8 | jamonsskiplabel= 9 | jamonerrormessage= 10 | 11 | # if no arg value provided to script it is an error 12 | if [ -n "$1" ] 13 | then 14 | jamonsskiplabel=`jencode.sh "${1}"` 15 | elif [ -n "$jamonlabel" ] 16 | then 17 | jamonsskiplabel=$jamonlabel 18 | else 19 | jamonerrormessage="Error: Incorrect calling syntax. A skip label must be provided: jskip.sh os.mylabel" 20 | fi 21 | 22 | 23 | # determine if wget or curl is installed. 24 | httprequestprog=`httpprog.sh` 25 | 26 | # if their is no program (i.e. value is null) then create an error message 27 | if [ -z "$httprequestprog" ] 28 | then 29 | jamonerrormessage="Error: wget or curl must be available." 30 | fi 31 | 32 | 33 | # if the error message is empty then proceed 34 | if [ -z "$jamonerrormessage" ] 35 | then 36 | 37 | # curl http://localhost:8080/jamon/Mon?stop=os.test 38 | executeprog=${httprequestprog}${jamoncommand}'='${jamonsskiplabel} 39 | 40 | ## echo "command is: "${executeprog} 41 | ## execute command 42 | ${executeprog} 43 | else 44 | echo ${jamonerrormessage} 45 | fi -------------------------------------------------------------------------------- /jamon_osmon/src/main/resources/osmon/jstart.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Author: Steve Souza - http://www.jamonapi.com - (see jamon_readme.txt for more info) 3 | # start help: 4 | # curl "http://localhost:8080/jamon/Mon?start=os.hello%20world&detail=sitting%20at%20starbucks" 5 | 6 | 7 | # Change jamonserver to point to your jamon instance. 8 | jamoncommand=Mon?start 9 | jamonerrormessage= 10 | 11 | # if no arg value provided to script it is an error 12 | if [ -z "$1" ] 13 | then 14 | jamonerrormessage="Error: Incorrect calling syntax. You must provide a label: strt os.mylabel" 15 | fi 16 | 17 | 18 | # determine if wget or curl is installed. 19 | httprequestprog=`httpprog.sh` 20 | 21 | # if their is no program (i.e. value is null) then create an error message 22 | if [ -z "$httprequestprog" ] 23 | then 24 | jamonerrormessage="Error: wget or curl must be available." 25 | fi 26 | 27 | 28 | # if the error message is empty then procee 29 | if [ -z "$jamonerrormessage" ] 30 | then 31 | jamonlabel=`jencode.sh "${1}"` 32 | jamondetail=`jencode.sh "${2}"` 33 | 34 | # curl http://localhost:8080/jamon/Mon?start=os.test 35 | executeprog=${httprequestprog}${jamoncommand}'='${jamonlabel} 36 | 37 | if [ -n "${jamondetail}" ] 38 | then 39 | # curl http://localhost:8080/jamon/Mon?start=os.test&detail=heysteve 40 | executeprog=${executeprog}'&detail='${jamondetail} 41 | fi 42 | 43 | ## echo "command is: "${executeprog} 44 | ## execute command 45 | ${executeprog} 46 | else 47 | echo ${jamonerrormessage} 48 | fi -------------------------------------------------------------------------------- /jamon_osmon/src/main/resources/osmon/jstop.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Author: Steve Souza - http://www.jamonapi.com - (see jamon_readme.txt for more info) 3 | # stop help: 4 | # curl "http://localhost:8080/jamon/Mon?skip=os.hello%20world" 5 | 6 | 7 | jamoncommand=Mon?stop 8 | jamonsstoplabel= 9 | jamonerrormessage= 10 | 11 | 12 | # if no arg value provided to script it is an error 13 | if [ -n "${1}" ] 14 | then 15 | jamonsstoplabel=`jencode.sh "${1}"` 16 | elif [ -n "${jamonlabel}" ] 17 | then 18 | jamonsstoplabel=${jamonlabel} 19 | else 20 | jamonerrormessage="Error: Incorrect calling syntax. A stop label must be provided: jstop.sh os.mylabel" 21 | fi 22 | 23 | # determine if wget or curl is installed. 24 | httprequestprog=`httpprog.sh` 25 | 26 | # if their is no program (i.e. value is null) then create an error message 27 | if [ -z "${httprequestprog}" ] 28 | then 29 | jamonerrormessage="Error: wget or curl must be available." 30 | fi 31 | 32 | 33 | # if the error message is empty then proceed 34 | if [ -z "${jamonerrormessage}" ] 35 | then 36 | 37 | # curl http://localhost:8080/jamon/Mon?stop=os.test 38 | executeprog=${httprequestprog}${jamoncommand}'='${jamonsstoplabel} 39 | 40 | # echo "command is: "${executeprog} 41 | ## execute command 42 | ${executeprog} 43 | else 44 | echo ${jamonerrormessage} 45 | fi -------------------------------------------------------------------------------- /jamon_osmon/src/main/resources/osmon/urlencode.sed: -------------------------------------------------------------------------------- 1 | # Author: Steve Souza http://www.jamonapi.com 2 | # sed script that encodes a string. For example if passed: 'hello world ' it would return 'hello%20world%20'. The /g replaces 3 | # all occurences. This code was taken from a unix forum by user V310 at the following link (Thanks!): 4 | # http://www.unix.com/shell-programming-scripting/59936-url-encoding.html 5 | # See this link for a list of characters that must be enoded: http://www.blooberry.com/indexdot/html/topics/urlencoding.htm 6 | # Note '%' must go first as it is in every replacement string that follows 7 | 8 | s/%/%25/g 9 | s/ /%20/g 10 | s/ /%09/g 11 | s/!/%21/g 12 | s/"/%22/g 13 | s/#/%23/g 14 | s/\$/%24/g 15 | s/\&/%26/g 16 | s/'\''/%27/g 17 | s/(/%28/g 18 | s/)/%29/g 19 | s/\*/%2a/g 20 | s/+/%2b/g 21 | s/,/%2c/g 22 | s/-/%2d/g 23 | s/\./%2e/g 24 | s/\//%2f/g 25 | s/:/%3a/g 26 | s/;/%3b/g 27 | s//%3e/g 28 | s/?/%3f/g 29 | s/@/%40/g 30 | s/\[/%5b/g 31 | s/\\/%5c/g 32 | s/\]/%5d/g 33 | s/\^/%5e/g 34 | s/_/%5f/g 35 | s/`/%60/g 36 | s/{/%7b/g 37 | s/|/%7c/g 38 | s/}/%7d/g 39 | s/~/%7e/g -------------------------------------------------------------------------------- /jamon_war/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4.0.0 3 | 4 | 5 | com.jamonapi 6 | jamon-parent 7 | 2.82 8 | 9 | 10 | com.jamonapi 11 | jamon_war 12 | war 13 | JAMon War 14 | 15 | 16 | jamon 17 | 18 | 19 | -------------------------------------------------------------------------------- /jamon_war/src/main/webapp/META-INF/context.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /jamon_war/src/main/webapp/WEB-INF/lib/fdsapi-1.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/jamon_war/src/main/webapp/WEB-INF/lib/fdsapi-1.2.jar -------------------------------------------------------------------------------- /jamon_war/src/main/webapp/WEB-INF/lib/hsqldb.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/jamon_war/src/main/webapp/WEB-INF/lib/hsqldb.jar -------------------------------------------------------------------------------- /jamon_war/src/main/webapp/WEB-INF/lib/jakarta-oro-2.0.8.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/jamon_war/src/main/webapp/WEB-INF/lib/jakarta-oro-2.0.8.jar -------------------------------------------------------------------------------- /jamon_war/src/main/webapp/WEB-INF/lib/xss-html-filter-1.5.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/jamon_war/src/main/webapp/WEB-INF/lib/xss-html-filter-1.5.jar -------------------------------------------------------------------------------- /jamon_war/src/main/webapp/WEB-INF/web.warContent: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/jamon_war/src/main/webapp/WEB-INF/web.warContent -------------------------------------------------------------------------------- /jamon_war/src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | com.jamonapi.distributed.JamonServletContextListener 12 | 13 | 14 | 15 | 16 | jamonadmin 17 | /jamonadmin.jsp 18 | 19 | 20 | menu 21 | /menu.jsp 22 | 23 | 24 | exceptions 25 | /exceptions.jsp 26 | 27 | 28 | sql 29 | /sql.jsp 30 | 31 | 32 | query 33 | /query.jsp 34 | 35 | 36 | Mon 37 | com.jamonapi.Mon 38 | 39 | 40 | 41 | 42 | Mon 43 | /Mon 44 | 45 | 46 | 47 | 48 | 49 | 50 | 30 51 | 52 | 53 | 54 | 55 | menu.jsp 56 | 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /jamon_war/src/main/webapp/css/JAMonStyles.css: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | Graphics, screen layouts and stylesheets created for the FormattedDataSet by 4 | Eric Laufer. Good job Eric! 5 | */ 6 | 7 | /* 8 | A:ACTIVE { 9 | color : #336633; 10 | } 11 | 12 | A:LINK { 13 | color : #000066; 14 | } 15 | 16 | A:VISITED { 17 | color : #990033; 18 | } 19 | 20 | A:HOVER { 21 | color : #0000CC; 22 | } 23 | */ 24 | BODY { 25 | background : White; 26 | font-family : Arial, Helvetica, sans-serif; 27 | font-size : xx-small; 28 | } 29 | 30 | 31 | TH { 32 | font-size : x-small; 33 | font-weight : bold; 34 | } 35 | 36 | TD { 37 | font-size : xx-small; 38 | font-weight : normal; 39 | } 40 | 41 | BUTTON, INPUT, SELECT { 42 | font-size : 7pt; 43 | } 44 | 45 | .odd { 46 | background : #EEEEEE; 47 | } 48 | 49 | .even { 50 | background : #C5D4E4; 51 | } 52 | 53 | 54 | .rowon { 55 | background : #75A0FF; 56 | } 57 | 58 | 59 | .highlight { 60 | background : red; 61 | } 62 | 63 | .monkey { 64 | 65 | color:#000099; 66 | font-size:150%; 67 | } 68 | 69 | .sectHead { 70 | font-weight : bold; 71 | vertical-align : bottom; 72 | background-color : #3B6588; /*original color 03487F*/ 73 | color : White; 74 | } 75 | 76 | TABLE.layoutMain { 77 | border : 2px solid #03487F; 78 | } 79 | -------------------------------------------------------------------------------- /jamon_war/src/main/webapp/css/formatteddataset.css: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | Graphics, screen layouts and stylesheets created for the FormattedDataSet by 4 | Eric Laufer. Good job Eric! 5 | */ 6 | 7 | /* 8 | A:ACTIVE { 9 | color : #336633; 10 | } 11 | 12 | A:LINK { 13 | color : #000066; 14 | } 15 | 16 | A:VISITED { 17 | color : #990033; 18 | } 19 | 20 | A:HOVER { 21 | color : #0000CC; 22 | } 23 | */ 24 | BODY { 25 | background : White; 26 | font-family : Arial, Helvetica, sans-serif; 27 | font-size : xx-small; 28 | } 29 | 30 | 31 | TH { 32 | font-size : x-small; 33 | font-weight : bold; 34 | } 35 | 36 | TD { 37 | font-size : xx-small; 38 | font-weight : normal; 39 | } 40 | 41 | 42 | .odd { 43 | background : #EEEEEE; 44 | } 45 | 46 | .even { 47 | background : #C5D4E4; 48 | } 49 | 50 | .rowon { 51 | background : gray; 52 | } 53 | 54 | 55 | .sectHead { 56 | font-weight : bold; 57 | vertical-align : bottom; 58 | background-color : #3B6588; /*original color 03487F*/ 59 | color : White; 60 | } 61 | 62 | TABLE.layoutMain { 63 | border : 4px solid #03487F; 64 | } 65 | -------------------------------------------------------------------------------- /jamon_war/src/main/webapp/images/asc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/jamon_war/src/main/webapp/images/asc.gif -------------------------------------------------------------------------------- /jamon_war/src/main/webapp/images/desc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/jamon_war/src/main/webapp/images/desc.gif -------------------------------------------------------------------------------- /jamon_war/src/main/webapp/images/fds_banner2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/jamon_war/src/main/webapp/images/fds_banner2.jpg -------------------------------------------------------------------------------- /jamon_war/src/main/webapp/images/fds_demodb_er.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/jamon_war/src/main/webapp/images/fds_demodb_er.jpg -------------------------------------------------------------------------------- /jamon_war/src/main/webapp/images/fds_logo_small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/jamon_war/src/main/webapp/images/fds_logo_small.jpg -------------------------------------------------------------------------------- /jamon_war/src/main/webapp/images/jamon_banner3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/jamon_war/src/main/webapp/images/jamon_banner3.jpg -------------------------------------------------------------------------------- /jamon_war/src/main/webapp/images/jamon_small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/jamon_war/src/main/webapp/images/jamon_small.jpg -------------------------------------------------------------------------------- /jamon_war/src/main/webapp/images/monmodify.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/jamon_war/src/main/webapp/images/monmodify.gif -------------------------------------------------------------------------------- /push.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | git push origin 3 | git push github_origin 4 | -------------------------------------------------------------------------------- /sourceforge_files.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | mkdir /Users/stevesouza/Documents/sourceforge/jamonrelease/jamonall-2.82/ 3 | cp ./jamon/target/*.jar /Users/stevesouza/Documents/sourceforge/jamonrelease/jamonall-2.82/. 4 | cp ./jamon_osmon/target/*.jar /Users/stevesouza/Documents/sourceforge/jamonrelease/jamonall-2.82/. 5 | cp ./jamon_war/target/*.war /Users/stevesouza/Documents/sourceforge/jamonrelease/jamonall-2.82/. 6 | # note only the destination file name has to change. 7 | cp /Users/stevesouza/Documents/sourceforge/jamonrelease/jamonall-2.76/jamontomcat-2.76.jar /Users/stevesouza/Documents/sourceforge/jamonrelease/jamonall-2.82/jamontomcat-2.82.jar 8 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/BroadVision_sample.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Broadvision Code Sample 5 | 6 | 7 | 8 | 9 | 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 Dayes
2 | Maytals - Toots Hibbert, Raleigh Gordon, Jerry Matthias, Jackie Jackson, Winston Wright, Hux Brown, Rad Bryan, Paul Douglas, Winston Grennan
3 | Wailers - Bob Marley, Peter Tosh, Bunny Wailer, Junior Braithwaite, Beverly Kelso
4 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/JAMonStyles.css: -------------------------------------------------------------------------------- 1 | BODY { 2 | background-color :#9BB8C6 ; 3 | font-family : Arial, Helvetica, sans-serif; 4 | } 5 | 6 | A:LINK { 7 | color :#00476D ; 8 | } 9 | 10 | A:ACTIVE { 11 | color : #0000CC; 12 | } 13 | 14 | A:HOVER { 15 | color : #ADC9A9; 16 | } 17 | 18 | A:VISITED { 19 | color :#800080 ; 20 | } 21 | 22 | INPUT { 23 | font-size : 7pt; 24 | } 25 | 26 | TABLE, TH { 27 | font-size : 9pt; 28 | } 29 | 30 | TD { 31 | font-size : 8pt; 32 | text-align : right; 33 | } 34 | 35 | TABLE.layoutmain { 36 | border : 4px solid #669999; 37 | } 38 | 39 | .odd { 40 | background : transparent; 41 | } 42 | 43 | .even { 44 | background : #C3C3C3; 45 | } 46 | 47 | .headtextr { 48 | color : #333333; 49 | background-color :#709AAD ; 50 | } 51 | 52 | .headtextc { 53 | color : #333333; 54 | } 55 | 56 | .rowon { 57 | background : #FFFFFF; 58 | color : #CC0000; 59 | } 60 | 61 | #sorton { 62 | font-size : 12pt; 63 | font-style : italic; 64 | font-weight : bold; 65 | font-family : "Times New Roman", Times, serif; 66 | background-color : #669999; 67 | } 68 | 69 | .charttick { 70 | border-top-color : Black; 71 | border-top-style : solid; 72 | border-top-width : thin; 73 | width : 25px; 74 | } 75 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/JAMon_PB.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/JAMon_PB.zip -------------------------------------------------------------------------------- /src/JAMonUsersGuide/WebSphereOro.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | JAMon 2.0 WebSphere 5.1 jakarta-oro classloading problem 6 | 7 | 8 | 9 |

Websphere 5.1 ORO Classloader Problem

10 |

Posting 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 | 7 | Generated Documentation (Untitled) 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | <H2> 19 | Frame Alert</H2> 20 | 21 | <P> 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 | <BR> 24 | Link to<A HREF="overview-summary.html">Non-frame version.</A> 25 | 26 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/javadoc/overview-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Overview () 8 | 9 | 10 | 11 | 17 | 18 | 19 | 20 | 21 | 23 | 24 |
22 |
25 | 26 | 27 | 28 | 38 | 39 |
All Classes 29 |

30 | 31 | Packages 32 |
33 | com.jamonapi 34 |
35 | com.jamonapi.utils 36 |
37 |

40 | 41 |

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 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 |
16 | 17 |
18 |

19 | The front page has been relocated.Please see: 20 |
21 |           Frame version 22 |
23 |           Non-frame version.
24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/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 } 7 | 8 | /* Table colors */ 9 | .TableHeadingColor { background: #CCCCFF } /* Dark mauve */ 10 | .TableSubHeadingColor { background: #EEEEFF } /* Light mauve */ 11 | .TableRowColor { background: #FFFFFF } /* White */ 12 | 13 | /* Font used in left-hand frame lists */ 14 | .FrameTitleFont { font-size: 10pts; font-family: Helvetica, Arial, san-serif } 15 | .FrameHeadingFont { font-size: 10pts; font-family: Helvetica, Arial, san-serif } 16 | .FrameItemFont { font-size: 10pts; font-family: Helvetica, Arial, san-serif } 17 | 18 | /* Example of smaller, sans-serif font in frames */ 19 | /* .FrameItemFont { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */ 20 | 21 | /* Navigation bar fonts and colors */ 22 | .NavBarCell1 { background-color:#EEEEFF;}/* Light mauve */ 23 | .NavBarCell1Rev { background-color:#00008B;}/* Dark Blue */ 24 | .NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;} 25 | .NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;} 26 | 27 | .NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} 28 | .NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} 29 | 30 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/buttons.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/buttons.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/error.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |

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 | Principal Review Board 10 | 21 | 22 | 23 | 24 | 25 | 26 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/fullscreen.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/master01.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/master01.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/master04.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/master04.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/master04_image001.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/master04_image001.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/master04_image029.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/master04_image029.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/master04_stylesheet.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/master04_stylesheet.css -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/notes_flag.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/notes_flag.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/oledata.mso: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/oledata.mso -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/outline.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/outline.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/preview.wmf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/preview.wmf -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0001.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0001.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0001_image031.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0001_image031.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0001_image032.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0001_image032.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0061.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0061.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0063.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0063.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0063_image057.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0063_image057.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0063_image058.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0063_image058.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0063_image059.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0063_image059.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0063_image060.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0063_image060.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0085_image066.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0085_image066.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0086_image036.wmz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0086_image036.wmz -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0086_image037.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0086_image037.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0086_image038.emz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0086_image038.emz -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0086_image039.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0086_image039.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0112.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0112.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0112_image051.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0112_image051.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0112_image052.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0112_image052.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0112_image053.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0112_image053.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0112_image054.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0112_image054.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0114.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0114.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0114_image045.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0114_image045.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0114_image046.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0114_image046.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0114_image047.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0114_image047.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0114_image048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0114_image048.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0114_image049.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0114_image049.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0115.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0115.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0120.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0120.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0121.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0121.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0121_image062.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0121_image062.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0121_image063.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0121_image063.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0121_image064.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0121_image064.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0122.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0122.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0122_image041.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0122_image041.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0122_image042.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0122_image042.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/slide0122_image043.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/slide0122_image043.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_blank_notes.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_endshow.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 |


16 | End of slide show, click to exit.

17 | 18 |
19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_master04_background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_master04_background.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image003.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image003.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image005.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image005.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image007.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image007.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image010.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image010.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image013.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image013.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image015.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image015.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image017.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image017.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image019.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image019.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image023.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image023.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image026.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image026.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image028.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_master04_image028.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_next_active.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_next_active.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_next_disabled.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_next_disabled.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_outline_collapse.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_outline_collapse.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_outline_expand.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_outline_expand.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_outline_expanded.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_outline_expanded.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_outline_navigation_bar.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 16 | 17 | 18 | 19 | 20 |
Collapse OutlineExpand Outline
24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_prev_active.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_prev_active.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_prev_disabled.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_prev_disabled.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0001_image002.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0001_image002.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0001_notes_pane.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0001_notes_pane.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0061_image018.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0061_image018.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0063.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0063.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0063_image020.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0063_image020.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0063_image021.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0063_image021.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0063_image022.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0063_image022.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0085_image027.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0085_image027.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0086_image008.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0086_image008.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0086_image009.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0086_image009.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0086_notes_pane.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 29 | 30 |
Just read
28 |
31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0112.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0112.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0112_image016.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0112_image016.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0112_notes_pane.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 30 | 31 |
Would have been 28 | nice to know during development.
29 |
32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0114_image014.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0114_image014.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0114_notes_pane.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0114_notes_pane.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0115.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0115.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0115_image004.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0115_image004.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0115_notes_pane.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0115_notes_pane.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0120.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0120.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0120_image006.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0120_image006.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0121.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0121.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0121_image024.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0121_image024.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0121_image025.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0121_image025.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0122.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0122.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0122_image011.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0122_image011.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0122_image012.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0122_image012.jpg -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_slide0122_notes_pane.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_slide0122_notes_pane.htm -------------------------------------------------------------------------------- /src/JAMonUsersGuide/presentation/jamon_files/v3_space.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/presentation/jamon_files/v3_space.gif -------------------------------------------------------------------------------- /src/JAMonUsersGuide/spring_aop_exceptions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/spring_aop_exceptions.png -------------------------------------------------------------------------------- /src/JAMonUsersGuide/testingwithjamon.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stevensouza/jamonapi/4a5f2dd43fd276271c92b54f1c66eeb83366ad0a/src/JAMonUsersGuide/testingwithjamon.html -------------------------------------------------------------------------------- /src/doc/javadoc/com/jamonapi/http/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | com.jamonapi.http 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | com.jamonapi.http 20 | 21 | 22 | 27 | 28 |
23 | Interfaces  24 | 25 |
26 | HttpMon
29 | 30 | 31 | 32 | 33 | 46 | 47 |
34 | Classes  35 | 36 |
37 | HttpMonFactory 38 |
39 | JAMonJettyHandler 40 |
41 | JAMonServletFilter 42 |
43 | JAMonTomcatValve 44 |
45 | JettyHttpMonFactory
48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /src/doc/javadoc/com/jamonapi/log4j/package-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | com.jamonapi.log4j 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | com.jamonapi.log4j 20 | 21 | 22 | 31 | 32 |
23 | Classes  24 | 25 |
26 | JAMonAppender 27 |
28 | Log4jBufferListener 29 |
30 | Log4jMonKey
33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/doc/javadoc/overview-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Overview List 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 23 | 24 |
22 |
25 | 26 | 27 | 28 | 44 | 45 |
All Classes 29 |

30 | 31 | Packages 32 |
33 | com.jamonapi 34 |
35 | com.jamonapi.http 36 |
37 | com.jamonapi.log4j 38 |
39 | com.jamonapi.proxy 40 |
41 | com.jamonapi.utils 42 |
43 |

46 | 47 |

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 | 8 | fdsapi 9 | 10 | JAMonFilter 11 | com.jamonapi.JAMonFilter 12 | 13 | 14 | 15 | JAMonFilter 16 | /* 17 | 18 | 19 | 25 | 26 | 27 | --------------------------------------------------------------------------------