You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by ea...@apache.org on 2016/09/29 15:19:20 UTC

svn commit: r1762795 - in /uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae: controller/AggregateAnalysisEngineController_impl.java controller/BaseAnalysisEngineController.java jmx/ServiceInfo.java jmx/ServiceInfoMBean.java

Author: eae
Date: Thu Sep 29 15:19:20 2016
New Revision: 1762795

URL: http://svn.apache.org/viewvc?rev=1762795&view=rev
Log:
UIMA-5120 rearrange code to support dynamic enable/disable; add Level.INFO about CAS logging

Modified:
    uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AggregateAnalysisEngineController_impl.java
    uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/BaseAnalysisEngineController.java
    uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/jmx/ServiceInfo.java
    uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/jmx/ServiceInfoMBean.java

Modified: uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AggregateAnalysisEngineController_impl.java
URL: http://svn.apache.org/viewvc/uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AggregateAnalysisEngineController_impl.java?rev=1762795&r1=1762794&r2=1762795&view=diff
==============================================================================
--- uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AggregateAnalysisEngineController_impl.java (original)
+++ uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/AggregateAnalysisEngineController_impl.java Thu Sep 29 15:19:20 2016
@@ -38,14 +38,12 @@ import java.util.concurrent.locks.Reentr
 import org.apache.uima.UIMAFramework;
 import org.apache.uima.UIMARuntimeException;
 import org.apache.uima.aae.AsynchAECasManager;
+import org.apache.uima.aae.AsynchAECasManager_impl;
 import org.apache.uima.aae.InProcessCache;
 import org.apache.uima.aae.InProcessCache.CacheEntry;
-import org.apache.uima.aae.AsynchAECasManager_impl;
 import org.apache.uima.aae.InputChannel;
-import org.apache.uima.aae.UIDGenerator;
 import org.apache.uima.aae.UIMAEE_Constants;
 import org.apache.uima.aae.UimaClassFactory;
-import org.apache.uima.aae.WarmUpDataProvider;
 import org.apache.uima.aae.controller.LocalCache.CasStateEntry;
 import org.apache.uima.aae.delegate.ControllerDelegate;
 import org.apache.uima.aae.delegate.Delegate;
@@ -92,6 +90,7 @@ import org.apache.uima.resource.metadata
 import org.apache.uima.resource.metadata.TypeSystemDescription;
 import org.apache.uima.util.CasCreationUtils;
 import org.apache.uima.util.Level;
+import org.apache.uima.util.Logger;
 import org.apache.uima.util.TypeSystemUtil;
 import org.apache.uima.util.XMLInputSource;
 
@@ -1285,14 +1284,14 @@ public class AggregateAnalysisEngineCont
 
       // iterate over the controller list to find one with a matching key
       for( AnalysisEngineController c : childControllerList ) {
-    	  if ( analysisEngineKey.equals(c.getKey())) {
+    	  if ( analysisEngineKey.equals(c.getServiceInfo().getServiceKey())) {
     		  // from this controller's MBean determine if CAS logging
     		  // should be done
     		  if ( c.getServiceInfo() != null ) {
     			 // lookup controller's MBean
     			 logCas = c.getServiceInfo().isLogCasEnabled();
+           break;
     		  }
-    		  break;
     	  }
       }
       // Find the endpoint for the delegate
@@ -1383,25 +1382,33 @@ public class AggregateAnalysisEngineCont
    *   
    */
   private void logCasForEndpoint(String analysisEngineKey, CAS cas) throws Exception {
+    if (null == enableCasLogMap.get(analysisEngineKey)) {
+      String dir = analysisEngineKey;
+      if (null != delegateKey) {
+        dir = delegateKey + "/" + analysisEngineKey;
+      }
+      dir = dir.replace('/', '-');
+      setCasLoggingDirectory(analysisEngineKey, dir);
+    }
     if (!((Boolean)enableCasLogMap.get(analysisEngineKey))) {
       // create dir and serialize typesystem
-      boolean status = new File((String)casLogDirMap.get(analysisEngineKey)).mkdir();
+      new File((String)casLogDirMap.get(analysisEngineKey)).mkdir();
       TypeSystemDescription tsd = TypeSystemUtil.typeSystem2TypeSystemDescription(cas.getTypeSystem());
       File tsd2xml = new File(((String)casLogDirMap.get(analysisEngineKey))+"/typesystem.xml");
       FileOutputStream os = new FileOutputStream(tsd2xml);
       tsd.toXML(os);
       os.close();
       enableCasLogMap.put(analysisEngineKey, true);
-      // iterate over the controller list to find one with a matching key
-      for( AnalysisEngineController c : childControllerList ) {
-    	  if ( analysisEngineKey.equals(c.getKey())) {
-    		  if ( c.getServiceInfo() != null ) {
-    			 // Enable CAS logging
-    			 c.getServiceInfo().setLogCasEnableed();
-    		  }
-    		  break;
-    	  }
+      if (UIMAFramework.getLogger(CLASS_NAME).isLoggable(Level.INFO)) {
+        String logdir = (String)casLogDirMap.get(analysisEngineKey);
+        String[] dirs = logdir.split("/");
+        String comp = dirs[dirs.length-1];
+        comp = comp.replace('-', '/');
+        UIMAFramework.getLogger(CLASS_NAME).log(Level.INFO, "UIMA_CASLOG: CAS logging started for "+ 
+                comp + " to " + logdir);
       }
+      // set initialization time to use for CasLogging
+      initializationTime=System.nanoTime();
     }
     // create XmiCas file name
     Long now = Long.valueOf((System.nanoTime()-initializationTime)/1000);
@@ -3256,6 +3263,76 @@ public class AggregateAnalysisEngineCont
         }
       }
     }
