Browse Source

Refactor: change Check.get_status(with_started=...) default value from True to False (with_started=False is or will be useful in more places)

pull/394/head
Pēteris Caune 4 years ago
parent
commit
a18eb134f5
No known key found for this signature in database GPG Key ID: E28D7679E9A9EDE2
13 changed files with 42 additions and 39 deletions
  1. +1
    -1
      hc/accounts/models.py
  2. +1
    -1
      hc/api/management/commands/sendalerts.py
  3. +5
    -2
      hc/api/models.py
  4. +8
    -12
      hc/api/tests/test_check_model.py
  5. +1
    -1
      hc/api/views.py
  6. +2
    -2
      hc/front/templatetags/hc_extras.py
  7. +4
    -4
      hc/front/views.py
  8. +8
    -6
      templates/emails/summary-downtimes-html.html
  9. +8
    -6
      templates/emails/summary-html.html
  10. +1
    -1
      templates/emails/summary-text.html
  11. +1
    -1
      templates/front/details.html
  12. +1
    -1
      templates/front/log_status_text.html
  13. +1
    -1
      templates/front/my_checks_desktop.html

+ 1
- 1
hc/accounts/models.py View File

@ -300,7 +300,7 @@ class Project(models.Model):
def overall_status(self): def overall_status(self):
status = "up" status = "up"
for check in self.check_set.all(): for check in self.check_set.all():
check_status = check.get_status(with_started=False)
check_status = check.get_status()
if status == "up" and check_status == "grace": if status == "up" and check_status == "grace":
status = "grace" status = "grace"


+ 1
- 1
hc/api/management/commands/sendalerts.py View File

@ -105,7 +105,7 @@ class Command(BaseCommand):
q = Check.objects.filter(id=check.id, status=old_status) q = Check.objects.filter(id=check.id, status=old_status)
try: try:
status = check.get_status(with_started=False)
status = check.get_status()
except Exception as e: except Exception as e:
# Make sure we don't trip on this check again for an hour: # Make sure we don't trip on this check again for an hour:
# Otherwise sendalerts may end up in a crash loop. # Otherwise sendalerts may end up in a crash loop.


+ 5
- 2
hc/api/models.py View File

@ -160,7 +160,7 @@ class Check(models.Model):
if grace_start is not None: if grace_start is not None:
return grace_start + self.grace return grace_start + self.grace
def get_status(self, now=None, with_started=True):
def get_status(self, now=None, with_started=False):
""" Return current status for display. """ """ Return current status for display. """
if now is None: if now is None:
@ -185,6 +185,9 @@ class Check(models.Model):
return "up" return "up"
def get_status_with_started(self):
return self.get_status(with_started=True)
def assign_all_channels(self): def assign_all_channels(self):
channels = Channel.objects.filter(project=self.project) channels = Channel.objects.filter(project=self.project)
self.channel_set.set(channels) self.channel_set.set(channels)
@ -214,7 +217,7 @@ class Check(models.Model):
"desc": self.desc, "desc": self.desc,
"grace": int(self.grace.total_seconds()), "grace": int(self.grace.total_seconds()),
"n_pings": self.n_pings, "n_pings": self.n_pings,
"status": self.get_status(),
"status": self.get_status(with_started=True),
"last_ping": isostring(self.last_ping), "last_ping": isostring(self.last_ping),
"next_ping": isostring(self.get_grace_start()), "next_ping": isostring(self.get_grace_start()),
"manual_resume": self.manual_resume, "manual_resume": self.manual_resume,


+ 8
- 12
hc/api/tests/test_check_model.py View File

