package org.jactr.tools.tracer.sinks.trace.internal; /* * default logging */ import java.io.BufferedOutputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * documents what files contain what time ranges, plus the general make up of * the contents * * @author harrison */ public class TraceIndex { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(TraceIndex.class); private DataOutputStream _outputStream; private File _outputDirectory; public TraceIndex(File outputDirectory) { _outputDirectory = outputDirectory; } public void update(File archiveFile, double[] timeWindow) { try { String archiveFileName = archiveFile.getAbsolutePath(); // strip the output directory archiveFileName = archiveFileName.substring(_outputDirectory .getAbsolutePath().toString().length()); _outputStream.writeDouble(timeWindow[0]); _outputStream.writeDouble(timeWindow[1]); _outputStream.writeUTF(archiveFileName); _outputStream.flush(); if (LOGGER.isDebugEnabled()) LOGGER.debug(String.format("wrote [%.2f, %.2f] %s", timeWindow[0], timeWindow[1], archiveFileName)); } catch (Exception e) { LOGGER.error("Could not write update to index file ", e); } } public void flush() { try { if (_outputStream != null) _outputStream.flush(); } catch (Exception e) { LOGGER.error("Failed to flush ", e); } } public void open() { try { _outputStream = new DataOutputStream( new BufferedOutputStream(new FileOutputStream(new File( _outputDirectory, "sessionData.index")), 4096)); } catch (Exception e) { LOGGER.error("Failed to open index file", e); } } public void close() { try { _outputStream.flush(); _outputStream.close(); } catch (Exception e) { LOGGER.error("Failed to close ", e); } finally { _outputStream = null; } } }