[ https://issues.apache.org/jira/browse/FLINK-7638?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16174508#comment-16174508 ]
ASF GitHub Bot commented on FLINK-7638: --------------------------------------- Github user tzulitai commented on a diff in the pull request: https://github.com/apache/flink/pull/4688#discussion_r140193252 --- Diff: flink-runtime/src/main/java/org/apache/flink/runtime/messages/webmonitor/JobDetails.java --- @@ -145,8 +180,89 @@ public String toString() { ", endTime=" + endTime + ", status=" + status + ", lastUpdateTime=" + lastUpdateTime + - ", numVerticesPerExecutionState=" + Arrays.toString(numVerticesPerExecutionState) + + ", numVerticesPerExecutionState=" + Arrays.toString(tasksPerState) + ", numTasks=" + numTasks + '}'; } + + public static final class JobDetailsSerializer extends StdSerializer<JobDetails> { + private static final long serialVersionUID = 7915913423515194428L; + + public JobDetailsSerializer() { + super(JobDetails.class); + } + + @Override + public void serialize( + JobDetails jobDetails, + JsonGenerator jsonGenerator, + SerializerProvider serializerProvider) throws IOException { + jsonGenerator.writeStartObject(); + + jsonGenerator.writeStringField(FIELD_NAME_JOB_ID, jobDetails.getJobId().toString()); + jsonGenerator.writeStringField(FIELD_NAME_JOB_NAME, jobDetails.getJobName()); + jsonGenerator.writeStringField(FIELD_NAME_STATUS, jobDetails.getStatus().name()); + + jsonGenerator.writeNumberField(FIELD_NAME_START_TIME, jobDetails.getStartTime()); + jsonGenerator.writeNumberField(FIELD_NAME_END_TIME, jobDetails.getEndTime()); + jsonGenerator.writeNumberField(FIELD_NAME_DURATION, jobDetails.getDuration()); + jsonGenerator.writeNumberField(FIELD_NAME_LAST_MODIFICATION, jobDetails.getLastUpdateTime()); + + jsonGenerator.writeObjectFieldStart("tasks"); + jsonGenerator.writeNumberField(FIELD_NAME_TOTAL_NUMBER_TASKS, jobDetails.getNumTasks()); + + final int[] perState = jobDetails.getTasksPerState(); + + for (ExecutionState executionState : ExecutionState.values()) { + jsonGenerator.writeNumberField(executionState.name().toLowerCase(), perState[executionState.ordinal()]); + } --- End diff -- I guess this is the bit which requires this nasty custom serialization / deserialization. I wonder if it is possible to have a proper POJO w/ Jackson annotation for this. For the `JobDetails` class we would only need an additional constructor (without `@JsonCreator` annotation) that accepts the "awkward" `int[] perState` and converts it to a `List<PerExecutionState>`, `PerExecutionState` being a newly introduced POJO to hold per-state. If that's possible things would be much cleaner here. > Port CurrentJobsOverviewHandler to new REST endpoint > ---------------------------------------------------- > > Key: FLINK-7638 > URL: https://issues.apache.org/jira/browse/FLINK-7638 > Project: Flink > Issue Type: Sub-task > Components: REST, Webfrontend > Affects Versions: 1.4.0 > Reporter: Till Rohrmann > Assignee: Till Rohrmann > Priority: Minor > Labels: flip-6 > > Port the existing {{CurrentJobsOverviewHandler}} to the new REST endpoint. -- This message was sent by Atlassian JIRA (v6.4.14#64029)