@ -29,12 +29,8 @@ class CheckModelTestCase(BaseTestCase):
def test_get_status_handles_paused_check(self): def test_get_status_handles_paused_check(self):
check = Check() check = Check()
check.status = "up"
check.last_ping = timezone.now() - timedelta(days=1, minutes=30)
self.assertEqual(check.get_status(), "grace")
check.status = "paused" check.status = "paused"
check.last_ping = timezone.now() - timedelta(days=1, minutes=30)
self.assertEqual(check.get_status(), "paused") self.assertEqual(check.get_status(), "paused")
def test_status_works_with_cron_syntax(self): def test_status_works_with_cron_syntax(self):
@ -103,7 +99,7 @@ class CheckModelTestCase(BaseTestCase):
check.last_start = timezone.now() - timedelta(minutes=5) check.last_start = timezone.now() - timedelta(minutes=5)
for status in ("new", "paused", "up", "down"): for status in ("new", "paused", "up", "down"):
check.status = status check.status = status
self.assertEqual(check.get_status(), "started")
self.assertEqual(check.get_status(with_started=True), "started")
def test_get_status_handles_down_then_started_and_expired(self): def test_get_status_handles_down_then_started_and_expired(self):
check = Check(status="down") check = Check(status="down")
@ -112,8 +108,8 @@ class CheckModelTestCase(BaseTestCase):
# Last start was 2 hours ago - the check is past its grace time # Last start was 2 hours ago - the check is past its grace time
check.last_start = timezone.now() - timedelta(hours=2) check.last_start = timezone.now() - timedelta(hours=2)
self.assertEqual(check.get_status(with_started=True), "down")
self.assertEqual(check.get_status(), "down") self.assertEqual(check.get_status(), "down")
self.assertEqual(check.get_status(with_started=False), "down")
def test_get_status_handles_up_then_started(self): def test_get_status_handles_up_then_started(self):
check = Check(status="up") check = Check(status="up")
@ -122,9 +118,9 @@ class CheckModelTestCase(BaseTestCase):
# Last start was 5 minutes ago # Last start was 5 minutes ago
check.last_start = timezone.now() - timedelta(minutes=5) check.last_start = timezone.now() - timedelta(minutes=5)
self.assertEqual(check.get_status(), "started")
self.assertEqual(check.get_status(with_started=True), "started")
# Starting a check starts the grace period: # Starting a check starts the grace period:
self.assertEqual(check.get_status(with_started=False), "grace")
self.assertEqual(check.get_status(), "grace")
def test_get_status_handles_up_then_started_and_expired(self): def test_get_status_handles_up_then_started_and_expired(self):
check = Check(status="up") check = Check(status="up")
@ -133,23 +129,23 @@ class CheckModelTestCase(BaseTestCase):
# Last start was 2 hours ago - the check is past its grace time # Last start was 2 hours ago - the check is past its grace time
check.last_start = timezone.now() - timedelta(hours=2) check.last_start = timezone.now() - timedelta(hours=2)
self.assertEqual(check.get_status(with_started=True), "down")
self.assertEqual(check.get_status(), "down") self.assertEqual(check.get_status(), "down")
self.assertEqual(check.get_status(with_started=False), "down")
def test_get_status_handles_paused_then_started_and_expired(self): def test_get_status_handles_paused_then_started_and_expired(self):
check = Check(status="paused") check = Check(status="paused")
# Last start was 2 hours ago - the check is past its grace time # Last start was 2 hours ago - the check is past its grace time
check.last_start = timezone.now() - timedelta(hours=2) check.last_start = timezone.now() - timedelta(hours=2)
self.assertEqual(check.get_status(with_started=True), "down")
self.assertEqual(check.get_status(), "down") self.assertEqual(check.get_status(), "down")
self.assertEqual(check.get_status(with_started=False), "down")
def test_get_status_handles_started_and_mia(self): def test_get_status_handles_started_and_mia(self):
check = Check() check = Check()
check.last_start = timezone.now() - timedelta(hours=2) check.last_start = timezone.now() - timedelta(hours=2)
self.assertEqual(check.get_status(with_started=True), "down")
self.assertEqual(check.get_status(), "down") self.assertEqual(check.get_status(), "down")
self.assertEqual(check.get_status(with_started=False), "down")
def test_next_ping_with_cron_syntax(self): def test_next_ping_with_cron_syntax(self):
dt = timezone.make_aware(datetime(2000, 1, 1), timezone=timezone.utc) dt = timezone.make_aware(datetime(2000, 1, 1), timezone=timezone.utc)


+ 1
- 1
hc/api/views.py View File

@ -359,7 +359,7 @@ def badge(request, badge_key, signature, tag, fmt="svg"):
continue continue
total += 1 total += 1
check_status = check.get_status(with_started=False)
check_status = check.get_status()
if check_status == "down": if check_status == "down":
down += 1 down += 1


+ 2
- 2
hc/front/templatetags/hc_extras.py View File

