All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.flink.runtime.webmonitor.threadinfo.VertexFlameGraph Maven / Gradle / Ivy

There is a newer version: 1.19.0
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.flink.runtime.webmonitor.threadinfo;

import org.apache.flink.runtime.rest.messages.ResponseBody;

import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonCreator;
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonIgnore;
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonInclude;
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonProperty;

import java.util.List;

/**
 * Flame Graph representation for a job vertex or an execution vertex.
 *
 * 

Statistics are gathered by sampling stack traces of running tasks. */ @JsonInclude(JsonInclude.Include.NON_NULL) public class VertexFlameGraph implements ResponseBody { private static final String FIELD_NAME_END_TIMESTAMP = "endTimestamp"; private static final String FIELD_NAME_DATA = "data"; /** End time stamp of the corresponding sample. */ @JsonProperty(FIELD_NAME_END_TIMESTAMP) private final long endTimestamp; @JsonProperty(FIELD_NAME_DATA) private final Node root; @JsonCreator public VertexFlameGraph( @JsonProperty(FIELD_NAME_END_TIMESTAMP) long endTimestamp, @JsonProperty(FIELD_NAME_DATA) Node root) { this.endTimestamp = endTimestamp; this.root = root; } @JsonIgnore public long getEndTime() { return endTimestamp; } @JsonIgnore public Node getRoot() { return root; } @Override public String toString() { return "OperatorFlameGraph: endTimestamp=" + endTimestamp + "\n" + getRoot().toString(); } // Indicates that the task execution has been terminated public static VertexFlameGraph terminated() { return new VertexFlameGraph(-1, null); } // Indicates that the flame graph feature has been disabled public static VertexFlameGraph disabled() { return new VertexFlameGraph(-2, null); } // Indicates that it is waiting for the first samples to creating the flame graph public static VertexFlameGraph waiting() { return new VertexFlameGraph(-3, null); } /** Graph node. */ public static class Node { // These field names are required by the library used in the WebUI. private static final String FIELD_NAME_NAME = "name"; private static final String FIELD_NAME_VALUE = "value"; private static final String FIELD_NAME_CHILDREN = "children"; @JsonProperty(FIELD_NAME_NAME) private final String stackTraceLocation; @JsonProperty(FIELD_NAME_VALUE) private final int hitCount; @JsonProperty(FIELD_NAME_CHILDREN) private final List children; @JsonCreator Node( @JsonProperty(FIELD_NAME_NAME) String stackTraceLocation, @JsonProperty(FIELD_NAME_VALUE) int hitCount, @JsonProperty(FIELD_NAME_CHILDREN) List children) { this.stackTraceLocation = stackTraceLocation; this.hitCount = hitCount; this.children = children; } @JsonIgnore public String getStackTraceLocation() { return stackTraceLocation; } @JsonIgnore public int getHitCount() { return hitCount; } @JsonIgnore public List getChildren() { return children; } @Override public String toString() { return getStackTraceLocation() + ": " + getHitCount() + "\n" + "\t" + toStringChildren(); } private String toStringChildren() { StringBuilder sb = new StringBuilder(); for (Node child : getChildren()) { sb.append(child.toString()); } return sb.toString(); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy