@Override public void run(HookContext hookContext) throws Exception { try { EventLogger logger = EventLogger.getInstance(hookContext.getConf()); logger.handle(hookContext); } catch (Exception e) { LOG.error("Got exceptoin while processing event: ", e); } } }
AtomicLong time = new AtomicLong(); EventLogger evtLogger = new EventLogger(conf, () -> time.get()); evtLogger.handle(context); int statusLen = 0;
@Test public void testPostEventLog() throws Exception { context.setHookType(HookType.POST_EXEC_HOOK); context.getPerfLogger().PerfLogBegin("test", "LogTest"); context.getPerfLogger().PerfLogEnd("test", "LogTest"); EventLogger evtLogger = new EventLogger(conf, SystemClock.getInstance()); evtLogger.handle(context); evtLogger.shutdown(); HiveHookEventProto event = loadEvent(conf, tmpFolder); Assert.assertEquals(EventType.QUERY_COMPLETED.name(), event.getEventType()); Assert.assertEquals(System.getProperty("user.name"), event.getUser()); Assert.assertEquals("test_user", event.getRequestUser()); Assert.assertEquals("test_queryId", event.getHiveQueryId()); Assert.assertEquals("test_op_id", event.getOperationId()); assertOtherInfo(event, OtherInfoType.STATUS, Boolean.TRUE.toString()); String val = findOtherInfo(event, OtherInfoType.PERF); Map<String, Long> map = new ObjectMapper().readValue(val, new TypeReference<Map<String, Long>>() {}); // This should be really close to zero. Assert.assertTrue("Expected LogTest in PERF", map.get("LogTest") < 100); }
@Test public void testPreEventLog() throws Exception { context.setHookType(HookType.PRE_EXEC_HOOK); EventLogger evtLogger = new EventLogger(conf, SystemClock.getInstance()); evtLogger.handle(context); evtLogger.shutdown(); HiveHookEventProto event = loadEvent(conf, tmpFolder); Assert.assertEquals(EventType.QUERY_SUBMITTED.name(), event.getEventType()); Assert.assertEquals(1234L, event.getTimestamp()); Assert.assertEquals(System.getProperty("user.name"), event.getUser()); Assert.assertEquals("test_user", event.getRequestUser()); Assert.assertEquals("test_queryId", event.getHiveQueryId()); Assert.assertEquals("test_op_id", event.getOperationId()); Assert.assertEquals(ExecutionMode.NONE.name(), event.getExecutionMode()); Assert.assertFalse(event.hasQueue()); assertOtherInfo(event, OtherInfoType.TEZ, Boolean.FALSE.toString()); assertOtherInfo(event, OtherInfoType.MAPRED, Boolean.FALSE.toString()); assertOtherInfo(event, OtherInfoType.CLIENT_IP_ADDRESS, "192.168.10.10"); assertOtherInfo(event, OtherInfoType.SESSION_ID, "test_session_id"); assertOtherInfo(event, OtherInfoType.THREAD_NAME, "test_thread_id"); assertOtherInfo(event, OtherInfoType.HIVE_INSTANCE_TYPE, "HS2"); assertOtherInfo(event, OtherInfoType.HIVE_ADDRESS, "hive_addr"); assertOtherInfo(event, OtherInfoType.CONF, null); assertOtherInfo(event, OtherInfoType.QUERY, null); }
@Test public void testPreAndPostEventBoth() throws Exception { context.setHookType(HookType.PRE_EXEC_HOOK); EventLogger evtLogger = new EventLogger(conf, SystemClock.getInstance()); evtLogger.handle(context); context.setHookType(HookType.POST_EXEC_HOOK); evtLogger.handle(context); evtLogger.shutdown(); ProtoMessageReader<HiveHookEventProto> reader = getTestReader(conf, tmpFolder); HiveHookEventProto event = reader.readEvent(); Assert.assertNotNull("Pre hook event not found", event); Assert.assertEquals(EventType.QUERY_SUBMITTED.name(), event.getEventType()); event = reader.readEvent(); Assert.assertNotNull("Post hook event not found", event); Assert.assertEquals(EventType.QUERY_COMPLETED.name(), event.getEventType()); }
@Test public void testFailureEventLog() throws Exception { context.setHookType(HookType.ON_FAILURE_HOOK); EventLogger evtLogger = new EventLogger(conf, SystemClock.getInstance()); evtLogger.handle(context); evtLogger.shutdown(); HiveHookEventProto event = loadEvent(conf, tmpFolder); Assert.assertEquals(EventType.QUERY_COMPLETED.name(), event.getEventType()); Assert.assertEquals(System.getProperty("user.name"), event.getUser()); Assert.assertEquals("test_user", event.getRequestUser()); Assert.assertEquals("test_queryId", event.getHiveQueryId()); Assert.assertEquals("test_op_id", event.getOperationId()); assertOtherInfo(event, OtherInfoType.STATUS, Boolean.FALSE.toString()); assertOtherInfo(event, OtherInfoType.PERF, null); }