Allow PD migrator tool to migrate on-call shifts when migrating schedules (currently it migrates schedules using PD ICal file): https://github.com/grafana/oncall/issues/1283. This PR will allow to select the mode of schedule migration via `SCHEDULE_MIGRATION_MODE_WEB` env variable (`ical` or `web`). Due to differences in the scheduling systems of PD and OnCall, it's not always possible to migrate shifts automatically (migration plan will show any schedules and layers that can't be migrated). PD rotations that will be possible to migrate: - Any rotation without restrictions ("restriction" is a PD term for describing active periods for rotation) - Daily rotations with daily restrictions - Weekly rotations with weekly restrictions - Some weekly rotations with daily restrictions - Some daily rotations with weekly restrictions There will be a separate PR to update the [instruction](https://github.com/grafana/oncall/tree/dev/tools/pagerduty-migrator#readme) since this one is pretty huge already.
43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
import os
|
|
from urllib.parse import urljoin
|
|
|
|
MODE_PLAN = "plan"
|
|
MODE_MIGRATE = "migrate"
|
|
MODE = os.getenv("MODE", default=MODE_PLAN)
|
|
assert MODE in (MODE_PLAN, MODE_MIGRATE)
|
|
|
|
PAGERDUTY_API_TOKEN = os.environ["PAGERDUTY_API_TOKEN"]
|
|
ONCALL_API_TOKEN = os.environ["ONCALL_API_TOKEN"]
|
|
ONCALL_API_URL = urljoin(
|
|
os.environ["ONCALL_API_URL"].removesuffix("/") + "/",
|
|
"api/v1/",
|
|
)
|
|
|
|
ONCALL_DELAY_OPTIONS = [1, 5, 15, 30, 60]
|
|
ONCALL_DEFAULT_CONTACT_METHOD = "notify_by_" + os.getenv(
|
|
"ONCALL_DEFAULT_CONTACT_METHOD", default="email"
|
|
)
|
|
PAGERDUTY_TO_ONCALL_CONTACT_METHOD_MAP = {
|
|
"sms_contact_method": "notify_by_sms",
|
|
"phone_contact_method": "notify_by_phone_call",
|
|
"email_contact_method": "notify_by_email",
|
|
"push_notification_contact_method": ONCALL_DEFAULT_CONTACT_METHOD,
|
|
}
|
|
PAGERDUTY_TO_ONCALL_VENDOR_MAP = {
|
|
"Datadog": "datadog",
|
|
"Pingdom": "pingdom",
|
|
"Prometheus": "alertmanager",
|
|
"PRTG": "prtg",
|
|
"Stackdriver": "stackdriver",
|
|
"UptimeRobot": "uptimerobot",
|
|
"New Relic": "newrelic",
|
|
"Zabbix Webhook (for 5.0 and 5.2)": "zabbix",
|
|
"Elastic Alerts": "elastalert",
|
|
"Firebase": "fabric",
|
|
}
|
|
|
|
SCHEDULE_MIGRATION_MODE_ICAL = "ical"
|
|
SCHEDULE_MIGRATION_MODE_WEB = "web"
|
|
SCHEDULE_MIGRATION_MODE = os.getenv(
|
|
"SCHEDULE_MIGRATION_MODE", SCHEDULE_MIGRATION_MODE_ICAL
|
|
)
|