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.google.protobuf.ByteString;
import com.taobao.loganalyzer.aplus.Aplus;
public class aplus_wireless extends com.alimama.mdrillImport.DataParser{
private static final long serialVersionUID = 1L;
public volatile long groupCreateerror=0;
private static Logger LOG = Logger.getLogger(aplus_wireless.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 parseObject(Object 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;
}
byte[] d=(byte[]) line;
Aplus.AplusLog log = Aplus.AplusLog.parseFrom(d);
if(log==null)
{
return null;
}
long ts=log.getTime();
com.google.protobuf.ByteString currurlbyte=log.getUrl();
com.google.protobuf.ByteString preurlbyte=log.getPre();
String currurl=String.valueOf(currurlbyte==null?"":currurlbyte.toStringUtf8());
String preurl=String.valueOf(preurlbyte==null?"":preurlbyte.toStringUtf8());
if(ts<laststartts||ts>lastendts)
{
return null;
}
if(currurl.indexOf("h5.m.taobao.com")<0&&preurl.indexOf("h5.m.taobao.com")<0)
{
return null;
}
this.lines_sb++;
if(this.lines_sb>5000)
{
this.lines_sb=0;
long nowts=System.currentTimeMillis();
if(nowts-timediff>30000)
{
timediff=nowts;
LOG.info("parseLine_sb_"+formatDayMin.format(new Date(ts*1000))+" "+currurl+"=="+preurl+"<<<");
}
}
String url_id=getNameNodecode(currurl, "refpid");
String pre_id=getNameNodecode(preurl, "refpid");
String actname=String.valueOf(getNameNodecode(currurl, "actname"));
String pre_actname=String.valueOf(getNameNodecode(preurl, "actname"));
if(url_id!=null&&!url_id.isEmpty())
{
if(currurl.indexOf("http://h5.m.taobao.com/38/o2o/home.html")>=0&&actname.equals("o2o38"))
{
return new DataIterParse(ts,log,url_id,pre_id);
}
if(currurl.indexOf("http://h5.m.taobao.com/channel/act/38/main.html")>=0&&actname.equals("shop38"))
{
return new DataIterParse(ts,log,url_id,pre_id);
}
if(currurl.indexOf("http://h5.m.taobao.com/38/wish38.html?sprefer=pca217")>=0&&actname.equals("wish38"))
{
return new DataIterParse(ts,log,url_id,pre_id);
}
if(currurl.indexOf("http://h5.m.taobao.com/other/shaoma.html")>=0&&actname.equals("alimm_ggk"))
{
return new DataIterParse(ts,log,url_id,pre_id);
}
if(currurl.indexOf("http://h5.m.taobao.com/channel/act/wetao/paimai/mrli.html")>=0&&actname.equals("auction38"))
{
return new DataIterParse(ts,log,url_id,pre_id);
}
if(currurl.indexOf("http://h5.m.taobao.com/38/recharge.html")>=0&&actname.equals("recharge38"))
{
return new DataIterParse(ts,log,url_id,pre_id);
}
}
if(pre_id!=null&&!pre_id.isEmpty())
{
if(preurl.indexOf("http://h5.m.taobao.com/38/o2o/home.html")>=0&&pre_actname.equals("o2o38"))
{
return new DataIterParse(ts,log,url_id,pre_id);
}
if(preurl.indexOf("http://h5.m.taobao.com/channel/act/38/main.html")>=0&&pre_actname.equals("shop38"))
{
return new DataIterParse(ts,log,url_id,pre_id);
}
if(preurl.indexOf("http://h5.m.taobao.com/38/wish38.html?sprefer=pca217")>=0&&pre_actname.equals("wish38"))
{
return new DataIterParse(ts,log,url_id,pre_id);
}
if(preurl.indexOf("http://h5.m.taobao.com/other/shaoma.html")>=0&&pre_actname.equals("alimm_ggk"))
{
return new DataIterParse(ts,log,url_id,pre_id);
}
if(preurl.indexOf("http://h5.m.taobao.com/channel/act/wetao/paimai/mrli.html")>=0&&pre_actname.equals("auction38"))
{
return new DataIterParse(ts,log,url_id,pre_id);
}
if(preurl.indexOf("http://h5.m.taobao.com/38/recharge.html")>=0&&pre_actname.equals("recharge38"))
{
return new DataIterParse(ts,log,url_id,pre_id);
}
}
return null;
} 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 Aplus.AplusLog pvlog=null;
long ts;
String urlid;
String urlpre;
public DataIterParse(long ts,Aplus.AplusLog pvlog,String urlid,String urlpre) {
this.pvlog = pvlog;
this.ts=ts;
this.urlid=urlid;
this.urlpre=urlpre;
}
@Override
public boolean next() {
return false;
}
@Override
public Number[] getSum() {
return new Number[]{
this.urlid!=null?1:0
,0
,this.urlpre!=null?1:0
,0
,0
,0
,0
,0
};
}
@Override
public long getTs() {
return (ts/10)*10000;
}
@Override
public Object[] getGroup() {
long ts300=(this.ts/300)*300000;
Date d= new Date(ts300);
ByteString agent=pvlog.getUserAgent();
String channel = String.valueOf(agent==null?"":agent.toStringUtf8()).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",
"aplus_wireless",
"wireless",
String.valueOf(this.urlid == null ? this.urlpre : this.urlid) // media_pid
, channel
,DebugVersion.version// String.valueOf(actname)
} ;
}
}
private static String[] colSumName={
"pv_2"
,"click_1"
,"click_2"
,"promise_click"
,"pc_2_wap"
,"weakup"
,"backup_1"
,"backup_2"
};
private static String[] colname={
"thedate"
,"miniute_5"
,"source"
,"sub_source"
,"media_name"
,"media_pid"
,"channel"
,"o2o"
};
private static String decodeString(String args) {
try {
return new String(java.net.URLDecoder.decode(args,"UTF-8") .getBytes("UTF-8"), "UTF-8");
} catch (Throwable e) {
try {
return new String(java.net.URLDecoder.decode(args,"GBK") .getBytes("UTF-8"), "UTF-8");
} catch (Throwable e2) {
return args;
}
}
}
public static String getNameNodecode(String url,String keyname)
{
try{
String[] tem = url.split("\\?", 2);
String params=tem[0];
if (tem.length >= 2){
params=tem[1];
}
for (String s: params.split("&", -1)) {
String[] tem1 = s.split("=", -1);
String key = decodeString(tem1[0]);
if(key.equals(keyname))
{
String value = (tem1.length < 2
? "" : decodeString(tem1[1]));
return value;
}
}
}catch(Throwable e){}
return null;
}
public static String getName(String url,String keyname)
{
try{
String[] tem = decodeString(url).split("\\?", 2);
String params=tem[0];
if (tem.length >= 2){
params=tem[1];
}
for (String s: params.split("&", -1)) {
String[] tem1 = s.split("=", -1);
String key = decodeString(tem1[0]);
if(key.equals(keyname))
{
String value = (tem1.length < 2
? "" : decodeString(tem1[1]));
return value;
}
}
}catch(Throwable e){}
return null;
}
@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;
}
}