Package com.alimama.quanjingmonitor.mdrillImport.monitor

Source Code of com.alimama.quanjingmonitor.mdrillImport.monitor.PidStat

package com.alimama.quanjingmonitor.mdrillImport.monitor;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;

import com.alimama.mdrill.jdbc.MdrillQueryResultSet;
import com.taobao.tddl.tddl_sample.atom.AtomDataSourceDao.ConfigInfo;

public class PidStat {
  public static void main(String[] args) {
    System.out.println("2300".compareTo("2259"));
  }
  private String start;
  private String end;
  private String[] dayList;
  private double[] p4pprice;
  private double[] p4pclick;
  private double[] aclick;
  private double[] apv;
  private double[] p4ppv;
  private double[] p4pctr;
  public static String print(ArrayList<PidStat> listraw, PidInfo info,ConfigInfo cinfo)
  {
    if(cinfo!=null&&cinfo.isIsnotsend())
    {
      return "";
    }
   
    ArrayList<PidStat> list=new ArrayList<PidStat>();
    for( PidStat p:listraw)
    {
      if(p.start.compareTo("2259")>=0||p.start.compareTo("0101")<=0)
      {
        continue;
      }
      list.add(p);
    }
   
    StringBuffer buff =new StringBuffer();
    int index=0;
    int maxsize=3;

    int size=list.size();
    int rowspan=Math.max(Math.min(size, maxsize), 0);
    for(int i=0;i<list.size();i++)
    {
      if(index>=maxsize)
      {
        break;
      }
      buff.append(list.get(i).print(info,index,rowspan,size,cinfo));
      index++;

    }
   
    return buff.toString();
  }
  public String arrayToString(String[] d,String joinchar)
  {
    StringBuffer buff=new StringBuffer();
    String join ="";
    for(Object s:d)
    {
      buff.append(join).append(s);
      join=joinchar;
    }
   
    return buff.toString();
  }
 
  public String arrayToString(double[] d,String joinchar,String f)
  {
    DecimalFormat format=new DecimalFormat(f);
    StringBuffer buff=new StringBuffer();
    String join ="";
    for(double s:d)
    {
      buff.append(join).append(format.format(s));
      join=joinchar;
    }
   
    return buff.toString();
  }
 
  public String printIsOver(double overrate,double[] d,String joinchar,String format)
  {
    boolean isover=this.isover(overrate, d,false);
    if(isover)
    {
      return "<font color='red'>"+arrayToString(d,joinchar,format)+"</font>";
    }
    return arrayToString(d,joinchar,format);
  }
  public String print(PidInfo info,int index,int span,int size,ConfigInfo cinfo) {
    String rowspan="<td rowspan='"+span+"'>" + info.pid+"(共"+size+"条)"+(cinfo==null?"":"<br>"+cinfo.getMessage())+ "</td>";
    if(index>0)
    {
      rowspan="";
    }
   
    return "<tr>"+rowspan+"<td>"+start+ "</td><td>" + end + "</td><td>" + info.pidname+ "</td><td>" + info.overrate
        + "</td><td>" + arrayToString(dayList,"<br>") + "</td>" +
            "<td>"+printIsOver(info.overrate,this.p4pprice,"<br>","0") + "</td>" +
            "<td>"+printIsOver(info.overrate,this.p4pclick,"<br>","0") + "</td>" +
            "<td>"+printIsOver(info.overrate,this.p4ppv,"<br>","0") + "</td><td>"+printIsOver(info.overrate,this.p4pctr,"<br>","0.00") + "</td></tr>";
  }
 
