ProductMarch 31, 202611 min read

Public Status Pages and Cron Job Monitoring

Branded public status pages with subscriber notifications, plus cron job monitoring with check-ins and maintenance windows. Transparent reliability for your users.

Reliability Is a Communication Problem

When your service goes down, two things need to happen simultaneously: your engineers need to fix the problem, and your users need to know what's going on. Most teams are good at the first part and terrible at the second.

A public status page bridges that gap. It gives users a single URL to check when something feels broken, and it gives your team a structured way to communicate about incidents without individual emails and support tickets.

Cron job monitoring solves the opposite problem -- the silent failure. When a background job stops running, nothing crashes. No errors fire. The job just doesn't execute, and nobody notices until a user reports that their daily report didn't arrive.

JustAnalytics now includes both features: branded public status pages and cron job monitoring with check-in verification.

Public Status Pages

Creating Your Status Page

Every JustAnalytics site can have a public status page. Set it up in Settings > Status Page:

Status Page Configuration:
  URL: status.yourcompany.com (CNAME) or yourcompany.justanalytics.app/status
  Company Name: Your Company
  Logo: Upload your logo
  Favicon: Upload your favicon
  Primary Color: #2563EB
  Description: "System status for Your Company services"
  Support URL: https://support.yourcompany.com
  Time Zone: America/New_York

Custom Domain

Use your own domain for the status page with a simple CNAME record:

Type: CNAME
Name: status
Value: status-proxy.justanalytics.app
TTL: 3600

After DNS propagation, your status page is accessible at status.yourcompany.com with HTTPS handled automatically.

Component Organization

Organize your status page by service components. Each component has its own status indicator:

Your Company Status

Website                    ● Operational
  └── Homepage             ● Operational
  └── Dashboard            ● Operational
  └── Checkout             ● Degraded Performance

API                        ● Partial Outage
  └── REST API (v2)        ● Operational
  └── GraphQL API          ● Major Outage
  └── Webhooks             ● Operational

Infrastructure             ● Operational
  └── Database             ● Operational
  └── CDN                  ● Operational
  └── Email Delivery       ● Operational

Component statuses:

StatusIconMeaning
OperationalGreenEverything working normally
Degraded PerformanceYellowWorking but slower than usual
Partial OutageOrangeSome functionality affected
Major OutageRedService is down
Under MaintenanceBluePlanned maintenance in progress

Automatic Status Updates

JustAnalytics can automatically update component statuses based on your monitoring data:

Auto-Status Rules:
  - Component: "REST API (v2)"
    Source: Uptime Monitor "api-v2-health"
    Rules:
      - IF uptime < 100% in last 5 min  Degraded Performance
      - IF uptime < 95% in last 5 min  Partial Outage
      - IF uptime < 50% in last 5 min  Major Outage

  - Component: "Database"
    Source: Metric "db_query_p95_latency"
    Rules:
      - IF p95 > 500ms for 5 min  Degraded Performance
      - IF p95 > 2000ms for 5 min  Major Outage

  - Component: "Checkout"
    Source: Error rate for URL "/checkout/*"
    Rules:
      - IF error_rate > 5% for 10 min  Degraded Performance
      - IF error_rate > 20% for 5 min  Partial Outage

You can also update statuses manually or via the API.

Incident Communication

When an incident occurs, create an incident on your status page to keep users informed:

Creating an incident:

Incident: GraphQL API Unavailable
Status: Investigating
Affected Components: GraphQL API
Message: "We are investigating reports of errors when accessing the
          GraphQL API. REST API endpoints are not affected."

Posting updates:

[14:32] Investigating
  "We are investigating reports of errors when accessing the GraphQL API."

[14:45] Identified
  "The root cause has been identified as a failed database migration.
   We are working on a fix."

[15:02] Monitoring
  "A fix has been deployed. We are monitoring the GraphQL API to
   confirm stability."

[15:30] Resolved
  "The GraphQL API is fully operational. The issue was caused by a
   database migration that locked a critical table. We have added
   safeguards to prevent this in the future."

Each update is timestamped and automatically sent to subscribers.

Incident History

The status page shows a rolling history of incidents:

Incident History

March 30, 2026 - No incidents reported
March 29, 2026 - No incidents reported
March 28, 2026
  GraphQL API Unavailable (58 minutes)
  Resolved at 15:30 UTC
March 25, 2026
  Degraded Dashboard Performance (12 minutes)
  Resolved at 09:42 UTC

Users can see that your team communicates transparently and resolves issues quickly.

Uptime History

