private void doGetLogs( HttpResponder responder, LoggingContext loggingContext, long fromTimeSecsParam, long toTimeSecsParam, boolean escape, String filterStr, @Nullable RunRecord runRecord) { try { TimeRange timeRange = parseTime(fromTimeSecsParam, toTimeSecsParam, responder); if (timeRange == null) { return; } Filter filter = FilterParser.parse(filterStr); ReadRange readRange = new ReadRange( timeRange.getFromMillis(), timeRange.getToMillis(), LogOffset.INVALID_KAFKA_OFFSET); readRange = adjustReadRange(readRange, runRecord); ChunkedLogReaderCallback logCallback = new ChunkedLogReaderCallback(responder, logPattern, escape); logReader.getLog( loggingContext, readRange.getFromMillis(), readRange.getToMillis(), filter, logCallback); logCallback.close(); } catch (SecurityException e) { responder.sendStatus(HttpResponseStatus.UNAUTHORIZED); } catch (IllegalArgumentException e) { responder.sendString(HttpResponseStatus.BAD_REQUEST, e.getMessage()); } catch (Throwable e) { LOG.error("Caught exception", e); responder.sendStatus(HttpResponseStatus.INTERNAL_SERVER_ERROR); } }
/** * If readRange is outside runRecord's range, then the readRange is adjusted to fall within * runRecords range. */ private ReadRange adjustReadRange(ReadRange readRange, @Nullable RunRecord runRecord) { if (runRecord == null) { return readRange; } long fromTimeMillis = readRange.getFromMillis(); long toTimeMillis = readRange.getToMillis(); long runStartMillis = TimeUnit.SECONDS.toMillis(runRecord.getStartTs()); if (fromTimeMillis < runStartMillis) { fromTimeMillis = runStartMillis; } if (runRecord.getStopTs() != null) { long runStopMillis = TimeUnit.SECONDS.toMillis(runRecord.getStopTs()); if (toTimeMillis > runStopMillis) { toTimeMillis = runStopMillis; } } return new ReadRange(fromTimeMillis, toTimeMillis, readRange.getKafkaOffset()); }