code: @Exported
      public boolean isLikelyStuck() {
          lock.readLock().lock();
          try {
              if (executable == null) {
                  return false;
              }
          } finally {
              lock.readLock().unlock();
          }
  
          long elapsed = getElapsedTime();
          long d = executableEstimatedDuration;
          if (d >= 0) {
              // if it's taking 10 times longer than ETA, consider it stuck
              return d * 10 < elapsed;
          } else {
              // if no ETA is available, a build taking longer than a day is considered stuck
              return TimeUnit.MILLISECONDS.toHours(elapsed) > 24;
          }
      }
docs: Returns true if the current build is likely stuck.
  
  <p>
  This is a heuristics based approach, but if the build is suspiciously taking for a long time,
  this method returns true.