From b31cce122a890fee8ff99b0abb36d0cbacb7fdb7 Mon Sep 17 00:00:00 2001 From: Auwate Date: Wed, 20 Mar 2024 15:05:24 -0400 Subject: [PATCH 01/49] Align with fork repo --- deploy/Dockerfile | 3 ++- deploy/docker-startup.sh | 1 + .../commands/create_initial_objects.py | 22 +++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 status/management/commands/create_initial_objects.py diff --git a/deploy/Dockerfile b/deploy/Dockerfile index 51f86073..60b902e4 100644 --- a/deploy/Dockerfile +++ b/deploy/Dockerfile @@ -6,7 +6,8 @@ RUN apt-get install -y python3-pip git nginx libmariadb-dev-compat WORKDIR /opt -RUN git clone https://github.com/amlight/Services-Status.git +# Production: https://github.com/amlight/Services-Status.git +RUN git clone https://github.com/Auwate/Services-Status.git WORKDIR /opt/Services-Status diff --git a/deploy/docker-startup.sh b/deploy/docker-startup.sh index 384f563a..4b7ac784 100755 --- a/deploy/docker-startup.sh +++ b/deploy/docker-startup.sh @@ -40,6 +40,7 @@ cd /opt/Services-Status sleep 30 python3 manage.py makemigrations python3 manage.py migrate +python3 manage.py create_initial_objects /etc/init.d/nginx start gunicorn --access-logfile - --workers 4 --user www-data --group www-data --bind 127.0.0.1:8800 --access-logformat '%(h)s/%({x-forwarded-for}i)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"' ServiceStatus.wsgi:application diff --git a/status/management/commands/create_initial_objects.py b/status/management/commands/create_initial_objects.py new file mode 100644 index 00000000..c5994c41 --- /dev/null +++ b/status/management/commands/create_initial_objects.py @@ -0,0 +1,22 @@ +from django.core.management.base import BaseCommand +from status.models import Status + +class Command(BaseCommand): + + help = 'Creates the initial objects required to start the service-status application' + + def handle(self, *args, **options): + + if Status.objects.count() > 0: + return + + initial_objects = [ + {"tag":"Alert", "color_name": "Orange", "color_hex":"#FC810D", "class_design": "fas fa-exclamation-circle"}, + {"tag":"In Process", "color_name": "Yellow", "color_hex":"#DBBF07", "class_design": "fas fa-tools"}, + {"tag":"No Issues", "color_name": "Green", "color_hex":"#0AC739", "class_design": "fas fa-check-circle"}, + {"tag":"Outage", "color_name": "Red", "color_hex":"#F00004", "class_design": "fas fa-times-circle"}, + {"tag":"Planned", "color_name": "Blue", "color_hex":"#041DBF", "class_design": "far fa-calendar-alt"} + ] + + for data_objects in initial_objects: + Status.objects.create(**data_objects) From 74d43d8de7ded4c7d02424cf625a3c3e095c4a6d Mon Sep 17 00:00:00 2001 From: Auwate Date: Wed, 20 Mar 2024 16:08:49 -0400 Subject: [PATCH 02/49] Updated settings-dev.py to turn HTTPS off (FOR PRODUCTION) --- ServiceStatus/settings-dev.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ServiceStatus/settings-dev.py b/ServiceStatus/settings-dev.py index 2f4e4128..2c8bf1e7 100644 --- a/ServiceStatus/settings-dev.py +++ b/ServiceStatus/settings-dev.py @@ -163,6 +163,7 @@ EMAIL_HOST_PASSWORD = 'XXXSMTPPASSXXX' EMAIL_PORT = 587 -SESSION_COOKIE_SECURE = True +# TURNED ON FOR DEVELOPMENT. TURN OFF FOR PRODUCTION. +SESSION_COOKIE_SECURE = False CSRF_COOKIE_HTTPONLY = True \ No newline at end of file From 74baa0fe8671762142e2fecabdc0d9ebea2e4701 Mon Sep 17 00:00:00 2001 From: Auwate Date: Mon, 25 Mar 2024 10:48:20 -0400 Subject: [PATCH 03/49] Changes: Added UTC-5 | North America/New York to template --- status/models.py | 3 +++ status/templates/services_status.html | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/status/models.py b/status/models.py index 537bf652..b9ba762c 100644 --- a/status/models.py +++ b/status/models.py @@ -290,6 +290,9 @@ class Ticket(models.Model): null=True, default=3, verbose_name='Status') begin = models.DateTimeField() end = models.DateTimeField(null=True, blank=True) + + # UTC-5 is standard for Miami, but drop-down with list is appropriate + action_description = RichTextField() action_notes = RichTextField(blank=True, null=True) diff --git a/status/templates/services_status.html b/status/templates/services_status.html index 840bda54..599f33f2 100644 --- a/status/templates/services_status.html +++ b/status/templates/services_status.html @@ -36,7 +36,7 @@

Recent Events

Status: {{ ticket.status.tag }}

{% if ticket.status.tag == "Planned" %} -

Action Date: {{ ticket.begin }}

+

Action Date: {{ ticket.begin }} UTC-5 | North America/New York

{% if ticket.end|localtime|timesince >= "1 min" %}

Current Status Information: Completed

From 686f960eee43687ce8951f6f99bb046e33631cb4 Mon Sep 17 00:00:00 2001 From: Auwate Date: Mon, 25 Mar 2024 10:57:22 -0400 Subject: [PATCH 04/49] PRODUCTION CHANGE: COMMENTED OUT LOGGING DRIVER --- deploy/docker-compose.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index 7f737702..79e6212c 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -37,7 +37,7 @@ services: SSA_SMTPPASS: "changeme" ports: - 8000:80 - logging: - driver: syslog - options: - syslog-address: "udp://yoursyslogserver.intranet.domain.tld:514" + #logging: + #driver: syslog + #options: + #syslog-address: "udp://yoursyslogserver.intranet.domain.tld:514" From e46544d4d5987398ec9fc6f3460a1144e8dd7d5c Mon Sep 17 00:00:00 2001 From: Auwate Date: Mon, 25 Mar 2024 11:00:39 -0400 Subject: [PATCH 05/49] ADDED README AND DEV_TIPS --- DEV_TIPS.md | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 21 ++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 DEV_TIPS.md create mode 100644 README.md diff --git a/DEV_TIPS.md b/DEV_TIPS.md new file mode 100644 index 00000000..a27700ce --- /dev/null +++ b/DEV_TIPS.md @@ -0,0 +1,64 @@ +# Reading Markdown Files + +To read Markdown files (.md) in VS Code, press Ctrl+Shift+V for Markdown preview. + +# Required Prerequisites + +- Python +- HTML/CSS +- Django +- Docker +- SQL +- Linux/Unix + +# Django + +Documentation can be found at https://docs.djangoproject.com/en/3.0/ + +## Testing + +In case of errors, turn on debug in settings-dev.py or by using the following command: +``` +sed -i "s/DEBUG = False/DEBUG = True/g" /opt/Services-Status/ServiceStatus/settings.py +``` + +## HTTPS to HTTP + +Django uses HTTP in testing environments, so make sure to turn SESSION_COOKIE_SECURE to False. You can do that in settings-dev.py, or by using the following command: +``` +sed -i "s/SESSION_COOKIE_SECURE = True/SESSION_COOKIE_SECURE = False/g" /opt/Services-Status/ServiceStatus/settings.py +``` + +# Unix/Linux Environment + +The application is built for Unix/Linux development, so locally developing the application on other operating systems is **not** recommended. Ask a network engineer or your lead developer to help give you access to the remote server being used to test. + +Unix/Linux documentation can be found at https://docs.kernel.org/, or by searching up common commands used. + +# Docker + +Documentation can be found at https://docs.docker.com/ + +This application uses docker-compose to build and run, so before using any commands you must be in the deploy folder. + +## Common Docker commands +``` +docker-compose build +``` +This will run the build script, pulling the data from the 3 Docker files found in the folder. +``` +docker-compose up +``` +This will run the docker container in your terminal. +``` +docker-compose up -d +``` +This will run the docker container in the background. This is especially useful if you want to debug or enter into the shell. +``` +docker-compose kill +``` +This will terminate the running container so you do not consume excess resources. This is especially important if you run **docker-compose up -d** or if you run docker-compose up and disconnect from the terminal. +``` +docker exec -it /bin/bash +``` +This will connect you into the container's bash terminal. diff --git a/README.md b/README.md new file mode 100644 index 00000000..524366ae --- /dev/null +++ b/README.md @@ -0,0 +1,21 @@ +# Services-Status + +The Services-Status repository is used to power the status page used by network engineers at CIARA (https://status.amlight.net/) It uses Django + jQuery to run the web server, supplying templates based on what view you are currently in. + +For documentation, on tech used and useful tips, check DEV_TIPS.md + +## Recent Changes + +### Testing + +- For quicker development and testing, the logging driver was commented out from docker-compose.yml. When pushing to production remember to uncomment this. + +## Deployment Methodology + +The Service Status application uses Docker to gather its dependencies and deploy onto a remote server. It uses a .yml script to build, so this application uses docker-compose. + +To **test**, make sure to turn Debug = True and SESSION_COOKIE_COOKIE = False. You can find more information on how to do this in the DEV_TIPS.md file. + +## Unix (remote environment) + +The services-status application was created to run on a Unix environment, which is the environment used by the remote server. Currently, development is taking place on a virtual machine, so ask the networking team to help you gain access to the current VM the developers are using, or to create your own. From 037ea759ef6f3c31f5bab26d86518242325798e5 Mon Sep 17 00:00:00 2001 From: Auwate Date: Mon, 25 Mar 2024 11:21:55 -0400 Subject: [PATCH 06/49] CHANGES: Dockerfile clone location changed to development. --- deploy/Dockerfile | 2 +- status/templates/services_status.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/Dockerfile b/deploy/Dockerfile index 60b902e4..c63f2645 100644 --- a/deploy/Dockerfile +++ b/deploy/Dockerfile @@ -7,7 +7,7 @@ RUN apt-get install -y python3-pip git nginx libmariadb-dev-compat WORKDIR /opt # Production: https://github.com/amlight/Services-Status.git -RUN git clone https://github.com/Auwate/Services-Status.git +RUN git clone --branch development https://github.com/Auwate/Services-Status.git WORKDIR /opt/Services-Status diff --git a/status/templates/services_status.html b/status/templates/services_status.html index 599f33f2..4e683498 100644 --- a/status/templates/services_status.html +++ b/status/templates/services_status.html @@ -36,7 +36,7 @@

Recent Events

Status: {{ ticket.status.tag }}

{% if ticket.status.tag == "Planned" %} -

Action Date: {{ ticket.begin }} UTC-5 | North America/New York

+

Action Date: {{ ticket.begin }} UTC-5 | North America/Miami

{% if ticket.end|localtime|timesince >= "1 min" %}

Current Status Information: Completed

From 88e1f2f598eb5150890984b731a06563c43e7206 Mon Sep 17 00:00:00 2001 From: Auwate Date: Mon, 25 Mar 2024 13:16:09 -0400 Subject: [PATCH 07/49] CHANGES: Testing new ordering based on when the Ticket began, rather than when it ended. --- status/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/status/admin.py b/status/admin.py index d53e6060..8a4cbdab 100644 --- a/status/admin.py +++ b/status/admin.py @@ -143,7 +143,7 @@ class TicketAdmin(admin.ModelAdmin): DropdownFilter), ('sub_service', RelatedDropdownFilter)) - ordering = ['end'] + ordering = ['begin'] actions = [notify_users] From 5963ceabffd603e7b9865de32c7b0601e674bbfb Mon Sep 17 00:00:00 2001 From: Auwate Date: Mon, 25 Mar 2024 13:30:53 -0400 Subject: [PATCH 08/49] Changes: Working on ordering. --- status/admin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/status/admin.py b/status/admin.py index 8a4cbdab..3d7aa56a 100644 --- a/status/admin.py +++ b/status/admin.py @@ -143,7 +143,7 @@ class TicketAdmin(admin.ModelAdmin): DropdownFilter), ('sub_service', RelatedDropdownFilter)) - ordering = ['begin'] + ordering = ['-begin'] actions = [notify_users] From 3ddb08dd65164a8eb719dc8d53afb6040799fd5d Mon Sep 17 00:00:00 2001 From: Auwate Date: Mon, 25 Mar 2024 16:09:38 -0400 Subject: [PATCH 09/49] Changes: - UTC & Ordering --- status/admin.py | 2 +- status/models.py | 30 +++++++++++++++++++++++++++ status/templates/services_status.html | 2 +- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/status/admin.py b/status/admin.py index 3d7aa56a..cd32304f 100644 --- a/status/admin.py +++ b/status/admin.py @@ -121,7 +121,7 @@ class TicketAdmin(admin.ModelAdmin): fieldsets = [ ('Sub-Service on process', {'fields': ['ticket_id', 'client_domains', 'services', 'sub_service', 'status']}), - ('Date information', {'fields': ['begin', 'end']}), + ('Date information', {'fields': ['begin', 'end', 'ticket_utc']}), ('Additional Information', {'fields': ['action_description', 'action_notes']}), (None, {'fields': ['notify_action']}), ] diff --git a/status/models.py b/status/models.py index b9ba762c..ad6a89f1 100644 --- a/status/models.py +++ b/status/models.py @@ -274,6 +274,35 @@ class Ticket(models.Model): (YES, 'Yes') ) + # New addition, allows developers to choose what time-zone they want printed + UTC_CHOICES = ( + ('UTC+00:00', 'UTC+00:00'), + ('UTC+01:00', 'UTC+01:00'), + ('UTC+02:00', 'UTC+02:00'), + ('UTC+03:00', 'UTC+03:00'), + ('UTC+04:00', 'UTC+04:00'), + ('UTC+05:00', 'UTC+05:00'), + ('UTC+06:00', 'UTC+06:00'), + ('UTC+07:00', 'UTC+07:00'), + ('UTC+08:00', 'UTC+08:00'), + ('UTC+09:00', 'UTC+09:00'), + ('UTC+10:00', 'UTC+10:00'), + ('UTC+11:00', 'UTC+11:00'), + ('UTC+12:00', 'UTC+12:00'), + ('UTC-01:00', 'UTC-01:00'), + ('UTC-02:00', 'UTC-02:00'), + ('UTC-03:00', 'UTC-03:00'), + ('UTC-04:00', 'UTC-04:00'), + ('UTC-05:00', 'UTC-05:00'), # Miami | New York + ('UTC-06:00', 'UTC-06:00'), + ('UTC-07:00', 'UTC-07:00'), + ('UTC-08:00', 'UTC-08:00'), + ('UTC-09:00', 'UTC-09:00'), + ('UTC-10:00', 'UTC-10:00'), + ('UTC-11:00', 'UTC-11:00'), + ('UTC-12:00', 'UTC-12:00'), + ) + ticket_id = models.CharField(unique=True, max_length=10, default=get_new_ticket_id) # sub-service to sub-services @@ -290,6 +319,7 @@ class Ticket(models.Model): null=True, default=3, verbose_name='Status') begin = models.DateTimeField() end = models.DateTimeField(null=True, blank=True) + ticket_utc = models.CharField(choices=UTC_CHOICES, default='UTC-05:00') # UTC-5 is standard for Miami, but drop-down with list is appropriate diff --git a/status/templates/services_status.html b/status/templates/services_status.html index 4e683498..cb934cd5 100644 --- a/status/templates/services_status.html +++ b/status/templates/services_status.html @@ -36,7 +36,7 @@

Recent Events

Status: {{ ticket.status.tag }}

{% if ticket.status.tag == "Planned" %} -

Action Date: {{ ticket.begin }} UTC-5 | North America/Miami

+

Action Date: {{ ticket.begin }} | {{ticket.ticket_utc}}

{% if ticket.end|localtime|timesince >= "1 min" %}

Current Status Information: Completed

From 672f003c9b451b30d7d8f2fd0894e6109ecaed89 Mon Sep 17 00:00:00 2001 From: Auwate Date: Mon, 25 Mar 2024 16:26:20 -0400 Subject: [PATCH 10/49] Development --- status/templates/services_status.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/status/templates/services_status.html b/status/templates/services_status.html index cb934cd5..ce096033 100644 --- a/status/templates/services_status.html +++ b/status/templates/services_status.html @@ -36,7 +36,7 @@

Recent Events

Status: {{ ticket.status.tag }}

{% if ticket.status.tag == "Planned" %} -

Action Date: {{ ticket.begin }} | {{ticket.ticket_utc}}

+

Action Date: {{ ticket.begin }}{% if 'ticket_utc' in ticket %} | {{ticket.ticket_utc}} {% endif %}

{% if ticket.end|localtime|timesince >= "1 min" %}

Current Status Information: Completed

From 3adddb871391e4a0d3e854aff98870300fae9059 Mon Sep 17 00:00:00 2001 From: Auwate Date: Mon, 25 Mar 2024 16:33:32 -0400 Subject: [PATCH 11/49] - --- status/templates/services_status.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/status/templates/services_status.html b/status/templates/services_status.html index ce096033..840bda54 100644 --- a/status/templates/services_status.html +++ b/status/templates/services_status.html @@ -36,7 +36,7 @@

Recent Events

Status: {{ ticket.status.tag }}

{% if ticket.status.tag == "Planned" %} -

Action Date: {{ ticket.begin }}{% if 'ticket_utc' in ticket %} | {{ticket.ticket_utc}} {% endif %}

+

Action Date: {{ ticket.begin }}

{% if ticket.end|localtime|timesince >= "1 min" %}

Current Status Information: Completed

From 214a4b1010d5776e7372092b01acd56c5447c409 Mon Sep 17 00:00:00 2001 From: Auwate Date: Mon, 25 Mar 2024 16:45:07 -0400 Subject: [PATCH 12/49] - --- status/models.py | 2 +- status/templates/services_status.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/status/models.py b/status/models.py index ad6a89f1..d7edbeda 100644 --- a/status/models.py +++ b/status/models.py @@ -319,7 +319,7 @@ class Ticket(models.Model): null=True, default=3, verbose_name='Status') begin = models.DateTimeField() end = models.DateTimeField(null=True, blank=True) - ticket_utc = models.CharField(choices=UTC_CHOICES, default='UTC-05:00') + ticket_utc = models.CharField(choices=UTC_CHOICES, max_length=10, default='UTC-05:00') # UTC-5 is standard for Miami, but drop-down with list is appropriate diff --git a/status/templates/services_status.html b/status/templates/services_status.html index 840bda54..ce096033 100644 --- a/status/templates/services_status.html +++ b/status/templates/services_status.html @@ -36,7 +36,7 @@

