Skip to content

Commit

Permalink
Merge pull request #41 from fromedwin/develop
Browse files Browse the repository at this point in the history
Releave v0.9.2
  • Loading branch information
sebastienbarbier authored May 20, 2024
2 parents 8a1234e + 743c637 commit 6e13955
Show file tree
Hide file tree
Showing 25 changed files with 271 additions and 266 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
See for sample https://raw.githubusercontent.com/favoloso/conventional-changelog-emoji/master/CHANGELOG.md
-->

## [0.9.2] - 2024-05-20
### Improvements
- Fix incident duration calculation (#29)
- Minor modification to README.md (#34)
- Update dependencies (#36)
- Minor updates on website (#37)

## [0.9.1] - 2023-09-26
### 🛠 Improvements
- Make SSL alert shorter (#30)
Expand Down
16 changes: 14 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,28 @@ Metrics are focused on **availability**, with future integration for **performan
```bash
python3 -m venv apps
source apps/bin/activate

# psycopg2 lib Apple silicon specific
# brew install openssl
# export LIBRARY_PATH=$LIBRARY_PATH:/opt/homebrew/opt/openssl/lib

pip install -r django/requirements.txt

# Generate random SECRET_KEY and inject in .env file
SECRET_KEY=$(LC_CTYPE=C tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 32)
# Or
# SECRET_KEY=$(openssl rand -base64 64)

echo "SECRET_KEY=$SECRET_KEY" >> .env

# Create superuser to access django admin panel
python django/manage.py createsuperuser
# For development, add DEBUG=1 in .env file
# echo "DEBUG=1" >> .env

# For a first setup, run migrate and createsuperuser
python django/manage.py migrate
# Create superuser to access django admin panel (migrate first for the first setup)
python django/manage.py createsuperuser

python django/manage.py tailwind install
```

Expand Down
20 changes: 20 additions & 0 deletions django/core/decorators.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from functools import wraps
from django.contrib import messages
from django.shortcuts import redirect
from django.http import HttpResponse
from django.shortcuts import render

def user_approved_in_waiting_list(user):
if user.is_staff:
return True
return False

def waiting_list_approved_only():
def decorator(view):
@wraps(view)
def _wrapped_view(request, *args, **kwargs):
if not user_approved_in_waiting_list(request.user):
return render(request, 'waiting_list.html')
return view(request, *args, **kwargs)
return _wrapped_view
return decorator
1 change: 1 addition & 0 deletions django/core/middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ def middleware(request):
and request.user.projects.count() == 0\
and request.path != '/welcome/'\
and request.path != '/logout/'\
and request.path != '/settings/user/delete'\
and not request.path.startswith('/admin/')\
and request.path != '/restricted/':
response = HttpResponseRedirect('/welcome/')
Expand Down
4 changes: 3 additions & 1 deletion django/core/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/

VERSION = [0, 9, 1]
VERSION = [0, 9, 2]

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.environ.get('SECRET_KEY')
Expand All @@ -46,6 +46,7 @@

IS_SERVICE_DOWN_SCRAPE_INTERVAL_SECONDS = 60
IS_SERVICE_DOWN_TRIGGER_OUTRAGE_MINUTES = 5
IS_SERVICE_DOWN_TRIGGER_WARNING_MINUTES = 2
# Run Lighthouse every 60 minutes
LIGHTHOUSE_SCRAPE_INTERVAL_MINUTES = int(os.environ.get('LIGHTHOUSE_SCRAPE_INTERVAL_MINUTES', 60))

Expand Down Expand Up @@ -151,6 +152,7 @@
]

MIDDLEWARE = (
'allauth.account.middleware.AccountMiddleware',
'django_prometheus.middleware.PrometheusBeforeMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
Expand Down
30 changes: 30 additions & 0 deletions django/core/templates/waiting_list.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{% extends 'base.html' %}
{% load socialaccount account tailwind_tags %}

{% block body %}

<div class="flex w-screen h-screen items-center justify-center">
<form method="post" class="py-5 space-y-8 divide-y divide-gray-200">
<div class="bg-white shadow sm:rounded-lg">
<div class="px-4 py-5 sm:p-6">
<h3 class="text-lg leading-6 font-medium text-gray-900">

</h3>
<div class="mt-2 max-w-xl text-sm text-gray-500">
<p>
You are currently on waiting list You can cancel at any time.
</p>
</div>
<div class="mt-5 flex justify-between gap-8">
<a href="{% url 'user_delete' %}" class="whitespace-nowrap font-medium text-red-700 hover:text-red-600">
Delete your account
</a>
<a href="{% url 'logout' %}?next=/" class="whitespace-nowrap font-medium text-black-700 hover:text-black-600">
Logout
</a>
</div>
</div>
</div>
</form>
</div>
{% endblock %}
3 changes: 3 additions & 0 deletions django/dashboard/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,13 @@
from allauth.socialaccount.models import SocialApp
from rest_framework.authtoken.models import Token

from core.decorators import waiting_list_approved_only

from workers.models import Server
from incidents.models import Incident

@login_required
@waiting_list_approved_only()
def dashboard(request):

# If user has no project we redirect to /welcome/
Expand Down
2 changes: 1 addition & 1 deletion django/incidents/handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def handleAlert(request, alert):

incident = Incident(
alert_name = alert["labels"]["alertname"],
starts_at = getStartsAt(alert),
starts_at = getStartsAt(alert, settings),
ends_at = getEndsAt(alert),
status = getStatus(alert),
severity = getSeverity(alert),
Expand Down
8 changes: 7 additions & 1 deletion django/incidents/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,14 @@ def getSeverity(alert):
return INCIDENT_SEVERITY['CRITICAL']
return INCIDENT_SEVERITY['UNKNOWN']

def getStartsAt(alert):
def getStartsAt(alert, settings):
starts_at = timezone.make_aware(timezone.datetime.strptime(alert["startsAt"].split(".")[0], "%Y-%m-%dT%H:%M:%S"))
# Based on the severity, we update starting time to include the time before the alert
severity = getSeverity(alert)
if severity == INCIDENT_SEVERITY['CRITICAL']:
starts_at = starts_at - timedelta(minutes=settings.IS_SERVICE_DOWN_TRIGGER_OUTRAGE_MINUTES)
elif severity == INCIDENT_SEVERITY['WARNING']:
starts_at = starts_at - timedelta(minutes=settings.IS_SERVICE_DOWN_TRIGGER_WARNING_MINUTES)
return starts_at

def getEndsAt(alert):
Expand Down
3 changes: 3 additions & 0 deletions django/incidents/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,15 @@
from rest_framework.decorators import api_view
from rest_framework.response import Response

from core.decorators import waiting_list_approved_only
from .models import Incident
from projects.models import Project
from availability.models import Service

from constants import INCIDENT_SEVERITY, INCIDENT_STATUS

@login_required
@waiting_list_approved_only()
def incidents(request, id, year=None, month=None, day=None):
"""
List of incidents for a specific projects
Expand Down Expand Up @@ -93,6 +95,7 @@ def incidents(request, id, year=None, month=None, day=None):


@login_required
@waiting_list_approved_only()
def incidents_force_online(request, service_id):

service = get_object_or_404(Service, pk=service_id)
Expand Down
5 changes: 5 additions & 0 deletions django/notifications/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@
from projects.models import Project
from incidents.models import Incident

from core.decorators import waiting_list_approved_only
from django.conf import settings

@login_required
@waiting_list_approved_only()
def project_notifications(request, id):
"""
Show current project status
Expand All @@ -40,6 +42,7 @@ def project_notifications(request, id):
})

@login_required
@waiting_list_approved_only()
def email_form(request, application_id, email_id=None):

email = None
Expand Down Expand Up @@ -73,6 +76,7 @@ def email_form(request, application_id, email_id=None):
})

@login_required
@waiting_list_approved_only()
def email_delete(request, application_id, email_id):

email = get_object_or_404(Emails, pk=email_id)
Expand All @@ -81,6 +85,7 @@ def email_delete(request, application_id, email_id):
return redirect(reverse('project_notifications', args=[application_id]))

@login_required
@waiting_list_approved_only()
def messages(request):

# If user has no project we redirect to /welcome/
Expand Down
2 changes: 0 additions & 2 deletions django/performances/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,4 @@
path('api/request/<uuid:server_id>/performance', fetch_performance, name='fetch_performance'),
# Report lighthouse performance
path('api/report/<uuid:server_id>/performance/<int:performance_id>', save_report, name='fetch_performance'),
# Report lighthouse performance

]
7 changes: 7 additions & 0 deletions django/performances/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from projects.models import Project
from .models import Performance, Report
from .forms import PerformanceForm
from core.decorators import waiting_list_approved_only

def get_domaines_from_performances(performances_list):
domains = {}
Expand Down Expand Up @@ -66,6 +67,7 @@ def find_page(pages, performance, depth=0, path_parent=''):
return domains

@login_required
@waiting_list_approved_only()
def project_performances(request, id):
"""
Show current project status
Expand All @@ -81,6 +83,7 @@ def project_performances(request, id):
})

@login_required
@waiting_list_approved_only()
def performance_form(request, application_id, performance_id=None):
"""
Create or edit service model
Expand Down Expand Up @@ -118,6 +121,7 @@ def performance_form(request, application_id, performance_id=None):
})

