package com.neverwinterdp.scribengin.cluster;
import org.slf4j.Logger;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.neverwinterdp.scribengin.partitioner.DatePartitioner;
import com.neverwinterdp.scribengin.scribeconsumer.ScribeConsumer;
import com.neverwinterdp.server.module.ModuleProperties;
import com.neverwinterdp.server.service.AbstractService;
import com.neverwinterdp.util.LoggerFactory;
public class ScribeConsumerClusterService extends AbstractService {
private Logger logger ;
private ScribeConsumer sc;
private ScribeConsumerClusterServiceInfo serviceInfo;
@Inject
public void init(Injector container,
LoggerFactory factory,
ModuleProperties moduleProperties,
ScribeConsumerClusterServiceInfo serviceInfo) throws Exception {
this.logger = factory.getLogger(ScribeConsumerClusterService.class) ;
this.serviceInfo = serviceInfo ;
}
public void start() throws Exception {
logger.info("Starting ScribeConsumer");
sc = new ScribeConsumer(this.serviceInfo.getPreCommitPathPrefix(),
this.serviceInfo.getCommitPathPrefix(),
this.serviceInfo.getTopic(),
this.serviceInfo.getPartition(),
this.serviceInfo.getBrokerList(),
this.serviceInfo.getCommitCheckPointInterval(),
this.serviceInfo.getCleanStart(),
this.serviceInfo.getHdfsPath());
if(this.serviceInfo.getDatePartitioner() != null){
System.err.println(this.serviceInfo.getDatePartitioner());
sc.setPartitioner(new DatePartitioner(this.serviceInfo.getDatePartitioner()));
}
sc.init();
if(this.serviceInfo.getCleanStart()){
sc.cleanStart(true);
}
sc.start();
logger.info("Starting ScribeConsumer Complete");
}
public Thread.State getServiceState(){
try{
return sc.getServerState();
} catch(Exception e){
logger.error("Something went wrong getting the server's state: "+e.getMessage());
}
//Worst case scenario
return null;
}
public void stop() {
logger.info("Stopping ScribeConsumer");
sc.stop();
logger.info("Stopping ScribeConsumer Complete");
}
}