  public String printlog(PidInfo info) {
    return start + "\t" + end + "\t" + info.pid + "\t" + info.pidname+ "\t" + info.overrate
        + "\t" + arrayToString(dayList,",") + "\t"
        + arrayToString(p4pprice,",","0")+"\t"+isover(info.overrate,this.p4pprice,false) + "\t"
        + arrayToString(p4pclick,",","0")+"\t"+isover(info.overrate,this.p4pclick,false) + "\t"
        + arrayToString(aclick,",","0")+"\t"+isover(info.overrate,this.aclick,false) + "\t"
        + arrayToString(apv,",","0")+"\t"+isover(info.overrate,this.apv,false)
        + "\t" + arrayToString(p4ppv,",","0")+"\t"+isover(info.overrate,this.p4ppv,false)+ "\t" + arrayToString(p4pctr,",","0.00")+"\t"+isover(info.overrate,this.p4pctr,false) +"\t"+this.hasValueOverMinPrice()+ "";
  }

 
  public static PidStat read(DataInputStream input) throws IOException
  {
    PidStat rtn=new PidStat();
    rtn.start=input.readUTF();
    rtn.end=input.readUTF();
   
    int size=input.readInt();
    rtn.dayList=readString(input, size);
    rtn.p4pprice=readDouble(input, size);
    rtn.p4pclick=readDouble(input, size);
    rtn.aclick=readDouble(input, size);
    rtn.apv=readDouble(input, size);
    rtn.p4ppv=readDouble(input, size);
    rtn.p4pctr=readDouble(input, size);
    return rtn;
  }
 
  public static void write(DataOutputStream output,PidStat s) throws IOException
  {
    output.writeUTF(s.start);
    output.writeUTF(s.end);
    int size=s.dayList.length;
    output.writeInt(size);
    writeString(output, size, s.dayList);
    writeDouble(output, size, s.p4pprice);
    writeDouble(output, size, s.p4pclick);
    writeDouble(output, size, s.aclick);
    writeDouble(output, size, s.apv);
    writeDouble(output, size, s.p4ppv);
    writeDouble(output, size, s.p4pctr);


  }
 
  public static  void writeString(DataOutputStream output, int size,String[] s) throws IOException
  {
    for(int i=0;i<size;i++)
    {
      output.writeUTF(s[i]);
    }
  }
 
  public static  void writeDouble(DataOutputStream output, int size,double[] s) throws IOException
  {
    for(int i=0;i<size;i++)
    {
      output.writeDouble(s[i]);
    }
  }
 
  public static double[] readDouble(DataInputStream input,int size) throws IOException
  {
    double[] rtn=new double[size];
    for(int i=0;i<size;i++)
    {
      rtn[i]=input.readDouble();
    }
    return rtn;
  }
 
  public static String[] readString(DataInputStream input,int size) throws IOException
  {
    String[] rtn=new String[size];
    for(int i=0;i<size;i++)
    {
      rtn[i]=input.readUTF();
    }
    return rtn;
  }
 
  public void makectr()
  {
    this.p4pctr=new double[this.dayList.length];
   
    for(int i=0;i<this.dayList.length;i++)
    {
      this.p4pctr[i]=0;
      if(this.p4ppv[i]>0&&this.p4ppv[i]>this.p4pclick[i])
      {
        this.p4pctr[i]=this.p4pclick[i]*100/this.p4ppv[i];
      }
    }
  }
 
  public boolean hasValueOverMinPrice()
  {
    boolean isalllessthen=isDiffLessThen( 100d*100,this.p4pprice);
    return !isalllessthen;
  }
 
  public boolean isover(PidInfo info,boolean onlyreduce)
  {
    if(isover(info.overrate,this.p4pprice,onlyreduce))
    {
      return true;
    }
   
    if(isover(info.overrate,this.p4pclick,onlyreduce))
    {
      return true;
    }
   
    if(isover(info.overrate,this.p4pctr,onlyreduce))
    {
      return true;
    }
   
    if(isover(info.overrate,this.p4ppv,onlyreduce))
    {
      return true;
    }
   
    return false;
  }
 
  public boolean isAllLessThen(double minvalue,double[] d)
  {
    for(int i=0;i<d.length;i++)
    {
      if(d[i]<minvalue)
      {
        continue;
      }
     
      return false;
    }
   
    return true;
  }
 
 
  public boolean isDiffLessThen(double minvalue,double[] d)
  {
    double base=d[0];
    for(int i=1;i<d.length;i++)
    {
      double diff=Math.abs(base-d[i]);
      if(diff<minvalue)
      {
        continue;
      }
     
      return false;
    }
    return true;
  }
 
