Пример #1
0
    @Override
    public Number calculate(Iterable<IScheduledTask> tasks, Range<Long> timeFrame) {
      Iterable<IScheduledTask> activeTasks =
          FluentIterable.from(tasks)
              .filter(Predicates.compose(Predicates.in(Tasks.ACTIVE_STATES), Tasks.GET_STATUS));

      List<Long> waitTimes = Lists.newLinkedList();
      for (IScheduledTask task : activeTasks) {
        long pendingTs = 0;
        for (ITaskEvent event : task.getTaskEvents()) {
          if (event.getStatus() == PENDING) {
            pendingTs = event.getTimestamp();
          } else if (event.getStatus() == status && timeFrame.contains(event.getTimestamp())) {

            if (pendingTs == 0) {
              throw new IllegalArgumentException(
                  "SLA: missing PENDING status for:" + task.getAssignedTask().getTaskId());
            }

            waitTimes.add(event.getTimestamp() - pendingTs);
            break;
          }
        }
      }

      return SlaUtil.percentile(waitTimes, 50.0);
    }
Пример #2
0
    @Override
    public Number calculate(Iterable<IScheduledTask> tasks, final Range<Long> timeFrame) {
      List<Long> uptimes =
          FluentIterable.from(tasks)
              .filter(IS_RUNNING)
              .transform(
                  Functions.compose(
                      new Function<ITaskEvent, Long>() {
                        @Override
                        public Long apply(ITaskEvent event) {
                          return timeFrame.upperEndpoint() - event.getTimestamp();
                        }
                      },
                      TASK_TO_EVENT))
              .toList();

      return (int) Math.floor((double) SlaUtil.percentile(uptimes, percentile) / 1000);
    }