Recent Events

Status: {{ ticket.status.tag }}

{% if ticket.status.tag == "Planned" %} -

Action Date: {{ ticket.begin }}

+

Action Date: {{ ticket.begin }}{% if 'ticket_utc' in ticket %} | {{ticket.ticket_utc}} {% endif %}

{% if ticket.end|localtime|timesince >= "1 min" %}

Current Status Information: Completed

From 10e7062feeca7450613a6f79b1715bb2ee19333c Mon Sep 17 00:00:00 2001 From: Auwate Date: Tue, 26 Mar 2024 10:50:30 -0400 Subject: [PATCH 13/49] Changes: 1: Edited template HTML to include UTC-05:00 2: Editing admin.py to order Tickets by recency, rather than when it ended. 3: Added labels to forms.py --- status/admin.py | 2 +- status/forms.py | 4 ++++ status/templates/services_status.html | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/status/admin.py b/status/admin.py index d53e6060..3d7aa56a 100644 --- a/status/admin.py +++ b/status/admin.py @@ -143,7 +143,7 @@ class TicketAdmin(admin.ModelAdmin): DropdownFilter), ('sub_service', RelatedDropdownFilter)) - ordering = ['end'] + ordering = ['-begin'] actions = [notify_users] diff --git a/status/forms.py b/status/forms.py index e9df6b72..b346f8d3 100644 --- a/status/forms.py +++ b/status/forms.py @@ -257,6 +257,10 @@ class TicketForm(forms.ModelForm): class Meta: model = Ticket fields = '__all__' + labels = { + 'begin' : "UTC-05:00", + 'end' : "UTC-05:00", + } def __init__(self, *args, **kwargs): diff --git a/status/templates/services_status.html b/status/templates/services_status.html index 4e683498..50578b17 100644 --- a/status/templates/services_status.html +++ b/status/templates/services_status.html @@ -36,7 +36,7 @@

Recent Events

Status: {{ ticket.status.tag }}

{% if ticket.status.tag == "Planned" %} -

Action Date: {{ ticket.begin }} UTC-5 | North America/Miami

+

Action Date: {{ ticket.begin }} UTC-05:00

{% if ticket.end|localtime|timesince >= "1 min" %}

Current Status Information: Completed

From 8b3e69afd9c30497b9f49c9d1ce55fe2767d9c06 Mon Sep 17 00:00:00 2001 From: Auwate Date: Tue, 26 Mar 2024 11:00:22 -0400 Subject: [PATCH 14/49] Removed UTC fields from admin.py and models.py --- status/admin.py | 2 +- status/models.py | 32 +------------------------------- 2 files changed, 2 insertions(+), 32 deletions(-) diff --git a/status/admin.py b/status/admin.py index cd32304f..3d7aa56a 100644 --- a/status/admin.py +++ b/status/admin.py @@ -121,7 +121,7 @@ class TicketAdmin(admin.ModelAdmin): fieldsets = [ ('Sub-Service on process', {'fields': ['ticket_id', 'client_domains', 'services', 'sub_service', 'status']}), - ('Date information', {'fields': ['begin', 'end', 'ticket_utc']}), + ('Date information', {'fields': ['begin', 'end']}), ('Additional Information', {'fields': ['action_description', 'action_notes']}), (None, {'fields': ['notify_action']}), ] diff --git a/status/models.py b/status/models.py index d7edbeda..5be93de3 100644 --- a/status/models.py +++ b/status/models.py @@ -274,35 +274,6 @@ class Ticket(models.Model): (YES, 'Yes') ) - # New addition, allows developers to choose what time-zone they want printed - UTC_CHOICES = ( - ('UTC+00:00', 'UTC+00:00'), - ('UTC+01:00', 'UTC+01:00'), - ('UTC+02:00', 'UTC+02:00'), - ('UTC+03:00', 'UTC+03:00'), - ('UTC+04:00', 'UTC+04:00'), - ('UTC+05:00', 'UTC+05:00'), - ('UTC+06:00', 'UTC+06:00'), - ('UTC+07:00', 'UTC+07:00'), - ('UTC+08:00', 'UTC+08:00'), - ('UTC+09:00', 'UTC+09:00'), - ('UTC+10:00', 'UTC+10:00'), - ('UTC+11:00', 'UTC+11:00'), - ('UTC+12:00', 'UTC+12:00'), - ('UTC-01:00', 'UTC-01:00'), - ('UTC-02:00', 'UTC-02:00'), - ('UTC-03:00', 'UTC-03:00'), - ('UTC-04:00', 'UTC-04:00'), - ('UTC-05:00', 'UTC-05:00'), # Miami | New York - ('UTC-06:00', 'UTC-06:00'), - ('UTC-07:00', 'UTC-07:00'), - ('UTC-08:00', 'UTC-08:00'), - ('UTC-09:00', 'UTC-09:00'), - ('UTC-10:00', 'UTC-10:00'), - ('UTC-11:00', 'UTC-11:00'), - ('UTC-12:00', 'UTC-12:00'), - ) - ticket_id = models.CharField(unique=True, max_length=10, default=get_new_ticket_id) # sub-service to sub-services @@ -319,8 +290,7 @@ class Ticket(models.Model): null=True, default=3, verbose_name='Status') begin = models.DateTimeField() end = models.DateTimeField(null=True, blank=True) - ticket_utc = models.CharField(choices=UTC_CHOICES, max_length=10, default='UTC-05:00') - + # UTC-5 is standard for Miami, but drop-down with list is appropriate action_description = RichTextField() From b4bbfa2513bce48e6583356dae671da621a024af Mon Sep 17 00:00:00 2001 From: Auwate Date: Wed, 27 Mar 2024 10:54:40 -0400 Subject: [PATCH 15/49] CHANGES - Sorting | Added action_notes --- status/templates/services_status.html | 3 ++- status/views.py | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/status/templates/services_status.html b/status/templates/services_status.html index 50578b17..21f45b51 100644 --- a/status/templates/services_status.html +++ b/status/templates/services_status.html @@ -17,7 +17,7 @@

Recent Events

