package com.alimama.quanjingmonitor.mdrillImport.parse; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.log4j.Logger; import com.alimama.mdrillImport.InvalidEntryException; import com.taobao.loganalyzer.input.tanxpv.parser.TanxPVLog; import com.taobao.loganalyzer.input.tanxpv.parser.TanxPVLogParser; public class tanx_pv extends com.alimama.mdrillImport.DataParser{ private static final long serialVersionUID = 1L; public volatile long groupCreateerror=0; private static Logger LOG = Logger.getLogger(tanx_pv.class); private volatile long lines=0; private static long TS_MAX=3600l*24*31; private volatile long laststartts=System.currentTimeMillis()/1000-TS_MAX; private volatile long lastendts=System.currentTimeMillis()/1000+TS_MAX; public DataIter parseLine(String line) throws InvalidEntryException { try { TanxPVLog pvlog = TanxPVLogParser.parse(line); if (pvlog == null) { return null; } String pid=pvlog.getPid(); String strts=pvlog.getTimestamp(); if(pid==null||strts==null||pid.length()>50) { return null; } this.lines++; if(this.lines>100000) { this.laststartts=(System.currentTimeMillis()/1000)-TS_MAX; this.lastendts=(System.currentTimeMillis()/1000)+TS_MAX; this.lines=0; } long ts = Long.parseLong(strts); if(ts<laststartts||ts>lastendts) { return null; } DataIterParse rtn= new DataIterParse(pvlog,pid,ts); return rtn; } catch (Throwable nfe) { if(groupCreateerror<100) { LOG.error("InvalidEntryException:"+line,nfe); groupCreateerror++; } throw new InvalidEntryException("Invalid log `" + line + "'\n" , nfe); } } public static class DataIterParse implements DataIter{ private TanxPVLog pvlog=null; private String pid; private long ts; public DataIterParse(TanxPVLog pvlog,String pid,long ts) { this.pvlog = pvlog; this.pid=pid; this.ts=ts; } @Override public boolean next() { return false; } @Override public Number[] getSum() { return new Number[]{1}; } @Override public long getTs() { return (ts/10)*10000; } @Override public Object[] getGroup() { Date d= new Date((ts/300)*300000); return new String[]{ String.valueOf(formatDay.format(d)) ,String.valueOf(formatMin.format(d)) ,String.valueOf(this.pid) ,String.valueOf(pvlog.getProductType()) }; } } private static String[] colname={ "thedate" ,"miniute_5" ,"pid" ,"producttype" }; @Override public String[] getGroupName() { return colname; } private static String[] sumName={"records"}; @Override public String[] getSumName() { return sumName; } private static String tablename="tanx_pv"; @Override public String getTableName() { return tablename; } private static SimpleDateFormat formatDay = new SimpleDateFormat("yyyyMMdd"); private static SimpleDateFormat formatMin = new SimpleDateFormat("HHmm"); }