import java.io.IOException; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.util.Arrays; import java.util.Random; import java.util.Set; import java.util.TreeSet; import javax.swing.SwingWorker; import multiplexer.jmx.client.ConnectException; import multiplexer.jmx.client.JmxClient; import multiplexer.jmx.client.SendingMethod; import multiplexer.jmx.exceptions.NoPeerForTypeException; import multiplexer.protocol.Protocol.MultiplexerMessage; import org.apache.log4j.Logger; import org.signalml.multiplexer.protocol.SvarogConstants; import org.signalml.multiplexer.protocol.SvarogProtocol.Tag; import org.signalml.multiplexer.protocol.SvarogProtocol.Variable; import org.signalml.multiplexer.protocol.SvarogProtocol.VariableVector; public class TagSeqMock { protected static final Logger logger = Logger.getLogger(TagSeqMock.class); protected JmxClient connection; protected MockWorker worker; protected long milis; static String createChannelList() { int n = (int) Math.round((Math.random() * 20)); Set<Integer> chan = new TreeSet<Integer>(); while (chan.size()<n) chan.add((int) Math.floor((Math.random() * 20)) + 1); Integer[] ch = new Integer[n]; chan.toArray(ch); Arrays.sort(ch); StringBuffer buf = new StringBuffer(); for (int i=0; i<n-1; i++) buf.append(ch[i]).append(" "); buf.append(ch[n-1]); return buf.toString(); } static String randomString() { int n = (int) Math.round((Math.random() * 16)); String str = new String("QAa0bcLdUK2eHfJgTP8XhiFj61DOklNm9nBoI5pGqYVrs3CtSuMZvwWx4yE7zR"); StringBuffer sb = new StringBuffer(); Random r = new Random(); int te = 0; for (int i=1; i<=n; i++) { te = r.nextInt(62); sb.append(str.charAt(te)); } return sb.toString(); } public class MockWorker extends SwingWorker<Void, Void> { public MockWorker() { super(); } @Override protected Void doInBackground() throws Exception { double time = (double) milis / 1000.0; Thread.sleep((long) time); for (int i=0; true; i++) { logger.info("iter: " + i); Tag.Builder tagBuilder = Tag.newBuilder(); tagBuilder.setStartTimestamp(time); logger.info("start time: " + time); time += (double) milis / 1000.0; tagBuilder.setEndTimestamp(time); logger.info("end time: " + time); tagBuilder.setName("tag" + i); tagBuilder.setChannels(createChannelList()); VariableVector.Builder variableVectorBuilder = VariableVector.newBuilder(); Variable.Builder variableBuilder = Variable.newBuilder(); variableBuilder.setKey("abc"); variableBuilder.setValue(randomString()); variableVectorBuilder.addVariables(variableBuilder.build()); variableBuilder = Variable.newBuilder(); variableBuilder.setKey("def"); variableBuilder.setValue(randomString()); variableVectorBuilder.addVariables(variableBuilder.build()); tagBuilder.setDesc(variableVectorBuilder.build()); Tag tag = tagBuilder.build(); MultiplexerMessage mm = connection.createMessage(tag.toByteString(), SvarogConstants.MessageTypes.TAG); connection.send(mm, SendingMethod.THROUGH_ALL); Thread.sleep(milis); } } } @Override protected void finalize() throws Throwable { connection.shutdown(); super.finalize(); } /** * @param args * @throws ConnectException * @throws NoPeerForTypeException * @throws InterruptedException * @throws IOException */ public static void main(String[] args) throws ConnectException, NoPeerForTypeException, InterruptedException { TagSeqMock mock = new TagSeqMock(); mock.milis = Long.parseLong(args[0]); logger.info("Connecting ... "); mock.connection = new JmxClient(SvarogConstants.PeerTypes.TAGS_SENDER); SocketAddress socketAddress = new InetSocketAddress("127.0.0.1", 31889); mock.connection.connect(socketAddress); logger.info("Connected!"); mock.worker = mock.new MockWorker(); mock.worker.execute(); } }