Disaster Recovery Plan
Run ID: 69cb93a861b1021a29a8a5da2026-03-31Infrastructure
PantheraHive BOS
BOS Dashboard

Generate a comprehensive disaster recovery plan with RTO/RPO targets, backup strategies, failover procedures, communication plans, and testing schedules.

Disaster Recovery Plan (DRP) - Comprehensive Outline

This document outlines a comprehensive Disaster Recovery Plan (DRP) designed to ensure business continuity and minimize downtime in the event of unforeseen disruptions. It details strategies for data backup, system restoration, communication, and regular testing to maintain preparedness.


1. Introduction and Purpose

The purpose of this Disaster Recovery Plan (DRP) is to establish clear procedures and protocols for responding to and recovering from disruptive events that could impact critical business operations, IT infrastructure, and data. This plan aims to:

  • Minimize the impact of disasters on business operations.
  • Ensure the timely recovery of critical systems and data.
  • Protect the organization's assets, reputation, and customer trust.
  • Provide a structured framework for decision-making and action during a crisis.
  • Comply with relevant regulatory and industry standards.

Scope: This DRP covers critical IT infrastructure, applications, data, and associated business processes. It addresses potential threats including, but not limited to, natural disasters, cyberattacks, significant hardware failures, power outages, and human error.


2. Recovery Time Objectives (RTO) and Recovery Point Objectives (RPO)

Defining clear RTOs and RPOs is crucial for prioritizing recovery efforts and allocating resources effectively. These objectives are set based on business impact analysis and criticality assessments.

2.1. Critical Systems & Data Identification:

The following table identifies key systems, applications, and data, categorizing their criticality and assigning specific RTO and RPO targets.

| System/Application | Business Function | Criticality (1-High, 2-Medium, 3-Low) | RTO (Time to Restore Function) | RPO (Max Data Loss Tolerance) |

| :----------------- | :---------------- | :------------------------------------ | :----------------------------- | :---------------------------- |

| Tier 1: Mission-Critical | | | | |

| CRM System | Sales, Customer Support | 1 | 4 hours | 15 minutes |

| ERP System | Finance, Operations, Inventory | 1 | 4 hours | 15 minutes |

| Primary Database | Core Data Storage | 1 | 2 hours | 5 minutes |

| E-commerce Platform | Online Sales | 1 | 2 hours | 15 minutes |

| Tier 2: Business-Critical | | | | |

| Email System | Internal/External Communication | 2 | 8 hours | 1 hour |

| File Servers | Document Storage, Collaboration | 2 | 12 hours | 2 hours |

| HRIS System | Human Resources | 2 | 12 hours | 4 hours |

| Tier 3: Support Systems | | | | |

| Development Servers | Software Development | 3 | 24 hours | 24 hours |

| Marketing Analytics | Reporting | 3 | 24 hours | 12 hours |

2.2. Definitions:

  • Recovery Time Objective (RTO): The maximum tolerable duration of time that a computer, system, network, or application can be down after a disaster or disruption without causing significant damage to the business.
  • Recovery Point Objective (RPO): The maximum tolerable amount of data loss (measured in time) that an application or business process can sustain during a disaster.

3. Backup and Restoration Strategies

A robust backup strategy is fundamental to achieving RPO targets and ensuring data integrity.

3.1. Data Backup Strategy:

  • Full Backups: Performed weekly (e.g., every Sunday night) for all critical systems and databases.
  • Incremental Backups: Performed daily (e.g., Monday-Saturday nights) capturing only changes since the last full or incremental backup.
  • Differential Backups: (Optional, as an alternative to incremental) Performed daily, capturing all changes since the last full backup.
  • Database Transaction Logs: Continuously backed up or replicated in real-time for Tier 1 systems to achieve RPO of minutes.
  • Cloud Application Backups: Utilize native backup/restore features for SaaS applications (e.g., Microsoft 365, Salesforce) or third-party cloud backup solutions.

3.2. Backup Frequency and Retention:

| Data Type/System | Backup Type | Frequency | On-site Retention | Off-site/Cloud Retention |

| :----------------- | :---------- | :-------- | :---------------- | :----------------------- |

| Tier 1 Databases | Full, Log | Daily, Continuous | 7 days | 30 days |

| Tier 1 Applications | Full, Incremental | Daily | 7 days | 30 days |

| Tier 2 Applications | Full, Incremental | Daily | 14 days | 60 days |

| File Servers | Full, Incremental | Daily | 30 days | 90 days |

| Configuration Files | Full | Weekly | 90 days | 1 year |

3.3. Backup Storage Locations:

  • On-site Storage: Short-term backups stored on Network Attached Storage (NAS) or Storage Area Network (SAN) within the primary data center for quick restores.
  • Off-site Storage: Encrypted backups transferred daily to a secure, geographically separate facility (e.g., another company site, third-party vault).
  • Cloud Storage: Encrypted backups replicated to a reputable cloud provider (e.g., AWS S3, Azure Blob Storage) with geo-redundancy enabled. This serves as the primary off-site solution for most data.

3.4. Restoration Procedures:

  • Data Restoration:

* Identify the required recovery point (RPO).

* Locate the appropriate backup sets (full + incrementals/differentials).

* Restore data to a designated recovery environment or the primary system if it has been repaired/rebuilt.

* Verify data integrity and completeness post-restoration.

  • System Restoration:

* Prioritize restoration based on RTO and system criticality.

* Utilize bare-metal recovery for physical servers or VM snapshots/templates for virtual machines.

* Reconfigure network settings, security policies, and application dependencies.

* Perform functional testing of restored systems and applications.


4. Failover Procedures

Failover procedures detail the steps to switch from primary systems to redundant or alternate systems in a disaster scenario.

4.1. Activation Criteria for Failover:

