package apex.benchmark;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.datatorrent.api.DefaultInputPort;
import com.datatorrent.api.DefaultOutputPort;
import com.datatorrent.common.util.BaseOperator;
public class TupleToDimensionTupleConverter extends BaseOperator
{
private static final transient Logger logger = LoggerFactory.getLogger(TupleToDimensionTupleConverter.class);
protected long invalidTuples = 0;
protected transient long invalidTuplesInWindow = 0;
public transient DefaultInputPort<Tuple> inputPort = new DefaultInputPort<Tuple>()
{
@Override
public void process(Tuple tuple)
{
processTuple(tuple);
}
};
public final transient DefaultOutputPort<DimensionTuple> outputPort = new DefaultOutputPort<DimensionTuple>();
public void processTuple(Tuple tuple)
{
DimensionTuple dt = DimensionTuple.fromTuple(tuple);
if (dt == null) {
invalidTuples++;
invalidTuplesInWindow++;
return;
}
outputPort.emit(dt);
}
@Override
public void beginWindow(long windowId)
{
invalidTuplesInWindow = 0;
}
@Override
public void endWindow()
{
if (invalidTuplesInWindow > 0) {
logger.info("Invalid tuples in this window: {}; Total invalid tuples: {}", invalidTuplesInWindow, invalidTuples);
}
}
}