Skip to content
Merged
1 change: 1 addition & 0 deletions changes/411.fixed
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Equinix parser: match maintenance_id for alternative email subject line, when the maintenance_id is not matched between square brackets
11 changes: 10 additions & 1 deletion circuit_maintenance_parser/parsers/equinix.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,16 +147,25 @@ def parse_subject(self, subject: str) -> List[Dict]:

Args:
subject (str): subject of email
e.g. 'Scheduled software upgrade in metro connect platform-SG Metro Area Network Maintenance -19-OCT-2021 [5-212760022356]'.
e.g. 'COMPLETED - Remedial Emergency Maintenance - SG Metro Area Network Maintenance - 04-APR-2026 [CHG0124084]'.
alternative format: 'Service Impacting - Remedial - Dark Fiber Activity - SG Metro Area - Network Maintenance - 03-MAY-2026 - CHG0125903'
older format: 'Scheduled software upgrade in metro connect platform-SG Metro Area Network Maintenance -19-OCT-2021 [5-212760022356]'


Returns:
List[Dict]: Returns the data object with summary and status fields.
"""
data = {}
# Try and match maintenance_id for string between brackets, e.g.: [CHG0124084]
maintenance_id = re.search(r"\[([^[]*)\]$", subject)
if maintenance_id:
data["maintenance_id"] = maintenance_id[1]
else:
# If not matched between brackets, look for maintenance_id in format of CHG[0-9]+
maintenance_id = re.search(r"CHG\d+", subject)
if maintenance_id:
data["maintenance_id"] = maintenance_id.group()

data["summary"] = subject.strip().replace("\n", "")
if "completed" in subject.lower():
data["status"] = Status.COMPLETED
Expand Down
459 changes: 459 additions & 0 deletions tests/unit/data/equinix/equinix10.eml

Large diffs are not rendered by default.

17 changes: 17 additions & 0 deletions tests/unit/data/equinix/equinix10_result.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[
{
"account": "133337",
"circuits": [
{
"circuit_id": "13333371-A",
"impact": "OUTAGE"
},
{
"circuit_id": "13333372-A",
"impact": "OUTAGE"
}
],
"end": 1777752000,
"start": 1777737600
}
]
25 changes: 25 additions & 0 deletions tests/unit/data/equinix/equinix10_result_combined.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
[
{
"account": "133337",
"circuits": [
{
"circuit_id": "13333371-A",
"impact": "OUTAGE"
},
{
"circuit_id": "13333372-A",
"impact": "OUTAGE"
}
],
"end": 1777752000,
"maintenance_id": "CHG0125903",
"organizer": "servicedesk@equinix.com",
"provider": "equinix",
"sequence": 1,
"stamp": 1776816428,
"start": 1777737600,
"status": "CONFIRMED",
"summary": "Service Impacting - Remedial - Dark Fiber Activity - SG Metro Area - Network Maintenance - 03-MAY-2026 - CHG0125903",
"uid": "0"
}
]
1 change: 1 addition & 0 deletions tests/unit/data/equinix/equinix11_subject.eml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Service Impacting - Remedial - Dark Fiber Activity - SG Metro Area - Network Maintenance - 03-MAY-2026 - CHG0125903
7 changes: 7 additions & 0 deletions tests/unit/data/equinix/equinix11_subject_result.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[
{
"maintenance_id": "CHG0125903",
"status": "CONFIRMED",
"summary": "Service Impacting - Remedial - Dark Fiber Activity - SG Metro Area - Network Maintenance - 03-MAY-2026 - CHG0125903"
}
]
5 changes: 5 additions & 0 deletions tests/unit/test_e2e.py
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,11 @@
[("email", Path(dir_path, "data", "equinix", "equinix9.eml"))],
[Path(dir_path, "data", "equinix", "equinix9_result_combined.json")],
),
(
Equinix,
[("email", Path(dir_path, "data", "equinix", "equinix10.eml"))],
[Path(dir_path, "data", "equinix", "equinix10_result_combined.json")],
),
# EUNetworks
(
EUNetworks,
Expand Down
10 changes: 10 additions & 0 deletions tests/unit/test_parsers.py
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,16 @@ def default(self, o):
Path(dir_path, "data", "equinix", "equinix9.eml"),
Path(dir_path, "data", "equinix", "equinix9_result.json"),
),
(
HtmlParserEquinix,
Path(dir_path, "data", "equinix", "equinix10.eml"),
Path(dir_path, "data", "equinix", "equinix10_result.json"),
),
(
SubjectParserEquinix,
Path(dir_path, "data", "equinix", "equinix11_subject.eml"),
Path(dir_path, "data", "equinix", "equinix11_subject_result.json"),
),
# Global Cloud Xchange
(
HtmlParserGcx1,
Expand Down
Loading