Author: dspicar
Date: Wed Sep 28 11:14:20 2011
New Revision: 1176822

URL: http://svn.apache.org/viewvc?rev=1176822&view=rev
Log:
CLEREZZA-606: changed data store to rrdtool (rrd4j)

Added:
    
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/FDStatisticsContainer.java
   (with props)
Removed:
    
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/resources/org/apache/clerezza/rdf/cris/monitoring/staticweb/scripts/
Modified:
    incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/pom.xml
    
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/CRISFileDescriptorMonitor.java
    
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/FileDescriptorCountTask.java
    
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/MONITORING.java
    
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/resources/org/apache/clerezza/rdf/cris/monitoring/statistics.ssp

Modified: incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/pom.xml?rev=1176822&r1=1176821&r2=1176822&view=diff
==============================================================================
--- incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/pom.xml 
(original)
+++ incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/pom.xml Wed Sep 
28 11:14:20 2011
@@ -24,7 +24,7 @@
        <parent>
                <artifactId>parent</artifactId>
                <groupId>org.apache.clerezza</groupId>
-               <version>0.2-incubating-SNAPSHOT</version>
+               <version>0.3-incubating-SNAPSHOT</version>
        </parent>
        <groupId>org.apache.clerezza</groupId>
        <artifactId>rdf.cris.monitoring</artifactId>
@@ -34,6 +34,15 @@
        <description>
                A Tool that monitors file descriptor usage of CRIS and of the 
platform.
        </description>
+       
+       <repositories>
+               <repository>
+                       <id>fusesource.release</id>
+                       <name>FuseSource Releases</name>
+                       
<url>http://repo.fusesource.com/nexus/content/groups/public/</url>
+               </repository>
+       </repositories>
+       
        <dependencies>
                <dependency>
                        <groupId>org.apache.felix</groupId>
@@ -61,12 +70,50 @@
                </dependency>
                <dependency>
                        <groupId>org.apache.clerezza</groupId>
+                       <artifactId>platform.typerendering.core</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.clerezza</groupId>
                        <artifactId>platform.dashboard.core</artifactId>
                </dependency>
                <dependency>
                        <groupId>org.apache.clerezza</groupId>
                        <artifactId>web.fileserver</artifactId>
                </dependency>
+               <dependency>
+                       <groupId>org.fusesource.rrd4j</groupId>
+                       <artifactId>rrd4j</artifactId>
+                       <version>2.0.7</version>
+               </dependency>
        </dependencies>
+       
+       <build>
+               <plugins>
+                       <plugin>
+                               <groupId>org.apache.felix</groupId>
+                               <artifactId>maven-bundle-plugin</artifactId>
+                               <extensions>true</extensions>
+                               <configuration>
+                                       <instructions>
+                                               
<Embed-Transitive>true</Embed-Transitive>
+                                               <Embed-Dependency>
+                                                       rrd4j
+                                               </Embed-Dependency>
+                                               <Export-Package>
+                                                       
org.apache.clerezza.rdf.cris.monitoring
+                                               </Export-Package>
+                                               <Import-Package>
+                                                       
com.mongodb;resolution:=optional,
+                                                       
com.sleepycat.je;resolution:=optional,
+                                                       
com.sun.image.codec.jpeg;resolution:=optional,
+                                                       
sun.misc;resolution:=optional,
+                                                       
sun.nio.ch;resolution:=optional,
+                                                       *
+                                               </Import-Package>
+                                       </instructions>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </build>
 </project>
 

Modified: 
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/CRISFileDescriptorMonitor.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/CRISFileDescriptorMonitor.java?rev=1176822&r1=1176821&r2=1176822&view=diff
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/CRISFileDescriptorMonitor.java
 (original)
+++ 
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/CRISFileDescriptorMonitor.java
 Wed Sep 28 11:14:20 2011
@@ -19,42 +19,44 @@
 package org.apache.clerezza.rdf.cris.monitoring;
 
 import java.io.BufferedReader;
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.net.URL;
 import java.net.URLConnection;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Date;
-import java.util.List;
 import java.util.Timer;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
 import javax.ws.rs.core.MediaType;
+import org.apache.clerezza.platform.typerendering.WebRenderingService;
 import 
org.apache.clerezza.platform.typerendering.scalaserverpages.ScalaServerPagesService;
 import org.apache.clerezza.rdf.core.BNode;
