# Diagnostics Library

pui-diagnostics is a framework-agnostic JavaScript library for logging messages from web applications, following [ICEMT logging guidelines](https://confluence.ice.com/x/hhxLDg).

[Build](https://jenkinsbuild.elliemae.cloud/job/UIPlatform/job/pui-diagnostics/job/master/)
[SonarQube Report](https://sonarqube.jenkins.elliemae.cloud/dashboard?id=pui-diagnostics-master&branch=master)

[Documentation](https://docs.pui.mortgagetech.q1.ice.com/diagnostics)

## Quick Start

```ts
import {
  logger,
  http,
  logUnhandledErrors,
  webvitals,
} from '@elliemae/pui-diagnostics';

const appLogger = logger({
  transport: http('https://int.api.ellielabs.com/diagnostics/v2/logging'),
  index: 'myapp',
  team: 'my team',
  appName: 'Hello World App',
});

logUnhandledErrors(appLogger);
webvitals(appLogger);

appLogger.info('Application launched');
```

## Reducing API Load

The HTTP transport supports options to control log volume:

```ts
const transport = http('https://api.ellielabs.com/diagnostics/v2/logging', {
  flushInterval: 15000, // flush batched logs every 15s (default: 10s)
  maxBatchSize: 50, // flush early at 50 buffered logs (default: 50)
  maxLogsPerInterval: 200, // cap non-critical logs per window (default: unlimited)
  samplingRate: 0.5, // send ~50% of non-critical logs (default: 1 = all)
});
```

WARN, ERROR, and FATAL logs are always sent immediately and bypass batching, sampling, and rate limiting.

## Documentation

- [Getting Started](docs/index.md)
- [Installation](docs/installation.md)
- [Usage & API Reference](docs/usage.md)
- [Features](docs/features.md)

## Migration Guide

- [v2 to v3](https://confluence.elliemae.io/display/FEAE/Diagnostics+Library+ChangeLog#DiagnosticsLibraryChangeLog-v2tov3)
