penguins-eggs
Version:
A remaster system tool, compatible with Arch, Debian, Devuan, Ubuntu and others
96 lines (95 loc) • 3.93 kB
JavaScript
/**
* ./src/commands/analyze.ts
* penguins-eggs v.10.0.0 / ecmascript 2020
* author: Piero Proietti
* email: piero.proietti@gmail.com
* license: MIT
*/
import { Command, Flags } from '@oclif/core';
import fs, { constants } from 'node:fs';
import { access } from 'node:fs/promises';
import si from 'systeminformation';
import Users from '../classes/users.js';
import Utils from '../classes/utils.js';
export default class Analyze extends Command {
static description = 'analyze for syncto';
static examples = ['sudo eggs analyze'];
static flags = {
help: Flags.help({ char: 'h' }),
verbose: Flags.boolean({ char: 'v', description: 'verbose' })
};
config_file = '/etc/penguins-eggs.d/eggs.yaml';
snapshot_dir = '';
work_dir = {};
/**
* fill
*/
async fill() {
try {
const usersArray = [];
await access('/etc/passwd', constants.R_OK | constants.W_OK);
const passwd = fs.readFileSync('/etc/passwd', 'utf8').split('\n');
for (const element of passwd) {
const line = element.split(':');
const users = new Users(line[0], line[1], line[2], line[3], line[4], line[5], line[6]);
await users.getValues();
if (users.password !== undefined) {
usersArray.push(users);
}
}
return usersArray;
}
catch {
console.error("can't read /etc/passwd");
process.exit(1);
}
}
async run() {
Utils.titles(this.id + ' ' + this.argv);
const { flags } = await this.parse(Analyze);
let verbose = false;
if (flags.verbose) {
verbose = true;
}
Utils.warning('eggs will analyze your system, and get users data');
const echo = Utils.setEcho(verbose);
let totalSize = 0;
if (Utils.isRoot(this.id)) {
const audio = await si.audio();
const bios = await si.bios();
const blockDevices = await si.blockDevices();
const chassis = await si.chassis();
const cpu = await si.cpu();
const diskLayout = await si.diskLayout();
const mem = await si.mem();
const usb = await si.usb();
console.log(`chassis: ${chassis.manufacturer} model: ${chassis.manufacturer}`);
console.log(`bios vendor: ${bios.vendor} version: ${bios.version} revision: ${bios.revision}`);
console.log(`processor: ${cpu.brand} core: ${cpu.cores} `);
if (diskLayout[0].device !== undefined) {
console.log(`disk0: ${diskLayout[0].device}`);
}
if (diskLayout[1] !== undefined) {
console.log(`disk1: ${diskLayout[1].device}`);
}
if (diskLayout[2] !== undefined) {
console.log(`disk1: ${diskLayout[2].device}`);
}
// console.log(`name: ${blockDevices[0].name} fs: ${blockDevices[0].fsType}`)
// console.log(`name: ${blockDevices[1].name} fs: ${blockDevices[1].fsType}`)
// console.log(`name: ${blockDevices[2].name} fs: ${blockDevices[2].fsType}`)
// console.log(`name: ${blockDevices[3].name} fs: ${blockDevices[3].fsType}`)
// console.log(`usb: ${usb[0].name}`)
const users = await this.fill();
for (let i = 0; i < users.length; i++)
if (users[i].saveIt) {
console.log(`user: ${users[i].login} \thome: ${users[i].home.padEnd(16)} \tsize: ${Utils.formatBytes(users[i].size)} \tBytes: ${users[i].size} `);
totalSize += users[i].size;
}
console.log(`Total\t\t\t\t\tSize: ${Utils.formatBytes(totalSize)} \tBytes: ${totalSize}`);
}
else {
Utils.useRoot(this.id);
}
}
}