mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2024-12-26 13:29:05 +01:00
243 lines
5.2 KiB
GraphQL
243 lines
5.2 KiB
GraphQL
type Job {
|
|
Id: ID! # Database ID, unique
|
|
JobId: Int! # ID given to the job by the cluster scheduler
|
|
User: String! # Username
|
|
Project: String! # Project
|
|
Cluster: String! # Name of the cluster this job was running on
|
|
StartTime: Time! # RFC3339 formated string
|
|
Duration: Int! # For running jobs, the time it has already run
|
|
NumNodes: Int! # Number of nodes this job was running on
|
|
NumHWThreads: Int!
|
|
NumAcc: Int!
|
|
SMT: Int!
|
|
Exclusive: Int!
|
|
Partition: String!
|
|
ArrayJobId: Int!
|
|
MonitoringStatus: Int!
|
|
State: JobState! # State of the job
|
|
Tags: [JobTag!]! # List of tags this job has
|
|
Resources: [JobResource!]! # List of hosts/hwthreads/gpus/...
|
|
|
|
# Will be null for running jobs.
|
|
LoadAvg: Float
|
|
MemUsedMax: Float
|
|
FlopsAnyAvg: Float
|
|
MemBwAvg: Float
|
|
NetBwAvg: Float
|
|
FileBwAvg: Float
|
|
}
|
|
|
|
type JobResource {
|
|
Hostname: String!
|
|
HWThreads: [Int!]
|
|
Accelerators: [Accelerator!]
|
|
}
|
|
|
|
type Accelerator {
|
|
Id: String!
|
|
Type: String!
|
|
Model: String!
|
|
}
|
|
|
|
# TODO: Extend by more possible states?
|
|
enum JobState {
|
|
running
|
|
completed
|
|
failed
|
|
canceled
|
|
stopped
|
|
timeout
|
|
}
|
|
|
|
type JobTag {
|
|
Id: ID! # Database ID, unique
|
|
TagType: String! # Type
|
|
TagName: String! # Name
|
|
}
|
|
|
|
type Cluster {
|
|
ClusterID: String!
|
|
ProcessorType: String!
|
|
SocketsPerNode: Int!
|
|
CoresPerSocket: Int!
|
|
ThreadsPerCore: Int!
|
|
FlopRateScalar: Int!
|
|
FlopRateSimd: Int!
|
|
MemoryBandwidth: Int!
|
|
MetricConfig: [MetricConfig!]!
|
|
FilterRanges: FilterRanges!
|
|
}
|
|
|
|
type MetricConfig {
|
|
Name: String!
|
|
Unit: String!
|
|
Timestep: Int!
|
|
Peak: Int!
|
|
Normal: Int!
|
|
Caution: Int!
|
|
Alert: Int!
|
|
Scope: String!
|
|
}
|
|
|
|
type JobMetric {
|
|
Unit: String!
|
|
Scope: JobMetricScope!
|
|
Timestep: Int!
|
|
Series: [JobMetricSeries!]!
|
|
}
|
|
|
|
type JobMetricSeries {
|
|
Hostname: String!
|
|
Id: Int
|
|
Statistics: JobMetricStatistics
|
|
Data: [NullableFloat!]!
|
|
}
|
|
|
|
type JobMetricStatistics {
|
|
Avg: Float!
|
|
Min: Float!
|
|
Max: Float!
|
|
}
|
|
|
|
type JobMetricWithName {
|
|
name: String!
|
|
metric: JobMetric!
|
|
}
|
|
|
|
type MetricFootprints {
|
|
name: String!
|
|
footprints: [NullableFloat!]!
|
|
}
|
|
|
|
enum Aggregate { USER, PROJECT, CLUSTER }
|
|
|
|
type NodeMetric {
|
|
name: String!
|
|
data: [NullableFloat!]!
|
|
}
|
|
|
|
type NodeMetrics {
|
|
id: String!
|
|
metrics: [NodeMetric!]!
|
|
}
|
|
|
|
type Query {
|
|
clusters: [Cluster!]! # List of all clusters
|
|
tags: [JobTag!]! # List of all tags
|
|
|
|
job(id: ID!): Job
|
|
jobMetrics(id: ID!, metrics: [String!]): [JobMetricWithName!]!
|
|
jobsFootprints(filter: [JobFilter!], metrics: [String!]!): [MetricFootprints]!
|
|
|
|
jobs(filter: [JobFilter!], page: PageRequest, order: OrderByInput): JobResultList!
|
|
jobsStatistics(filter: [JobFilter!], groupBy: Aggregate): [JobsStatistics!]!
|
|
|
|
rooflineHeatmap(filter: [JobFilter!]!, rows: Int!, cols: Int!, minX: Float!, minY: Float!, maxX: Float!, maxY: Float!): [[Float!]!]!
|
|
|
|
nodeMetrics(cluster: ID!, nodes: [String!], metrics: [String!], from: Time!, to: Time!): [NodeMetrics!]!
|
|
}
|
|
|
|
type Mutation {
|
|
createTag(type: String!, name: String!): JobTag!
|
|
deleteTag(id: ID!): ID!
|
|
addTagsToJob(job: ID!, tagIds: [ID!]!): [JobTag!]!
|
|
removeTagsFromJob(job: ID!, tagIds: [ID!]!): [JobTag!]!
|
|
|
|
updateConfiguration(name: String!, value: String!): String
|
|
}
|
|
|
|
type IntRangeOutput {
|
|
from: Int!
|
|
to: Int!
|
|
}
|
|
|
|
type TimeRangeOutput {
|
|
from: Time!
|
|
to: Time!
|
|
}
|
|
|
|
type FilterRanges {
|
|
duration: IntRangeOutput!
|
|
numNodes: IntRangeOutput!
|
|
startTime: TimeRangeOutput!
|
|
}
|
|
|
|
input JobFilter {
|
|
tags: [ID!]
|
|
jobId: StringInput
|
|
user: StringInput
|
|
project: StringInput
|
|
cluster: StringInput
|
|
duration: IntRange
|
|
numNodes: IntRange
|
|
startTime: TimeRange
|
|
jobState: [JobState!]
|
|
flopsAnyAvg: FloatRange
|
|
memBwAvg: FloatRange
|
|
loadAvg: FloatRange
|
|
memUsedMax: FloatRange
|
|
}
|
|
|
|
input OrderByInput {
|
|
field: String!
|
|
order: SortDirectionEnum! = ASC
|
|
}
|
|
|
|
enum SortDirectionEnum {
|
|
DESC
|
|
ASC
|
|
}
|
|
|
|
input StringInput {
|
|
eq: String
|
|
contains: String
|
|
startsWith: String
|
|
endsWith: String
|
|
}
|
|
|
|
input IntRange {
|
|
from: Int!
|
|
to: Int!
|
|
}
|
|
|
|
input FloatRange {
|
|
from: Float!
|
|
to: Float!
|
|
}
|
|
|
|
input TimeRange {
|
|
from: Time
|
|
to: Time
|
|
}
|
|
|
|
type JobResultList {
|
|
items: [Job!]!
|
|
offset: Int
|
|
limit: Int
|
|
count: Int
|
|
}
|
|
|
|
type HistoPoint {
|
|
count: Int!
|
|
value: Int!
|
|
}
|
|
|
|
type JobsStatistics {
|
|
id: ID! # If `groupBy` was used, ID of the user/project/cluster
|
|
totalJobs: Int! # Number of jobs that matched
|
|
shortJobs: Int! # Number of jobs with a duration of less than 2 minutes
|
|
totalWalltime: Int! # Sum of the duration of all matched jobs in hours
|
|
totalCoreHours: Int! # Sum of the core hours of all matched jobs
|
|
histWalltime: [HistoPoint!]! # value: hour, count: number of jobs with a rounded duration of value
|
|
histNumNodes: [HistoPoint!]! # value: number of nodes, count: number of jobs with that number of nodes
|
|
}
|
|
|
|
input PageRequest {
|
|
itemsPerPage: Int!
|
|
page: Int!
|
|
}
|
|
|
|
scalar Time
|
|
scalar NullableFloat
|
|
scalar JobMetricScope
|