diff --git a/sdbs_infra/dashboard/migrations/0006_service_port.py b/sdbs_infra/dashboard/migrations/0006_service_port.py new file mode 100644 index 0000000..50eb189 --- /dev/null +++ b/sdbs_infra/dashboard/migrations/0006_service_port.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.7 on 2020-06-15 10:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dashboard', '0005_auto_20200613_2032'), + ] + + operations = [ + migrations.AddField( + model_name='service', + name='port', + field=models.IntegerField(blank=True, help_text='Used for checking status', null=True), + ), + ] diff --git a/sdbs_infra/dashboard/models.py b/sdbs_infra/dashboard/models.py index d10bdd2..e93100b 100644 --- a/sdbs_infra/dashboard/models.py +++ b/sdbs_infra/dashboard/models.py @@ -1,3 +1,4 @@ +import socket import urllib.request from enum import Enum from socket import timeout @@ -20,6 +21,7 @@ class Service(OrderedModel): short_name = models.CharField(null=False, max_length=64) image = models.ImageField(null=True, blank=True, upload_to='services') description = models.TextField(null=True, blank=True) + port = models.IntegerField(null=True, blank=True, help_text="Used for checking status") url = models.URLField() def __str__(self): @@ -34,6 +36,15 @@ class Service(OrderedModel): return None def get_status(self): + if self.port: + a_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + location = ("localhost", self.port) + result_of_check = a_socket.connect_ex(location) + if result_of_check == 0: + return ServiceStatus.OK + else: + return ServiceStatus.DOWN + if self.index_request and self.index_request.getcode() == 200: return ServiceStatus.OK else: