package org.yamcs.artemis;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;
import org.apache.activemq.artemis.api.core.ActiveMQException;
import org.apache.activemq.artemis.api.core.SimpleString;
import org.yamcs.YConfiguration;
import org.yamcs.api.YamcsApiException;
import org.yamcs.api.artemis.Protocol;
import org.yamcs.api.artemis.YamcsClient;
import org.yamcs.api.artemis.YamcsSession;
import org.yamcs.artemis.ArtemisServer;
import org.yamcs.protobuf.Yamcs.Event;
import org.yamcs.protobuf.Yamcs.Event.EventSeverity;
import org.yamcs.protobuf.Yamcs.ProtoDataType;
import org.yamcs.utils.TimeEncoding;
/**
*
* Sends some events to yarch
*
*/
public class EventSim {
YamcsClient msgClient;
volatile boolean quitting;
final SimpleString address;
EventSim(String instance, String host, int port) throws YamcsApiException, ActiveMQException {
YamcsSession ys=YamcsSession.newBuilder().setConnectionParams(host,port).build();
msgClient=ys.newClientBuilder().setDataProducer(true).build();
address=Protocol.getEventRealtimeAddress(instance);
}
static String getFortune() {
try {
StringBuilder sb=new StringBuilder();
Process p=Runtime.getRuntime().exec("fortune");
BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
char[] chars = new char[1024];
int read;
while((read=br.read(chars)) >-1) {
sb.append(chars,0,read);
}
return sb.toString();
} catch (IOException e) {
return e.getMessage();
}
}
public void sendEvents() throws YamcsApiException, IOException, InterruptedException {
Random random=new Random();
int i=0;
while(!quitting) {
Event event=Event.newBuilder().setGenerationTime(TimeEncoding.getWallclockTime())
.setSource("EventSim").setSeqNumber(i++)
.setReceptionTime(TimeEncoding.getWallclockTime())
.setSeverity(EventSeverity.valueOf(random.nextInt(3)))
.setType("Fortune").setMessage(getFortune())
.build();
msgClient.sendData(address, ProtoDataType.EVENT, event);
Thread.sleep(1000);
}
}
public void stop() {
quitting=true;
}
static void printUsageAndExit() {
System.err.println("Usage: event-sim.sh [-h host -p port] instance");
System.exit(-1);
}
/**
* @param args
* @throws ActiveMQException
* @throws IOException
*/
public static void main(String[] args) throws Exception {
int i=0;
String host="localhost";
int port=5445;
String instance=null;
while(i<args.length) {
if("-h".equals(args[i])) {
host=args[++i];
} else if("-p".equals(args[i])) {
port=Integer.parseInt(args[++i]);
} else {
instance=args[i];
}
i++;
}
if(instance==null) printUsageAndExit();
YConfiguration.setup();
ArtemisServer.setupArtemis();
TimeEncoding.setUp();
// Configuration.setup();
new EventSim(instance, host, port).sendEvents();
}
}