blob: 19d40547b9a4091943e9ee53eacaaa458f5ffd69 [file] [log] [blame]
# 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.
# Profile task create need data
input ProfileTaskCreationRequest {
# need to monitor service id
serviceId: ID!
# endpoint name to monitored under the special service.
endpointName: String!
# if null means the task starts ASAP, otherwise the task begin after the startTime(based on agent side time)
startTime: Long
# duration of this task (minute)
duration: Int!
# when the segment starts to execute, how long must it take before the monitor can be enbaled
minDurationThreshold: Int!
# when start monitor, time interval for each dumping the stack
dumpPeriod: Int!
# max number of traces will monitor on the sniffer
maxSamplingCount: Int!
}
# Profile task create result
type ProfileTaskCreationResult {
# if null or empty means the task create success, otherwise get create error reason
errorReason: String
# get data id when create success
id: String
}
# Profile task log operation type
enum ProfileTaskLogOperationType {
# when sniffer has notified
NOTIFIED,
# when sniffer has execution finished to report
EXECUTION_FINISHED
}
# Profile task execute log
type ProfileTaskLog {
id: String!
# execute instance
instanceId: ID!
instanceName: String!
# operation type
operationType: ProfileTaskLogOperationType!
# operation time
operationTime: Long!
}
# Profile
type ProfileTask {
id: String!
# monitor service
serviceId: ID!
serviceName: String!
# endpoint name to monitored under the special service.
endpointName: String!
# task start time (timestamp)
startTime: Long!
# duration of this task (minute)
duration: Int!
# when the segment starts to execute, how long must it take before the monitor can be enbaled
minDurationThreshold: Int!
# when start monitor, time interval for each dumping the stack
dumpPeriod: Int!
# max number of traces will monitor on the sniffer
maxSamplingCount: Int!
# instance operation logs
logs: [ProfileTaskLog!]!
}
# Profile thread stack analyze tree element
type ProfileStackElement {
# work for tree building, id matches multiple parentId
id: ID!
parentId: ID!
# stack code signature
codeSignature: String!
# Include the execution time of children(millisecond)
duration: Int!
# Exclude the execution time of children(millisecond)
durationChildExcluded: Int!
# continuous dump count
count: Int!
}
# Profile thread stack anayze tree
type ProfileStackTree {
elements: [ProfileStackElement!]!
}
# Profile analyze result
type ProfileAnalyzation {
# if not empty means backend has information gave to the user
# such as: a large number of snapshots, only analyze part of the data
tip: String
# thread stack dump analyze trees
trees: [ProfileStackTree!]!
}
type ProfiledSpan {
spanId: Int!
parentSpanId: Int!
serviceCode: String!
serviceInstanceName: ID!
startTime: Long!
endTime: Long!
endpointName: String
# There are three span types: Local, Entry and Exit
type: String!
# Peer network id, e.g. host+port, ip+port
peer: String
component: String
isError: Boolean
# There are 5 layers: Unknown, Database, RPCFramework, Http, MQ and Cache
layer: String
tags: [KeyValue!]!
logs: [LogEntity!]!
}
type ProfiledSegment {
spans: [ProfiledSpan!]!
}
input ProfileAnalyzeTimeRange {
start: Long!
end: Long!
}
extend type Mutation {
# crate new profile task
createProfileTask(creationRequest: ProfileTaskCreationRequest): ProfileTaskCreationResult!
}
extend type Query {
# query all task list, order by ProfileTask#startTime descending
getProfileTaskList(serviceId: ID, endpointName: String): [ProfileTask!]!
# query all task profiled segment list
getProfileTaskSegmentList(taskID: String): [BasicTrace!]!
# query profiled segemnt
getProfiledSegment(segmentId: String): ProfiledSegment
# analyze profiled segment, start and end time use timestamp(millisecond)
getProfileAnalyze(segmentId: String!, timeRanges: [ProfileAnalyzeTimeRange!]!): ProfileAnalyzation!
}