mirror of
				https://github.com/ClusterCockpit/cc-backend
				synced 2025-11-04 01:25:06 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			204 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			GraphQL
		
	
	
	
	
	
			
		
		
	
	
			204 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			GraphQL
		
	
	
	
	
	
type Job {
 | 
						|
  id: ID!
 | 
						|
  jobId: String!
 | 
						|
  userId: String!
 | 
						|
  projectId: String!
 | 
						|
  clusterId: String!
 | 
						|
  startTime: Time!
 | 
						|
  duration: Int!
 | 
						|
  numNodes: Int!
 | 
						|
  hasProfile: Boolean!
 | 
						|
  tags: [JobTag!]!
 | 
						|
 | 
						|
  loadAvg: Float
 | 
						|
  memUsedMax: Float
 | 
						|
  flopsAnyAvg: Float
 | 
						|
  memBwAvg: Float
 | 
						|
  netBwAvg: Float
 | 
						|
  fileBwAvg: Float
 | 
						|
}
 | 
						|
 | 
						|
type JobTag {
 | 
						|
  id: ID!
 | 
						|
  tagType: String!
 | 
						|
  tagName: String!
 | 
						|
}
 | 
						|
 | 
						|
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!
 | 
						|
  sampletime: Int!
 | 
						|
  peak: Int!
 | 
						|
  normal: Int!
 | 
						|
  caution: Int!
 | 
						|
  alert: Int!
 | 
						|
}
 | 
						|
 | 
						|
type JobMetric {
 | 
						|
  unit: String!
 | 
						|
  scope: JobMetricScope!
 | 
						|
  timestep: Int!
 | 
						|
  series: [JobMetricSeries]!
 | 
						|
}
 | 
						|
 | 
						|
enum JobMetricScope {
 | 
						|
  node
 | 
						|
  cpu
 | 
						|
  socket
 | 
						|
}
 | 
						|
 | 
						|
type JobMetricSeries {
 | 
						|
  node_id: String!
 | 
						|
  statistics: JobMetricStatistics
 | 
						|
  data: [Float]!
 | 
						|
}
 | 
						|
 | 
						|
type JobMetricStatistics {
 | 
						|
  avg: Float!
 | 
						|
  min: Float!
 | 
						|
  max: Float!
 | 
						|
}
 | 
						|
 | 
						|
type JobMetricWithName {
 | 
						|
  name: String!
 | 
						|
  metric: JobMetric!
 | 
						|
}
 | 
						|
 | 
						|
type Query {
 | 
						|
  clusters: [Cluster!]!
 | 
						|
  jobById(id: ID!): Job
 | 
						|
  jobs(filter: JobFilterList, page: PageRequest, order: OrderByInput): JobResultList!
 | 
						|
  jobsStatistics(filter: JobFilterList): JobsStatistics!
 | 
						|
  jobMetrics(jobId: String!, clusterId: String, metrics: [String]): [JobMetricWithName]!
 | 
						|
  jobMetricAverages(filter: JobFilterList!, metrics: [String]!): [[Float]]!
 | 
						|
  rooflineHeatmap(filter: JobFilterList!, rows: Int!, cols: Int!, minX: Float!, minY: Float!, maxX: Float!, maxY: Float!): [[Float!]]!
 | 
						|
  tags: [JobTag!]!
 | 
						|
  filterRanges: FilterRanges!
 | 
						|
  userStats(startTime: Time, stopTime: Time, clusterId: String): [UserStats!]!
 | 
						|
}
 | 
						|
 | 
						|
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 JobFilterList {
 | 
						|
  list: [JobFilter]
 | 
						|
}
 | 
						|
 | 
						|
input JobFilter {
 | 
						|
  tags: [ID!]
 | 
						|
  jobId: StringInput
 | 
						|
  userId: StringInput
 | 
						|
  projectId: StringInput
 | 
						|
  clusterId: StringInput
 | 
						|
  duration: IntRange
 | 
						|
  numNodes: IntRange
 | 
						|
  startTime: TimeRange
 | 
						|
  isRunning: Boolean
 | 
						|
  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  {
 | 
						|
  totalJobs: Int!
 | 
						|
  shortJobs: Int!
 | 
						|
  totalWalltime: Int!
 | 
						|
  totalCoreHours: Int!
 | 
						|
  histWalltime: [HistoPoint]!
 | 
						|
  histNumNodes: [HistoPoint]!
 | 
						|
}
 | 
						|
 | 
						|
type UserStats {
 | 
						|
  userId: ID!
 | 
						|
  totalJobs: Int!
 | 
						|
  totalWalltime: Float!
 | 
						|
  totalCoreHours: Float!
 | 
						|
}
 | 
						|
 | 
						|
input PageRequest {
 | 
						|
  itemsPerPage: Int!
 | 
						|
  page: Int!
 | 
						|
}
 | 
						|
 | 
						|
scalar Time
 |