Author: nicolas Date: Mon Apr 7 04:04:48 2008 New Revision: 645459 URL: http://svn.apache.org/viewvc?rev=645459&view=rev Log: Add date (long) of secondary repository attachement/detachement from observed repository change PeriodicLogger to explicitly use a SecondaryRepository Repository Decorator for historization
Added: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/listeners/HistorizedRepositoryDecorator.java (with props) Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/listeners/SecondaryRepository.java commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractPeriodicLogger.java commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/SelectorPeriodicLogger.java Added: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/listeners/HistorizedRepositoryDecorator.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/listeners/HistorizedRepositoryDecorator.java?rev=645459&view=auto ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/listeners/HistorizedRepositoryDecorator.java (added) +++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/listeners/HistorizedRepositoryDecorator.java Mon Apr 7 04:04:48 2008 @@ -0,0 +1,136 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.monitoring.listeners; + +import java.io.IOException; +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; + +import org.apache.commons.monitoring.Monitor; +import org.apache.commons.monitoring.Repository; +import org.apache.commons.monitoring.StopWatch; +import org.apache.commons.monitoring.Repository.Listener; +import org.apache.commons.monitoring.Repository.Observable; +import org.apache.commons.monitoring.reporting.AbstractPeriodicLogger; + +/** + * + * @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a> + */ +public class HistorizedRepositoryDecorator extends AbstractPeriodicLogger +{ + /** The decorated repository */ + private Repository.Observable repository; + + private List<SecondaryRepository> history; + + private int size; + + @SuppressWarnings("serial") + public HistorizedRepositoryDecorator( long period, final int size, Observable repository ) + { + super( period, repository ); + this.repository = repository; + this.size = size; + this.history = new LinkedList<SecondaryRepository>(); + } + + /** + * Store the period Repository into the history Map, using System.currentTimeMillis(). + * <p> + * [EMAIL PROTECTED] + * @see org.apache.commons.monitoring.reporting.AbstractPeriodicLogger#log(SecondaryRepository) + */ + @Override + protected void log( SecondaryRepository period ) + throws IOException + { + history.add( period ); + while (history.size() > size) + { + history.remove( history.size() ); + } + } + + public void addListener( Listener listener ) + { + repository.addListener( listener ); + } + + public Set<String> getCategories() + { + return repository.getCategories(); + } + + public Monitor getMonitor( String name, String category, String subsystem ) + { + return repository.getMonitor( name, category, subsystem ); + } + + public Monitor getMonitor( String name, String category ) + { + return repository.getMonitor( name, category ); + } + + public Monitor getMonitor( String name ) + { + return repository.getMonitor( name ); + } + + public Collection<Monitor> getMonitors() + { + return repository.getMonitors(); + } + + public Collection<Monitor> getMonitorsFromCategory( String category ) + { + return repository.getMonitorsFromCategory( category ); + } + + public Collection<Monitor> getMonitorsFromSubSystem( String subsystem ) + { + return repository.getMonitorsFromSubSystem( subsystem ); + } + + public Set<String> getSubSystems() + { + return repository.getSubSystems(); + } + + public void removeListener( Listener listener ) + { + repository.removeListener( listener ); + } + + public void reset() + { + repository.reset(); + } + + public StopWatch start( Monitor monitor ) + { + return repository.start( monitor ); + } + + public List<SecondaryRepository> getHistory() + { + return history; + } +} Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/listeners/HistorizedRepositoryDecorator.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/listeners/HistorizedRepositoryDecorator.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/listeners/HistorizedRepositoryDecorator.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/listeners/SecondaryRepository.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/listeners/SecondaryRepository.java?rev=645459&r1=645458&r2=645459&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/listeners/SecondaryRepository.java (original) +++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/listeners/SecondaryRepository.java Mon Apr 7 04:04:48 2008 @@ -41,10 +41,15 @@ private boolean detached; + private long attachedAt; + + private long detachedAt; + public SecondaryRepository( Repository.Observable repository ) { super(); this.repository = repository; + this.attachedAt = System.currentTimeMillis(); this.detached = false; for ( Monitor monitor : repository.getMonitors() ) { @@ -64,6 +69,7 @@ { ( (Detachable) monitor ).detach(); } + this.detachedAt = System.currentTimeMillis(); } /** @@ -79,10 +85,29 @@ /** * [EMAIL PROTECTED] + * * @see org.apache.commons.monitoring.Repository#start(org.apache.commons.monitoring.Monitor) */ public StopWatch start( Monitor monitor ) { throw new UnsupportedOperationException( "Not available on a secondary repository" ); + } + + /** + * @return When (as a System.currentTimeMillis() time) the + * SecondaryRepository started to observe the repository + */ + public long getAttachedAt() + { + return attachedAt; + } + + /** + * @return When (as a System.currentTimeMillis() time) the + * SecondaryRepository stopped observing the repository + */ + public long getDetachedAt() + { + return detachedAt; } } Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractPeriodicLogger.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractPeriodicLogger.java?rev=645459&r1=645458&r2=645459&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractPeriodicLogger.java (original) +++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/AbstractPeriodicLogger.java Mon Apr 7 04:04:48 2008 @@ -105,5 +105,5 @@ * Log the data from the (secondary) repository generated during the period * @param period secondary repository that observed the monitored state during the last active period */ - protected abstract void log( Repository period ) throws IOException; + protected abstract void log( SecondaryRepository period ) throws IOException; } Modified: commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/SelectorPeriodicLogger.java URL: http://svn.apache.org/viewvc/commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/SelectorPeriodicLogger.java?rev=645459&r1=645458&r2=645459&view=diff ============================================================================== --- commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/SelectorPeriodicLogger.java (original) +++ commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring/reporting/SelectorPeriodicLogger.java Mon Apr 7 04:04:48 2008 @@ -22,6 +22,7 @@ import java.util.List; import org.apache.commons.monitoring.Repository; +import org.apache.commons.monitoring.listeners.SecondaryRepository; /** * A periodic logger implementation that uses a set of selector to extract @@ -70,7 +71,7 @@ * during the last active period */ @Override - protected final void log( Repository period ) + protected final void log( SecondaryRepository period ) throws IOException { Object[] values = new Object[selectors.length];