Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | 3x 3x 3x 5x 5x 2x 2x 2x 1x 1x 2x 2x 2x 2x 2x 2x 1x 2x 2x 1x 1x | import { Inject, Injectable, Logger } from '@nestjs/common'; import { exec, ExecException } from 'child_process'; import * as dotenv from 'dotenv'; import * as os from 'os'; import { catchError, map, Observable, of } from 'rxjs'; import { IDiagnosticsService, IPingResult, TDiagData } from '../interfaces/diagnostics.interface'; export const CHILD_PROCESS_EXEC = Symbol('CHILD_PROCESS_EXEC'); export const DIAGNOSTICS_SERVICE_TOKEN = Symbol('DIAGNOSTICS_SERVICE_TOKEN'); @Injectable() export class AppDiagnosticsService implements IDiagnosticsService { constructor(@Inject(CHILD_PROCESS_EXEC) private readonly childProcessExec: typeof exec) { dotenv.config(); } private npmVersion() { const observable$ = new Observable<string>(subscriber => { let version = 'N/A'; if (typeof process.env['ELECTRON'] !== 'undefined') { subscriber.next(version); subscriber.complete(); } this.childProcessExec('npm --version', (error: ExecException | null, stdout: string, stderr: string) => { Iif (error !== null) { Logger.error(error); subscriber.error(version); } version = stdout.toString().replace(os.EOL, ''); subscriber.next(version); subscriber.complete(); }); }); return observable$.pipe(catchError((error: string) => of(error))); } public ping(): IPingResult { return { message: 'Diagnostics service is online. Routes: /, /static.', } as IPingResult; } public static(): Observable<TDiagData> { return this.npmVersion().pipe( map( npmVersion => [ { name: 'Node.js Version', value: process.version.replace('v', ''), }, { name: 'NPM Version', value: npmVersion, }, { name: 'OS Type', value: os.type(), }, { name: 'OS Platform', value: os.platform(), }, { name: 'OS Architecture', value: os.arch(), }, { name: 'OS Release', value: os.release(), }, { name: 'CPU Cores', value: os.cpus().length, }, ] as TDiagData, ), ); } public dynamic(): TDiagData { const divider = 1048576; return [ { name: 'Free Memory', value: `${Math.round(os.freemem() / divider)}MB`, }, { name: 'Uptime', value: `${os.uptime()}s`, }, ] as TDiagData; } } |