extended windows support services(), optimized diskLayout() (OSX), bugfixes
This commit is contained in:
+39
-2
@@ -612,11 +612,14 @@ function diskLayout(callback) {
|
||||
}
|
||||
|
||||
if (_darwin) {
|
||||
exec("system_profiler SPSerialATADataType", function (error, stdout) {
|
||||
exec("system_profiler SPSerialATADataType SPNVMeDataType", function (error, stdout) {
|
||||
if (!error) {
|
||||
let devices = stdout.toString().split(' Physical Interconnect: SATA');
|
||||
let parts = stdout.toString().split('NVMExpress:');
|
||||
|
||||
let devices = parts[0].split(' Physical Interconnect: ');
|
||||
devices.shift();
|
||||
devices.forEach(function (device) {
|
||||
device = 'InterfaceType: ' + device;
|
||||
let lines = device.split('\n');
|
||||
const mediumType = util.getValue(lines, 'Medium Type', ':', true).trim();
|
||||
const sizeStr = util.getValue(lines, 'capacity', ':', true).trim();
|
||||
@@ -645,6 +648,40 @@ function diskLayout(callback) {
|
||||
}
|
||||
}
|
||||
});
|
||||
if (parts.length > 1) {
|
||||
let devices = parts[1].split('\n\n Capacity:');
|
||||
devices.shift();
|
||||
devices.forEach(function (device) {
|
||||
device = '!Capacity: ' + device;
|
||||
let lines = device.split('\n');
|
||||
const linkWidth = util.getValue(lines, 'link width', ':', true).trim();
|
||||
const sizeStr = util.getValue(lines, '!capacity', ':', true).trim();
|
||||
if (sizeStr) {
|
||||
let size = parseInt(sizeStr.match(/\(([^)]+)\)/)[1].replace(/\./g, ""));
|
||||
if (!size) {
|
||||
size = parseInt(sizeStr);
|
||||
}
|
||||
if (size) {
|
||||
result.push({
|
||||
type: 'NVMe',
|
||||
name: util.getValue(lines, 'Model', ':', true).trim(),
|
||||
vendor: '',
|
||||
size: size,
|
||||
bytesPerSector: -1,
|
||||
totalCylinders: -1,
|
||||
totalHeads: -1,
|
||||
totalSectors: -1,
|
||||
totalTracks: -1,
|
||||
tracksPerCylinder: -1,
|
||||
sectorsPerTrack: -1,
|
||||
firmwareRevision: util.getValue(lines, 'Revision', ':', true).trim(),
|
||||
serialNum: util.getValue(lines, 'Serial Number', ':', true).trim(),
|
||||
interfaceType: ('PCIe ' + linkWidth).trim(),
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
if (callback) {
|
||||
callback(result)
|
||||
|
||||
+81
-35
@@ -70,35 +70,84 @@ function services(srv, callback) {
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
process.nextTick(() => {
|
||||
if (_windows) {
|
||||
let error = new Error(NOT_SUPPORTED);
|
||||
if (callback) { callback(NOT_SUPPORTED) }
|
||||
reject(error);
|
||||
}
|
||||
|
||||
srv = srv.trim().replace(/,+/g, " ").replace(/ +/g, " ").replace(/ +/g, "|");
|
||||
srv = srv.trim().toLowerCase().replace(/,+/g, " ").replace(/ +/g, " ").replace(/ +/g, "|");
|
||||
let srvs = srv.split('|');
|
||||
let comm = (_darwin) ? "ps -caxm -o pcpu,pmem,comm" : "ps axo pcpu,pmem,comm";
|
||||
let data = [];
|
||||
if (srv !== '' && srvs.length > 0) {
|
||||
exec(comm + " | grep -v grep | egrep '" + srv + "'", function (error, stdout) {
|
||||
if (!error) {
|
||||
let lines = stdout.toString().replace(/ +/g, " ").replace(/,+/g, ".").split('\n');
|
||||
srvs.forEach(function (srv) {
|
||||
let ps = lines.filter(function (e) {
|
||||
return e.indexOf(srv) !== -1
|
||||
let dataSrv = [];
|
||||
|
||||
if (_linux || _darwin) {
|
||||
let comm = (_darwin) ? "ps -caxm -o pcpu,pmem,comm" : "ps axo pcpu,pmem,comm";
|
||||
if (srv !== '' && srvs.length > 0) {
|
||||
exec(comm + " | grep -v grep | egrep '" + srv + "'", function (error, stdout) {
|
||||
if (!error) {
|
||||
let lines = stdout.toString().replace(/ +/g, " ").replace(/,+/g, ".").split('\n');
|
||||
srvs.forEach(function (srv) {
|
||||
let ps = lines.filter(function (e) {
|
||||
return e.indexOf(srv) !== -1
|
||||
});
|
||||
data.push({
|
||||
'name': srv,
|
||||
'running': ps.length > 0,
|
||||
'pcpu': parseFloat((ps.reduce(function (pv, cv) {
|
||||
return pv + parseFloat(cv.trim().split(' ')[0]);
|
||||
}, 0)).toFixed(2)),
|
||||
'pmem': parseFloat((ps.reduce(function (pv, cv) {
|
||||
return pv + parseFloat(cv.trim().split(' ')[1]);
|
||||
}, 0)).toFixed(2))
|
||||
})
|
||||
});
|
||||
if (callback) { callback(data) }
|
||||
resolve(data);
|
||||
} else {
|
||||
srvs.forEach(function (srv) {
|
||||
data.push({
|
||||
'name': srv,
|
||||
'running': false,
|
||||
'pcpu': 0,
|
||||
'pmem': 0
|
||||
})
|
||||
});
|
||||
if (callback) { callback(data) }
|
||||
resolve(data);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (callback) { callback(data) }
|
||||
resolve(data);
|
||||
}
|
||||
}
|
||||
if (_windows) {
|
||||
exec("wmic service get /value", {maxBuffer: 1024 * 1000}, function (error, stdout) {
|
||||
if (!error) {
|
||||
let serviceSections = stdout.split(/\n\s*\n/);
|
||||
for (let i = 0; i < serviceSections.length; i++) {
|
||||
if (serviceSections[i].trim() !== "") {
|
||||
let lines = serviceSections[i].trim().split('\r\n');
|
||||
let srv = util.getValue(lines, 'Name', '=', true).toLowerCase();
|
||||
let started = util.getValue(lines, 'Started', '=', true);
|
||||
if (srvs.indexOf(srv) >= 0) {
|
||||
data.push({
|
||||
'name': srv,
|
||||
'running': (started === 'TRUE'),
|
||||
'pcpu': 0,
|
||||
'pmem': 0
|
||||
})
|
||||
dataSrv.push(srv);
|
||||
}
|
||||
}
|
||||
}
|
||||
let srvsMissing = srvs.filter(function (e) {
|
||||
return dataSrv.indexOf(e) === -1
|
||||
});
|
||||
srvsMissing.forEach(function (srv) {
|
||||
data.push({
|
||||
'name': srv,
|
||||
'running': ps.length > 0,
|
||||
'pcpu': parseFloat((ps.reduce(function (pv, cv) {
|
||||
return pv + parseFloat(cv.trim().split(' ')[0]);
|
||||
}, 0)).toFixed(2)),
|
||||
'pmem': parseFloat((ps.reduce(function (pv, cv) {
|
||||
return pv + parseFloat(cv.trim().split(' ')[1]);
|
||||
}, 0)).toFixed(2))
|
||||
'running': false,
|
||||
'pcpu': 0,
|
||||
'pmem': 0
|
||||
})
|
||||
});
|
||||
|
||||
if (callback) { callback(data) }
|
||||
resolve(data);
|
||||
} else {
|
||||
@@ -113,10 +162,7 @@ function services(srv, callback) {
|
||||
if (callback) { callback(data) }
|
||||
resolve(data);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (callback) { callback(data) }
|
||||
resolve(data);
|
||||
})
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -178,15 +224,15 @@ function processes(callback) {
|
||||
|
||||
function getName(command) {
|
||||
command = command || '';
|
||||
let result = command.split(' ');
|
||||
let result = command.split(' ')[0];
|
||||
if (result.substr(-1) === ':') {
|
||||
result = result.substr(0, result.length - 1);
|
||||
}
|
||||
if (result.substr(0,1) !== '[') {
|
||||
let parts = part.split('/');
|
||||
result = parts[parts.length];
|
||||
let parts = result.split('/');
|
||||
result = parts[parts.length - 1];
|
||||
}
|
||||
return result
|
||||
return result;
|
||||
}
|
||||
|
||||
function parseLine(line) {
|
||||
@@ -438,17 +484,17 @@ function processes(callback) {
|
||||
});
|
||||
}
|
||||
if (_windows) {
|
||||
exec("wmic process get /value", function (error, stdout) {
|
||||
exec("wmic process get /value", {maxBuffer: 1024 * 1000}, function (error, stdout) {
|
||||
if (!error) {
|
||||
let psections = stdout.split(/\n\s*\n/);
|
||||
let processSections = stdout.split(/\n\s*\n/);
|
||||
let procs = [];
|
||||
let procStats = [];
|
||||
let list_new = {};
|
||||
let allcpuu = 0;
|
||||
let allcpus = 0;
|
||||
for (let i = 0; i < psections.length; i++) {
|
||||
if (psections[i].trim() !== "") {
|
||||
let lines = psections[i].trim().split('\r\n');
|
||||
for (let i = 0; i < processSections.length; i++) {
|
||||
if (processSections[i].trim() !== "") {
|
||||
let lines = processSections[i].trim().split('\r\n');
|
||||
let pid = parseInt(util.getValue(lines, 'ProcessId', '=', true), 10);
|
||||
let statusValue = util.getValue(lines, 'ExecutionState', '=')
|
||||
let name = util.getValue(lines, 'Caption', '=', true);
|
||||
|
||||
Reference in New Issue
Block a user