type Job { id: ID! jobId: String! userId: String! projectId: String! clusterId: String! startTime: Time! duration: Int! numNodes: Int! } type JobData { load_one: JobMetric mem_used: JobMetric mem_bw: JobMetric flops_any: JobMetric flops_dp: JobMetric flops_sp: JobMetric cpi_avg: JobMetric clock_speed: JobMetric total_power: JobMetric traffic_read_eth: JobMetric traffic_write_eth: JobMetric traffic_read_lustre: JobMetric traffic_write_lustre: JobMetric reg_read_lustre: JobMetric reg_write_lustre: JobMetric inodes_lustre: JobMetric pkg_rate_read_ib: JobMetric pkg_rate_write_ib: JobMetric congestion_ib: JobMetric } 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 Query { jobById(jobId: String!): Job jobs(filter: JobFilterList, page: PageRequest, order: OrderByInput): JobResultList! jobsStatistics(filter: JobFilterList): JobsStatistics! jobDataById(jobId: String!): JobData jobAvailableMetricsById(jobId: String!, selectMetrics: [String]): [JobMetricWithName]! } input StartJobInput { jobId: String! userId: String! projectId: String! clusterId: String! startTime: Time! numNodes: Int! } input StopJobInput { stopTime: Time! } input AddJobInput { jobId: String! userId: String! projectId: String! clusterId: String! startTime: Time! duration: Int! numNodes: Int! } input JobFilterList { list: [JobFilter] } input JobFilter { jobId: StringInput userId: StringInput projectId: StringInput clusterId: StringInput duration: IntRange numNodes: IntRange startTime: TimeRange hasProfile: Boolean } 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 JobMetricWithName { name: String! metric: JobMetric! } type HistoPoint { count: Int! value: Int! } type JobsStatistics { totalJobs: Int! shortJobs: Int! totalWalltime: Int! totalCoreHours: Int! histWalltime: [HistoPoint]! histNumNodes: [HistoPoint]! } input PageRequest { itemsPerPage: Int page: Int } scalar Time