private static void publishApplicationAttemptEvent(
      TimelineClient timelineClient, String appAttemptId, DSEvent appEvent)
      throws IOException, YarnException {
    TimelineEntity entity = new TimelineEntity();
    entity.setEntityId(appAttemptId);
    entity.setEntityType(DSEntity.DS_APP_ATTEMPT.toString());
    entity.addPrimaryFilter("user", UserGroupInformation.getCurrentUser().toString());
    TimelineEvent event = new TimelineEvent();
    event.setEventType(appEvent.toString());
    event.setTimestamp(System.currentTimeMillis());
    entity.addEvent(event);

    timelineClient.putEntities(entity);
  }
 @Override
 public TimelineEvents getEntityTimelines(
     String entityType,
     SortedSet<String> entityIds,
     Long limit,
     Long windowStart,
     Long windowEnd,
     Set<String> eventTypes) {
   TimelineEvents allEvents = new TimelineEvents();
   if (entityIds == null) {
     return allEvents;
   }
   if (limit == null) {
     limit = DEFAULT_LIMIT;
   }
   if (windowStart == null) {
     windowStart = Long.MIN_VALUE;
   }
   if (windowEnd == null) {
     windowEnd = Long.MAX_VALUE;
   }
   for (String entityId : entityIds) {
     EntityIdentifier entityID = new EntityIdentifier(entityId, entityType);
     TimelineEntity entity = entities.get(entityID);
     if (entity == null) {
       continue;
     }
     EventsOfOneEntity events = new EventsOfOneEntity();
     events.setEntityId(entityId);
     events.setEntityType(entityType);
     for (TimelineEvent event : entity.getEvents()) {
       if (events.getEvents().size() >= limit) {
         break;
       }
       if (event.getTimestamp() <= windowStart) {
         continue;
       }
       if (event.getTimestamp() > windowEnd) {
         continue;
       }
       if (eventTypes != null && !eventTypes.contains(event.getEventType())) {
         continue;
       }
       events.addEvent(event);
     }
     allEvents.addEvent(events);
   }
   return allEvents;
 }
  private static void publishContainerEndEvent(
      TimelineClient timelineClient, ContainerStatus container) throws IOException, YarnException {
    TimelineEntity entity = new TimelineEntity();
    entity.setEntityId(container.getContainerId().toString());
    entity.setEntityType(DSEntity.DS_CONTAINER.toString());
    entity.addPrimaryFilter("user", UserGroupInformation.getCurrentUser().toString());
    TimelineEvent event = new TimelineEvent();
    event.setTimestamp(System.currentTimeMillis());
    event.setEventType(DSEvent.DS_CONTAINER_END.toString());
    event.addEventInfo("State", container.getState().name());
    event.addEventInfo("Exit Status", container.getExitStatus());
    entity.addEvent(event);

    timelineClient.putEntities(entity);
  }
  private static void publishContainerStartEvent(TimelineClient timelineClient, Container container)
      throws IOException, YarnException {
    TimelineEntity entity = new TimelineEntity();
    entity.setEntityId(container.getId().toString());
    entity.setEntityType(DSEntity.DS_CONTAINER.toString());
    entity.addPrimaryFilter("user", UserGroupInformation.getCurrentUser().toString());
    TimelineEvent event = new TimelineEvent();
    event.setTimestamp(System.currentTimeMillis());
    event.setEventType(DSEvent.DS_CONTAINER_START.toString());
    event.addEventInfo("Node", container.getNodeId().toString());
    event.addEventInfo("Resources", container.getResource().toString());
    entity.addEvent(event);

    timelineClient.putEntities(entity);
  }
  @Test
  public void testEntities() throws Exception {
    TimelineEntities entities = new TimelineEntities();
    for (int j = 0; j < 2; ++j) {
      TimelineEntity entity = new TimelineEntity();
      entity.setEntityId("entity id " + j);
      entity.setEntityType("entity type " + j);
      entity.setStartTime(System.currentTimeMillis());
      for (int i = 0; i < 2; ++i) {
        TimelineEvent event = new TimelineEvent();
        event.setTimestamp(System.currentTimeMillis());
        event.setEventType("event type " + i);
        event.addEventInfo("key1", "val1");
        event.addEventInfo("key2", "val2");
        entity.addEvent(event);
      }
      entity.addRelatedEntity("test ref type 1", "test ref id 1");
      entity.addRelatedEntity("test ref type 2", "test ref id 2");
      entity.addPrimaryFilter("pkey1", "pval1");
      entity.addPrimaryFilter("pkey2", "pval2");
      entity.addOtherInfo("okey1", "oval1");
      entity.addOtherInfo("okey2", "oval2");
      entities.addEntity(entity);
    }
    LOG.info("Entities in JSON:");
    LOG.info(TimelineUtils.dumpTimelineRecordtoJSON(entities, true));

    Assert.assertEquals(2, entities.getEntities().size());
    TimelineEntity entity1 = entities.getEntities().get(0);
    Assert.assertEquals("entity id 0", entity1.getEntityId());
    Assert.assertEquals("entity type 0", entity1.getEntityType());
    Assert.assertEquals(2, entity1.getRelatedEntities().size());
    Assert.assertEquals(2, entity1.getEvents().size());
    Assert.assertEquals(2, entity1.getPrimaryFilters().size());
    Assert.assertEquals(2, entity1.getOtherInfo().size());
    TimelineEntity entity2 = entities.getEntities().get(1);
    Assert.assertEquals("entity id 1", entity2.getEntityId());
    Assert.assertEquals("entity type 1", entity2.getEntityType());
    Assert.assertEquals(2, entity2.getRelatedEntities().size());
    Assert.assertEquals(2, entity2.getEvents().size());
    Assert.assertEquals(2, entity2.getPrimaryFilters().size());
    Assert.assertEquals(2, entity2.getOtherInfo().size());
  }
Example #6
0
  TimelineEntity createPostHookEvent(
      String queryId,
      long stopTime,
      String user,
      String requestuser,
      boolean success,
      String opId,
      PerfLogger perfLogger)
      throws Exception {
    LOG.info("Received post-hook notification for :" + queryId);

    TimelineEntity atsEntity = new TimelineEntity();
    atsEntity.setEntityId(queryId);
    atsEntity.setEntityType(EntityTypes.HIVE_QUERY_ID.name());
    atsEntity.addPrimaryFilter(PrimaryFilterTypes.user.name(), user);
    atsEntity.addPrimaryFilter(PrimaryFilterTypes.requestuser.name(), requestuser);
    if (opId != null) {
      atsEntity.addPrimaryFilter(PrimaryFilterTypes.operationid.name(), opId);
    }

    TimelineEvent stopEvt = new TimelineEvent();
    stopEvt.setEventType(EventTypes.QUERY_COMPLETED.name());
    stopEvt.setTimestamp(stopTime);
    atsEntity.addEvent(stopEvt);

    atsEntity.addOtherInfo(OtherInfoTypes.STATUS.name(), success);

    // Perf times
    JSONObject perfObj = new JSONObject(new LinkedHashMap<>());
    for (String key : perfLogger.getEndTimes().keySet()) {
      perfObj.put(key, perfLogger.getDuration(key));
    }
    atsEntity.addOtherInfo(OtherInfoTypes.PERF.name(), perfObj.toString());

    return atsEntity;
  }
  @Test
  public void testEvents() throws Exception {
    TimelineEvents events = new TimelineEvents();
    for (int j = 0; j < 2; ++j) {
      TimelineEvents.EventsOfOneEntity partEvents = new TimelineEvents.EventsOfOneEntity();
      partEvents.setEntityId("entity id " + j);
      partEvents.setEntityType("entity type " + j);
      for (int i = 0; i < 2; ++i) {
        TimelineEvent event = new TimelineEvent();
        event.setTimestamp(System.currentTimeMillis());
        event.setEventType("event type " + i);
        event.addEventInfo("key1", "val1");
        event.addEventInfo("key2", "val2");
        partEvents.addEvent(event);
      }
      events.addEvent(partEvents);
    }
    LOG.info("Events in JSON:");
    LOG.info(TimelineUtils.dumpTimelineRecordtoJSON(events, true));

    Assert.assertEquals(2, events.getAllEvents().size());
    TimelineEvents.EventsOfOneEntity partEvents1 = events.getAllEvents().get(0);
    Assert.assertEquals("entity id 0", partEvents1.getEntityId());
    Assert.assertEquals("entity type 0", partEvents1.getEntityType());
    Assert.assertEquals(2, partEvents1.getEvents().size());
    TimelineEvent event11 = partEvents1.getEvents().get(0);
    Assert.assertEquals("event type 0", event11.getEventType());
    Assert.assertEquals(2, event11.getEventInfo().size());
    TimelineEvent event12 = partEvents1.getEvents().get(1);
    Assert.assertEquals("event type 1", event12.getEventType());
    Assert.assertEquals(2, event12.getEventInfo().size());
    TimelineEvents.EventsOfOneEntity partEvents2 = events.getAllEvents().get(1);
    Assert.assertEquals("entity id 1", partEvents2.getEntityId());
    Assert.assertEquals("entity type 1", partEvents2.getEntityType());
    Assert.assertEquals(2, partEvents2.getEvents().size());
    TimelineEvent event21 = partEvents2.getEvents().get(0);
    Assert.assertEquals("event type 0", event21.getEventType());
    Assert.assertEquals(2, event21.getEventInfo().size());
    TimelineEvent event22 = partEvents2.getEvents().get(1);
    Assert.assertEquals("event type 1", event22.getEventType());
    Assert.assertEquals(2, event22.getEventInfo().size());
  }
