/**
   * Create an event to record the unsuccessful completion of attempts
   *
   * @param id Attempt ID
   * @param taskType Type of the task
   * @param status Status of the attempt
   * @param finishTime Finish time of the attempt
   * @param hostname Name of the host where the attempt executed
   * @param error Error string
   * @param allSplits the "splits", or a pixelated graph of various measurable worker node state
   *     variables against progress. Currently there are four; wallclock time, CPU time, virtual
   *     memory and physical memory.
   */
  public TaskAttemptUnsuccessfulCompletionEvent(
      TaskAttemptID id,
      TaskType taskType,
      String status,
      long finishTime,
      String hostname,
      String error,
      int[][] allSplits) {
    datum.taskid = new Utf8(id.getTaskID().toString());
    datum.taskType = new Utf8(taskType.name());
    datum.attemptId = new Utf8(id.toString());
    datum.finishTime = finishTime;
    datum.hostname = new Utf8(hostname);
    datum.error = new Utf8(error);
    datum.status = new Utf8(status);

    datum.clockSplits = AvroArrayUtils.toAvro(ProgressSplitsBlock.arrayGetWallclockTime(allSplits));
    datum.cpuUsages = AvroArrayUtils.toAvro(ProgressSplitsBlock.arrayGetCPUTime(allSplits));
    datum.vMemKbytes = AvroArrayUtils.toAvro(ProgressSplitsBlock.arrayGetVMemKbytes(allSplits));
    datum.physMemKbytes =
        AvroArrayUtils.toAvro(ProgressSplitsBlock.arrayGetPhysMemKbytes(allSplits));
  }