package org.yamcs; import org.yamcs.api.AbstractEventProducer; import org.yamcs.archive.EventRecorder; import org.yamcs.protobuf.Yamcs.Event; import org.yamcs.time.TimeService; import org.yamcs.utils.TimeEncoding; import org.yamcs.yarch.Stream; import org.yamcs.yarch.Tuple; import org.yamcs.yarch.TupleDefinition; import org.yamcs.yarch.YarchDatabase; /** * Event producer used from inside Yamcs to report events. * It writes directly to the realtime_event stream * * * @author nm * */ public class StreamEventProducer extends AbstractEventProducer { final Stream realtimeEventStream; final TupleDefinition tdef; final TimeService timeService; public StreamEventProducer(String yamcsInstance) { realtimeEventStream = YarchDatabase.getInstance(yamcsInstance).getStream(EventRecorder.REALTIME_EVENT_STREAM_NAME); if(realtimeEventStream==null) throw new ConfigurationException("Cannot find a stream named '"+EventRecorder.REALTIME_EVENT_STREAM_NAME+"' in instance "+yamcsInstance); tdef=realtimeEventStream.getDefinition(); timeService = YamcsServer.getTimeService(yamcsInstance); } @Override public void sendEvent(Event event) { Tuple t=new Tuple(tdef, new Object[]{event.getGenerationTime(), event.getSource(), event.getSeqNumber(), event}); realtimeEventStream.emitTuple(t); } @Override public void close() { } @Override public long getMissionTime() { long t; if(timeService==null) { t = TimeEncoding.getWallclockTime(); } else { t= timeService.getMissionTime(); } return t; } }