File tree Expand file tree Collapse file tree 3 files changed +43
-3
lines changed
Expand file tree Collapse file tree 3 files changed +43
-3
lines changed Original file line number Diff line number Diff line change @@ -74,6 +74,8 @@ pip install django-health-check[rss,atlassian]
7474
7575::: health_check.contrib.rss.Heroku
7676
77+ ::: health_check.contrib.rss.Hetzner
78+
7779::: health_check.contrib.atlassian.PlatformSh
7880
7981::: health_check.contrib.atlassian.Render
Original file line number Diff line number Diff line change @@ -182,6 +182,28 @@ class Heroku(Feed):
182182 )
183183
184184
185+ @dataclasses .dataclass
186+ class Hetzner (Feed ):
187+ """
188+ Check Hetzner platform status via their public ATOM status feed.
189+
190+ Args:
191+ timeout: Request timeout duration.
192+ max_age: Maximum age for an incident to be considered active.
193+
194+ """
195+
196+ timeout : datetime .timedelta = dataclasses .field (
197+ default = datetime .timedelta (seconds = 10 ), repr = False
198+ )
199+ max_age : datetime .timedelta = dataclasses .field (
200+ default = datetime .timedelta (hours = 8 ), repr = False
201+ )
202+ feed_url : str = dataclasses .field (
203+ default = "https://status.hetzner.com/en.atom" , init = False , repr = False
204+ )
205+
206+
185207@dataclasses .dataclass
186208class Azure (Feed ):
187209 """
Original file line number Diff line number Diff line change 66
77import pytest
88
9- pytest .importorskip ("httpx" )
9+ httpx = pytest .importorskip ("httpx" )
1010
11- from health_check .contrib .rss import (
11+ from health_check .contrib .rss import ( # noqa: E402
1212 AWS ,
1313 Azure ,
1414 GoogleCloud ,
1515 Heroku ,
1616)
17- from health_check .exceptions import ServiceUnavailable , ServiceWarning
17+ from health_check .exceptions import ServiceUnavailable , ServiceWarning # noqa: E402
1818
1919
2020class TestAWS :
@@ -437,6 +437,22 @@ def test_feed_url_format(self):
437437 assert check .feed_url == "https://status.heroku.com/feed"
438438
439439
440+ class TestHetzner :
441+ """Test Hetzner platform status health check."""
442+
443+ @pytest .mark .asyncio
444+ async def test_feed_url (self ):
445+ """Verify correct feed URL for Hetzner."""
446+ from health_check .contrib .rss import Hetzner
447+
448+ check = Hetzner ()
449+ async with httpx .AsyncClient () as client :
450+ response = await client .get (
451+ check .feed_url , headers = {"User-Agent" : "django-health-check" }
452+ )
453+ assert response .status_code != 404 , "Hetzner feed URL is not valid"
454+
455+
440456class TestAzure :
441457 """Test Azure platform status health check."""
442458
You can’t perform that action at this time.
0 commit comments