package com.neverwinterdp.scribengin.dataflow.test; import java.util.concurrent.atomic.AtomicLong; import com.beust.jcommander.Parameter; import com.neverwinterdp.scribengin.Record; import com.neverwinterdp.scribengin.ScribenginClient; import com.neverwinterdp.scribengin.storage.StorageDescriptor; import com.neverwinterdp.tool.message.MessageGenerator; import com.neverwinterdp.util.JSONSerializer; abstract public class DataflowSourceGenerator implements Runnable { @Parameter(names = "--source-name", description = "The storage source name, usually the database name or dir name of the storage") protected String sourceName = "hello"; @Parameter(names = "--source-num-of-stream", description = "The number of stream for the source") protected int numberOfStream = 2; @Parameter(names = "--source-max-records-per-stream", description = "The maximum number of record per stream") protected int maxRecordsPerStream; @Parameter(names = "--source-write-period", description = "The period that the generator should produce a record") protected long writePeriod; @Parameter(names = "--source-max-duration", description = "The maximum number of record per stream") protected long maxDuration; private long numberOfGeneratedRecords ; public String getSourceName() { return sourceName; } public int getNumberOfStream() { return numberOfStream; } public int getMaxRecordsPerStream() { return maxRecordsPerStream; } public long getWritePeriod() { return writePeriod; } public long getMaxDuration() { return maxDuration; } public long getNumberOfGeneratedRecords() { return numberOfGeneratedRecords; } public void setNumberOfGeneratedRecords(long numberOfGeneratedRecords) { this.numberOfGeneratedRecords = numberOfGeneratedRecords; } abstract public StorageDescriptor getSourceDescriptor(); abstract public void init(ScribenginClient scribenginClient) ; abstract public void run() ; abstract public void runInBackground() ; abstract public void populate(DataflowTestReport report) ; static public class RecordMessageGenerator implements MessageGenerator { MessageGenerator defaultMessageGenerator = new MessageGenerator.DefaultMessageGenerator() ; static public AtomicLong idTracker = new AtomicLong() ; public byte[] nextMessage(int partition, int messageSize) { byte[] messagePayload = defaultMessageGenerator.nextMessage(partition, messageSize); String key = "partition=" + partition + ",id=" + idTracker.getAndIncrement(); return JSONSerializer.INSTANCE.toString(new Record(key, messagePayload)).getBytes(); } } }