-import org.apache.clerezza.rdf.core.LiteralFactory;
-import org.apache.clerezza.rdf.core.TypedLiteral;
-import org.apache.clerezza.rdf.core.impl.PlainLiteralImpl;
 import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
 import org.apache.clerezza.rdf.cris.monitoring.OSDetector.OS;
 import org.apache.clerezza.rdf.ontologies.PLATFORM;
 import org.apache.clerezza.rdf.ontologies.RDF;
 import org.apache.clerezza.rdf.utils.GraphNode;
-import org.apache.clerezza.rdf.utils.RdfList;
-import org.apache.clerezza.utils.osgi.BundlePathNode;
-import org.apache.clerezza.web.fileserver.FileServer;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
-import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.component.ComponentContext;
+import org.rrd4j.ConsolFun;
+import org.rrd4j.DsType;
+import org.rrd4j.core.FetchData;
+import org.rrd4j.core.FetchRequest;
+import org.rrd4j.core.RrdDb;
+import org.rrd4j.core.RrdDef;
+import org.rrd4j.core.RrdFileBackendFactory;
+import org.rrd4j.core.Sample;
+import org.rrd4j.core.Util;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.wymiwyg.commons.util.dirbrowser.PathNode;
 
 /**
  * Monitors file descriptor usage by CRIS and offers a web resource displaying 
the data.
@@ -62,12 +64,15 @@ import org.wymiwyg.commons.util.dirbrows
  * @author daniel
  */
 @Component(metatype=true)
-@Service(Object.class)
+@Service({
+       Object.class, 
+       CRISFileDescriptorMonitor.class})
+@WebRenderingService
 @Property(name="javax.ws.rs", boolValue=true)
 @Path("/admin/monitoring/cris")
 public class CRISFileDescriptorMonitor {
-       @Property(description="Interval between measurements in milliseconds 
(min. 1000 ms).", 
-                       intValue=10000)
+       @Property(description="Interval between measurements in seconds (min. 1 
s, max. 86400 s (1 day)).", 
+                       intValue=10)
        public static final String PROBING_RATE = "probing_rate";
        
        @Property(description="The Bundle ID of the monitored bundle (must be 
positive).", intValue=-1)
@@ -77,9 +82,6 @@ public class CRISFileDescriptorMonitor {
                        + "the lucene index folder.", value="")
        public static final String DIRECTORY_PATH = "index_path";
        
-       @Property(description="How many datapoints are stored. (min. 10)", 
intValue=10000)
-       public static final String STORE_SIZE = "store_size";
-       
        @Property(description="When to trigger the treshold action (in terms of 
open files of the platform). (min. 700)", intValue=1000)
        public static final String ACTION_THRESHOLD = "action_threshold";
        
