Author: rwesten
Date: Wed Jan 22 13:14:56 2014
New Revision: 1560343

URL: http://svn.apache.org/r1560343
Log:
implementation for STANBOL-1267

Modified:
    
stanbol/branches/release-0.12/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java
    
stanbol/branches/release-0.12/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EventJobManagerImpl.java

Modified: 
stanbol/branches/release-0.12/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java
URL: 
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java?rev=1560343&r1=1560342&r2=1560343&view=diff
==============================================================================
--- 
stanbol/branches/release-0.12/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java
 (original)
+++ 
stanbol/branches/release-0.12/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EnhancementJobHandler.java
 Wed Jan 22 13:14:56 2014
@@ -24,9 +24,11 @@ import static org.apache.stanbol.enhance
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.Dictionary;
 import java.util.Hashtable;
 import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
@@ -34,10 +36,16 @@ import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
+import org.apache.clerezza.rdf.core.MGraph;
 import org.apache.clerezza.rdf.core.NonLiteral;
 import org.apache.stanbol.enhancer.servicesapi.EngineException;
 import org.apache.stanbol.enhancer.servicesapi.EnhancementEngine;
 import org.apache.stanbol.enhancer.servicesapi.EnhancementEngineManager;
+import org.apache.stanbol.enhancer.servicesapi.helper.EnhancementEngineHelper;
+import org.apache.stanbol.enhancer.servicesapi.helper.ExecutionMetadataHelper;
+import org.apache.stanbol.enhancer.servicesapi.helper.execution.ChainExecution;
+import org.apache.stanbol.enhancer.servicesapi.helper.execution.Execution;
+import 
org.apache.stanbol.enhancer.servicesapi.helper.execution.ExecutionMetadata;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventAdmin;
 import org.osgi.service.event.EventHandler;
@@ -60,7 +68,7 @@ public class EnhancementJobHandler imple
      *  r: ... read lock
      *  w: ... write lock
      */
-    private Logger log = LoggerFactory.getLogger(EnhancementJobHandler.class);
+    private static Logger log = 
LoggerFactory.getLogger(EnhancementJobHandler.class);
     /**
      * Keys are {@link EnhancementJob}s currently asynchronously enhancing 
      * contentItems and the values are the objects used to interrupt the 
@@ -349,6 +357,51 @@ public class EnhancementJobHandler imple
         }
         return startedExecution;
     }
+    /**
+     * Helper method that logs the execution time for the Chain and all the
+     * Enhancement Engines on DEBUG level
+     * @param logger The logger used for logging
+     * @param job the job to log. This expects that 
+     * <code>{@link EnhancementJob#isFinished()} == true</code>
+     */
+    protected static void logExecutionTimes(Logger logger, EnhancementJob job){
+       if(logger.isInfoEnabled()){
+               try {
+                       ExecutionMetadata em = ExecutionMetadata.parseFrom(
+                                       
job.getExecutionMetadata(),job.getContentItem().getUri());
+                       ChainExecution ce = em.getChainExecution();
+                       long cd = ce.getDuration();
+                       logger.info("Executed Chain {} in {}ms", 
ce.getChainName(),
+                                               ce.getDuration());
+                       logger.info(" > ContentItem: {}", 
job.getContentItem().getUri().getUnicodeString());
+                       List<Execution> ees = new 
ArrayList<Execution>(em.getEngineExecutions().values());
+                       //sort by start date (execution order)
+                       Collections.sort(ees, new Comparator<Execution>() {
+                               @Override
+                               public int compare(Execution e1, Execution e2) {
+                                       return 
e1.getStarted().compareTo(e2.getStarted());
+                               }
+                               });
+                       long eds = 0;
+                       for(Execution ee : ees){
+                               long ed = ee.getDuration();
+                               eds = eds + ed;
+                               int edp = Math.round(ed*100/(float)cd);
+                               logger.info(" - {} in {}ms ({}%)", new Object[]{
+                                               
ee.getExecutionNode().getEngineName(), ed, edp});
+                       }
+                       float cf = eds/cd;
+                       int cfp = Math.round((cf-1)*100);
+                       logger.info(" > concurrency: {} ({}%)",cf, cfp);
+               } catch (RuntimeException e) {
+                       log.warn("Exception while logging ExecutionTimes for 
Chain: '" +
+                                       job.getChainName() + " and ContentItem 
"+
+                                       job.getContentItem().getUri() +" to 
Logger " +
+                                       logger.getName(),e);
+                       
+               }
+       }
+    }
     
     /**
      * Logs basic infos about the Job as INFO and detailed infos as DEBUG

Modified: 
stanbol/branches/release-0.12/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EventJobManagerImpl.java
URL: 
http://svn.apache.org/viewvc/stanbol/branches/release-0.12/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EventJobManagerImpl.java?rev=1560343&r1=1560342&r2=1560343&view=diff
==============================================================================
--- 
stanbol/branches/release-0.12/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EventJobManagerImpl.java
 (original)
+++ 
stanbol/branches/release-0.12/enhancer/jobmanager/event/src/main/java/org/apache/stanbol/enhancer/jobmanager/event/impl/EventJobManagerImpl.java
 Wed Jan 22 13:14:56 2014
@@ -68,6 +68,11 @@ import org.slf4j.LoggerFactory;
 public class EventJobManagerImpl implements EnhancementJobManager {
 
     private final Logger log = 
LoggerFactory.getLogger(EventJobManagerImpl.class);
+    /**
+     * Logger for the {@link EnhancementJobManager} interface. This is used
+     * to log statistics about execution times for enhancement jobs
+     */
+    private final Logger enhancementJobManager = 
LoggerFactory.getLogger(EnhancementJobManager.class);
     
     public static final int DEFAULT_SERVICE_RANKING = 0;
 
@@ -204,6 +209,9 @@ public class EventJobManagerImpl impleme
             throw new ChainException("EnhancementJobManager was deactivated 
while" +
                        " enhancing the passed ContentItem 
"+job.getContentItem()+
                        " (EnhancementJobManager type: "+getClass()+")");
+        } else {
+               //log infos about the execution times to the 
enhancementJobManager
+               EnhancementJobHandler.logExecutionTimes(enhancementJobManager, 
job);
         }
     }
        /**


Reply via email to