Socket
Book a DemoInstallSign in
Socket

@eligundry/server-timing

Package Overview
Dependencies
Maintainers
0
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@eligundry/server-timing

Framework agnostic implementation for tracking app latency with Server-Timing headers

1.0.5
latest
Source
npmnpm
Version published
Maintainers
0
Created
Source

@eligundry/server-timing

This package is a framework agnostic helper class to construct Server-Timing headers.

Installation

$ npm install -S @eligundry/server-timing

This module is ESM only! I apologize in advance for the pain that you might feel in the short term!

Usage

import ServerTiming from '@eligundry/server-timing'

const handler = async () => {
  const serverTiming = new ServerTiming()

  // Functions can be tracked manually
  serverTiming.start('db')
  await db.query()
  serverTiming.end('db')

  // Timing calls can be chained
  serverTiming.start('db.getUsers')
  const users = await db.getUsers()
  serverTiming.end('db.getUsers').start('cache.users')
  await cache.set('users', users)
  serverTiming.end('cache.users')

  // All of this is nice, but you really should be using the track method,
  // which allows for wrapping of functions that will track latency.
  const orders = await serverTiming.track('db.getOrders', () => db.getOrders())

  // All tracking calls can accept a human readable description of the
  // tracking call.
  const stats = await serverTiming.track(
    {
      label: 'db.getStats',
      desc: 'Sales Stats',
    },
    () => db.getStats()
  )

  // Entries can be added without measurements
  serverTiming
    .add('cache.miss')
    .track('cache.stats', () => cache.set('stats', stats))

  // When you are done tracking operations, attach headers to the response by
  // calling serverTiming.header().
  return json({ users, orders, stats }, {
    headers: {
      [serverTiming.headerKey]: serverTiming.toString(),
    }
  })
}

This above example will output this header:

Server-Timing: db;dur=1000.075, db.getUsers;dur=1103.056, cache.users;dur=100.054, db.getOrders;dur=1000.050, db.getStats;desc="Sales Stats";dur=1200.048, cache.miss, cache.stats;dur=100.053

And will look like this in the devtools:

Server-Timing Preview

It's like have a little mini DataDog right in your browser!

Documentation

All documentation lives next to the code in ServerTiming.ts.

Contributing

This project uses node:test and requires Node >= 18.

# Run the tests
$ npm test

FAQs

Package last updated on 10 Jul 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.