Failover is initiated when:

  • Primary data center or critical infrastructure becomes unavailable.
  • Loss of connectivity to primary systems for an extended period (e.g., > 30 minutes for Tier 1).
  • Unrecoverable data corruption or system failure on primary systems.
  • Declaration of a disaster by the Incident Management Team.

4.2. Failover Sequence (Example for Tier 1 Systems):

  1. Declare Disaster & Activate DRP Team: Incident Management Team officially declares a disaster.
  2. Verify Primary System Status: Confirm primary systems are indeed down or compromised.
  3. Initiate DNS/Traffic Redirection:

* Update DNS records (e.g., CNAME/A records) to point to the disaster recovery site's IP addresses or load balancers.

* Adjust firewall rules or load balancer configurations to direct traffic to standby resources.

* TTL for DNS records should be set low (e.g., 5 minutes) to expedite propagation.

  1. Activate Standby Resources:

* Spin up virtual machines or activate pre-provisioned servers at the disaster recovery site/cloud region.

* Restore the latest available data backups to the activated resources, adhering to RPO targets.

* Ensure network connectivity and security configurations are mirrored.

  1. Application Configuration & Testing:

* Update application configuration files (e.g., database connection strings, API endpoints) to reflect the DR environment.

* Perform smoke tests and comprehensive functional tests on all critical applications.

* Verify data synchronization if replication was in place.

  1. User Access & Communication:

* Inform internal users and external customers about the failover and provide access details for the DR environment.

* Monitor system performance and user feedback closely.

4.3. Failback (Recovery from DR Site to Primary Site):

  1. Assess Primary Site Recovery: Ensure the primary site is fully restored, stable, and secure.
  2. Synchronize Data: Replicate any changes made on the DR site back to the primary site. This is critical to prevent data loss.
  3. Schedule Failback: Plan the failback during a low-impact maintenance window.
  4. Initiate DNS/Traffic Redirection: Update DNS records and network configurations to point back to the primary site.
  5. Deactivate DR Resources: Once traffic is fully returned to the primary site and verified, decommission or suspend DR resources to manage costs.
  6. Post-Failback Review: Document lessons learned and update the DRP.

5. Communication Plan

Effective communication is paramount during a disaster to manage expectations, coordinate efforts, and maintain confidence.

5.1. Internal Communication:

  • Incident Management Team (IMT):

* Initial Notification: SMS, dedicated chat channel (e.g., Slack/Teams), emergency email.

* Updates: Regular scheduled briefings (e.g., every 2 hours), shared incident log.

  • Employees:

* Initial Notification: All-staff email, emergency SMS, company intranet banner.

* Updates: Company-wide emails, intranet announcements, team lead briefings.

* Instructions: Guidance on remote work, alternative communication channels, expected return to office.

  • Leadership/Stakeholders:

* Initial Notification: Direct phone call, executive email list.

* Updates: Executive briefings, situation reports, impact assessments.

5.2. External Communication:

  • Customers:

* Initial Notification: Website banner, social media post, dedicated status page (e.g., status.company.com).

* Updates: Regular updates on status page, social media, targeted email communications for critical service disruptions.

* Channels: Public relations team manages official statements.

  • Partners/Vendors:

* Initial Notification: Direct email, phone call to key contacts.

* Updates: Scheduled updates via email or phone.

  • Media/Public:

* All external media inquiries are to be directed to the designated Public Relations (PR) lead. No other employee should communicate with the media without explicit authorization.

  • Regulators/Legal (if applicable):

* Notification based on legal and regulatory requirements (e.g., data breach notification laws). Legal counsel will guide this process.

5.3. Communication Tools and Contact Lists:

  • Primary Tool: Email (failover to external provider if internal email is down).
  • Secondary Tool: Dedicated Crisis Communication Platform (e.g., Everbridge, OnSolve).
  • Emergency Contact List:

* Key DRP Team members (home, mobile, personal email).

* Leadership Team (home, mobile, personal email).

* Critical Vendors/Service Providers (24/7 support lines).

* Emergency Services (Police, Fire, Medical).

* Off-site facility contacts.

  • Pre-approved Communication Templates: Drafted messages for various scenarios (e.g., "Service Disruption," "Recovery Underway," "Service Restored").

6. Roles and Responsibilities

A clear chain of command and defined responsibilities are essential for an organized and effective disaster response.

6.1. Disaster Recovery Team Structure:

  • Incident Commander (IC): Overall authority and decision-maker during a disaster. Responsible for declaring a disaster, activating the DRP, and approving major recovery steps.
  • DRP Coordinator: Manages the DRP, ensures its readiness, coordinates testing, and oversees recovery efforts under the IC.
  • Technical Recovery Lead: Oversees all technical aspects of recovery, including system restoration, network configuration, and data recovery.
  • Application Recovery Lead: Focuses on restoring and verifying critical business applications.
  • Network Operations Lead: Manages network connectivity, firewalls, and routing during failover/failback.
  • Data Recovery Specialist: Executes data restoration procedures and ensures data integrity.
  • Communication Lead: Manages all internal and external communications as per the communication plan.
  • Business Continuity Lead: Ensures business processes can continue to function, even with limited IT resources.

6.2. Key Responsibilities:

  • Pre-Disaster:

* Regular DRP review and updates.

* Scheduled backup verification and testing.

* DR site maintenance and readiness checks.

* Team training and awareness.

  • During Disaster:

* Assess impact and determine scope.

* Activate DRP and assigned teams.

* Execute failover procedures.

* Communicate status to stakeholders.

* Document all actions taken.

  • Post-Disaster:

* Execute failback procedures.

* Conduct post-mortem analysis and lessons learned.

* Update DRP based on recovery experience.

* Restore normal operations.


7. Testing and Maintenance Schedule

Regular testing and maintenance are crucial to ensure the DRP remains effective and current.

7.1. Testing Types and Frequency:

  • Tabletop Exercises (Annual):

* Scenario-based discussions involving the DRP team to walk through the plan, identify gaps, and refine procedures without actual system interaction.

