You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chukwa.apache.org by as...@apache.org on 2009/03/11 23:39:32 UTC

svn commit: r752666 [11/16] - in /hadoop/chukwa/trunk: ./ src/java/org/apache/hadoop/chukwa/ src/java/org/apache/hadoop/chukwa/conf/ src/java/org/apache/hadoop/chukwa/database/ src/java/org/apache/hadoop/chukwa/datacollection/ src/java/org/apache/hadoo...

Modified: hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/extraction/engine/datasource/record/ChukwaRecordDataSource.java
URL: http://svn.apache.org/viewvc/hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/extraction/engine/datasource/record/ChukwaRecordDataSource.java?rev=752666&r1=752665&r2=752666&view=diff
==============================================================================
--- hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/extraction/engine/datasource/record/ChukwaRecordDataSource.java (original)
+++ hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/extraction/engine/datasource/record/ChukwaRecordDataSource.java Wed Mar 11 22:39:26 2009
@@ -1,5 +1,6 @@
 package org.apache.hadoop.chukwa.extraction.engine.datasource.record;
 
+
 import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -9,7 +10,6 @@
 import java.util.LinkedList;
 import java.util.List;
 import java.util.TreeMap;
-
 import org.apache.hadoop.chukwa.conf.ChukwaConfiguration;
 import org.apache.hadoop.chukwa.extraction.engine.ChukwaRecord;
 import org.apache.hadoop.chukwa.extraction.engine.ChukwaRecordKey;
@@ -25,496 +25,450 @@
 import org.apache.hadoop.io.SequenceFile;
 import org.apache.log4j.Logger;
 
