LISTSERV mailing list manager LISTSERV 16.5

Help for HPS-SVN Archives


HPS-SVN Archives

HPS-SVN Archives


HPS-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

HPS-SVN Home

HPS-SVN Home

HPS-SVN  August 2015

HPS-SVN August 2015

Subject:

r3333 - /java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/

From:

[log in to unmask]

Reply-To:

Notification of commits to the hps svn repository <[log in to unmask]>

Date:

Tue, 4 Aug 2015 22:11:38 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (875 lines)

Author: [log in to unmask]
Date: Tue Aug  4 15:11:36 2015
New Revision: 3333

Log:
Change crawler to use UTC times in milliseconds instead of SQL timestamps.  HPSJAVA-570

Modified:
    java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/Crawler.java
    java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileFilter.java
    java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileSequenceComparator.java
    java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileUtilities.java
    java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileVisitor.java
    java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/JCacheManager.java
    java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunFilter.java
    java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunProcessor.java
    java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunSummaryUpdater.java

Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/Crawler.java
 =============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/Crawler.java	(original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/Crawler.java	Tue Aug  4 15:11:36 2015
@@ -308,7 +308,7 @@
         runs.sortFiles();
 
         // Process all the files, performing caching from the MSS if necessary.
-        RunProcessor.processRuns(this.cacheManager, runs, config);
+        RunProcessor.processAllRuns(this.cacheManager, runs, config);
 
         // Print the summary information after the run processing is done.
         runs.printRunSummaries();

Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileFilter.java
 =============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileFilter.java	(original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileFilter.java	Tue Aug  4 15:11:36 2015
@@ -21,7 +21,7 @@
         final boolean isEvio = pathname.getName().contains(".evio");
         boolean hasSeqNum = false;
         try {
-            EvioFileUtilities.getSequenceNumber(pathname);
+            EvioFileUtilities.getSequence(pathname);
             hasSeqNum = true;
         } catch (final Exception e) {
         }

Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileSequenceComparator.java
 =============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileSequenceComparator.java	(original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileSequenceComparator.java	Tue Aug  4 15:11:36 2015
@@ -17,8 +17,8 @@
      */
     @Override
     public int compare(final File o1, final File o2) {
-        final Integer sequenceNumber1 = EvioFileUtilities.getSequenceNumber(o1);
-        final Integer sequenceNumber2 = EvioFileUtilities.getSequenceNumber(o2);
+        final Integer sequenceNumber1 = EvioFileUtilities.getSequence(o1);
+        final Integer sequenceNumber2 = EvioFileUtilities.getSequence(o2);
         return sequenceNumber1.compareTo(sequenceNumber2);
     }
 }

Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileUtilities.java
 =============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileUtilities.java	(original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileUtilities.java	Tue Aug  4 15:11:36 2015
@@ -2,7 +2,6 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.util.Date;
 import java.util.logging.Logger;
 
 import org.hps.record.evio.EvioEventConstants;
@@ -48,44 +47,50 @@
     }
 
     /**
-     * Get the date from the control bank of an EVIO event.
-     *
-     * @param file the EVIO file
-     * @param eventTag the event tag on the bank
-     * @param gotoEvent an event to start the scanning
-     * @return the control bank date or null if not found
-     */
-    static Date getControlDate(final File file, final int eventTag, final int gotoEvent) {
-        Date date = null;
-        EvioReader reader = null;
+     * Get the end date
+     *
+     * @param evioReader the <code>EvioReader</code>
+     * @return the run end date
+     */
+    static Long getEndTimestamp(final EvioReader evioReader) {
+
+        // Date endDate = null;
+        Long timestamp = null;
+
         try {
-            reader = open(file, true);
-            EvioEvent event;
-            if (gotoEvent > 0) {
-                reader.gotoEventNumber(gotoEvent);
-            } else if (gotoEvent < 0) {
-                reader.gotoEventNumber(reader.getEventCount() + gotoEvent);
-            }
-            while ((event = reader.parseNextEvent()) != null) {
-                if (event.getHeader().getTag() == eventTag) {
-                    final int[] data = EvioEventUtilities.getControlEventData(event);
-                    final long seconds = data[0];
-                    date = new Date(seconds * MILLISECONDS);
-                    break;
+            // Search for the last physics event in the last 5 events of the file.
+            System.out.println("going to event " + (evioReader.getEventCount() - 5) + " / "
+                    + evioReader.getEventCount() + " to find end date");
+            evioReader.gotoEventNumber(evioReader.getEventCount() - 5);
+            EvioEvent evioEvent = null;
+            EvioEvent lastPhysicsEvent = null;
+
+            // Find last physics event.
+            while ((evioEvent = evioReader.parseNextEvent()) != null) {
+                if (EvioEventUtilities.isPhysicsEvent(evioEvent)) {
+                    lastPhysicsEvent = evioEvent;
                 }
             }
+
+            // If there is no physics event found this is an error.
+            if (lastPhysicsEvent == null) {
+                throw new RuntimeException("No physics event found.");
+            }
+
+            // Get the timestamp from the head bank of the physics event.
+            LOGGER.info("getting head bank date from " + lastPhysicsEvent.getEventNumber());
+            final Long eventTimestamp = getHeadBankTimestamp(lastPhysicsEvent);
+            if (eventTimestamp != null) {
+                LOGGER.info("found end timestamp " + eventTimestamp);
+                timestamp = eventTimestamp;
+            } else {
+                throw new RuntimeException("No timestamp found in head bank.");
+            }
+
         } catch (EvioException | IOException e) {
             throw new RuntimeException(e);
-        } finally {
-            if (reader != null) {
-                try {
-                    reader.close();
-                } catch (final IOException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-        return date;
+        }
+        return timestamp;
     }
 
     /**
@@ -94,63 +99,18 @@
      * @param event the EVIO file
      * @return the date from the head bank or null if not found
      */
-    static Date getHeadBankDate(final EvioEvent event) {
-        Date date = null;
+    static Long getHeadBankTimestamp(final EvioEvent event) {
+        // Date date = null;
+        Long timestamp = null;
         final BaseStructure headBank = EvioEventUtilities.getHeadBank(event);
         if (headBank != null) {
             final int[] data = headBank.getIntData();
             final long time = data[3];
             if (time != 0L) {
-                date = new Date(time * MILLISECONDS);
-            }
-        }
-        return date;
-    }
-
-    /**
-     * Get the run end date which is taken either from the END event or the last physics event if the END event is not
-     * found in the file.
-     *
-     * @param file the EVIO file
-     * @return the run end date
-     */
-    static Date getRunEnd(final File file) {
-
-        // Search for the END event in the last 10 events of the file.
-        Date endDate = getControlDate(file, EvioEventConstants.END_EVENT_TAG, -10);
-
-        // Was the end date found from the END event?
-        if (endDate == null) {
-
-            EvioReader reader = null;
-            try {
-                reader = open(file, true);
-
-                // Search for the last physics event in the last 10 events of the file.
-                reader.gotoEventNumber(reader.getEventCount() - 10);
-                EvioEvent event = null;
-                while ((event = reader.parseNextEvent()) != null) {
-                    if (EvioEventUtilities.isPhysicsEvent(event)) {
-                        final Date eventDate = getHeadBankDate(event);
-                        if (eventDate != null) {
-                            // This might be set multiple times but should result in the time of the last physics event.
-                            endDate = eventDate;
-                        }
-                    }
-                }
-            } catch (EvioException | IOException e) {
-                throw new RuntimeException(e);
-            } finally {
-                if (reader != null) {
-                    try {
-                        reader.close();
-                    } catch (final IOException e) {
-                        e.printStackTrace();
-                    }
-                }
-            }
-        }
-        return endDate;
+                timestamp = time * MILLISECONDS;
+            }
+        }
+        return timestamp;
     }
 
     /**
@@ -160,7 +120,7 @@
      * @return the run number
      * @throws Exception if there is a problem parsing out the run number
      */
-    static Integer getRunFromName(final File file) {
+    static Integer getRun(final File file) {
         final String name = file.getName();
         final int startIndex = name.lastIndexOf("_") + 1;
         final int endIndex = name.indexOf(".");
@@ -168,58 +128,71 @@
     }
 
     /**
-     * Get the run start date from an EVIO file (should be the first file in the run).
-     * <p>
-     * This is taken from the PRESTART event if available or the first physics event.
-     *
-     * @param file the EVIO file
+     * Get the EVIO file sequence number, which is the number at the end of the file name.
+     *
+     * @param file the EVIO file
+     * @return the file's sequence number
+     * @throws Exception if there is an error parsing out the sequence number
+     */
+    static Integer getSequence(final File file) {
+        final String name = file.getName();
+        return Integer.parseInt(name.substring(name.lastIndexOf(".") + 1));
+    }
+
+    /**
+     * Get the start date from the first physics event.
+     *
+     * @param evioReader the <code>EvioReader</code>
      * @return the run start date
      */
-    static Date getRunStart(final File file) {
-
-        // First try to find the start date in the special PRESTART event.
-        Date date = getControlDate(file, EvioEventConstants.PRESTART_EVENT_TAG, 0);
-
-        // Was start date not found from PRESTART?
-        if (date == null) {
-
-            // Read events until there is a physics event and use its time for the start date.
-            EvioReader reader = null;
-            try {
-                reader = open(file, true);
-                EvioEvent event = null;
-                while ((event = reader.parseNextEvent()) != null) {
-                    if (EvioEventUtilities.isPhysicsEvent(event)) {
-                        if ((date = getHeadBankDate(event)) != null) {
-                            break;
-                        }
+    static Long getStartTimestamp(final EvioReader evioReader) {
+
+        Long timestamp = null;
+
+        // Read events until there is a physics event and return its timestamp.
+        try {
+            EvioEvent event = null;
+            while ((event = evioReader.parseNextEvent()) != null) {
+                if (EvioEventUtilities.isPhysicsEvent(event)) {
+                    if ((timestamp = getHeadBankTimestamp(event)) != null) {
+                        break;
                     }
                 }
-            } catch (EvioException | IOException e) {
-                throw new RuntimeException(e);
-            } finally {
-                if (reader != null) {
-                    try {
-                        reader.close();
-                    } catch (final IOException e) {
-                        e.printStackTrace();
-                    }
+            }
+        } catch (EvioException | IOException e) {
+            throw new RuntimeException(e);
+        }
+        return timestamp;
+    }
+
+    /**
+     * Get the date from the control bank of an EVIO event.
+     *
+     * @param file the EVIO file
+     * @param eventTag the event tag on the bank
+     * @param gotoEvent an event to start the scanning
+     * @return the control bank date or null if not found
+     */
+    static Long getTimestamp(final EvioReader evioReader, final int eventTag, final int gotoEvent) {
+        Long timestamp = null;
+        try {
+            EvioEvent evioEvent;
+            if (gotoEvent > 0) {
+                evioReader.gotoEventNumber(gotoEvent);
+            } else if (gotoEvent < 0) {
+                evioReader.gotoEventNumber(evioReader.getEventCount() + gotoEvent);
+            }
+            while ((evioEvent = evioReader.parseNextEvent()) != null) {
+                if (evioEvent.getHeader().getTag() == eventTag) {
+                    final int[] data = EvioEventUtilities.getControlEventData(evioEvent);
+                    timestamp = (long) (data[0] * MILLISECONDS);
+                    break;
                 }
             }
-        }
-        return date;
-    }
-
-    /**
-     * Get the EVIO file sequence number, which is the number at the end of the file name.
-     *
-     * @param file the EVIO file
-     * @return the file's sequence number
-     * @throws Exception if there is an error parsing out the sequence number
-     */
-    static Integer getSequenceNumber(final File file) {
-        final String name = file.getName();
-        return Integer.parseInt(name.substring(name.lastIndexOf(".") + 1));
+        } catch (EvioException | IOException e) {
+            throw new RuntimeException(e);
+        }
+        return timestamp;
     }
 
     /**
@@ -230,6 +203,33 @@
      */
     static boolean isCachedFile(final File file) {
         return file.getPath().startsWith("/cache");
+    }
+
+    /**
+     * Return <code>true</code> if a valid CODA <i>END</i> event can be located in the <code>EvioReader</code>'s current
+     * file.
+     *
+     * @param reader the EVIO reader
+     * @return <code>true</code> if valid END event is located
+     * @throws Exception if there are IO problems using the reader
+     */
+    static boolean isEndOkay(final EvioReader reader) throws Exception {
+        LOGGER.info("checking is END okay ...");
+
+        boolean endOkay = false;
+
+        // Go to second to last event for searching.
+        reader.gotoEventNumber(reader.getEventCount() - 2);
+
+        // Look for END event.
+        EvioEvent event = null;
+        while ((event = reader.parseNextEvent()) != null) {
+            if (event.getHeader().getTag() == EvioEventConstants.END_EVENT_TAG) {
+                endOkay = true;
+                break;
+            }
+        }
+        return endOkay;
     }
 
     /**
@@ -287,4 +287,10 @@
     static EvioReader open(final String path) throws IOException, EvioException {
         return open(new File(path), false);
     }
+
+    /**
+     * Present class instantiation.
+     */
+    private EvioFileUtilities() {
+    }
 }

Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileVisitor.java
 =============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileVisitor.java	(original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/EvioFileVisitor.java	Tue Aug  4 15:11:36 2015
@@ -99,10 +99,10 @@
         if (this.accept(file)) {
 
             // Get the run number from the file name.
-            final Integer run = EvioFileUtilities.getRunFromName(file);
+            final Integer run = EvioFileUtilities.getRun(file);
 
             // Get the sequence number from the file name.
-            final Integer seq = EvioFileUtilities.getSequenceNumber(file);
+            final Integer seq = EvioFileUtilities.getSequence(file);
 
             LOGGER.info("accepted file " + file.getPath() + " with run " + run + " and seq " + seq);
 

Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/JCacheManager.java
 =============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/JCacheManager.java	(original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/JCacheManager.java	Tue Aug  4 15:11:36 2015
@@ -299,7 +299,7 @@
     /**
      * The time in milliseconds when the caching operation started.
      */
-    long start = 0;
+    private long start = 0;
 
     /**
      * Cache a file by submitting a 'jcache submit' process.
@@ -357,7 +357,7 @@
         // Loop over all files, refresh the status, and check that they are cached.
         for (final Entry<File, CacheStatus> entry : this.cacheStatuses.entrySet()) {
 
-            // Get the cache status the file.
+            // Get the cache status of the file.
             final CacheStatus cacheStatus = entry.getValue();
 
             LOGGER.info("checking status of " + cacheStatus.getFile().getPath() + " with req ID '"

Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunFilter.java
 =============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunFilter.java	(original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunFilter.java	Tue Aug  4 15:11:36 2015
@@ -36,6 +36,6 @@
      */
     @Override
     public boolean accept(final File file) {
-        return this.acceptRuns.contains(EvioFileUtilities.getRunFromName(file));
+        return this.acceptRuns.contains(EvioFileUtilities.getRun(file));
     }
 }

Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunProcessor.java
 =============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunProcessor.java	(original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunProcessor.java	Tue Aug  4 15:11:36 2015
@@ -3,7 +3,6 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -41,13 +40,12 @@
      * @param runs the run log containing the list of run summaries
      * @throws Exception if there is an error processing one of the runs
      */
-    static void processRuns(final JCacheManager cacheManager, final RunLog runs, final CrawlerConfig config)
+    static void processAllRuns(final JCacheManager cacheManager, final RunLog runs, final CrawlerConfig config)
             throws Exception {
 
-        // Configure max wait time of jcache manager.
+        // Configure the max wait time for file caching operations.
         if (config.waitTime() != null && config.waitTime() > 0L) {
             cacheManager.setWaitTime(config.waitTime());
-            LOGGER.config("JCacheManager max wait time set to " + config.waitTime());
         }
 
         // Process all of the runs that were found.
@@ -71,7 +69,7 @@
             }
 
             // Process all of the run's files.
-            runProcessor.process();
+            runProcessor.processRun();
         }
     }
 
@@ -86,17 +84,17 @@
     private final EpicsLog epicsLog;
 
     /**
+     * Processor for extracting event type counts (sync, physics, trigger types, etc.).
+     */
+    private final EventCountProcessor eventCountProcessor;
+
+    /**
      * The event printing interval when processing EVIO files.
      */
     private int eventPrintInterval = 1000;
 
     /**
-     * Processor for extracting event type counts (sync, physics, trigger types, etc.).
-     */
-    private final EventCountProcessor eventCountProcessor;
-
-    /**
-     * Max files to read (defaults to unlimited).
+     * Max total files to read (default is unlimited).
      */
     private int maxFiles = -1;
 
@@ -189,15 +187,55 @@
     }
 
     /**
-     * Get the event count from the current <code>EvioReader</code>.
-     *
-     * @param reader the current <code>EvioReader</code>
-     * @return the event count
-     * @throws IOException if there is a generic IO error
-     * @throws EvioException if there is an EVIO related error
-     */
-    Integer computeEventCount(final EvioReader reader) throws IOException, EvioException {
-        return reader.getEventCount();
+     * Find the end date in the EVIO events.
+     *
+     * @param evioReader the open <code>EvioReader</code>
+     */
+    private void findEndDate(final EvioReader evioReader) {
+
+        // Try to get end date from END event.
+        Long endTimestamp = EvioFileUtilities.getTimestamp(evioReader, EvioEventConstants.END_EVENT_TAG, -5);
+
+        if (endTimestamp != null) {
+            // Flag end okay for the run.
+            this.runSummary.setEndOkay(true);
+        } else {
+            // Try to find the end date from the last physics event.
+            endTimestamp = EvioFileUtilities.getEndTimestamp(evioReader);
+            this.runSummary.setEndOkay(false);
+        }
+
+        if (endTimestamp == null) {
+            // Not finding the end date is a fatal error.
+            throw new RuntimeException("Failed to find end date.");
+        }
+
+        LOGGER.info("found end timestamp " + endTimestamp);
+        this.runSummary.setEndTimeUtc(endTimestamp);
+    }
+
+    /**
+     * Find the start date in the EVIO events.
+     *
+     * @param evioReader the open <code>EvioReader</code>
+     */
+    private void findStartDate(final EvioReader evioReader) {
+
+        // First try to find the start date in the PRESTART event.
+        Long startTimestamp = EvioFileUtilities.getTimestamp(evioReader, EvioEventConstants.PRESTART_EVENT_TAG, 0);
+
+        if (startTimestamp == null) {
+            // Search for start date in first physics event.
+            startTimestamp = EvioFileUtilities.getStartTimestamp(evioReader);
+        }
+
+        if (startTimestamp == null) {
+            // Not finding the start date is a fatal error.
+            throw new RuntimeException("Failed to find start date.");
+        }
+
+        LOGGER.fine("got run start " + startTimestamp);
+        this.runSummary.setStartTimeUtc(startTimestamp);
     }
 
     /**
@@ -228,81 +266,50 @@
     }
 
     /**
-     * Return <code>true</code> if a valid CODA <i>END</i> event can be located in the <code>EvioReader</code>'s current
-     * file.
-     *
-     * @param reader the EVIO reader
-     * @return <code>true</code> if valid END event is located
-     * @throws Exception if there are IO problems using the reader
-     */
-    boolean isEndOkay(final EvioReader reader) throws Exception {
-        LOGGER.info("checking is END okay ...");
-
-        boolean endOkay = false;
-
-        // Go to second to last event for searching.
-        reader.gotoEventNumber(reader.getEventCount() - 2);
-
-        // Look for END event.
-        EvioEvent event = null;
-        while ((event = reader.parseNextEvent()) != null) {
-            if (event.getHeader().getTag() == EvioEventConstants.END_EVENT_TAG) {
-                endOkay = true;
-                break;
-            }
-        }
-        return endOkay;
-    }
-
-    /**
-     * Process the run by executing the registered {@link org.hps.record.evio.EvioEventProcessor}s and performing
-     * special tasks such as the extraction of start and end dates.
-     * <p>
-     * This method will also activate file caching, if enabled by the {@link #useFileCache} option.
-     *
-     * @throws Exception if there is an error processing a file
-     */
-    void process() throws Exception {
-
-        LOGGER.info("processing run " + this.runSummary.getRun() + " ...");
-
-        // First cache all the files we will process, if necessary.
-        if (this.useFileCache) {
-            this.cacheFiles();
-        }
-
-        // Run the start of job hooks.
-        for (final EvioEventProcessor processor : this.processors) {
-            processor.startJob();
-        }
-
-        final List<File> files = this.getFiles();
-
-        LOGGER.info("processing " + files.size() + " from run " + this.runSummary.getRun());
-
-        // Process all the files.
-        for (final File file : files) {
-            this.process(file);
-        }
-
-        // Run the end job hooks.
-        for (final EvioEventProcessor processor : this.processors) {
-            processor.endJob();
-        }
-
-        // Put scaler data from EVIO processor into run summary.
-        runSummary.setScalerData(this.scalersProcessor.getScalerData());
-
-        // Set the counts of event types on the run summary.
-        runSummary.setEventTypeCounts(eventCountProcessor.getEventCounts());
-
-        // Set total number of events on the run summary from the event counter.
-        runSummary.setTotalEvents(this.eventCountProcessor.getTotalEventCount());
-
-        // Set EpicsData for the run.
-        runSummary.setEpicsData(this.epicsLog.getEpicsData());
-
-        LOGGER.info("done processing run " + this.runSummary.getRun());
+     * Return <code>true</code> if the file is the first one in the list for the run.
+     *
+     * @param file the EVIO <code>File</code>
+     * @return <code>true</code> if the file is the first one in the list for the run
+     */
+    private boolean isFirstFile(final File file) {
+        return file.equals(this.runSummary.getEvioFileList().first());
+    }
+
+    /**
+     * Return <code>true</code> if the file is the last one in the list for the run.
+     *
+     * @param file the EVIO <code>File</code>
+     * @return <code>true</code> if the file is the last one in the list for the run
+     */
+    private boolean isLastFile(final File file) {
+        return file.equals(this.getFiles().get(this.getFiles().size() - 1));
+    }
+
+    /**
+     * Process events using the list of EVIO processors.
+     *
+     * @param evioReader the open <code>EvioReader</code>
+     * @throws IOException if there is a file IO error
+     * @throws EvioException if there is an EVIO error
+     * @throws Exception if there is some other error
+     */
+    private void processEvents(final EvioReader evioReader) throws IOException, EvioException, Exception {
+        LOGGER.finer("running EVIO processors ...");
+        evioReader.gotoEventNumber(0);
+        int nProcessed = 0;
+        if (!this.processors.isEmpty()) {
+            EvioEvent event = null;
+            while ((event = evioReader.parseNextEvent()) != null) {
+                for (final EvioEventProcessor processor : this.processors) {
+                    processor.process(event);
+                }
+                ++nProcessed;
+                if (nProcessed % this.eventPrintInterval == 0) {
+                    LOGGER.finer("processed " + nProcessed + " EVIO events");
+                }
+            }
+            LOGGER.info("done running EVIO processors");
+        }
     }
 
     /**
@@ -313,60 +320,91 @@
      * @throws IOException if there is some kind of IO error
      * @throws Exception if there is a generic error thrown by event processing
      */
-    private void process(final File file) throws EvioException, IOException, Exception {
-        LOGGER.fine("processing " + file.getPath() + " ...");
-
-        EvioReader reader = null;
+    private void processFile(final File file) throws EvioException, IOException, Exception {
+
+        LOGGER.fine("processing file " + file.getPath() + " ...");
+
+        EvioReader evioReader = null;
         try {
-            // Open with wrapper method which will use the cached file path if necessary.
-            LOGGER.fine("opening " + file.getPath() + " for reading ...");
-            reader = EvioFileUtilities.open(file, true);
-            LOGGER.fine("done opening " + file.getPath());
+
+            // Open file for reading (flag should be true for sequential or false for mem map).
+            evioReader = EvioFileUtilities.open(file, true);
 
             // If this is the first file then get the start date.
-            if (file.equals(this.runSummary.getEvioFileList().first())) {
-                LOGGER.fine("getting run start ...");
-                final Date runStart = EvioFileUtilities.getRunStart(file);
-                LOGGER.fine("got run start " + runStart);
-                this.runSummary.setStartDate(runStart);
-            }
-
-            // Process the events using the EVIO processors.
-            LOGGER.info("running EVIO processors ...");
-            reader.gotoEventNumber(0);
-            int nProcessed = 0;
-            if (!this.processors.isEmpty()) {
-                EvioEvent event = null;
-                while ((event = reader.parseNextEvent()) != null) {
-                    for (final EvioEventProcessor processor : this.processors) {
-                        processor.process(event);
-                        ++nProcessed;
-                        if (nProcessed % this.eventPrintInterval == 0) {
-                            LOGGER.finer("processed " + nProcessed + " EVIO events");
-                        }
-                    }
-                }
-            }
-            LOGGER.info("done running EVIO processors");
-
-            // Check if END event is present if this is the last file in the run.
-            if (file.equals(this.getFiles().get(this.getFiles().size() - 1))) {
-                final boolean endOkay = this.isEndOkay(reader);
-                this.runSummary.setEndOkay(endOkay);
-                LOGGER.info("endOkay set to " + endOkay);
-
-                LOGGER.info("getting end date ...");
-                final Date endDate = EvioFileUtilities.getRunEnd(file);
-                this.runSummary.setEndDate(endDate);
-                LOGGER.info("found end date " + endDate);
+            if (this.isFirstFile(file)) {
+                LOGGER.fine("getting run start from first file " + file.getPath() + " ...");
+                this.findStartDate(evioReader);
+            }
+
+            // Go back to the first event and process the events using the list of EVIO processors.
+            this.processEvents(evioReader);
+
+            // Find end date from last file in the run.
+            if (this.isLastFile(file)) {
+                LOGGER.fine("getting run end from last file " + file.getPath() + " ...");
+                this.findEndDate(evioReader);
             }
 
         } finally {
-            if (reader != null) {
-                reader.close();
+            // Close the EvioReader for the current file.
+            if (evioReader != null) {
+                evioReader.close();
             }
         }
         LOGGER.fine("done processing " + file.getPath());
+    }
+
+    /**
+     * Process the run by executing the registered {@link org.hps.record.evio.EvioEventProcessor}s extracting the start
+     * and end dates.
+     * <p>
+     * This method will also activate file caching, if enabled by the {@link #useFileCache} option.
+     *
+     * @throws Exception if there is an error processing a file
+     */
+    void processRun() throws Exception {
+
+        LOGGER.info("processing run " + this.runSummary.getRun() + " ...");
+
+        // First cache all the files we will process, if necessary.
+        if (this.useFileCache) {
+            this.cacheFiles();
+        }
+
+        // Run the start of job hooks.
+        for (final EvioEventProcessor processor : this.processors) {
+            processor.startJob();
+        }
+
+        // Get the list of files, limited by max files setting.
+        final List<File> files = this.getFiles();
+
+        LOGGER.info("processing " + files.size() + " from run " + this.runSummary.getRun());
+
+        // Process all the files.
+        for (final File file : files) {
+            this.processFile(file);
+        }
+
+        // Run the end job hooks.
+        LOGGER.info("running end of job hooks on EVIO processors ...");
+        for (final EvioEventProcessor processor : this.processors) {
+            processor.endJob();
+        }
+
+        // Put scaler data from EVIO processor into run summary.
+        runSummary.setScalerData(this.scalersProcessor.getScalerData());
+
+        // Set the counts of event types on the run summary.
+        runSummary.setEventTypeCounts(eventCountProcessor.getEventCounts());
+
+        // Set total number of events on the run summary from the event counter.
+        runSummary.setTotalEvents(this.eventCountProcessor.getTotalEventCount());
+
+        // Set EpicsData for the run.
+        runSummary.setEpicsData(this.epicsLog.getEpicsData());
+
+        LOGGER.info("done processing run " + this.runSummary.getRun());
     }
 
     /**

Modified: java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunSummaryUpdater.java
 =============================================================================
--- java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunSummaryUpdater.java	(original)
+++ java/trunk/record-util/src/main/java/org/hps/record/evio/crawler/RunSummaryUpdater.java	Tue Aug  4 15:11:36 2015
@@ -239,11 +239,11 @@
      */
     private void insertRun() throws SQLException {
         final PreparedStatement statement = connection
-                .prepareStatement("INSERT INTO runs (run, start_date, end_date, nevents, nfiles, end_ok, created) VALUES(?, ?, ?, ?, ?, ?, NOW())");
+                .prepareStatement("INSERT INTO runs (run, start_time_utc, end_time_utc, nevents, nfiles, end_ok, created) VALUES(?, ?, ?, ?, ?, ?, NOW())");
         LOGGER.info("preparing to insert run " + run + " into runs table ..");
         statement.setInt(1, run);
-        statement.setTimestamp(2, new java.sql.Timestamp(runSummary.getStartDate().getTime()));
-        statement.setTimestamp(3, new java.sql.Timestamp(runSummary.getEndDate().getTime()));
+        statement.setLong(2, runSummary.getStartTimeUtc());
+        statement.setLong(3, runSummary.getEndTimeUtc());
         statement.setInt(4, runSummary.getTotalEvents());
         statement.setInt(5, runSummary.getEvioFileList().size());
         statement.setBoolean(6, runSummary.getEndOkay());
@@ -253,7 +253,7 @@
 
     /**
      * Insert scaler data into the database.
-     * 
+     *
      * @throws SQLException if there is a SQL query error
      */
     private void insertScalarData() throws SQLException {

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

November 2017
August 2017
July 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use