  public boolean isover(double overrate,double[] d,boolean onlyreduce)
  {
    double base=d[0];
    boolean isset=false;
    for(int i=1;i<d.length;i++)
    {
      if(d[i]<=0.0000001)
      {
        continue;
      }
     
     
      isset=true;
      double diff=Math.abs(base-d[i])/(0.0001+d[i]);
      double diff2=Math.abs(base-d[i])/(0.0001+base);

      if(diff<overrate&&diff2<overrate)
      {
        return false;
      }
     
      if(onlyreduce&&base>d[i])
      {
        return false;
      }
    }
   
    return isset;
  }
 
 
  public static HashMap<String,PidStat> request(long ts,HashMap<String,PidInfo> pidinfo,ArrayList<String> pidlist) throws SQLException, ClassNotFoundException
  {
    Class.forName("com.alimama.mdrill.jdbc.MdrillDriver");
   
    HashMap<String,PidStat> rtn=new HashMap<String, PidStat>();
   
    String[] dayList={
        monitorUtils.formatDay.format(new Date(ts-1000l*monitorUtils.delaymin))
        ,monitorUtils.formatDay.format(new Date(ts-1000l*monitorUtils.delaymin-1000l*3600*24*1))
        ,monitorUtils.formatDay.format(new Date(ts-1000l*monitorUtils.delaymin-1000l*3600*24*2))
        ,monitorUtils.formatDay.format(new Date(ts-1000l*monitorUtils.delaymin-1000l*3600*24*3))
        ,monitorUtils.formatDay.format(new Date(ts-1000l*monitorUtils.delaymin-1000l*3600*24*7))
        };
   
    HashMap<String,Integer> dayIndex=new HashMap<String, Integer>();
    for(int i=0;i<dayList.length;i++)
    {
      dayIndex.put(dayList[i], i);
    }
   
    String start=monitorUtils.formatMin.format(new Date(ts-1000l*monitorUtils.delaymin-1000l*3600));
    String end=monitorUtils.formatMin.format(new Date(ts-1000l*monitorUtils.delaymin));
   
    String minfilter="miniute_5>='"+start+"' and miniute_5<='"+end+"'";
    if(start.compareTo(end)>=0)
    {
      minfilter="  ((miniute_5>='"+start+"' and miniute_5<='2359')  or (miniute_5<='"+end+"' and miniute_5>='0000') )";
    }

    StringBuffer pidliststr=new StringBuffer();
    String join="";
    for(String pid:pidlist)
    {
      pidliststr.append(join).append("'"+pid+"'");
      join=",";
    }
   
    String sql="select " +
        " thedate,pid,sum(p4pprice) as p4pprice,sum(p4pclick) as p4pclick,sum(aclick) as aclick,sum(apv) as apv,sum(p4ppv) as p4ppv " +
        " from rpt_quanjing_p4p_k2_realtime where thedate in ('"+dayList[0]+"','"+dayList[1]+"','"+dayList[2]+"','"+dayList[3]+"','"+dayList[4]+"') " +
        " and pid in ("+pidliststr+") and "+minfilter+" group by thedate,pid limit 0,8000 ";

    Connection con = DriverManager.getConnection("jdbc:mdrill://adhoc7.kgb.cm6:9999", "", "");

    Statement stmt = con.createStatement();
   

      MdrillQueryResultSet res = null;
   
      res = (MdrillQueryResultSet) stmt.executeQuery(sql);
 
      while (res.next()) {
        String thedate=res.getString("thedate");
        String pid=res.getString("pid");
        int index=dayIndex.get(thedate);
       
        PidStat stat=rtn.get(pid);
        if(stat==null)
        {
          stat=new PidStat();
          stat.start=start;
          stat.end=end;
          stat.dayList=dayList;
          stat.p4pprice=new double[dayList.length];
          stat.p4pclick=new double[dayList.length];
          stat.apv=new double[dayList.length];
          stat.p4ppv=new double[dayList.length];
          stat.aclick=new double[dayList.length];
          rtn.put(pid, stat);
        }
       
        stat.p4pprice[index]=Double.parseDouble(res.getString("p4pprice"));
        stat.p4pclick[index]=Double.parseDouble(res.getString("p4pclick"));
        stat.apv[index]=Double.parseDouble(res.getString("apv"));
        stat.p4ppv[index]=Double.parseDouble(res.getString("p4ppv"));
        stat.aclick[index]=Double.parseDouble(res.getString("p4pprice"));
      }
      con.close();
     
      return rtn;
  }

}
TOP

Related Classes of com.alimama.quanjingmonitor.mdrillImport.monitor.PidStat

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