* Focus on decision-making, communication flows, and role clarity.

  • Simulated Recovery Tests (Bi-annual):

* Partial or full simulation of recovery processes using non-production environments or isolated DR environments.

* Involves restoring data, activating DR systems, and testing application functionality without impacting live production.

* Validate RTO/RPO targets.

  • Full-Scale Failover Test (Annual, or as business risk dictates):

* Actual failover of critical production systems to the DR environment.

* Performed during scheduled maintenance windows with minimal business impact.

* Tests the entire end-to-end process, including DNS redirection, application functionality, and user access.

* Includes subsequent failback to the primary site.

7.2. Documentation of Test Results:

  • Each test must be thoroughly documented, including:

* Test objectives and scope.

* Date, time, and participants.

* Scenario description.

* Steps executed.

* Observed outcomes and deviations from the plan.

* Identified issues,

gemini Output

Disaster Recovery Plan

Document Version: 1.0

Date: October 26, 2023

Author: PantheraHive AI

Approved By: [Approving Authority Name/Title]

Last Review Date: N/A


1. Executive Summary

This Disaster Recovery Plan (DRP) outlines the strategies, procedures, and responsibilities for responding to a significant disruption or disaster affecting critical IT systems and business operations. The primary objective of this DRP is to minimize downtime, prevent data loss, and ensure the rapid restoration of essential services to maintain business continuity. It details Recovery Time Objectives (RTOs) and Recovery Point Objectives (RPOs), backup strategies, failover procedures, communication protocols, and a comprehensive testing schedule to ensure the organization's resilience against various disruptive events.

2. Introduction

2.1. Purpose

The purpose of this Disaster Recovery Plan is to provide a structured and actionable framework for:

  • Responding effectively to unforeseen events that threaten the availability and integrity of critical IT infrastructure and data.
  • Minimizing the impact of disasters on business operations, financial stability, and reputation.
  • Restoring business-critical functions and data within predefined Recovery Time Objectives (RTOs) and Recovery Point Objectives (RPOs).
  • Ensuring the safety of personnel and compliance with regulatory requirements.

2.2. Scope

This DRP covers the recovery of critical IT systems, applications, data, and associated infrastructure located at [Primary Data Center Location(s) / Cloud Region(s)]. It addresses potential disruptions caused by natural disasters, cyberattacks, major equipment failures, human error, and other unforeseen events.

Systems and Data Covered (Examples - to be customized):

  • Enterprise Resource Planning (ERP) System
  • Customer Relationship Management (CRM) System
  • Core Financial Applications
  • Email and Collaboration Platforms
  • Database Servers (e.g., SQL, Oracle, PostgreSQL)
  • Web Servers and Public-facing Applications
  • Network Infrastructure (Routers, Firewalls, Switches)
  • File Servers and Document Management Systems
  • Virtualization Platforms (e.g., VMware, Hyper-V)

2.3. Objectives

Upon activation, the DRP aims to achieve the following objectives:

  • Safety First: Ensure the safety and well-being of all personnel.
  • Minimize Downtime: Restore critical business functions and IT systems within their defined RTOs.
  • Minimize Data Loss: Recover data up to their defined RPOs, minimizing data loss.
  • Maintain Business Operations: Enable the continuation of essential business processes.
  • Effective Communication: Facilitate clear and timely communication with all stakeholders (internal and external).
  • Compliance: Ensure adherence to relevant regulatory and legal requirements during and after a disaster.
  • Orderly Recovery: Provide a systematic approach to recovery, reducing confusion and error.

3. Key Definitions

  • Disaster Recovery (DR): The process of restoring critical IT infrastructure and operations after a disruptive event.
  • Business Continuity Plan (BCP): A comprehensive plan that outlines how an organization will continue to operate critical functions during and after a disaster. DR is a component of BCP.
  • Recovery Time Objective (RTO): The maximum acceptable duration of time that an application or system can be down after a disaster.
  • Recovery Point Objective (RPO): The maximum acceptable amount of data loss, measured in time, that an application or system can sustain during a disaster.
  • Critical System: An IT system or application whose unavailability would significantly impact business operations, financial performance, or regulatory compliance.
  • Disaster Recovery Team (DRT): A designated group of individuals responsible for executing the DRP.
  • Failover: The process of automatically or manually switching to a redundant or standby system upon the failure or abnormal termination of a previously active system.
  • Failback (or Fallback): The process of restoring operations to the primary production environment after a disaster has been mitigated and the primary site is fully operational.

4. Risk Assessment Summary

This DRP acknowledges and addresses potential risks identified through a prior risk assessment. Common disaster scenarios considered include:

  • Natural Disasters: Fires, floods, earthquakes, severe weather events.
  • Technological Failures: Hardware failure, software corruption, power outages, network outages.
  • Cybersecurity Incidents: Ransomware attacks, data breaches, denial-of-service (DoS) attacks.
  • Human Error: Accidental data deletion, misconfigurations, insider threats.
  • Supply Chain Disruptions: Failure of critical vendors or service providers.

5. Disaster Recovery Strategy

5.1. Overall Approach

The organization employs a [e.g., Hybrid Cloud / Dedicated DR Site / Cloud-Native] disaster recovery strategy.

  • Primary Site: [e.g., On-premise Data Center in City A / AWS us-east-1]
  • Recovery Site: [e.g., Warm Site in City B / Azure West US 2 / AWS us-west-2]
  • Replication Method: [e.g., Asynchronous / Synchronous data replication, VM replication, Database mirroring]

The strategy prioritizes the recovery of critical systems based on their RTO/RPO classifications, leveraging a combination of data backup, replication technologies, and redundant infrastructure to ensure rapid restoration.

5.2. Critical Systems Identification

The following table identifies critical systems and their associated business impact. This list is illustrative and must be fully populated and maintained.

| System Name | Business Function Supported | Criticality (High/Medium/Low) | Impact of Downtime |

