package com.alimama.quanjingmonitor.mdrillImport.parse; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.log4j.Logger; import com.alimama.mdrillImport.InvalidEntryException; public class munion_r_taobao_com_click_data extends com.alimama.mdrillImport.DataParser{ private static final long serialVersionUID = 1L; public volatile long groupCreateerror=0; private static Logger LOG = Logger.getLogger(munion_r_taobao_com_click_data.class); private volatile long lines=0; private volatile long lines_sb=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; private volatile long timediff=System.currentTimeMillis(); @Override public DataIter parseLine(String line) throws InvalidEntryException { try { if(line==null) { 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; } String[] clicklog=line.split("\001",-1); if(clicklog.length<4) { return null; } String[] sessionb02=clicklog[1].split("\002",-1); String[] sessionb03=clicklog[2].split("\002",-1); String[] sessionb04=clicklog[3].split("\002",-1); if(sessionb02.length<12||sessionb03.length<2||sessionb04.length<2) { return null; } if(sessionb02[0].isEmpty()||sessionb02[1].isEmpty()||sessionb02[0].length()<=5||sessionb02[1].length()>50) { return null; } long ts = Long.parseLong(sessionb02[0]); this.lines_sb++; if(this.lines_sb>5000) { this.lines_sb=0; long nowts=System.currentTimeMillis(); if(nowts-timediff>30000) { timediff=nowts; StringBuilder b = new StringBuilder(); for (int i = 0; i < clicklog.length; i++) { b.append(i); b.append("="); b.append(String.valueOf(clicklog[i])); b.append(","); } LOG.info("parseLine_sb_"+formatDayMin.format(new Date(ts*1000))+" "+b.toString()); } } if(ts<laststartts||ts>lastendts) { return null; } DataIterParse rtn= new DataIterParse(ts,sessionb02); 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 String[] pvlog=null; long ts; public DataIterParse(long ts,String[] pvlog) { this.pvlog = pvlog; this.ts=ts; } @Override public boolean next() { return false; } @Override public Number[] getSum() { return new Number[]{ 0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 }; } @Override public long getTs() { return (ts/10)*10000; } //wdm_v3_user_track @Override public Object[] getGroup() { long ts300 = (this.ts / 300) * 300000; Date d = new Date(ts300); String channel = String.valueOf(pvlog[7]).toLowerCase(); if (channel.indexOf("android") >= 0) { channel = "android"; } else if (channel.indexOf("iphone") >= 0||channel.indexOf("ios") >= 0) { channel = "ios"; } else { channel = "other"; } return new String[] { String.valueOf(formatDay.format(d)), String.valueOf(formatMin.format(d)), "wireless", "munion_r_taobao_com_click_data", "wireless", String.valueOf(pvlog[1]), channel, DebugVersion.version }; } } private static String[] colname={ "thedate" ,"miniute_5" ,"source" ,"sub_source" ,"media_name" ,"media_pid" ,"channel" ,"o2o" }; private static String[] colSumName={ "pv_2" ,"click_1" ,"click_2" ,"promise_click" ,"pc_2_wap" ,"weakup" ,"backup_1" ,"backup_2" }; @Override public String[] getSumName() { return colSumName; } @Override public String getTableName() { return "rpt_adpmp_3_8_online"; } private static SimpleDateFormat formatDay = new SimpleDateFormat("yyyyMMdd"); private static SimpleDateFormat formatMin = new SimpleDateFormat("HHmm"); private static SimpleDateFormat formatDayMin = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Override public String[] getGroupName() { return colname; } }