{#Describe this "for" statement functionality#} - {% for ticket in ticket_list %} + {% for ticket in ticket_list %}
@@ -53,6 +53,7 @@

Recent Events

{{ ticket.action_description | safe }}

+

Latest Update: {{ticket.action_notes}}

diff --git a/status/views.py b/status/views.py index c819f86a..340335e8 100644 --- a/status/views.py +++ b/status/views.py @@ -98,6 +98,7 @@ def get(self, request, *args, **kwargs): .filter(action_date__range=["2012-01-01", timezone.now()]).order_by('action_date').last() if last_log is not None: ticket.latest_log = last_log.status + ticket.action_notes = last_log.action_notes else: ticket.latest_log = ticket.status From e2d7f613bd403af126ba77dbe40480d3bda85718 Mon Sep 17 00:00:00 2001 From: Auwate Date: Wed, 27 Mar 2024 11:08:14 -0400 Subject: [PATCH 16/49] CHANGES: Edit: models.py, views.py Added a description function to TicketLog. This function simply checks if action_notes exists, and if it does it formats it from HTML. --- status/models.py | 4 ++++ status/views.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/status/models.py b/status/models.py index 5be93de3..0ad86692 100644 --- a/status/models.py +++ b/status/models.py @@ -339,6 +339,10 @@ class TicketLog(models.Model): action_date = models.DateTimeField() action_notes = RichTextField(blank=True, null=True, verbose_name='Notes') + def description (self): + if self.action_notes is not None: + return format_html(self.action_notes) + def __str__(self): queryset_list = [] for sub_service in self.ticket.sub_service.all(): diff --git a/status/views.py b/status/views.py index 340335e8..36fae03d 100644 --- a/status/views.py +++ b/status/views.py @@ -97,7 +97,7 @@ def get(self, request, *args, **kwargs): last_log = TicketLog.objects.filter(ticket=ticket.id) \ .filter(action_date__range=["2012-01-01", timezone.now()]).order_by('action_date').last() if last_log is not None: - ticket.latest_log = last_log.status + ticket.latest_log = TicketLog.description() ticket.action_notes = last_log.action_notes else: ticket.latest_log = ticket.status From ef84c019d29e02e0b90ff0926b42671b7464d70b Mon Sep 17 00:00:00 2001 From: Auwate Date: Wed, 27 Mar 2024 11:15:46 -0400 Subject: [PATCH 17/49] CHANGES: - Edit: Changed TicketLog.description() to last_log.description() --- status/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/status/views.py b/status/views.py index 36fae03d..ee248c7c 100644 --- a/status/views.py +++ b/status/views.py @@ -97,7 +97,7 @@ def get(self, request, *args, **kwargs): last_log = TicketLog.objects.filter(ticket=ticket.id) \ .filter(action_date__range=["2012-01-01", timezone.now()]).order_by('action_date').last() if last_log is not None: - ticket.latest_log = TicketLog.description() + ticket.latest_log = last_log.description() ticket.action_notes = last_log.action_notes else: ticket.latest_log = ticket.status From 03c48396717a31922e3c693118ec368bbe1152cf Mon Sep 17 00:00:00 2001 From: Auwate Date: Wed, 27 Mar 2024 11:38:01 -0400 Subject: [PATCH 18/49] CHANGES: Edit: added description.allow_tags = True. --- status/models.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/status/models.py b/status/models.py index 0ad86692..2749ff92 100644 --- a/status/models.py +++ b/status/models.py @@ -342,6 +342,9 @@ class TicketLog(models.Model): def description (self): if self.action_notes is not None: return format_html(self.action_notes) + return self.action_notes + + description.allow_tags = True def __str__(self): queryset_list = [] From f71c667f91ee25c54cc6066f4c1b0c1fa9c6ae3f Mon Sep 17 00:00:00 2001 From: Auwate Date: Wed, 27 Mar 2024 11:47:15 -0400 Subject: [PATCH 19/49] Minor Change --- status/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/status/views.py b/status/views.py index ee248c7c..a0786d40 100644 --- a/status/views.py +++ b/status/views.py @@ -97,8 +97,8 @@ def get(self, request, *args, **kwargs): last_log = TicketLog.objects.filter(ticket=ticket.id) \ .filter(action_date__range=["2012-01-01", timezone.now()]).order_by('action_date').last() if last_log is not None: - ticket.latest_log = last_log.description() - ticket.action_notes = last_log.action_notes + ticket.latest_log = last_log.status + ticket.action_notes = last_log.description() else: ticket.latest_log = ticket.status From c9c6f46a422173b007e6916f3917a5908a042d92 Mon Sep 17 00:00:00 2001 From: Auwate Date: Wed, 27 Mar 2024 11:54:16 -0400 Subject: [PATCH 20/49] Minor changes --- status/templates/services_status.html | 6 +++++- status/views.py | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/status/templates/services_status.html b/status/templates/services_status.html index 21f45b51..a35cb58b 100644 --- a/status/templates/services_status.html +++ b/status/templates/services_status.html @@ -53,7 +53,11 @@

Recent Events

{{ ticket.action_description | safe }}

-

Latest Update: {{ticket.action_notes}}

+ + {% if ticket.latest_action_notes %} +

Latest Update: {{ticket.latest_action_notes}}

+ {% endif %} + diff --git a/status/views.py b/status/views.py index a0786d40..6538e2bf 100644 --- a/status/views.py +++ b/status/views.py @@ -98,7 +98,7 @@ def get(self, request, *args, **kwargs): .filter(action_date__range=["2012-01-01", timezone.now()]).order_by('action_date').last() if last_log is not None: ticket.latest_log = last_log.status - ticket.action_notes = last_log.description() + ticket.latest_action_notes = last_log.description() else: ticket.latest_log = ticket.status From 7d8189539c0bfe65d0b4c26a1fece2f1ac29626a Mon Sep 17 00:00:00 2001 From: Auwate Date: Wed, 27 Mar 2024 12:10:51 -0400 Subject: [PATCH 21/49] Added functionality: Latest Update now has a time associated with it. --- status/templates/services_status.html | 2 +- status/views.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/status/templates/services_status.html b/status/templates/services_status.html index a35cb58b..70ee1be8 100644 --- a/status/templates/services_status.html +++ b/status/templates/services_status.html @@ -55,7 +55,7 @@

Recent Events

{% if ticket.latest_action_notes %} -

Latest Update: {{ticket.latest_action_notes}}

+

Latest Update: {{ticket.latest_action_date}} | UTC-05:00 | {{ticket.latest_action_notes}}

{% endif %} diff --git a/status/views.py b/status/views.py index 6538e2bf..a688422d 100644 --- a/status/views.py +++ b/status/views.py @@ -99,6 +99,7 @@ def get(self, request, *args, **kwargs): if last_log is not None: ticket.latest_log = last_log.status ticket.latest_action_notes = last_log.description() + ticket.latest_action_date = last_log.action_date else: ticket.latest_log = ticket.status From 4d52c6b0a88d2e0ce0c0f23b0c5d4a3b7c9e6cd3 Mon Sep 17 00:00:00 2001 From: Auwate Date: Wed, 27 Mar 2024 12:19:26 -0400 Subject: [PATCH 22/49] Minor change --- status/templates/services_status.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/status/templates/services_status.html b/status/templates/services_status.html index 70ee1be8..836eb2c2 100644 --- a/status/templates/services_status.html +++ b/status/templates/services_status.html @@ -55,7 +55,7 @@

Recent Events

{% if ticket.latest_action_notes %} -

Latest Update: {{ticket.latest_action_date}} | UTC-05:00 | {{ticket.latest_action_notes}}

+

Latest Update: {{ticket.latest_action_date}} | UTC-05:00 {{ticket.latest_action_notes}}

{% endif %} From e66c374ebe14962db706244c8b0337479587422a Mon Sep 17 00:00:00 2001 From: Auwate Date: Wed, 27 Mar 2024 12:27:13 -0400 Subject: [PATCH 23/49] Edited labels to show what each mean. --- status/forms.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/status/forms.py b/status/forms.py index b346f8d3..f5844084 100644 --- a/status/forms.py +++ b/status/forms.py @@ -258,8 +258,8 @@ class Meta: model = Ticket fields = '__all__' labels = { - 'begin' : "UTC-05:00", - 'end' : "UTC-05:00", + 'begin' : "Begin - Use UTC-05:00", + 'end' : "End - Use UTC-05:00", } def __init__(self, *args, **kwargs): From 68799b3e6fb3bbcb70a1fa5088b795f720359e61 Mon Sep 17 00:00:00 2001 From: Auwate Date: Wed, 27 Mar 2024 12:55:40 -0400 Subject: [PATCH 24/49] CHANGE Changed footer CSS from relative to fixed. --- status/static/css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/status/static/css/style.css b/status/static/css/style.css index bad24a31..156d36be 100644 --- a/status/static/css/style.css +++ b/status/static/css/style.css @@ -94,7 +94,7 @@ html, body { text-align: center; color: white; bottom: 0; - position: relative; + position: fixed; } #region_select_buttons { From 4e9a3856eedcb6c07f674495ea42b6ee44c268cb Mon Sep 17 00:00:00 2001 From: Auwate Date: Wed, 27 Mar 2024 13:19:41 -0400 Subject: [PATCH 25/49] MAJOR CHANGE: ADDED CLASS TO DIV ON LINE 209. ADDED CSS PROPERTIES TO .row --- status/static/css/style.css | 11 ++++++++++- status/templates/services_status.html | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/status/static/css/style.css b/status/static/css/style.css index 156d36be..5db64663 100644 --- a/status/static/css/style.css +++ b/status/static/css/style.css @@ -130,11 +130,20 @@ a:hover { border: none; } -#search .row { +#search { border: 1px solid #ced4da; border-radius: .25rem; } +.row { + border: 1px solid #ced4da; + border-radius: .25rem; +} + +.row:hover { + background-color: rgb(221, 221, 221); +} + #modify_subscription { height: 38rem; } diff --git a/status/templates/services_status.html b/status/templates/services_status.html index 836eb2c2..b8861feb 100644 --- a/status/templates/services_status.html +++ b/status/templates/services_status.html @@ -206,7 +206,7 @@

Recent Events

{#Describe this "for" statement functionality#} {% for service in services_list %} -
+

{{ service }}

From 02ec4fe28b5776693a5484f058cf3e6f78c95323 Mon Sep 17 00:00:00 2001 From: Auwate Date: Wed, 27 Mar 2024 13:30:29 -0400 Subject: [PATCH 26/49] Updates to background color --- status/static/css/style.css | 12 ++++-------- status/templates/services_status.html | 2 +- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/status/static/css/style.css b/status/static/css/style.css index 5db64663..0e2321e8 100644 --- a/status/static/css/style.css +++ b/status/static/css/style.css @@ -130,18 +130,14 @@ a:hover { border: none; } -#search { +#search .row { border: 1px solid #ced4da; border-radius: .25rem; } -.row { - border: 1px solid #ced4da; - border-radius: .25rem; -} - -.row:hover { - background-color: rgb(221, 221, 221); +.responsive_hover:hover { + background-color: rgb(222, 222, 222); + transition: background-color 0.1s ease; } #modify_subscription { diff --git a/status/templates/services_status.html b/status/templates/services_status.html index b8861feb..f799da8c 100644 --- a/status/templates/services_status.html +++ b/status/templates/services_status.html @@ -206,7 +206,7 @@

Recent Events

{#Describe this "for" statement functionality#} {% for service in services_list %} -
+

{{ service }}

From 67e6e94e545f8f038b88a9056d7b0f98c2c5e411 Mon Sep 17 00:00:00 2001 From: Auwate Date: Mon, 1 Apr 2024 10:56:13 -0400 Subject: [PATCH 27/49] Removing temporary development to start merging into production. --- status/static/css/style.css | 7 +------ status/templates/services_status.html | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/status/static/css/style.css b/status/static/css/style.css index 0e2321e8..bad24a31 100644 --- a/status/static/css/style.css +++ b/status/static/css/style.css @@ -94,7 +94,7 @@ html, body { text-align: center; color: white; bottom: 0; - position: fixed; + position: relative; } #region_select_buttons { @@ -135,11 +135,6 @@ a:hover { border-radius: .25rem; } -.responsive_hover:hover { - background-color: rgb(222, 222, 222); - transition: background-color 0.1s ease; -} - #modify_subscription { height: 38rem; } diff --git a/status/templates/services_status.html b/status/templates/services_status.html index f799da8c..836eb2c2 100644 --- a/status/templates/services_status.html +++ b/status/templates/services_status.html @@ -206,7 +206,7 @@

Recent Events

{#Describe this "for" statement functionality#} {% for service in services_list %} -
+

{{ service }}

From b5055099e06b22d22b611f3b3843f859a62e4439 Mon Sep 17 00:00:00 2001 From: Auwate Date: Mon, 1 Apr 2024 11:20:52 -0400 Subject: [PATCH 28/49] Added unit test for custom command. --- status/tests/test_models.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/status/tests/test_models.py b/status/tests/test_models.py index a57e3605..4551c39f 100644 --- a/status/tests/test_models.py +++ b/status/tests/test_models.py @@ -1,11 +1,20 @@ import pytest from django.db import transaction, IntegrityError - +from django.test import TestCase +from django.core.management import call_command +from status.models import Status from status.models import Service pytestmark = pytest.mark.django_db +class TestCommands(TestCase): + + def test_create_initial_objects_creates_five_objects (self): + call_command('create_initial_objects') + assert Status.objects.count() == 5 + + class TestService(object): @pytest.mark.django_db From e23b272ffa193f33f0a38d6707ec009d24ffe79b Mon Sep 17 00:00:00 2001 From: Auwate Date: Mon, 1 Apr 2024 15:49:47 -0400 Subject: [PATCH 29/49] TEMPORARY COMMIT: TRYING DOCKER TESTING --- deploy/docker-startup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/deploy/docker-startup.sh b/deploy/docker-startup.sh index 4b7ac784..4dd8d175 100755 --- a/deploy/docker-startup.sh +++ b/deploy/docker-startup.sh @@ -41,6 +41,7 @@ sleep 30 python3 manage.py makemigrations python3 manage.py migrate python3 manage.py create_initial_objects +python3 manage.py test status.tests /etc/init.d/nginx start gunicorn --access-logfile - --workers 4 --user www-data --group www-data --bind 127.0.0.1:8800 --access-logformat '%(h)s/%({x-forwarded-for}i)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"' ServiceStatus.wsgi:application From 62d1f66917412b9ab61d106d4d94d14bd03f9496 Mon Sep 17 00:00:00 2001 From: Auwate Date: Mon, 1 Apr 2024 16:29:16 -0400 Subject: [PATCH 30/49] Removing docker-compose test command on startup. --- deploy/docker-startup.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/deploy/docker-startup.sh b/deploy/docker-startup.sh index 4dd8d175..4b7ac784 100755 --- a/deploy/docker-startup.sh +++ b/deploy/docker-startup.sh @@ -41,7 +41,6 @@ sleep 30 python3 manage.py makemigrations python3 manage.py migrate python3 manage.py create_initial_objects -python3 manage.py test status.tests /etc/init.d/nginx start gunicorn --access-logfile - --workers 4 --user www-data --group www-data --bind 127.0.0.1:8800 --access-logformat '%(h)s/%({x-forwarded-for}i)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"' ServiceStatus.wsgi:application From 43dca1baee2999f3cc24d83a7d6f4ff7fad02250 Mon Sep 17 00:00:00 2001 From: Auwate Date: Wed, 3 Apr 2024 09:24:49 -0400 Subject: [PATCH 31/49] MAJOR COMMIT: Unit Tests and a new file: settings-test.py --- ServiceStatus/settings-dev.py | 1 - ServiceStatus/settings-test.py | 164 +++++++++++++++++++++++++++++++++ status/tests/test_admin.py | 48 ++++++++++ status/tests/test_commands.py | 10 ++ status/tests/test_models.py | 10 -- 5 files changed, 222 insertions(+), 11 deletions(-) create mode 100644 ServiceStatus/settings-test.py create mode 100644 status/tests/test_admin.py create mode 100644 status/tests/test_commands.py diff --git a/ServiceStatus/settings-dev.py b/ServiceStatus/settings-dev.py index 2c8bf1e7..6593ec38 100644 --- a/ServiceStatus/settings-dev.py +++ b/ServiceStatus/settings-dev.py @@ -86,7 +86,6 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', - # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 'NAME': 'XXXDBNAMEXXX', 'USER': 'XXXDBUSERXXX', 'PASSWORD': 'XXXDBPASSXXX', diff --git a/ServiceStatus/settings-test.py b/ServiceStatus/settings-test.py new file mode 100644 index 00000000..fb084ff6 --- /dev/null +++ b/ServiceStatus/settings-test.py @@ -0,0 +1,164 @@ +""" +SPECIAL FILE + +This settings.py file will be used strictly for testing. The +main difference between this one and settings-dev.py is the database used. This +one uses local memory and SQLite, rather than a remote docker container that +settings-dev.py uses. + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/3.0/ref/settings/ +""" + +import os + +from django.core.mail.utils import DNS_NAME + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +# For Django 1.10 and above you can use: +# from django.core.management.utils import get_random_secret_key +# get_random_secret_key() +SECRET_KEY = 'XXXSECRETKEYXXX' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'status.apps.StatusConfig', + 'django_extensions', + 'tinymce', + 'django_admin_listfilter_dropdown', + 'colorfield', + 'ckeditor', + 'ckeditor_uploader', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'ServiceStatus.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [os.path.join(BASE_DIR, 'templates')] + , + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'ServiceStatus.wsgi.application' + +# Database +# https://docs.djangoproject.com/en/3.0/ref/settings/#databases + +DATABASES = { + 'default':{ + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': ':memory:' + } +} + +# Password validation +# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + +# Internationalization +# https://docs.djangoproject.com/en/3.0/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'America/New_York' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/3.0/howto/static-files/ + +STATIC_URL = '/static/' + +PROJECT_DIR = os.path.dirname(os.path.abspath(__file__)) + +STATIC_ROOT = os.path.join(PROJECT_DIR, 'static') + +STATICFILES_DIRS = ( + os.path.join(BASE_DIR, 'static'), +) + +GRAPH_MODELS = { + 'all_applications': True, + 'group_models': True, +} + +CKEDITOR_BASEPATH = "/static/ckeditor/ckeditor/" + +CKEDITOR_UPLOAD_PATH = "/uploads/" + +SMTP_HOST = "XXXSMTPHOSTXXX" +SMTP_PORT = 587 +SMTP_USER = "XXXSMTPUSERXXX" +SMTP_PASS = "XXXSMTPPASSXXX" + +# SMTP Configuration +DNS_NAME._fqdn = 'localhost' +EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' +EMAIL_USE_TLS = True +EMAIL_HOST = 'XXXSMTPHOSTXXX' +DEFAULT_FROM_EMAIL = 'XXXSMTPUSERXXX' +EMAIL_HOST_USER = 'XXXSMTPUSERXXX' +EMAIL_HOST_PASSWORD = 'XXXSMTPPASSXXX' +EMAIL_PORT = 587 + +# TURNED ON FOR DEVELOPMENT. TURN OFF FOR PRODUCTION. +SESSION_COOKIE_SECURE = False + +CSRF_COOKIE_HTTPONLY = True \ No newline at end of file diff --git a/status/tests/test_admin.py b/status/tests/test_admin.py new file mode 100644 index 00000000..e1b041d7 --- /dev/null +++ b/status/tests/test_admin.py @@ -0,0 +1,48 @@ +from django.test import TestCase +from django.utils import timezone +from status.models import Ticket, SubService, Service, ClientDomain, Status +from status.admin import TicketAdmin +from django.contrib.admin.sites import AdminSite +import datetime + + +class TestAdmin(TestCase): + + def test_order_by_of_tickets_in_admin (self): + ''' + Checks the ordering of Ticket objects in the admin panel. + Currently, it should be sorted based on the recency of the "begin" field. + ''' + # Create required fields + sub_serv = SubService.objects.create(name='Test_Sub', subservice_description='') + serv = Service.objects.create(name='Test_Service', service_description='', scope='Inter-Domain') + stat = Status.objects.create(tag= "Alert", color_name = "Orange", color_hex = "#FC810D", class_design = "fas fa-exclamation-circle") + client = ClientDomain.objects.create(name='Test_Client', domain_description='') + client.services.set([serv]) + + # Create ticket that started right now + ticket = Ticket.objects.create(status=stat, begin=timezone.now(), end=timezone.now(), notify_action=False) + ticket.sub_service.set([sub_serv]) + ticket.services.set([serv]) + ticket.client_domains.set([client]) + + # Create a ticket that started an hour ago + ticket2 = Ticket.objects.create(status=stat, begin=timezone.now() + datetime.timedelta(hours=-1), end=timezone.now(), notify_action=False) + ticket2.sub_service.set([sub_serv]) + ticket2.services.set([serv]) + ticket2.client_domains.set([client]) + + # Create a ticket that started two hours ago + ticket3 = Ticket.objects.create(status=stat, begin=timezone.now() + datetime.timedelta(hours=-2), end=timezone.now(), notify_action=False) + ticket3.sub_service.set([sub_serv]) + ticket3.services.set([serv]) + ticket3.client_domains.set([client]) + + admin_site = AdminSite() + ticket_admin = TicketAdmin(Ticket, admin_site) + + query_set = ticket_admin.get_queryset(None) + query_set = [str(element) for element in query_set] + + self.assertEqual(query_set, ['T000000001', 'T00000002', 'T00000003']) + \ No newline at end of file diff --git a/status/tests/test_commands.py b/status/tests/test_commands.py new file mode 100644 index 00000000..9ef60ed1 --- /dev/null +++ b/status/tests/test_commands.py @@ -0,0 +1,10 @@ +from django.test import TestCase +from django.core.management import call_command +from status.models import Status + + +class TestCommands(TestCase): + + def test_create_initial_objects_creates_five_objects (self): + call_command('create_initial_objects') + assert Status.objects.count() == 5 \ No newline at end of file diff --git a/status/tests/test_models.py b/status/tests/test_models.py index 4551c39f..6b2c95c7 100644 --- a/status/tests/test_models.py +++ b/status/tests/test_models.py @@ -1,20 +1,10 @@ import pytest from django.db import transaction, IntegrityError -from django.test import TestCase -from django.core.management import call_command -from status.models import Status from status.models import Service pytestmark = pytest.mark.django_db -class TestCommands(TestCase): - - def test_create_initial_objects_creates_five_objects (self): - call_command('create_initial_objects') - assert Status.objects.count() == 5 - - class TestService(object): @pytest.mark.django_db From 2c05c5c21eb522d6bf1e6c3b630161d93470b314 Mon Sep 17 00:00:00 2001 From: Auwate Date: Wed, 3 Apr 2024 11:56:35 -0400 Subject: [PATCH 32/49] Updated documentation --- README.md | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 524366ae..9be0b5c8 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,27 @@ For documentation, on tech used and useful tips, check DEV_TIPS.md ## Recent Changes -### Testing +- Tickets are now ordered in descending order by the *begin* field (Newest first) +- Tickets in the main view now contain a latest_update field, which uses the action_description found in TicketLogs. +- Custom command added to immediately populate the database with Status objects, if they are not there already. +- Unit tests are being rolled out to test new features. +- Documentation is being rolled out on a daily basis. -- For quicker development and testing, the logging driver was commented out from docker-compose.yml. When pushing to production remember to uncomment this. +## Unit Testing + +Testing is implemented by running the following command: +``` +python3 manage.py test status.tests --settings=ServiceStatus.settings-test +``` +(If python3 does not work, use **python**) + +### Development + +To create more tests, navigate to the status/tests directory. Each test will be run since they start with *test_*, so write your tests under the test file that covers your domain. For example, if you're testing a new command, do it under *test_commands*. + +## Logging Driver + +For quicker development and testing, the logging driver was commented out from docker-compose.yml. When pushing to production remember to uncomment this. ## Deployment Methodology From 9461a1b8c7c101e44eab9bb71163347f69c42718 Mon Sep 17 00:00:00 2001 From: Austin Uwate <111798627+Auwate@users.noreply.github.com> Date: Wed, 3 Apr 2024 15:22:32 -0400 Subject: [PATCH 33/49] Update Dockerfile --- deploy/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/Dockerfile b/deploy/Dockerfile index c63f2645..60b902e4 100644 --- a/deploy/Dockerfile +++ b/deploy/Dockerfile @@ -7,7 +7,7 @@ RUN apt-get install -y python3-pip git nginx libmariadb-dev-compat WORKDIR /opt # Production: https://github.com/amlight/Services-Status.git -RUN git clone --branch development https://github.com/Auwate/Services-Status.git +RUN git clone https://github.com/Auwate/Services-Status.git WORKDIR /opt/Services-Status From 1c91ea6350bb76655a93cc93c5c758bc6c34e897 Mon Sep 17 00:00:00 2001 From: Auwate Date: Mon, 8 Apr 2024 09:36:01 -0400 Subject: [PATCH 34/49] COMMIT: Updated logging --- deploy/docker-compose.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index 79e6212c..7f737702 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -37,7 +37,7 @@ services: SSA_SMTPPASS: "changeme" ports: - 8000:80 - #logging: - #driver: syslog - #options: - #syslog-address: "udp://yoursyslogserver.intranet.domain.tld:514" + logging: + driver: syslog + options: + syslog-address: "udp://yoursyslogserver.intranet.domain.tld:514" From 9f23c8e1be0760524e35d03f15cdcd69af5ee755 Mon Sep 17 00:00:00 2001 From: Auwate Date: Mon, 8 Apr 2024 11:08:18 -0400 Subject: [PATCH 35/49] Testing Commit: Turning off SESSION_COOKIE_SECURE --- ServiceStatus/settings-dev.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ServiceStatus/settings-dev.py b/ServiceStatus/settings-dev.py index 6593ec38..647a7648 100644 --- a/ServiceStatus/settings-dev.py +++ b/ServiceStatus/settings-dev.py @@ -163,6 +163,6 @@ EMAIL_PORT = 587 # TURNED ON FOR DEVELOPMENT. TURN OFF FOR PRODUCTION. -SESSION_COOKIE_SECURE = False +SESSION_COOKIE_SECURE = True CSRF_COOKIE_HTTPONLY = True \ No newline at end of file From a9af0e85714314a8cd1f0619c4c5ed7d3782c38c Mon Sep 17 00:00:00 2001 From: Austin Uwate <111798627+Auwate@users.noreply.github.com> Date: Mon, 8 Apr 2024 11:14:10 -0400 Subject: [PATCH 36/49] Turned SESSION_COOKIE to True --- ServiceStatus/settings-dev.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ServiceStatus/settings-dev.py b/ServiceStatus/settings-dev.py index 6593ec38..9182ae7e 100644 --- a/ServiceStatus/settings-dev.py +++ b/ServiceStatus/settings-dev.py @@ -163,6 +163,6 @@ EMAIL_PORT = 587 # TURNED ON FOR DEVELOPMENT. TURN OFF FOR PRODUCTION. -SESSION_COOKIE_SECURE = False +SESSION_COOKIE_SECURE = True -CSRF_COOKIE_HTTPONLY = True \ No newline at end of file +CSRF_COOKIE_HTTPONLY = True From 98fde1607557938f526a171df7b0b012782e7164 Mon Sep 17 00:00:00 2001 From: Auwate Date: Tue, 9 Apr 2024 10:37:07 -0400 Subject: [PATCH 37/49] MAJOR COMMIT: Reducing fluff in merge request. Includes: - settings-dev.py - Delete migrations - Changing templates and forms to only say UTC - test-models.py --- ServiceStatus/settings-dev.py | 4 +- deploy/Dockerfile | 1 - status/forms.py | 4 +- status/migrations/0001_initial.py | 178 ------------------ status/migrations/0002_auto_20200406_1625.py | 17 -- status/migrations/0003_auto_20200406_1628.py | 17 -- status/migrations/0004_auto_20200408_1638.py | 18 -- status/migrations/0005_auto_20200417_1752.py | 41 ---- status/migrations/0006_clientdomain.py | 26 --- status/migrations/0007_auto_20200418_1759.py | 21 --- status/migrations/0008_auto_20200428_1019.py | 17 -- status/migrations/0009_auto_20200428_1033.py | 17 -- status/migrations/0010_auto_20200428_1046.py | 17 -- status/migrations/0011_auto_20200428_1103.py | 17 -- status/migrations/0012_auto_20200428_1105.py | 17 -- status/migrations/0013_auto_20200428_1106.py | 17 -- status/migrations/0014_auto_20200428_1115.py | 16 -- status/migrations/0015_auto_20200428_1124.py | 17 -- status/migrations/0016_auto_20200428_1133.py | 17 -- status/migrations/0017_auto_20200428_1149.py | 16 -- status/migrations/0018_auto_20200428_1733.py | 17 -- status/migrations/0019_auto_20200428_1736.py | 17 -- status/migrations/0020_auto_20200428_1739.py | 17 -- status/migrations/0021_auto_20200428_1745.py | 17 -- status/migrations/0022_auto_20200428_1752.py | 21 --- status/migrations/0023_auto_20200428_1753.py | 17 -- status/migrations/0024_auto_20200428_1802.py | 26 --- status/migrations/0025_auto_20200428_1805.py | 26 --- status/migrations/0026_auto_20200428_1815.py | 26 --- status/migrations/0027_auto_20200428_2000.py | 18 -- status/migrations/0028_auto_20200429_0932.py | 22 --- status/migrations/0029_auto_20200429_0940.py | 32 ---- status/migrations/0030_auto_20200429_0948.py | 31 --- .../0031_remove_topology_priority.py | 17 -- status/migrations/0032_topology_priority.py | 20 -- status/migrations/0033_auto_20200429_1006.py | 19 -- status/migrations/0034_auto_20200429_1006.py | 18 -- .../0035_delete_subserviceservices.py | 16 -- status/migrations/0036_auto_20200429_1103.py | 19 -- status/migrations/0037_auto_20200429_1108.py | 19 -- status/migrations/0038_auto_20200429_1122.py | 19 -- status/migrations/0039_auto_20200429_1131.py | 37 ---- status/migrations/0040_auto_20200429_1137.py | 23 --- status/migrations/0041_auto_20200501_1148.py | 18 -- status/migrations/0042_auto_20200501_1149.py | 18 -- status/migrations/0043_auto_20200505_0913.py | 19 -- status/migrations/0044_service_scope.py | 18 -- status/migrations/0045_auto_20200622_1448.py | 18 -- status/migrations/0046_auto_20200706_1103.py | 20 -- status/migrations/0047_auto_20200717_1618.py | 22 --- status/migrations/0048_auto_20200717_1636.py | 23 --- status/migrations/0049_auto_20200720_1531.py | 22 --- status/migrations/0050_auto_20200721_1526.py | 23 --- status/migrations/0051_status_visual_order.py | 18 -- status/templates/services_status.html | 4 +- status/tests/test_models.py | 1 + 56 files changed, 7 insertions(+), 1206 deletions(-) delete mode 100644 status/migrations/0001_initial.py delete mode 100644 status/migrations/0002_auto_20200406_1625.py delete mode 100644 status/migrations/0003_auto_20200406_1628.py delete mode 100644 status/migrations/0004_auto_20200408_1638.py delete mode 100644 status/migrations/0005_auto_20200417_1752.py delete mode 100644 status/migrations/0006_clientdomain.py delete mode 100644 status/migrations/0007_auto_20200418_1759.py delete mode 100644 status/migrations/0008_auto_20200428_1019.py delete mode 100644 status/migrations/0009_auto_20200428_1033.py delete mode 100644 status/migrations/0010_auto_20200428_1046.py delete mode 100644 status/migrations/0011_auto_20200428_1103.py delete mode 100644 status/migrations/0012_auto_20200428_1105.py delete mode 100644 status/migrations/0013_auto_20200428_1106.py delete mode 100644 status/migrations/0014_auto_20200428_1115.py delete mode 100644 status/migrations/0015_auto_20200428_1124.py delete mode 100644 status/migrations/0016_auto_20200428_1133.py delete mode 100644 status/migrations/0017_auto_20200428_1149.py delete mode 100644 status/migrations/0018_auto_20200428_1733.py delete mode 100644 status/migrations/0019_auto_20200428_1736.py delete mode 100644 status/migrations/0020_auto_20200428_1739.py delete mode 100644 status/migrations/0021_auto_20200428_1745.py delete mode 100644 status/migrations/0022_auto_20200428_1752.py delete mode 100644 status/migrations/0023_auto_20200428_1753.py delete mode 100644 status/migrations/0024_auto_20200428_1802.py delete mode 100644 status/migrations/0025_auto_20200428_1805.py delete mode 100644 status/migrations/0026_auto_20200428_1815.py delete mode 100644 status/migrations/0027_auto_20200428_2000.py delete mode 100644 status/migrations/0028_auto_20200429_0932.py delete mode 100644 status/migrations/0029_auto_20200429_0940.py delete mode 100644 status/migrations/0030_auto_20200429_0948.py delete mode 100644 status/migrations/0031_remove_topology_priority.py delete mode 100644 status/migrations/0032_topology_priority.py delete mode 100644 status/migrations/0033_auto_20200429_1006.py delete mode 100644 status/migrations/0034_auto_20200429_1006.py delete mode 100644 status/migrations/0035_delete_subserviceservices.py delete mode 100644 status/migrations/0036_auto_20200429_1103.py delete mode 100644 status/migrations/0037_auto_20200429_1108.py delete mode 100644 status/migrations/0038_auto_20200429_1122.py delete mode 100644 status/migrations/0039_auto_20200429_1131.py delete mode 100644 status/migrations/0040_auto_20200429_1137.py delete mode 100644 status/migrations/0041_auto_20200501_1148.py delete mode 100644 status/migrations/0042_auto_20200501_1149.py delete mode 100644 status/migrations/0043_auto_20200505_0913.py delete mode 100644 status/migrations/0044_service_scope.py delete mode 100644 status/migrations/0045_auto_20200622_1448.py delete mode 100644 status/migrations/0046_auto_20200706_1103.py delete mode 100644 status/migrations/0047_auto_20200717_1618.py delete mode 100644 status/migrations/0048_auto_20200717_1636.py delete mode 100644 status/migrations/0049_auto_20200720_1531.py delete mode 100644 status/migrations/0050_auto_20200721_1526.py delete mode 100644 status/migrations/0051_status_visual_order.py diff --git a/ServiceStatus/settings-dev.py b/ServiceStatus/settings-dev.py index 9182ae7e..650e0a79 100644 --- a/ServiceStatus/settings-dev.py +++ b/ServiceStatus/settings-dev.py @@ -162,7 +162,7 @@ EMAIL_HOST_PASSWORD = 'XXXSMTPPASSXXX' EMAIL_PORT = 587 -# TURNED ON FOR DEVELOPMENT. TURN OFF FOR PRODUCTION. +# TURNED OFF FOR DEVELOPMENT. TURN ON FOR PRODUCTION. SESSION_COOKIE_SECURE = True -CSRF_COOKIE_HTTPONLY = True +CSRF_COOKIE_HTTPONLY = True \ No newline at end of file diff --git a/deploy/Dockerfile b/deploy/Dockerfile index 60b902e4..f8d31aeb 100644 --- a/deploy/Dockerfile +++ b/deploy/Dockerfile @@ -6,7 +6,6 @@ RUN apt-get install -y python3-pip git nginx libmariadb-dev-compat WORKDIR /opt -# Production: https://github.com/amlight/Services-Status.git RUN git clone https://github.com/Auwate/Services-Status.git WORKDIR /opt/Services-Status diff --git a/status/forms.py b/status/forms.py index f5844084..31bd9195 100644 --- a/status/forms.py +++ b/status/forms.py @@ -258,8 +258,8 @@ class Meta: model = Ticket fields = '__all__' labels = { - 'begin' : "Begin - Use UTC-05:00", - 'end' : "End - Use UTC-05:00", + 'begin' : "Begin - Use UTC", + 'end' : "End - Use UTC", } def __init__(self, *args, **kwargs): diff --git a/status/migrations/0001_initial.py b/status/migrations/0001_initial.py deleted file mode 100644 index 58464136..00000000 --- a/status/migrations/0001_initial.py +++ /dev/null @@ -1,178 +0,0 @@ -# Generated by Django 2.0.5 on 2020-04-06 13:37 - -import ckeditor.fields -import colorfield.fields -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='DomainList', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('domain_name', models.CharField(max_length=100, unique=True)), - ('domain_description', models.TextField(blank=True, null=True)), - ], - options={ - 'verbose_name': 'Domain', - 'verbose_name_plural': 'Domains', - }, - ), - migrations.CreateModel( - name='Priority', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('priority_tag', models.CharField(max_length=25, unique=True)), - ('priority_color', models.CharField(max_length=7, unique=True)), - ('priority_color_hex', colorfield.fields.ColorField(default='#000000', max_length=18, unique=True)), - ], - options={ - 'verbose_name': 'Priority Tag', - 'verbose_name_plural': 'Priority Tags', - 'ordering': ['priority_tag'], - }, - ), - migrations.CreateModel( - name='Region', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('region_name', models.CharField(max_length=100, unique=True, verbose_name='Region')), - ('region_description', models.TextField(blank=True, null=True)), - ], - options={ - 'verbose_name': 'Region', - 'verbose_name_plural': 'Regions', - 'ordering': ['region_name'], - }, - ), - migrations.CreateModel( - name='Service', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('service_name', models.CharField(max_length=100, unique=True, verbose_name='Service')), - ('service_description', models.TextField(blank=True, null=True)), - ], - options={ - 'verbose_name': 'Service', - 'verbose_name_plural': 'Services', - 'ordering': ['service_name'], - }, - ), - migrations.CreateModel( - name='StatusCategory', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('status_category_tag', models.CharField(max_length=45, unique=True, verbose_name='Status')), - ('status_category_color', models.CharField(max_length=7, unique=True)), - ('status_category_color_hex', colorfield.fields.ColorField(default='#000000', max_length=18)), - ('status_class_design', models.CharField(max_length=50, unique=True)), - ], - options={ - 'verbose_name': 'Status Category', - 'verbose_name_plural': 'Status Categories', - }, - ), - migrations.CreateModel( - name='Subscriber', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=45)), - ('email', models.CharField(max_length=45)), - ('token', models.CharField(blank=True, max_length=128, null=True)), - ('services', models.ManyToManyField(blank=True, to='status.Service', verbose_name='Service')), - ], - options={ - 'verbose_name': 'Subscriber', - 'verbose_name_plural': 'Subscribers', - }, - ), - migrations.CreateModel( - name='SubService', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('sub_service_name', models.CharField(max_length=100, unique=True, verbose_name='Sub-Service')), - ('sub_service_description', models.TextField(blank=True, null=True)), - ], - options={ - 'verbose_name': 'Sub-Service', - 'verbose_name_plural': 'Sub-Services', - 'ordering': ['sub_service_name'], - }, - ), - migrations.CreateModel( - name='SubServiceServices', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('priority', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='status.Priority')), - ('service', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='status.Service', - verbose_name='Service')), - ('subservice', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='status.SubService', - verbose_name='Sub-Service')), - ], - options={ - 'verbose_name': 'Topology', - 'verbose_name_plural': 'Topologies', - }, - ), - migrations.CreateModel( - name='Ticket', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('ticket_id', models.CharField(max_length=10, unique=True)), - ('begin', models.DateTimeField()), - ('end', models.DateTimeField(blank=True, null=True)), - ('action_description', ckeditor.fields.RichTextField()), - ('action_notes', ckeditor.fields.RichTextField(blank=True, null=True)), - ('notify_action', models.BooleanField(choices=[(False, 'No'), (True, 'Yes')], default=False, - verbose_name='Ticket notified')), - ('category_status', - models.ForeignKey(default=3, null=True, on_delete=django.db.models.deletion.DO_NOTHING, - to='status.StatusCategory', verbose_name='Status')), - ('sub_service', - models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='status.SubService', - verbose_name='Sub-Service')), - ], - options={ - 'verbose_name': 'Ticket', - 'verbose_name_plural': 'Tickets', - }, - ), - migrations.CreateModel( - name='TicketLog', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('action_date', models.DateTimeField()), - ('action_notes', ckeditor.fields.RichTextField(blank=True, null=True, verbose_name='Notes')), - ('service_history', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='status.Ticket')), - ('service_status', - models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='status.StatusCategory')), - ], - ), - migrations.AddField( - model_name='subservice', - name='services', - field=models.ManyToManyField(through='status.SubServiceServices', to='status.Service', - verbose_name='Service'), - ), - migrations.AddField( - model_name='subscriber', - name='subservices', - field=models.ManyToManyField(blank=True, to='status.SubService', verbose_name='Sub - Service'), - ), - migrations.AddField( - model_name='region', - name='services', - field=models.ManyToManyField(to='status.Service'), - ), - migrations.AlterUniqueTogether( - name='subserviceservices', - unique_together={('service', 'subservice')}, - ), - ] diff --git a/status/migrations/0002_auto_20200406_1625.py b/status/migrations/0002_auto_20200406_1625.py deleted file mode 100644 index ad3a6962..00000000 --- a/status/migrations/0002_auto_20200406_1625.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 2.0.5 on 2020-04-06 20:25 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='region', - name='services', - field=models.ManyToManyField(blank=True, to='status.Service'), - ), - ] diff --git a/status/migrations/0003_auto_20200406_1628.py b/status/migrations/0003_auto_20200406_1628.py deleted file mode 100644 index dcf53f59..00000000 --- a/status/migrations/0003_auto_20200406_1628.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 2.0.5 on 2020-04-06 20:28 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0002_auto_20200406_1625'), - ] - - operations = [ - migrations.AlterField( - model_name='region', - name='services', - field=models.ManyToManyField(to='status.Service'), - ), - ] diff --git a/status/migrations/0004_auto_20200408_1638.py b/status/migrations/0004_auto_20200408_1638.py deleted file mode 100644 index 0855643a..00000000 --- a/status/migrations/0004_auto_20200408_1638.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-08 20:38 - -import ckeditor.fields -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0003_auto_20200406_1628'), - ] - - operations = [ - migrations.AlterField( - model_name='service', - name='service_description', - field=ckeditor.fields.RichTextField(blank=True, null=True), - ), - ] diff --git a/status/migrations/0005_auto_20200417_1752.py b/status/migrations/0005_auto_20200417_1752.py deleted file mode 100644 index e8e638ef..00000000 --- a/status/migrations/0005_auto_20200417_1752.py +++ /dev/null @@ -1,41 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-17 21:52 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0004_auto_20200408_1638'), - ] - - operations = [ - migrations.RenameModel( - old_name='DomainList', - new_name='EmailDomainList', - ), - migrations.AlterModelOptions( - name='emaildomainlist', - options={'verbose_name': 'Email Domain', 'verbose_name_plural': 'Email Domains'}, - ), - migrations.RenameField( - model_name='emaildomainlist', - old_name='domain_description', - new_name='email_domain_description', - ), - migrations.RenameField( - model_name='emaildomainlist', - old_name='domain_name', - new_name='email_domain_name', - ), - migrations.AlterField( - model_name='service', - name='service_description', - field=models.TextField(blank=True, null=True), - ), - migrations.AlterField( - model_name='ticket', - name='notify_action', - field=models.BooleanField(choices=[(False, 'No'), (True, 'Yes')], default=True, - verbose_name='Ticket notified'), - ), - ] diff --git a/status/migrations/0006_clientdomain.py b/status/migrations/0006_clientdomain.py deleted file mode 100644 index 2d6c41d0..00000000 --- a/status/migrations/0006_clientdomain.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-18 21:36 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0005_auto_20200417_1752'), - ] - - operations = [ - migrations.CreateModel( - name='ClientDomain', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('client_domain_name', models.CharField(max_length=100, unique=True, verbose_name='Client Domain')), - ('client_domain_description', models.TextField(blank=True, null=True)), - ('services', models.ManyToManyField(to='status.Service')), - ], - options={ - 'verbose_name': 'Client Domain', - 'verbose_name_plural': 'Client Domains', - 'ordering': ['client_domain_name'], - }, - ), - ] diff --git a/status/migrations/0007_auto_20200418_1759.py b/status/migrations/0007_auto_20200418_1759.py deleted file mode 100644 index c6100e77..00000000 --- a/status/migrations/0007_auto_20200418_1759.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-18 21:59 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0006_clientdomain'), - ] - - operations = [ - migrations.RemoveField( - model_name='region', - name='services', - ), - migrations.AddField( - model_name='region', - name='client_domains', - field=models.ManyToManyField(to='status.ClientDomain'), - ), - ] diff --git a/status/migrations/0008_auto_20200428_1019.py b/status/migrations/0008_auto_20200428_1019.py deleted file mode 100644 index 1869d286..00000000 --- a/status/migrations/0008_auto_20200428_1019.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 14:19 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0007_auto_20200418_1759'), - ] - - operations = [ - migrations.RenameField( - model_name='ticketlog', - old_name='service_history', - new_name='ticket', - ), - ] diff --git a/status/migrations/0009_auto_20200428_1033.py b/status/migrations/0009_auto_20200428_1033.py deleted file mode 100644 index 18543435..00000000 --- a/status/migrations/0009_auto_20200428_1033.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 14:33 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0008_auto_20200428_1019'), - ] - - operations = [ - migrations.RenameField( - model_name='ticketlog', - old_name='service_status', - new_name='event_status', - ), - ] diff --git a/status/migrations/0010_auto_20200428_1046.py b/status/migrations/0010_auto_20200428_1046.py deleted file mode 100644 index f7890c42..00000000 --- a/status/migrations/0010_auto_20200428_1046.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 14:46 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0009_auto_20200428_1033'), - ] - - operations = [ - migrations.RenameField( - model_name='ticket', - old_name='category_status', - new_name='status', - ), - ] diff --git a/status/migrations/0011_auto_20200428_1103.py b/status/migrations/0011_auto_20200428_1103.py deleted file mode 100644 index aa55d82f..00000000 --- a/status/migrations/0011_auto_20200428_1103.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 15:03 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0010_auto_20200428_1046'), - ] - - operations = [ - migrations.RenameField( - model_name='emaildomainlist', - old_name='email_domain_name', - new_name='domain', - ), - ] diff --git a/status/migrations/0012_auto_20200428_1105.py b/status/migrations/0012_auto_20200428_1105.py deleted file mode 100644 index 1a31aa0a..00000000 --- a/status/migrations/0012_auto_20200428_1105.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 15:05 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0011_auto_20200428_1103'), - ] - - operations = [ - migrations.AlterField( - model_name='emaildomainlist', - name='domain', - field=models.CharField(max_length=100, unique=True, verbose_name='Email Domain'), - ), - ] diff --git a/status/migrations/0013_auto_20200428_1106.py b/status/migrations/0013_auto_20200428_1106.py deleted file mode 100644 index 6c908c4d..00000000 --- a/status/migrations/0013_auto_20200428_1106.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 15:06 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0012_auto_20200428_1105'), - ] - - operations = [ - migrations.RenameField( - model_name='emaildomainlist', - old_name='email_domain_description', - new_name='description', - ), - ] diff --git a/status/migrations/0014_auto_20200428_1115.py b/status/migrations/0014_auto_20200428_1115.py deleted file mode 100644 index c708b778..00000000 --- a/status/migrations/0014_auto_20200428_1115.py +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 15:15 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0013_auto_20200428_1106'), - ] - - operations = [ - migrations.RenameModel( - old_name='EmailDomainList', - new_name='EmailDomain', - ), - ] diff --git a/status/migrations/0015_auto_20200428_1124.py b/status/migrations/0015_auto_20200428_1124.py deleted file mode 100644 index aea29a07..00000000 --- a/status/migrations/0015_auto_20200428_1124.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 15:24 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0014_auto_20200428_1115'), - ] - - operations = [ - migrations.AlterField( - model_name='emaildomain', - name='domain', - field=models.CharField(max_length=100, unique=True, verbose_name='Domain Name'), - ), - ] diff --git a/status/migrations/0016_auto_20200428_1133.py b/status/migrations/0016_auto_20200428_1133.py deleted file mode 100644 index dbd689c1..00000000 --- a/status/migrations/0016_auto_20200428_1133.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 15:33 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0015_auto_20200428_1124'), - ] - - operations = [ - migrations.RenameField( - model_name='ticketlog', - old_name='event_status', - new_name='status', - ), - ] diff --git a/status/migrations/0017_auto_20200428_1149.py b/status/migrations/0017_auto_20200428_1149.py deleted file mode 100644 index be548c46..00000000 --- a/status/migrations/0017_auto_20200428_1149.py +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 15:49 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0016_auto_20200428_1133'), - ] - - operations = [ - migrations.RenameModel( - old_name='StatusCategory', - new_name='Status', - ), - ] diff --git a/status/migrations/0018_auto_20200428_1733.py b/status/migrations/0018_auto_20200428_1733.py deleted file mode 100644 index c9689cea..00000000 --- a/status/migrations/0018_auto_20200428_1733.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 21:33 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0017_auto_20200428_1149'), - ] - - operations = [ - migrations.RenameField( - model_name='status', - old_name='status_class_design', - new_name='class_design', - ), - ] diff --git a/status/migrations/0019_auto_20200428_1736.py b/status/migrations/0019_auto_20200428_1736.py deleted file mode 100644 index 24b4e141..00000000 --- a/status/migrations/0019_auto_20200428_1736.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 21:36 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0018_auto_20200428_1733'), - ] - - operations = [ - migrations.RenameField( - model_name='status', - old_name='status_category_color_hex', - new_name='color_hex', - ), - ] diff --git a/status/migrations/0020_auto_20200428_1739.py b/status/migrations/0020_auto_20200428_1739.py deleted file mode 100644 index 5bd5e409..00000000 --- a/status/migrations/0020_auto_20200428_1739.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 21:39 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0019_auto_20200428_1736'), - ] - - operations = [ - migrations.RenameField( - model_name='status', - old_name='status_category_color', - new_name='color_name', - ), - ] diff --git a/status/migrations/0021_auto_20200428_1745.py b/status/migrations/0021_auto_20200428_1745.py deleted file mode 100644 index 45717e75..00000000 --- a/status/migrations/0021_auto_20200428_1745.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 21:45 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0020_auto_20200428_1739'), - ] - - operations = [ - migrations.RenameField( - model_name='status', - old_name='status_category_tag', - new_name='tag', - ), - ] diff --git a/status/migrations/0022_auto_20200428_1752.py b/status/migrations/0022_auto_20200428_1752.py deleted file mode 100644 index 2bcae053..00000000 --- a/status/migrations/0022_auto_20200428_1752.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 21:52 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0021_auto_20200428_1745'), - ] - - operations = [ - migrations.AlterModelOptions( - name='subservice', - options={'ordering': ['name'], 'verbose_name': 'Sub-Service', 'verbose_name_plural': 'Sub-Services'}, - ), - migrations.RenameField( - model_name='subservice', - old_name='sub_service_name', - new_name='name', - ), - ] diff --git a/status/migrations/0023_auto_20200428_1753.py b/status/migrations/0023_auto_20200428_1753.py deleted file mode 100644 index 9e1b5b6a..00000000 --- a/status/migrations/0023_auto_20200428_1753.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 21:53 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0022_auto_20200428_1752'), - ] - - operations = [ - migrations.RenameField( - model_name='subservice', - old_name='sub_service_description', - new_name='description', - ), - ] diff --git a/status/migrations/0024_auto_20200428_1802.py b/status/migrations/0024_auto_20200428_1802.py deleted file mode 100644 index dfd9423c..00000000 --- a/status/migrations/0024_auto_20200428_1802.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 22:02 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0023_auto_20200428_1753'), - ] - - operations = [ - migrations.AlterModelOptions( - name='region', - options={'ordering': ['name'], 'verbose_name': 'Region', 'verbose_name_plural': 'Regions'}, - ), - migrations.RenameField( - model_name='region', - old_name='region_description', - new_name='description', - ), - migrations.RenameField( - model_name='region', - old_name='region_name', - new_name='name', - ), - ] diff --git a/status/migrations/0025_auto_20200428_1805.py b/status/migrations/0025_auto_20200428_1805.py deleted file mode 100644 index a9637658..00000000 --- a/status/migrations/0025_auto_20200428_1805.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 22:05 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0024_auto_20200428_1802'), - ] - - operations = [ - migrations.AlterModelOptions( - name='clientdomain', - options={'ordering': ['name'], 'verbose_name': 'Client Domain', 'verbose_name_plural': 'Client Domains'}, - ), - migrations.RenameField( - model_name='clientdomain', - old_name='client_domain_description', - new_name='description', - ), - migrations.RenameField( - model_name='clientdomain', - old_name='client_domain_name', - new_name='name', - ), - ] diff --git a/status/migrations/0026_auto_20200428_1815.py b/status/migrations/0026_auto_20200428_1815.py deleted file mode 100644 index ea6b5053..00000000 --- a/status/migrations/0026_auto_20200428_1815.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-28 22:15 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ('status', '0025_auto_20200428_1805'), - ] - - operations = [ - migrations.AlterModelOptions( - name='service', - options={'ordering': ['name'], 'verbose_name': 'Service', 'verbose_name_plural': 'Services'}, - ), - migrations.RenameField( - model_name='service', - old_name='service_description', - new_name='description', - ), - migrations.RenameField( - model_name='service', - old_name='service_name', - new_name='name', - ), - ] diff --git a/status/migrations/0027_auto_20200428_2000.py b/status/migrations/0027_auto_20200428_2000.py deleted file mode 100644 index 090cdd4c..00000000 --- a/status/migrations/0027_auto_20200428_2000.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-29 00:00 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0026_auto_20200428_1815'), - ] - - operations = [ - migrations.RenameField( - model_name='service', - old_name='description', - new_name='t_description', - ), - ] diff --git a/status/migrations/0028_auto_20200429_0932.py b/status/migrations/0028_auto_20200429_0932.py deleted file mode 100644 index f96967a4..00000000 --- a/status/migrations/0028_auto_20200429_0932.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-29 13:32 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0027_auto_20200428_2000'), - ] - - operations = [ - migrations.RemoveField( - model_name='service', - name='t_description', - ), - migrations.AddField( - model_name='service', - name='service_description', - field=models.TextField(blank=True, null=True, verbose_name='Description'), - ), - ] diff --git a/status/migrations/0029_auto_20200429_0940.py b/status/migrations/0029_auto_20200429_0940.py deleted file mode 100644 index d0eaae72..00000000 --- a/status/migrations/0029_auto_20200429_0940.py +++ /dev/null @@ -1,32 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-29 13:40 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0028_auto_20200429_0932'), - ] - - operations = [ - migrations.AlterModelOptions( - name='priority', - options={'ordering': ['tag'], 'verbose_name': 'Priority', 'verbose_name_plural': 'Priorities'}, - ), - migrations.RenameField( - model_name='priority', - old_name='priority_color', - new_name='color', - ), - migrations.RenameField( - model_name='priority', - old_name='priority_color_hex', - new_name='color_hex', - ), - migrations.RenameField( - model_name='priority', - old_name='priority_tag', - new_name='tag', - ), - ] diff --git a/status/migrations/0030_auto_20200429_0948.py b/status/migrations/0030_auto_20200429_0948.py deleted file mode 100644 index 4057d2e4..00000000 --- a/status/migrations/0030_auto_20200429_0948.py +++ /dev/null @@ -1,31 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-29 13:48 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0029_auto_20200429_0940'), - ] - - operations = [ - migrations.RemoveField( - model_name='subservice', - name='services', - ), - migrations.CreateModel( - name='Topology', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('priority', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='status.Priority')), - ('service', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='status.Service', verbose_name='Service')), - ('subservices', models.ManyToManyField(blank=True, to='status.SubService', verbose_name='Sub - Service')), - ], - options={ - 'verbose_name': 'Topology', - 'verbose_name_plural': 'Topologies', - }, - ), - ] diff --git a/status/migrations/0031_remove_topology_priority.py b/status/migrations/0031_remove_topology_priority.py deleted file mode 100644 index 900ce474..00000000 --- a/status/migrations/0031_remove_topology_priority.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-29 14:03 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0030_auto_20200429_0948'), - ] - - operations = [ - migrations.RemoveField( - model_name='topology', - name='priority', - ), - ] diff --git a/status/migrations/0032_topology_priority.py b/status/migrations/0032_topology_priority.py deleted file mode 100644 index 52d00913..00000000 --- a/status/migrations/0032_topology_priority.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-29 14:04 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0031_remove_topology_priority'), - ] - - operations = [ - migrations.AddField( - model_name='topology', - name='priority', - field=models.ForeignKey(blank=True, default=1, on_delete=django.db.models.deletion.DO_NOTHING, to='status.Priority'), - preserve_default=False, - ), - ] diff --git a/status/migrations/0033_auto_20200429_1006.py b/status/migrations/0033_auto_20200429_1006.py deleted file mode 100644 index db8ee38e..00000000 --- a/status/migrations/0033_auto_20200429_1006.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-29 14:06 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0032_topology_priority'), - ] - - operations = [ - migrations.AlterField( - model_name='topology', - name='priority', - field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='status.Priority'), - ), - ] diff --git a/status/migrations/0034_auto_20200429_1006.py b/status/migrations/0034_auto_20200429_1006.py deleted file mode 100644 index 104aa5c7..00000000 --- a/status/migrations/0034_auto_20200429_1006.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-29 14:06 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0033_auto_20200429_1006'), - ] - - operations = [ - migrations.AlterField( - model_name='topology', - name='subservices', - field=models.ManyToManyField(to='status.SubService', verbose_name='Sub - Service'), - ), - ] diff --git a/status/migrations/0035_delete_subserviceservices.py b/status/migrations/0035_delete_subserviceservices.py deleted file mode 100644 index f57cbade..00000000 --- a/status/migrations/0035_delete_subserviceservices.py +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-29 14:20 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0034_auto_20200429_1006'), - ] - - operations = [ - migrations.DeleteModel( - name='SubServiceServices', - ), - ] diff --git a/status/migrations/0036_auto_20200429_1103.py b/status/migrations/0036_auto_20200429_1103.py deleted file mode 100644 index 246cabcb..00000000 --- a/status/migrations/0036_auto_20200429_1103.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-29 15:03 - -import ckeditor.fields -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0035_delete_subserviceservices'), - ] - - operations = [ - migrations.AlterField( - model_name='clientdomain', - name='description', - field=ckeditor.fields.RichTextField(blank=True, null=True, verbose_name='Notes'), - ), - ] diff --git a/status/migrations/0037_auto_20200429_1108.py b/status/migrations/0037_auto_20200429_1108.py deleted file mode 100644 index a2268f1e..00000000 --- a/status/migrations/0037_auto_20200429_1108.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-29 15:08 - -import ckeditor.fields -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0036_auto_20200429_1103'), - ] - - operations = [ - migrations.AlterField( - model_name='service', - name='service_description', - field=ckeditor.fields.RichTextField(blank=True, null=True, verbose_name='Description'), - ), - ] diff --git a/status/migrations/0038_auto_20200429_1122.py b/status/migrations/0038_auto_20200429_1122.py deleted file mode 100644 index 5a285c90..00000000 --- a/status/migrations/0038_auto_20200429_1122.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-29 15:22 - -import ckeditor.fields -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0037_auto_20200429_1108'), - ] - - operations = [ - migrations.AlterField( - model_name='emaildomain', - name='description', - field=ckeditor.fields.RichTextField(blank=True, null=True, verbose_name='Description'), - ), - ] diff --git a/status/migrations/0039_auto_20200429_1131.py b/status/migrations/0039_auto_20200429_1131.py deleted file mode 100644 index 09bf4d7b..00000000 --- a/status/migrations/0039_auto_20200429_1131.py +++ /dev/null @@ -1,37 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-29 15:31 - -import ckeditor.fields -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0038_auto_20200429_1122'), - ] - - operations = [ - migrations.RenameField( - model_name='emaildomain', - old_name='description', - new_name='domain_description', - ), - migrations.RemoveField( - model_name='clientdomain', - name='description', - ), - migrations.RemoveField( - model_name='region', - name='description', - ), - migrations.AddField( - model_name='clientdomain', - name='domain_description', - field=ckeditor.fields.RichTextField(blank=True, null=True, verbose_name='Description'), - ), - migrations.AddField( - model_name='region', - name='region_description', - field=ckeditor.fields.RichTextField(blank=True, null=True, verbose_name='Description'), - ), - ] diff --git a/status/migrations/0040_auto_20200429_1137.py b/status/migrations/0040_auto_20200429_1137.py deleted file mode 100644 index cc10cd63..00000000 --- a/status/migrations/0040_auto_20200429_1137.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.0.5 on 2020-04-29 15:37 - -import ckeditor.fields -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0039_auto_20200429_1131'), - ] - - operations = [ - migrations.RemoveField( - model_name='subservice', - name='description', - ), - migrations.AddField( - model_name='subservice', - name='subservice_description', - field=ckeditor.fields.RichTextField(blank=True, null=True, verbose_name='Description'), - ), - ] diff --git a/status/migrations/0041_auto_20200501_1148.py b/status/migrations/0041_auto_20200501_1148.py deleted file mode 100644 index 9aa8b388..00000000 --- a/status/migrations/0041_auto_20200501_1148.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.0.5 on 2020-05-01 15:48 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0040_auto_20200429_1137'), - ] - - operations = [ - migrations.AlterField( - model_name='subscriber', - name='subservices', - field=models.ManyToManyField(blank=True, related_name='Subscriber', to='status.SubService', verbose_name='Sub - Service'), - ), - ] diff --git a/status/migrations/0042_auto_20200501_1149.py b/status/migrations/0042_auto_20200501_1149.py deleted file mode 100644 index 033c8d4c..00000000 --- a/status/migrations/0042_auto_20200501_1149.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.0.5 on 2020-05-01 15:49 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0041_auto_20200501_1148'), - ] - - operations = [ - migrations.AlterField( - model_name='subscriber', - name='subservices', - field=models.ManyToManyField(blank=True, to='status.SubService', verbose_name='Sub - Service'), - ), - ] diff --git a/status/migrations/0043_auto_20200505_0913.py b/status/migrations/0043_auto_20200505_0913.py deleted file mode 100644 index 6b413038..00000000 --- a/status/migrations/0043_auto_20200505_0913.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.0.5 on 2020-05-05 13:13 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0042_auto_20200501_1149'), - ] - - operations = [ - migrations.AlterField( - model_name='ticket', - name='sub_service', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='status.SubService', verbose_name='Sub-Service'), - ), - ] diff --git a/status/migrations/0044_service_scope.py b/status/migrations/0044_service_scope.py deleted file mode 100644 index 24c756fe..00000000 --- a/status/migrations/0044_service_scope.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.0.7 on 2020-06-22 18:39 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0043_auto_20200505_0913'), - ] - - operations = [ - migrations.AddField( - model_name='service', - name='scope', - field=models.CharField(blank=True, choices=[('multi_domain', 'Multi-Domain'), ('inter_domain', 'Inter-Domain')], default='multi_domain', max_length=30), - ), - ] diff --git a/status/migrations/0045_auto_20200622_1448.py b/status/migrations/0045_auto_20200622_1448.py deleted file mode 100644 index a7e281ea..00000000 --- a/status/migrations/0045_auto_20200622_1448.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.0.7 on 2020-06-22 18:48 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0044_service_scope'), - ] - - operations = [ - migrations.AlterField( - model_name='service', - name='scope', - field=models.CharField(choices=[('multi_domain', 'Multi-Domain'), ('inter_domain', 'Inter-Domain')], default='multi_domain', max_length=30), - ), - ] diff --git a/status/migrations/0046_auto_20200706_1103.py b/status/migrations/0046_auto_20200706_1103.py deleted file mode 100644 index 46a1ae72..00000000 --- a/status/migrations/0046_auto_20200706_1103.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 3.0.7 on 2020-07-06 15:03 - -from django.db import migrations, models - -import status.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0045_auto_20200622_1448'), - ] - - operations = [ - migrations.AlterField( - model_name='ticket', - name='ticket_id', - field=models.CharField(default=status.models.get_new_ticket_id, max_length=10, unique=True), - ), - ] diff --git a/status/migrations/0047_auto_20200717_1618.py b/status/migrations/0047_auto_20200717_1618.py deleted file mode 100644 index 3b36ea5e..00000000 --- a/status/migrations/0047_auto_20200717_1618.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 3.0.7 on 2020-07-17 20:18 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0046_auto_20200706_1103'), - ] - - operations = [ - migrations.RemoveField( - model_name='ticket', - name='sub_service', - ), - migrations.AddField( - model_name='ticket', - name='sub_service', - field=models.ManyToManyField(blank=True, to='status.SubService', verbose_name='Sub - Services'), - ), - ] diff --git a/status/migrations/0048_auto_20200717_1636.py b/status/migrations/0048_auto_20200717_1636.py deleted file mode 100644 index 6876c58d..00000000 --- a/status/migrations/0048_auto_20200717_1636.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.0.7 on 2020-07-17 20:36 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0047_auto_20200717_1618'), - ] - - operations = [ - migrations.RemoveField( - model_name='ticket', - name='sub_service', - ), - migrations.AddField( - model_name='ticket', - name='sub_service', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='status.SubService', verbose_name='Sub-Service'), - ), - ] diff --git a/status/migrations/0049_auto_20200720_1531.py b/status/migrations/0049_auto_20200720_1531.py deleted file mode 100644 index 642496d4..00000000 --- a/status/migrations/0049_auto_20200720_1531.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 3.0.7 on 2020-07-20 19:31 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0048_auto_20200717_1636'), - ] - - operations = [ - migrations.RemoveField( - model_name='ticket', - name='sub_service', - ), - migrations.AddField( - model_name='ticket', - name='sub_service', - field=models.ManyToManyField(blank=True, to='status.SubService', verbose_name='Sub - Services'), - ), - ] diff --git a/status/migrations/0050_auto_20200721_1526.py b/status/migrations/0050_auto_20200721_1526.py deleted file mode 100644 index b82b87e5..00000000 --- a/status/migrations/0050_auto_20200721_1526.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.0.7 on 2020-07-21 19:26 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0049_auto_20200720_1531'), - ] - - operations = [ - migrations.AddField( - model_name='ticket', - name='client_domains', - field=models.ManyToManyField(blank=True, to='status.ClientDomain', verbose_name='Client Domains'), - ), - migrations.AddField( - model_name='ticket', - name='services', - field=models.ManyToManyField(blank=True, to='status.Service', verbose_name='Service'), - ), - ] diff --git a/status/migrations/0051_status_visual_order.py b/status/migrations/0051_status_visual_order.py deleted file mode 100644 index c14d5112..00000000 --- a/status/migrations/0051_status_visual_order.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.0.8 on 2020-07-24 18:40 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('status', '0050_auto_20200721_1526'), - ] - - operations = [ - migrations.AddField( - model_name='status', - name='visual_order', - field=models.IntegerField(blank=True, default=1), - ), - ] diff --git a/status/templates/services_status.html b/status/templates/services_status.html index 836eb2c2..6143f1a9 100644 --- a/status/templates/services_status.html +++ b/status/templates/services_status.html @@ -36,7 +36,7 @@

Recent Events

Status: {{ ticket.status.tag }}

{% if ticket.status.tag == "Planned" %} -

Action Date: {{ ticket.begin }} UTC-05:00

+

Action Date: {{ ticket.begin }} UTC

{% if ticket.end|localtime|timesince >= "1 min" %}

Current Status Information: Completed

@@ -55,7 +55,7 @@

Recent Events

{% if ticket.latest_action_notes %} -

Latest Update: {{ticket.latest_action_date}} | UTC-05:00 {{ticket.latest_action_notes}}

+

Latest Update: {{ticket.latest_action_date}} | UTC {{ticket.latest_action_notes}}

{% endif %}
diff --git a/status/tests/test_models.py b/status/tests/test_models.py index 6b2c95c7..a57e3605 100644 --- a/status/tests/test_models.py +++ b/status/tests/test_models.py @@ -1,5 +1,6 @@ import pytest from django.db import transaction, IntegrityError + from status.models import Service pytestmark = pytest.mark.django_db From 13ea9c0abf9c5875df0e2f4dfab5866b6399fbd9 Mon Sep 17 00:00:00 2001 From: Auwate Date: Tue, 9 Apr 2024 11:23:13 -0400 Subject: [PATCH 38/49] COMMIT: Fault tolerance by making sure an AttributeError does not occur when latest_action_notes is checked. This could cause an error because not all Tickets have logs, and if a Ticket without a log is called, it could raise an error. --- status/views.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/status/views.py b/status/views.py index a688422d..fd5a5c7a 100644 --- a/status/views.py +++ b/status/views.py @@ -102,6 +102,8 @@ def get(self, request, *args, **kwargs): ticket.latest_action_date = last_log.action_date else: ticket.latest_log = ticket.status + ticket.latest_action_notes = None + ticket.latest_action_date = None context = { "ticket_list": ticket_list, From 2d93cb81826b7cc2fa73d8b2282d9f095578019d Mon Sep 17 00:00:00 2001 From: Auwate Date: Tue, 9 Apr 2024 12:04:59 -0400 Subject: [PATCH 39/49] COMMIT: Part 1: Reducing fluff Part 2: Added unit test to check whether the main view (where Tickets are shown), returns a 200 code AND has ticket objects where "latest_action_note" and "latest_action_date" exist. --- status/models.py | 2 -- status/tests/test_models.py | 1 - status/tests/test_views.py | 39 +++++++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 status/tests/test_views.py diff --git a/status/models.py b/status/models.py index 2749ff92..be38abd0 100644 --- a/status/models.py +++ b/status/models.py @@ -290,8 +290,6 @@ class Ticket(models.Model): null=True, default=3, verbose_name='Status') begin = models.DateTimeField() end = models.DateTimeField(null=True, blank=True) - - # UTC-5 is standard for Miami, but drop-down with list is appropriate action_description = RichTextField() action_notes = RichTextField(blank=True, null=True) diff --git a/status/tests/test_models.py b/status/tests/test_models.py index a57e3605..18574eb1 100644 --- a/status/tests/test_models.py +++ b/status/tests/test_models.py @@ -24,4 +24,3 @@ def test_service_integrity(self): Service.objects.create(name="Service test") assert Service.objects.count() == 1 - diff --git a/status/tests/test_views.py b/status/tests/test_views.py new file mode 100644 index 00000000..36bd51d8 --- /dev/null +++ b/status/tests/test_views.py @@ -0,0 +1,39 @@ +from status.models import Service, SubService, Status, ClientDomain, Ticket +from django.utils import timezone +from django.urls import reverse +from django.test import TestCase + +class TestTickets(TestCase): + + def test_ticket_latest_action_notes_and_date_exist (self): + + # Create the required fields + sub_serv = SubService.objects.create(name='Test_Sub', subservice_description='') + serv = Service.objects.create(name='Test_Service', service_description='', scope='Inter-Domain') + stat = Status.objects.create(tag= "Alert", color_name = "Orange", color_hex = "#FC810D", class_design = "fas fa-exclamation-circle") + client = ClientDomain.objects.create(name='Test_Client', domain_description='') + client.services.set([serv]) + + # Create Ticket object + ticket = Ticket.objects.create(status=stat, begin=timezone.now(), end=timezone.now(), notify_action=False) + ticket.sub_service.set([sub_serv]) + ticket.services.set([serv]) + ticket.client_domains.set([client]) + + # Get the url to the main page. Reverse does this by using the name field in urls.py + url = reverse('services_status_view') + + # Get the response + response = self.client.get(url) + + # Make sure it returns a 200 response, this checks if an error has occurred generally + self.assertEqual(response.status_code, 200) + + # Get the queryset for the ticket_list + queryset = response.context['ticket_list'] + testing_list = [] + + # Make sure the attribute exists + for element in queryset: + self.assertTrue(hasattr(element, "latest_action_notes")) + self.assertTrue(hasattr(element, "latest_action_date")) From 824d671fe246082e15e21d939ecd22bd77fea86b Mon Sep 17 00:00:00 2001 From: Austin Uwate <111798627+Auwate@users.noreply.github.com> Date: Tue, 9 Apr 2024 12:41:08 -0400 Subject: [PATCH 40/49] Update settings-dev.py Align with master repo. --- ServiceStatus/settings-dev.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ServiceStatus/settings-dev.py b/ServiceStatus/settings-dev.py index 650e0a79..10d4a784 100644 --- a/ServiceStatus/settings-dev.py +++ b/ServiceStatus/settings-dev.py @@ -86,6 +86,7 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', + # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 'NAME': 'XXXDBNAMEXXX', 'USER': 'XXXDBUSERXXX', 'PASSWORD': 'XXXDBPASSXXX', @@ -165,4 +166,4 @@ # TURNED OFF FOR DEVELOPMENT. TURN ON FOR PRODUCTION. SESSION_COOKIE_SECURE = True -CSRF_COOKIE_HTTPONLY = True \ No newline at end of file +CSRF_COOKIE_HTTPONLY = True From c8d00ff99358daa4a12715e0e715a35e2c95b766 Mon Sep 17 00:00:00 2001 From: Austin Uwate <111798627+Auwate@users.noreply.github.com> Date: Tue, 9 Apr 2024 12:43:41 -0400 Subject: [PATCH 41/49] Update settings-dev.py Align with master repo --- ServiceStatus/settings-dev.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ServiceStatus/settings-dev.py b/ServiceStatus/settings-dev.py index 10d4a784..400f7ab8 100644 --- a/ServiceStatus/settings-dev.py +++ b/ServiceStatus/settings-dev.py @@ -162,7 +162,6 @@ EMAIL_HOST_USER = 'XXXSMTPUSERXXX' EMAIL_HOST_PASSWORD = 'XXXSMTPPASSXXX' EMAIL_PORT = 587 - # TURNED OFF FOR DEVELOPMENT. TURN ON FOR PRODUCTION. SESSION_COOKIE_SECURE = True From e238e576e800b0d22edc29f69853b346fb810c85 Mon Sep 17 00:00:00 2001 From: Austin Uwate <111798627+Auwate@users.noreply.github.com> Date: Tue, 9 Apr 2024 12:46:47 -0400 Subject: [PATCH 42/49] Update settings-dev.py Align with master repo --- ServiceStatus/settings-dev.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ServiceStatus/settings-dev.py b/ServiceStatus/settings-dev.py index 400f7ab8..10d4a784 100644 --- a/ServiceStatus/settings-dev.py +++ b/ServiceStatus/settings-dev.py @@ -162,6 +162,7 @@ EMAIL_HOST_USER = 'XXXSMTPUSERXXX' EMAIL_HOST_PASSWORD = 'XXXSMTPPASSXXX' EMAIL_PORT = 587 + # TURNED OFF FOR DEVELOPMENT. TURN ON FOR PRODUCTION. SESSION_COOKIE_SECURE = True From 75f90f024547d37e24f8118e7fff2de84bb4f3b6 Mon Sep 17 00:00:00 2001 From: Auwate Date: Tue, 9 Apr 2024 12:55:44 -0400 Subject: [PATCH 43/49] Align with master repo --- status/migrations/0001_initial.py | 178 ++++++++++++++++++ status/migrations/0002_auto_20200406_1625.py | 17 ++ status/migrations/0003_auto_20200406_1628.py | 17 ++ status/migrations/0004_auto_20200408_1638.py | 18 ++ status/migrations/0005_auto_20200417_1752.py | 41 ++++ status/migrations/0006_clientdomain.py | 26 +++ status/migrations/0007_auto_20200418_1759.py | 21 +++ status/migrations/0008_auto_20200428_1019.py | 17 ++ status/migrations/0009_auto_20200428_1033.py | 17 ++ status/migrations/0010_auto_20200428_1046.py | 17 ++ status/migrations/0011_auto_20200428_1103.py | 17 ++ status/migrations/0012_auto_20200428_1105.py | 17 ++ status/migrations/0013_auto_20200428_1106.py | 17 ++ status/migrations/0014_auto_20200428_1115.py | 16 ++ status/migrations/0015_auto_20200428_1124.py | 17 ++ status/migrations/0016_auto_20200428_1133.py | 17 ++ status/migrations/0017_auto_20200428_1149.py | 16 ++ status/migrations/0018_auto_20200428_1733.py | 17 ++ status/migrations/0019_auto_20200428_1736.py | 17 ++ status/migrations/0020_auto_20200428_1739.py | 17 ++ status/migrations/0021_auto_20200428_1745.py | 17 ++ status/migrations/0022_auto_20200428_1752.py | 21 +++ status/migrations/0023_auto_20200428_1753.py | 17 ++ status/migrations/0024_auto_20200428_1802.py | 26 +++ status/migrations/0025_auto_20200428_1805.py | 26 +++ status/migrations/0026_auto_20200428_1815.py | 26 +++ status/migrations/0027_auto_20200428_2000.py | 18 ++ status/migrations/0028_auto_20200429_0932.py | 22 +++ status/migrations/0029_auto_20200429_0940.py | 32 ++++ status/migrations/0030_auto_20200429_0948.py | 31 +++ .../0031_remove_topology_priority.py | 17 ++ status/migrations/0032_topology_priority.py | 20 ++ status/migrations/0033_auto_20200429_1006.py | 19 ++ status/migrations/0034_auto_20200429_1006.py | 18 ++ .../0035_delete_subserviceservices.py | 16 ++ status/migrations/0036_auto_20200429_1103.py | 19 ++ status/migrations/0037_auto_20200429_1108.py | 19 ++ status/migrations/0038_auto_20200429_1122.py | 19 ++ status/migrations/0039_auto_20200429_1131.py | 37 ++++ status/migrations/0040_auto_20200429_1137.py | 23 +++ status/migrations/0041_auto_20200501_1148.py | 18 ++ status/migrations/0042_auto_20200501_1149.py | 18 ++ status/migrations/0043_auto_20200505_0913.py | 19 ++ status/migrations/0044_service_scope.py | 18 ++ status/migrations/0045_auto_20200622_1448.py | 18 ++ status/migrations/0046_auto_20200706_1103.py | 20 ++ status/migrations/0047_auto_20200717_1618.py | 22 +++ status/migrations/0048_auto_20200717_1636.py | 23 +++ status/migrations/0049_auto_20200720_1531.py | 22 +++ status/migrations/0050_auto_20200721_1526.py | 23 +++ status/migrations/0051_status_visual_order.py | 18 ++ 51 files changed, 1199 insertions(+) create mode 100644 status/migrations/0001_initial.py create mode 100644 status/migrations/0002_auto_20200406_1625.py create mode 100644 status/migrations/0003_auto_20200406_1628.py create mode 100644 status/migrations/0004_auto_20200408_1638.py create mode 100644 status/migrations/0005_auto_20200417_1752.py create mode 100644 status/migrations/0006_clientdomain.py create mode 100644 status/migrations/0007_auto_20200418_1759.py create mode 100644 status/migrations/0008_auto_20200428_1019.py create mode 100644 status/migrations/0009_auto_20200428_1033.py create mode 100644 status/migrations/0010_auto_20200428_1046.py create mode 100644 status/migrations/0011_auto_20200428_1103.py create mode 100644 status/migrations/0012_auto_20200428_1105.py create mode 100644 status/migrations/0013_auto_20200428_1106.py create mode 100644 status/migrations/0014_auto_20200428_1115.py create mode 100644 status/migrations/0015_auto_20200428_1124.py create mode 100644 status/migrations/0016_auto_20200428_1133.py create mode 100644 status/migrations/0017_auto_20200428_1149.py create mode 100644 status/migrations/0018_auto_20200428_1733.py create mode 100644 status/migrations/0019_auto_20200428_1736.py create mode 100644 status/migrations/0020_auto_20200428_1739.py create mode 100644 status/migrations/0021_auto_20200428_1745.py create mode 100644 status/migrations/0022_auto_20200428_1752.py create mode 100644 status/migrations/0023_auto_20200428_1753.py create mode 100644 status/migrations/0024_auto_20200428_1802.py create mode 100644 status/migrations/0025_auto_20200428_1805.py create mode 100644 status/migrations/0026_auto_20200428_1815.py create mode 100644 status/migrations/0027_auto_20200428_2000.py create mode 100644 status/migrations/0028_auto_20200429_0932.py create mode 100644 status/migrations/0029_auto_20200429_0940.py create mode 100644 status/migrations/0030_auto_20200429_0948.py create mode 100644 status/migrations/0031_remove_topology_priority.py create mode 100644 status/migrations/0032_topology_priority.py create mode 100644 status/migrations/0033_auto_20200429_1006.py create mode 100644 status/migrations/0034_auto_20200429_1006.py create mode 100644 status/migrations/0035_delete_subserviceservices.py create mode 100644 status/migrations/0036_auto_20200429_1103.py create mode 100644 status/migrations/0037_auto_20200429_1108.py create mode 100644 status/migrations/0038_auto_20200429_1122.py create mode 100644 status/migrations/0039_auto_20200429_1131.py create mode 100644 status/migrations/0040_auto_20200429_1137.py create mode 100644 status/migrations/0041_auto_20200501_1148.py create mode 100644 status/migrations/0042_auto_20200501_1149.py create mode 100644 status/migrations/0043_auto_20200505_0913.py create mode 100644 status/migrations/0044_service_scope.py create mode 100644 status/migrations/0045_auto_20200622_1448.py create mode 100644 status/migrations/0046_auto_20200706_1103.py create mode 100644 status/migrations/0047_auto_20200717_1618.py create mode 100644 status/migrations/0048_auto_20200717_1636.py create mode 100644 status/migrations/0049_auto_20200720_1531.py create mode 100644 status/migrations/0050_auto_20200721_1526.py create mode 100644 status/migrations/0051_status_visual_order.py diff --git a/status/migrations/0001_initial.py b/status/migrations/0001_initial.py new file mode 100644 index 00000000..58464136 --- /dev/null +++ b/status/migrations/0001_initial.py @@ -0,0 +1,178 @@ +# Generated by Django 2.0.5 on 2020-04-06 13:37 + +import ckeditor.fields +import colorfield.fields +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='DomainList', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('domain_name', models.CharField(max_length=100, unique=True)), + ('domain_description', models.TextField(blank=True, null=True)), + ], + options={ + 'verbose_name': 'Domain', + 'verbose_name_plural': 'Domains', + }, + ), + migrations.CreateModel( + name='Priority', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('priority_tag', models.CharField(max_length=25, unique=True)), + ('priority_color', models.CharField(max_length=7, unique=True)), + ('priority_color_hex', colorfield.fields.ColorField(default='#000000', max_length=18, unique=True)), + ], + options={ + 'verbose_name': 'Priority Tag', + 'verbose_name_plural': 'Priority Tags', + 'ordering': ['priority_tag'], + }, + ), + migrations.CreateModel( + name='Region', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('region_name', models.CharField(max_length=100, unique=True, verbose_name='Region')), + ('region_description', models.TextField(blank=True, null=True)), + ], + options={ + 'verbose_name': 'Region', + 'verbose_name_plural': 'Regions', + 'ordering': ['region_name'], + }, + ), + migrations.CreateModel( + name='Service', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('service_name', models.CharField(max_length=100, unique=True, verbose_name='Service')), + ('service_description', models.TextField(blank=True, null=True)), + ], + options={ + 'verbose_name': 'Service', + 'verbose_name_plural': 'Services', + 'ordering': ['service_name'], + }, + ), + migrations.CreateModel( + name='StatusCategory', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('status_category_tag', models.CharField(max_length=45, unique=True, verbose_name='Status')), + ('status_category_color', models.CharField(max_length=7, unique=True)), + ('status_category_color_hex', colorfield.fields.ColorField(default='#000000', max_length=18)), + ('status_class_design', models.CharField(max_length=50, unique=True)), + ], + options={ + 'verbose_name': 'Status Category', + 'verbose_name_plural': 'Status Categories', + }, + ), + migrations.CreateModel( + name='Subscriber', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=45)), + ('email', models.CharField(max_length=45)), + ('token', models.CharField(blank=True, max_length=128, null=True)), + ('services', models.ManyToManyField(blank=True, to='status.Service', verbose_name='Service')), + ], + options={ + 'verbose_name': 'Subscriber', + 'verbose_name_plural': 'Subscribers', + }, + ), + migrations.CreateModel( + name='SubService', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('sub_service_name', models.CharField(max_length=100, unique=True, verbose_name='Sub-Service')), + ('sub_service_description', models.TextField(blank=True, null=True)), + ], + options={ + 'verbose_name': 'Sub-Service', + 'verbose_name_plural': 'Sub-Services', + 'ordering': ['sub_service_name'], + }, + ), + migrations.CreateModel( + name='SubServiceServices', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('priority', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='status.Priority')), + ('service', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='status.Service', + verbose_name='Service')), + ('subservice', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='status.SubService', + verbose_name='Sub-Service')), + ], + options={ + 'verbose_name': 'Topology', + 'verbose_name_plural': 'Topologies', + }, + ), + migrations.CreateModel( + name='Ticket', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('ticket_id', models.CharField(max_length=10, unique=True)), + ('begin', models.DateTimeField()), + ('end', models.DateTimeField(blank=True, null=True)), + ('action_description', ckeditor.fields.RichTextField()), + ('action_notes', ckeditor.fields.RichTextField(blank=True, null=True)), + ('notify_action', models.BooleanField(choices=[(False, 'No'), (True, 'Yes')], default=False, + verbose_name='Ticket notified')), + ('category_status', + models.ForeignKey(default=3, null=True, on_delete=django.db.models.deletion.DO_NOTHING, + to='status.StatusCategory', verbose_name='Status')), + ('sub_service', + models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='status.SubService', + verbose_name='Sub-Service')), + ], + options={ + 'verbose_name': 'Ticket', + 'verbose_name_plural': 'Tickets', + }, + ), + migrations.CreateModel( + name='TicketLog', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('action_date', models.DateTimeField()), + ('action_notes', ckeditor.fields.RichTextField(blank=True, null=True, verbose_name='Notes')), + ('service_history', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='status.Ticket')), + ('service_status', + models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='status.StatusCategory')), + ], + ), + migrations.AddField( + model_name='subservice', + name='services', + field=models.ManyToManyField(through='status.SubServiceServices', to='status.Service', + verbose_name='Service'), + ), + migrations.AddField( + model_name='subscriber', + name='subservices', + field=models.ManyToManyField(blank=True, to='status.SubService', verbose_name='Sub - Service'), + ), + migrations.AddField( + model_name='region', + name='services', + field=models.ManyToManyField(to='status.Service'), + ), + migrations.AlterUniqueTogether( + name='subserviceservices', + unique_together={('service', 'subservice')}, + ), + ] diff --git a/status/migrations/0002_auto_20200406_1625.py b/status/migrations/0002_auto_20200406_1625.py new file mode 100644 index 00000000..ad3a6962 --- /dev/null +++ b/status/migrations/0002_auto_20200406_1625.py @@ -0,0 +1,17 @@ +# Generated by Django 2.0.5 on 2020-04-06 20:25 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='region', + name='services', + field=models.ManyToManyField(blank=True, to='status.Service'), + ), + ] diff --git a/status/migrations/0003_auto_20200406_1628.py b/status/migrations/0003_auto_20200406_1628.py new file mode 100644 index 00000000..dcf53f59 --- /dev/null +++ b/status/migrations/0003_auto_20200406_1628.py @@ -0,0 +1,17 @@ +# Generated by Django 2.0.5 on 2020-04-06 20:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0002_auto_20200406_1625'), + ] + + operations = [ + migrations.AlterField( + model_name='region', + name='services', + field=models.ManyToManyField(to='status.Service'), + ), + ] diff --git a/status/migrations/0004_auto_20200408_1638.py b/status/migrations/0004_auto_20200408_1638.py new file mode 100644 index 00000000..0855643a --- /dev/null +++ b/status/migrations/0004_auto_20200408_1638.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.5 on 2020-04-08 20:38 + +import ckeditor.fields +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0003_auto_20200406_1628'), + ] + + operations = [ + migrations.AlterField( + model_name='service', + name='service_description', + field=ckeditor.fields.RichTextField(blank=True, null=True), + ), + ] diff --git a/status/migrations/0005_auto_20200417_1752.py b/status/migrations/0005_auto_20200417_1752.py new file mode 100644 index 00000000..e8e638ef --- /dev/null +++ b/status/migrations/0005_auto_20200417_1752.py @@ -0,0 +1,41 @@ +# Generated by Django 3.0.5 on 2020-04-17 21:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0004_auto_20200408_1638'), + ] + + operations = [ + migrations.RenameModel( + old_name='DomainList', + new_name='EmailDomainList', + ), + migrations.AlterModelOptions( + name='emaildomainlist', + options={'verbose_name': 'Email Domain', 'verbose_name_plural': 'Email Domains'}, + ), + migrations.RenameField( + model_name='emaildomainlist', + old_name='domain_description', + new_name='email_domain_description', + ), + migrations.RenameField( + model_name='emaildomainlist', + old_name='domain_name', + new_name='email_domain_name', + ), + migrations.AlterField( + model_name='service', + name='service_description', + field=models.TextField(blank=True, null=True), + ), + migrations.AlterField( + model_name='ticket', + name='notify_action', + field=models.BooleanField(choices=[(False, 'No'), (True, 'Yes')], default=True, + verbose_name='Ticket notified'), + ), + ] diff --git a/status/migrations/0006_clientdomain.py b/status/migrations/0006_clientdomain.py new file mode 100644 index 00000000..2d6c41d0 --- /dev/null +++ b/status/migrations/0006_clientdomain.py @@ -0,0 +1,26 @@ +# Generated by Django 3.0.5 on 2020-04-18 21:36 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0005_auto_20200417_1752'), + ] + + operations = [ + migrations.CreateModel( + name='ClientDomain', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('client_domain_name', models.CharField(max_length=100, unique=True, verbose_name='Client Domain')), + ('client_domain_description', models.TextField(blank=True, null=True)), + ('services', models.ManyToManyField(to='status.Service')), + ], + options={ + 'verbose_name': 'Client Domain', + 'verbose_name_plural': 'Client Domains', + 'ordering': ['client_domain_name'], + }, + ), + ] diff --git a/status/migrations/0007_auto_20200418_1759.py b/status/migrations/0007_auto_20200418_1759.py new file mode 100644 index 00000000..c6100e77 --- /dev/null +++ b/status/migrations/0007_auto_20200418_1759.py @@ -0,0 +1,21 @@ +# Generated by Django 3.0.5 on 2020-04-18 21:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0006_clientdomain'), + ] + + operations = [ + migrations.RemoveField( + model_name='region', + name='services', + ), + migrations.AddField( + model_name='region', + name='client_domains', + field=models.ManyToManyField(to='status.ClientDomain'), + ), + ] diff --git a/status/migrations/0008_auto_20200428_1019.py b/status/migrations/0008_auto_20200428_1019.py new file mode 100644 index 00000000..1869d286 --- /dev/null +++ b/status/migrations/0008_auto_20200428_1019.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.5 on 2020-04-28 14:19 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0007_auto_20200418_1759'), + ] + + operations = [ + migrations.RenameField( + model_name='ticketlog', + old_name='service_history', + new_name='ticket', + ), + ] diff --git a/status/migrations/0009_auto_20200428_1033.py b/status/migrations/0009_auto_20200428_1033.py new file mode 100644 index 00000000..18543435 --- /dev/null +++ b/status/migrations/0009_auto_20200428_1033.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.5 on 2020-04-28 14:33 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0008_auto_20200428_1019'), + ] + + operations = [ + migrations.RenameField( + model_name='ticketlog', + old_name='service_status', + new_name='event_status', + ), + ] diff --git a/status/migrations/0010_auto_20200428_1046.py b/status/migrations/0010_auto_20200428_1046.py new file mode 100644 index 00000000..f7890c42 --- /dev/null +++ b/status/migrations/0010_auto_20200428_1046.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.5 on 2020-04-28 14:46 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0009_auto_20200428_1033'), + ] + + operations = [ + migrations.RenameField( + model_name='ticket', + old_name='category_status', + new_name='status', + ), + ] diff --git a/status/migrations/0011_auto_20200428_1103.py b/status/migrations/0011_auto_20200428_1103.py new file mode 100644 index 00000000..aa55d82f --- /dev/null +++ b/status/migrations/0011_auto_20200428_1103.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.5 on 2020-04-28 15:03 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0010_auto_20200428_1046'), + ] + + operations = [ + migrations.RenameField( + model_name='emaildomainlist', + old_name='email_domain_name', + new_name='domain', + ), + ] diff --git a/status/migrations/0012_auto_20200428_1105.py b/status/migrations/0012_auto_20200428_1105.py new file mode 100644 index 00000000..1a31aa0a --- /dev/null +++ b/status/migrations/0012_auto_20200428_1105.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.5 on 2020-04-28 15:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0011_auto_20200428_1103'), + ] + + operations = [ + migrations.AlterField( + model_name='emaildomainlist', + name='domain', + field=models.CharField(max_length=100, unique=True, verbose_name='Email Domain'), + ), + ] diff --git a/status/migrations/0013_auto_20200428_1106.py b/status/migrations/0013_auto_20200428_1106.py new file mode 100644 index 00000000..6c908c4d --- /dev/null +++ b/status/migrations/0013_auto_20200428_1106.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.5 on 2020-04-28 15:06 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0012_auto_20200428_1105'), + ] + + operations = [ + migrations.RenameField( + model_name='emaildomainlist', + old_name='email_domain_description', + new_name='description', + ), + ] diff --git a/status/migrations/0014_auto_20200428_1115.py b/status/migrations/0014_auto_20200428_1115.py new file mode 100644 index 00000000..c708b778 --- /dev/null +++ b/status/migrations/0014_auto_20200428_1115.py @@ -0,0 +1,16 @@ +# Generated by Django 3.0.5 on 2020-04-28 15:15 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0013_auto_20200428_1106'), + ] + + operations = [ + migrations.RenameModel( + old_name='EmailDomainList', + new_name='EmailDomain', + ), + ] diff --git a/status/migrations/0015_auto_20200428_1124.py b/status/migrations/0015_auto_20200428_1124.py new file mode 100644 index 00000000..aea29a07 --- /dev/null +++ b/status/migrations/0015_auto_20200428_1124.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.5 on 2020-04-28 15:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0014_auto_20200428_1115'), + ] + + operations = [ + migrations.AlterField( + model_name='emaildomain', + name='domain', + field=models.CharField(max_length=100, unique=True, verbose_name='Domain Name'), + ), + ] diff --git a/status/migrations/0016_auto_20200428_1133.py b/status/migrations/0016_auto_20200428_1133.py new file mode 100644 index 00000000..dbd689c1 --- /dev/null +++ b/status/migrations/0016_auto_20200428_1133.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.5 on 2020-04-28 15:33 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0015_auto_20200428_1124'), + ] + + operations = [ + migrations.RenameField( + model_name='ticketlog', + old_name='event_status', + new_name='status', + ), + ] diff --git a/status/migrations/0017_auto_20200428_1149.py b/status/migrations/0017_auto_20200428_1149.py new file mode 100644 index 00000000..be548c46 --- /dev/null +++ b/status/migrations/0017_auto_20200428_1149.py @@ -0,0 +1,16 @@ +# Generated by Django 3.0.5 on 2020-04-28 15:49 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0016_auto_20200428_1133'), + ] + + operations = [ + migrations.RenameModel( + old_name='StatusCategory', + new_name='Status', + ), + ] diff --git a/status/migrations/0018_auto_20200428_1733.py b/status/migrations/0018_auto_20200428_1733.py new file mode 100644 index 00000000..c9689cea --- /dev/null +++ b/status/migrations/0018_auto_20200428_1733.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.5 on 2020-04-28 21:33 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0017_auto_20200428_1149'), + ] + + operations = [ + migrations.RenameField( + model_name='status', + old_name='status_class_design', + new_name='class_design', + ), + ] diff --git a/status/migrations/0019_auto_20200428_1736.py b/status/migrations/0019_auto_20200428_1736.py new file mode 100644 index 00000000..24b4e141 --- /dev/null +++ b/status/migrations/0019_auto_20200428_1736.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.5 on 2020-04-28 21:36 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0018_auto_20200428_1733'), + ] + + operations = [ + migrations.RenameField( + model_name='status', + old_name='status_category_color_hex', + new_name='color_hex', + ), + ] diff --git a/status/migrations/0020_auto_20200428_1739.py b/status/migrations/0020_auto_20200428_1739.py new file mode 100644 index 00000000..5bd5e409 --- /dev/null +++ b/status/migrations/0020_auto_20200428_1739.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.5 on 2020-04-28 21:39 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0019_auto_20200428_1736'), + ] + + operations = [ + migrations.RenameField( + model_name='status', + old_name='status_category_color', + new_name='color_name', + ), + ] diff --git a/status/migrations/0021_auto_20200428_1745.py b/status/migrations/0021_auto_20200428_1745.py new file mode 100644 index 00000000..45717e75 --- /dev/null +++ b/status/migrations/0021_auto_20200428_1745.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.5 on 2020-04-28 21:45 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0020_auto_20200428_1739'), + ] + + operations = [ + migrations.RenameField( + model_name='status', + old_name='status_category_tag', + new_name='tag', + ), + ] diff --git a/status/migrations/0022_auto_20200428_1752.py b/status/migrations/0022_auto_20200428_1752.py new file mode 100644 index 00000000..2bcae053 --- /dev/null +++ b/status/migrations/0022_auto_20200428_1752.py @@ -0,0 +1,21 @@ +# Generated by Django 3.0.5 on 2020-04-28 21:52 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0021_auto_20200428_1745'), + ] + + operations = [ + migrations.AlterModelOptions( + name='subservice', + options={'ordering': ['name'], 'verbose_name': 'Sub-Service', 'verbose_name_plural': 'Sub-Services'}, + ), + migrations.RenameField( + model_name='subservice', + old_name='sub_service_name', + new_name='name', + ), + ] diff --git a/status/migrations/0023_auto_20200428_1753.py b/status/migrations/0023_auto_20200428_1753.py new file mode 100644 index 00000000..9e1b5b6a --- /dev/null +++ b/status/migrations/0023_auto_20200428_1753.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.5 on 2020-04-28 21:53 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0022_auto_20200428_1752'), + ] + + operations = [ + migrations.RenameField( + model_name='subservice', + old_name='sub_service_description', + new_name='description', + ), + ] diff --git a/status/migrations/0024_auto_20200428_1802.py b/status/migrations/0024_auto_20200428_1802.py new file mode 100644 index 00000000..dfd9423c --- /dev/null +++ b/status/migrations/0024_auto_20200428_1802.py @@ -0,0 +1,26 @@ +# Generated by Django 3.0.5 on 2020-04-28 22:02 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0023_auto_20200428_1753'), + ] + + operations = [ + migrations.AlterModelOptions( + name='region', + options={'ordering': ['name'], 'verbose_name': 'Region', 'verbose_name_plural': 'Regions'}, + ), + migrations.RenameField( + model_name='region', + old_name='region_description', + new_name='description', + ), + migrations.RenameField( + model_name='region', + old_name='region_name', + new_name='name', + ), + ] diff --git a/status/migrations/0025_auto_20200428_1805.py b/status/migrations/0025_auto_20200428_1805.py new file mode 100644 index 00000000..a9637658 --- /dev/null +++ b/status/migrations/0025_auto_20200428_1805.py @@ -0,0 +1,26 @@ +# Generated by Django 3.0.5 on 2020-04-28 22:05 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0024_auto_20200428_1802'), + ] + + operations = [ + migrations.AlterModelOptions( + name='clientdomain', + options={'ordering': ['name'], 'verbose_name': 'Client Domain', 'verbose_name_plural': 'Client Domains'}, + ), + migrations.RenameField( + model_name='clientdomain', + old_name='client_domain_description', + new_name='description', + ), + migrations.RenameField( + model_name='clientdomain', + old_name='client_domain_name', + new_name='name', + ), + ] diff --git a/status/migrations/0026_auto_20200428_1815.py b/status/migrations/0026_auto_20200428_1815.py new file mode 100644 index 00000000..ea6b5053 --- /dev/null +++ b/status/migrations/0026_auto_20200428_1815.py @@ -0,0 +1,26 @@ +# Generated by Django 3.0.5 on 2020-04-28 22:15 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('status', '0025_auto_20200428_1805'), + ] + + operations = [ + migrations.AlterModelOptions( + name='service', + options={'ordering': ['name'], 'verbose_name': 'Service', 'verbose_name_plural': 'Services'}, + ), + migrations.RenameField( + model_name='service', + old_name='service_description', + new_name='description', + ), + migrations.RenameField( + model_name='service', + old_name='service_name', + new_name='name', + ), + ] diff --git a/status/migrations/0027_auto_20200428_2000.py b/status/migrations/0027_auto_20200428_2000.py new file mode 100644 index 00000000..090cdd4c --- /dev/null +++ b/status/migrations/0027_auto_20200428_2000.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.5 on 2020-04-29 00:00 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0026_auto_20200428_1815'), + ] + + operations = [ + migrations.RenameField( + model_name='service', + old_name='description', + new_name='t_description', + ), + ] diff --git a/status/migrations/0028_auto_20200429_0932.py b/status/migrations/0028_auto_20200429_0932.py new file mode 100644 index 00000000..f96967a4 --- /dev/null +++ b/status/migrations/0028_auto_20200429_0932.py @@ -0,0 +1,22 @@ +# Generated by Django 3.0.5 on 2020-04-29 13:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0027_auto_20200428_2000'), + ] + + operations = [ + migrations.RemoveField( + model_name='service', + name='t_description', + ), + migrations.AddField( + model_name='service', + name='service_description', + field=models.TextField(blank=True, null=True, verbose_name='Description'), + ), + ] diff --git a/status/migrations/0029_auto_20200429_0940.py b/status/migrations/0029_auto_20200429_0940.py new file mode 100644 index 00000000..d0eaae72 --- /dev/null +++ b/status/migrations/0029_auto_20200429_0940.py @@ -0,0 +1,32 @@ +# Generated by Django 3.0.5 on 2020-04-29 13:40 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0028_auto_20200429_0932'), + ] + + operations = [ + migrations.AlterModelOptions( + name='priority', + options={'ordering': ['tag'], 'verbose_name': 'Priority', 'verbose_name_plural': 'Priorities'}, + ), + migrations.RenameField( + model_name='priority', + old_name='priority_color', + new_name='color', + ), + migrations.RenameField( + model_name='priority', + old_name='priority_color_hex', + new_name='color_hex', + ), + migrations.RenameField( + model_name='priority', + old_name='priority_tag', + new_name='tag', + ), + ] diff --git a/status/migrations/0030_auto_20200429_0948.py b/status/migrations/0030_auto_20200429_0948.py new file mode 100644 index 00000000..4057d2e4 --- /dev/null +++ b/status/migrations/0030_auto_20200429_0948.py @@ -0,0 +1,31 @@ +# Generated by Django 3.0.5 on 2020-04-29 13:48 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0029_auto_20200429_0940'), + ] + + operations = [ + migrations.RemoveField( + model_name='subservice', + name='services', + ), + migrations.CreateModel( + name='Topology', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('priority', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='status.Priority')), + ('service', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='status.Service', verbose_name='Service')), + ('subservices', models.ManyToManyField(blank=True, to='status.SubService', verbose_name='Sub - Service')), + ], + options={ + 'verbose_name': 'Topology', + 'verbose_name_plural': 'Topologies', + }, + ), + ] diff --git a/status/migrations/0031_remove_topology_priority.py b/status/migrations/0031_remove_topology_priority.py new file mode 100644 index 00000000..900ce474 --- /dev/null +++ b/status/migrations/0031_remove_topology_priority.py @@ -0,0 +1,17 @@ +# Generated by Django 3.0.5 on 2020-04-29 14:03 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0030_auto_20200429_0948'), + ] + + operations = [ + migrations.RemoveField( + model_name='topology', + name='priority', + ), + ] diff --git a/status/migrations/0032_topology_priority.py b/status/migrations/0032_topology_priority.py new file mode 100644 index 00000000..52d00913 --- /dev/null +++ b/status/migrations/0032_topology_priority.py @@ -0,0 +1,20 @@ +# Generated by Django 3.0.5 on 2020-04-29 14:04 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0031_remove_topology_priority'), + ] + + operations = [ + migrations.AddField( + model_name='topology', + name='priority', + field=models.ForeignKey(blank=True, default=1, on_delete=django.db.models.deletion.DO_NOTHING, to='status.Priority'), + preserve_default=False, + ), + ] diff --git a/status/migrations/0033_auto_20200429_1006.py b/status/migrations/0033_auto_20200429_1006.py new file mode 100644 index 00000000..db8ee38e --- /dev/null +++ b/status/migrations/0033_auto_20200429_1006.py @@ -0,0 +1,19 @@ +# Generated by Django 3.0.5 on 2020-04-29 14:06 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0032_topology_priority'), + ] + + operations = [ + migrations.AlterField( + model_name='topology', + name='priority', + field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='status.Priority'), + ), + ] diff --git a/status/migrations/0034_auto_20200429_1006.py b/status/migrations/0034_auto_20200429_1006.py new file mode 100644 index 00000000..104aa5c7 --- /dev/null +++ b/status/migrations/0034_auto_20200429_1006.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.5 on 2020-04-29 14:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0033_auto_20200429_1006'), + ] + + operations = [ + migrations.AlterField( + model_name='topology', + name='subservices', + field=models.ManyToManyField(to='status.SubService', verbose_name='Sub - Service'), + ), + ] diff --git a/status/migrations/0035_delete_subserviceservices.py b/status/migrations/0035_delete_subserviceservices.py new file mode 100644 index 00000000..f57cbade --- /dev/null +++ b/status/migrations/0035_delete_subserviceservices.py @@ -0,0 +1,16 @@ +# Generated by Django 3.0.5 on 2020-04-29 14:20 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0034_auto_20200429_1006'), + ] + + operations = [ + migrations.DeleteModel( + name='SubServiceServices', + ), + ] diff --git a/status/migrations/0036_auto_20200429_1103.py b/status/migrations/0036_auto_20200429_1103.py new file mode 100644 index 00000000..246cabcb --- /dev/null +++ b/status/migrations/0036_auto_20200429_1103.py @@ -0,0 +1,19 @@ +# Generated by Django 3.0.5 on 2020-04-29 15:03 + +import ckeditor.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0035_delete_subserviceservices'), + ] + + operations = [ + migrations.AlterField( + model_name='clientdomain', + name='description', + field=ckeditor.fields.RichTextField(blank=True, null=True, verbose_name='Notes'), + ), + ] diff --git a/status/migrations/0037_auto_20200429_1108.py b/status/migrations/0037_auto_20200429_1108.py new file mode 100644 index 00000000..a2268f1e --- /dev/null +++ b/status/migrations/0037_auto_20200429_1108.py @@ -0,0 +1,19 @@ +# Generated by Django 3.0.5 on 2020-04-29 15:08 + +import ckeditor.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0036_auto_20200429_1103'), + ] + + operations = [ + migrations.AlterField( + model_name='service', + name='service_description', + field=ckeditor.fields.RichTextField(blank=True, null=True, verbose_name='Description'), + ), + ] diff --git a/status/migrations/0038_auto_20200429_1122.py b/status/migrations/0038_auto_20200429_1122.py new file mode 100644 index 00000000..5a285c90 --- /dev/null +++ b/status/migrations/0038_auto_20200429_1122.py @@ -0,0 +1,19 @@ +# Generated by Django 3.0.5 on 2020-04-29 15:22 + +import ckeditor.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0037_auto_20200429_1108'), + ] + + operations = [ + migrations.AlterField( + model_name='emaildomain', + name='description', + field=ckeditor.fields.RichTextField(blank=True, null=True, verbose_name='Description'), + ), + ] diff --git a/status/migrations/0039_auto_20200429_1131.py b/status/migrations/0039_auto_20200429_1131.py new file mode 100644 index 00000000..09bf4d7b --- /dev/null +++ b/status/migrations/0039_auto_20200429_1131.py @@ -0,0 +1,37 @@ +# Generated by Django 3.0.5 on 2020-04-29 15:31 + +import ckeditor.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0038_auto_20200429_1122'), + ] + + operations = [ + migrations.RenameField( + model_name='emaildomain', + old_name='description', + new_name='domain_description', + ), + migrations.RemoveField( + model_name='clientdomain', + name='description', + ), + migrations.RemoveField( + model_name='region', + name='description', + ), + migrations.AddField( + model_name='clientdomain', + name='domain_description', + field=ckeditor.fields.RichTextField(blank=True, null=True, verbose_name='Description'), + ), + migrations.AddField( + model_name='region', + name='region_description', + field=ckeditor.fields.RichTextField(blank=True, null=True, verbose_name='Description'), + ), + ] diff --git a/status/migrations/0040_auto_20200429_1137.py b/status/migrations/0040_auto_20200429_1137.py new file mode 100644 index 00000000..cc10cd63 --- /dev/null +++ b/status/migrations/0040_auto_20200429_1137.py @@ -0,0 +1,23 @@ +# Generated by Django 3.0.5 on 2020-04-29 15:37 + +import ckeditor.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0039_auto_20200429_1131'), + ] + + operations = [ + migrations.RemoveField( + model_name='subservice', + name='description', + ), + migrations.AddField( + model_name='subservice', + name='subservice_description', + field=ckeditor.fields.RichTextField(blank=True, null=True, verbose_name='Description'), + ), + ] diff --git a/status/migrations/0041_auto_20200501_1148.py b/status/migrations/0041_auto_20200501_1148.py new file mode 100644 index 00000000..9aa8b388 --- /dev/null +++ b/status/migrations/0041_auto_20200501_1148.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.5 on 2020-05-01 15:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0040_auto_20200429_1137'), + ] + + operations = [ + migrations.AlterField( + model_name='subscriber', + name='subservices', + field=models.ManyToManyField(blank=True, related_name='Subscriber', to='status.SubService', verbose_name='Sub - Service'), + ), + ] diff --git a/status/migrations/0042_auto_20200501_1149.py b/status/migrations/0042_auto_20200501_1149.py new file mode 100644 index 00000000..033c8d4c --- /dev/null +++ b/status/migrations/0042_auto_20200501_1149.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.5 on 2020-05-01 15:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0041_auto_20200501_1148'), + ] + + operations = [ + migrations.AlterField( + model_name='subscriber', + name='subservices', + field=models.ManyToManyField(blank=True, to='status.SubService', verbose_name='Sub - Service'), + ), + ] diff --git a/status/migrations/0043_auto_20200505_0913.py b/status/migrations/0043_auto_20200505_0913.py new file mode 100644 index 00000000..6b413038 --- /dev/null +++ b/status/migrations/0043_auto_20200505_0913.py @@ -0,0 +1,19 @@ +# Generated by Django 3.0.5 on 2020-05-05 13:13 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0042_auto_20200501_1149'), + ] + + operations = [ + migrations.AlterField( + model_name='ticket', + name='sub_service', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='status.SubService', verbose_name='Sub-Service'), + ), + ] diff --git a/status/migrations/0044_service_scope.py b/status/migrations/0044_service_scope.py new file mode 100644 index 00000000..24c756fe --- /dev/null +++ b/status/migrations/0044_service_scope.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.7 on 2020-06-22 18:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0043_auto_20200505_0913'), + ] + + operations = [ + migrations.AddField( + model_name='service', + name='scope', + field=models.CharField(blank=True, choices=[('multi_domain', 'Multi-Domain'), ('inter_domain', 'Inter-Domain')], default='multi_domain', max_length=30), + ), + ] diff --git a/status/migrations/0045_auto_20200622_1448.py b/status/migrations/0045_auto_20200622_1448.py new file mode 100644 index 00000000..a7e281ea --- /dev/null +++ b/status/migrations/0045_auto_20200622_1448.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.7 on 2020-06-22 18:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0044_service_scope'), + ] + + operations = [ + migrations.AlterField( + model_name='service', + name='scope', + field=models.CharField(choices=[('multi_domain', 'Multi-Domain'), ('inter_domain', 'Inter-Domain')], default='multi_domain', max_length=30), + ), + ] diff --git a/status/migrations/0046_auto_20200706_1103.py b/status/migrations/0046_auto_20200706_1103.py new file mode 100644 index 00000000..46a1ae72 --- /dev/null +++ b/status/migrations/0046_auto_20200706_1103.py @@ -0,0 +1,20 @@ +# Generated by Django 3.0.7 on 2020-07-06 15:03 + +from django.db import migrations, models + +import status.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0045_auto_20200622_1448'), + ] + + operations = [ + migrations.AlterField( + model_name='ticket', + name='ticket_id', + field=models.CharField(default=status.models.get_new_ticket_id, max_length=10, unique=True), + ), + ] diff --git a/status/migrations/0047_auto_20200717_1618.py b/status/migrations/0047_auto_20200717_1618.py new file mode 100644 index 00000000..3b36ea5e --- /dev/null +++ b/status/migrations/0047_auto_20200717_1618.py @@ -0,0 +1,22 @@ +# Generated by Django 3.0.7 on 2020-07-17 20:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0046_auto_20200706_1103'), + ] + + operations = [ + migrations.RemoveField( + model_name='ticket', + name='sub_service', + ), + migrations.AddField( + model_name='ticket', + name='sub_service', + field=models.ManyToManyField(blank=True, to='status.SubService', verbose_name='Sub - Services'), + ), + ] diff --git a/status/migrations/0048_auto_20200717_1636.py b/status/migrations/0048_auto_20200717_1636.py new file mode 100644 index 00000000..6876c58d --- /dev/null +++ b/status/migrations/0048_auto_20200717_1636.py @@ -0,0 +1,23 @@ +# Generated by Django 3.0.7 on 2020-07-17 20:36 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0047_auto_20200717_1618'), + ] + + operations = [ + migrations.RemoveField( + model_name='ticket', + name='sub_service', + ), + migrations.AddField( + model_name='ticket', + name='sub_service', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='status.SubService', verbose_name='Sub-Service'), + ), + ] diff --git a/status/migrations/0049_auto_20200720_1531.py b/status/migrations/0049_auto_20200720_1531.py new file mode 100644 index 00000000..642496d4 --- /dev/null +++ b/status/migrations/0049_auto_20200720_1531.py @@ -0,0 +1,22 @@ +# Generated by Django 3.0.7 on 2020-07-20 19:31 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0048_auto_20200717_1636'), + ] + + operations = [ + migrations.RemoveField( + model_name='ticket', + name='sub_service', + ), + migrations.AddField( + model_name='ticket', + name='sub_service', + field=models.ManyToManyField(blank=True, to='status.SubService', verbose_name='Sub - Services'), + ), + ] diff --git a/status/migrations/0050_auto_20200721_1526.py b/status/migrations/0050_auto_20200721_1526.py new file mode 100644 index 00000000..b82b87e5 --- /dev/null +++ b/status/migrations/0050_auto_20200721_1526.py @@ -0,0 +1,23 @@ +# Generated by Django 3.0.7 on 2020-07-21 19:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0049_auto_20200720_1531'), + ] + + operations = [ + migrations.AddField( + model_name='ticket', + name='client_domains', + field=models.ManyToManyField(blank=True, to='status.ClientDomain', verbose_name='Client Domains'), + ), + migrations.AddField( + model_name='ticket', + name='services', + field=models.ManyToManyField(blank=True, to='status.Service', verbose_name='Service'), + ), + ] diff --git a/status/migrations/0051_status_visual_order.py b/status/migrations/0051_status_visual_order.py new file mode 100644 index 00000000..c14d5112 --- /dev/null +++ b/status/migrations/0051_status_visual_order.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.8 on 2020-07-24 18:40 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('status', '0050_auto_20200721_1526'), + ] + + operations = [ + migrations.AddField( + model_name='status', + name='visual_order', + field=models.IntegerField(blank=True, default=1), + ), + ] From 0f913577b1edbca16ce74ab7b6485c5a09670d5e Mon Sep 17 00:00:00 2001 From: Austin Uwate <111798627+Auwate@users.noreply.github.com> Date: Tue, 9 Apr 2024 12:57:48 -0400 Subject: [PATCH 44/49] Update services_status.html Align with master repo --- status/templates/services_status.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/status/templates/services_status.html b/status/templates/services_status.html index 6143f1a9..6c0878e0 100644 --- a/status/templates/services_status.html +++ b/status/templates/services_status.html @@ -17,7 +17,7 @@

Recent Events

{#Describe this "for" statement functionality#} - {% for ticket in ticket_list %} + {% for ticket in ticket_list %}
From 8838a68bd9e64521e6364b346be43d6381607e84 Mon Sep 17 00:00:00 2001 From: Austin Uwate <111798627+Auwate@users.noreply.github.com> Date: Tue, 9 Apr 2024 12:59:38 -0400 Subject: [PATCH 45/49] Update test_models.py Align with master repo From 0da35f2178f3d89debcc859bce014f2f765a077e Mon Sep 17 00:00:00 2001 From: Austin Uwate <111798627+Auwate@users.noreply.github.com> Date: Tue, 9 Apr 2024 13:00:37 -0400 Subject: [PATCH 46/49] Update test_models.py Align with master repo --- status/tests/test_models.py | 1 + 1 file changed, 1 insertion(+) diff --git a/status/tests/test_models.py b/status/tests/test_models.py index 18574eb1..6a49b975 100644 --- a/status/tests/test_models.py +++ b/status/tests/test_models.py @@ -24,3 +24,4 @@ def test_service_integrity(self): Service.objects.create(name="Service test") assert Service.objects.count() == 1 + From 2d6b08104b6639283b365630b79b1a6fe657be4f Mon Sep 17 00:00:00 2001 From: Austin Uwate <111798627+Auwate@users.noreply.github.com> Date: Tue, 9 Apr 2024 13:02:40 -0400 Subject: [PATCH 47/49] Update test_models.py Align with master repo --- status/tests/test_models.py | 1 - 1 file changed, 1 deletion(-) diff --git a/status/tests/test_models.py b/status/tests/test_models.py index 6a49b975..18574eb1 100644 --- a/status/tests/test_models.py +++ b/status/tests/test_models.py @@ -24,4 +24,3 @@ def test_service_integrity(self): Service.objects.create(name="Service test") assert Service.objects.count() == 1 - From 07a3c28aa2d4c55eae6fa210a2b8ea6c6b908f97 Mon Sep 17 00:00:00 2001 From: Auwate Date: Tue, 9 Apr 2024 13:22:01 -0400 Subject: [PATCH 48/49] - Commit: Fixing unit test --- status/tests/test_views.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/status/tests/test_views.py b/status/tests/test_views.py index 36bd51d8..70a33771 100644 --- a/status/tests/test_views.py +++ b/status/tests/test_views.py @@ -7,10 +7,22 @@ class TestTickets(TestCase): def test_ticket_latest_action_notes_and_date_exist (self): + # Create all the status objects + initial_objects = [ + {"tag":"Alert", "color_name": "Orange", "color_hex":"#FC810D", "class_design": "fas fa-exclamation-circle"}, + {"tag":"In Process", "color_name": "Yellow", "color_hex":"#DBBF07", "class_design": "fas fa-tools"}, + {"tag":"No Issues", "color_name": "Green", "color_hex":"#0AC739", "class_design": "fas fa-check-circle"}, + {"tag":"Outage", "color_name": "Red", "color_hex":"#F00004", "class_design": "fas fa-times-circle"}, + {"tag":"Planned", "color_name": "Blue", "color_hex":"#041DBF", "class_design": "far fa-calendar-alt"} + ] + + for data_objects in initial_objects: + Status.objects.create(**data_objects) + # Create the required fields sub_serv = SubService.objects.create(name='Test_Sub', subservice_description='') serv = Service.objects.create(name='Test_Service', service_description='', scope='Inter-Domain') - stat = Status.objects.create(tag= "Alert", color_name = "Orange", color_hex = "#FC810D", class_design = "fas fa-exclamation-circle") + stat = Status.objects.get(tag="No Issues") client = ClientDomain.objects.create(name='Test_Client', domain_description='') client.services.set([serv]) @@ -31,7 +43,6 @@ def test_ticket_latest_action_notes_and_date_exist (self): # Get the queryset for the ticket_list queryset = response.context['ticket_list'] - testing_list = [] # Make sure the attribute exists for element in queryset: From 0f242f7a1cbbd4c4854aa302d733d163b6c74eac Mon Sep 17 00:00:00 2001 From: Austin Uwate <111798627+Auwate@users.noreply.github.com> Date: Tue, 9 Apr 2024 15:49:28 -0400 Subject: [PATCH 49/49] Update Dockerfile --- deploy/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/Dockerfile b/deploy/Dockerfile index f8d31aeb..51f86073 100644 --- a/deploy/Dockerfile +++ b/deploy/Dockerfile @@ -6,7 +6,7 @@ RUN apt-get install -y python3-pip git nginx libmariadb-dev-compat WORKDIR /opt -RUN git clone https://github.com/Auwate/Services-Status.git +RUN git clone https://github.com/amlight/Services-Status.git WORKDIR /opt/Services-Status