package com.nexr.platform.search.provider; import com.nexr.platform.collector.record.LogRecord; import com.nexr.platform.collector.record.LogRecordKey; import com.nexr.platform.search.consumer.DataConsumer; import com.nexr.platform.search.router.MapRoutingEvent; import com.nexr.platform.search.router.RoutingEvent; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.SequenceFile; import java.io.IOException; import java.util.Properties; /** * Created by IntelliJ IDEA. * User: david * Date: 7/25/11 * Time: 10:23 AM */ public class CdrXContentDataProvider extends StreamDataProvider<RoutingEvent> { public static final String ROUTING_EVENT_DATA_TYPE = "routing.event.data.type"; /*public static final String LOG_RECORD_TIMESTAMP_FIELD_NAME = "log.record.timestamp.field.name"; public static final String LOG_RECORD_TIMESTAMP_FORMAT = "log.record.timestamp.format"; public static final String DEFAULT_LOG_RECORD_TIMESTAMP_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";*/ private SequenceFile.Reader _valueReader; private final Properties _prof; /*private final String _timestampFieldName; private final DateFormat _timestampFormat;*/ public CdrXContentDataProvider(String valuePath, Properties prof){ Configuration configuration = new Configuration(); _prof = prof; try { FileSystem fs = FileSystem.get(configuration); _valueReader = new SequenceFile.Reader(fs, new Path(valuePath), configuration); } catch (IOException e) { e.printStackTrace(); } _produceCount = 0; } @Override public DataConsumer.DataEvent<RoutingEvent> next() { MapRoutingEvent event = new MapRoutingEvent(_prof.getProperty(ROUTING_EVENT_DATA_TYPE, "TransactionLog")); try { LogRecordKey logRecordKey = new LogRecordKey(); LogRecord logRecord = new LogRecord(); if(_valueReader.next(logRecordKey, logRecord)) { event.setId(logRecordKey.getLogId()); /*try { event.setTimeStamp(LogRecordKey.formatter.parse(logRecordKey.getTime()).getTime()); } catch (ParseException e) { e.printStackTrace(); }*/ for(String field : logRecord.getFields()){ event.put(field, logRecord.getValue(field).trim()); } } else { event = null; } } catch (IOException e) { e.printStackTrace(); event = null; } if( event == null ) return null; _produceCount++; return new DataConsumer.DataEvent<RoutingEvent>(event); } @Override public void reset() { } }