| :-------------------------- | :------------------------------- | :---------------------------- | :--------------------------- |

| ERP System | Order Processing, Inventory, HR | High | Severe financial loss, operational paralysis |

| CRM System | Sales, Customer Support | High | Loss of customer data, reputational damage |

| Core Financials | Accounting, Payroll | High | Regulatory non-compliance, financial instability |

| Email & Collaboration | Internal/External Communication | Medium | Reduced productivity, communication breakdown |

| Public Website / E-commerce | Customer Access, Sales | High | Direct revenue loss, reputational damage |

| Database Servers | Data Storage for critical apps | High | All dependent apps fail |

6. Recovery Time Objectives (RTO) and Recovery Point Objectives (RPO)

RTO and RPO targets are defined for critical systems based on their business impact and criticality. These targets guide the selection of recovery strategies and technologies.

| System Name | RTO (Time to Restore Service) | RPO (Max Data Loss) | Recovery Method Example |

| :-------------------------- | :---------------------------- | :-------------------- | :------------------------------------------------------- |

| ERP System | 4 hours | 15 minutes | VM replication to DR site, database log shipping |

| CRM System | 6 hours | 30 minutes | VM replication, application-level replication |

| Core Financials | 4 hours | 15 minutes | Database mirroring, file system replication |

| Email & Collaboration | 12 hours | 4 hours | Cloud-native DR features, regular backups |

| Public Website / E-commerce | 2 hours | 5 minutes | Active-passive DR site, CDN caching, continuous replication |

| Database Servers | 2-4 hours | 5-15 minutes | Database replication, point-in-time recovery from backups |

| File Servers | 8 hours | 1 hour | File synchronization, snapshot replication |

Note: These RTO/RPO targets are examples and must be validated and customized based on detailed Business Impact Analysis (BIA) for each specific system and data set.

7. Backup and Restoration Strategies

A robust backup strategy is fundamental to achieving RPO targets and ensuring data integrity.

7.1. Data Backup Types

  • Full Backups: Complete copies of all selected data. Performed [e.g., weekly].
  • Incremental Backups: Copies only data that has changed since the last full or incremental backup. Performed [e.g., daily].
  • Differential Backups: Copies data that has changed since the last full backup. Performed [e.g., daily].
  • Database Transaction Logs: Continuously backed up or replicated for critical databases to enable point-in-time recovery.

7.2. Backup Frequency and Retention Policies

| Data Type / System | Backup Frequency | Retention Policy (On-site) | Retention Policy (Off-site/Cloud) |

| :------------------------ | :--------------- | :------------------------- | :-------------------------------- |

| Critical Application Data | Daily | 7 days | 30 days |

| Databases (Full) | Weekly | 4 weeks | 3 months |

| Databases (Logs) | Every 15 mins | 24 hours | 7 days |

| File Servers | Daily | 14 days | 60 days |

| OS / System Images | Monthly | 2 months | 6 months |

| Archival Data | Annually | N/A | 7 years (as per compliance) |

7.3. Backup Locations

  • On-site Storage: Short-term backups for quick recovery of minor incidents. Stored on [e.g., NAS/SAN].
  • Off-site Storage: Encrypted backups stored physically off-site in a secure location [e.g., Iron Mountain / Secure Vault] or replicated to a separate data center.
  • Cloud Storage: Encrypted backups replicated to a secure cloud storage provider [e.g., AWS S3, Azure Blob Storage, Google Cloud Storage] in a different geographical region.

7.4. Backup Verification Procedures

  • Regular Integrity Checks: Automated verification processes run [e.g., weekly] to ensure backup data is readable and uncorrupted.
  • Test Restorations: Critical data and system backups are periodically restored to a segregated test environment [e.g., quarterly] to validate their restorability and the documented restoration procedures.
  • Reporting: Automated reports on backup status, failures, and verification results are generated and reviewed daily by the IT Operations team.

7.5. Data Restoration Procedures

  1. Identify Data Required: Determine the specific data, system, or application to be restored and the desired recovery point.
  2. Locate Backup: Identify the appropriate backup media or cloud snapshot.
  3. Isolate Target Environment: Prepare a clean, isolated environment for restoration to prevent contamination of production systems (if applicable).
  4. Restore Data: Execute the restoration process using documented procedures specific to the backup solution (e.g., Veeam, Commvault, native cloud recovery).
  5. Verify Integrity: Perform data integrity checks and application functionality tests post-restoration.
  6. Handover to Operations: Once verified, integrate the restored system/data back into the production environment or DR site.

8. Failover Procedures

Failover procedures are activated upon the declaration of a disaster.

8.1. Activation Criteria

A disaster is declared when one or more of the following occur:

  • Loss of primary data center functionality or extended power outage beyond UPS/generator capacity.
  • Catastrophic failure of critical IT infrastructure (e.g., core network, primary storage array).
  • Major cyberattack (e.g., widespread ransomware) rendering primary systems unusable.
  • Inability to access the primary site due to environmental or civil emergencies.
  • Decision by the Incident Commander and Executive Management to initiate DR.

8.2. Disaster Declaration Process

  1. Detection: Incident detected by monitoring systems, IT staff, or user reports.
  2. Assessment: Initial assessment by IT Operations and DRT Lead to determine scope and impact.
  3. Notification: DRT Lead notifies the Incident Commander (or designated executive).
  4. Declaration: Incident Commander, in consultation with executive management, formally declares a disaster and authorizes DRP activation.
  5. Communication: DRT Communication Lead initiates internal and external communication protocols.

8.3. Failover Process (General Steps)

The detailed technical runbooks for each critical system are maintained in Appendix A. The general steps are:

  1. Isolate Primary Site (if compromised): Disconnect the affected primary site from the network to prevent further damage or data corruption.
  2. Activate DR Site/Cloud Resources:

* Provision or activate standby infrastructure at the recovery site (VMs, network, storage).

