You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ni...@apache.org on 2008/04/07 13:04:51 UTC

svn commit: r645459 - in /commons/sandbox/monitoring/trunk/src/main/java/org/apache/commons/monitoring: listeners/ reporting/

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:nicolas@apache.org">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>
+     * {@inheritDoc}
+     * @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 @@
 
     /**
      * {@inheritDoc}
+     *
      * @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];