## What is the purpose of the change
This commit makes WebUI show jm/tm logs more friendly. WebUI can show 
historical logs by inputing a filename and a offset range to read of the file, 
shown as follows.
![image](https://user-images.githubusercontent.com/12528894/46129320-cfc25c80-c225-11e8-9c84-aa0ef48dbfa3.png)
![image](https://user-images.githubusercontent.com/12528894/46129328-d3ee7a00-c225-11e8-8965-801b53674bde.png)
![image](https://user-images.githubusercontent.com/12528894/46129332-d650d400-c225-11e8-9a8a-2eef8383bdfd.png)
![image](https://user-images.githubusercontent.com/12528894/46129335-d8b32e00-c225-11e8-813f-6e64692c7c1b.png)

This pr adds 8 new REST APIs:

- For JobManager
`/jobmanager/log/:range`    Return logs of current log file in the range.
`/jobmanager/logs/:filename/:range`    Return logs of historical log file in 
the range.
`/jobmanager/loglist`    Return the list of historical log filename.
`/jobmanager/stdout/:range`    Return the stdout data in the range

- For TaskManager
`/taskmanagers/:taskmanagerid/log/:range`    Return logs of current log file in 
the range.
`/taskmanagers/:taskmanagerid/logs/:filename/:range`   Return logs of 
historical log file in the range.
`/taskmanagers/:taskmanagerid/loglist`    Return the list of historical log 
filename.
`/taskmanagers/:taskmanagerid/stdout/:range`    Return the stdout data in the 
range

## Brief change log
This pr mainly add 8 APIs in both legacy (WebRuntimeMonitor) and new 
(WebMonitorEndpoint) REST API. Besides, some related frontend codes are changed.
- For legacy REST API:

1.  In `WebRuntimeMonitor.java`, paths `/jobmanager/log/:range`, 
`/jobmanager/stdout/:range` and `/jobmanager/logs/:filename/:range` are handled 
by `StaticFileServerHandler`. Therefore, `StaticFileServerHandler.java` is also 
changed to handle these three paths.
2.  `JobManagerLogListHandler` and `TaskManagerLogListHandler` are added to 
deal with the path `/jobmanager/loglist` and 
`/taskmanagers/:taskmanagerid/loglist` to get the historical log file names. 
Besides, a new method `requestTaskManagerLogList()` is added to 
`TaskManagerGateway` to send a new TaskManagerMessage `LogListRequest` to 
request taskmanager’s log file list. TaskManager deal with this request by a 
new method `handleRequestTaskManagerLogList()`.
3.  There are three paths `/taskmanagers/:taskmanagerid/log/:range`, 
`/taskmanagers/:taskmanagerid/logs/:filename/:range` and 
`/taskmanagers/:taskmanagerid/stdout/:range` added to 
`TaskManagerLogHandler.java`. At the same time, `TaskManagerGateway`, 
`ActorTaskManagerGateWay`, `TaskManagerMessages` and `TaskManager` are changed 
to handle these three paths. 

4.  `FileOffsetRange.java` is designed to identify a range of log files, which 
includes a start offset and an end offset.

- For new REST API:

1.  In LogFileHandlerSpecification, paths `/jobmanager/log/:range` and 
`/jobmanager/logs/:filename/:range` are added. In 
`StdoutFileHandlerSpecification,` `/jobmanager/stdout/:range` is added. These 
three paths are also handled by `StaticFileServerHandler` which is same with 
the legacy REST API.
2.  `LogListHandler` and `TaskManagerLogListHandler` are added to deal with the 
path `/jobmanager/loglist` and `/taskmanagers/:taskmanagerid/loglist`. This 
`TaskManagerLogListHandler` is different from the `TaskManagerLogListHandler` 
in legacy REST API. To get the historical log list, a new method 
`requestTaskManagerLogList()` is added to `ResourceManagerGateway`. Its related 
classes and interfaces, such as `ResourceManager`, `TaskExecutorGateway` and 
`TaskExecutor`, are also changed.
3.  To deal with `/taskmanagers/:taskmanagerid/log/:range`,  
`/taskmanagers/:taskmanagerid/logs/:filename/:range` and 
`/taskmanagers/:taskmanagerid/stdout/:range`, `AbstractTaskManagerFileHandler` 
is changed. The mainly difference is that filename and range are also a part of 
cache key. When loading task manager file, filename and range are also 
parameters.

## Verifying this change
This change added tests and can be verified as follows:
  - Added integration tests for all new paths in `WebFrontendITCase.java`

## Does this pull request potentially affect one of the following parts:

  - Dependencies (does it add or upgrade a dependency): no
  - The public API, i.e., is any changed class annotated with 
`@Public(Evolving)`: no
  - The serializers: no
  - The runtime per-record code paths (performance sensitive): no 
  - Anything that affects deployment or recovery: no
  - The S3 file system connector: no

## Documentation

  - Does this pull request introduce a new feature? yes
  - If yes, how is the feature documented? JavaDocs



[ Full content available at: https://github.com/apache/flink/pull/6770 ]
This message was relayed via gitbox.apache.org for [email protected]

Reply via email to