You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
198 lines
3.8 KiB
JavaScript
198 lines
3.8 KiB
JavaScript
"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);
|
|
});
|