package com.etao.adhoc.metric.load; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import com.alimama.mdrill.jdbc.MdrillQueryResultSet; import com.etao.adhoc.metric.Metric; /** * mvn install:install-file -Dfile=/home/lingning/yannian.mu/adhoc-metric/lib/com/alipay/higo/bluewhale-jdbc/1.0.2/bluewhale-jdbc-1.0.2.jar -DgroupId=com.alipay.higo -DartifactId=bluewhale-jdbc -Dversion=1.0.2 -Dpackaging=jar mvn install:install-file -Dfile=/home/lingning/yannian.mu/adhoc-metric/lib/com/alipay/higo/bluewhale-higo/1.0.2/bluewhale-higo-1.0.2.jar -DgroupId=com.alipay.higo -DartifactId=bluewhale-higo -Dversion=1.0.2 -Dpackaging=jar mvn -DskipTests clean package * @author yannian.mu * */ public class HigoQueryService implements QueryService { private Connection conn ; private Statement stmt; private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Map conf; public HigoQueryService(Map conf) { this.conf=conf; String url = (String) conf.get("metric.higo.conn.str"); try { Class.forName("com.alimama.mdrill.jdbc.MdrillDriver"); conn = DriverManager.getConnection(url, "", ""); stmt = conn.createStatement(); } catch (ClassNotFoundException e) { System.err.println("[" + sdf.format(new Date(System.currentTimeMillis())) + "] " + "Can not find class: com.alimama.mdrill.jdbc.MdrillDriver"); e.printStackTrace(); } catch (SQLException e) { System.err.println("[" + sdf.format(new Date(System.currentTimeMillis())) + "] " + "Error when building Higo Connection"); e.printStackTrace(); } } public Metric getMetric(String tablename, String thedate) throws IOException{ String sqlFormat=(String) conf.get("adhoc.metric.mdrill.sql."+tablename); Metric metric = null; String sql = String.format(sqlFormat, thedate); System.out.println("Higo SQL:" + sql); MdrillQueryResultSet rs; try { rs = (MdrillQueryResultSet) stmt.executeQuery(sql); if(rs.next()){ metric = new Metric(); metric.setThedate(thedate); metric.setType(1); metric.setTablename(tablename); metric.setLineCnt((long)Float.parseFloat(rs.getString(1))); metric.setImpression((long)Float.parseFloat(rs.getString(2))); metric.setFinClick((long)Float.parseFloat(rs.getString(3))); metric.setFinPrice(Float.parseFloat(rs.getString(4))); metric.setAlipayDirectNum((long)Float.parseFloat(rs.getString(5))); metric.setAlipayDirectAmt(Float.parseFloat(rs.getString(6))); metric.setAlipayIndirectNum((long)Float.parseFloat(rs.getString(7))); metric.setAlipayIndirectAmt(Float.parseFloat(rs.getString(8))); } } catch (SQLException e) { System.err.println("[" + sdf.format(new Date(System.currentTimeMillis())) + "] " + "Error when execute Higo SQL: " + sql); e.printStackTrace(); } return metric; } public void close() { if(conn != null) { try { if(! conn.isClosed()) conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block System.err.println("[" + sdf.format(new Date(System.currentTimeMillis())) + "] " + "Error when close Connection"); e.printStackTrace(); } } } public String getName() { return "HIGO"; } }