* Ensure network connectivity between the recovery site and necessary external services/users.

  1. Restore/Replicate Data:

* Initiate replication synchronization (if using continuous replication).

* Perform database failover (e.g., switch primary/secondary roles, apply transaction logs).

* Restore critical data from backups to the recovery environment as needed to meet RPO.

  1. Start Critical Applications:

* Start applications in a predefined order (e.g., database servers first, then application servers, then web servers).

* Verify application services, data integrity, and functionality.

  1. Redirect Users/Traffic:

* Update DNS records (A/CNAME records) to point to the DR site IP addresses or load balancers.

* Update VPN configurations or network routes as necessary.

* Communicate new access methods to users.

  1. Monitor: Continuously monitor the performance, stability, and security of services running at the DR site.

8.4. Fallback/Failback Process

Once the primary site is fully restored and validated, the failback process will be initiated to return operations to the primary environment.

  1. Assess Primary Site Readiness: Verify that the primary site infrastructure is fully functional, stable, and secure.
  2. Synchronize Data: Replicate all data changes that occurred at the DR site back to the primary production environment. This is a critical step to ensure no data loss during failback.
  3. Schedule Failback Window: Coordinate a planned downtime window (if necessary) with business stakeholders.
  4. Execute Failback:

* Stop new transactions at the DR site.

* Perform a final data synchronization.

* Switch primary roles back to the original production environment (e.g., database primary/secondary roles).

* Update DNS records and network configurations to point back to the primary site.

  1. Verify Primary Site Operations: Test all critical systems and applications thoroughly in the primary environment.
  2. Deactivate DR Site: Once confirmed stable, decommission or revert DR site resources to a standby state to optimize costs.
  3. Post-Failback Review: Conduct a review of the
gemini Output

As a professional AI assistant within PantheraHive, I have generated a comprehensive and detailed Disaster Recovery Plan (DRP). This document is designed to provide clear, actionable procedures to ensure business continuity and minimize downtime in the event of a disaster.


Disaster Recovery Plan: [Organization Name]

Version: 1.0

Date: October 26, 2023

Prepared By: PantheraHive Consulting


1. Executive Summary

This Disaster Recovery Plan (DRP) outlines the strategies, procedures, and responsibilities required to restore [Organization Name]'s critical IT systems and data following a disruptive event. The primary goal is to minimize the impact of disasters on business operations, ensuring rapid recovery within defined Recovery Time Objectives (RTO) and Recovery Point Objectives (RPO). This plan encompasses backup strategies, failover procedures, communication protocols, and a rigorous testing schedule to maintain readiness.

2. Introduction

2.1. Purpose

The purpose of this DRP is to provide a structured approach for [Organization Name] to respond to, recover from, and resume critical business operations following a disaster. It serves as a comprehensive guide for personnel involved in disaster recovery efforts, outlining their roles, responsibilities, and specific recovery tasks.

2.2. Scope

This DRP covers the recovery of critical IT infrastructure, applications, and data essential for [Organization Name]'s core business functions. This includes, but is not limited to:

  • Primary data center infrastructure (servers, storage, networking)
  • Key business applications (e.g., ERP, CRM, financial systems, email, web services)
  • Critical data repositories (databases, file shares)
  • Network connectivity and security systems
  • Specific departments/teams involved: IT Operations, Business Units, Management

2.3. Objectives

The key objectives of this DRP are to:

  • Minimize the financial and operational impact of a disaster.
  • Ensure the timely recovery of critical IT systems and data.
  • Achieve defined RTOs and RPOs for all critical systems.
  • Establish clear communication channels during a disaster.
  • Provide a secure and reliable recovery environment.
  • Comply with regulatory and contractual obligations related to business continuity.
  • Safeguard the organization's reputation and customer trust.

3. Roles and Responsibilities

Effective disaster recovery requires clear assignment of roles and responsibilities. The following table outlines the key roles within the Disaster Recovery Team (DRT):

| Role | Responsibility | Primary Contact | Secondary Contact |

| :----------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------- | :------------------- |

| DRP Coordinator | Overall management and oversight of the DRP. Authorizes disaster declaration, coordinates all recovery efforts, communicates with executive management, and ensures plan maintenance. | [Name/Title] | [Name/Title] |

| IT Recovery Lead | Manages the technical recovery of all IT infrastructure, applications, and data. Directs IT recovery teams, verifies system restoration, and coordinates with vendors. | [Name/Title] | [Name/Title] |

| Network & Security Team | Restores network connectivity, configures security devices (firewalls, VPNs), and ensures secure access to recovered systems. | [Name/Title] | [Name/Title] |

| Server & Virtualization Team | Recovers servers (physical/virtual), operating systems, and core infrastructure services (e.g., Active Directory, DNS). | [Name/Title] | [Name/Title] |

| Database & Application Team | Restores databases, critical business applications, and ensures data integrity. Validates application functionality post-recovery. | [Name/Title] | [Name/Title] |

| Data Backup & Storage Team | Manages data restoration from backups, verifies data integrity, and ensures storage systems are operational. | [Name/Title] | [Name/Title] |

| Business Unit Liaisons | Represent their respective business units, assist in prioritizing application recovery, perform user acceptance testing (UAT), and communicate business impacts/needs to the DRT. | [Name/Title] | [Name/Title] |

| Communications Lead | Manages all internal and external communications during a disaster, including updates to employees, customers, partners, and media. | [Name/Title] | [Name/Title] |

| Facilities Lead | Coordinates physical site recovery (if applicable), power, HVAC, and physical security at both primary and recovery sites. | [Name/Title] | [Name/Title] |

4. Disaster Recovery Strategy

4.1. Disaster Declaration Criteria

