use of com.linkedin.databus2.producers.db.EventSourceStatisticsIface in project databus by linkedin.
the class TestGoldenGateEventProducer method testGGProducerStats.
@Test
public void testGGProducerStats() throws InvalidConfigException, UnsupportedKeyException, DatabusException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException {
short[] sourceIds = new short[] { 505, 506 };
String[] sourceNames = new String[] { "source1", "source2" };
PhysicalSourceStaticConfig pssc = buildSimplePssc(sourceIds, sourceNames, "gg:///tmp:xxx");
long scn = 10;
DbusEventBufferAppendable mb = createBufMult(pssc);
// start producer
GoldenGateEventProducer gg = new GoldenGateEventProducer(pssc, null, mb, null, null);
Object handleXmlCallbackObject = getHandleXmlCallbackInnerInstance(gg);
Method method = getOnTransactionEndMethod();
// generates the updates
List<String> keys = new ArrayList<String>();
keys.add("keys1");
// SCN = 10
List<TransactionState.PerSourceTransactionalUpdate> dbUpdates = generateUpdates(new short[] { sourceIds[0] }, keys, scn);
// SCN = 11
List<TransactionState.PerSourceTransactionalUpdate> dbUpdates1 = generateUpdates(new short[] { sourceIds[1] }, keys, scn + 1);
// SCN = 12
List<TransactionState.PerSourceTransactionalUpdate> dbUpdates2 = generateUpdates(new short[] { sourceIds[1] }, keys, scn + 2);
long timestamp = System.currentTimeMillis() * DbusConstants.NUM_NSECS_IN_MSEC;
// gg.addEventToBuffer(dbUpdates, new TransactionInfo(0, 0, timestamp, scn));
// gg.addEventToBuffer(dbUpdates1, new TransactionInfo(0, 0, timestamp+1, scn+1));
method.invoke(handleXmlCallbackObject, new Object[] { dbUpdates, new TransactionInfo(0, 0, timestamp, scn) });
method.invoke(handleXmlCallbackObject, new Object[] { dbUpdates1, new TransactionInfo(0, 0, timestamp + 1, scn + 1) });
// THis is an extra-call but the corresponding events will not be added to EVB.
// This is needed to flush the events in the above call to EVB
method.invoke(handleXmlCallbackObject, new Object[] { dbUpdates2, new TransactionInfo(0, 0, timestamp + 1, scn + 2) });
for (EventSourceStatisticsIface si : gg.getSources()) {
EventSourceStatistics ss = si.getStatisticsBean();
LOG.info(si.getSourceName() + ": scn=" + ss.getMaxScn() + ",averageSize=" + ss.getAvgEventSerializedSize() + ",numErrors=" + ss.getNumErrors() + ",totalEvents=" + ss.getNumTotalEvents() + ",averageFactTime=" + ss.getAvgEventFactoryTimeMillisPerEvent() + ",timeSinceDb=" + ss.getTimeSinceLastDBAccess());
if (si.getSourceId() == 505) {
Assert.assertEquals(6, ss.getAvgEventSerializedSize());
Assert.assertEquals(0, ss.getNumErrors());
Assert.assertEquals(1, ss.getNumTotalEvents());
Assert.assertEquals(0, ss.getAvgEventFactoryTimeMillisPerEvent());
// we are not
Assert.assertEquals(0, ss.getAvgEventFactoryTimeMillisPerEvent());
// really
// reading
Assert.assertEquals(10, ss.getMaxScn());
}
if (si.getSourceId() == 506) {
Assert.assertEquals(6, ss.getAvgEventSerializedSize());
Assert.assertEquals(0, ss.getNumErrors());
Assert.assertEquals(1, ss.getNumTotalEvents());
Assert.assertEquals(0, ss.getAvgEventFactoryTimeMillisPerEvent());
// we are not
Assert.assertEquals(0, ss.getAvgEventFactoryTimeMillisPerEvent());
// really
// reading
Assert.assertEquals(11, ss.getMaxScn());
}
if (si.getSourceId() == GoldenGateEventProducer.GLOBAL_SOURCE_ID) {
Assert.assertEquals(6, ss.getAvgEventSerializedSize());
Assert.assertEquals(0, ss.getNumErrors());
Assert.assertEquals(2, ss.getNumTotalEvents());
Assert.assertEquals(0, ss.getAvgEventFactoryTimeMillisPerEvent());
// we are not
Assert.assertEquals(0, ss.getAvgEventFactoryTimeMillisPerEvent());
// really
// reading
Assert.assertEquals(11, ss.getMaxScn());
}
}
long approximateTimeSinceLastTransactionMs = System.currentTimeMillis() - timestamp / DbusConstants.NUM_NSECS_IN_MSEC;
long diff = gg.getParserStats().getTimeSinceLastTransactionMs() - approximateTimeSinceLastTransactionMs;
// somewhat
Assert.assertTrue("time diff is too big:" + diff, diff >= 0 && diff < 30);
// NS)
return;
}
use of com.linkedin.databus2.producers.db.EventSourceStatisticsIface in project databus by linkedin.
the class TestGoldenGateEventProducer method testStats.
private static void testStats(GoldenGateEventProducer gg, EventStatsValues... eventStatsValues) {
Map<Short, EventStatsValues> eventStatsValuesMap = new HashMap<Short, EventStatsValues>();
for (EventStatsValues e : eventStatsValues) {
eventStatsValuesMap.put(e.getSrcId(), e);
}
for (EventSourceStatisticsIface si : gg.getSources()) {
EventSourceStatistics ss = si.getStatisticsBean();
LOG.info(si.getSourceName() + ": scn=" + ss.getMaxScn() + ",averageSize=" + ss.getAvgEventSerializedSize() + ",numErrors=" + ss.getNumErrors() + ",totalEvents=" + ss.getNumTotalEvents() + ",averageFactTime=" + ss.getAvgEventFactoryTimeMillisPerEvent() + ",timeSinceDb=" + ss.getTimeSinceLastDBAccess());
EventStatsValues e = eventStatsValuesMap.get(si.getSourceId());
Assert.assertEquals(e.getAvgEventSize(), ss.getAvgEventSerializedSize());
Assert.assertEquals(e.getNumErrors(), ss.getNumErrors());
Assert.assertEquals(e.getNumTotalEvents(), ss.getNumTotalEvents());
Assert.assertEquals(e.getAvgEventFactoryTimeMillisPerEvent(), ss.getAvgEventFactoryTimeMillisPerEvent());
Assert.assertEquals(e.getMaxScn(), ss.getMaxScn());
}
}
Aggregations