Example #8
0
  TimelineEntity createPreHookEvent(
      String queryId,
      String query,
      JSONObject explainPlan,
      long startTime,
      String user,
      String requestuser,
      int numMrJobs,
      int numTezJobs,
      String opId,
      String clientIpAddress,
      String hiveInstanceAddress,
      String hiveInstanceType,
      String sessionID,
      String logID,
      String threadId,
      String executionMode,
      List<String> tablesRead,
      List<String> tablesWritten,
      HiveConf conf)
      throws Exception {

    JSONObject queryObj = new JSONObject(new LinkedHashMap<>());
    queryObj.put("queryText", query);
    queryObj.put("queryPlan", explainPlan);

    LOG.info("Received pre-hook notification for :" + queryId);
    if (LOG.isDebugEnabled()) {
      LOG.debug("Otherinfo: " + queryObj.toString());
      LOG.debug("Operation id: <" + opId + ">");
    }

    conf.stripHiddenConfigurations(conf);
    Map<String, String> confMap = new HashMap<String, String>();
    for (Map.Entry<String, String> setting : conf) {
      confMap.put(setting.getKey(), setting.getValue());
    }
    JSONObject confObj = new JSONObject((Map) confMap);

    TimelineEntity atsEntity = new TimelineEntity();
    atsEntity.setEntityId(queryId);
    atsEntity.setEntityType(EntityTypes.HIVE_QUERY_ID.name());
    atsEntity.addPrimaryFilter(PrimaryFilterTypes.user.name(), user);
    atsEntity.addPrimaryFilter(PrimaryFilterTypes.requestuser.name(), requestuser);
    atsEntity.addPrimaryFilter(PrimaryFilterTypes.executionmode.name(), executionMode);
    atsEntity.addPrimaryFilter(
        PrimaryFilterTypes.queue.name(), conf.get("mapreduce.job.queuename"));

    if (opId != null) {
      atsEntity.addPrimaryFilter(PrimaryFilterTypes.operationid.name(), opId);
    }

    for (String tabName : tablesRead) {
      atsEntity.addPrimaryFilter(PrimaryFilterTypes.tablesread.name(), tabName);
    }
    for (String tabName : tablesWritten) {
      atsEntity.addPrimaryFilter(PrimaryFilterTypes.tableswritten.name(), tabName);
    }

    TimelineEvent startEvt = new TimelineEvent();
    startEvt.setEventType(EventTypes.QUERY_SUBMITTED.name());
    startEvt.setTimestamp(startTime);
    atsEntity.addEvent(startEvt);

    atsEntity.addOtherInfo(OtherInfoTypes.QUERY.name(), queryObj.toString());
    atsEntity.addOtherInfo(OtherInfoTypes.TEZ.name(), numTezJobs > 0);
    atsEntity.addOtherInfo(OtherInfoTypes.MAPRED.name(), numMrJobs > 0);
    atsEntity.addOtherInfo(OtherInfoTypes.SESSION_ID.name(), sessionID);
    atsEntity.addOtherInfo(OtherInfoTypes.INVOKER_INFO.name(), logID);
    atsEntity.addOtherInfo(OtherInfoTypes.THREAD_NAME.name(), threadId);
    atsEntity.addOtherInfo(OtherInfoTypes.VERSION.name(), VERSION);
    if (clientIpAddress != null) {
      atsEntity.addOtherInfo(OtherInfoTypes.CLIENT_IP_ADDRESS.name(), clientIpAddress);
    }
    atsEntity.addOtherInfo(OtherInfoTypes.HIVE_ADDRESS.name(), hiveInstanceAddress);
    atsEntity.addOtherInfo(OtherInfoTypes.HIVE_INSTANCE_TYPE.name(), hiveInstanceType);
    atsEntity.addOtherInfo(OtherInfoTypes.CONF.name(), confObj.toString());

    return atsEntity;
  }
 @Override
 public TimelinePutResponse put(TimelineEntities data) {
   TimelinePutResponse response = new TimelinePutResponse();
   for (TimelineEntity entity : data.getEntities()) {
     EntityIdentifier entityId =
         new EntityIdentifier(entity.getEntityId(), entity.getEntityType());
     // store entity info in memory
     TimelineEntity existingEntity = entities.get(entityId);
     if (existingEntity == null) {
       existingEntity = new TimelineEntity();
       existingEntity.setEntityId(entity.getEntityId());
       existingEntity.setEntityType(entity.getEntityType());
       existingEntity.setStartTime(entity.getStartTime());
       entities.put(entityId, existingEntity);
       entityInsertTimes.put(entityId, System.currentTimeMillis());
     }
     if (entity.getEvents() != null) {
       if (existingEntity.getEvents() == null) {
         existingEntity.setEvents(entity.getEvents());
       } else {
         existingEntity.addEvents(entity.getEvents());
       }
       Collections.sort(existingEntity.getEvents());
     }
     // check startTime
     if (existingEntity.getStartTime() == null) {
       if (existingEntity.getEvents() == null || existingEntity.getEvents().isEmpty()) {
         TimelinePutError error = new TimelinePutError();
         error.setEntityId(entityId.getId());
         error.setEntityType(entityId.getType());
         error.setErrorCode(TimelinePutError.NO_START_TIME);
         response.addError(error);
         entities.remove(entityId);
         entityInsertTimes.remove(entityId);
         continue;
       } else {
         Long min = Long.MAX_VALUE;
         for (TimelineEvent e : entity.getEvents()) {
           if (min > e.getTimestamp()) {
             min = e.getTimestamp();
           }
         }
         existingEntity.setStartTime(min);
       }
     }
     if (entity.getPrimaryFilters() != null) {
       if (existingEntity.getPrimaryFilters() == null) {
         existingEntity.setPrimaryFilters(new HashMap<String, Set<Object>>());
       }
       for (Entry<String, Set<Object>> pf : entity.getPrimaryFilters().entrySet()) {
         for (Object pfo : pf.getValue()) {
           existingEntity.addPrimaryFilter(pf.getKey(), maybeConvert(pfo));
         }
       }
     }
     if (entity.getOtherInfo() != null) {
       if (existingEntity.getOtherInfo() == null) {
         existingEntity.setOtherInfo(new HashMap<String, Object>());
       }
       for (Entry<String, Object> info : entity.getOtherInfo().entrySet()) {
         existingEntity.addOtherInfo(info.getKey(), maybeConvert(info.getValue()));
       }
     }
     // relate it to other entities
     if (entity.getRelatedEntities() == null) {
       continue;
     }
     for (Map.Entry<String, Set<String>> partRelatedEntities :
         entity.getRelatedEntities().entrySet()) {
       if (partRelatedEntities == null) {
         continue;
       }
       for (String idStr : partRelatedEntities.getValue()) {
         EntityIdentifier relatedEntityId =
             new EntityIdentifier(idStr, partRelatedEntities.getKey());
         TimelineEntity relatedEntity = entities.get(relatedEntityId);
         if (relatedEntity != null) {
           relatedEntity.addRelatedEntity(
               existingEntity.getEntityType(), existingEntity.getEntityId());
         } else {
           relatedEntity = new TimelineEntity();
           relatedEntity.setEntityId(relatedEntityId.getId());
           relatedEntity.setEntityType(relatedEntityId.getType());
           relatedEntity.setStartTime(existingEntity.getStartTime());
           relatedEntity.addRelatedEntity(
               existingEntity.getEntityType(), existingEntity.getEntityId());
           entities.put(relatedEntityId, relatedEntity);
           entityInsertTimes.put(relatedEntityId, System.currentTimeMillis());
         }
       }
     }
   }
   return response;
 }