@login_required
@waiting_list_approved_only()
def performance_delete(request, application_id, performance_id):
"""
Delete service model
Expand All @@ -129,6 +133,7 @@ def performance_delete(request, application_id, performance_id):
return redirect(reverse('project_performances', args=[application_id]))

@login_required
@waiting_list_approved_only()
def performance_rerun(request, application_id, performance_id):
"""
Delete service model
Expand All @@ -141,6 +146,7 @@ def performance_rerun(request, application_id, performance_id):
return redirect(reverse('project_performances', args=[application_id])+'#noanimations')

@login_required
@waiting_list_approved_only()
def project_performances_report_viewer(request, id, report_id):
"""
Show current project status
Expand All @@ -158,6 +164,7 @@ def project_performances_report_viewer(request, id, report_id):
})

@login_required
@waiting_list_approved_only()
def performances_all(request):

domains = {}
Expand Down
7 changes: 7 additions & 0 deletions django/projects/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

from .forms import ProjectForm, ProjectCreateForm

from core.decorators import waiting_list_approved_only
from projects.models import Project
from availability.models import Service, HTTPCodeService, HTTPMockedCodeService
from workers.models import Server
Expand All @@ -24,6 +25,7 @@
from performances.models import Performance

@login_required
@waiting_list_approved_only()
def project(request, id):
"""
Show current project status
Expand Down Expand Up @@ -53,6 +55,7 @@ def project(request, id):
})

@login_required
@waiting_list_approved_only()
def project_performances(request, id):
"""
Show current project status
Expand All @@ -65,6 +68,7 @@ def project_performances(request, id):
})

@login_required
@waiting_list_approved_only()
def projects_form(request, id=None):
"""
Create or edit project model
Expand Down Expand Up @@ -96,6 +100,7 @@ def projects_form(request, id=None):
})

@login_required
@waiting_list_approved_only()
def projects_delete(request, id=None):
"""
Delete project model
Expand All @@ -106,6 +111,7 @@ def projects_delete(request, id=None):
return redirect(reverse('dashboard'))

@login_required
@waiting_list_approved_only()
def projects_add(request):
"""
Create or edit project model
Expand All @@ -125,6 +131,7 @@ def projects_add(request):
})

@login_required
@waiting_list_approved_only()
def projects_welcome(request):
"""
Create or edit project model
Expand Down
Loading

0 comments on commit 6e13955

Please sign in to comment.