1.1.0 • Published 5 years ago

@slimio/winmem v1.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
5 years ago

Winmem

Maintenance GitHub license V1.0 SlimIO Windmem is a NodeJS binding which expose low-level Microsoft APIs on Memory.

This binding expose the following methods/struct:

!!! All method are called asynchronously without blocking the libuv event-loop !!!

Getting Started

This package is available in the Node Package Repository and can be easily installed with npm or yarn.

$ npm i @slimio/winmem
# or
$ yarn add @slimio/winmem

Usage example

Get, global or by process, memory informations !

const winmem = require("@slimio/winmem");

async function main() {
    const perfomanceInfo = await winmem.getPerformanceInfo();
    console.log(perfomanceInfo);

    const globalMemory = await winmem.globalMemoryStatus();
    console.log(globalMemory);

    const processMemories = await windrive.getProcessMemory();
    for (const [processName, processMemory] of Object.entries(processMemories)) {
        console.log(`${processName} : ${JSON.stringify(processMemory, null, 4)}`);
    }
}
main().catch(console.error);

API

getPerformanceInfo: Promise< PerfomanceInfo >

Retrieves the currently performance information. Return a PerfomanceInfo Object.

export interface PerfomanceInfo {
    commitTotal: number;
    commitLimit: number;
    commitPeak: number;
    physicalTotal: number;
    physicalAvailable: number;
    systemCache: number;
    kernelTotal: number;
    kernelPaged: number;
    kernelNonpaged: number;
    pageSize: number;
    handleCount: number;
    processCount: number;
    threadCount: number;
}

globalMemoryStatus: Promise< GlobalMemory >

Retrieves the currently gloval memory status. Return a GlobalMemory Object.

export interface GlobalMemory {
    dwMemoryLoad: number;
    ullTotalPhys: number;
    ullAvailPhys: number;
    ullTotalPageFile: number;
    ullAvailPageFile: number;
    ullTotalVirtual: number;
    ullAvailVirtual: number;
    ullAvailExtendedVirtual: number;
}

getProcessMemory: Promise< ProcessMemory[] >

Retrieves all currently process memories. Return a ProcessMemories Object.

export interface ProcessMemories{
    [processName: string]: ProcessMemory;
}

export interface ProcessMemory {
    error: string;
    processId: number;
    pageFaultCount: number;
    peakWorkingSetSize: number;
    workingSetSize: number;
    quotaPeakPagedPoolUsage: number;
    quotaPagedPoolUsage: number;
    quotaPeakNonPagedPoolUsage: number;
    quotaNonPagedPoolUsage: number;
    pagefileUsage: number;
    peakPagefileUsage: number;
    privateUsage: number;
}

If the result of error property is null, all properties (except processId) are equal to 0

How to build the project

Before building the project, be sure to get the following npm package installed:

Then, execute these commands in order:

$ npm install
$ npx node-gyp configure
$ npx node-gyp build

Available commands

All projects commands are described here:

commanddescription
npm run prebuildGenerate addon prebuild
npm run docGenerate JSDoc .HTML documentation (in the /docs root directory)
npm run coverageGenerate coverage of tests
npm run reportGenerate .HTML report of tests coverage

the report command have to be triggered after the coverage command.