Each component displays its uptime percentage over the past 90 days as a visual bar chart:

REST API (v2)    99.98% uptime
████████████████████████████████████████████████░█████████████████████████████████████████
                                                ↑ 12-min degradation on March 15

GraphQL API      99.87% uptime
█████████████████████████████████████████████████████████████░░███████████████████████████
                                                             ↑ 58-min outage on March 28

Subscriber Notifications

Email Notifications

Users can subscribe to your status page to receive email notifications when incidents are created or updated:

Subscribe to Status Updates

Email: user@example.com
Notifications:
  ☑ All components
  ☐ Specific components only
    ☐ Website
    ☑ API
    ☐ Infrastructure

Frequency:
  ● Every update
  ○ Start and resolution only

RSS Feed

Your status page includes an RSS feed at status.yourcompany.com/feed.xml. Users can subscribe in any RSS reader to get incident updates.

Webhook Notifications

For programmatic integration, configure webhooks that fire on status changes:

POST https://your-webhook-endpoint.com/status

{
  "event": "incident.update",
  "incident": {
    "id": "inc_abc123",
    "title": "GraphQL API Unavailable",
    "status": "identified",
    "impact": "major",
    "created_at": "2026-03-28T14:32:00Z",
    "updated_at": "2026-03-28T14:45:00Z"
  },
  "update": {
    "status": "identified",
    "body": "The root cause has been identified as a failed database migration.",
    "created_at": "2026-03-28T14:45:00Z"
  },
  "affected_components": [
    { "name": "GraphQL API", "status": "major_outage" }
  ]
}

API-Driven Status Updates

Update your status page programmatically from your incident management workflow:

# Create an incident
curl -X POST https://api.justanalytics.app/v1/status-page/incidents \
  -H "Authorization: Bearer ja_live_abc123" \
  -d '{
    "title": "Database maintenance",
    "status": "investigating",
    "impact": "minor",
    "components": ["database"],
    "body": "Scheduled database maintenance is in progress."
  }'

# Post an update
curl -X POST https://api.justanalytics.app/v1/status-page/incidents/inc_abc123/updates \
  -H "Authorization: Bearer ja_live_abc123" \
  -d '{
    "status": "resolved",
    "body": "Database maintenance is complete. All systems operational."
  }'

Cron Job Monitoring

The Silent Failure Problem

Cron jobs are the backbone of most applications: sending emails, generating reports, processing payments, cleaning up data, syncing with third-party APIs. When they fail, the failure is silent. No HTTP request fails. No error page is shown. The job just doesn't run.

JustAnalytics cron monitoring uses a check-in model. Your cron job pings a unique URL when it starts (and optionally when it finishes). If JustAnalytics doesn't receive the expected check-in within the configured window, it alerts you.

Setting Up a Cron Monitor

Create a cron monitor in Monitoring > Cron Jobs > Create:

Name: Daily Report Generation
Schedule: Every day at 6:00 AM UTC (0 6 * * *)
Grace Period: 15 minutes
Expected Duration: Under 5 minutes
Alert Policy: Production Critical

JustAnalytics generates a unique check-in URL:

Check-in URL: https://ingest.justanalytics.app/cron/chk_abc123def456

Instrumenting Your Cron Job

Simple check-in (job completed):

#!/bin/bash
# daily-report.sh

# Run your job
python generate_reports.py

# Check in with JustAnalytics
curl -s https://ingest.justanalytics.app/cron/chk_abc123def456

Start and finish check-in (track duration):

#!/bin/bash
# daily-report.sh

# Signal job start
curl -s https://ingest.justanalytics.app/cron/chk_abc123def456/start

# Run your job
python generate_reports.py
EXIT_CODE=$?

# Signal job finish (with status)
if [ $EXIT_CODE -eq 0 ]; then
  curl -s https://ingest.justanalytics.app/cron/chk_abc123def456/complete
else
  curl -s https://ingest.justanalytics.app/cron/chk_abc123def456/fail
fi

With the Node.js SDK:

import { cronMonitor } from '@justanalyticsapp/node';

const monitor = cronMonitor('chk_abc123def456');

async function dailyReport() {
  await monitor.start();

  try {
    await generateReports();
    await monitor.complete();
  } catch (error) {
    await monitor.fail({ error: error.message });
    throw error;
  }
}

Cron Monitoring Dashboard

The cron dashboard shows all your monitored jobs at a glance:

Cron Jobs

