package com.neverwinterdp.scribengin.dataflow.test; import com.neverwinterdp.kafka.tool.KafkaMessageSendTool; import com.neverwinterdp.kafka.tool.KafkaTopicReport; import com.neverwinterdp.scribengin.ScribenginClient; import com.neverwinterdp.scribengin.dataflow.test.DataflowTestReport.DataflowSourceGeneratorReport; import com.neverwinterdp.scribengin.storage.StorageDescriptor; public class DataflowKafkaSourceGenerator extends DataflowSourceGenerator { private KafkaMessageSendTool sendTool; private String zkConnect ; @Override public void init(ScribenginClient scribenginClient) { zkConnect = scribenginClient.getRegistry().getRegistryConfig().getConnect(); String[] sendArgs = { "--topic", sourceName, "--num-partition", Integer.toString(numberOfStream), "--send-period", Long.toString(writePeriod), "--send-max-per-partition", Integer.toString(maxRecordsPerStream), "--send-max-duration", Long.toString(maxDuration), "--zk-connect", zkConnect }; sendTool = new KafkaMessageSendTool(sendArgs); sendTool.setMessageGenerator(new RecordMessageGenerator()); setNumberOfGeneratedRecords(numberOfStream * maxRecordsPerStream); } @Override public void run() { sendTool.run(); } @Override public void runInBackground() { sendTool.runAsDeamon(); } @Override public void populate(DataflowTestReport report) { KafkaTopicReport topicReport = sendTool.getReport(); DataflowSourceGeneratorReport sourceReport = report.getSourceGeneratorReport() ; sourceReport.setSourceName(topicReport.getTopic()); sourceReport.setNumberOfStreams(topicReport.getNumOfPartitions()); sourceReport.setWriteCount(topicReport.getProducerReport().getMessageSent()); sourceReport.setDuration(topicReport.getProducerReport().getRunDuration()); } @Override public StorageDescriptor getSourceDescriptor() { StorageDescriptor sourceDescriptor = new StorageDescriptor("kafka") ; sourceDescriptor.attribute("name", "DataflowKafkaSourceGenerator"); sourceDescriptor.attribute("topic", sourceName); sourceDescriptor.attribute("zk.connect", zkConnect); return sourceDescriptor; } }