/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.tanaguru.kafka.messaging;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import kafka.consumer.ConsumerIterator;
import kafka.consumer.KafkaStream;
import org.tanaguru.entity.audit.Audit;
import org.tanaguru.entity.parameterization.Parameter;
import org.apache.log4j.Logger;
import org.tanaguru.entity.audit.Audit;
import org.tanaguru.entity.audit.ProcessResult;
import org.tanaguru.entity.parameterization.Parameter;
import org.tanaguru.entity.service.audit.AuditDataService;
import org.tanaguru.entity.service.audit.ProcessResultDataService;
import org.tanaguru.entity.service.parameterization.ParameterDataService;
import org.tanaguru.entity.service.parameterization.ParameterElementDataService;
import org.tanaguru.kafka.util.AuditPageConsumed;
import org.tanaguru.kafka.util.MessageConsumerLimit;
import org.tanaguru.kafka.util.MessageEvent;
import org.tanaguru.kafka.util.MessageKafka;
import org.tanaguru.kafka.util.MessageRest;
import org.tanaguru.service.AuditService;
import org.tanaguru.kafka.util.ParameterUtils;
import org.tanaguru.service.AuditServiceListener;
/**
*
* @author omokeddem at oceaneconsulting
*
*/
public class Consumer implements Runnable {
private KafkaStream m_stream;
private int m_threadNumber;
private String messagesType;
private ParameterDataService parameterDataService;
private AuditService auditService;
private ParameterElementDataService parameterElementDataService;
private AuditDataService auditDataService;
private ProcessResultDataService processResultDataService;
private AuditPageConsumed auditPageConsumed;
private String ref;
private String level;
private MessageConsumerLimit messageConsumerLimit;
/**
* logger
*/
private static final Logger logger = Logger.getLogger(Consumer.class);
public Consumer(KafkaStream a_stream, int a_threadNumber, String a_messagesType, ParameterDataService a_parameterDataService, AuditService a_auditService,
ParameterElementDataService a_parameterElementDataService, AuditDataService a_auditDataService,
ProcessResultDataService a_processResultDataService, AuditPageConsumed a_auditPageConsumed,
String a_ref, String a_level) {
m_threadNumber = a_threadNumber;
m_stream = a_stream;
messagesType = a_messagesType;
parameterDataService = a_parameterDataService;
auditService = a_auditService;
parameterElementDataService = a_parameterElementDataService;
auditDataService = a_auditDataService;
processResultDataService = a_processResultDataService;
auditPageConsumed = a_auditPageConsumed;
ref = a_ref;
level = a_level;
messageConsumerLimit = new MessageConsumerLimit();
auditPageConsumed.setMessageConsumerLimit(messageConsumerLimit);
}
public void run() {
String referentiel = "";
String level = "";
ConsumerIterator<byte[], byte[]> it = m_stream.iterator();
while (it.hasNext()) {
if (messagesType.equals("Event") && messageConsumerLimit.getCurrentNumberMessagesEvent() < 3) {
String message = new String(it.next().message(), StandardCharsets.UTF_8);
logger.debug("[AUDIT][IN] A message have been received..." + message);
if (MessageEvent.isValide(message)) {
messageConsumerLimit.messageEventConsumed();
logger.debug("number of messages from consumer Event : " + messageConsumerLimit.getCurrentNumberMessagesEvent());
logger.debug("[AUDIT][IN] URL received Event..." + MessageEvent.getUrl(message));
if (MessageEvent.getReferentiel(message).equals("")) {
referentiel = ref;
} else {
referentiel = MessageEvent.getReferentiel(message);
}
if (MessageEvent.getLevel(message).equals("")) {
level = this.level;
} else {
level = MessageEvent.getLevel(message);
}
Set<Parameter> paramSet = ParameterUtils.getParameterSetFromAuditLevel(referentiel,
level, parameterElementDataService, parameterDataService);
Set<Parameter> parameters = ParameterUtils.getAuditPageParameterSet(paramSet, parameterElementDataService, parameterDataService);
auditPageConsumed.auditPageEvent(message, parameters, referentiel, level);
}
} else if (messagesType.equals("Rest") && messageConsumerLimit.getCurrentNumberMessagesRest() < 3) {
String message = new String(it.next().message(), StandardCharsets.UTF_8);
logger.debug("[AUDIT][IN] A message have been received..." + message);
if (MessageRest.isValide(message)) {
messageConsumerLimit.messageRestConsumed();
logger.debug("number of messages from consumer Rest : " + messageConsumerLimit.getCurrentNumberMessagesRest());
logger.debug("[AUDIT][IN] URL received Rest ..." + MessageRest.getUrl(message));
if (MessageRest.getReferentiel(message).equals("")) {
referentiel = ref;
} else {
referentiel = MessageRest.getReferentiel(message);
}
if (MessageRest.getLevel(message).equals("")) {
level = this.level;
} else {
level = MessageRest.getLevel(message);
}
Set<Parameter> paramSet = ParameterUtils.getParameterSetFromAuditLevel(referentiel,
level, parameterElementDataService, parameterDataService);
Set<Parameter> parameters = ParameterUtils.getAuditPageParameterSet(paramSet, parameterElementDataService, parameterDataService);
logger.debug("getTblMarker ..." + MessageRest.getDtTblMarker(message));
logger.debug("getCplxTblMarker ..." + MessageRest.getCplxTblMarker(message));
logger.debug("getPrTblMarker ..." + MessageRest.getPrTblMarker(message));
logger.debug("getDcrImgMarker ..." + MessageRest.getDcrImgMarker(message));
logger.debug("getInfImgMarker ..." + MessageRest.getInfImgMarker(message));
logger.debug("getScreenWidth ..." + MessageRest.getScreenWidth(message));
logger.debug("getScreenHeight ..." + MessageRest.getScreenHeight(message));
logger.debug("getDescriptionRef ..." + MessageRest.getDescriptionRef(message));
logger.debug("getHtmlTags ..." + MessageRest.getHtmlTags(message));
ParameterUtils.initializePAInputOptions(MessageRest.getDtTblMarker(message), MessageRest.getCplxTblMarker(message), MessageRest.getPrTblMarker(message),
MessageRest.getDcrImgMarker(message), MessageRest.getInfImgMarker(message), MessageRest.getScreenWidth(message).toString(),
MessageRest.getScreenHeight(message).toString(), parameters);
auditPageConsumed.auditPageRest(message, parameters, referentiel, level);
}
}
}
logger.error("Shutting down Thread: " + m_threadNumber);
}
}