Author: degenaro
Date: Tue Jun 13 13:04:38 2017
New Revision: 1798596

URL: http://svn.apache.org/viewvc?rev=1798596&view=rev
Log:
UIMA-5451 DUCC WebServer (WS) ducc_disk_info runs too often

Modified:
    
uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/DiagnosticsHelper.java
    
uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java

Modified: 
uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/DiagnosticsHelper.java
URL: 
http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/DiagnosticsHelper.java?rev=1798596&r1=1798595&r2=1798596&view=diff
==============================================================================
--- 
uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/DiagnosticsHelper.java
 (original)
+++ 
uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/helper/DiagnosticsHelper.java
 Tue Jun 13 13:04:38 2017
@@ -22,64 +22,85 @@ import java.io.BufferedReader;
 import java.io.File;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.common.utils.id.DuccId;
 
-public class DiagnosticsHelper {
+public class DiagnosticsHelper extends Thread {
        
        private static DuccLogger duccLogger = 
DuccLogger.getLogger(DiagnosticsHelper .class.getName(), null);
-       private static DuccId duccId = null;
-       
-       private static String disk_info = null;
+       private static DuccId jobid = null;
        
        private static File devNull = new File("/dev/null");
        
+       private static AtomicReference<DiagnosticsHelper> instance = new 
AtomicReference<DiagnosticsHelper>();
+       private static AtomicReference<String> disk_info = new 
AtomicReference<String>();
+       
+       private static long interval = 1000*60*60; // 60 minutes between disk 
info calculations
+       
+       static {
+               DiagnosticsHelper expect = null;
+               DiagnosticsHelper update = new DiagnosticsHelper();
+               instance.compareAndSet(expect,update);
+               instance.get().run();
+       }
+       
        private static void refresh_ducc_disk_info() {
                String location = "refresh_ducc_disk_info";
-               if(disk_info == null) {
-                       disk_info = "";
-                       StringBuffer sb = new StringBuffer();
-                       try {
-                               String path = System.getProperty("DUCC_HOME")
-                                                       +File.separator
-                                                       +"admin"
-                                                       +File.separator
-                                                       +"ducc_disk_info"
-                                                       ;
-                               String[] command = { path };
-                               ProcessBuilder pb = new ProcessBuilder( command 
);
-                               pb = pb.redirectError(devNull);
-                               Process process = pb.start();
-                               InputStream is = process.getInputStream();
-                       InputStreamReader isr = new InputStreamReader(is);
-                       BufferedReader br = new BufferedReader(isr);
-                       String line;
-                       while ((line = br.readLine()) != null) {
-                          sb.append(line);
-                          sb.append("\n");
-                       }
-                       disk_info = sb.toString();
-                       duccLogger.debug(location, duccId, disk_info);
-                       int exitValue = process.waitFor();
-                       duccLogger.debug(location, duccId, exitValue);
-                       }
-                       catch(Exception e) {
-                               duccLogger.error(location, duccId, e);
-                       }
+               StringBuffer sb = new StringBuffer();
+               duccLogger.debug(location, jobid, "time start");
+               try {
+                       String path = System.getProperty("DUCC_HOME")
+                                               +File.separator
+                                               +"admin"
+                                               +File.separator
+                                               +"ducc_disk_info"
+                                               ;
+                       String[] command = { path };
+                       ProcessBuilder pb = new ProcessBuilder( command );
+                       pb = pb.redirectError(devNull);
+                       Process process = pb.start();
+                       InputStream is = process.getInputStream();
+                      InputStreamReader isr = new InputStreamReader(is);
+                      BufferedReader br = new BufferedReader(isr);
+                      String line;
+                      while ((line = br.readLine()) != null) {
+                         sb.append(line);
+                         sb.append("\n");
+                      }
+                      disk_info.set(sb.toString());
+                      duccLogger.info(location, jobid, disk_info);
+                      int exitValue = process.waitFor();
+                      duccLogger.debug(location, jobid, "rc="+exitValue);
                }
-       }
-       
-       public static void reset_ducc_disk_info() {
-               synchronized(DiagnosticsHelper.class) {
-                       disk_info = null;
+               catch(Exception e) {
+                       duccLogger.error(location, jobid, e);
                }
+               duccLogger.debug(location, jobid, "time end");
        }
        
        public static String get_ducc_disk_info() {
-               synchronized(DiagnosticsHelper.class) {
-                       refresh_ducc_disk_info();
-                       return disk_info;
+               return disk_info.get();
+       }
+       
+       public static boolean isNotKilled() {
+               return true;
+       }
+       
+       @Override 
+       public void run() {
+               String location = "run";
+               while (isNotKilled()) {
+                       try {
+                               refresh_ducc_disk_info();
+                               duccLogger.debug(location, jobid, "sleep 
"+interval+" begin");
+                               Thread.sleep(interval);
+                               duccLogger.debug(location, jobid, "sleep 
"+interval+" end");
+                       }
+                       catch(Exception e) {
+                               duccLogger.error(location, jobid, e);
+                       }
                }
        }
 }

Modified: 
uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java
URL: 
http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java?rev=1798596&r1=1798595&r2=1798596&view=diff
==============================================================================
--- 
uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java
 (original)
+++ 
uima/uima-ducc/trunk/uima-ducc-web/src/main/java/org/apache/uima/ducc/ws/server/DuccHandler.java
 Tue Jun 13 13:04:38 2017
@@ -3828,9 +3828,6 @@ public class DuccHandler extends DuccAbs
                                        addDownDaemon(sb, daemonName.name());
                                        additionalInfo = 
DiagnosticsHelper.get_ducc_disk_info();
                                }
-                               else {
-                                       
DiagnosticsHelper.reset_ducc_disk_info();
-                               }
                                break;
                        case Broker:
                                if(!brokerHelper.isAlive()) {


Reply via email to