From 64780cab506dfa91119882a0466d3d69ebb3e794 Mon Sep 17 00:00:00 2001 From: Bryan Hilbert Date: Mon, 2 Dec 2024 16:59:43 -0500 Subject: [PATCH 1/6] Update update_monitor_table to use django models --- jwql/utils/monitor_utils.py | 6 +++--- jwql/website/apps/jwql/monitor_models/common.py | 8 +++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/jwql/utils/monitor_utils.py b/jwql/utils/monitor_utils.py index 8eb4c8a16..75f7261fb 100644 --- a/jwql/utils/monitor_utils.py +++ b/jwql/utils/monitor_utils.py @@ -22,11 +22,11 @@ import numpy as np from django import setup -from jwql.database.database_interface import Monitor, engine from jwql.utils.constants import ASIC_TEMPLATES, JWST_DATAPRODUCTS, MAST_QUERY_LIMIT from jwql.utils.constants import ON_GITHUB_ACTIONS, ON_READTHEDOCS from jwql.utils.logging_functions import configure_logging, get_log_status from jwql.utils import mast_utils +from jwql.website.apps.jwql.monitor_models.common import Monitor # Increase the limit on the number of entries that can be returned by @@ -285,5 +285,5 @@ def update_monitor_table(module, start_time, log_file): new_entry['status'] = get_log_status(log_file) new_entry['log_file'] = os.path.basename(log_file) - with engine.begin() as connection: - connection.execute(Monitor.__table__.insert(), new_entry) + entry = Monitor(**new_entry) + entry.save() diff --git a/jwql/website/apps/jwql/monitor_models/common.py b/jwql/website/apps/jwql/monitor_models/common.py index ebcf7c82a..3469c14aa 100644 --- a/jwql/website/apps/jwql/monitor_models/common.py +++ b/jwql/website/apps/jwql/monitor_models/common.py @@ -178,11 +178,17 @@ class Meta: from django.contrib.postgres.fields import ArrayField +class StatusEnum(models.TextChoices): + SUCCESS = "SUCCESS" + FAILURE = "FAILURE" + + class Monitor(models.Model): monitor_name = models.CharField() start_time = models.DateTimeField() end_time = models.DateTimeField(blank=True, null=True) - status = models.TextField(blank=True, null=True) # This field type is a guess. + status = models.EnumField(StatusEnum) + #status = models.TextField(blank=True, null=True) # This field type is a guess. log_file = models.CharField() class Meta: From b299c0fb07a9ea288e31915ecd365c74c2f97f5a Mon Sep 17 00:00:00 2001 From: Bryan Hilbert Date: Mon, 2 Dec 2024 17:12:50 -0500 Subject: [PATCH 2/6] Remove old column definition --- jwql/website/apps/jwql/monitor_models/common.py | 1 - 1 file changed, 1 deletion(-) diff --git a/jwql/website/apps/jwql/monitor_models/common.py b/jwql/website/apps/jwql/monitor_models/common.py index 3469c14aa..18a514675 100644 --- a/jwql/website/apps/jwql/monitor_models/common.py +++ b/jwql/website/apps/jwql/monitor_models/common.py @@ -188,7 +188,6 @@ class Monitor(models.Model): start_time = models.DateTimeField() end_time = models.DateTimeField(blank=True, null=True) status = models.EnumField(StatusEnum) - #status = models.TextField(blank=True, null=True) # This field type is a guess. log_file = models.CharField() class Meta: From 4fd90257df0994f05287e1cb2c56c7801faf0861 Mon Sep 17 00:00:00 2001 From: Bryan Hilbert Date: Mon, 2 Dec 2024 17:19:57 -0500 Subject: [PATCH 3/6] Add enum-related imports --- jwql/website/apps/jwql/monitor_models/common.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/jwql/website/apps/jwql/monitor_models/common.py b/jwql/website/apps/jwql/monitor_models/common.py index 18a514675..f8c3aa0f8 100644 --- a/jwql/website/apps/jwql/monitor_models/common.py +++ b/jwql/website/apps/jwql/monitor_models/common.py @@ -176,9 +176,11 @@ class Meta: # Feel free to rename the models, but don't rename db_table values or field names. from django.db import models from django.contrib.postgres.fields import ArrayField +from django_enum import EnumField +from enum import StrEnum -class StatusEnum(models.TextChoices): +class StatusEnum(StrEnum): SUCCESS = "SUCCESS" FAILURE = "FAILURE" @@ -187,7 +189,7 @@ class Monitor(models.Model): monitor_name = models.CharField() start_time = models.DateTimeField() end_time = models.DateTimeField(blank=True, null=True) - status = models.EnumField(StatusEnum) + status = EnumField(StatusEnum) log_file = models.CharField() class Meta: From a47bc83756f70d929b7318eb50ad7aaed04bb75c Mon Sep 17 00:00:00 2001 From: Bryan Hilbert Date: Tue, 28 Jan 2025 12:11:52 -0500 Subject: [PATCH 4/6] status is already text. Remove enum --- jwql/utils/constants.py | 1 + .../apps/jwql/monitor_models/common.py | 21 +++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/jwql/utils/constants.py b/jwql/utils/constants.py index 07d0d72fd..ad33495b5 100644 --- a/jwql/utils/constants.py +++ b/jwql/utils/constants.py @@ -1042,6 +1042,7 @@ class QueryConfigKeys: MAX_LEN_GRATING = 40 MAX_LEN_INSTRUMENT = 7 MAX_LEN_MNEMONIC = 40 +MAX_LEN_MONITOR = 100 MAX_LEN_NGROUPS = 10 MAX_LEN_NINTS = 10 MAX_LEN_OBS = 3 diff --git a/jwql/website/apps/jwql/monitor_models/common.py b/jwql/website/apps/jwql/monitor_models/common.py index da2e1b936..bc66fd1b3 100644 --- a/jwql/website/apps/jwql/monitor_models/common.py +++ b/jwql/website/apps/jwql/monitor_models/common.py @@ -177,27 +177,30 @@ class Meta: # Feel free to rename the models, but don't rename db_table values or field names. from django.db import models from django.contrib.postgres.fields import ArrayField -from django_enum import EnumField -from enum import StrEnum - - -class StatusEnum(StrEnum): - SUCCESS = "SUCCESS" - FAILURE = "FAILURE" from jwql.utils.constants import ( DEFAULT_MODEL_CHARFIELD, MAX_LEN_FILTER, MAX_LEN_INSTRUMENT, + MAX_LEN_MONITOR, + MAX_LEN_PATH ) class Monitor(models.Model): - monitor_name = models.CharField() + monitor_name = models.CharField( + max_length=MAX_LEN_MONITOR, + help_text="Monitor name", + default=DEFAULT_MODEL_CHARFIELD + ) start_time = models.DateTimeField() end_time = models.DateTimeField(blank=True, null=True) status = models.TextField(blank=True, null=True) - log_file = models.CharField() + log_file = models.CharField( + max_length=MAX_LEN_PATH, + help_text="Log file name", + default=DEFAULT_MODEL_CHARFIELD + ) class Meta: managed = True From 3bf55c642e5528ff5c53b46874fb8ba08ad8dd37 Mon Sep 17 00:00:00 2001 From: Bryan Hilbert Date: Tue, 28 Jan 2025 12:19:57 -0500 Subject: [PATCH 5/6] Only import Monitor model if not on github or rtd --- jwql/utils/monitor_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jwql/utils/monitor_utils.py b/jwql/utils/monitor_utils.py index 75f7261fb..6847026e5 100644 --- a/jwql/utils/monitor_utils.py +++ b/jwql/utils/monitor_utils.py @@ -26,7 +26,6 @@ from jwql.utils.constants import ON_GITHUB_ACTIONS, ON_READTHEDOCS from jwql.utils.logging_functions import configure_logging, get_log_status from jwql.utils import mast_utils -from jwql.website.apps.jwql.monitor_models.common import Monitor # Increase the limit on the number of entries that can be returned by @@ -41,6 +40,7 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "jwql.website.jwql_proj.settings") setup() from jwql.website.apps.jwql.models import RootFileInfo + from jwql.website.apps.jwql.monitor_models.common import Monitor def exclude_asic_tuning(mast_results): From 21be3e865c048d48dc3c104599a6d5fa04b412dd Mon Sep 17 00:00:00 2001 From: Bryan Hilbert Date: Wed, 5 Feb 2025 10:50:35 -0500 Subject: [PATCH 6/6] Add migration file --- ...tor_log_file_alter_monitor_monitor_name.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 jwql/website/apps/jwql/migrations/0030_alter_monitor_log_file_alter_monitor_monitor_name.py diff --git a/jwql/website/apps/jwql/migrations/0030_alter_monitor_log_file_alter_monitor_monitor_name.py b/jwql/website/apps/jwql/migrations/0030_alter_monitor_log_file_alter_monitor_monitor_name.py new file mode 100644 index 000000000..11fa0d752 --- /dev/null +++ b/jwql/website/apps/jwql/migrations/0030_alter_monitor_log_file_alter_monitor_monitor_name.py @@ -0,0 +1,23 @@ +# Generated by Django 5.1.4 on 2025-02-05 15:31 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('jwql', '0029_wispfinderb4queryhistory'), + ] + + operations = [ + migrations.AlterField( + model_name='monitor', + name='log_file', + field=models.CharField(default='empty', help_text='Log file name', max_length=1000), + ), + migrations.AlterField( + model_name='monitor', + name='monitor_name', + field=models.CharField(default='empty', help_text='Monitor name', max_length=100), + ), + ]