"use strict" ;
const Promise = require ( "bluebird" ) ;
const graphql = require ( "graphql" ) ;
const util = require ( "util" ) ;
const chalk = require ( "chalk" ) ;
const gql = require ( "./graphql/tag" ) ;
const api = require ( "./api/index" ) ;
function debugDisplay ( results ) {
if ( results . errors != null && results . errors . length > 0 ) {
results . errors . forEach ( ( graphqlError ) => {
let errorHeader ;
if ( graphqlError . path != null ) {
errorHeader = ` Error occurred for path: ${ graphqlError . path . join ( " -> " ) } ` ;
} else if ( graphqlError . locations != null && graphqlError . locations . length > 0 ) {
errorHeader = ` Error occurred at line ${ graphqlError . locations [ 0 ] . line } , column ${ graphqlError . locations [ 0 ] . column } ` ;
} else {
errorHeader = "Error occurred in GraphQL" ;
}
console . log ( chalk . bgBlue . white ( errorHeader ) ) ;
let error = graphqlError . originalError ;
if ( error != null ) {
if ( error . showChain != null ) {
console . log ( error . showChain ( ) ) ;
} else {
console . log ( error . stack ) ;
}
} else {
console . log ( graphqlError . stack ) ;
}
console . log ( "-----------------------------" ) ;
} ) ;
}
console . log ( util . inspect ( results . data , { colors : true , depth : null } ) ) ;
}
// ###############################################
let makeQuery = api ( ) ;
// FIXME: If we intend to target macOS, a lot of whitespace-based output splitting won't work: https://www.mail-archive.com/austin-group-l@opengroup.org/msg01678.html
// findmnt --json -o +SIZE,AVAIL
// -> map back to mountPoint stuff?
// blkid
// to discover the filesystem that a given path exists on: stat -c %m
// partx
// (rest of util-linux)
// memory usage: /proc/meminfo
return Promise . try ( ( ) => {
let query = gql `
query {
hardware {
drives {
smartHealth
size
rpm
serialNumber
model
modelFamily
firmwareVersion
blockDevice {
name
}
partitions : allBlockDevices ( type : PARTITION ) {
name
size
mounts {
mountpoint
}
}
}
}
}
` ;
// let query = gql`
// # query SomeDrives($drivePaths: [String]) {
// query SomeDrives {
// hardware {
// drives {
// path
// interface
// model
// modelFamily
// blockDevice {
// submounts: mounts(type: SUBMOUNT) {
// mountpoint
// filesystem
// }
// }
// # smartAvailable
// # smartEnabled
// # serialNumber
// # wwn
// # firmwareVersion
// # size
// # rpm
// # logicalSectorSize
// # physicalSectorSize
// # formFactor
// # ataVersion
// # sataVersion
// # smartHealth
// # smartAttributes {
// # name
// # type
// # value
// # failingNow
// # flags {
// # affectsPerformance
// # indicatesFailure
// # }
// # }
// # blockDevice {
// # removable
// # children {
// # name
// # mountpoint
// # size
// # }
// # }
// }
// }
// # resources {
// # blockDevices {
// # name
// # mountpoint
// # size
// # deviceNumber
// # removable
// # readOnly
// # parent { name }
// # children {
// # name
// # mountpoint
// # size
// # deviceNumber
// # removable
// # readOnly
// # parent { name }
// # }
// # }
// # lvm {
// # physicalVolumes {
// # path
// # blockDevice {
// # name
// # deviceNumber
// # }
// # volumeGroup {
// # name
// # }
// # format
// # size
// # freeSpace
// # duplicate
// # allocatable
// # used
// # exported
// # missing
// # }
// # }
// # }
// }
// `;
return makeQuery ( query , {
// drivePaths: ["/dev/sda", "/dev/sdb"]
} ) ;
} ) . then ( ( results ) => {
debugDisplay ( results ) ;
} ) ;