Skip to main content

Beyond Uptime: Monitoring Business Processes

· 5 min read
Chris
Amiable Dev

Traditional status pages show infrastructure health: API up, Database up, Cache up. But users don't care about infrastructure—they care about whether they can complete their tasks.

This post explains how to model business processes in Stentorosaur so your status page reflects user-facing capabilities.

The Problem

Your monitoring dashboard shows all green:

✅ API Server: 200 OK (45ms)
✅ Database: Connected
✅ Redis: Connected
✅ Payment Gateway: 200 OK

Meanwhile, users are reporting:

  • "Checkout fails at the payment step"
  • "Password reset emails never arrive"
  • "CSV export has been 'processing' for 3 hours"

The issue? A bug in your checkout flow is causing payment validation to fail—but all the underlying systems are responding normally to health checks.

Infrastructure is up. The user workflow is broken.

The Data Model

Stentorosaur maps GitHub Issues to status entities using labels. The status of an entity is derived from open issues with matching labels.

Entities

Define entities in your Docusaurus config:

// docusaurus.config.js
entities: [
// Infrastructure (traditional uptime)
{ name: 'api', type: 'system', displayName: 'API' },
{ name: 'database', type: 'system', displayName: 'Database' },

// Business processes
{ name: 'checkout', type: 'process', displayName: 'Checkout Flow' },
{ name: 'email-delivery', type: 'process', displayName: 'Email Delivery' },
{ name: 'data-exports', type: 'process', displayName: 'Data Exports' },
]

Labels → Status Mapping

When you create a GitHub Issue with these labels:

Labels: status, critical, process:checkout

Stentorosaur parses:

  • status → This is a status-tracking issue
  • critical → Severity level
  • process:checkout → Affects the checkout entity

Result: The "Checkout Flow" entity turns red on your status page.

Severity → Color

Severity LabelStatusDisplay
criticalDownRed
majorDegradedOrange
minorPartialYellow
(no open issues)OperationalGreen

Resolution

Close the GitHub Issue → entity returns to green. Issue state drives status state.

When to Use Process vs System

Use CaseEntity TypeWhy
API ServersystemSingle service, has /health endpoint
CheckoutprocessSpans API, Payment, Inventory, Email
DatabasesystemDirect health check via connection
OAuth LoginprocessDepends on third-party (Google, GitHub)
Email DeliveryprocessThird-party service + async queue

Heuristic: Use process when the workflow spans multiple services or depends on third parties. Use system when a simple health check suffices.

Complete Example: Checkout Monitoring

1. Define the Entity

// docusaurus.config.js
entities: [
{ name: 'checkout', type: 'process', displayName: 'Checkout Flow' },
]

2. Create the Labels

gh label create "process:checkout" --color 1d76db --description "Checkout flow"

3. Set Up Detection

Option A: Synthetic monitoring

Create a health check that exercises the checkout:

{
"systems": [
{
"system": "checkout",
"url": "https://api.example.com/checkout/test",
"method": "POST",
"body": { "test": true, "items": [{"id": "test-sku", "qty": 1}] },
"expectedCodes": [200],
"timeout": 10000
}
]
}

If this endpoint returns non-200, the monitoring workflow creates an issue automatically.

Option B: Error tracking webhook

app.post('/webhooks/sentry', async (req, res) => {
const { event, issue } = req.body;

if (event === 'issue.created' && issue.tags.process === 'checkout') {
await octokit.issues.create({
owner: 'your-org',
repo: 'your-repo',
title: `Checkout errors: ${issue.title}`,
labels: ['status', 'major', 'process:checkout'],
body: `Error spike: ${issue.count} errors in 5 minutes.`,
});
}
res.sendStatus(200);
});

Option C: Manual creation

gh issue create \
--title "Checkout failing for EU users" \
--label "status,major,process:checkout" \
--body "Users report payment validation errors."

4. Status Page Updates

After the issue is created, your next site build shows:

Processes
🔴 Checkout Flow
└─ Issue #42: Checkout failing for EU users
🟢 Email Delivery
🟢 Data Exports

5. Resolution

Fix the bug. Close the issue:

gh issue close 42 --comment "Fixed in deploy v1.2.3"

Next build:

Processes
🟢 Checkout Flow
🟢 Email Delivery
🟢 Data Exports

Full Configuration

// docusaurus.config.js
{
plugins: [
[
'@amiable-dev/docusaurus-plugin-stentorosaur',
{
owner: 'your-org',
repo: 'your-repo',
// Enable runtime data fetching (v0.16+)
dataSource: {
strategy: 'github',
owner: 'your-org',
repo: 'your-repo',
},
entities: [
// Infrastructure
{ name: 'api', type: 'system', displayName: 'API' },
{ name: 'database', type: 'system', displayName: 'Database' },
{ name: 'cdn', type: 'system', displayName: 'CDN' },

// User workflows
{ name: 'signup', type: 'process', displayName: 'User Registration' },
{ name: 'login', type: 'process', displayName: 'Authentication' },
{ name: 'checkout', type: 'process', displayName: 'Checkout' },
{ name: 'webhooks', type: 'process', displayName: 'Webhook Delivery' },

// Background jobs
{ name: 'email-delivery', type: 'process', displayName: 'Email Delivery' },
{ name: 'data-exports', type: 'process', displayName: 'Data Exports' },

// Partner integrations
{ name: 'stripe', type: 'sla', displayName: 'Stripe Integration' },
{ name: 'salesforce', type: 'sla', displayName: 'Salesforce Sync' },
],
},
],
],
}

Required labels:

# Severity
gh label create status --color 0366d6
gh label create critical --color d73a4a
gh label create major --color ff6f00
gh label create minor --color fbca04

# Systems
gh label create "system:api" --color 0e8a16
gh label create "system:database" --color 0e8a16
gh label create "system:cdn" --color 0e8a16

# Processes
gh label create "process:signup" --color 1d76db
gh label create "process:login" --color 1d76db
gh label create "process:checkout" --color 1d76db
gh label create "process:webhooks" --color 1d76db
gh label create "process:email-delivery" --color 1d76db
gh label create "process:data-exports" --color 1d76db

# SLAs
gh label create "sla:stripe" --color 5319e7
gh label create "sla:salesforce" --color 5319e7

Status Page Grouping

The status page groups entities by type:

Systems
🟢 API (99.95% uptime)
🟢 Database (99.99% uptime)
🟢 CDN (100% uptime)

Processes
🟢 User Registration
🟢 Authentication
🔴 Checkout ← Issue #42
🟡 Webhook Delivery ← Issue #38 (minor)
🟢 Email Delivery
🟢 Data Exports

Partner Integrations
🟢 Stripe Integration
🟡 Salesforce Sync ← Issue #40 (minor)

Summary

Process monitoring answers: "Can users complete their tasks?"

The model:

  1. Define entities (systems, processes, SLAs)
  2. Create matching labels
  3. Open issues with severity + entity labels
  4. Close issues to resolve

No special workflow. Just GitHub Issues with the right labels.


Quick Start: Setup Guide Contribute: Contributing Guide Repository: GitHub