Skip to content

crontinel/node

Repository files navigation

@crontinel/node

Crontinel monitoring SDK for Node.js applications. Send cron, queue, and job monitoring events from any Node.js app — standalone or alongside the crontinel/laravel PHP package.

Install

# Authenticate to GitHub Packages first
npm login --auth-type=legacy --scope=@crontinel --registry=https://npm.pkg.github.com
npm install @crontinel/node
# or
yarn add @crontinel/node
# or
pnpm add @crontinel/node

Requirements

  • Node.js 18+

Quick Start

Initialize the client once, then reuse it for cron heartbeats, queue submissions, and custom events:

import Crontinel from '@crontinel/node';

const crontinel = new Crontinel({
  apiKey: process.env.CRONTINEL_API_KEY!,
  apiUrl: process.env.CRONTINEL_API_URL,   // defaults to https://app.crontinel.com
  appName: 'my-service',                   // optional, default: 'node'
});

Cron heartbeat / submission

scheduleRun() is the cron heartbeat. Call it after a scheduled job completes so Crontinel can track success, failure, and duration:

await crontinel.scheduleRun({
  command: 'reports:generate',
  duration_ms: 2340,
  exit_code: 0,   // 0 = success, 1 = failure
});

Queue submissions

await crontinel.queueProcessed({
  queue: 'emails',
  processed: 12,
  failed: 0,
  duration_ms: 8901,
});

Custom events

await crontinel.event({
  key: 'disk-space-warning',
  message: 'Disk usage above 90%',
  state: 'firing',
});

monitorSchedule helper

Wrap any async function and automatically report its outcome:

const reports = await crontinel.monitorSchedule('reports:generate', async () => {
  // your cron job logic
  await sendDailyReports();
  return { sent: 142, failed: 0 }; // return value is preserved
});
// { result: { sent: 142, failed: 0 }, duration_ms: 1840, exit_code: 0 }

Environment variables

Variable Default Description
CRONTINEL_API_KEY Your Crontinel API key (required)
CRONTINEL_API_URL https://app.crontinel.com Crontinel SaaS or self-hosted endpoint

Framework integrations

Node-cron

import cron from 'node-cron';
import Crontinel from '@crontinel/node';

const crontinel = new Crontinel({ apiKey: process.env.CRONTINEL_API_KEY! });

cron.schedule('0 9 * * *', () => {
  crontinel.monitorSchedule('daily-reports', async () => {
    await sendMorningReports();
  });
});

BullMQ

import { Worker } from 'bullmq';
import Crontinel from '@crontinel/node';

const crontinel = new Crontinel({ apiKey: process.env.CRONTINEL_API_KEY! });

const worker = new Worker('emails', async (job) => {
  await processEmail(job.data);
}, { connection: redisConnection });

worker.on('completed', async (job) => {
  await crontinel.queueProcessed({
    queue: 'emails',
    processed: 1,
    failed: 0,
    duration_ms: job.processingTime,
  });
});

worker.on('failed', async (job, err) => {
  await crontinel.queueProcessed({
    queue: 'emails',
    processed: 0,
    failed: 1,
  });
});

License

MIT

About

Node.js SDK for Crontinel background job monitoring

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors