use of org.apache.metron.profiler.hbase.SaltyRowKeyBuilder in project metron by apache.
the class GetProfileTest method setup.
/**
* This method sets up the configuration context for both writing profile data
* (using profileWriter to mock the complex process of what the Profiler topology
* actually does), and then reading that profile data (thereby testing the PROFILE_GET
* Stellar client implemented in GetProfile).
*
* It runs at @Before time, and sets testclass global variables used by the writers and readers.
* The various writers and readers are in each test case, not here.
*
* @return void
*/
@Before
public void setup() {
state = new HashMap<>();
final HTableInterface table = MockHBaseTableProvider.addToCache(tableName, columnFamily);
// used to write values to be read during testing
RowKeyBuilder rowKeyBuilder = new SaltyRowKeyBuilder();
ColumnBuilder columnBuilder = new ValueOnlyColumnBuilder(columnFamily);
profileWriter = new ProfileWriter(rowKeyBuilder, columnBuilder, table);
// global properties
Map<String, Object> global = new HashMap<String, Object>() {
{
put(PROFILER_HBASE_TABLE.getKey(), tableName);
put(PROFILER_COLUMN_FAMILY.getKey(), columnFamily);
put(PROFILER_HBASE_TABLE_PROVIDER.getKey(), MockHBaseTableProvider.class.getName());
put(PROFILER_PERIOD.getKey(), Long.toString(periodDuration));
put(PROFILER_PERIOD_UNITS.getKey(), periodUnits.toString());
put(PROFILER_SALT_DIVISOR.getKey(), Integer.toString(saltDivisor));
}
};
// create the stellar execution environment
executor = new DefaultStellarStatefulExecutor(new SimpleFunctionResolver().withClass(GetProfile.class).withClass(FixedLookback.class), new Context.Builder().with(Context.Capabilities.GLOBAL_CONFIG, () -> global).build());
}
use of org.apache.metron.profiler.hbase.SaltyRowKeyBuilder in project metron by apache.
the class SaltyRowKeyBuilderTest method testRowKeys.
/**
* `rowKeys` should return all of the row keys needed to retrieve the profile values over a given time horizon.
*/
@Test
public void testRowKeys() throws Exception {
int hoursAgo = 1;
// setup
List<Object> groups = Collections.emptyList();
rowKeyBuilder = new SaltyRowKeyBuilder(saltDivisor, periodDuration, periodUnits);
// a dummy profile measurement
long now = System.currentTimeMillis();
long oldest = now - TimeUnit.HOURS.toMillis(hoursAgo);
ProfileMeasurement m = new ProfileMeasurement().withProfileName("profile").withEntity("entity").withPeriod(oldest, periodDuration, periodUnits).withProfileValue(22);
// generate a list of expected keys
List<byte[]> expectedKeys = new ArrayList<>();
for (int i = 0; i < (hoursAgo * 4) + 1; i++) {
// generate the expected key
byte[] rk = rowKeyBuilder.rowKey(m);
expectedKeys.add(rk);
// advance to the next period
ProfilePeriod next = m.getPeriod().next();
m = new ProfileMeasurement().withProfileName("profile").withEntity("entity").withPeriod(next.getStartTimeMillis(), periodDuration, periodUnits);
}
// execute
List<byte[]> actualKeys = rowKeyBuilder.rowKeys(measurement.getProfileName(), measurement.getEntity(), groups, oldest, now);
// validate - expectedKeys == actualKeys
for (int i = 0; i < actualKeys.size(); i++) {
byte[] actual = actualKeys.get(i);
byte[] expected = expectedKeys.get(i);
assertThat(actual, equalTo(expected));
}
}
Aggregations