+
+    //document the CAS logging specification
+    if (isTopLevelComponent() && UIMAFramework.getLogger(CLASS_NAME).isLoggable(Level.INFO)) {
+      Logger logger = UIMAFramework.getLogger(CLASS_NAME);
+
+      String baseDir = System.getProperty("user.dir");
+      if (null != System.getProperty("UIMA_CASLOG_BASE_DIRECTORY")) {
+        baseDir = System.getProperty("UIMA_CASLOG_BASE_DIRECTORY");
+      }
+      logger.log(Level.INFO, "UIMA_CASLOG: Base CAS log directory = "+baseDir);
+      if (null != System.getProperty("UIMA_CASLOG_TYPE_NAME") || 
+              null != System.getProperty("UIMA_CASLOG_FEATURE_NAME")) {
+        if (null == System.getProperty("UIMA_CASLOG_TYPE_NAME") || 
+              null == System.getProperty("UIMA_CASLOG_FEATURE_NAME")) {
+          logger.log(Level.INFO, "UIMA_CASLOG: Invalid UIMA_CASLOG specification. Both type and feature names must be specified");
+        }
+        else {
+          String typeName = System.getProperty("UIMA_CASLOG_TYPE_NAME");
+          String featureName = System.getProperty("UIMA_CASLOG_FEATURE_NAME");
+          logger.log(Level.INFO, "UIMA_CASLOG: CAS file names defined by "+typeName+" and "+featureName);
+        }
+      }
+      if (null != System.getProperty("UIMA_CASLOG_VIEW_NAME")) {
+        logger.log(Level.INFO, "UIMA_CASLOG:    where FS is found in view "+System.getProperty("UIMA_CASLOG_VIEW_NAME"));
+      }
+
+      String casLogComponents = System.getProperty("UIMA_CASLOG_COMPONENT_ARRAY");
+      if (null != casLogComponents) {
+        logger.log(Level.INFO, "UIMA_CASLOG: The following delegates have CAS logging enabled: "+ casLogComponents);
+      }
+    }
+
+
+    // enable CAS logging for delegates in this aggregate
+    String casLogComponents = System.getProperty("UIMA_CASLOG_COMPONENT_ARRAY");
+    // check requested Cas logging
+    if (casLogComponents!= null) {
+      String[] comps = casLogComponents.split(" ");
+      for (String comp : comps) {
+        String[] subcomps = comp.split("/");
+        if (1 == subcomps.length) {
+          ((AggregateAnalysisEngineController)this).setCasLoggingDirectory(comp, comp);
+          // iterate over the controller list to find one with a matching key
+          for( AnalysisEngineController c : childControllerList ) {
+            if ( c.getServiceInfo() != null ) {
+              if ( comp.equals(c.getServiceInfo().getServiceKey())) {
+                // Enable CAS logging
+                c.getServiceInfo().setLogCasEnabled();
+                break;
+              }
+            }
+          }
+        }
+        else {
+          if (this.delegateKey.equals(subcomps[subcomps.length-2])) {
+            for( AnalysisEngineController c : childControllerList ) {
+              if ( c.getServiceInfo() != null ) {
+                if ( subcomps[subcomps.length-1].equals(c.getServiceInfo().getServiceKey())) {
+                  // Enable CAS logging
+                  setCasLoggingDirectory(subcomps[subcomps.length-1], comp);
+                  c.getServiceInfo().setLogCasEnabled();
+                  break;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+
   }
   
   public void changeCollocatedDelegateState( String delegateKey, ServiceState state ) throws Exception {
@@ -3346,7 +3423,6 @@ public class AggregateAnalysisEngineCont
     if (enableCasLogMap == null)
       enableCasLogMap = new HashMap<String, Boolean>();
     enableCasLogMap.put(key, false);
-    initializationTime = System.nanoTime();
   }
   public int getServiceCasPoolSize() {
 	 return ((AsynchAECasManager_impl)casManager).getCasPoolSize();

Modified: uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/BaseAnalysisEngineController.java
URL: http://svn.apache.org/viewvc/uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/BaseAnalysisEngineController.java?rev=1762795&r1=1762794&r2=1762795&view=diff
==============================================================================
--- uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/BaseAnalysisEngineController.java (original)
+++ uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/controller/BaseAnalysisEngineController.java Thu Sep 29 15:19:20 2016
@@ -407,16 +407,6 @@ public abstract class BaseAnalysisEngine
       // Override uima core jmx domain setting
       mbean.setName(getComponentName(), getUimaContextAdmin(), jmxManagement.getJmxDomain());
 
-      // check requested Cas logging
-      if (casLogComponents!= null && (this instanceof AggregateAnalysisEngineController)) {
-        String[] comps = casLogComponents.split(" ");
-        for (String comp : comps) {
-          String[] subcomps = comp.split("/");
-          if (1 == subcomps.length) {
-            ((AggregateAnalysisEngineController)this).setCasLoggingDirectory(comp, comp);
-          }
-        }
-      }
       if (resourceSpecifier instanceof AnalysisEngineDescription) {
         // Is this service a CAS Multiplier?
         if (((AnalysisEngineDescription) resourceSpecifier).getAnalysisEngineMetaData()
@@ -438,19 +428,7 @@ public abstract class BaseAnalysisEngine
     } else {
       UimaContext childContext = parentController.getChildUimaContext(endpointName);
       if ( childContext != null && childContext instanceof UimaContextAdmin ) {
-        // check requested Cas logging
         String qualifiedContextName = ((UimaContextAdmin)childContext).getQualifiedContextName();
-        if (casLogComponents!= null && (this instanceof AggregateAnalysisEngineController) && 
-                casLogComponents.contains(anEndpointName)) {
-          String[] comps = casLogComponents.split(" ");
-          for (String comp : comps) {
-            String[] subcomps = comp.split("/");
-            if (1 < subcomps.length && subcomps[subcomps.length-2].equals(anEndpointName)) {
-              ((AggregateAnalysisEngineController)this).setCasLoggingDirectory(subcomps[subcomps.length-1],
-                      comp);
-            }
-          }
-        }
       }
       paramsMap.put(Resource.PARAM_UIMA_CONTEXT, childContext);
 

Modified: uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/jmx/ServiceInfo.java
URL: http://svn.apache.org/viewvc/uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/jmx/ServiceInfo.java?rev=1762795&r1=1762794&r2=1762795&view=diff
==============================================================================
--- uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/jmx/ServiceInfo.java (original)
+++ uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/jmx/ServiceInfo.java Thu Sep 29 15:19:20 2016
@@ -66,7 +66,7 @@ public class ServiceInfo implements Serv
   public boolean isLogCasEnabled() {
 	  return logCasEnabled;
   }
-  public void setLogCasEnableed() {
+  public void setLogCasEnabled() {
 	  logCasEnabled = !logCasEnabled;  // toggle ON and OFF
   }
   public void setCmRegisteredName(String uniqueName ) {

Modified: uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/jmx/ServiceInfoMBean.java
URL: http://svn.apache.org/viewvc/uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/jmx/ServiceInfoMBean.java?rev=1762795&r1=1762794&r2=1762795&view=diff
==============================================================================
--- uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/jmx/ServiceInfoMBean.java (original)
+++ uima/uima-as/trunk/uimaj-as-core/src/main/java/org/apache/uima/aae/jmx/ServiceInfoMBean.java Thu Sep 29 15:19:20 2016
@@ -46,4 +46,5 @@ public interface ServiceInfoMBean extend
   
   public boolean isLogCasEnabled();
 
+  public void setLogCasEnabled();
 }