@ -87,7 +87,7 @@ def last_ping_key(check):
def not_down_key(check): def not_down_key(check):
return check.get_status() != "down"
return check.get_status(with_started=True) != "down"
@register.filter @register.filter
@ -126,7 +126,7 @@ def down_title(check):
""" """
s = "%s%s" % (check.name_then_code(), settings.SITE_NAME) s = "%s%s" % (check.name_then_code(), settings.SITE_NAME)
if check.get_status() == "down":
if check.get_status(with_started=True) == "down":
s = "DOWN – " + s s = "DOWN – " + s
return s return s


+ 4
- 4
hc/front/views.py View File

@ -56,7 +56,7 @@ DOWNTIMES_TMPL = get_template("front/details_downtimes.html")
def _tags_statuses(checks): def _tags_statuses(checks):
tags, down, grace, num_down = {}, {}, {}, 0 tags, down, grace, num_down = {}, {}, {}, 0
for check in checks: for check in checks:
status = check.get_status(with_started=False)
status = check.get_status()
if status == "down": if status == "down":
num_down += 1 num_down += 1
@ -207,7 +207,7 @@ def status(request, code):
details.append( details.append(
{ {
"code": str(check.code), "code": str(check.code),
"status": check.get_status(),
"status": check.get_status(with_started=True),
"last_ping": LAST_PING_TMPL.render(ctx), "last_ping": LAST_PING_TMPL.render(ctx),
} }
) )
@ -594,7 +594,7 @@ def copy(request, code):
def status_single(request, code): def status_single(request, code):
check = _get_check_for_user(request, code) check = _get_check_for_user(request, code)
status = check.get_status()
status = check.get_status(with_started=True)
events = _get_events(check, 20) events = _get_events(check, 20)
updated = "1" updated = "1"
if len(events): if len(events):
@ -1691,7 +1691,7 @@ def metrics(request, code, key):
TMPL = """hc_check_up{name="%s", tags="%s", unique_key="%s"} %d\n""" TMPL = """hc_check_up{name="%s", tags="%s", unique_key="%s"} %d\n"""
for check in checks: for check in checks:
value = 0 if check.get_status(with_started=False) == "down" else 1
value = 0 if check.get_status() == "down" else 1
yield TMPL % (esc(check.name), esc(check.tags), check.unique_key, value) yield TMPL % (esc(check.name), esc(check.tags), check.unique_key, value)
tags_statuses, num_down = _tags_statuses(checks) tags_statuses, num_down = _tags_statuses(checks)


+ 8
- 6
templates/emails/summary-downtimes-html.html View File

@ -19,19 +19,21 @@
<td style="border-top: 1px solid #EDEFF2; padding: 16px 8px;"> <td style="border-top: 1px solid #EDEFF2; padding: 16px 8px;">
<table cellpadding="0" cellspacing="0"> <table cellpadding="0" cellspacing="0">
<tr> <tr>
{% if check.get_status == "new" %}
{% with check.get_status_with_started as status %}
{% if status == "new" %}
<td style="background: #AAA; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; margin: 0; border-radius: 3px;">NEW</td> <td style="background: #AAA; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; margin: 0; border-radius: 3px;">NEW</td>
{% elif check.get_status == "paused" %}
{% elif status == "paused" %}
<td style="background: #AAA; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">PAUSED</td> <td style="background: #AAA; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">PAUSED</td>
{% elif check.get_status == "grace" %}
{% elif status == "grace" %}
<td style="background: #f0ad4e; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">LATE</td> <td style="background: #f0ad4e; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">LATE</td>
{% elif check.get_status == "up" %}
{% elif status == "up" %}
<td style="background: #5cb85c; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">UP</td> <td style="background: #5cb85c; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">UP</td>
{% elif check.get_status == "started" %}
{% elif status == "started" %}
<td style="background: #5cb85c; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">STARTED</td> <td style="background: #5cb85c; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">STARTED</td>
{% elif check.get_status == "down" %}
{% elif status == "down" %}
<td style="background: #d9534f; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">DOWN</td> <td style="background: #d9534f; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">DOWN</td>
{% endif %} {% endif %}
{% endwith %}
</tr> </tr>
</table> </table>
</td> </td>