Job                     | Schedule      | Last Run     | Status    | Duration
Daily Report            | 0 6 * * *     | 6:00 AM      | ✓ OK      | 3m 42s
Hourly Data Sync        | 0 * * * *     | 10:00 AM     | ✓ OK      | 45s
Weekly Cleanup          | 0 2 * * 0     | Mar 29, 2:00 | ✓ OK      | 12m 18s
Payment Processing      | */5 * * * *   | 10:05 AM     | ✗ MISSED  | --
Email Queue Flush       | */15 * * * *  | 9:45 AM      | ⚠ SLOW    | 18m 32s

Alert Conditions

JustAnalytics alerts you when a cron job:

ConditionDescriptionExample
MissedNo check-in received within schedule + grace periodJob should run at 6 AM, no check-in by 6:15 AM
FailedJob explicitly reported failureExit code non-zero
SlowJob duration exceeds expected thresholdExpected under 5 min, took 18 min
StuckStart signal received but no complete/fail signalJob started but never finished

Cron Job History

Each monitored job has a detailed history:

Daily Report - History

Date         | Status  | Duration | Notes
Mar 31       | ✓ OK    | 3m 42s   |
Mar 30       | ✓ OK    | 3m 38s   |
Mar 29       | ⚠ SLOW  | 8m 12s   | Spike in data volume
Mar 28       | ✓ OK    | 3m 45s   |
Mar 27       | ✗ FAIL  | 1m 02s   | Database connection timeout
Mar 26       | ✓ OK    | 3m 40s   |

Duration trends help you spot gradual performance degradation before it becomes a problem.

Maintenance Windows

Scheduled Maintenance

Create maintenance windows to suppress alerts during planned downtime:

Maintenance Window:
  Name: Database Migration
  Start: April 5, 2026 02:00 UTC
  End: April 5, 2026 04:00 UTC
  Components: Database, REST API, GraphQL API
  Suppress Alerts: Yes
  Status Page: Show "Under Maintenance" during window
  Notification: Send advance notice 24 hours before

Recurring Maintenance

For regular maintenance schedules:

Recurring Maintenance:
  Name: Weekly Database Vacuum
  Schedule: Every Sunday, 03:00-03:30 UTC
  Components: Database
  Suppress Alerts: Yes
  Status Page: Show "Under Maintenance"

Maintenance Notifications

Subscribers are notified:

  1. 24 hours before -- "Scheduled maintenance: Database Migration on April 5, 02:00-04:00 UTC"
  2. When maintenance starts -- "Maintenance in progress: Database, REST API, GraphQL API"
  3. When maintenance ends -- "Maintenance complete. All systems operational."
  4. If maintenance overruns -- "Maintenance is taking longer than expected. Updated ETA: 05:00 UTC"

How It Compares to Pingdom

Pingdom has been the standard for uptime monitoring and status pages for over a decade. Here's how JustAnalytics compares:

FeatureJustAnalyticsPingdom
Public status pageYesYes
Custom domainYesYes
Component organizationYesYes (limited)
Automatic status updatesYes (from monitoring data)Manual only
Subscriber notificationsEmail, RSS, WebhookEmail, SMS
Incident managementFull lifecycleBasic
Cron job monitoringYesNo
Maintenance windowsYesYes
Uptime monitoringYesYes
Multi-region checksYesYes
SSL certificate monitoringYesYes
Integration with APMBuilt-inNo
Integration with error trackingBuilt-inNo
PricingIncluded in plan$15/month+

The fundamental difference is integration. With Pingdom, status pages and uptime monitoring are standalone products. With JustAnalytics, they're connected to your entire observability stack. When an uptime check fails, JustAnalytics can automatically correlate it with server-side errors, traces, and logs to help you diagnose the root cause.

Getting Started

Status Pages

  1. Go to Settings > Status Page
  2. Configure your company name, logo, and colors
  3. Add components that represent your services
  4. Optionally set up a custom domain
  5. Share the URL with your users

Cron Monitoring

  1. Go to Monitoring > Cron Jobs > Create
  2. Enter the job name, schedule, and grace period
  3. Copy the check-in URL
  4. Add the check-in call to your cron script
  5. Verify with a test run

Maintenance Windows

  1. Go to Monitoring > Maintenance > Schedule
  2. Set the time window and affected components
  3. Configure notifications for subscribers
  4. The status page updates automatically when the window starts

All three features are available today on all JustAnalytics plans.

Start your 7-day free trial and give your users the transparency they deserve.

JT
JustAnalytics TeamEngineering Team

The engineering and product team behind JustAnalytics. We're on a mission to make web observability simpler, faster, and more private.

Related posts