Package com.linkedin.databus2.core.monitoring

Source Code of com.linkedin.databus2.core.monitoring.TestDbusEventStatsCollectorPartitioner$TestStatsCollectorCallback

package com.linkedin.databus2.core.monitoring;

import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

import junit.framework.Assert;

import org.apache.log4j.Logger;
import org.testng.annotations.Test;

import com.linkedin.databus.core.DbusEvent;
import com.linkedin.databus.core.DbusEventInternalReadable;
import com.linkedin.databus.core.DbusEventInternalWritable;
import com.linkedin.databus.core.InvalidEventException;
import com.linkedin.databus.core.data_model.PhysicalPartition;
import com.linkedin.databus.core.monitoring.StatsCollectorCallback;
import com.linkedin.databus.core.monitoring.mbean.DbusEventsStatisticsCollector;
import com.linkedin.databus.core.monitoring.mbean.DbusEventStatsCollectorsPartitioner;
import com.linkedin.databus.core.monitoring.mbean.DbusEventsTotalStats;
import com.linkedin.databus.core.monitoring.mbean.StatsCollectors;
import com.linkedin.databus.core.test.DbusEventCorrupter;
import com.linkedin.databus.core.test.DbusEventGenerator;
import com.linkedin.databus.core.util.RngUtils;

public class TestDbusEventStatsCollectorPartitioner
{
  public static final String MODULE = TestDbusEventStatsCollectorPartitioner.class.getName();
  private static final Logger LOG = Logger.getLogger(MODULE);
 
  @Test
  public void testStatsCollectorPartitionerSingleDb()
  {
    DbusEventStatsCollectorsPartitioner collector =
        new DbusEventStatsCollectorsPartitioner(1, ":inbound", null);

    TestStatsCollectorCallback callback = new TestStatsCollectorCallback();
    collector.registerStatsCallback(callback);

    // Add 2 collectors for DB1
    PhysicalPartition p1 = new PhysicalPartition(1, "db1");
    PhysicalPartition p2 = new PhysicalPartition(2, "db1");
    DbusEventsStatisticsCollector c1 =
        new DbusEventsStatisticsCollector(1, "db1:1", true, false, null);
    DbusEventsStatisticsCollector c2 =
        new DbusEventsStatisticsCollector(1, "db1:2", true, false, null);
    collector.addStatsCollector(p1, c1);
    collector.addStatsCollector(p2, c2);

    StatsWriter w1 = new StatsWriter(c1);
    StatsWriter w2 = new StatsWriter(c2);
    w1.addEvents(2, 2, 100);
    w2.addEvents(2, 2, 200);
    StatsCollectors<DbusEventsStatisticsCollector> col =
        collector.getDBStatsCollector("db1");
    Assert.assertNotNull(col);
    col.mergeStatsCollectors();
    LOG.info("Merged Stats : " + col.getStatsCollector().getTotalStats());
    LOG.info("C1 Stats : " + c1.getTotalStats());
    LOG.info("C2 Stats : " + c2.getTotalStats());
    DbusEventsTotalStats s = col.getStatsCollector().getTotalStats();
    Assert.assertEquals("Total Events", 8, s.getNumDataEvents());
    Assert.assertEquals("Sys Events", 4, s.getNumSysEvents());
    Assert.assertEquals("Min Scn", 101, s.getMinScn());
    Assert.assertEquals("Max Scn", 205, s.getMaxScn());
    Assert.assertEquals("Num Stats Callback", 1, callback.getCollectorsAddedList().size());
    collector.removeAllStatsCollector();
    Assert.assertEquals("Num Stats Callback", 1, callback.getCollectorsRemovedList()
                                                         .size());
  }

  @Test
  public void testStatsCollectorPartitionerMultipleDbs()
  {
    DbusEventStatsCollectorsPartitioner collector =
        new DbusEventStatsCollectorsPartitioner(1, ":inbound", null);

    TestStatsCollectorCallback callback = new TestStatsCollectorCallback();
    collector.registerStatsCallback(callback);

    // Add 2 collectors for DB1
    PhysicalPartition p1 = new PhysicalPartition(1, "db1");
    PhysicalPartition p2 = new PhysicalPartition(2, "db1");
    DbusEventsStatisticsCollector c1 =
        new DbusEventsStatisticsCollector(1, "db1:1", true, false, null);
    DbusEventsStatisticsCollector c2 =
        new DbusEventsStatisticsCollector(1, "db1:2", true, false, null);
    collector.addStatsCollector(p1, c1);
    collector.addStatsCollector(p2, c2);

    // Add 2 collectors for DB2
    PhysicalPartition p3 = new PhysicalPartition(1, "db2");
    PhysicalPartition p4 = new PhysicalPartition(2, "db2");
    DbusEventsStatisticsCollector c3 =
        new DbusEventsStatisticsCollector(1, "db2:1", true, false, null);
    DbusEventsStatisticsCollector c4 =
        new DbusEventsStatisticsCollector(1, "db2:2", true, false, null);
    collector.addStatsCollector(p3, c3);
    collector.addStatsCollector(p4, c4);

    // Add 2 collectors for DB3
    PhysicalPartition p5 = new PhysicalPartition(3, "db3");
    PhysicalPartition p6 = new PhysicalPartition(4, "db3");
    DbusEventsStatisticsCollector c5 =
        new DbusEventsStatisticsCollector(1, "db3:3", true, false, null);
    DbusEventsStatisticsCollector c6 =
        new DbusEventsStatisticsCollector(1, "db3:4", true, false, null);
    collector.addStatsCollector(p5, c5);
    collector.addStatsCollector(p6, c6);

    StatsWriter w1 = new StatsWriter(c1);
    StatsWriter w2 = new StatsWriter(c2);
    StatsWriter w3 = new StatsWriter(c3);
    StatsWriter w4 = new StatsWriter(c4);
    StatsWriter w5 = new StatsWriter(c5);
    StatsWriter w6 = new StatsWriter(c6);
    w1.addEvents(2, 2, 100);
    w2.addEvents(2, 2, 200);
    w3.addEvents(3, 2, 300);
    w4.addEvents(3, 2, 400);
    w5.addEvents(4, 2, 500);
    w6.addEvents(4, 2, 600);

    // Verify DB1 collector
    StatsCollectors<DbusEventsStatisticsCollector> col =
        collector.getDBStatsCollector("db1");
    Assert.assertNotNull(col);
    col.mergeStatsCollectors();
    LOG.info("Merged Stats : " + col.getStatsCollector().getTotalStats());
    LOG.info("C1 Stats : " + c1.getTotalStats());
    LOG.info("C2 Stats : " + c2.getTotalStats());
    DbusEventsTotalStats s = col.getStatsCollector().getTotalStats();
    Assert.assertEquals("Total Events", 8, s.getNumDataEvents());
    Assert.assertEquals("Sys Events", 4, s.getNumSysEvents());
    Assert.assertEquals("Min Scn", 101, s.getMinScn());
    Assert.assertEquals("Max Scn", 205, s.getMaxScn());

    // Verify DB2 collector
    col = collector.getDBStatsCollector("db2");
    Assert.assertNotNull(col);
    col.mergeStatsCollectors();
    LOG.info("Merged Stats : " + col.getStatsCollector().getTotalStats());
    LOG.info("C3 Stats : " + c3.getTotalStats());
    LOG.info("C4 Stats : " + c4.getTotalStats());
    s = col.getStatsCollector().getTotalStats();
    Assert.assertEquals("Total Events", 12, s.getNumDataEvents());
    Assert.assertEquals("Sys Events", 4, s.getNumSysEvents());
    Assert.assertEquals("Min Scn", 301, s.getMinScn());
    Assert.assertEquals("Max Scn", 407, s.getMaxScn());

    // Verify DB3 collector
    col = collector.getDBStatsCollector("db3");
    Assert.assertNotNull(col);
    col.mergeStatsCollectors();
    LOG.info("Merged Stats : " + col.getStatsCollector().getTotalStats());
    LOG.info("C3 Stats : " + c5.getTotalStats());
    LOG.info("C4 Stats : " + c6.getTotalStats());
    s = col.getStatsCollector().getTotalStats();
    Assert.assertEquals("Total Events", 16, s.getNumDataEvents());
    Assert.assertEquals("Sys Events", 4, s.getNumSysEvents());
    Assert.assertEquals("Min Scn", 501, s.getMinScn());
    Assert.assertEquals("Max Scn", 609, s.getMaxScn());

    Assert.assertEquals("Num Stats Callback", 3, callback.getCollectorsAddedList().size());
    collector.removeAllStatsCollector();
    Assert.assertEquals("Num Stats Callback", 3, callback.getCollectorsRemovedList()
                                                         .size());
  }

  public class TestStatsCollectorCallback implements
      StatsCollectorCallback<StatsCollectors<DbusEventsStatisticsCollector>>
  {

    public final List<StatsCollectors<DbusEventsStatisticsCollector>> _collectorsAddedList;
    public final List<StatsCollectors<DbusEventsStatisticsCollector>> _collectorsRemovedList;

    public TestStatsCollectorCallback()
    {
      _collectorsAddedList =
          new ArrayList<StatsCollectors<DbusEventsStatisticsCollector>>();
      _collectorsRemovedList =
          new ArrayList<StatsCollectors<DbusEventsStatisticsCollector>>();
    }

    @Override
    public void addedStats(StatsCollectors<DbusEventsStatisticsCollector> stats)
    {
      _collectorsAddedList.add(stats);
    }

    @Override
    public void removedStats(StatsCollectors<DbusEventsStatisticsCollector> stats)
    {
      _collectorsRemovedList.add(stats);
    }

    public void reset()
    {
      _collectorsAddedList.clear();
      _collectorsRemovedList.clear();
    }

    public List<StatsCollectors<DbusEventsStatisticsCollector>> getCollectorsAddedList()
    {
      return _collectorsAddedList;
    }

    public List<StatsCollectors<DbusEventsStatisticsCollector>> getCollectorsRemovedList()
    {
      return _collectorsRemovedList;
    }
  }

  private static class StatsWriter
  {
    private final DbusEventsStatisticsCollector _stats;

    public StatsWriter(DbusEventsStatisticsCollector stats)
    {
      _stats = stats;
    }

    public DbusEventsStatisticsCollector getEventsStatsCollector()
    {
      return _stats;
    }

    public void addEvents(int eventsPerWindow, int numWindows, long beginScn)
    {
      long startScn = beginScn;
      int numEvents = eventsPerWindow * numWindows;
      Vector<DbusEvent> events = new Vector<DbusEvent>(numEvents);
      long prevScn = startScn - 1;

      int maxEventSize = 100;
      int payloadSize = 5;
      events.clear();
      DbusEventGenerator eventGen = new DbusEventGenerator(startScn + 1);
      long newScn =
          eventGen.generateEvents(numEvents,
                                  eventsPerWindow,
                                  maxEventSize,
                                  payloadSize,
                                  true,
                                  events);
      DbusEventInternalWritable p = null;
      for (DbusEvent e : events)
      {
        if (p != null && (p.sequence() != e.sequence()))
        {
          // control event for prev sequence;
          p.setSrcId((short) -1);
          _stats.registerDataEvent(p);
        }
        _stats.registerDataEvent((DbusEventInternalReadable) e);
        try
        {
          p = DbusEventCorrupter.makeWritable(e); // for testing only!
        }
        catch (InvalidEventException iee)
        {
          throw new RuntimeException(iee);
        }
      }

      // Add window boundary at the end
      if (p != null)
      {
        p.setSrcId((short) -1);
        _stats.registerDataEvent(p);
      }
      _stats.registerBufferMetrics(startScn + 1,
                                   newScn,
                                   prevScn,
                                   RngUtils.randomPositiveInt());
      startScn = newScn;
    }

  }
}
TOP

Related Classes of com.linkedin.databus2.core.monitoring.TestDbusEventStatsCollectorPartitioner$TestStatsCollectorCallback

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.