Package proj.zoie.perf.reports

Source Code of proj.zoie.perf.reports.ZoieServerLogProcessor$ZoieServerData

package proj.zoie.perf.reports;

import java.awt.image.BufferedImage;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.OutputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.deepak.util.FilePlotData;
import org.deepak.util.GenericStatisticsUtil;
import org.deepak.util.PlotGraphs;
import org.jfree.chart.ChartUtilities;

public class ZoieServerLogProcessor
{
  private static String     patternString =
                                              "^(\\d{4}\\/\\d{2}\\/\\d{2} \\d{1,2}:\\d{1,2}:\\d{1,2}.\\d{3}) INFO \\[MonitoredZoieService\\] .*\\[numSearchResults=(\\d+)\\].*in (\\d+)ms";

  private static Pattern    _pattern      = Pattern.compile(patternString);
  private static DateFormat _tdf          =
                                              new SimpleDateFormat("MMM d, yyyy h:mm:ss aaa");
  private static DateFormat _df           =
                                              new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS");
  private static DateFormat _dfPlot       = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
  private Map               _map          = new HashMap();
  private Map               _avgMap       = new HashMap();
  private FilePlotData      _fpd          = null;
  private FilePlotData      _avgFpd       = null;
  public String             _fileName     = null;
  private static int        _imageHeight  = 300;
  private static int        _imageWidth   = 500;
  private boolean           _isProcessed  = false;

  public ZoieServerLogProcessor(String fileName)
  {
    _fileName = fileName;
    process();
  }

