package org.gbif.occurrence.processor.messaging; import org.gbif.common.messaging.AbstractMessageCallback; import org.gbif.common.messaging.api.messages.VerbatimPersistedMessage; import org.gbif.occurrence.processor.FragmentProcessor; import org.gbif.occurrence.processor.InterpretedProcessor; import java.util.concurrent.TimeUnit; import com.google.inject.Inject; import com.google.inject.Singleton; import com.yammer.metrics.Metrics; import com.yammer.metrics.core.Timer; import com.yammer.metrics.core.TimerContext; import org.slf4j.MDC; import static com.google.common.base.Preconditions.checkNotNull; /** * A MessageCallback implementation for VerbatimPersistedMessages. Hands off to the InterpretedProcessor passed in * during construction. */ @Singleton public class VerbatimPersistedListener extends AbstractMessageCallback<VerbatimPersistedMessage> { private final InterpretedProcessor interpretedProcessor; private final Timer processTimer = Metrics.newTimer(FragmentProcessor.class, "interp process time", TimeUnit.MILLISECONDS, TimeUnit.SECONDS); @Inject public VerbatimPersistedListener(InterpretedProcessor interpretedProcessor) { checkNotNull(interpretedProcessor, "interpretedProcessor can't be null"); this.interpretedProcessor = interpretedProcessor; } @Override public void handleMessage(VerbatimPersistedMessage message) { final TimerContext context = processTimer.time(); try { MDC.put("datasetUuid", message.getDatasetUuid().toString()); MDC.put("attempt", String.valueOf(message.getAttempt())); interpretedProcessor.buildInterpreted(message.getOccurrenceKey(), message.getStatus(), true, message.getAttempt(), message.getDatasetUuid()); } finally { context.stop(); } } }