← Back to all products
$29
On-Call Management Kit
PagerDuty/OpsGenie configs, escalation policies, rotation schedules, and incident communication templates.
YAMLMarkdownPythonTerraform
📄 Product Preview
Try the interactive reader and demo tools below, or get the full product with all content unlocked.
📖 Interactive Reader (Free Preview) ⚙ Try Demo Tools 📦 Download Free Sample📁 File Structure 29 files
on-call-management-kit/
├── LICENSE
├── README.md
├── configs/
│ ├── opsgenie/
│ │ ├── escalation_policies.yaml
│ │ ├── routing_rules.yaml
│ │ └── schedules.yaml
│ └── pagerduty/
│ ├── alert_routing.yaml
│ ├── escalation_policies.yaml
│ └── services.yaml
├── free-sample.zip
├── guide/
│ ├── 01-building-an-on-call-program.md
│ ├── 02-configuration-as-code.md
│ ├── 03-rotation-generation-and-coverage.md
│ ├── 04-incident-communication-templates.md
│ └── 05-alert-hygiene-and-burnout-prevention.md
├── guides/
│ ├── alert_hygiene.md
│ └── healthy_oncall_program.md
├── index.html
├── src/
│ ├── __pycache__/
│ │ ├── escalation_validator.cpython-312.pyc
│ │ ├── rotation_generator.cpython-312.pyc
│ │ └── schedule_exporter.cpython-312.pyc
│ ├── escalation_validator.py
│ ├── rotation_generator.py
│ └── schedule_exporter.py
└── templates/
├── incident_comms_sev1.md
├── incident_comms_sev2.md
├── incident_comms_sev3.md
├── on_call_handoff_checklist.md
├── stakeholder_comms.md
└── status_page_update.md
📖 Documentation Preview README excerpt
On-Call Management Kit
A complete on-call operations toolkit: configuration-as-code for PagerDuty and OpsGenie, Python rotation generators, incident communication templates, and guides for building a sustainable on-call program.
What's Inside
This kit gives you everything needed to stand up or mature an on-call program:
- PagerDuty configuration-as-code — Escalation policies, service definitions, and alert routing rules in YAML ready for Terraform/Pulumi import or API-driven provisioning
- OpsGenie configuration-as-code — Equivalent configs for OpsGenie including schedules, routing rules, and escalation policies
- Python rotation tools (stdlib only) — Generate rotation calendars, validate escalation coverage gaps, and export schedules to iCal format
- Incident communication templates — Pre-written markdown templates for status page updates, stakeholder communications, and severity-specific incident comms
- On-call handoff checklist — Structured handoff procedure to reduce context loss between rotations
- Healthy on-call program guide — Comprehensive guide covering toil budgets, alert hygiene, compensation models, and burnout prevention
File Tree
on-call-management-kit/
├── README.md
├── LICENSE
├── src/
│ ├── rotation_generator.py # Generate follow-the-sun & weekly rotation calendars
│ ├── escalation_validator.py # Validate no coverage gaps in escalation chains
│ └── schedule_exporter.py # Export schedules to iCal (.ics) format
├── configs/
│ ├── pagerduty/
│ │ ├── escalation_policies.yaml # Multi-tier escalation with timeout configs
│ │ ├── services.yaml # Service catalog with severity mappings
│ │ └── alert_routing.yaml # Event rules and routing by source/severity
│ └── opsgenie/
│ ├── escalation_policies.yaml # OpsGenie escalation equivalents
│ ├── schedules.yaml # Follow-the-sun + weekly rotation schedules
│ └── routing_rules.yaml # Alert routing by tags, priority, source
├── templates/
│ ├── status_page_update.md # Public status page update templates
│ ├── stakeholder_comms.md # Internal stakeholder notification templates
│ ├── incident_comms_sev1.md # SEV1 critical incident communications
│ ├── incident_comms_sev2.md # SEV2 major incident communications
│ ├── incident_comms_sev3.md # SEV3 minor incident communications
│ └── on_call_handoff_checklist.md # Rotation handoff procedure
└── guides/
├── healthy_oncall_program.md # Building a sustainable on-call culture
└── alert_hygiene.md # Alert tuning, deduplication, and fatigue prevention
Quick Start
Generate a rotation calendar
from src.rotation_generator import RotationGenerator, RotationConfig
config = RotationConfig(
team_members=["alice", "bob", "carol", "dave"],
rotation_type="weekly",
start_date="2025-01-06",
weeks_to_generate=12,
handoff_day="monday",
handoff_hour=9,
*... continues with setup instructions, usage examples, and more.*
📄 Code Sample .py preview
src/escalation_validator.py
"""
Escalation Policy Validator
Validates that escalation policies provide complete 24/7 coverage with no gaps.
Catches common misconfigurations:
- Time windows with no responder assigned
- Circular escalation loops that never reach a human
- Missing timeout configurations between escalation levels
- Teams with too few members for sustainable coverage
- Escalation chains that dead-end without a catch-all
Reads YAML configuration files (PagerDuty or OpsGenie format) and produces
a structured validation report identifying all issues by severity.
"""
from __future__ import annotations
import json
import logging
from dataclasses import dataclass, field
from datetime import time, timedelta
from enum import Enum
from pathlib import Path
from typing import Any, Optional
# Using a simple YAML-subset parser since we can't use PyYAML
# This handles the specific YAML structures in our config files
import re
logger = logging.getLogger(__name__)
class Severity(Enum):
"""Validation finding severity levels."""
CRITICAL = "critical" # Will cause pages to be dropped
WARNING = "warning" # May cause issues under certain conditions
INFO = "info" # Suggestion for improvement
@dataclass
class CoverageGap:
"""Represents a time window with no on-call responder.
A coverage gap means that if an incident fires during this window,
nobody will be paged. This is always a critical finding.
"""
start_hour: int
start_minute: int
end_hour: int
end_minute: int
# ... 524 more lines ...