@@ -89,99 +91,157 @@ public class CRISFileDescriptorMonitor {
        @Property(description="How long to wait before performing threshold 
action after last time it has been performed (in minutes).", intValue=30)
        public static final String THRESHOLD_TIMEOUT = "threshold_timeout";
        
+       public static final String JVM_COUNT = "jvmCount";
+       
+       public static final String CRIS_COUNT = "crisCount";
+       
+       /**
+        * RRDTool data source for CRIS file descriptor counts.
+        */
+       static final String CRISFILES_DS = "crisFiles";
+       
+       /**
+        * RRDTool data source for JVM file descriptor counts.
+        */
+       static final String JVMFILES_DS = "jvmFiles";
+       
        @Reference
        private ScalaServerPagesService scalaServerPagesService;
        
-       private int viewLimit = 100;
-       private int storeSize;
-       private int bundleId;
-       private int probingRate;
-       private long userFileDescriptorLimit = -1;
-       private String directory;
-       private String thresholdUrl = "";
-       private long threshold = -1l;
-       private int thresholdTimeout;
-       private Date lastThreshHoldAction = new Date(0l);
+       int viewLimit = 100;
+       int bundleId;
+       int probingRate;
+       long userFileDescriptorLimit = -1;
+       String directory;
+       String thresholdUrl = "";
+       long threshold = -1l;
+       int thresholdTimeout;
+       Date lastThreshHoldAction = new Date(0l);
        
-       private FileServer fileServer;
+       private BundleContext bundleContext;
        
-       List<long[]> crisData, jvmData; 
+       private RrdDb rrdDb;
        
        private final Logger logger = LoggerFactory.getLogger(getClass());
        private Timer timer = new Timer();
        private FileDescriptorCountTask fileDescriptorCountTask = null;
-       private int lastIndex = -1;
+       private int day = 86400;
+       private ServiceRegistration sspServiceRegistration;
        
        @GET
-       public GraphNode getStatistics() {
+       public GraphNode getStatisticsPage() throws IOException {
+               
                SimpleMGraph graph = new SimpleMGraph();
                GraphNode statisticsPageNode = new GraphNode(new BNode(), 
graph);
                statisticsPageNode.addProperty(RDF.type, PLATFORM.HeadedPage);
                statisticsPageNode.addProperty(RDF.type, 
MONITORING.STATISTICS_PAGE);
+                       //              
statisticsPageNode.addProperty(MONITORING.PROBINGRATE, 
+                       //                              new 
PlainLiteralImpl(String.valueOf(probingRate)));
+                       //              
statisticsPageNode.addProperty(MONITORING.VIEWLIMIT, 
+                       //                              new 
PlainLiteralImpl(String.valueOf(viewLimit)));
+                       //              
statisticsPageNode.addProperty(MONITORING.BUNDLE, 
+                       //                              new 
PlainLiteralImpl(String.valueOf(bundleId)));
+                       //              
statisticsPageNode.addProperty(MONITORING.INDEXDIRECTORY, 
+                       //                              new 
PlainLiteralImpl(String.valueOf(directory)));
+                       //              
statisticsPageNode.addProperty(MONITORING.OPENFILELIMIT, 
+                       //                              new 
PlainLiteralImpl(String.valueOf(userFileDescriptorLimit)));
+                       //              
statisticsPageNode.addProperty(MONITORING.THRESHOLD, 
+                       //                              new 
PlainLiteralImpl(String.valueOf(threshold)));
+                       //              
statisticsPageNode.addProperty(MONITORING.THRESHOLDURL, 
+                       //                              new 
PlainLiteralImpl(String.valueOf(thresholdUrl)));
+                       //              
statisticsPageNode.addProperty(MONITORING.THRESHOLDTIMEOUT, 
+                       //                              new 
PlainLiteralImpl(String.valueOf(thresholdTimeout)));
+
+                       //              FDStatisticsContainer 
statisticsContainer = getStatistics();
+                       //              long[] timeStamps = 
statisticsContainer.get(FDStatisticsContainer.TIMESTAMPS);
+                       //              long[] jvmEntries = 
statisticsContainer.get(JVM_COUNT);
+                       //              long[] crisEntries = 
statisticsContainer.get(CRIS_COUNT);
+                       //              
+                       //              GraphNode dataNode = new GraphNode(new 
BNode(), graph);
+                       //              RdfList list = new RdfList(dataNode);
+                       //              SimpleDateFormat df = new 
SimpleDateFormat("HH:mm:ss dd.MM.yyyy");
+                       //              for (int i = timeStamps.length - 1; i > 
0; --i) {
+                       //                      if((int) jvmEntries[i] == 0) {
+                       //                              continue;
+                       //                      }
+                       //                      
+                       //                      LiteralFactory lf = 
LiteralFactory.getInstance();
+                       //                      GraphNode entryNode = new 
GraphNode(new BNode(), graph);
+                       //                      String timeString = 
df.format(Util.getDate(timeStamps[i]));
+                       //                      TypedLiteral timestamp = 
lf.createTypedLiteral(timeString);
+                       //                      TypedLiteral jvm = 
lf.createTypedLiteral((int) jvmEntries[i]);
+                       //                      TypedLiteral cris = 
lf.createTypedLiteral((int) crisEntries[i]);
+                       //                      
entryNode.addProperty(MONITORING.TIMESTAMP, timestamp);
+                       //                      
entryNode.addProperty(MONITORING.JVMDATA, jvm);
+                       //                      
entryNode.addProperty(MONITORING.CRISDATA, cris);
+                       //                      
+                       //                      list.add(entryNode.getNode());
+                       //              }
+                       //              
+                       //              
statisticsPageNode.addProperty(MONITORING.DATA, dataNode.getNode());
+                                       
+               return statisticsPageNode;
+       }
+       
+       @GET
+       @Path("services")
+       public String pop() {
+               String str = "RegisteredServices: " + 
Arrays.toString(bundleContext.getBundle().getRegisteredServices());
+               str += "\n";
+               str += "ServicesInUse: " + 
Arrays.toString(bundleContext.getBundle().getServicesInUse());
                
-               statisticsPageNode.addProperty(MONITORING.PROBINGRATE, 
-                               new 
PlainLiteralImpl(String.valueOf(probingRate)));
-               statisticsPageNode.addProperty(MONITORING.STORESIZE, 
-                               new 
PlainLiteralImpl(String.valueOf(storeSize)));
-               statisticsPageNode.addProperty(MONITORING.VIEWLIMIT, 
-                               new 
PlainLiteralImpl(String.valueOf(viewLimit)));
-               statisticsPageNode.addProperty(MONITORING.BUNDLE, 
-                               new PlainLiteralImpl(String.valueOf(bundleId)));
-               statisticsPageNode.addProperty(MONITORING.INDEXDIRECTORY, 
-                               new 
PlainLiteralImpl(String.valueOf(directory)));
-               statisticsPageNode.addProperty(MONITORING.OPENFILELIMIT, 
-                               new 
PlainLiteralImpl(String.valueOf(userFileDescriptorLimit)));
-               statisticsPageNode.addProperty(MONITORING.THRESHOLD, 
-                               new 
PlainLiteralImpl(String.valueOf(threshold)));
-               statisticsPageNode.addProperty(MONITORING.THRESHOLDURL, 
-                               new 
PlainLiteralImpl(String.valueOf(thresholdUrl)));
-               statisticsPageNode.addProperty(MONITORING.THRESHOLDTIMEOUT, 
-                               new 
PlainLiteralImpl(String.valueOf(thresholdTimeout)));
+               return str;
                
-               GraphNode dataNode = new GraphNode(new BNode(), graph);
-               RdfList list = new RdfList(dataNode);
-               int index = lastIndex;
-               for (int i = 0; i < viewLimit; ++i) {
-                       if(index < 0) {
-                               index = storeSize - 1;
-                       }
-                       
-                       LiteralFactory lf = LiteralFactory.getInstance();
-                       GraphNode entryNode = new GraphNode(new BNode(), graph);
-                       long[] jvmEntry = jvmData.get(index);
-                       Date date = new Date(jvmEntry[0]);
-                       String timeString = "-";
-                       if(date.getTime() > 0l) {
-                               SimpleDateFormat df = new 
SimpleDateFormat("HH:mm:ss dd.MM.yyyy");
-                               timeString = df.format(date);
-                       }
-                       TypedLiteral timestamp = 
lf.createTypedLiteral(timeString);
-                       TypedLiteral jvm = lf.createTypedLiteral(jvmEntry[1]);
-                       TypedLiteral cris = 
lf.createTypedLiteral(crisData.get(index)[1]);
-                       entryNode.addProperty(MONITORING.TIMESTAMP, timestamp);
-                       entryNode.addProperty(MONITORING.JVMDATA, jvm);
-                       entryNode.addProperty(MONITORING.CRISDATA, cris);
-                       
-                       list.add(entryNode.getNode());
-                       
-                       --index;
-               }
+       }
+       
+       public FDStatisticsContainer getStatistics() throws IOException {
+               long now = Util.getTime();
+               long start = now - viewLimit*probingRate;
+               FetchRequest fr = rrdDb.createFetchRequest(ConsolFun.LAST, 
start, now, probingRate);
+               FetchData fd = fr.fetchData();
+               long[] timeStamps = fd.getTimestamps();
+               long[] jvmEntries = toLongArray(fd.getValues(JVMFILES_DS));
+               long[] crisEntries = toLongArray(fd.getValues(CRISFILES_DS));
                
-               statisticsPageNode.addProperty(MONITORING.DATA, 
dataNode.getNode());
+               FDStatisticsContainer result = new FDStatisticsContainer(3);
+               result.set(FDStatisticsContainer.TIMESTAMPS, timeStamps);
+               result.set(JVM_COUNT, jvmEntries);
+               result.set(CRIS_COUNT, crisEntries);
                
-               return statisticsPageNode;
-       } 
-       
-       /**
-        * Returns a PathNode of a static file from the staticweb folder.
-        * 
-        * @return {@link PathNode}
-        */
-       @GET
-       @Path("{path:.+}")
-       public PathNode getStaticFile(@PathParam("path") String path) {
-               final PathNode node = fileServer.getNode(path);
-               return node;
+               return result;
+                               
+       }
+
+       public int getBundleId() {
+               return bundleId;
+       }
+
+       public String getDirectory() {
+               return directory;
+       }
+
+       public int getProbingRate() {
+               return probingRate;
+       }
+
+       public long getThreshold() {
+               return threshold;
+       }
+
+       public int getThresholdTimeout() {
+               return thresholdTimeout;
+       }
+
+       public String getThresholdUrl() {
+               return thresholdUrl;
+       }
+
+       public long getUserFileDescriptorLimit() {
+               return userFileDescriptorLimit;
+       }
+
+       public int getViewLimit() {
+               return viewLimit;
        }
        
        protected void activate(ComponentContext context) throws IOException {
@@ -196,9 +256,8 @@ public class CRISFileDescriptorMonitor {
                                pid = getPID();
                                bundleId = getIntegerValue(context, BUNDLE_ID, 
0, Integer.MAX_VALUE);
                                directory = getStringValue(context, 
DIRECTORY_PATH);
-                               getUserFileDescriptorLimit();
-                               probingRate = getIntegerValue(context, 
PROBING_RATE, 1000, Integer.MAX_VALUE);
-                               storeSize = getIntegerValue(context, 
STORE_SIZE, 10, Integer.MAX_VALUE);
+                               extractUserFileDescriptorLimit();
+                               probingRate = getIntegerValue(context, 
PROBING_RATE, 1, day);
                                threshold = getIntegerValue(context, 
ACTION_THRESHOLD, 700, Integer.MAX_VALUE);
                                thresholdTimeout = getIntegerValue(context, 
THRESHOLD_TIMEOUT, 0, Integer.MAX_VALUE);
                                thresholdUrl = (String) 
context.getProperties().get(THRESHOLD_URL);
@@ -212,17 +271,22 @@ public class CRISFileDescriptorMonitor {
                                return;
                        }
                        
-                       BundleContext bundleContext = 
context.getBundleContext();
-                       
-                       Bundle bundle = bundleContext.getBundle();
-                       URL resourceDir = getClass().getResource("staticweb");
-                       PathNode pathNode = new BundlePathNode(bundle, 
resourceDir.getPath());
-                       fileServer = new FileServer(pathNode);
-                       
-                       crisData = new ArrayList<long[]>(storeSize);
-                       jvmData = new ArrayList<long[]>(storeSize);
-                       initStore(crisData);
-                       initStore(jvmData);
+                       bundleContext = context.getBundleContext();
+                       File file = bundleContext.getDataFile("statistics.rrd");
+                       if(file.exists()) {
+                               file.delete();
+                       }
+                       RrdDef rrdDef = new RrdDef(file.getAbsolutePath());
+                       rrdDef.setStartTime(Util.getTime());
+                       rrdDef.setStep(probingRate);
+                       long heartbeat = 2*probingRate;
+                       rrdDef.addDatasource(CRISFILES_DS, DsType.GAUGE, 
heartbeat, 0.0, Double.NaN);
+                       rrdDef.addDatasource(JVMFILES_DS, DsType.GAUGE, 
heartbeat, 0.0, Double.NaN);
+                       int dayRatio = Math.max(1, (int) Math.floor(day / 
probingRate));
+                       rrdDef.addArchive(ConsolFun.LAST, 0.5, 1, day); //1 day
+                       rrdDef.addArchive(ConsolFun.LAST, 0.5, dayRatio, 30); 
//1 month
+                       rrdDef.addArchive(ConsolFun.LAST, 0.5, dayRatio*30, 
12); //1 year
+                       rrdDb = new RrdDb(rrdDef, new RrdFileBackendFactory());
                        
                        if(fileDescriptorCountTask == null) {
                                fileDescriptorCountTask = 
@@ -233,49 +297,37 @@ public class CRISFileDescriptorMonitor {
                                timer.cancel();
                        }
                        timer = new Timer();
-                       timer.scheduleAtFixedRate(fileDescriptorCountTask, 0l, 
probingRate);
+                       timer.scheduleAtFixedRate(fileDescriptorCountTask, 
probingRate * 1000, probingRate * 1000);
                        
                        URL template = getClass().getResource("statistics.ssp");
-                       
scalaServerPagesService.registerScalaServerPage(template, 
-                                       MONITORING.STATISTICS_PAGE, "naked", 
MediaType.APPLICATION_XHTML_XML_TYPE);
+                       sspServiceRegistration = 
scalaServerPagesService.registerScalaServerPage(template, 
+                                       MONITORING.STATISTICS_PAGE, "naked", 
MediaType.APPLICATION_XHTML_XML_TYPE, bundleContext);
+               
                }
        }
 
-       protected void deactivate(ComponentContext context) {
+       protected void deactivate(ComponentContext context) throws IOException {
                if(timer != null) {
                        logger.info("Stopping monitoring thread.");
                        timer.cancel();
                        timer = null;
                }
-       }
-       
-       synchronized void addCRISEntry(long time, long data) {
-               long[] entry = new long[2];
-               entry[0] = time;
-               entry[1] = data;
-               int index = lastIndex + 1;
-               if(index >= storeSize) {
-                       index = 0;
-               }
-               crisData.set(index, entry);
-               lastIndex = index;
-       }
-       
-       synchronized void addJVMentry(long time, long data) {
-               long[] entry = new long[2];
-               entry[0] = time;
-               entry[1] = data;
-               int index = lastIndex;
-               if(index >= storeSize) {
-                       index = 0;
+               if(rrdDb != null) {
+                       rrdDb.close();
                }
-               jvmData.set(index, entry);
-               
-               if(data >= threshold) {
-                       performAction();
+               if(sspServiceRegistration != null) {
+                       sspServiceRegistration.unregister();
+                       sspServiceRegistration = null;
                }
        }
        
+       void setSample(int... counts) throws IOException {
+               Sample sample = rrdDb.createSample(Util.getTime());
+               sample.setValue(CRISFileDescriptorMonitor.JVMFILES_DS, 
counts[0]);
+               sample.setValue(CRISFileDescriptorMonitor.CRISFILES_DS, 
counts[1]);
+               sample.update();
+       }
+       
        synchronized void performAction() {
                if(thresholdUrl == null || thresholdUrl.equals("")) {
                        logger.info("Will not perform threshold action because 
no threshold URL is set.");
@@ -325,7 +377,7 @@ public class CRISFileDescriptorMonitor {
                return pid;
        }
 
-       private void getUserFileDescriptorLimit() {
+       private void extractUserFileDescriptorLimit() {
                userFileDescriptorLimit = -1l;
                try {
                        String[] cmd = {"bash", "-c", "ulimit -Hn"};
@@ -341,15 +393,6 @@ public class CRISFileDescriptorMonitor {
                }
        }
        
-       private void initStore(List<long[]> store) {
-               for(int i = 0; i < storeSize; ++i) {
-                       long[] entry = new long[2];
-                       entry[0] = -1l;
-                       entry[1] = -1l;
-                       store.add(entry);
-               }
-       }
-       
        private String getStringValue(ComponentContext context, String 
property) {
                String tmp = (String) context.getProperties().get(property);
                tmp = tmp.trim();
@@ -371,4 +414,13 @@ public class CRISFileDescriptorMonitor {
                
                return tmp;
        }
+       
+       private long[] toLongArray(double[] array) {
+               long[] result = new long[array.length];
+               for (int i = 0; i < array.length; i++) {
+                       result[i] = (long) array[i];
+               }
+               
+               return result;
+       }
 }
\ No newline at end of file

Added: 
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/FDStatisticsContainer.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/FDStatisticsContainer.java?rev=1176822&view=auto
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/FDStatisticsContainer.java
 (added)
+++ 
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/FDStatisticsContainer.java
 Wed Sep 28 11:14:20 2011
@@ -0,0 +1,44 @@
+/*
+ * 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.clerezza.rdf.cris.monitoring;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *
+ * @author daniel
+ */
+public class FDStatisticsContainer {
+       public static final String TIMESTAMPS = "timestamps";
+       
+       Map<String, long[]> statistics;
+       
+       public FDStatisticsContainer(int initalCapacity) {
+               statistics = new HashMap<String, long[]>(initalCapacity);
+       }
+       
+       public void set(String key, long[] value) {
+               statistics.put(key, value);
+       }
+       
+       public long[] get(String key) {
+               return statistics.get(key);
+       }
+}

Propchange: 
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/FDStatisticsContainer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/FileDescriptorCountTask.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/FileDescriptorCountTask.java?rev=1176822&r1=1176821&r2=1176822&view=diff
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/FileDescriptorCountTask.java
 (original)
+++ 
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/FileDescriptorCountTask.java
 Wed Sep 28 11:14:20 2011
@@ -19,7 +19,6 @@
 package org.apache.clerezza.rdf.cris.monitoring;
 
 import java.io.IOException;
-import java.util.Date;
 import java.util.TimerTask;
 
 /**
@@ -29,20 +28,12 @@ import java.util.TimerTask;
  * @author daniel
  */
 class FileDescriptorCountTask extends TimerTask {
-       long crisFiles = -1;
-       long totalFDs = -1;
-       
-       long pid = -1;
        int bundleId = -1;
-       String directory = null;
        String[] crisOpenFilesCountCommand, jvmOpenFileDescriptorsCountCommand;
        private CRISFileDescriptorMonitor monitorInstance;
        
        public FileDescriptorCountTask(long pid, int bundleId, String 
directory, 
                        CRISFileDescriptorMonitor monitorInstance) {
-               this.pid = pid;
-               this.bundleId = bundleId;
-               this.directory = directory;
                this.monitorInstance = monitorInstance;
                
                String pidString = String.valueOf(pid);
@@ -57,15 +48,6 @@ class FileDescriptorCountTask extends Ti
                subCommand.append("/data/");
                subCommand.append(directory);
                subCommand.append(" | wc -l");
-//             StringBuilder subCommand = new StringBuilder("lsof -a -p");
-//             subCommand.append(pidString);
-//             subCommand.append(" +d ");
-//             subCommand.append(System.getProperty("user.dir"));
-//             subCommand.append("/felix-cache/bundle");
-//             subCommand.append(String.valueOf(bundleId));
-//             subCommand.append("/data/");
-//             subCommand.append(directory);
-//             subCommand.append(" | wc -l");
                crisOpenFilesCountCommand = 
                                new String[] {"bash", "-c", 
subCommand.toString()};
                
@@ -83,27 +65,19 @@ class FileDescriptorCountTask extends Ti
                        Thread.currentThread().setName("CRIS File Descriptor 
Count Thread [" 
                                        + Thread.currentThread().getId() + "]");
                        
-                       long time = new Date().getTime(); 
-                       
                        Process p = 
Runtime.getRuntime().exec(crisOpenFilesCountCommand);
                        byte[] output = new byte[32];
                        p.getInputStream().read(output);
                        p.destroy();
-//                     crisFiles = Integer.parseInt(new String(output).trim()) 
- 1;
-                       crisFiles = Integer.parseInt(new String(output).trim());
-                       
-                       monitorInstance.addCRISEntry(time, crisFiles);
+                       int crisFiles = Integer.parseInt(new 
String(output).trim());
                        
                        p = 
Runtime.getRuntime().exec(jvmOpenFileDescriptorsCountCommand);
                        output = new byte[32];
                        p.getInputStream().read(output);
                        p.destroy();
-                       totalFDs = Integer.parseInt(new String(output).trim());
-                       
-                       monitorInstance.addJVMentry(time, totalFDs);
+                       int totalFDs = Integer.parseInt(new 
String(output).trim());
                        
-//                     System.out.println("CRIS: " + crisFiles);
-//                     System.out.println("Total: " + totalFDs);
+                       monitorInstance.setSample(totalFDs, crisFiles);
                } catch (IOException ex) {
                        throw new RuntimeException(ex);
                }

Modified: 
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/MONITORING.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/MONITORING.java?rev=1176822&r1=1176821&r2=1176822&view=diff
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/MONITORING.java
 (original)
+++ 
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/java/org/apache/clerezza/rdf/cris/monitoring/MONITORING.java
 Wed Sep 28 11:14:20 2011
@@ -47,9 +47,6 @@ public class MONITORING {
        public static final UriRef PROBINGRATE = 
                        new 
UriRef("http://org.apache.clerezza/2011/07/monitoring#probingrate";);
        
-       public static final UriRef STORESIZE = 
-                       new 
UriRef("http://org.apache.clerezza/2011/07/monitoring#storesize";);
-       
        public static final UriRef VIEWLIMIT = 
                        new 
UriRef("http://org.apache.clerezza/2011/07/monitoring#viewlimit";);
        

Modified: 
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/resources/org/apache/clerezza/rdf/cris/monitoring/statistics.ssp
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/resources/org/apache/clerezza/rdf/cris/monitoring/statistics.ssp?rev=1176822&r1=1176821&r2=1176822&view=diff
==============================================================================
--- 
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/resources/org/apache/clerezza/rdf/cris/monitoring/statistics.ssp
 (original)
+++ 
incubator/clerezza/issues/CLEREZZA-606/rdf.cris.monitoring/src/main/resources/org/apache/clerezza/rdf/cris/monitoring/statistics.ssp
 Wed Sep 28 11:14:20 2011
@@ -1,7 +1,13 @@
-import java.util.Date
+import org.apache.clerezza.rdf.cris.monitoring.FDStatisticsContainer
+import org.apache.clerezza.rdf.cris.monitoring.CRISFileDescriptorMonitor
+import java.text.SimpleDateFormat
 
 def monitoring(s: Any) = new 
UriRef("http://org.apache.clerezza/2011/07/monitoring#"+s)
 
+val fdMonitor = 
$[org.apache.clerezza.rdf.cris.monitoring.CRISFileDescriptorMonitor]
+
+val df = new SimpleDateFormat("HH:mm:ss dd.MM.yyyy");
+
 resultDocModifier.setTitle("CRIS Monitoring Statistics");
 resultDocModifier.addNodes2Elem("tx-module", <h1>CRIS Monitoring 
Statistics</h1>);
 
@@ -20,27 +26,33 @@ resultDocModifier.addNodes2Elem("tx-modu
        </div>
        <div>
                <ul>
-                       <li>Monitored Bundle ID: 
{(res/monitoring("bundle"))*}</li>
-                       <li>Probing Rate: {(res/monitoring("probingrate"))*} 
ms</li>
-                       <li>Index Directory: 
{(res/monitoring("indexdirectory"))*}</li>
-                       <li>Store Size: {(res/monitoring("storesize"))*}</li>
-                       <li>View Limit: {(res/monitoring("viewlimit"))*}</li>
-                       <li>Open File Limit: 
{(res/monitoring("openfilelimit"))*}</li>
-                       <li>Threshold: {(res/monitoring("threshold"))*}</li>
-                       <li>Threshold Action URL: 
{(res/monitoring("thresholdurl"))*}</li>
-                       <li>Threshold Action Timeout: 
{(res/monitoring("thresholdtimeout"))*} min</li>
+                       <li>Monitored Bundle ID: {fdMonitor.getBundleId}</li>
+                       <li>Probing Rate: {fdMonitor.getProbingRate} s</li>
+                       <li>Index Directory: {fdMonitor.getDirectory}</li>
+                       <li>View Limit: {fdMonitor.getViewLimit}</li>
+                       <li>Open File Limit: 
{fdMonitor.getUserFileDescriptorLimit}</li>
+                       <li>Threshold: {fdMonitor.getThreshold}</li>
+                       <li>Threshold Action URL: 
{fdMonitor.getThresholdUrl}</li>
+                       <li>Threshold Action Timeout: 
{fdMonitor.getThresholdTimeout} min</li>
                </ul>
        </div>
        <table>
                <caption>Number of open files</caption>
                <tr><th>Time</th><th>CRIS</th><th>Platform</th></tr>
                {
-                       val list = res/monitoring("data");
-                       for(entry <- list!!) yield {
+                       val statistics = fdMonitor.getStatistics
+                       val timestamps = 
statistics.get(FDStatisticsContainer.TIMESTAMPS)
+                       val jvmEntries = 
statistics.get(CRISFileDescriptorMonitor.JVM_COUNT)
+                       val crisEntries = 
statistics.get(CRISFileDescriptorMonitor.CRIS_COUNT)
+       
+                       for {
+                         (timestamp, (jvmCount, crisCount)) <- (timestamps zip 
(jvmEntries zip crisEntries)).reverse
+                         if(jvmCount > 0)
+                       } yield {
                                <tr>
-                                       
<td>{(entry/monitoring("timestamp"))*}</td>
-                                       <td>{(entry/monitoring("cris"))*}</td>
-                                       <td>{(entry/monitoring("jvm"))*}</td>
+                                       <td>{df format (timestamp*1000)}</td>
+                                       <td>{crisCount}</td>
+                                       <td>{jvmCount}</td>
                                </tr>
                        }
                }
@@ -51,4 +63,4 @@ resultDocModifier.addNodes2Elem("tx-modu
        <div class="hd"></div>
        <div class="bd"></div>
        <div class="ft"></div>
-</div>
\ No newline at end of file
+</div>


Reply via email to