/* * [Collect.java] * * Summary: Consolidate hit stats collected every 30 minutes. * * Copyright: (c) 2012-2017 Roedy Green, Canadian Mind Products, http://mindprod.com * * Licence: This software may be copied and used freely for any purpose but military. * http://mindprod.com/contact/nonmil.html * * Requires: JDK 1.8+ * * Created with: JetBrains IntelliJ IDEA IDE http://www.jetbrains.com/idea/ * * Version History: * 1.0 2012-01-20 */ package com.mindprod.stats; import com.mindprod.common18.Build; import com.mindprod.common18.EIO; import com.mindprod.common18.ST; import com.mindprod.csv.CSVWriter; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Date; import java.util.GregorianCalendar; import static java.lang.System.*; /** * Consolidate hit stats collected every 30 minutes. * * @author Roedy Green, Canadian Mind Products * @version 1.0 2012-01-20 * @since 2012-01-20 */ public final class Collect { ; /** * Modified Zulu format mask 2008-06-22T07:57+46.438 */ private static final SimpleDateFormat SDF = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm'+'ss" ); /** * collect individual *.cnt files into the profile.csv * * @param args not used */ public static void main( String[] args ) throws IOException { out.println( "adding" ); out.println( "file, timestamp, hits, time" ); final PrintWriter pw = EIO.getPrintWriter( new File( Build.MINDPROD_SOURCE + "/stats/profile.csv" ), 32 * 1024, EIO.UTF8 ); final CSVWriter w = new CSVWriter( pw, 0 /* minimal */, ',', '\"', '#', true /* trim */ ); final File dir = new File( "E:/snaps" ); final String[] cnts = dir.list(); for ( String cnt : cnts ) { final File cntFile = new File( dir, cnt ); // O P E N final FileReader fr = new FileReader( cntFile ); final BufferedReader br = new BufferedReader( fr, 16 ); // R E A D final String line = br.readLine(); final int hits = Integer.parseInt( line ); final String isoDate = cnt.substring( 0, 10 ); final int year = Integer.parseInt( isoDate.substring( 0, 4 ) ); final int month = Integer.parseInt( isoDate.substring( 5, 7 ) ); final int day = Integer.parseInt( isoDate.substring( 8, 10 ) ); int agg = Integer.parseInt( ST.chopTrailingString( cnt.substring( 11 ), ".cnt" ) ); final int sec = agg % 60; agg = agg / 60; final int min = agg % 60; agg = agg / 60; final int hrs = agg % 24; agg = agg / 24; assert agg == 0 : "time greater than 24 hours"; // local time to UTC GregorianCalendar when = new GregorianCalendar( year, month - 1, day, hrs, min, sec ); final Date datestamp = when.getTime(); final long timestamp = datestamp.getTime(); // tack this reading onto the tail end. w.put( isoDate ); w.put( timestamp ); w.put( hits ); w.nl(); out.println( cnt + ", " + timestamp + ", " + hits + ", " + SDF.format( datestamp ) ); // C L O S E br.close(); cntFile.delete(); } w.close(); } }