package com.alimama.mdrillImport; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.apache.solr.common.SolrInputDocument; import com.alimama.mdrill.ui.service.MdrillService; import backtype.storm.spout.SpoutOutputCollector; import backtype.storm.task.TopologyContext; import backtype.storm.topology.IRichSpout; import backtype.storm.topology.OutputFieldsDeclarer; import backtype.storm.tuple.Fields; public class ImportSpoutLocalForParseTest{ private static Logger LOG = Logger.getLogger(ImportSpoutLocalForParseTest.class); private static final long serialVersionUID = 1L; private ImportReader reader=null; private DataParser parse=null; private String confPrefix; public ImportSpoutLocalForParseTest(String confPrefix) { this.confPrefix=confPrefix; } public void open(Map conf, TopologyContext context) { try { parse=(DataParser) Class.forName(String.valueOf(conf.get(this.confPrefix+"-parse"))).newInstance(); parse.init(true, conf, context); } catch (Throwable e1) { LOG.error(this.confPrefix+ " DataParser",e1); } try { this.reader=new ImportReader(conf, confPrefix, parse, 0, 1); } catch (IOException e) { LOG.error("TTReader",e); } } private boolean putdata(DataParser.DataIter log) { long ts=log.getTs(); BoltStatKey key=new BoltStatKey(log.getGroup()); BoltStatVal val=new BoltStatVal(log.getSum(),ts); SolrInputDocument doc=new SolrInputDocument(); String[] groupnames=parse.getGroupName(); for(int i=0;i<groupnames.length&&i<key.list.length;i++) { doc.addField(groupnames[i], key.list[i]); } String[] statNames=parse.getSumName(); for(int i=0;i<statNames.length&&i<val.list.length;i++) { doc.addField(statNames[i], val.list[i]); } System.out.println(doc.toString()); return true; } public synchronized void nextTuple() { try { List ttdata = this.reader.read(); if(ttdata==null) { return ; } for(Object o:ttdata) { DataParser.DataIter pv=(DataParser.DataIter)o; while(true) { this.putdata(pv); if(!pv.next()) { break; } } } } catch (Throwable e) { this.sleep(100); } } private void sleep(int i) { try { Thread.sleep(i); } catch (InterruptedException e1) { } } }