scalar ByteSize scalar TimeSize type AccessPermissions { read: Boolean write: Boolean execute: Boolean } type Permissions { owner: AccessPermissions group: AccessPermissions everybody: AccessPermissions setUID: Boolean setGID: Boolean sticky: Boolean } type User { name: String id: Int # FIXME } type Group { name: String id: Int # FIXME } type RawMountValueOption { key: String! value: String } type RawMountFlagOption { key: String! } union RawMountOption = RawMountFlagOption | RawMountValueOption enum MountErrorHandlingMode { PANIC CONTINUE REMOUNT_READ_ONLY } enum ExtAllocator { OLD ORLOV } enum ExtJournalingMode { JOURNAL ORDERED WRITEBACK } enum ExtBufferErrorHandlingMode { IGNORE_ERROR ABORT_JOURNAL } enum ExtQuotaSystem { OLD V0 V1 } enum FatTimestampsAllowedFrom { EVERYBODY GROUP OWNER } enum FatNameStrictness { RELAXED NORMAL STRICT } enum FatShortNameMode { LOWER WINDOWS_95 WINDOWS_NT MIXED } enum FatLineEndingConversionPolicy { BINARY TEXT AUTO } type MountOptions { writable: Boolean userMountable: Boolean freelyMountable: Boolean asynchronous: Boolean asynchronousDirectoryUpdates: Boolean allowDeviceNodes: Boolean allowExecution: Boolean allowMandatoryLocks: Boolean allowSetUIDBits: Boolean requiresNetworkAccess: Boolean allowOfflineChecks: Boolean updateAccessTime: Boolean updateDirectoryAccessTime: Boolean updateAccessTimeRelatively: Boolean updateAccessTimeStrictly: Boolean automaticallyMountable: Boolean incrementIVersion: Boolean printDebugInformation: Boolean reportMountingErrors: Boolean onError: MountErrorHandlingMode owner: User group: Group filesystemOwner: User filesystemGroup: Group filesystemPermissions: Permissions # devpts newPTYOwner: User newPTYGroup: Group newPTYPermissions: Permissions isolatePTYs: Boolean ptmxPermissions: Permissions # tmpfs, hugetlbfs rootOwner: User rootGroup: Group rootPermissions: Permissions maximumInodes: Int size: ByteSize # hugetlbfs pageSize: ByteSize sizeAsPoolPercentage: Float minimumSize: ByteSize minimumSizeAsPoolPercentage: Float # tmpfs blockCount: Int numaPolicy: String # ext2, ext3, ext4 allow32bitIdentifiers: Boolean allow64bitInodeVersions: Boolean allowExtendedAttributes: Boolean supportACL: Boolean showOnlyUsableSpace: Boolean useGroupIDFromDirectory: Boolean allowAutomaticFilesystemResizing: Boolean enableMetadataBlockTracking: Boolean simulateAbort: Boolean attachBufferHeads: Boolean # obsolete checkFilesystemOnMount: Boolean enableWriteBarriers: Boolean enableHardwareDeleteCalls: Boolean allocator: ExtAllocator reservedSpaceForGroup: Group reservedSpaceForUser: User superblockIndex: Int inodeBlockReadAheadLimit: Int stripeBlocks: Int directorySizeLimit: ByteSize updateJournalFormat: Boolean enableJournalChecksumming: Boolean asynchronousJournalCommits: Boolean processJournal: Boolean journalInode: Int journalDevice: String # FIXME: Translate this into a BlockDevice somehow? Expected 'number' format here is unclear. journalPath: String journalingMode: ExtJournalingMode journalIOPriority: Int onBufferError: ExtBufferErrorHandlingMode commitInterval: TimeSize allowDeferredAllocations: Boolean batchingTimeLimit: TimeSize batchingTimeMinimum: TimeSize enableMetadataBlockCache: Boolean enableDirectIOReadLocking: Boolean enableInodeTableBlockInitialization: Boolean inodeTableBlockInitializationDelay: Int automaticallySynchronizeBeforeRename: Boolean enableGroupQuota: Boolean enableUserQuota: Boolean enableProjectQuota: Boolean quotaSystem: ExtQuotaSystem userQuotaFile: String groupQuotaFile: String # fat, vfat blockSize: ByteSize allocationTableBitness: Int compressedVolumeFileModule: String compressedVolumeFileOption: String defaultFileMode: Permissions defaultFolderMode: Permissions nameStrictness: FatNameStrictness timestampChangesAllowedFrom: FatTimestampsAllowedFrom restrictExecutableModeToWindowsBinaries: Boolean treatAttrSysFlagAsImmutable: Boolean allowDifferentlyCasedNameConflicts: Boolean shortNameMode: FatShortNameMode preferShortNamesWithoutSequenceNumber: Boolean enableUnicodeCharacterEscaping: Boolean supportUtf8: Boolean enableReadOnlyFlagSupport: Boolean enableDOS1xFallbackConfiguration: Boolean enableQuietModeFailures: Boolean enableNFSInodeCache: Boolean enableEagerFlushing: Boolean enableFreeClusterCache: Boolean enableTimezoneConversion: Boolean timestampOffset: TimeSize lineEndingConversionPolicy: FatLineEndingConversionPolicy conversionCharacterSet: String codepage: Int } type Mount { path: String! rawOptions: [RawMountOption] options: MountOptions } type SmartAttributeFlags { autoKeep: Boolean! eventCount: Boolean! errorRate: Boolean! affectsPerformance: Boolean! updatedOnline: Boolean! indicatesFailure: Boolean! } enum SmartAttributeType { PRE_FAIL OLD_AGE } enum SmartAttributeUpdateType { ALWAYS OFFLINE } enum SmartHealth { HEALTHY DETERIORATING FAILING } type SmartAttribute { id: Int! name: String! flags: SmartAttributeFlags! value: Int! rawValue: String! worstValueSeen: Int! failureThreshold: Int! type: SmartAttributeType! failingNow: Boolean! failedBefore: Boolean! updatedWhen: SmartAttributeUpdateType! } enum BlockDeviceType { DISK PARTITION LOOP_DEVICE } type BlockDevice { name: String! type: BlockDeviceType! path: String! mountpoint: String deviceNumber: String! removable: Boolean! readOnly: Boolean! size: ByteSize! parent: BlockDevice children: [BlockDevice!]! } type PhysicalDrive { path: String! interface: String! blockDevice: BlockDevice! allBlockDevices(type: BlockDeviceType): [BlockDevice!]! smartAvailable: Boolean! smartEnabled: Boolean smartHealth: SmartHealth smartAttributes: [SmartAttribute!]! model: String modelFamily: String serialNumber: String wwn: String, firmwareVersion: String size: ByteSize rpm: Int logicalSectorSize: ByteSize physicalSectorSize: ByteSize formFactor: String ataVersion: String sataVersion: String } type LVMPhysicalVolume { path: String! blockDevice: BlockDevice! volumeGroup: LVMVolumeGroup! format: String! size: ByteSize! freeSpace: ByteSize! duplicate: Boolean! allocatable: Boolean! used: Boolean! exported: Boolean! missing: Boolean! } type LVMVolumeGroup { name: String! } type HardwareQuery { drives(paths: [String]): [PhysicalDrive!]! } type LVMQuery { physicalVolumes: [LVMPhysicalVolume!]! volumeGroups: [LVMVolumeGroup!]! } type ResourcesQuery { blockDevices: [BlockDevice!]! lvm: LVMQuery } type Query { hardware: HardwareQuery! resources: ResourcesQuery! }