  public void process()
  {
    if (_isProcessed)
    {
      return;
    }
    try
    {
      _isProcessed = true;
      BufferedReader br = new BufferedReader(new FileReader(new File(_fileName)));
      String line = null;
      int cnt = 0;
      while ((line = br.readLine()) != null)
      {
        Matcher matcher = _pattern.matcher(line);
        if (matcher.matches())
        {
          cnt++;
          String dtStr = matcher.group(1);
          Date date = _df.parse(dtStr);
          Date date1 = _dfPlot.parse(dtStr);
          long resultcnt = Long.parseLong(matcher.group(2).trim());
          long tmtkn = Long.parseLong(matcher.group(3).trim());
          if (_avgMap.containsKey(date1))
          {
            ZoieServerData tmp = (ZoieServerData) _avgMap.get(date1);
            tmp.add(resultcnt, tmtkn);
          }
          else
          {
            _avgMap.put(date1, new ZoieServerData(date, resultcnt, tmtkn));
          }

          ZoieServerData zid = new ZoieServerData(date, resultcnt, tmtkn);
          _map.put(new Integer(cnt), zid);

        }
      }

      _map = new TreeMap(_map);
      _avgMap = new TreeMap(_avgMap);

      br.close();

      Iterator itr = _map.keySet().iterator();

      StringBuffer plotStr = new StringBuffer("");
      if (itr.hasNext())
      {
        while (itr.hasNext())
        {
          plotStr.append(((ZoieServerData) _map.get(itr.next())).toString() + "\n");
        }
        _fpd = new FilePlotData(plotStr.toString(), true);

      }

      Iterator itr1 = _avgMap.keySet().iterator();

      StringBuffer plotStr1 = new StringBuffer("");
      if (itr1.hasNext())
      {
        while (itr1.hasNext())
        {
          plotStr1.append(((ZoieServerData) _avgMap.get(itr1.next())).averagedString()
              + "\n");
        }
        _avgFpd = new FilePlotData(plotStr1.toString(), true);

      }

    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }

  public static String getTableHtmlForGraphs(ZoieServerLogProcessor zp,
                                             String outputDir,
                                             String subFolderForOutput,
                                             String seriesDescription,
                                             int imgWidth,
                                             int imgHeight,
                                             boolean useTimeStamp,
                                             boolean useAbsFilePath,
                                             String alignment,
                                             int numGraphsPerRow) throws Exception
  {
    int number = 2;
    if (numGraphsPerRow > 0)
    {
      number = numGraphsPerRow;
    }
    if (!zp._isProcessed)
    {
      zp.process();
    }
    if (zp._avgFpd == null)
    {
      return "";
    }
    String subFolder = "";
    if ((subFolderForOutput != null) && (!"".equals(subFolderForOutput.trim())))
    {
      subFolder = subFolder + File.separator;
    }
    int imageWidth = imgWidth;
    int imageHeight = imgHeight;

    if ((imageWidth <= 0) || (imageHeight <= 0))
    {
      imageHeight = _imageHeight;
      imageWidth = _imageWidth;
    }

    Map<Integer, String> inMap = new HashMap<Integer, String>();
    inMap.put(new Integer(2), "Search Time (ms)");
    inMap.put(new Integer(3), "Number Of Results");

    inMap = new TreeMap<Integer, String>(inMap);
    Iterator<Integer> itr = inMap.keySet().iterator();
    int cnt = 2;
    List list = new ArrayList();

    while (itr.hasNext())
    {
      Integer key = itr.next();
      String yTitle = (String) inMap.get(key);
      int indexVal = key.intValue();
      String chartTitle = yTitle + " Vs. Time";
      BufferedImage image =
          PlotGraphs.createXYTimeImage(zp._avgFpd,
                                       1,
                                       new int[] { indexVal },
                                       chartTitle,
                                       "Time",
                                       yTitle,
                                       new String[] { seriesDescription },
                                       _dfPlot,
                                       imageWidth,
                                       imageHeight);
      String tmpAdd = "";
      if (useTimeStamp)
      {
        tmpAdd = "_" + ZoieHtmlCreator.getTimeStamp();
      }

      String fileName =
          outputDir + File.separator + subFolder + "ZoieServerImage_" + (cnt - 1)
              + tmpAdd + ".png";
      File pngFile = new File(fileName);
      if (useAbsFilePath)
      {
        list.add(pngFile.getAbsolutePath());
      }
      else
      {
        list.add(subFolder + pngFile.getName());
      }
      OutputStream ost = new BufferedOutputStream(new FileOutputStream(pngFile, false));
      ChartUtilities.writeBufferedImageAsPNG(ost, image);
      System.out.println("Image " + (cnt - 1) + " : " + fileName);
      cnt++;
    }

    String[] graphs = new String[list.size()];
    Iterator itr1 = list.iterator();
    for (int i = 0; i < graphs.length; i++)
    {
      graphs[i] = (String) itr1.next();
    }
    String tab =
        ZoieHtmlCreator.getSimpleTableHtmlStringForGraphs(graphs, alignment, number);
    return tab;
  }

  public static String getTableHtml(ZoieServerLogProcessor zp) throws Exception
  {
    if (zp._fpd == null)
    {
      zp.process();
    }
    String[] scenarios =
        new String[] { "Search Time (ms)", "Number Of Results Returned" };
    String itemKey = "Item";
    GenericStatisticsUtil[] utils = new GenericStatisticsUtil[2];
    utils[0] = new GenericStatisticsUtil(zp._fpd.getNonNumericNthColumn(2));
    utils[0].process();
    utils[1] = new GenericStatisticsUtil(zp._fpd.getNonNumericNthColumn(3));
    utils[1].process();

    String tab =
        ZoieHtmlCreator.getSimpleTableHtmlString(itemKey, scenarios, utils, null);
    return tab;
  }

  public static String getTableHtml(ZoieServerLogProcessor zp,
                                    boolean addGraphs,
                                    String outputDir,
                                    String subFolderForOutput,
                                    int imgWidth,
                                    int imgHeight,
                                    int numGraphsPerRow) throws Exception
  {
    if (zp._fpd == null)
    {
      zp.process();
    }
    String[] scenarios =
        new String[] { "Search Time (ms)", "Number Of Results Returned" };
    String itemKey = "Item";
    GenericStatisticsUtil[] utils = new GenericStatisticsUtil[2];
    utils[0] = new GenericStatisticsUtil(zp._fpd.getNonNumericNthColumn(2));
    utils[0].process();
    utils[1] = new GenericStatisticsUtil(zp._fpd.getNonNumericNthColumn(3));
    utils[1].process();

    String tab =
        ZoieHtmlCreator.getSimpleTableHtmlString(itemKey, scenarios, utils, null);
    if (addGraphs)
    {
      tab =
          tab
              + "<br><br>\n"
              + getTableHtmlForGraphs(zp,
                                      outputDir,
                                      subFolderForOutput,
                                      "Series",
                                      imgWidth,
                                      imgHeight,
                                      true,
                                      false,
                                      "center",
                                      numGraphsPerRow);
    }
    return tab;
  }

  public static class ZoieServerData
  {
    private long _timeTaken       = -1;
    private long _resultsReturned = -1;
    private Date _date            = null;
    private int  count            = 1;

    public ZoieServerData(Date date, long rescnt, long time)
    {
      _date = date;
      _resultsReturned = rescnt;
      _timeTaken = time;
    }

    public void add(long rescnt, long time)
    {
      _resultsReturned = _resultsReturned + rescnt;
      _timeTaken = _timeTaken + time;
      count++;
    }

    public Date getDate()
    {
      return _date;
    }

    public String averagedString()
    {
      String result =
          _dfPlot.format(_date) + "\t" + (_timeTaken / (double) count) + "\t"
              + (_resultsReturned / (double) count);
      return result;
    }

    public String toString()
    {
      String result = _df.format(_date) + "\t" + _timeTaken + "\t" + _resultsReturned;
      return result;
    }
  }

}
TOP

Related Classes of proj.zoie.perf.reports.ZoieServerLogProcessor$ZoieServerData

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.