A disaster is defined as an event that causes a significant disruption to normal business operations, rendering critical IT systems or data unavailable for an extended period. The DRP Coordinator, in consultation with executive management, is authorized to declare a disaster based on the following criteria:

  • Prolonged outage: Unavailability of one or more critical systems for more than [e.g., 4-8 hours] with no immediate prospect of recovery at the primary site.
  • Site unavailability: Primary data center or office building becomes inaccessible or unusable due to fire, flood, power outage, or other major incidents.
  • Data loss/corruption: Significant data loss or corruption that cannot be recovered through normal operational backups.
  • Security breach: A catastrophic cybersecurity incident that compromises critical systems and data integrity, requiring isolation and recovery.
  • Widespread infrastructure failure: Failure of critical utilities (power, internet) affecting the primary site for an extended duration.

4.2. Recovery Time Objective (RTO) and Recovery Point Objective (RPO) Targets

RTO and RPO are critical metrics for disaster recovery planning, defining the acceptable time for recovery and data loss.

  • Recovery Time Objective (RTO): The maximum tolerable duration of time that a computer, system, network, or application can be down after a failure or disaster.
  • Recovery Point Objective (RPO): The maximum tolerable amount of data (measured in time) that can be lost from an IT service due to a major incident.

The following table outlines the RTO and RPO targets for [Organization Name]'s critical systems:

| System/Application Group | Criticality Level | RTO (Target) | RPO (Target) | Justification/Impact of Downtime |

| :----------------------- | :---------------- | :----------- | :----------- | :-------------------------------------------------------------- |

| Tier 0: Mission Critical

