diff --git a/atdb/docs/ATDB-LDV Data Model.png b/atdb/docs/ATDB-LDV Data Model.png index 18e42bf6464246f4eb8d9083883b45c463a2b7b3..fde7427e424f1d069c053cd2d5349c81ed0210be 100644 Binary files a/atdb/docs/ATDB-LDV Data Model.png and b/atdb/docs/ATDB-LDV Data Model.png differ diff --git a/atdb/taskdatabase/admin.py b/atdb/taskdatabase/admin.py index 17096d1348a090dbf97859593f48e1d103e99939..95916de8dbeb25a9f6a51ae6ce8644f1c040ec98 100644 --- a/atdb/taskdatabase/admin.py +++ b/atdb/taskdatabase/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from .models import Status, Task, Workflow, LogEntry, Configuration, Job, PostProcessingRule +from .models import Status, Task, Workflow, LogEntry, Configuration, Job, PostProcessingRule, Monitor admin.site.register(Status) admin.site.register(Task) @@ -7,4 +7,5 @@ admin.site.register(Workflow) admin.site.register(LogEntry) admin.site.register(Configuration) admin.site.register(Job) -admin.site.register(PostProcessingRule) \ No newline at end of file +admin.site.register(PostProcessingRule) +admin.site.register(Monitor) \ No newline at end of file diff --git a/atdb/taskdatabase/models.py b/atdb/taskdatabase/models.py index e326280322f73daa0ef93dc3ab94bb1218594969..e97856d8bb96b319e00b3c4b013199c6c8849912 100644 --- a/atdb/taskdatabase/models.py +++ b/atdb/taskdatabase/models.py @@ -126,13 +126,22 @@ class PostProcessingRule(models.Model): workflow_to_process = models.ForeignKey(Workflow, related_name='to_process', on_delete=models.SET_NULL, null=True, blank=True) workflow_to_apply = models.ForeignKey(Workflow, related_name='to_apply',on_delete=models.SET_NULL, null=True, blank=True) + # the representation of the value in the REST API + def __str__(self): + return str(self.aggregation_key)+' - '+str(self.trigger_status) + + class Monitor(models.Model): name = models.CharField(max_length=50, default="unknown") type = models.CharField(max_length=20, default="ldv-service", null=True, blank=True) timestamp = models.DateTimeField(default=datetime.utcnow, blank=True) hostname = models.CharField(max_length=50, default="unknown") - process_id = models.IntegerField(null=True) + process_id = models.IntegerField(null=True, blank=True) description = models.CharField(max_length=255, blank=True, null=True) - status = models.CharField(max_length=50, default="defining", null=True) - metadata = models.JSONField(null=True, blank=True) \ No newline at end of file + status = models.CharField(max_length=50, default="ok", null=True) + metadata = models.JSONField(null=True, blank=True) + + # the representation of the value in the REST API + def __str__(self): + return str(self.name)+' - '+str(self.timestamp) + ' - ' + self.status diff --git a/atdb/taskdatabase/services/algorithms.py b/atdb/taskdatabase/services/algorithms.py index d1f5dc250c95db46bef0c6424055c41f68f3868c..daba1643e6aa1064045dec0ab4b8f5250a0a80d5 100644 --- a/atdb/taskdatabase/services/algorithms.py +++ b/atdb/taskdatabase/services/algorithms.py @@ -201,6 +201,30 @@ def convert_config_to_html(querylist): return results +def convert_monitor_to_html(monitor_data): + results = "" + try: + for record in monitor_data: + # iterate through the dict of key/values + key = record.name + value = record.status + filter = record.description + line = '<tr class="' + record.status + '" >' + line += "<td><b>" + str(record.name) + "</b></td>" + line += "<td>" + str(record.hostname) + "</td>" + line += "<td>" + str(record.status) + "</td>" + line += "<td>" + str(record.timestamp) + "</td>" + line += "<td>" + str(record.process_id) + "</td>" + line += "<td>" + str(record.description) + "</td>" + line += "</tr>" + + results = results + line + except: + results = "<tr><td>no data</td></tr>" + + return results + + # aggregate information from the tasks table per workflow per status def aggregate_resources_tasks(selection): workflow_results = [] diff --git a/atdb/taskdatabase/static/taskdatabase/style.css b/atdb/taskdatabase/static/taskdatabase/style.css index 4ab2414d0961470c36178438b9ff0adeeae20353..3b9a2cdd8e3d0050a07888175f669b9b195415c1 100644 --- a/atdb/taskdatabase/static/taskdatabase/style.css +++ b/atdb/taskdatabase/static/taskdatabase/style.css @@ -33,9 +33,6 @@ TD { background-color: lightgreen; } -.modal-content { - overflow: scroll !important; -} .error,.failed,.staging_failed,.processed_failed,.scrubbed_failed,.stored_failed,.archived_failed { color: red; @@ -52,8 +49,6 @@ TD { font-style: italic; } - - .processing,.processing_copying { font-weight: bold; background-color: lightyellow; @@ -118,5 +113,9 @@ p.title { } .modal-dialog .modal-lg { - max-width: 75% !important; + max-width: 75% !important; +} + +.modal-content { + overflow: scroll !important; } \ No newline at end of file diff --git a/atdb/taskdatabase/templates/taskdatabase/index.html b/atdb/taskdatabase/templates/taskdatabase/index.html index dfee958b2257e0a191aff2a60a406283dc8c7b2f..60a3fc269d5c27ed015917d77834a487e53f12cf 100644 --- a/atdb/taskdatabase/templates/taskdatabase/index.html +++ b/atdb/taskdatabase/templates/taskdatabase/index.html @@ -80,7 +80,7 @@ {% include 'taskdatabase/pagination.html' %} </div> </div> - <p class="footer"> Version 1.0.0 (27 jan 2021 - 15:00) + <p class="footer"> Version 1.0.0 (28 jan 2021 - 14:00) </div> diff --git a/atdb/taskdatabase/templates/taskdatabase/monitoring.html b/atdb/taskdatabase/templates/taskdatabase/monitoring.html index c2593e289a58c14747330a6b479632cb66be5b3e..cbe5c5d519cb79189e378f1f064917ae31651f77 100644 --- a/atdb/taskdatabase/templates/taskdatabase/monitoring.html +++ b/atdb/taskdatabase/templates/taskdatabase/monitoring.html @@ -5,20 +5,30 @@ <div class="hiking-container container-fluid"> <div class="col-sm-6 col-md-8 col-lg-12"> - + <div class="thumbnail"> - - <h5>These monitoring services live at SURF-SARA and will open a new browser window.</h5> + <h5>Health and Status of the LDV services.</h5> -<a href="https://jobsview.grid.surfsara.nl/grafana/d/i289WluZz/spider?orgId=1&from=now-6h&to=now-5m" - class="btn btn-info btn-lg" role="button" target="_blank"><img src="{% static 'taskdatabase/grafana_logo.jpg' %}" height="40" alt=""> Spider (Grafana)</a> + <table class="table table-striped"> + <th>LDV-Service</th><th>Host</th><th>Status</th><th>Timestamp</th><th>Working on</th><th>Description</th> + <tbody> + {{ monitor_results | safe }} + </tbody> + </table> + </div> + <hr> + <div class="thumbnail"> + <h5>External monitoring services live at SURF-SARA.</h5> + <a href="https://jobsview.grid.surfsara.nl/grafana/d/i289WluZz/spider?orgId=1&from=now-6h&to=now-5m" + class="btn btn-info btn-lg" role="button" target="_blank"><img src="{% static 'taskdatabase/grafana_logo.jpg' %}" height="40" alt=""> Spider (Grafana)</a> + <a href="https://ganglia.grid.surfsara.nl/dcache.php?vo=Lofar&r=day" + class="btn btn-info btn-lg" role="button" target="_blank"><img src="{% static 'taskdatabase/surfsara.jpg' %}" height="40" alt=""> dCache (Ganglia)</a> -<a href="https://ganglia.grid.surfsara.nl/dcache.php?vo=Lofar&r=day" - class="btn btn-info btn-lg" role="button" target="_blank"><img src="{% static 'taskdatabase/surfsara.jpg' %}" height="40" alt=""> dCache (Ganglia)</a> </div> </div> </div> +{% include 'taskdatabase/localstorage_scripts.html' %} {% endblock %} diff --git a/atdb/taskdatabase/urls.py b/atdb/taskdatabase/urls.py index df6c25f048cace4621a808efa6e70adec0b989d5..90ab5ae8e43cb03ba0351040d6016767627116fa 100644 --- a/atdb/taskdatabase/urls.py +++ b/atdb/taskdatabase/urls.py @@ -26,7 +26,8 @@ urlpatterns = [ path('query/', views.QueryView.as_view(), name='query'), # path('dashboard/', views.DashboardView.as_view(), name='dashboard'), - path('monitoring/', views.MonitoringView.as_view(), name='monitoring'), + # path('monitoring/', views.MonitoringView.as_view(), name='monitoring'), + path('monitoring/', views.ShowMonitoring, name='monitoring'), path('diagram/', views.DiagramView.as_view(), name='diagram'), path('config/', views.ShowConfig, name='config'), diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py index a3542fd6662d4a10495f919d8e2f5fa99c711be1..06961b43cb542096403ebd9642524076a4b34cbc 100644 --- a/atdb/taskdatabase/views.py +++ b/atdb/taskdatabase/views.py @@ -328,9 +328,14 @@ def WorkflowDetails(request, id): class MonitoringView(ListView): - model = Task + model = Monitor template_name = "taskdatabase/monitoring.html" +def ShowMonitoring(request): + monitor_data = Monitor.objects.all() + + monitor_results = algorithms.convert_monitor_to_html(monitor_data) + return render(request, "taskdatabase/monitoring.html", {'monitor_results': monitor_results}) class DiagramView(ListView): model = Task