+ 8
- 6
templates/emails/summary-html.html View File

@ -13,19 +13,21 @@
<td style="border-top: 1px solid #EDEFF2; padding: 16px 8px;"> <td style="border-top: 1px solid #EDEFF2; padding: 16px 8px;">
<table cellpadding="0" cellspacing="0"> <table cellpadding="0" cellspacing="0">
<tr> <tr>
{% if check.get_status == "new" %}
{% with check.get_status_with_started as status %}
{% if status == "new" %}
<td style="background: #AAA; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; margin: 0; border-radius: 3px;">NEW</td> <td style="background: #AAA; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; margin: 0; border-radius: 3px;">NEW</td>
{% elif check.get_status == "paused" %}
{% elif status == "paused" %}
<td style="background: #AAA; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">PAUSED</td> <td style="background: #AAA; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">PAUSED</td>
{% elif check.get_status == "grace" %}
{% elif status == "grace" %}
<td style="background: #f0ad4e; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">LATE</td> <td style="background: #f0ad4e; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">LATE</td>
{% elif check.get_status == "up" %}
{% elif status == "up" %}
<td style="background: #5cb85c; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">UP</td> <td style="background: #5cb85c; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">UP</td>
{% elif check.get_status == "started" %}
{% elif status == "started" %}
<td style="background: #5cb85c; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">STARTED</td> <td style="background: #5cb85c; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">STARTED</td>
{% elif check.get_status == "down" %}
{% elif status == "down" %}
<td style="background: #d9534f; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">DOWN</td> <td style="background: #d9534f; font-family: Helvetica, Arial, sans-serif; font-weight: bold; font-size: 10px; line-height: 10px; color: white; padding: 6px; border-radius: 3px;">DOWN</td>
{% endif %} {% endif %}
{% endwith %}
</tr> </tr>
</table> </table>
</td> </td>


+ 1
- 1
templates/emails/summary-text.html View File

@ -1,5 +1,5 @@
{% load humanize hc_extras %} {% load humanize hc_extras %}
Status | Name | Last Ping Status | Name | Last Ping
--------+------------------------------------------+-----------------------{% for check in checks %} --------+------------------------------------------+-----------------------{% for check in checks %}
{{ check.get_status|ljust:"6" }} | {{ check.name|default:'unnamed'|ljust:"40" }} | {% if check.last_ping %}{{ check.last_ping|naturaltime }}{% else %}Never{% endif %}{% endfor %}
{{ check.get_status_with_started|ljust:"6" }} | {{ check.name|default:'unnamed'|ljust:"40" }} | {% if check.last_ping %}{{ check.last_ping|naturaltime }}{% else %}Never{% endif %}{% endfor %}

+ 1
- 1
templates/front/details.html View File

@ -111,7 +111,7 @@
<table> <table>
<tr> <tr>
<td> <td>
<span id="log-status-icon" class="status icon-{{ check.get_status }}"></span>
<span id="log-status-icon" class="status icon-{{ check.get_status_with_started }}"></span>
</td> </td>
<td > <td >
<p id="log-status-text">{% include "front/log_status_text.html" %}</p> <p id="log-status-text">{% include "front/log_status_text.html" %}</p>


+ 1
- 1
templates/front/log_status_text.html View File

@ -1,5 +1,5 @@
{% load humanize %} {% load humanize %}
{% with check.get_status as status %}
{% with check.get_status_with_started as status %}
{% if status == "down" %} {% if status == "down" %}
This check is down. Last ping was {{ check.last_ping|naturaltime }}. This check is down. Last ping was {{ check.last_ping|naturaltime }}.
{% elif status == "up" %} {% elif status == "up" %}


+ 1
- 1
templates/front/my_checks_desktop.html View File

@ -60,7 +60,7 @@
{% if check in hidden_checks %}style="display: none"{% endif %}> {% if check in hidden_checks %}style="display: none"{% endif %}>
<td class="indicator-cell"> <td class="indicator-cell">
<span class="status icon-{{ check.get_status }}" data-toggle="tooltip"></span>
<span class="status icon-{{ check.get_status_with_started }}" data-toggle="tooltip"></span>
</td> </td>
<td> <td>
<div data-name="{{ check.name }}" <div data-name="{{ check.name }}"


Loading…
Cancel
Save