disaster_recovery_plan.md
Download as Markdown
Copy all content
Full output as text
Download ZIP
IDE-ready project ZIP
Copy share link
Permanent URL for this run
Get Embed Code
Embed this result on any website
Print / Save PDF
Use browser print dialog
\n\n\n"); var hasSrcMain=Object.keys(extracted).some(function(k){return k.indexOf("src/main")>=0;}); if(!hasSrcMain) zip.file(folder+"src/main."+ext,"import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n \n \n \n)\n"); var hasSrcApp=Object.keys(extracted).some(function(k){return k==="src/App."+ext||k==="App."+ext;}); if(!hasSrcApp) zip.file(folder+"src/App."+ext,"import React from 'react'\nimport './App.css'\n\nfunction App(){\n return(\n
\n
\n

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

\n
\n
\n )\n}\nexport default App\n"); zip.file(folder+"src/index.css","*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;background:#f0f2f5;color:#1a1a2e}\n.app{min-height:100vh;display:flex;flex-direction:column}\n.app-header{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px}\nh1{font-size:2.5rem;font-weight:700}\n"); zip.file(folder+"src/App.css",""); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/pages/.gitkeep",""); zip.file(folder+"src/hooks/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nnpm run dev\n\`\`\`\n\n## Build\n\`\`\`bash\nnpm run build\n\`\`\`\n\n## Open in IDE\nOpen the project folder in VS Code or WebStorm.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n"); } /* --- Vue (Vite + Composition API + TypeScript) --- */ function buildVue(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{\n "name": "'+pn+'",\n "version": "0.0.0",\n "type": "module",\n "scripts": {\n "dev": "vite",\n "build": "vue-tsc -b && vite build",\n "preview": "vite preview"\n },\n "dependencies": {\n "vue": "^3.5.13",\n "vue-router": "^4.4.5",\n "pinia": "^2.3.0",\n "axios": "^1.7.9"\n },\n "devDependencies": {\n "@vitejs/plugin-vue": "^5.2.1",\n "typescript": "~5.7.3",\n "vite": "^6.0.5",\n "vue-tsc": "^2.2.0"\n }\n}\n'); zip.file(folder+"vite.config.ts","import { defineConfig } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport { resolve } from 'path'\n\nexport default defineConfig({\n plugins: [vue()],\n resolve: { alias: { '@': resolve(__dirname,'src') } }\n})\n"); zip.file(folder+"tsconfig.json",'{"files":[],"references":[{"path":"./tsconfig.app.json"},{"path":"./tsconfig.node.json"}]}\n'); zip.file(folder+"tsconfig.app.json",'{\n "compilerOptions":{\n "target":"ES2020","useDefineForClassFields":true,"module":"ESNext","lib":["ES2020","DOM","DOM.Iterable"],\n "skipLibCheck":true,"moduleResolution":"bundler","allowImportingTsExtensions":true,\n "isolatedModules":true,"moduleDetection":"force","noEmit":true,"jsxImportSource":"vue",\n "strict":true,"paths":{"@/*":["./src/*"]}\n },\n "include":["src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.vue"]\n}\n'); zip.file(folder+"env.d.ts","/// \n"); zip.file(folder+"index.html","\n\n\n \n \n "+slugTitle(pn)+"\n\n\n
\n \n\n\n"); var hasMain=Object.keys(extracted).some(function(k){return k==="src/main.ts"||k==="main.ts";}); if(!hasMain) zip.file(folder+"src/main.ts","import { createApp } from 'vue'\nimport { createPinia } from 'pinia'\nimport App from './App.vue'\nimport './assets/main.css'\n\nconst app = createApp(App)\napp.use(createPinia())\napp.mount('#app')\n"); var hasApp=Object.keys(extracted).some(function(k){return k.indexOf("App.vue")>=0;}); if(!hasApp) zip.file(folder+"src/App.vue","\n\n\n\n\n"); zip.file(folder+"src/assets/main.css","*{margin:0;padding:0;box-sizing:border-box}body{font-family:system-ui,sans-serif;background:#fff;color:#213547}\n"); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/views/.gitkeep",""); zip.file(folder+"src/stores/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nnpm run dev\n\`\`\`\n\n## Build\n\`\`\`bash\nnpm run build\n\`\`\`\n\nOpen in VS Code or WebStorm.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n"); } /* --- Angular (v19 standalone) --- */ function buildAngular(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var sel=pn.replace(/_/g,"-"); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{\n "name": "'+pn+'",\n "version": "0.0.0",\n "scripts": {\n "ng": "ng",\n "start": "ng serve",\n "build": "ng build",\n "test": "ng test"\n },\n "dependencies": {\n "@angular/animations": "^19.0.0",\n "@angular/common": "^19.0.0",\n "@angular/compiler": "^19.0.0",\n "@angular/core": "^19.0.0",\n "@angular/forms": "^19.0.0",\n "@angular/platform-browser": "^19.0.0",\n "@angular/platform-browser-dynamic": "^19.0.0",\n "@angular/router": "^19.0.0",\n "rxjs": "~7.8.0",\n "tslib": "^2.3.0",\n "zone.js": "~0.15.0"\n },\n "devDependencies": {\n "@angular-devkit/build-angular": "^19.0.0",\n "@angular/cli": "^19.0.0",\n "@angular/compiler-cli": "^19.0.0",\n "typescript": "~5.6.0"\n }\n}\n'); zip.file(folder+"angular.json",'{\n "$schema": "./node_modules/@angular/cli/lib/config/schema.json",\n "version": 1,\n "newProjectRoot": "projects",\n "projects": {\n "'+pn+'": {\n "projectType": "application",\n "root": "",\n "sourceRoot": "src",\n "prefix": "app",\n "architect": {\n "build": {\n "builder": "@angular-devkit/build-angular:application",\n "options": {\n "outputPath": "dist/'+pn+'",\n "index": "src/index.html",\n "browser": "src/main.ts",\n "tsConfig": "tsconfig.app.json",\n "styles": ["src/styles.css"],\n "scripts": []\n }\n },\n "serve": {"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"'+pn+':build:production"},"development":{"buildTarget":"'+pn+':build:development"}},"defaultConfiguration":"development"}\n }\n }\n }\n}\n'); zip.file(folder+"tsconfig.json",'{\n "compileOnSave": false,\n "compilerOptions": {"baseUrl":"./","outDir":"./dist/out-tsc","forceConsistentCasingInFileNames":true,"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"paths":{"@/*":["src/*"]},"skipLibCheck":true,"esModuleInterop":true,"sourceMap":true,"declaration":false,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","useDefineForClassFields":false,"lib":["ES2022","dom"]},\n "references":[{"path":"./tsconfig.app.json"}]\n}\n'); zip.file(folder+"tsconfig.app.json",'{\n "extends":"./tsconfig.json",\n "compilerOptions":{"outDir":"./dist/out-tsc","types":[]},\n "files":["src/main.ts"],\n "include":["src/**/*.d.ts"]\n}\n'); zip.file(folder+"src/index.html","\n\n\n \n "+slugTitle(pn)+"\n \n \n \n\n\n \n\n\n"); zip.file(folder+"src/main.ts","import { bootstrapApplication } from '@angular/platform-browser';\nimport { appConfig } from './app/app.config';\nimport { AppComponent } from './app/app.component';\n\nbootstrapApplication(AppComponent, appConfig)\n .catch(err => console.error(err));\n"); zip.file(folder+"src/styles.css","* { margin: 0; padding: 0; box-sizing: border-box; }\nbody { font-family: system-ui, -apple-system, sans-serif; background: #f9fafb; color: #111827; }\n"); var hasComp=Object.keys(extracted).some(function(k){return k.indexOf("app.component")>=0;}); if(!hasComp){ zip.file(folder+"src/app/app.component.ts","import { Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n@Component({\n selector: 'app-root',\n standalone: true,\n imports: [RouterOutlet],\n templateUrl: './app.component.html',\n styleUrl: './app.component.css'\n})\nexport class AppComponent {\n title = '"+pn+"';\n}\n"); zip.file(folder+"src/app/app.component.html","
\n
\n

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

\n
\n \n
\n"); zip.file(folder+"src/app/app.component.css",".app-header{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;gap:16px}h1{font-size:2.5rem;font-weight:700;color:#6366f1}\n"); } zip.file(folder+"src/app/app.config.ts","import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';\nimport { provideRouter } from '@angular/router';\nimport { routes } from './app.routes';\n\nexport const appConfig: ApplicationConfig = {\n providers: [\n provideZoneChangeDetection({ eventCoalescing: true }),\n provideRouter(routes)\n ]\n};\n"); zip.file(folder+"src/app/app.routes.ts","import { Routes } from '@angular/router';\n\nexport const routes: Routes = [];\n"); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nng serve\n# or: npm start\n\`\`\`\n\n## Build\n\`\`\`bash\nng build\n\`\`\`\n\nOpen in VS Code with Angular Language Service extension.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n.angular/\n"); } /* --- Python --- */ function buildPython(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^\`\`\`[\w]*\n?/m,"").replace(/\n?\`\`\`$/m,"").trim(); var reqMap={"numpy":"numpy","pandas":"pandas","sklearn":"scikit-learn","tensorflow":"tensorflow","torch":"torch","flask":"flask","fastapi":"fastapi","uvicorn":"uvicorn","requests":"requests","sqlalchemy":"sqlalchemy","pydantic":"pydantic","dotenv":"python-dotenv","PIL":"Pillow","cv2":"opencv-python","matplotlib":"matplotlib","seaborn":"seaborn","scipy":"scipy"}; var reqs=[]; Object.keys(reqMap).forEach(function(k){if(src.indexOf("import "+k)>=0||src.indexOf("from "+k)>=0)reqs.push(reqMap[k]);}); var reqsTxt=reqs.length?reqs.join("\n"):"# add dependencies here\n"; zip.file(folder+"main.py",src||"# "+title+"\n# Generated by PantheraHive BOS\n\nprint(title+\" loaded\")\n"); zip.file(folder+"requirements.txt",reqsTxt); zip.file(folder+".env.example","# Environment variables\n"); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -r requirements.txt\n\`\`\`\n\n## Run\n\`\`\`bash\npython main.py\n\`\`\`\n"); zip.file(folder+".gitignore",".venv/\n__pycache__/\n*.pyc\n.env\n.DS_Store\n"); } /* --- Node.js --- */ function buildNode(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^\`\`\`[\w]*\n?/m,"").replace(/\n?\`\`\`$/m,"").trim(); var depMap={"mongoose":"^8.0.0","dotenv":"^16.4.5","axios":"^1.7.9","cors":"^2.8.5","bcryptjs":"^2.4.3","jsonwebtoken":"^9.0.2","socket.io":"^4.7.4","uuid":"^9.0.1","zod":"^3.22.4","express":"^4.18.2"}; var deps={}; Object.keys(depMap).forEach(function(k){if(src.indexOf(k)>=0)deps[k]=depMap[k];}); if(!deps["express"])deps["express"]="^4.18.2"; var pkgJson=JSON.stringify({"name":pn,"version":"1.0.0","main":"src/index.js","scripts":{"start":"node src/index.js","dev":"nodemon src/index.js"},"dependencies":deps,"devDependencies":{"nodemon":"^3.0.3"}},null,2)+"\n"; zip.file(folder+"package.json",pkgJson); var fallback="const express=require(\"express\");\nconst app=express();\napp.use(express.json());\n\napp.get(\"/\",(req,res)=>{\n res.json({message:\""+title+" API\"});\n});\n\nconst PORT=process.env.PORT||3000;\napp.listen(PORT,()=>console.log(\"Server on port \"+PORT));\n"; zip.file(folder+"src/index.js",src||fallback); zip.file(folder+".env.example","PORT=3000\n"); zip.file(folder+".gitignore","node_modules/\n.env\n.DS_Store\n"); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\n\`\`\`\n\n## Run\n\`\`\`bash\nnpm run dev\n\`\`\`\n"); } /* --- Vanilla HTML --- */ function buildVanillaHtml(zip,folder,app,code){ var title=slugTitle(app); var isFullDoc=code.trim().toLowerCase().indexOf("=0||code.trim().toLowerCase().indexOf("=0; var indexHtml=isFullDoc?code:"\n\n\n\n\n"+title+"\n\n\n\n"+code+"\n\n\n\n"; zip.file(folder+"index.html",indexHtml); zip.file(folder+"style.css","/* "+title+" — styles */\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;background:#fff;color:#1a1a2e}\n"); zip.file(folder+"script.js","/* "+title+" — scripts */\n"); zip.file(folder+"assets/.gitkeep",""); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Open\nDouble-click \`index.html\` in your browser.\n\nOr serve locally:\n\`\`\`bash\nnpx serve .\n# or\npython3 -m http.server 3000\n\`\`\`\n"); zip.file(folder+".gitignore",".DS_Store\nnode_modules/\n.env\n"); } /* ===== MAIN ===== */ var sc=document.createElement("script"); sc.src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"; sc.onerror=function(){ if(lbl)lbl.textContent="Download ZIP"; alert("JSZip load failed — check connection."); }; sc.onload=function(){ var zip=new JSZip(); var base=(_phFname||"output").replace(/\.[^.]+$/,""); var app=base.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")||"my_app"; var folder=app+"/"; var vc=document.getElementById("panel-content"); var panelTxt=vc?(vc.innerText||vc.textContent||""):""; var lang=detectLang(_phCode,panelTxt); if(_phIsHtml){ buildVanillaHtml(zip,folder,app,_phCode); } else if(lang==="flutter"){ buildFlutter(zip,folder,app,_phCode,panelTxt); } else if(lang==="react-native"){ buildReactNative(zip,folder,app,_phCode,panelTxt); } else if(lang==="swift"){ buildSwift(zip,folder,app,_phCode,panelTxt); } else if(lang==="kotlin"){ buildKotlin(zip,folder,app,_phCode,panelTxt); } else if(lang==="react"){ buildReact(zip,folder,app,_phCode,panelTxt); } else if(lang==="vue"){ buildVue(zip,folder,app,_phCode,panelTxt); } else if(lang==="angular"){ buildAngular(zip,folder,app,_phCode,panelTxt); } else if(lang==="python"){ buildPython(zip,folder,app,_phCode); } else if(lang==="node"){ buildNode(zip,folder,app,_phCode); } else { /* Document/content workflow */ var title=app.replace(/_/g," "); var md=_phAll||_phCode||panelTxt||"No content"; zip.file(folder+app+".md",md); var h=""+title+""; h+="

"+title+"

"; var hc=md.replace(/&/g,"&").replace(//g,">"); hc=hc.replace(/^### (.+)$/gm,"

$1

"); hc=hc.replace(/^## (.+)$/gm,"

$1

"); hc=hc.replace(/^# (.+)$/gm,"

$1

"); hc=hc.replace(/\*\*(.+?)\*\*/g,"$1"); hc=hc.replace(/\n{2,}/g,"

"); h+="

"+hc+"

Generated by PantheraHive BOS
"; zip.file(folder+app+".html",h); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\nFiles:\n- "+app+".md (Markdown)\n- "+app+".html (styled HTML)\n"); } zip.generateAsync({type:"blob"}).then(function(blob){ var a=document.createElement("a"); a.href=URL.createObjectURL(blob); a.download=app+".zip"; a.click(); URL.revokeObjectURL(a.href); if(lbl)lbl.textContent="Download ZIP"; }); }; document.head.appendChild(sc); } function phShare(){navigator.clipboard.writeText(window.location.href).then(function(){var el=document.getElementById("ph-share-lbl");if(el){el.textContent="Link copied!";setTimeout(function(){el.textContent="Copy share link";},2500);}});}function phEmbed(){var runId=window.location.pathname.split("/").pop().replace(".html","");var embedUrl="https://pantherahive.com/embed/"+runId;var code='';navigator.clipboard.writeText(code).then(function(){var el=document.getElementById("ph-embed-lbl");if(el){el.textContent="Embed code copied!";setTimeout(function(){el.textContent="Get Embed Code";},2500);}});}