-public class ChukwaRecordDataSource implements DataSource
-{
-	//TODO need some cleanup after 1st production
-	// First implementation to get it working with the new directory structure
-	
-	static Logger log = Logger.getLogger(ChukwaRecordDataSource.class);
-	
-	private static final int dayFolder = 100;
-	private static final int hourFolder = 200;
-	private static final int rawFolder = 300;
-	
-	static final String[] raws = {"0","5","10","15","20","25","30","35","40","45","50","55"};
-	
-	private static FileSystem fs = null;
-	private static ChukwaConfiguration conf = null;
-	
-	private static String rootDsFolder = null;
-	private static DataConfig dataConfig = null;
-	
-	static
-	{
-		dataConfig = new DataConfig();
-		rootDsFolder = dataConfig.get("chukwa.engine.dsDirectory.rootFolder");
-		conf = new ChukwaConfiguration();
-		try
-		{
-			fs = FileSystem.get(conf);
-		} catch (IOException e)
-		{
-			e.printStackTrace();
-		}
-	}
-	
-	@Override
-	public boolean isThreadSafe()
-	{
-		return true;
-	}
-
-
-	@Override
-	public SearchResult search(SearchResult result, String cluster,
-			String dataSource, long t0, long t1, String filter,Token token)
-			throws DataSourceException
-	{
-		String filePath = rootDsFolder + "/" + cluster + "/";
-
-		log.debug("filePath [" + filePath + "]");	
-		Calendar calendar = Calendar.getInstance();
-		calendar.setTimeInMillis(t0);
-		SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyyMMdd");
-		int maxCount = 200;
-		
-		List<Record> records = new ArrayList<Record>();
-
-		ChukwaDSInternalResult res =  new ChukwaDSInternalResult();
-		
-		if (token != null)
-		{
-			// token.key = day + "|" + hour + "|" + raw + "|" + spill + "|" + res.currentTs + "|"+ res.position + "|"+ res.fileName;
-			try
-			{
-				String[] vars = token.key.split("\\|");
-				res.day = vars[0];
-				res.hour = Integer.parseInt(vars[1]);
-				res.rawIndex = Integer.parseInt(vars[2]);
-				res.spill = Integer.parseInt(vars[3]);
-				res.currentTs = Long.parseLong(vars[4]);
-				res.position = Long.parseLong(vars[5]);
-				res.fileName = vars[5];
-				log.info("Token is not null! :" + token.key);
-			}
-			catch(Exception e)
-			{
-				log.error("Incalid Key: [" + token.key + "] exception: ", e);
-			}
-		}
-		else
-		{
-			log.debug("Token is  null!" );
-		}
-		
-		try
-		{
-			do
-			{
-				log.debug("start Date [" + calendar.getTime() + "]");
-				String workingDay = sdf.format(calendar.getTime());
-				int workingHour = calendar.get(Calendar.HOUR_OF_DAY);
-				int startRawIndex = 0;
-				if (token !=null)
-				{
-					workingDay = res.day ;
-					workingHour = res.hour;
-					startRawIndex = res.rawIndex;
-				}
-				else
-				{
-					token = new Token();
-				}
-				
-				log.debug("workingDay " + workingDay);
-				log.debug("workingHour " + workingHour);
-				
-				if (exist(dayFolder,filePath,dataSource,workingDay,null,null))
-				{
-					// Extract Data for Day
-					if (containsRotateFlag(dayFolder,filePath,dataSource,workingDay,null))
-					{
-						// read data from day
-						// SystemMetrics/20080922/SystemMetrics_20080922.1.evt
-						log.debug("fs.exists(workingDayRotatePath) ");
-						extractRecords(res,ChukwaRecordDataSource.dayFolder,filePath,dataSource,workingDay, null, -1,
-								 token, records, maxCount, t0, t1, filter);
-						maxCount = maxCount - records.size();
-						if ( (maxCount <= 0) || (res.currentTs > t1))
-						 { break; }
-						
-					} // End process Day File
-					else // check for hours
-					{
-						log.debug("check for hours");
-						for (int hour = 0; hour<24;hour ++)
-						{
-							if ( workingDay == res.day && hour<workingHour)
-							{
-								continue;
-							}
-							log.debug(" Hour?  -->" + filePath + dataSource + "/"+ workingDay+ "/" + hour);
-							if (exist(dayFolder,filePath,dataSource,workingDay,""+hour,null))
-							{
-								if (containsRotateFlag(dayFolder,filePath,dataSource,workingDay,""+hour))
-								{
-									// read data from Hour
-									// SystemMetrics/20080922/12/SystemMetrics_20080922_12.1.evt
-									extractRecords(res,ChukwaRecordDataSource.hourFolder,filePath,dataSource,workingDay, ""+hour, -1,
-											 token, records, maxCount, t0, t1, filter);
-								}
-								else // check for raw
-								{
-									log.debug("Working on Raw");
-									
-									for(int rawIndex=startRawIndex;rawIndex<12;rawIndex++)
-									{
-										// read data from Raw
-										// SystemMetrics/20080922/0/25/SystemMetrics_20080922_0_25.1.evt
-										if (exist(dayFolder,filePath,dataSource,workingDay,""+hour,raws[rawIndex]))
-										{
-											extractRecords(res,ChukwaRecordDataSource.rawFolder,filePath,dataSource,workingDay, ""+hour, rawIndex,
-													 token, records, maxCount, t0, t1, filter);
-											maxCount = maxCount - records.size();
-											if ( (maxCount <= 0) || (res.currentTs > t1))
-											 { break; }
-										}
-										else
-										{
-											log.debug("<<<<<<<<<Working on Raw Not exist--> "
-													+ filePath + dataSource + "/" + workingDay+ "/" + workingHour + "/" + raws[rawIndex] );
-										}
-										res.spill = 1;
-									}
-								}
-							} // End if (fs.exists(new Path(filePath + workingDay+ "/" + hour)))
-							 
-							maxCount = maxCount - records.size();
-							if ( (maxCount <= 0) || (res.currentTs > t1))
-							 { break; }
-
-						} // End process all Hourly/raw files
-					}
-				}	
-				
-				maxCount = maxCount - records.size();
-				if ( (maxCount <= 0) || (res.currentTs > t1))
-				 { break; }
-			
-				// move to the next day
-				calendar.add(Calendar.DAY_OF_MONTH, +1);
-				calendar.set(Calendar.HOUR_OF_DAY, 0);
-				calendar.set(Calendar.MINUTE, 0);
-				calendar.set(Calendar.SECOND, 0);
-				
-			}
-			while (calendar.getTimeInMillis() < t1); 
-			
-		}
-		catch(Exception e)
-		{
-			e.printStackTrace();
-			throw new DataSourceException(e);
-		}
-	
-		TreeMap<Long, List<Record>> recordsInResult = result.getRecords();
-		for (Record record : records)
-		{
-			long timestamp = record.getTime();
-			if (recordsInResult.containsKey(timestamp))
-			   {
-				recordsInResult.get(timestamp).add(record);
-			   }
-			   else
-			   {
-				   List<Record> list = new LinkedList<Record>();
-				   list.add(record);
-				   recordsInResult.put(timestamp, list);
-			   }   
-		}
-		result.setToken(token);
-		return result;
-
-	}
-
-	public void extractRecords(ChukwaDSInternalResult res,int directoryType,String rootFolder,String dataSource,String day,String hour,int rawIndex,
-								Token token,List<Record> records,int maxRows,long t0,long t1,String filter) throws Exception
-	{
-		// for each spill file
-		// extract records
-		int spill = res.spill;
-		
-		boolean workdone = false;
-		do
-		{
-			String fileName = buildFileName(directoryType,rootFolder,dataSource,spill,day,hour,rawIndex);
-			log.debug("extractRecords : " + fileName);
-			
-			if (fs.exists(new Path(fileName)))
-			{
-				 readData(res,token,fileName,maxRows,t0,t1,filter);
-				 res.spill = spill;
-				 List<Record> localRecords = res.records;
-				log.debug("localRecords size : " + localRecords.size());
-				maxRows = maxRows - localRecords.size();
-				if (maxRows <= 0)
-				{
-					workdone = true;
-				}
-				records.addAll(localRecords);
-				log.debug("AFTER fileName  [" +fileName + "] count=" + localRecords.size() + " maxCount=" + maxRows);
-				spill ++;
-			}
-			else
-			{
-				// no more spill
-				workdone = true;
-			}
-		}
-		while(!workdone);
-		token.key = day + "|" + hour + "|" + rawIndex + "|" + spill + "|" + res.currentTs + "|"+ res.position + "|" + res.fileName;
-	}
-	
-	
-	public  void readData(ChukwaDSInternalResult res,Token token,String fileName,int maxRows,long t0, long t1,String filter) throws
-			Exception
-	{
-		List<Record> records = new LinkedList<Record>();
-		res.records = records;	
-		SequenceFile.Reader r= null;
-		if (filter != null)
-			{ filter = filter.toLowerCase();}
-		
-		try
-		{
-			
-			if (!fs.exists(new Path(fileName)))
-			{
-				log.debug("fileName not there!");
-				return;
-			}
-			log.debug("Parser Open [" +fileName + "]");
-			
-			long timestamp = 0;
-			int listSize = 0;
-			ChukwaRecordKey key = new ChukwaRecordKey();
-		    ChukwaRecord record = new ChukwaRecord();
-		    
-			r= new SequenceFile.Reader(fs, new Path(fileName), conf);
-			
-			log.debug("readData Open2 [" +fileName + "]");
-			if ( (fileName.equals(res.fileName)) && (res.position != -1))
-			{
-				r.seek(res.position);
-			}
-			res.fileName = 	fileName;
-			
-			while(r.next(key, record))
-			{	
-				if (record != null)
-				{
-					res.position = r.getPosition();
-					
-					timestamp = record.getTime();
-					res.currentTs = timestamp;
-					log.debug("\nSearch for startDate: " + new Date(t0) + " is :" + new Date(timestamp));
-					
-					if (timestamp < t0) 
-					{
-						 //log.debug("Line not in range. Skipping: " +record);
-						 continue;
-					} 
-					else if (timestamp < t1) 
-					{
-						log.debug("In Range: " + record.toString());
-						boolean valid = false;
-						
-						 if ( (filter == null || filter.equals("") ))
-						 {
-							 valid = true;
-						 }
-						 else if ( isValid(record,filter))
-						 {
-							 valid = true;
-						 }
-						 
-						 if (valid)
-						 {
-							records.add(record);
-							record = new ChukwaRecord();
-							listSize = records.size();
-							if (listSize >= maxRows)
-							{
-								// maxRow so stop here
-								//Update token
-								token.key = key.getKey();
-								token.hasMore = true;
-								break;
-							}
-						 }
-						else 
-						{
-							log.debug("In Range ==================>>>>>>>>> OUT Regex: " + record);
-						}
-					}
-					else
-					{
-						 log.debug("Line out of range. Stopping now: " +record);
-						 // Update Token
-						 token.key = key.getKey();
-						 token.hasMore = false;
-						 break;
-					}
-				}
-			}
-			
-		}
-		catch(Exception e)
-		{
-			e.printStackTrace();
-		}
-		finally
-		{
-			try
-			{
-				r.close();
-			}
-			catch(Exception e){}
-		}
-	}
-	
-	public boolean containsRotateFlag(int directoryType,String rootFolder,String dataSource,String workingDay,String workingHour) throws Exception
-	{
-		boolean contains = false;
-		switch(directoryType)
-		{
-			case	ChukwaRecordDataSource.dayFolder:
-				//	SystemMetrics/20080922/rotateDone	
-				contains = fs.exists(new Path( rootFolder + dataSource + "/" + workingDay+"/rotateDone"));
-			break;
-			
-			case	ChukwaRecordDataSource.hourFolder:
-				// SystemMetrics/20080922/12/rotateDone
-				contains =  fs.exists(new Path( rootFolder + dataSource + "/" + workingDay+ "/" + workingHour +"/rotateDone"));
-			break;
-			
-		}
-		return contains;
-	}
-	
-	public boolean exist(int directoryType,String rootFolder,String dataSource,String workingDay,String workingHour,String raw) throws Exception
-	{
-		boolean contains = false;
-		switch(directoryType)
-		{
-			case	ChukwaRecordDataSource.dayFolder:
-				//	SystemMetrics/20080922/rotateDone	
-				contains = fs.exists(new Path( rootFolder + dataSource + "/" + workingDay));
-			break;
-			
-			case	ChukwaRecordDataSource.hourFolder:
-				// SystemMetrics/20080922/12/rotateDone
-				contains =  fs.exists(new Path( rootFolder + dataSource + "/" + workingDay+ "/" + workingHour ));
-			break;
-			case	ChukwaRecordDataSource.rawFolder:
-				// SystemMetrics/20080922/12/rotateDone
-				contains =  fs.exists(new Path( rootFolder + dataSource + "/" + workingDay+ "/" + workingHour + "/" + raw));
-			break;
-			
-		}
-		return contains;
-	}
-	
-	
-	protected boolean isValid(ChukwaRecord record, String filter)
-	{
-		String[] fields = record.getFields();
-		for(String field: fields)
-		{
-			if ( record.getValue(field).toLowerCase().indexOf(filter) >= 0)
-			{
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	public String buildFileName(int directoryType,String rootFolder,String dataSource,int spill,String day,String hour,int rawIndex)
-	{
-		String fileName = null;
-		// TODO use StringBuilder
-		// TODO revisit the way we're building fileName
-		
-		switch(directoryType)
-		{
-			case	ChukwaRecordDataSource.dayFolder:
-				//	SystemMetrics/20080922/SystemMetrics_20080922.1.evt	
-				fileName = rootFolder + "/" + dataSource + "/" + day + "/" 
-					+ dataSource + "_" +  day + "." + spill + ".evt";
-			break;
-			
-			case	ChukwaRecordDataSource.hourFolder:
-				// SystemMetrics/20080922/12/SystemMetrics_20080922_12.1.evt
-				fileName = rootFolder + "/" + dataSource + "/" + day + "/" + hour + "/" 
-					+ dataSource + "_" +  day + "_" + hour + "." + spill + ".evt";
-			break;
-			
-			case	ChukwaRecordDataSource.rawFolder:
-				// SystemMetrics/20080922/0/25/SystemMetrics_20080922_0_25.1.evt	
-				fileName = rootFolder + "/" + dataSource + "/" + day + "/" + hour + "/"  + raws[rawIndex] + "/"
-					+ dataSource + "_" +  day + "_" + hour + "_" + raws[rawIndex] + "." + spill + ".evt";
-			break;
-		}
-		log.debug("buildFileName :" + fileName);
-		return fileName;
-	}
-	
-	public static void main(String[] args) throws DataSourceException
-	{
-		ChukwaRecordDataSource ds = new ChukwaRecordDataSource();
-		SearchResult result = new ChukwaSearchResult();
-		result.setRecords( new TreeMap<Long,List<Record>>());
-		String cluster = args[0];
-		String dataSource = args[1];
-		long t0 = Long.parseLong(args[2]);
-		long t1 = Long.parseLong(args[3]);
-		String filter = null;
-		Token token = null;
-		
-		if (args.length >= 5 && !args[4].equalsIgnoreCase("null"))
-		{
-			filter = args[4];
-		}
-		if (args.length == 6)
-		{
-			token = new Token();
-			token.key = args[5];
-			System.out.println("token :" + token.key);
-		}
-		
-		System.out.println("cluster :" + cluster);
-		System.out.println("dataSource :" + dataSource);
-		System.out.println("t0 :" + t0);
-		System.out.println("t1 :" + t1);
-		System.out.println("filter :" +filter );
-		
-		
-		ds.search(result, cluster, dataSource, t0, t1, filter,token);
-		TreeMap<Long, List<Record>> records = result.getRecords();
-		Iterator<Long> it = records.keySet().iterator();
-		
-		while(it.hasNext())
-		{
-			long ts = it.next();
-			System.out.println("\n\nTimestamp: " + new Date(ts));
-			List<Record> list = records.get(ts);
-			for (int i=0;i<list.size();i++)
-			{
-				System.out.println(list.get(i));
-			}
-		}
-		
-		if (result.getToken() != null)
-		 { System.out.println("Key -->" + result.getToken().key);}
-	}
+public class ChukwaRecordDataSource implements DataSource {
+  // TODO need some cleanup after 1st production
+  // First implementation to get it working with the new directory structure
+
+  static Logger log = Logger.getLogger(ChukwaRecordDataSource.class);
+
+  private static final int dayFolder = 100;
+  private static final int hourFolder = 200;
+  private static final int rawFolder = 300;
+
+  static final String[] raws = { "0", "5", "10", "15", "20", "25", "30", "35",
+      "40", "45", "50", "55" };
+
+  private static FileSystem fs = null;
+  private static ChukwaConfiguration conf = null;
+
+  private static String rootDsFolder = null;
+  private static DataConfig dataConfig = null;
+
+  static {
+    dataConfig = new DataConfig();
+    rootDsFolder = dataConfig.get("chukwa.engine.dsDirectory.rootFolder");
+    conf = new ChukwaConfiguration();
+    try {
+      fs = FileSystem.get(conf);
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+  }
+
+  @Override
+  public boolean isThreadSafe() {
+    return true;
+  }
+
+  @Override
+  public SearchResult search(SearchResult result, String cluster,
+      String dataSource, long t0, long t1, String filter, Token token)
+      throws DataSourceException {
+    String filePath = rootDsFolder + "/" + cluster + "/";
+
+    log.debug("filePath [" + filePath + "]");
+    Calendar calendar = Calendar.getInstance();
+    calendar.setTimeInMillis(t0);
+    SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyyMMdd");
+    int maxCount = 200;
+
+    List<Record> records = new ArrayList<Record>();
+
+    ChukwaDSInternalResult res = new ChukwaDSInternalResult();
+
+    if (token != null) {
+      // token.key = day + "|" + hour + "|" + raw + "|" + spill + "|" +
+      // res.currentTs + "|"+ res.position + "|"+ res.fileName;
+      try {
+        String[] vars = token.key.split("\\|");
+        res.day = vars[0];
+        res.hour = Integer.parseInt(vars[1]);
+        res.rawIndex = Integer.parseInt(vars[2]);
+        res.spill = Integer.parseInt(vars[3]);
+        res.currentTs = Long.parseLong(vars[4]);
+        res.position = Long.parseLong(vars[5]);
+        res.fileName = vars[5];
+        log.info("Token is not null! :" + token.key);
+      } catch (Exception e) {
+        log.error("Incalid Key: [" + token.key + "] exception: ", e);
+      }
+    } else {
+      log.debug("Token is  null!");
+    }
+
+    try {
+      do {
+        log.debug("start Date [" + calendar.getTime() + "]");
+        String workingDay = sdf.format(calendar.getTime());
+        int workingHour = calendar.get(Calendar.HOUR_OF_DAY);
+        int startRawIndex = 0;
+        if (token != null) {
+          workingDay = res.day;
+          workingHour = res.hour;
+          startRawIndex = res.rawIndex;
+        } else {
+          token = new Token();
+        }
+
+        log.debug("workingDay " + workingDay);
+        log.debug("workingHour " + workingHour);
+
+        if (exist(dayFolder, filePath, dataSource, workingDay, null, null)) {
+          // Extract Data for Day
+          if (containsRotateFlag(dayFolder, filePath, dataSource, workingDay,
+              null)) {
+            // read data from day
+            // SystemMetrics/20080922/SystemMetrics_20080922.1.evt
+            log.debug("fs.exists(workingDayRotatePath) ");
+            extractRecords(res, ChukwaRecordDataSource.dayFolder, filePath,
+                dataSource, workingDay, null, -1, token, records, maxCount, t0,
+                t1, filter);
+            maxCount = maxCount - records.size();
+            if ((maxCount <= 0) || (res.currentTs > t1)) {
+              break;
+            }
+
+          } // End process Day File
+          else // check for hours
+          {
+            log.debug("check for hours");
+            for (int hour = 0; hour < 24; hour++) {
+              if (workingDay == res.day && hour < workingHour) {
+                continue;
+              }
+              log.debug(" Hour?  -->" + filePath + dataSource + "/"
+                  + workingDay + "/" + hour);
+              if (exist(dayFolder, filePath, dataSource, workingDay, "" + hour,
+                  null)) {
+                if (containsRotateFlag(dayFolder, filePath, dataSource,
+                    workingDay, "" + hour)) {
+                  // read data from Hour
+                  // SystemMetrics/20080922/12/SystemMetrics_20080922_12.1.evt
+                  extractRecords(res, ChukwaRecordDataSource.hourFolder,
+                      filePath, dataSource, workingDay, "" + hour, -1, token,
+                      records, maxCount, t0, t1, filter);
+                } else // check for raw
+                {
+                  log.debug("Working on Raw");
+
+                  for (int rawIndex = startRawIndex; rawIndex < 12; rawIndex++) {
+                    // read data from Raw
+                    //SystemMetrics/20080922/0/25/SystemMetrics_20080922_0_25.1.
+                    // evt
+                    if (exist(dayFolder, filePath, dataSource, workingDay, ""
+                        + hour, raws[rawIndex])) {
+                      extractRecords(res, ChukwaRecordDataSource.rawFolder,
+                          filePath, dataSource, workingDay, "" + hour,
+                          rawIndex, token, records, maxCount, t0, t1, filter);
+                      maxCount = maxCount - records.size();
+                      if ((maxCount <= 0) || (res.currentTs > t1)) {
+                        break;
+                      }
+                    } else {
+                      log.debug("<<<<<<<<<Working on Raw Not exist--> "
+                          + filePath + dataSource + "/" + workingDay + "/"
+                          + workingHour + "/" + raws[rawIndex]);
+                    }
+                    res.spill = 1;
+                  }
+                }
+              } // End if (fs.exists(new Path(filePath + workingDay+ "/" +
+                // hour)))
+
+              maxCount = maxCount - records.size();
+              if ((maxCount <= 0) || (res.currentTs > t1)) {
+                break;
+              }
+
+            } // End process all Hourly/raw files
+          }
+        }
+
+        maxCount = maxCount - records.size();
+        if ((maxCount <= 0) || (res.currentTs > t1)) {
+          break;
+        }
+
+        // move to the next day
+        calendar.add(Calendar.DAY_OF_MONTH, +1);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+
+      } while (calendar.getTimeInMillis() < t1);
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw new DataSourceException(e);
+    }
+
+    TreeMap<Long, List<Record>> recordsInResult = result.getRecords();
+    for (Record record : records) {
+      long timestamp = record.getTime();
+      if (recordsInResult.containsKey(timestamp)) {
+        recordsInResult.get(timestamp).add(record);
+      } else {
+        List<Record> list = new LinkedList<Record>();
+        list.add(record);
+        recordsInResult.put(timestamp, list);
+      }
+    }
+    result.setToken(token);
+    return result;
+
+  }
+
+  public void extractRecords(ChukwaDSInternalResult res, int directoryType,
+      String rootFolder, String dataSource, String day, String hour,
+      int rawIndex, Token token, List<Record> records, int maxRows, long t0,
+      long t1, String filter) throws Exception {
+    // for each spill file
+    // extract records
+    int spill = res.spill;
+
+    boolean workdone = false;
+    do {
+      String fileName = buildFileName(directoryType, rootFolder, dataSource,
+          spill, day, hour, rawIndex);
+      log.debug("extractRecords : " + fileName);
+
+      if (fs.exists(new Path(fileName))) {
+        readData(res, token, fileName, maxRows, t0, t1, filter);
+        res.spill = spill;
+        List<Record> localRecords = res.records;
+        log.debug("localRecords size : " + localRecords.size());
+        maxRows = maxRows - localRecords.size();
+        if (maxRows <= 0) {
+          workdone = true;
+        }
+        records.addAll(localRecords);
+        log.debug("AFTER fileName  [" + fileName + "] count="
+            + localRecords.size() + " maxCount=" + maxRows);
+        spill++;
+      } else {
+        // no more spill
+        workdone = true;
+      }
+    } while (!workdone);
+    token.key = day + "|" + hour + "|" + rawIndex + "|" + spill + "|"
+        + res.currentTs + "|" + res.position + "|" + res.fileName;
+  }
+
+  public void readData(ChukwaDSInternalResult res, Token token,
+      String fileName, int maxRows, long t0, long t1, String filter)
+      throws Exception {
+    List<Record> records = new LinkedList<Record>();
+    res.records = records;
+    SequenceFile.Reader r = null;
+    if (filter != null) {
+      filter = filter.toLowerCase();
+    }
+
+    try {
+
+      if (!fs.exists(new Path(fileName))) {
+        log.debug("fileName not there!");
+        return;
+      }
+      log.debug("Parser Open [" + fileName + "]");
+
+      long timestamp = 0;
+      int listSize = 0;
+      ChukwaRecordKey key = new ChukwaRecordKey();
+      ChukwaRecord record = new ChukwaRecord();
+
+      r = new SequenceFile.Reader(fs, new Path(fileName), conf);
+
+      log.debug("readData Open2 [" + fileName + "]");
+      if ((fileName.equals(res.fileName)) && (res.position != -1)) {
+        r.seek(res.position);
+      }
+      res.fileName = fileName;
+
+      while (r.next(key, record)) {
+        if (record != null) {
+          res.position = r.getPosition();
+
+          timestamp = record.getTime();
+          res.currentTs = timestamp;
+          log.debug("\nSearch for startDate: " + new Date(t0) + " is :"
+              + new Date(timestamp));
+
+          if (timestamp < t0) {
+            // log.debug("Line not in range. Skipping: " +record);
+            continue;
+          } else if (timestamp < t1) {
+            log.debug("In Range: " + record.toString());
+            boolean valid = false;
+
+            if ((filter == null || filter.equals(""))) {
+              valid = true;
+            } else if (isValid(record, filter)) {
+              valid = true;
+            }
+
+            if (valid) {
+              records.add(record);
+              record = new ChukwaRecord();
+              listSize = records.size();
+              if (listSize >= maxRows) {
+                // maxRow so stop here
+                // Update token
+                token.key = key.getKey();
+                token.hasMore = true;
+                break;
+              }
+            } else {
+              log.debug("In Range ==================>>>>>>>>> OUT Regex: "
+                  + record);
+            }
+          } else {
+            log.debug("Line out of range. Stopping now: " + record);
+            // Update Token
+            token.key = key.getKey();
+            token.hasMore = false;
+            break;
+          }
+        }
+      }
+
+    } catch (Exception e) {
+      e.printStackTrace();
+    } finally {
+      try {
+        r.close();
+      } catch (Exception e) {
+      }
+    }
+  }
+
+  public boolean containsRotateFlag(int directoryType, String rootFolder,
+      String dataSource, String workingDay, String workingHour)
+      throws Exception {
+    boolean contains = false;
+    switch (directoryType) {
+    case ChukwaRecordDataSource.dayFolder:
+      // SystemMetrics/20080922/rotateDone
+      contains = fs.exists(new Path(rootFolder + dataSource + "/" + workingDay
+          + "/rotateDone"));
+      break;
+
+    case ChukwaRecordDataSource.hourFolder:
+      // SystemMetrics/20080922/12/rotateDone
+      contains = fs.exists(new Path(rootFolder + dataSource + "/" + workingDay
+          + "/" + workingHour + "/rotateDone"));
+      break;
+
+    }
+    return contains;
+  }
+
+  public boolean exist(int directoryType, String rootFolder, String dataSource,
+      String workingDay, String workingHour, String raw) throws Exception {
+    boolean contains = false;
+    switch (directoryType) {
+    case ChukwaRecordDataSource.dayFolder:
+      // SystemMetrics/20080922/rotateDone
+      contains = fs
+          .exists(new Path(rootFolder + dataSource + "/" + workingDay));
+      break;
+
+    case ChukwaRecordDataSource.hourFolder:
+      // SystemMetrics/20080922/12/rotateDone
+      contains = fs.exists(new Path(rootFolder + dataSource + "/" + workingDay
+          + "/" + workingHour));
+      break;
+    case ChukwaRecordDataSource.rawFolder:
+      // SystemMetrics/20080922/12/rotateDone
+      contains = fs.exists(new Path(rootFolder + dataSource + "/" + workingDay
+          + "/" + workingHour + "/" + raw));
+      break;
+
+    }
+    return contains;
+  }
+
+  protected boolean isValid(ChukwaRecord record, String filter) {
+    String[] fields = record.getFields();
+    for (String field : fields) {
+      if (record.getValue(field).toLowerCase().indexOf(filter) >= 0) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  public String buildFileName(int directoryType, String rootFolder,
+      String dataSource, int spill, String day, String hour, int rawIndex) {
+    String fileName = null;
+    // TODO use StringBuilder
+    // TODO revisit the way we're building fileName
+
+    switch (directoryType) {
+    case ChukwaRecordDataSource.dayFolder:
+      // SystemMetrics/20080922/SystemMetrics_20080922.1.evt
+      fileName = rootFolder + "/" + dataSource + "/" + day + "/" + dataSource
+          + "_" + day + "." + spill + ".evt";
+      break;
+
+    case ChukwaRecordDataSource.hourFolder:
+      // SystemMetrics/20080922/12/SystemMetrics_20080922_12.1.evt
+      fileName = rootFolder + "/" + dataSource + "/" + day + "/" + hour + "/"
+          + dataSource + "_" + day + "_" + hour + "." + spill + ".evt";
+      break;
+
+    case ChukwaRecordDataSource.rawFolder:
+      // SystemMetrics/20080922/0/25/SystemMetrics_20080922_0_25.1.evt
+      fileName = rootFolder + "/" + dataSource + "/" + day + "/" + hour + "/"
+          + raws[rawIndex] + "/" + dataSource + "_" + day + "_" + hour + "_"
+          + raws[rawIndex] + "." + spill + ".evt";
+      break;
+    }
+    log.debug("buildFileName :" + fileName);
+    return fileName;
+  }
+
+  public static void main(String[] args) throws DataSourceException {
+    ChukwaRecordDataSource ds = new ChukwaRecordDataSource();
+    SearchResult result = new ChukwaSearchResult();
+    result.setRecords(new TreeMap<Long, List<Record>>());
+    String cluster = args[0];
+    String dataSource = args[1];
+    long t0 = Long.parseLong(args[2]);
+    long t1 = Long.parseLong(args[3]);
+    String filter = null;
+    Token token = null;
+
+    if (args.length >= 5 && !args[4].equalsIgnoreCase("null")) {
+      filter = args[4];
+    }
+    if (args.length == 6) {
+      token = new Token();
+      token.key = args[5];
+      System.out.println("token :" + token.key);
+    }
+
+    System.out.println("cluster :" + cluster);
+    System.out.println("dataSource :" + dataSource);
+    System.out.println("t0 :" + t0);
+    System.out.println("t1 :" + t1);
+    System.out.println("filter :" + filter);
+
+    ds.search(result, cluster, dataSource, t0, t1, filter, token);
+    TreeMap<Long, List<Record>> records = result.getRecords();
+    Iterator<Long> it = records.keySet().iterator();
+
+    while (it.hasNext()) {
+      long ts = it.next();
+      System.out.println("\n\nTimestamp: " + new Date(ts));
+      List<Record> list = records.get(ts);
+      for (int i = 0; i < list.size(); i++) {
+        System.out.println(list.get(i));
+      }
+    }
+
+    if (result.getToken() != null) {
+      System.out.println("Key -->" + result.getToken().key);
+    }
+  }
 }

Modified: hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/extraction/engine/datasource/record/ChukwaSequenceFileParser.java
URL: http://svn.apache.org/viewvc/hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/extraction/engine/datasource/record/ChukwaSequenceFileParser.java?rev=752666&r1=752665&r2=752666&view=diff
==============================================================================
--- hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/extraction/engine/datasource/record/ChukwaSequenceFileParser.java (original)
+++ hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/extraction/engine/datasource/record/ChukwaSequenceFileParser.java Wed Mar 11 22:39:26 2009
@@ -18,11 +18,11 @@
 
 package org.apache.hadoop.chukwa.extraction.engine.datasource.record;
 
+
 import java.io.IOException;
 import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
-
 import org.apache.hadoop.chukwa.extraction.engine.ChukwaRecord;
 import org.apache.hadoop.chukwa.extraction.engine.ChukwaRecordKey;
 import org.apache.hadoop.chukwa.extraction.engine.Record;
@@ -31,130 +31,115 @@
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.io.SequenceFile;
 
-public class ChukwaSequenceFileParser
-{
+public class ChukwaSequenceFileParser {
 
-	public static  List<Record> readData(String cluster,String dataSource,int maxRows,long t1, long t0,
-			long maxOffset,String filter,String fileName,FileSystem fs,Configuration conf  ) throws
-			MalformedFileFormat
-	{
-	
-		//String source = "NameNode." + fileName;
-		List<Record> records = new LinkedList<Record>();
-		SequenceFile.Reader r= null;
-		
-		int lineCount = 0;
-		if (filter != null)
-			{ filter = filter.toLowerCase();}
-		
-		try
-		{
-			
-			if (!fs.exists(new Path(fileName)))
-			{
-				System.out.println("fileName not there!");
-				return records;
-			}
-			System.out.println("NameNodeParser Open [" +fileName + "]");
-			
-			r= new SequenceFile.Reader(fs, new Path(fileName), conf);
-			System.out.println("NameNodeParser Open2 [" +fileName + "]");
-			
-			long timestamp = 0;
-			int listSize = 0;
-
-			long offset = 0;
-			
-//			HdfsWriter.HdfsWriterKey key = new HdfsWriter.HdfsWriterKey();
-			ChukwaRecordKey key = new ChukwaRecordKey();
-		    ChukwaRecord record = new ChukwaRecord();
-		    
-			while(r.next(key, record))
-			{	
-				lineCount ++;
-				
-				System.out.println("NameNodeParser Line [" +record.getValue(Record.bodyField) + "]");	
-				
-				if (record != null)
-				{
-					timestamp = record.getTime();
-					if (timestamp < t0) 
-					{
-						 System.out.println("Line not in range. Skipping: " +record.getValue(Record.bodyField));
-						 System.out.println("Search for: " + new Date(t0) + " is :" + new Date(timestamp));
-						 continue;
-					} 
-					else if ((timestamp < t1) && (offset < maxOffset )) //JB (epochTS < maxDate)
-					{
-						
-						System.out.println("In Range: " + record.getValue(Record.bodyField));
-						boolean valid = false;
-						
-						 if ( (filter == null || filter.equals("") ))
-						 {
-							 valid = true;
-						 }
-						 else if ( isValid(record,filter))
-						 {
-							 valid = true;
-						 }
-						 
-						 if (valid)
-						 {
-							records.add(record);
-							record = new ChukwaRecord();
-							listSize = records.size();
-							if (listSize > maxRows)
-							{
-								records.remove(0);
-								System.out.println("==========>>>>>REMOVING: " + record.getValue(Record.bodyField));
-							}
-						 }
-						else 
-						{
-							System.out.println("In Range ==================>>>>>>>>> OUT Regex: " + record.getValue(Record.bodyField));
-						}
-
-					}
-					else
-					{
-						 System.out.println("Line out of range. Stopping now: " +record.getValue(Record.bodyField));
-						break;
-					}
-				}
-
-			}
-		}
-		catch(Exception e)
-		{
-			e.printStackTrace();
-		}
-		finally
-		{
-			System.out.println("File: " +fileName +" Line count: " + lineCount);
-			if (r != null)
-			{
-				try
-				{r.close();} 
-				catch (IOException e)
-				{}	
-			}
-			
-		}
-		return records;
-	}
-	
-	
-	protected static boolean isValid(ChukwaRecord record, String filter)
-	{
-		String[] fields = record.getFields();
-		for(String field: fields)
-		{
-			if ( record.getValue(field).toLowerCase().indexOf(filter) >= 0)
-			{
-				return true;
-			}
-		}
-		return false;
-	}
+  public static List<Record> readData(String cluster, String dataSource,
+      int maxRows, long t1, long t0, long maxOffset, String filter,
+      String fileName, FileSystem fs, Configuration conf)
+      throws MalformedFileFormat {
+
+    // String source = "NameNode." + fileName;
+    List<Record> records = new LinkedList<Record>();
+    SequenceFile.Reader r = null;
+
+    int lineCount = 0;
+    if (filter != null) {
+      filter = filter.toLowerCase();
+    }
+
+    try {
+
+      if (!fs.exists(new Path(fileName))) {
+        System.out.println("fileName not there!");
+        return records;
+      }
+      System.out.println("NameNodeParser Open [" + fileName + "]");
+
+      r = new SequenceFile.Reader(fs, new Path(fileName), conf);
+      System.out.println("NameNodeParser Open2 [" + fileName + "]");
+
+      long timestamp = 0;
+      int listSize = 0;
+
+      long offset = 0;
+
+      // HdfsWriter.HdfsWriterKey key = new HdfsWriter.HdfsWriterKey();
+      ChukwaRecordKey key = new ChukwaRecordKey();
+      ChukwaRecord record = new ChukwaRecord();
+
+      while (r.next(key, record)) {
+        lineCount++;
+
+        System.out.println("NameNodeParser Line ["
+            + record.getValue(Record.bodyField) + "]");
+
+        if (record != null) {
+          timestamp = record.getTime();
+          if (timestamp < t0) {
+            System.out.println("Line not in range. Skipping: "
+                + record.getValue(Record.bodyField));
+            System.out.println("Search for: " + new Date(t0) + " is :"
+                + new Date(timestamp));
+            continue;
+          } else if ((timestamp < t1) && (offset < maxOffset)) // JB (epochTS <
+                                                               // maxDate)
+          {
+
+            System.out
+                .println("In Range: " + record.getValue(Record.bodyField));
+            boolean valid = false;
+
+            if ((filter == null || filter.equals(""))) {
+              valid = true;
+            } else if (isValid(record, filter)) {
+              valid = true;
+            }
+
+            if (valid) {
+              records.add(record);
+              record = new ChukwaRecord();
+              listSize = records.size();
+              if (listSize > maxRows) {
+                records.remove(0);
+                System.out.println("==========>>>>>REMOVING: "
+                    + record.getValue(Record.bodyField));
+              }
+            } else {
+              System.out
+                  .println("In Range ==================>>>>>>>>> OUT Regex: "
+                      + record.getValue(Record.bodyField));
+            }
+
+          } else {
+            System.out.println("Line out of range. Stopping now: "
+                + record.getValue(Record.bodyField));
+            break;
+          }
+        }
+
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+    } finally {
+      System.out.println("File: " + fileName + " Line count: " + lineCount);
+      if (r != null) {
+        try {
+          r.close();
+        } catch (IOException e) {
+        }
+      }
+
+    }
+    return records;
+  }
+
+  protected static boolean isValid(ChukwaRecord record, String filter) {
+    String[] fields = record.getFields();
+    for (String field : fields) {
+      if (record.getValue(field).toLowerCase().indexOf(filter) >= 0) {
+        return true;
+      }
+    }
+    return false;
+  }
 }

Modified: hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/extraction/engine/datasource/record/MalformedFileFormat.java
URL: http://svn.apache.org/viewvc/hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/extraction/engine/datasource/record/MalformedFileFormat.java?rev=752666&r1=752665&r2=752666&view=diff
==============================================================================
--- hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/extraction/engine/datasource/record/MalformedFileFormat.java (original)
+++ hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/extraction/engine/datasource/record/MalformedFileFormat.java Wed Mar 11 22:39:26 2009
@@ -18,34 +18,30 @@
 
 package org.apache.hadoop.chukwa.extraction.engine.datasource.record;
 
+
 import org.apache.hadoop.chukwa.extraction.engine.datasource.DataSourceException;
 
-public class MalformedFileFormat extends DataSourceException
-{
+public class MalformedFileFormat extends DataSourceException {
 
-	/**
+  /**
 	 * 
 	 */
-	private static final long serialVersionUID = 2180898410952691571L;
+  private static final long serialVersionUID = 2180898410952691571L;
 
-	public MalformedFileFormat()
-	{
-		super();
-	}
-
-	public MalformedFileFormat(String message, Throwable cause)
-	{
-		super(message, cause);
-	}
-
-	public MalformedFileFormat(String message)
-	{
-		super(message);
-	}
-
-	public MalformedFileFormat(Throwable cause)
-	{
-		super(cause);
-	}
+  public MalformedFileFormat() {
+    super();
+  }
+
+  public MalformedFileFormat(String message, Throwable cause) {
+    super(message, cause);
+  }
+
+  public MalformedFileFormat(String message) {
+    super(message);
+  }
+
+  public MalformedFileFormat(Throwable cause) {
+    super(cause);
+  }
 
 }

Modified: hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/extraction/engine/datasource/record/RecordDS.java
URL: http://svn.apache.org/viewvc/hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/extraction/engine/datasource/record/RecordDS.java?rev=752666&r1=752665&r2=752666&view=diff
==============================================================================
--- hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/extraction/engine/datasource/record/RecordDS.java (original)
+++ hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/extraction/engine/datasource/record/RecordDS.java Wed Mar 11 22:39:26 2009
@@ -18,13 +18,13 @@
 
 package org.apache.hadoop.chukwa.extraction.engine.datasource.record;
 
+
 import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.TreeMap;
-
 import org.apache.hadoop.chukwa.conf.ChukwaConfiguration;
 import org.apache.hadoop.chukwa.extraction.engine.Record;
 import org.apache.hadoop.chukwa.extraction.engine.SearchResult;
@@ -34,119 +34,102 @@
 import org.apache.hadoop.chukwa.inputtools.mdl.DataConfig;
 import org.apache.hadoop.fs.FileSystem;
 
-public class RecordDS implements DataSource
-{
-	
-	private static FileSystem fs = null;
-	private static ChukwaConfiguration conf = null;
-	
-	private static String rootFolder = null;
-	private static DataConfig dataConfig = null;
-	
-	static
-	{
-		dataConfig = new DataConfig();
-		rootFolder = dataConfig.get("chukwa.engine.dsDirectory.rootFolder");
-		conf = new ChukwaConfiguration();
-		try
-		{
-			fs = FileSystem.get(conf);
-		} catch (IOException e)
-		{
-			e.printStackTrace();
-		}
-	}
-	
-	public SearchResult search(
-									SearchResult result, 
-									String cluster,
-									String dataSource, 
-									long t0, 
-									long t1, 
-									String filter,Token token)
-			throws DataSourceException
-	{
-		
-		String filePath = rootFolder + "/" +  
-				cluster + "/" + dataSource;
-		
-		System.out.println("filePath [" + filePath + "]");	
-		Calendar calendar = Calendar.getInstance();
-		calendar.setTimeInMillis(t1);
-		
-		TreeMap<Long, List<Record>> records = result.getRecords();
-		int maxCount = 200;
-		SimpleDateFormat sdf = new java.text.SimpleDateFormat("_yyyyMMdd_HH_");
-		do
-		{
-			System.out.println("start Date [" + calendar.getTime() + "]");
-			String fileName = sdf.format(calendar.getTime());
-			int minutes = calendar.get(Calendar.MINUTE);
-			int dec = minutes/10;
-			fileName +=  dec ;
-			
-			int m = minutes - (dec*10);
-			if (m < 5)
-			{ fileName += "0.1.evt";}
-			else
-			{ fileName += "5.1.evt";}
-			
-			fileName = filePath + "/" + dataSource + fileName;
-			
-			//System.out.println("JB fileName  [" +fileName + "]");
-			
-			
-			try
-			{
-				System.out.println("BEFORE fileName  [" +fileName + "]");
-				
-//				List<Record> evts = ChukwaFileParser.readData(cluster,dataSource,maxCount, t1, t0, Long.MAX_VALUE, filter, fileName, fs);
-				List<Record> evts = ChukwaSequenceFileParser.readData(cluster,dataSource,maxCount, t1, t0, Long.MAX_VALUE, filter, fileName, fs,conf);
-				
-				maxCount = maxCount - evts.size();
-				System.out.println("AFTER fileName  [" +fileName + "] count=" + evts.size() + " maxCount=" + maxCount);
-				for (Record evt : evts)
-				{
-					System.out.println("AFTER Loop  [" +evt.toString() + "]");
-					long timestamp = evt.getTime();
-					if (records.containsKey(timestamp))
-					   {
-						records.get(timestamp).add(evt);
-					   }
-					   else
-					   {
-						   List<Record> list = new LinkedList<Record>();
-						   list.add(evt);
-						   records.put(timestamp, list);
-					   }   
-				}
-			}
-			catch (Exception e)
-			{
-				e.printStackTrace();
-			}
-			
-			if (maxCount <= 0)
-			{
-				System.out.println("BREAKING LOOP AFTER [" +fileName + "] maxCount=" + maxCount);
-				break;
-			}
-			
-			calendar.add(Calendar.MINUTE, -5);
-			
-			System.out.println("calendar  [" +calendar.getTimeInMillis() + "] ");
-			System.out.println("end       [" +(t0-1000*60*5 ) + "] ");
-		} while (calendar.getTimeInMillis() > (t0-1000*60*5 )); // <= need some code here
-		// Need more than this to compute the end
-		
-		
-
-		
-		return result;
-	}
-	
-	public boolean isThreadSafe()
-	{
-		return true;
-	}
+public class RecordDS implements DataSource {
+
+  private static FileSystem fs = null;
+  private static ChukwaConfiguration conf = null;
+
+  private static String rootFolder = null;
+  private static DataConfig dataConfig = null;
+
+  static {
+    dataConfig = new DataConfig();
+    rootFolder = dataConfig.get("chukwa.engine.dsDirectory.rootFolder");
+    conf = new ChukwaConfiguration();
+    try {
+      fs = FileSystem.get(conf);
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+  }
+
+  public SearchResult search(SearchResult result, String cluster,
+      String dataSource, long t0, long t1, String filter, Token token)
+      throws DataSourceException {
+
+    String filePath = rootFolder + "/" + cluster + "/" + dataSource;
+
+    System.out.println("filePath [" + filePath + "]");
+    Calendar calendar = Calendar.getInstance();
+    calendar.setTimeInMillis(t1);
+
+    TreeMap<Long, List<Record>> records = result.getRecords();
+    int maxCount = 200;
+    SimpleDateFormat sdf = new java.text.SimpleDateFormat("_yyyyMMdd_HH_");
+    do {
+      System.out.println("start Date [" + calendar.getTime() + "]");
+      String fileName = sdf.format(calendar.getTime());
+      int minutes = calendar.get(Calendar.MINUTE);
+      int dec = minutes / 10;
+      fileName += dec;
+
+      int m = minutes - (dec * 10);
+      if (m < 5) {
+        fileName += "0.1.evt";
+      } else {
+        fileName += "5.1.evt";
+      }
+
+      fileName = filePath + "/" + dataSource + fileName;
+
+      // System.out.println("JB fileName  [" +fileName + "]");
+
+      try {
+        System.out.println("BEFORE fileName  [" + fileName + "]");
+
+        // List<Record> evts =
+        // ChukwaFileParser.readData(cluster,dataSource,maxCount, t1, t0,
+        // Long.MAX_VALUE, filter, fileName, fs);
+        List<Record> evts = ChukwaSequenceFileParser.readData(cluster,
+            dataSource, maxCount, t1, t0, Long.MAX_VALUE, filter, fileName, fs,
+            conf);
+
+        maxCount = maxCount - evts.size();
+        System.out.println("AFTER fileName  [" + fileName + "] count="
+            + evts.size() + " maxCount=" + maxCount);
+        for (Record evt : evts) {
+          System.out.println("AFTER Loop  [" + evt.toString() + "]");
+          long timestamp = evt.getTime();
+          if (records.containsKey(timestamp)) {
+            records.get(timestamp).add(evt);
+          } else {
+            List<Record> list = new LinkedList<Record>();
+            list.add(evt);
+            records.put(timestamp, list);
+          }
+        }
+      } catch (Exception e) {
+        e.printStackTrace();
+      }
+
+      if (maxCount <= 0) {
+        System.out.println("BREAKING LOOP AFTER [" + fileName + "] maxCount="
+            + maxCount);
+        break;
+      }
+
+      calendar.add(Calendar.MINUTE, -5);
+
+      System.out.println("calendar  [" + calendar.getTimeInMillis() + "] ");
+      System.out.println("end       [" + (t0 - 1000 * 60 * 5) + "] ");
+    } while (calendar.getTimeInMillis() > (t0 - 1000 * 60 * 5)); // <= need some
+                                                                 // code here
+    // Need more than this to compute the end
+
+    return result;
+  }
+
+  public boolean isThreadSafe() {
+    return true;
+  }
 }

Modified: hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/hicc/Chart.java
URL: http://svn.apache.org/viewvc/hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/hicc/Chart.java?rev=752666&r1=752665&r2=752666&view=diff
==============================================================================
--- hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/hicc/Chart.java (original)
+++ hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/hicc/Chart.java Wed Mar 11 22:39:26 2009
@@ -18,6 +18,7 @@
 
 package org.apache.hadoop.chukwa.hicc;
 
+
 import java.io.PrintWriter;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -32,348 +33,376 @@
 import javax.servlet.http.HttpServletRequest;
 import org.apache.hadoop.chukwa.hicc.ColorPicker;
 
-
 public class Chart {
-    private String id;
-    private String title;
-    private String graphType;
-    private ArrayList<TreeMap<String, TreeMap<String, Double>>> dataset;
-    private ArrayList<String> chartType;
-	private boolean xLabelOn;
-	private boolean yLabelOn;
-	private boolean yRightLabelOn;
-	private int width;
-	private int height;
-	private List<String> xLabelRange;
-	private HashMap<String, Long> xLabelRangeHash;
-	private HttpServletRequest request = null;
-    private boolean legend;
-    private String xLabel="";
-    private String yLabel="";
-    private String yRightLabel="";
-    private int datasetCounter=0;
-    private double max=0;
-    private int seriesCounter=0;
-    private List<String> rightList;
-    private boolean userDefinedMax = false;
-    private String[] seriesOrder=null;
-    
-	public Chart(HttpServletRequest request) {
-		if(request!=null && request.getParameter("boxId")!=null) {
-			this.id=request.getParameter("boxId");
-		} else {
-			this.id="0";
-		}
-        this.title="Untitled Chart";
-        this.graphType="image";
-        this.xLabelOn=true;
-        this.yLabelOn=true;
-        this.width=400;
-        this.height=200;
-        this.request=request;
-        this.legend=true;
-        this.max=0;
-        this.datasetCounter=0;
-        this.seriesCounter=0;
-        this.rightList = new ArrayList<String>();
-        this.userDefinedMax=false;
-        this.seriesOrder=null;
-    }
-	
-	public void setYMax(double max) {
-		this.max=max;
-		this.userDefinedMax=true;
-	}
-	
-	public void setSize(int width, int height) {
-		this.width=width;
-		this.height=height;
-	}
-    public void setGraphType(String graphType) {
-    	if(graphType!=null) {
-            this.graphType = graphType;
-    	}
-    }
-    
-    public void setTitle(String title) {
-    	this.title=title;    	
-    }
-    
-    public void setId(String id) {
-    	this.id=id;
-    }
-    
-    public void setDataSet(String chartType, TreeMap<String, TreeMap<String, Double>> data) {
-    	if(this.dataset==null) {
-    		this.dataset = new ArrayList<TreeMap<String, TreeMap<String, Double>>>();
-    		this.chartType = new ArrayList<String>();
-    	}
-   		this.dataset.add(data);
-   		this.chartType.add(chartType);
-    }
-
-	public void setSeriesOrder(String[] metrics) {
-		this.seriesOrder = metrics;
-	}
-
-    public void setXAxisLabels(boolean toggle) {
-    	xLabelOn = toggle;
-    }
-
-    public void setYAxisLabels(boolean toggle) {
-    	yLabelOn = toggle;    	
-    }
-
-    public void setYAxisRightLabels(boolean toggle) {
-    	yRightLabelOn = toggle;    	
-    }
-
-    public void setXAxisLabel(String label) {
-    	xLabel = label;
-    }
-
-    public void setYAxisLabel(String label) {
-    	yLabel = label;
-    }
-
-    public void setYAxisRightLabel(String label) {
-    	yRightLabel = label;
-    }
-
-    public void setXLabelsRange(List<String> range) {
-    	xLabelRange = range;
-        xLabelRangeHash = new HashMap<String, Long>();
-        long value = 0;
-        for(String label : range) {
-            xLabelRangeHash.put(label,value);
-            value++;
-        }
-    }
-
-    public void setLegend(boolean toggle) {
-    	legend = toggle;
-    }
-    public String plot() {
-        SimpleDateFormat format = new SimpleDateFormat("m:s:S");
-    	StringBuilder output= new StringBuilder();
-    	if(dataset==null) {
-    		output.append("No Data available.");
-    		return output.toString();
-        }
-        String dateFormat="%H:%M";
-        if(xLabel.intern()=="Time".intern()) {
-            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-            long xMin;
-            try {
-                xMin = Long.parseLong(xLabelRange.get(0));
-                long xMax = Long.parseLong(xLabelRange.get(xLabelRange.size()-1));
-                if(xMax-xMin>31536000000L) {
-                    dateFormat="%y";
-                } else if(xMax-xMin>2592000000L) {
-                    dateFormat="%y-%m";
-                } else if(xMax-xMin>604800000L) {
-                    dateFormat="%m-%d";
-    	        } else if(xMax-xMin>86400000L) {
-                    dateFormat="%m-%d %H:%M";
-    	        }
-            } catch (NumberFormatException e) {
-                dateFormat="%y-%m-%d %H:%M";
-            }
-        }
-        StringBuilder xAxisOptions = new StringBuilder();
-        if(xLabel.intern()=="Time".intern()) {
-            xAxisOptions.append("timeformat: \"");
-            xAxisOptions.append(dateFormat);
-            xAxisOptions.append("\",mode: \"time\"");
-        } else {
-            xAxisOptions.append("tickFormatter: function (val, axis) { return xLabels[Math.round(val)]; }, ticks: 0");
-        }
-        if(request!=null && request.getParameter("format")==null) {
-            output.append("<html><link href=\"/hicc/css/default.css\" rel=\"stylesheet\" type=\"text/css\">\n");
-            output.append("<body onresize=\"wholePeriod()\"><script type=\"text/javascript\" src=\"/hicc/js/jquery-1.2.6.min.js\"></script>\n");
-            output.append("<script type=\"text/javascript\" src=\"/hicc/js/jquery.flot.pack.js\"></script>\n");
-            output.append("<script type=\"text/javascript\" src=\"/hicc/js/excanvas.pack.js\"></script>\n");
-            output.append("<div id=\"placeholderTitle\"><center>"+title+"</center></div>\n");
-            output.append("<div id=\"placeholder\" style=\"width:"+this.width+"px;height:"+this.height+"px;\"></div>\n");
-            output.append("<center><div id=\"placeholderLegend\"></div></center>\n");
-            output.append("<input type=\"hidden\" id=\"boxId\" value=\"iframe"+this.id+"\">\n");
-            output.append("<script type=\"text/javascript\" src=\"/hicc/js/flot.extend.js\">\n");
-            output.append("</script>\n");
-            output.append("<script type=\"text/javascript\">\n");
-            output.append("var chartTitle=\"<center>"+title+"</center>\";\n");
-            output.append("var height="+this.height+";\n");
-            output.append("var xLabels=new Array();\n");
-            output.append("var cw = document.body.clientWidth-70;\n");
-            output.append("var ch = document.body.clientHeight-50;\n");
-            output.append("document.getElementById('placeholder').style.width=cw+'px';\n");
-            output.append("document.getElementById('placeholder').style.height=ch+'px';\n");
-        }
-        output.append("_options={\n");
-        output.append("        points: { show: false },\n");
-        output.append("        xaxis: { "+xAxisOptions+" },\n");
-        output.append("	  selection: { mode: \"x\" },\n");
-        output.append("	  grid: {\n");
-        output.append("	           clickable: true,\n");
-        output.append("	           hoverable: true,\n");
-        output.append("	           tickColor: \"#C0C0C0\",\n");
-        output.append("	           backgroundColor:\"#FFFFFF\"\n");
-        output.append("	  },\n");
-        output.append("	  legend: { show: "+this.legend+", noColumns: 3, container: $(\"#placeholderLegend\") },\n");
-        output.append("        yaxis: { ");
-        boolean stack = false;
-        for(String type : this.chartType) {
-            if(type.startsWith("stack")) {
-                stack=true;
-            }
-        }
-        if(stack) {
-            output.append("mode: \"stack\", ");
-        }
-        if(userDefinedMax) {
-            output.append("tickFormatter: function(val, axis) { return val.toFixed(axis.tickDecimals) + \" %\"; }");
-        } else {
-            output.append("tickFormatter: function(val, axis) { ");
-            output.append("if (val >= 1000000000000000) return (val / 1000000000000000).toFixed(2) + \"x10<sup>15</sup>\";");
-            output.append("else if (val >= 100000000000000) return (val / 100000000000000).toFixed(2) + \"x10<sup>14</sup>\";");
-            output.append("else if (val >= 10000000000000) return (val / 10000000000000).toFixed(2) + \"x10<sup>13</sup>\";");
-            output.append("else if (val >= 1000000000000) return (val / 1000000000000).toFixed(2) + \"x10<sup>12</sup>\";");
-            output.append("else if (val >= 100000000000) return (val / 100000000000).toFixed(2) + \"x10<sup>11</sup>\";");
-            output.append("else if (val >= 10000000000) return (val / 10000000000).toFixed(2) + \"x10<sup>10</sup>\";");
-            output.append("else if (val >= 1000000000) return (val / 1000000000).toFixed(2) + \"x10<sup>9</sup>\";");
-            output.append("else if (val >= 100000000) return (val / 100000000).toFixed(2) + \"x10<sup>8</sup>\";");
-            output.append("else if (val >= 10000000) return (val / 10000000).toFixed(2) + \"x10<sup>7</sup>\";");
-            output.append("else if (val >= 1000000) return (val / 1000000).toFixed(2) + \"x10<sup>6</sup>\";");
-            output.append("else if (val >= 100000) return (val / 100000).toFixed(2) + \"x10<sup>5</sup>\";");
-            output.append("else if (val >= 10000) return (val / 10000).toFixed(2) + \"x10<sup>4</sup>\";");
-            output.append("else if (val >= 2000) return (val / 1000).toFixed(2) + \"x10<sup>3</sup>\";");
-            output.append("else return val.toFixed(2) + \"\"; }");
-        }
-        if(userDefinedMax) {
-            output.append(", min:0, max:");
-            output.append(this.max);
-        }
-        output.append("}\n");
-        output.append("	};\n");
-        if(!xLabel.equals("Time")) {
-            output.append("xLabels = [\"");
-            for(int i=0;i<xLabelRange.size();i++) {
-                if(i>0) {
-                    output.append("\",\"");
-                }
-                output.append(xLabelRange.get(i));
-            }
-            output.append("\"];\n");
-        }
-        output.append("_series=[\n");
-        ColorPicker cp = new ColorPicker();
-        int i=0;
-        for(TreeMap<String, TreeMap<String, Double>> dataMap : this.dataset) {
-		   	String[] keyNames = null;
-            if (this.seriesOrder != null) {
-                keyNames = this.seriesOrder;
+  private String id;
+  private String title;
+  private String graphType;
+  private ArrayList<TreeMap<String, TreeMap<String, Double>>> dataset;
+  private ArrayList<String> chartType;
+  private boolean xLabelOn;
+  private boolean yLabelOn;
+  private boolean yRightLabelOn;
+  private int width;
+  private int height;
+  private List<String> xLabelRange;
+  private HashMap<String, Long> xLabelRangeHash;
+  private HttpServletRequest request = null;
+  private boolean legend;
+  private String xLabel = "";
+  private String yLabel = "";
+  private String yRightLabel = "";
+  private int datasetCounter = 0;
+  private double max = 0;
+  private int seriesCounter = 0;
+  private List<String> rightList;
+  private boolean userDefinedMax = false;
+  private String[] seriesOrder = null;
+
+  public Chart(HttpServletRequest request) {
+    if (request != null && request.getParameter("boxId") != null) {
+      this.id = request.getParameter("boxId");
+    } else {
+      this.id = "0";
+    }
+    this.title = "Untitled Chart";
+    this.graphType = "image";
+    this.xLabelOn = true;
+    this.yLabelOn = true;
+    this.width = 400;
+    this.height = 200;
+    this.request = request;
+    this.legend = true;
+    this.max = 0;
+    this.datasetCounter = 0;
+    this.seriesCounter = 0;
+    this.rightList = new ArrayList<String>();
+    this.userDefinedMax = false;
+    this.seriesOrder = null;
+  }
+
+  public void setYMax(double max) {
+    this.max = max;
+    this.userDefinedMax = true;
+  }
+
+  public void setSize(int width, int height) {
+    this.width = width;
+    this.height = height;
+  }
+
+  public void setGraphType(String graphType) {
+    if (graphType != null) {
+      this.graphType = graphType;
+    }
+  }
+
+  public void setTitle(String title) {
+    this.title = title;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public void setDataSet(String chartType,
+      TreeMap<String, TreeMap<String, Double>> data) {
+    if (this.dataset == null) {
+      this.dataset = new ArrayList<TreeMap<String, TreeMap<String, Double>>>();
+      this.chartType = new ArrayList<String>();
+    }
+    this.dataset.add(data);
+    this.chartType.add(chartType);
+  }
+
+  public void setSeriesOrder(String[] metrics) {
+    this.seriesOrder = metrics;
+  }
+
+  public void setXAxisLabels(boolean toggle) {
+    xLabelOn = toggle;
+  }
+
+  public void setYAxisLabels(boolean toggle) {
+    yLabelOn = toggle;
+  }
+
+  public void setYAxisRightLabels(boolean toggle) {
+    yRightLabelOn = toggle;
+  }
+
+  public void setXAxisLabel(String label) {
+    xLabel = label;
+  }
+
+  public void setYAxisLabel(String label) {
+    yLabel = label;
+  }
+
+  public void setYAxisRightLabel(String label) {
+    yRightLabel = label;
+  }
+
+  public void setXLabelsRange(List<String> range) {
+    xLabelRange = range;
+    xLabelRangeHash = new HashMap<String, Long>();
+    long value = 0;
+    for (String label : range) {
+      xLabelRangeHash.put(label, value);
+      value++;
+    }
+  }
+
+  public void setLegend(boolean toggle) {
+    legend = toggle;
+  }
+
+  public String plot() {
+    SimpleDateFormat format = new SimpleDateFormat("m:s:S");
+    StringBuilder output = new StringBuilder();
+    if (dataset == null) {
+      output.append("No Data available.");
+      return output.toString();
+    }
+    String dateFormat = "%H:%M";
+    if (xLabel.intern() == "Time".intern()) {
+      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+      long xMin;
+      try {
+        xMin = Long.parseLong(xLabelRange.get(0));
+        long xMax = Long.parseLong(xLabelRange.get(xLabelRange.size() - 1));
+        if (xMax - xMin > 31536000000L) {
+          dateFormat = "%y";
+        } else if (xMax - xMin > 2592000000L) {
+          dateFormat = "%y-%m";
+        } else if (xMax - xMin > 604800000L) {
+          dateFormat = "%m-%d";
+        } else if (xMax - xMin > 86400000L) {
+          dateFormat = "%m-%d %H:%M";
+        }
+      } catch (NumberFormatException e) {
+        dateFormat = "%y-%m-%d %H:%M";
+      }
+    }
+    StringBuilder xAxisOptions = new StringBuilder();
+    if (xLabel.intern() == "Time".intern()) {
+      xAxisOptions.append("timeformat: \"");
+      xAxisOptions.append(dateFormat);
+      xAxisOptions.append("\",mode: \"time\"");
+    } else {
+      xAxisOptions
+          .append("tickFormatter: function (val, axis) { return xLabels[Math.round(val)]; }, ticks: 0");
+    }
+    if (request != null && request.getParameter("format") == null) {
+      output
+          .append("<html><link href=\"/hicc/css/default.css\" rel=\"stylesheet\" type=\"text/css\">\n");
+      output
+          .append("<body onresize=\"wholePeriod()\"><script type=\"text/javascript\" src=\"/hicc/js/jquery-1.2.6.min.js\"></script>\n");
+      output
+          .append("<script type=\"text/javascript\" src=\"/hicc/js/jquery.flot.pack.js\"></script>\n");
+      output
+          .append("<script type=\"text/javascript\" src=\"/hicc/js/excanvas.pack.js\"></script>\n");
+      output.append("<div id=\"placeholderTitle\"><center>" + title
+          + "</center></div>\n");
+      output.append("<div id=\"placeholder\" style=\"width:" + this.width
+          + "px;height:" + this.height + "px;\"></div>\n");
+      output.append("<center><div id=\"placeholderLegend\"></div></center>\n");
+      output.append("<input type=\"hidden\" id=\"boxId\" value=\"iframe"
+          + this.id + "\">\n");
+      output
+          .append("<script type=\"text/javascript\" src=\"/hicc/js/flot.extend.js\">\n");
+      output.append("</script>\n");
+      output.append("<script type=\"text/javascript\">\n");
+      output.append("var chartTitle=\"<center>" + title + "</center>\";\n");
+      output.append("var height=" + this.height + ";\n");
+      output.append("var xLabels=new Array();\n");
+      output.append("var cw = document.body.clientWidth-70;\n");
+      output.append("var ch = document.body.clientHeight-50;\n");
+      output
+          .append("document.getElementById('placeholder').style.width=cw+'px';\n");
+      output
+          .append("document.getElementById('placeholder').style.height=ch+'px';\n");
+    }
+    output.append("_options={\n");
+    output.append("        points: { show: false },\n");
+    output.append("        xaxis: { " + xAxisOptions + " },\n");
+    output.append("	  selection: { mode: \"x\" },\n");
+    output.append("	  grid: {\n");
+    output.append("	           clickable: true,\n");
+    output.append("	           hoverable: true,\n");
+    output.append("	           tickColor: \"#C0C0C0\",\n");
+    output.append("	           backgroundColor:\"#FFFFFF\"\n");
+    output.append("	  },\n");
+    output.append("	  legend: { show: " + this.legend
+        + ", noColumns: 3, container: $(\"#placeholderLegend\") },\n");
+    output.append("        yaxis: { ");
+    boolean stack = false;
+    for (String type : this.chartType) {
+      if (type.startsWith("stack")) {
+        stack = true;
+      }
+    }
+    if (stack) {
+      output.append("mode: \"stack\", ");
+    }
+    if (userDefinedMax) {
+      output
+          .append("tickFormatter: function(val, axis) { return val.toFixed(axis.tickDecimals) + \" %\"; }");
+    } else {
+      output.append("tickFormatter: function(val, axis) { ");
+      output
+          .append("if (val >= 1000000000000000) return (val / 1000000000000000).toFixed(2) + \"x10<sup>15</sup>\";");
+      output
+          .append("else if (val >= 100000000000000) return (val / 100000000000000).toFixed(2) + \"x10<sup>14</sup>\";");
+      output
+          .append("else if (val >= 10000000000000) return (val / 10000000000000).toFixed(2) + \"x10<sup>13</sup>\";");
+      output
+          .append("else if (val >= 1000000000000) return (val / 1000000000000).toFixed(2) + \"x10<sup>12</sup>\";");
+      output
+          .append("else if (val >= 100000000000) return (val / 100000000000).toFixed(2) + \"x10<sup>11</sup>\";");
+      output
+          .append("else if (val >= 10000000000) return (val / 10000000000).toFixed(2) + \"x10<sup>10</sup>\";");
+      output
+          .append("else if (val >= 1000000000) return (val / 1000000000).toFixed(2) + \"x10<sup>9</sup>\";");
+      output
+          .append("else if (val >= 100000000) return (val / 100000000).toFixed(2) + \"x10<sup>8</sup>\";");
+      output
+          .append("else if (val >= 10000000) return (val / 10000000).toFixed(2) + \"x10<sup>7</sup>\";");
+      output
+          .append("else if (val >= 1000000) return (val / 1000000).toFixed(2) + \"x10<sup>6</sup>\";");
+      output
+          .append("else if (val >= 100000) return (val / 100000).toFixed(2) + \"x10<sup>5</sup>\";");
+      output
+          .append("else if (val >= 10000) return (val / 10000).toFixed(2) + \"x10<sup>4</sup>\";");
+      output
+          .append("else if (val >= 2000) return (val / 1000).toFixed(2) + \"x10<sup>3</sup>\";");
+      output.append("else return val.toFixed(2) + \"\"; }");
+    }
+    if (userDefinedMax) {
+      output.append(", min:0, max:");
+      output.append(this.max);
+    }
+    output.append("}\n");
+    output.append("	};\n");
+    if (!xLabel.equals("Time")) {
+      output.append("xLabels = [\"");
+      for (int i = 0; i < xLabelRange.size(); i++) {
+        if (i > 0) {
+          output.append("\",\"");
+        }
+        output.append(xLabelRange.get(i));
+      }
+      output.append("\"];\n");
+    }
+    output.append("_series=[\n");
+    ColorPicker cp = new ColorPicker();
+    int i = 0;
+    for (TreeMap<String, TreeMap<String, Double>> dataMap : this.dataset) {
+      String[] keyNames = null;
+      if (this.seriesOrder != null) {
+        keyNames = this.seriesOrder;
+      } else {
+        keyNames = ((String[]) dataMap.keySet().toArray(
+            new String[dataMap.size()]));
+      }
+      int counter = 0;
+      if (i != 0) {
+        if (!this.userDefinedMax) {
+          this.max = 0;
+        }
+      }
+      for (String seriesName : keyNames) {
+        int counter2 = 0;
+        if (counter != 0) {
+          output.append(",");
+        }
+        String param = "fill: false";
+        String type = "lines";
+        if (this.chartType.get(i).intern() == "stack-area".intern()
+            || this.chartType.get(i).intern() == "area".intern()) {
+          param = "fill: true";
+        }
+        if (this.chartType.get(i).intern() == "bar".intern()) {
+          type = "bars";
+          param = "stepByStep: true";
+        }
+        if (this.chartType.get(i).intern() == "point".intern()) {
+          type = "points";
+          param = "fill: false";
+        }
+        output.append("  {");
+        output.append(type);
+        output.append(": { show: true, ");
+        output.append(param);
+        output.append(" }, color: \"");
+        output.append(cp.get(counter + 1));
+        output.append("\", label: \"");
+        output.append(seriesName);
+        output.append("\", ");
+        String showYAxis = "false";
+        String shortRow = "false";
+        if (counter == 0 || i > 0) {
+          showYAxis = "true";
+          shortRow = "false";
+        }
+        output.append(" row: { show: ");
+        output.append(showYAxis);
+        output.append(",shortRow:");
+        output.append(shortRow);
+        output.append(", showYAxis:");
+        output.append(showYAxis);
+        output.append("}, data:[");
+        TreeMap<String, Double> data = dataMap.get(seriesName);
+        for (String dp : data.keySet()) {
+          int rangeLabel = 0;
+          if (counter2 != 0) {
+            output.append(",");
+          }
+          if (xLabel.equals("Time")) {
+            if (data.get(dp) == Double.NaN) {
+              output.append("[\"");
+              output.append(dp);
+              output.append("\",NULL]");
             } else {
-                keyNames = ((String[]) dataMap.keySet().toArray(
-                        new String[dataMap.size()]));
-            }
-            int counter = 0;
-            if (i != 0) {
-                if (!this.userDefinedMax) {
-                    this.max = 0;
-                }
+              output.append("[\"");
+              output.append(dp);
+              output.append("\",");
+              output.append(data.get(dp));
+              output.append("]");
             }
-            for (String seriesName : keyNames) {
-                int counter2 = 0;
-                if (counter != 0) {
-                    output.append(",");
-                }
-                String param = "fill: false";
-                String type = "lines";
-                if (this.chartType.get(i).intern() == "stack-area".intern()
-                        || this.chartType.get(i).intern() == "area".intern()) {
-                    param = "fill: true";
-                }
-                if (this.chartType.get(i).intern() == "bar".intern()) {
-                    type = "bars";
-                    param = "stepByStep: true";
-                }
-                if (this.chartType.get(i).intern() == "point".intern()) {
-                    type = "points";
-                    param = "fill: false";
-                }
-                output.append("  {");
-                output.append(type);
-                output.append(": { show: true, ");
-                output.append(param);
-                output.append(" }, color: \"");
-                output.append(cp.get(counter + 1));
-                output.append("\", label: \"");
-                output.append(seriesName);
-                output.append("\", ");
-                String showYAxis = "false";
-                String shortRow = "false";
-                if (counter == 0 || i > 0) {
-                    showYAxis = "true";
-                    shortRow = "false";
-                }
-                output.append(" row: { show: ");
-                output.append(showYAxis);
-                output.append(",shortRow:");
-                output.append(shortRow);
-                output.append(", showYAxis:");
-                output.append(showYAxis);
-                output.append("}, data:[");
-                TreeMap<String, Double> data = dataMap.get(seriesName);
-                for (String dp : data.keySet()) {
-                    int rangeLabel = 0;
-                    if (counter2 != 0) {
-                        output.append(",");
-                    }
-                    if (xLabel.equals("Time")) {
-                        if (data.get(dp) == Double.NaN) {
-                            output.append("[\"");
-                            output.append(dp);
-                            output.append("\",NULL]");
-                        } else {
-                            output.append("[\"");
-                            output.append(dp);
-                            output.append("\",");
-                            output.append(data.get(dp));
-                            output.append("]");
-                        }
-                    } else {
-                        long value = xLabelRangeHash.get(dp);
-                        if (data.get(dp) == Double.NaN) {
-                            output.append("[\"");
-                            output.append(value);
-                            output.append("\",NULL]");
-                        } else {
-                            output.append("[\"");
-                            output.append(value);
-                            output.append("\",");
-                            output.append(data.get(dp));
-                            output.append("]");
-                        }
-                        rangeLabel++;
-                    }
-                    counter2++;
-                }
-                output.append("], min:0");
-                if (this.userDefinedMax) {
-                    output.append(", max:");
-                    output.append(this.max);
-                }
-                output.append("}");
-                counter++;
+          } else {
+            long value = xLabelRangeHash.get(dp);
+            if (data.get(dp) == Double.NaN) {
+              output.append("[\"");
+              output.append(value);
+              output.append("\",NULL]");
+            } else {
+              output.append("[\"");
+              output.append(value);
+              output.append("\",");
+              output.append(data.get(dp));
+              output.append("]");
             }
-            i++;
-        }          
-        output.append(" ];\n");
-        if(request!=null && request.getParameter("format")==null) {
-            output.append(" wholePeriod();</script></body></html>\n");
-        } else {
-            output.append("chartTitle=\"<center>"+this.title+"</center>\";");
-            output.append("height="+this.height+";");
-        }
-    	return output.toString();
-    }            
+            rangeLabel++;
+          }
+          counter2++;
+        }
+        output.append("], min:0");
+        if (this.userDefinedMax) {
+          output.append(", max:");
+          output.append(this.max);
+        }
+        output.append("}");
+        counter++;
+      }
+      i++;
+    }
+    output.append(" ];\n");
+    if (request != null && request.getParameter("format") == null) {
+      output.append(" wholePeriod();</script></body></html>\n");
+    } else {
+      output.append("chartTitle=\"<center>" + this.title + "</center>\";");
+      output.append("height=" + this.height + ";");
+    }
+    return output.toString();
+  }
 }

Modified: hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/hicc/ClusterConfig.java
URL: http://svn.apache.org/viewvc/hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/hicc/ClusterConfig.java?rev=752666&r1=752665&r2=752666&view=diff
==============================================================================
--- hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/hicc/ClusterConfig.java (original)
+++ hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/hicc/ClusterConfig.java Wed Mar 11 22:39:26 2009
@@ -18,61 +18,61 @@
 
 package org.apache.hadoop.chukwa.hicc;
 
+
 import java.io.*;
 import java.util.*;
 
 public class ClusterConfig {
-    public static HashMap<String, String> clusterMap = new HashMap<String, String>();
-    private String path=System.getenv("CHUKWA_CONF_DIR")+File.separator;
-    static public String getContents(File aFile) {
-        //...checks on aFile are elided
-        StringBuffer contents = new StringBuffer();
-   
-        try {
-          //use buffering, reading one line at a time
-          //FileReader always assumes default encoding is OK!
-          BufferedReader input =  new BufferedReader(new FileReader(aFile));
-          try {
-             String line = null; //not declared within while loop
-             /*
-              * readLine is a bit quirky :
-              * it returns the content of a line MINUS the newline.
-              * it returns null only for the END of the stream.
-              * it returns an empty String if two newlines appear in a row.
-              */
-             while (( line = input.readLine()) != null){
-                contents.append(line);
-                contents.append(System.getProperty("line.separator"));
-             }
-          } finally {
-             input.close();
-          }
-        }
-          catch (IOException ex){
-          ex.printStackTrace();
-        }
+  public static HashMap<String, String> clusterMap = new HashMap<String, String>();
+  private String path = System.getenv("CHUKWA_CONF_DIR") + File.separator;
 
-        return contents.toString();
-    }
-
-    public ClusterConfig() {
-        File cc = new File(path+"jdbc.conf");
-        String buffer = getContents(cc);
-        String[] lines = buffer.split("\n");
-        for(String line: lines) {
-            String[] data = line.split("=",2);
-            clusterMap.put(data[0],data[1]);
+  static public String getContents(File aFile) {
+    // ...checks on aFile are elided
+    StringBuffer contents = new StringBuffer();
+
+    try {
+      // use buffering, reading one line at a time
+      // FileReader always assumes default encoding is OK!
+      BufferedReader input = new BufferedReader(new FileReader(aFile));
+      try {
+        String line = null; // not declared within while loop
+        /*
+         * readLine is a bit quirky : it returns the content of a line MINUS the
+         * newline. it returns null only for the END of the stream. it returns
+         * an empty String if two newlines appear in a row.
+         */
+        while ((line = input.readLine()) != null) {
+          contents.append(line);
+          contents.append(System.getProperty("line.separator"));
         }
+      } finally {
+        input.close();
+      }
+    } catch (IOException ex) {
+      ex.printStackTrace();
     }
 
-    public String getURL(String cluster) {
-        String url = clusterMap.get(cluster);
-        return url; 
+    return contents.toString();
+  }
+
+  public ClusterConfig() {
+    File cc = new File(path + "jdbc.conf");
+    String buffer = getContents(cc);
+    String[] lines = buffer.split("\n");
+    for (String line : lines) {
+      String[] data = line.split("=", 2);
+      clusterMap.put(data[0], data[1]);
     }
+  }
 
-    public Iterator<String> getClusters() {
-        Set<String> keys = clusterMap.keySet();
-        Iterator<String> i = keys.iterator();
-        return i;
-    }    
+  public String getURL(String cluster) {
+    String url = clusterMap.get(cluster);
+    return url;
+  }
+
+  public Iterator<String> getClusters() {
+    Set<String> keys = clusterMap.keySet();
+    Iterator<String> i = keys.iterator();
+    return i;
+  }
 }

Modified: hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/hicc/ColorPicker.java
URL: http://svn.apache.org/viewvc/hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/hicc/ColorPicker.java?rev=752666&r1=752665&r2=752666&view=diff
==============================================================================
--- hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/hicc/ColorPicker.java (original)
+++ hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/hicc/ColorPicker.java Wed Mar 11 22:39:26 2009
@@ -18,32 +18,33 @@
 
 package org.apache.hadoop.chukwa.hicc;
 
+
 public class ColorPicker {
-	private String color = "#ff5757";
+  private String color = "#ff5757";
 
-	public ColorPicker() {
-    	color = "#ff5757";
-    }
-	
-    public String get(int counter) {
-        if((counter % 6)==0) {
-            String cyan = Integer.toHexString(256-(counter % 255));
-            color = "#57"+cyan+cyan;
-        } else if((counter % 5)==0) {
-            String purple = Integer.toHexString(256-(counter % 255));
-            color = "#"+purple+"57"+purple;
-        } else if((counter % 4)==0) {
-            String yellow = Integer.toHexString(256-(counter % 255 * 20));
-            color = "#FF"+yellow+"00";
-        } else if((counter % 3)==0) {
-            String green = Integer.toHexString(256-(counter % 255));
-            color = "#57"+green+"57";
-        } else if((counter % 2)==0) {
-            String blue = Integer.toHexString(256-(counter % 255));
-            color = "#5757"+blue+"";
-        } else {
-            color = "#ff5757";
-        }
-        return this.color;
+  public ColorPicker() {
+    color = "#ff5757";
+  }
+
+  public String get(int counter) {
+    if ((counter % 6) == 0) {
+      String cyan = Integer.toHexString(256 - (counter % 255));
+      color = "#57" + cyan + cyan;
+    } else if ((counter % 5) == 0) {
+      String purple = Integer.toHexString(256 - (counter % 255));
+      color = "#" + purple + "57" + purple;
+    } else if ((counter % 4) == 0) {
+      String yellow = Integer.toHexString(256 - (counter % 255 * 20));
+      color = "#FF" + yellow + "00";
+    } else if ((counter % 3) == 0) {
+      String green = Integer.toHexString(256 - (counter % 255));
+      color = "#57" + green + "57";
+    } else if ((counter % 2) == 0) {
+      String blue = Integer.toHexString(256 - (counter % 255));
+      color = "#5757" + blue + "";
+    } else {
+      color = "#ff5757";
     }
+    return this.color;
+  }
 }

Modified: hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/hicc/Config.java
URL: http://svn.apache.org/viewvc/hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/hicc/Config.java?rev=752666&r1=752665&r2=752666&view=diff
==============================================================================
--- hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/hicc/Config.java (original)
+++ hadoop/chukwa/trunk/src/java/org/apache/hadoop/chukwa/hicc/Config.java Wed Mar 11 22:39:26 2009
@@ -18,6 +18,7 @@
 
 package org.apache.hadoop.chukwa.hicc;
 
+
 public class Config {
 
 }