@lite-monitor/base v1.2.1
@lite-monitor/base
A basic event tracking library that provides maximum flexibility and complete event definition
Table of Contents
Background
LiteMonitor started with a database online examination real-time monitoring system. During the development of the system, I found that I needed an event tracking library that could meet the following characteristics:
- Lightweight
 - Low invasiveness
 - Well defined
 - Good compatibility
 
As a result, I built a JavaScript library and published it to npm. In February 2021, I started developing version 1.0 of the project.
Installation
This library uses Node.js and its package manager. Please make sure they are installed locally.
$ npm install @lite-monitor/baseor
$ yarn add @lite-monitor/baseor
$ pnpm add @lite-monitor/baseUsage
This library can be used in CommonJS project and ESM project. Please refer to the Examples.
Examples
For Node.js
import {
  Monitor,
  type ErrorEvent,
  type MonitorFetcher,
  type PublicAttrArch,
  type PublicAttrOrientation,
  type PublicAttrOs,
  type PublicAttrPlatform,
  type PublicAttrType,
} from '@lite-monitor/base';
import http from 'http';
import https from 'https';
import os from 'os';
// Initialize
const fetcher: MonitorFetcher = (method, url, type, body) => {
  return new Promise((resolve, reject) => {
    if (url.protocol !== 'http:' && url.protocol !== 'https:') {
      reject(new Error('bad url'));
    } else {
      const nodeModule = url.protocol === 'http:' ? http : https;
      const options = { method, headers: type ? { 'Content-Type': type } : {} };
      const request = nodeModule.request(url, options, (res) =>
        resolve(res.statusMessage || ''),
      );
      request.on('error', (err) => reject(err));
      request.write(body);
      request.end();
    }
  });
};
const monitor = new Monitor(fetcher);
// Report error event
const { name, message, stack } = new Error();
const event: ErrorEvent = {
  type: PublicAttrType.ERROR,
  core: os.cpus().length,
  memory: os.totalmem() / (1 << 30),
  platform: PublicAttrPlatform.NODE,
  platformVersion: process.version.substr(1),
  os: PublicAttrOs.UNKNOWN,
  osVersion: os.release(),
  arch: PublicAttrArch.UNKNOWN,
  orientation: PublicAttrOrientation.UNKNOWN,
  screenResolution: [0, 0],
  windowResolution: [0, 0],
  name,
  message,
  stack: stack?.split('\n    at ').slice(1) || [],
};
monitor.report([event]);For web browsers
import {
  Monitor,
  type ErrorEvent,
  type MonitorFetcher,
  type PublicAttrArch,
  type PublicAttrOrientation,
  type PublicAttrOs,
  type PublicAttrPlatform,
  type PublicAttrType,
} from '@lite-monitor/base';
// Initialize
const fetcher: MonitorFetcher = (method, url, type, body) => {
  return new Promise((resolve, reject) => {
    if (url.protocol !== 'http:' && url.protocol !== 'https:') {
      reject(new Error('bad url'));
    } else {
      const options: RequestInit = {
        method,
        headers: type ? { 'Content-Type': type } : {},
        body,
        mode: 'cors',
      };
      globalThis
        .fetch(url.href, options)
        .then((res) => resolve(res.statusText))
        .catch((err) => reject(err));
    }
  });
};
const monitor = new Monitor(fetcher);
// Report error event
const { name, message, stack } = new Error();
const event: ErrorEvent = {
  type: PublicAttrType.ERROR,
  core: globalThis.navigator.hardwareConcurrency || 0,
  memory:
    (globalThis.navigator as Navigator & { deviceMemory: number })
      .deviceMemory || 0,
  platform: PublicAttrPlatform.UNKNOWN,
  platformVersion: '',
  os: PublicAttrOs.UNKNOWN,
  osVersion: '',
  arch: PublicAttrArch.UNKNOWN,
  orientation: PublicAttrOrientation.UNKNOWN,
  screenResolution: [
    globalThis.screen?.width || 0,
    globalThis.screen?.height || 0,
  ],
  windowResolution: [globalThis?.innerWidth || 0, globalThis?.innerHeight || 0],
  name,
  message,
  stack: stack?.split('\n    at ').slice(1) || [],
};
monitor.report([event]);Related Efforts
Maintainers
Contributing
Feel free to open an issue or PR.
License
MIT © 谢沛东
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago