diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e5d51f7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.swp +app/static +app/dashboard/migrations/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..88e1c39 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,34 @@ +### DEV ENV ### +FROM python:3.9.16-slim-bullseye AS app_dev + +ARG APP_UID=1000 +ARG APP_GID=1000 + +ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED 1 + +WORKDIR /app/ + +RUN apt update && apt install -y procps less netcat libmariadb-dev-compat libmariadb-dev mariadb-client gcc nginx-light + +COPY ./docker/nginx/updatesdashboard.conf /etc/nginx/sites-enabled/updatesdashboard.conf +RUN rm -f /etc/nginx/sites-enabled/default + +COPY ./docker/scripts/entrypoint.dev.sh /usr/local/bin/entrypoint +RUN chmod +x /usr/local/bin/entrypoint + +RUN addgroup --system gunicorn --gid ${APP_GID} && adduser --uid ${APP_UID} --system --disabled-login --group gunicorn + +RUN pip install --upgrade pip +COPY ./app/requirements.txt . +RUN pip install -r requirements.txt + +COPY ./app/ . +COPY ./app/updatesdashboard/.env.dev ./updatesdashboard/.env + +RUN python /app/manage.py makemigrations +RUN python /app/manage.py makemigrations dashboard + +RUN rm -f ./updatesdashboard/.env + +ENTRYPOINT ["/usr/local/bin/entrypoint","mysql","3306"] diff --git a/README.md b/README.md index 66f8e8b..7523f7a 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,14 @@ It runs with Django. The information are daily generated by an ansible playbook, ## Install +### Run with docker + +``` +docker-compose up +``` + +### On-premise + Dependencies in case of Debian 10. ``` apt install python3-venv libmariadb-dev-compat libmariadb-dev mariadb-client python3-dev gcc diff --git a/dashboard/__init__.py b/app/dashboard/__init__.py similarity index 100% rename from dashboard/__init__.py rename to app/dashboard/__init__.py diff --git a/dashboard/admin.py b/app/dashboard/admin.py similarity index 76% rename from dashboard/admin.py rename to app/dashboard/admin.py index 4898622..edda903 100644 --- a/dashboard/admin.py +++ b/app/dashboard/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from .models import Os, ServerStatus, Server, PackageStatus, Team +from .models import Os, ServerStatus, Server, PackageStatus class OsAdmin(admin.ModelAdmin): @@ -10,4 +10,3 @@ admin.site.register(Os, OsAdmin) admin.site.register(ServerStatus) admin.site.register(PackageStatus) admin.site.register(Server) -admin.site.register(Team) diff --git a/dashboard/apps.py b/app/dashboard/apps.py similarity index 100% rename from dashboard/apps.py rename to app/dashboard/apps.py diff --git a/dashboard/fixtures/os.yaml b/app/dashboard/fixtures/os.yaml similarity index 100% rename from dashboard/fixtures/os.yaml rename to app/dashboard/fixtures/os.yaml diff --git a/dashboard/forms.py b/app/dashboard/forms.py similarity index 100% rename from dashboard/forms.py rename to app/dashboard/forms.py diff --git a/dashboard/models.py b/app/dashboard/models.py similarity index 84% rename from dashboard/models.py rename to app/dashboard/models.py index 3c4c4f3..5cfc66e 100644 --- a/dashboard/models.py +++ b/app/dashboard/models.py @@ -32,32 +32,9 @@ class Os(models.Model): -class Group(models.Model): - name = models.CharField(max_length=50, unique=True) - full_name = models.CharField(max_length=50, null=True) - - def __str__(self): - if self.full_name: - return self.full_name - else: - return self.name - - - -class Team(models.Model): - name = models.CharField(max_length=20) - color = models.CharField(max_length=20, unique=True) - - def __str__(self): - return self.name - - - class Server(models.Model): hostname = models.CharField(max_length=200, unique=True) os = models.ForeignKey(Os, null=True, related_name="servers", on_delete=models.SET_NULL) - group = models.ForeignKey(Group, null=True, blank=True, related_name="groups", on_delete=models.SET_NULL) - team = models.ForeignKey(Team, null=True, related_name="teams", on_delete=models.SET_NULL) def __str__(self): return self.hostname diff --git a/dashboard/module.py b/app/dashboard/module.py similarity index 100% rename from dashboard/module.py rename to app/dashboard/module.py diff --git a/dashboard/static/css/bootstrap-rtl.css b/app/dashboard/static/css/bootstrap-rtl.css similarity index 100% rename from dashboard/static/css/bootstrap-rtl.css rename to app/dashboard/static/css/bootstrap-rtl.css diff --git a/dashboard/static/css/bootstrap-rtl.min.css b/app/dashboard/static/css/bootstrap-rtl.min.css similarity index 100% rename from dashboard/static/css/bootstrap-rtl.min.css rename to app/dashboard/static/css/bootstrap-rtl.min.css diff --git a/dashboard/static/css/bootstrap.css b/app/dashboard/static/css/bootstrap.css similarity index 100% rename from dashboard/static/css/bootstrap.css rename to app/dashboard/static/css/bootstrap.css diff --git a/dashboard/static/css/bootstrap.min.css b/app/dashboard/static/css/bootstrap.min.css similarity index 100% rename from dashboard/static/css/bootstrap.min.css rename to app/dashboard/static/css/bootstrap.min.css diff --git a/dashboard/static/css/custom.css b/app/dashboard/static/css/custom.css similarity index 100% rename from dashboard/static/css/custom.css rename to app/dashboard/static/css/custom.css diff --git a/dashboard/static/css/datatables.min.css b/app/dashboard/static/css/datatables.min.css similarity index 100% rename from dashboard/static/css/datatables.min.css rename to app/dashboard/static/css/datatables.min.css diff --git a/dashboard/static/css/plugins/morris.css b/app/dashboard/static/css/plugins/morris.css similarity index 100% rename from dashboard/static/css/plugins/morris.css rename to app/dashboard/static/css/plugins/morris.css diff --git a/dashboard/static/css/sb-admin-rtl.css b/app/dashboard/static/css/sb-admin-rtl.css similarity index 100% rename from dashboard/static/css/sb-admin-rtl.css rename to app/dashboard/static/css/sb-admin-rtl.css diff --git a/dashboard/static/css/sb-admin.css b/app/dashboard/static/css/sb-admin.css similarity index 100% rename from dashboard/static/css/sb-admin.css rename to app/dashboard/static/css/sb-admin.css diff --git a/dashboard/static/font-awesome/css/font-awesome.css b/app/dashboard/static/font-awesome/css/font-awesome.css similarity index 100% rename from dashboard/static/font-awesome/css/font-awesome.css rename to app/dashboard/static/font-awesome/css/font-awesome.css diff --git a/dashboard/static/font-awesome/css/font-awesome.min.css b/app/dashboard/static/font-awesome/css/font-awesome.min.css similarity index 100% rename from dashboard/static/font-awesome/css/font-awesome.min.css rename to app/dashboard/static/font-awesome/css/font-awesome.min.css diff --git a/dashboard/static/font-awesome/fonts/FontAwesome.otf b/app/dashboard/static/font-awesome/fonts/FontAwesome.otf similarity index 100% rename from dashboard/static/font-awesome/fonts/FontAwesome.otf rename to app/dashboard/static/font-awesome/fonts/FontAwesome.otf diff --git a/dashboard/static/font-awesome/fonts/fontawesome-webfont.eot b/app/dashboard/static/font-awesome/fonts/fontawesome-webfont.eot similarity index 100% rename from dashboard/static/font-awesome/fonts/fontawesome-webfont.eot rename to app/dashboard/static/font-awesome/fonts/fontawesome-webfont.eot diff --git a/dashboard/static/font-awesome/fonts/fontawesome-webfont.svg b/app/dashboard/static/font-awesome/fonts/fontawesome-webfont.svg similarity index 100% rename from dashboard/static/font-awesome/fonts/fontawesome-webfont.svg rename to app/dashboard/static/font-awesome/fonts/fontawesome-webfont.svg diff --git a/dashboard/static/font-awesome/fonts/fontawesome-webfont.ttf b/app/dashboard/static/font-awesome/fonts/fontawesome-webfont.ttf similarity index 100% rename from dashboard/static/font-awesome/fonts/fontawesome-webfont.ttf rename to app/dashboard/static/font-awesome/fonts/fontawesome-webfont.ttf diff --git a/dashboard/static/font-awesome/fonts/fontawesome-webfont.woff b/app/dashboard/static/font-awesome/fonts/fontawesome-webfont.woff similarity index 100% rename from dashboard/static/font-awesome/fonts/fontawesome-webfont.woff rename to app/dashboard/static/font-awesome/fonts/fontawesome-webfont.woff diff --git a/dashboard/static/font-awesome/less/bordered-pulled.less b/app/dashboard/static/font-awesome/less/bordered-pulled.less similarity index 100% rename from dashboard/static/font-awesome/less/bordered-pulled.less rename to app/dashboard/static/font-awesome/less/bordered-pulled.less diff --git a/dashboard/static/font-awesome/less/core.less b/app/dashboard/static/font-awesome/less/core.less similarity index 100% rename from dashboard/static/font-awesome/less/core.less rename to app/dashboard/static/font-awesome/less/core.less diff --git a/dashboard/static/font-awesome/less/fixed-width.less b/app/dashboard/static/font-awesome/less/fixed-width.less similarity index 100% rename from dashboard/static/font-awesome/less/fixed-width.less rename to app/dashboard/static/font-awesome/less/fixed-width.less diff --git a/dashboard/static/font-awesome/less/font-awesome.less b/app/dashboard/static/font-awesome/less/font-awesome.less similarity index 100% rename from dashboard/static/font-awesome/less/font-awesome.less rename to app/dashboard/static/font-awesome/less/font-awesome.less diff --git a/dashboard/static/font-awesome/less/icons.less b/app/dashboard/static/font-awesome/less/icons.less similarity index 100% rename from dashboard/static/font-awesome/less/icons.less rename to app/dashboard/static/font-awesome/less/icons.less diff --git a/dashboard/static/font-awesome/less/larger.less b/app/dashboard/static/font-awesome/less/larger.less similarity index 100% rename from dashboard/static/font-awesome/less/larger.less rename to app/dashboard/static/font-awesome/less/larger.less diff --git a/dashboard/static/font-awesome/less/list.less b/app/dashboard/static/font-awesome/less/list.less similarity index 100% rename from dashboard/static/font-awesome/less/list.less rename to app/dashboard/static/font-awesome/less/list.less diff --git a/dashboard/static/font-awesome/less/mixins.less b/app/dashboard/static/font-awesome/less/mixins.less similarity index 100% rename from dashboard/static/font-awesome/less/mixins.less rename to app/dashboard/static/font-awesome/less/mixins.less diff --git a/dashboard/static/font-awesome/less/path.less b/app/dashboard/static/font-awesome/less/path.less similarity index 100% rename from dashboard/static/font-awesome/less/path.less rename to app/dashboard/static/font-awesome/less/path.less diff --git a/dashboard/static/font-awesome/less/rotated-flipped.less b/app/dashboard/static/font-awesome/less/rotated-flipped.less similarity index 100% rename from dashboard/static/font-awesome/less/rotated-flipped.less rename to app/dashboard/static/font-awesome/less/rotated-flipped.less diff --git a/dashboard/static/font-awesome/less/spinning.less b/app/dashboard/static/font-awesome/less/spinning.less similarity index 100% rename from dashboard/static/font-awesome/less/spinning.less rename to app/dashboard/static/font-awesome/less/spinning.less diff --git a/dashboard/static/font-awesome/less/stacked.less b/app/dashboard/static/font-awesome/less/stacked.less similarity index 100% rename from dashboard/static/font-awesome/less/stacked.less rename to app/dashboard/static/font-awesome/less/stacked.less diff --git a/dashboard/static/font-awesome/less/variables.less b/app/dashboard/static/font-awesome/less/variables.less similarity index 100% rename from dashboard/static/font-awesome/less/variables.less rename to app/dashboard/static/font-awesome/less/variables.less diff --git a/dashboard/static/font-awesome/scss/_bordered-pulled.scss b/app/dashboard/static/font-awesome/scss/_bordered-pulled.scss similarity index 100% rename from dashboard/static/font-awesome/scss/_bordered-pulled.scss rename to app/dashboard/static/font-awesome/scss/_bordered-pulled.scss diff --git a/dashboard/static/font-awesome/scss/_core.scss b/app/dashboard/static/font-awesome/scss/_core.scss similarity index 100% rename from dashboard/static/font-awesome/scss/_core.scss rename to app/dashboard/static/font-awesome/scss/_core.scss diff --git a/dashboard/static/font-awesome/scss/_fixed-width.scss b/app/dashboard/static/font-awesome/scss/_fixed-width.scss similarity index 100% rename from dashboard/static/font-awesome/scss/_fixed-width.scss rename to app/dashboard/static/font-awesome/scss/_fixed-width.scss diff --git a/dashboard/static/font-awesome/scss/_icons.scss b/app/dashboard/static/font-awesome/scss/_icons.scss similarity index 100% rename from dashboard/static/font-awesome/scss/_icons.scss rename to app/dashboard/static/font-awesome/scss/_icons.scss diff --git a/dashboard/static/font-awesome/scss/_larger.scss b/app/dashboard/static/font-awesome/scss/_larger.scss similarity index 100% rename from dashboard/static/font-awesome/scss/_larger.scss rename to app/dashboard/static/font-awesome/scss/_larger.scss diff --git a/dashboard/static/font-awesome/scss/_list.scss b/app/dashboard/static/font-awesome/scss/_list.scss similarity index 100% rename from dashboard/static/font-awesome/scss/_list.scss rename to app/dashboard/static/font-awesome/scss/_list.scss diff --git a/dashboard/static/font-awesome/scss/_mixins.scss b/app/dashboard/static/font-awesome/scss/_mixins.scss similarity index 100% rename from dashboard/static/font-awesome/scss/_mixins.scss rename to app/dashboard/static/font-awesome/scss/_mixins.scss diff --git a/dashboard/static/font-awesome/scss/_path.scss b/app/dashboard/static/font-awesome/scss/_path.scss similarity index 100% rename from dashboard/static/font-awesome/scss/_path.scss rename to app/dashboard/static/font-awesome/scss/_path.scss diff --git a/dashboard/static/font-awesome/scss/_rotated-flipped.scss b/app/dashboard/static/font-awesome/scss/_rotated-flipped.scss similarity index 100% rename from dashboard/static/font-awesome/scss/_rotated-flipped.scss rename to app/dashboard/static/font-awesome/scss/_rotated-flipped.scss diff --git a/dashboard/static/font-awesome/scss/_spinning.scss b/app/dashboard/static/font-awesome/scss/_spinning.scss similarity index 100% rename from dashboard/static/font-awesome/scss/_spinning.scss rename to app/dashboard/static/font-awesome/scss/_spinning.scss diff --git a/dashboard/static/font-awesome/scss/_stacked.scss b/app/dashboard/static/font-awesome/scss/_stacked.scss similarity index 100% rename from dashboard/static/font-awesome/scss/_stacked.scss rename to app/dashboard/static/font-awesome/scss/_stacked.scss diff --git a/dashboard/static/font-awesome/scss/_variables.scss b/app/dashboard/static/font-awesome/scss/_variables.scss similarity index 100% rename from dashboard/static/font-awesome/scss/_variables.scss rename to app/dashboard/static/font-awesome/scss/_variables.scss diff --git a/dashboard/static/font-awesome/scss/font-awesome.scss b/app/dashboard/static/font-awesome/scss/font-awesome.scss similarity index 100% rename from dashboard/static/font-awesome/scss/font-awesome.scss rename to app/dashboard/static/font-awesome/scss/font-awesome.scss diff --git a/dashboard/static/fonts/glyphicons-halflings-regular.eot b/app/dashboard/static/fonts/glyphicons-halflings-regular.eot similarity index 100% rename from dashboard/static/fonts/glyphicons-halflings-regular.eot rename to app/dashboard/static/fonts/glyphicons-halflings-regular.eot diff --git a/dashboard/static/fonts/glyphicons-halflings-regular.svg b/app/dashboard/static/fonts/glyphicons-halflings-regular.svg similarity index 100% rename from dashboard/static/fonts/glyphicons-halflings-regular.svg rename to app/dashboard/static/fonts/glyphicons-halflings-regular.svg diff --git a/dashboard/static/fonts/glyphicons-halflings-regular.ttf b/app/dashboard/static/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from dashboard/static/fonts/glyphicons-halflings-regular.ttf rename to app/dashboard/static/fonts/glyphicons-halflings-regular.ttf diff --git a/dashboard/static/fonts/glyphicons-halflings-regular.woff b/app/dashboard/static/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from dashboard/static/fonts/glyphicons-halflings-regular.woff rename to app/dashboard/static/fonts/glyphicons-halflings-regular.woff diff --git a/dashboard/static/fonts/glyphicons-halflings-regular.woff2 b/app/dashboard/static/fonts/glyphicons-halflings-regular.woff2 similarity index 100% rename from dashboard/static/fonts/glyphicons-halflings-regular.woff2 rename to app/dashboard/static/fonts/glyphicons-halflings-regular.woff2 diff --git a/dashboard/static/images/favicon.ico b/app/dashboard/static/images/favicon.ico similarity index 100% rename from dashboard/static/images/favicon.ico rename to app/dashboard/static/images/favicon.ico diff --git a/dashboard/static/js/bootstrap.js b/app/dashboard/static/js/bootstrap.js similarity index 100% rename from dashboard/static/js/bootstrap.js rename to app/dashboard/static/js/bootstrap.js diff --git a/dashboard/static/js/bootstrap.min.js b/app/dashboard/static/js/bootstrap.min.js similarity index 100% rename from dashboard/static/js/bootstrap.min.js rename to app/dashboard/static/js/bootstrap.min.js diff --git a/dashboard/static/js/datatables.min.js b/app/dashboard/static/js/datatables.min.js similarity index 100% rename from dashboard/static/js/datatables.min.js rename to app/dashboard/static/js/datatables.min.js diff --git a/dashboard/static/js/html-to-csv.js b/app/dashboard/static/js/html-to-csv.js similarity index 100% rename from dashboard/static/js/html-to-csv.js rename to app/dashboard/static/js/html-to-csv.js diff --git a/dashboard/static/js/jquery.js b/app/dashboard/static/js/jquery.js similarity index 100% rename from dashboard/static/js/jquery.js rename to app/dashboard/static/js/jquery.js diff --git a/dashboard/static/js/plugins/flot/excanvas.min.js b/app/dashboard/static/js/plugins/flot/excanvas.min.js similarity index 100% rename from dashboard/static/js/plugins/flot/excanvas.min.js rename to app/dashboard/static/js/plugins/flot/excanvas.min.js diff --git a/dashboard/static/js/plugins/flot/flot-data.js b/app/dashboard/static/js/plugins/flot/flot-data.js similarity index 100% rename from dashboard/static/js/plugins/flot/flot-data.js rename to app/dashboard/static/js/plugins/flot/flot-data.js diff --git a/dashboard/static/js/plugins/flot/jquery.flot.js b/app/dashboard/static/js/plugins/flot/jquery.flot.js similarity index 100% rename from dashboard/static/js/plugins/flot/jquery.flot.js rename to app/dashboard/static/js/plugins/flot/jquery.flot.js diff --git a/dashboard/static/js/plugins/flot/jquery.flot.pie.js b/app/dashboard/static/js/plugins/flot/jquery.flot.pie.js similarity index 100% rename from dashboard/static/js/plugins/flot/jquery.flot.pie.js rename to app/dashboard/static/js/plugins/flot/jquery.flot.pie.js diff --git a/dashboard/static/js/plugins/flot/jquery.flot.resize.js b/app/dashboard/static/js/plugins/flot/jquery.flot.resize.js similarity index 100% rename from dashboard/static/js/plugins/flot/jquery.flot.resize.js rename to app/dashboard/static/js/plugins/flot/jquery.flot.resize.js diff --git a/dashboard/static/js/plugins/flot/jquery.flot.tooltip.min.js b/app/dashboard/static/js/plugins/flot/jquery.flot.tooltip.min.js similarity index 100% rename from dashboard/static/js/plugins/flot/jquery.flot.tooltip.min.js rename to app/dashboard/static/js/plugins/flot/jquery.flot.tooltip.min.js diff --git a/dashboard/static/js/plugins/morris/morris-data.js b/app/dashboard/static/js/plugins/morris/morris-data.js similarity index 100% rename from dashboard/static/js/plugins/morris/morris-data.js rename to app/dashboard/static/js/plugins/morris/morris-data.js diff --git a/dashboard/static/js/plugins/morris/morris.js b/app/dashboard/static/js/plugins/morris/morris.js similarity index 100% rename from dashboard/static/js/plugins/morris/morris.js rename to app/dashboard/static/js/plugins/morris/morris.js diff --git a/dashboard/static/js/plugins/morris/morris.min.js b/app/dashboard/static/js/plugins/morris/morris.min.js similarity index 100% rename from dashboard/static/js/plugins/morris/morris.min.js rename to app/dashboard/static/js/plugins/morris/morris.min.js diff --git a/dashboard/static/js/plugins/morris/raphael.min.js b/app/dashboard/static/js/plugins/morris/raphael.min.js similarity index 100% rename from dashboard/static/js/plugins/morris/raphael.min.js rename to app/dashboard/static/js/plugins/morris/raphael.min.js diff --git a/dashboard/templates/404.html b/app/dashboard/templates/404.html similarity index 100% rename from dashboard/templates/404.html rename to app/dashboard/templates/404.html diff --git a/dashboard/templates/generic.html b/app/dashboard/templates/generic.html similarity index 100% rename from dashboard/templates/generic.html rename to app/dashboard/templates/generic.html diff --git a/dashboard/templates/history.html b/app/dashboard/templates/history.html similarity index 100% rename from dashboard/templates/history.html rename to app/dashboard/templates/history.html diff --git a/dashboard/templates/index.html b/app/dashboard/templates/index.html similarity index 100% rename from dashboard/templates/index.html rename to app/dashboard/templates/index.html diff --git a/dashboard/templates/manage-packages.html b/app/dashboard/templates/manage-packages.html similarity index 100% rename from dashboard/templates/manage-packages.html rename to app/dashboard/templates/manage-packages.html diff --git a/dashboard/templates/manage.html b/app/dashboard/templates/manage.html similarity index 100% rename from dashboard/templates/manage.html rename to app/dashboard/templates/manage.html diff --git a/dashboard/templates/os-statistics.html b/app/dashboard/templates/os-statistics.html similarity index 97% rename from dashboard/templates/os-statistics.html rename to app/dashboard/templates/os-statistics.html index 6aadc01..bd6d607 100644 --- a/dashboard/templates/os-statistics.html +++ b/app/dashboard/templates/os-statistics.html @@ -20,7 +20,7 @@ - + diff --git a/dashboard/templates/packages-list.html b/app/dashboard/templates/packages-list.html similarity index 100% rename from dashboard/templates/packages-list.html rename to app/dashboard/templates/packages-list.html diff --git a/dashboard/templates/packages.html b/app/dashboard/templates/packages.html similarity index 100% rename from dashboard/templates/packages.html rename to app/dashboard/templates/packages.html diff --git a/dashboard/templates/registration/login.html b/app/dashboard/templates/registration/login.html similarity index 100% rename from dashboard/templates/registration/login.html rename to app/dashboard/templates/registration/login.html diff --git a/dashboard/templates/server-list.html b/app/dashboard/templates/server-list.html similarity index 100% rename from dashboard/templates/server-list.html rename to app/dashboard/templates/server-list.html diff --git a/dashboard/templates/squeleton.html b/app/dashboard/templates/squeleton.html similarity index 100% rename from dashboard/templates/squeleton.html rename to app/dashboard/templates/squeleton.html diff --git a/dashboard/tests.py b/app/dashboard/tests.py similarity index 100% rename from dashboard/tests.py rename to app/dashboard/tests.py diff --git a/dashboard/urls.py b/app/dashboard/urls.py similarity index 86% rename from dashboard/urls.py rename to app/dashboard/urls.py index 3632f93..748e2ae 100644 --- a/dashboard/urls.py +++ b/app/dashboard/urls.py @@ -19,12 +19,6 @@ urlpatterns = [ re_path(r'^server-list/(?P[0-9]{4})/(?P[0-9]{1,2})/(?P[0-9]{1,2})/?$', views.server_list, name='server-list-by-date'), - re_path(r'^server-list/(?P[a-z0-9\-_]*)/(?P[0-9]{4})/(?P[0-9]{1,2})/(?P[0-9]{1,2})/?$', - views.server_list, - name='server-list-by-group'), - re_path(r'^server-list/team/(?P[a-z]*)/(?P[0-9]{4})/(?P[0-9]{1,2})/(?P[0-9]{1,2})/?$', - views.server_list, - name='server-list-by-team'), # package list re_path(r'^packages/?$', @@ -69,9 +63,6 @@ urlpatterns = [ re_path(r'^manage-packages/upload_csv_results_packages', views.upload_csv_results_packages, name='upload_csv_results_packages'), -# re_path(r'^manage/update-groups/?$', -# views.update_groups, -# name='update_groups'), # manage packages re_path(r'^manage-packages/?$', diff --git a/dashboard/views.py b/app/dashboard/views.py similarity index 93% rename from dashboard/views.py rename to app/dashboard/views.py index b037c31..3e706be 100644 --- a/dashboard/views.py +++ b/app/dashboard/views.py @@ -16,7 +16,7 @@ from django.core.cache import cache from django.db import IntegrityError from django.contrib.auth.decorators import login_required # project -from .models import Os, Group, Server, ServerStatus, PackageStatus, Team, Document_Servers, Document_Packages +from .models import Os, Server, ServerStatus, PackageStatus, Document_Servers, Document_Packages from .forms import DocumentForm @@ -36,7 +36,7 @@ def index(request): ## ----------------------------------------------------------------------------- @login_required -def server_list(request, year=None, month=None, day=None, group=None, team=None): +def server_list(request, year=None, month=None, day=None): # TODO: use date.today? now = datetime.now() if not year or not month or not day: @@ -64,24 +64,11 @@ def server_list(request, year=None, month=None, day=None, group=None, team=None) next_result_date = next_result.date results_date = current_date - if group: - group = get_object_or_404(Group, name=group) - status_list = ServerStatus.objects.filter(date=current_date, server__group=group).order_by('server__hostname') - if previous_result and not status_list: - status_list = ServerStatus.objects.filter(date=previous_result_date, server__group=group).order_by('server__hostname') - results_date = previous_result_date - elif team: - team = get_object_or_404(Team, color=team) - status_list = ServerStatus.objects.filter(date=current_date, server__team=team).order_by('server__hostname') - if previous_result and not status_list: - status_list = ServerStatus.objects.filter(date=previous_result_date, server__team=team).order_by('server__hostname') - results_date = previous_result_date - else: - # status_list = ServerStatus.objects.filter(date=current_date).order_by('server__hostname') - status_list = ServerStatus.objects.filter(date=current_date).order_by('server__hostname').select_related('server', 'server__group', 'server__os') - if previous_result and not status_list: - status_list = ServerStatus.objects.filter(date=previous_result_date).order_by('server__hostname').select_related('server', 'server__group', 'server__os') - results_date = previous_result_date + # status_list = ServerStatus.objects.filter(date=current_date).order_by('server__hostname') + status_list = ServerStatus.objects.filter(date=current_date).order_by('server__hostname').select_related('server', 'server__os') + if previous_result and not status_list: + status_list = ServerStatus.objects.filter(date=previous_result_date).order_by('server__hostname').select_related('server', 'server__os') + results_date = previous_result_date if not status_list: return render(request, 'generic.html', { @@ -90,7 +77,6 @@ def server_list(request, year=None, month=None, day=None, group=None, team=None) return render(request, 'server-list.html', { - 'group': group, 'status_list': status_list, 'results_date': results_date, 'previous_result_date': previous_result_date, @@ -332,7 +318,6 @@ def purge_all(request): ServerStatus.objects.all().delete() Os.objects.all().delete() PackageStatus.objects.all().delete() - Group.objects.all().delete() content = "" diff --git a/defaults/gunicorn.service b/app/defaults/gunicorn.service similarity index 100% rename from defaults/gunicorn.service rename to app/defaults/gunicorn.service diff --git a/defaults/settings_local.py b/app/defaults/settings_local.py similarity index 51% rename from defaults/settings_local.py rename to app/defaults/settings_local.py index 9064ad4..a5173f4 100644 --- a/defaults/settings_local.py +++ b/app/defaults/settings_local.py @@ -37,37 +37,9 @@ INSTALLED_APPS_LOCAL = [ # LDAP AUTH AUTHENTICATION_BACKENDS = ( - 'django_python3_ldap.auth.LDAPBackend', 'django.contrib.auth.backends.ModelBackend', ) -LDAP_AUTH_URL = "ldaps://SERVER:PORT" -LDAP_AUTH_USE_TLS = True -LDAP_AUTH_SEARCH_BASE = "ou=USERS,dc=MY,dc=ORG" -LDAP_AUTH_OBJECT_CLASS = "inetOrgPerson" -LDAP_AUTH_USER_FIELDS = { - "username": "uid", - "first_name": "givenName", - "last_name": "sn", - "email": "mail", -} -LDAP_AUTH_FORMAT_SEARCH_FILTERS = "dashboard.module.custom_format_search_filters" -LDAP_AUTH_CUSTOM_OBJECT_CLASS = "ACLASS" -LDAP_AUTH_CUSTOM_FILTERS = "(SOMEFIELD=SOMEVALUE)" MIDDLEWARE_LOCAL = [ 'debug_toolbar.middleware.DebugToolbarMiddleware', ] - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/1.10/howto/static-files/ - -STATIC_URL = '/static/' -STATIC_ROOT = os.path.join(BASE_DIR, './static') - -# custom -RESULT_DIR = os.path.join(BASE_DIR, 'results') -RESULT_PACKAGES_DIR = os.path.join(BASE_DIR, 'results-packages') -INVENTORY_DIR = os.path.join(BASE_DIR, 'inventory') - -LOGIN_URL = '/login' -LOGIN_REDIRECT_URL = 'index' diff --git a/defaults/updates-dashboard.conf b/app/defaults/updates-dashboard.conf similarity index 100% rename from defaults/updates-dashboard.conf rename to app/defaults/updates-dashboard.conf diff --git a/manage.py b/app/manage.py similarity index 100% rename from manage.py rename to app/manage.py diff --git a/requirements.txt b/app/requirements.txt similarity index 89% rename from requirements.txt rename to app/requirements.txt index 63c3449..885b423 100644 --- a/requirements.txt +++ b/app/requirements.txt @@ -3,6 +3,7 @@ Django django-extensions gunicorn django-debug-toolbar +django-environ django-python3-ldap requests mysqlclient diff --git a/results-packages/.gitkeep b/app/results-packages/.gitkeep similarity index 100% rename from results-packages/.gitkeep rename to app/results-packages/.gitkeep diff --git a/results/.gitkeep b/app/results/.gitkeep similarity index 100% rename from results/.gitkeep rename to app/results/.gitkeep diff --git a/app/results/2022-08-17.csv b/app/results/2022-08-17.csv new file mode 100644 index 0000000..5a680a5 --- /dev/null +++ b/app/results/2022-08-17.csv @@ -0,0 +1,19 @@ +vlearning-db001-tst.infolegale.net;Debian;10;0;5 +app-db001-tst.infolegale.net;Debian;10;0;9 +consults-db001-tst.infolegale.net;Debian;10;0;147 +vador-db001-tst.infolegale.net;Debian;10;0;147 +tlearning-db003-tst.infolegale.net;Ubuntu;18.04;0;308 +transdb-db001-tst.infolegale.net;Debian;10;0;147 +mysql8-db001-tst.infolegale.net;Debian;11;3;119 +mongo-db001-tst.infolegale.net;Ubuntu;20.04;0;28 +orchestrator-mgr001-tst.infolegale.net;Ubuntu;20.04;0;28 +redis5-db001-tst.infolegale.net;Debian;10;0;326 +redis-db001-tst.infolegale.net;Ubuntu;18.04;0;326 +docker-hpv001-tst.infolegale.net;Ubuntu;20.04;0;106 +docker-hpv002-tst.infolegale.net;Ubuntu;20.04;0;398 +docker-hpv003-tst.infolegale.net;Ubuntu;20.04;0;125 +rundeck-sch001-tst.infolegale.net;Debian;10;0;91 +proxysql-db001-tst.infolegale.net;Ubuntu;20.04;0;475 +docker-hpv005-tst.infolegale.net;Ubuntu;20.04;0;119 +docker-hpv004-tst.infolegale.net;Ubuntu;20.04;0;28 +docker-hpv006-tst.infolegale.net;Ubuntu;20.04;0;309 diff --git a/app/updatesdashboard/.env.dev b/app/updatesdashboard/.env.dev new file mode 100644 index 0000000..b9119a7 --- /dev/null +++ b/app/updatesdashboard/.env.dev @@ -0,0 +1,10 @@ +GUNICORN_CMD_ARGS=--bind=127.0.0.1:3000 --workers=3 --timeout=300 --error-logfile=/var/log/gunicorn-error.log +DJANGO_SUPERUSER_PASSWORD=admin +SECRET_KEY=uv88xpv8kb2r6j7rubtnhkps +DATABASE_NAME=updates_dashboard +DATABASE_USER=updates_dashboard +DATABASE_PASSWORD=miengetBatheajOf +DATABASE_HOST=mysql +DATABASE_PORT=3306 +DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 +DJANGO_CSRF_TRUSTED_ORIGINS=http://localhost diff --git a/updatesdashboard/__init__.py b/app/updatesdashboard/__init__.py similarity index 100% rename from updatesdashboard/__init__.py rename to app/updatesdashboard/__init__.py diff --git a/updatesdashboard/settings.py b/app/updatesdashboard/settings.py similarity index 73% rename from updatesdashboard/settings.py rename to app/updatesdashboard/settings.py index 6149a85..007f329 100644 --- a/updatesdashboard/settings.py +++ b/app/updatesdashboard/settings.py @@ -10,11 +10,23 @@ For the full list of settings and their values, see https://docs.djangoproject.com/en/1.10/ref/settings/ """ +import os from .settings_local import * +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +# for debug_toolbar +INTERNAL_IPS = ['127.0.0.1', ] +DEBUG_TOOLBAR = True # Application definition - +INSTALLED_APPS_LOCAL = [ + 'debug_toolbar', +# 'django_python3_ldap', +] INSTALLED_APPS = [ 'dashboard.apps.DashboardConfig', 'django.contrib.admin', @@ -26,6 +38,10 @@ INSTALLED_APPS = [ 'django_extensions', ] + INSTALLED_APPS_LOCAL +MIDDLEWARE_LOCAL = [ + 'debug_toolbar.middleware.DebugToolbarMiddleware', +] + MIDDLEWARE = MIDDLEWARE_LOCAL + [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', @@ -74,6 +90,23 @@ AUTH_PASSWORD_VALIDATORS = [ }, ] +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.10/howto/static-files/ + +STATIC_URL = '/static/' +STATIC_ROOT = os.path.join(BASE_DIR, './static') + +# custom +RESULT_DIR = os.path.join(BASE_DIR, 'results') +RESULT_PACKAGES_DIR = os.path.join(BASE_DIR, 'results-packages') +INVENTORY_DIR = os.path.join(BASE_DIR, 'inventory') + +LOGIN_URL = '/login' +LOGIN_REDIRECT_URL = 'index' + +# for debug_toolbar +INTERNAL_IPS = ['127.0.0.1', ] +DEBUG_TOOLBAR = True # Internationalization # https://docs.djangoproject.com/en/1.10/topics/i18n/ diff --git a/app/updatesdashboard/settings_local.py b/app/updatesdashboard/settings_local.py new file mode 100644 index 0000000..a31defc --- /dev/null +++ b/app/updatesdashboard/settings_local.py @@ -0,0 +1,19 @@ +import environ + +env = environ.Env() +# reading .env file +environ.Env.read_env() + +ALLOWED_HOSTS = env("DJANGO_ALLOWED_HOSTS").split(" ") +CSRF_TRUSTED_ORIGINS = env("DJANGO_CSRF_TRUSTED_ORIGINS").split(" ") +SECRET_KEY = env("SECRET_KEY") +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': env("DATABASE_NAME"), + 'USER': env("DATABASE_USER"), + 'PASSWORD': env("DATABASE_PASSWORD"), + 'HOST': env("DATABASE_HOST"), + 'PORT': int(env("DATABASE_PORT")), + } +} diff --git a/updatesdashboard/urls.py b/app/updatesdashboard/urls.py similarity index 100% rename from updatesdashboard/urls.py rename to app/updatesdashboard/urls.py diff --git a/updatesdashboard/wsgi.py b/app/updatesdashboard/wsgi.py similarity index 100% rename from updatesdashboard/wsgi.py rename to app/updatesdashboard/wsgi.py diff --git a/dashboard/fixtures/teams.yaml b/dashboard/fixtures/teams.yaml deleted file mode 100644 index 2dfe9c0..0000000 --- a/dashboard/fixtures/teams.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# This is initial data for prod teams - -- model: dashboard.team - pk: null - fields: { - name: System, - color: pink - } diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..23c7e1e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,33 @@ +version: '0.1' +services: + web: + container_name: updatesdashboard.front + build: + context: ./ + target: app_dev + ports: + - "3000:3001" + volumes: + - ./app/:/app/ + env_file: + - ./app/updatesdashboard/.env.dev + networks: + - updates-dashboard-network + depends_on: + - mysql + mysql: + image: mysql:8.0 + container_name: updatesdashboard.mysql + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: updates_dashboard + MYSQL_USER: updates_dashboard + MYSQL_PASSWORD: miengetBatheajOf + ports: + - "3306:3306" + networks: + - updates-dashboard-network +networks: + updates-dashboard-network: + driver: bridge + diff --git a/docker/nginx/updatesdashboard.conf b/docker/nginx/updatesdashboard.conf new file mode 100644 index 0000000..60a1fad --- /dev/null +++ b/docker/nginx/updatesdashboard.conf @@ -0,0 +1,25 @@ +server { + listen 3001; + server_name updates-dashboard.infolegale.net; + + # css, js… + location /static { + alias /app/static; + } + + if ($request_uri !~ "^/admin.*") { + # don't rewrite admin + rewrite ^/(.*)/$ /$1 permanent; + } + + location / { + include proxy_params; + proxy_pass http://127.0.0.1:3000; + proxy_connect_timeout 120s; + proxy_read_timeout 300s; + + } + + error_log /var/log/updatesdashboard-error.log; + access_log /var/log/updatesdashboard-access.log; +} diff --git a/docker/scripts/entrypoint.dev.sh b/docker/scripts/entrypoint.dev.sh new file mode 100644 index 0000000..82beb9b --- /dev/null +++ b/docker/scripts/entrypoint.dev.sh @@ -0,0 +1,11 @@ +#!/bin/sh +until nc -vz $1 $2; do echo "Waiting for MySQL $1:$2..."; sleep 3; done; + +python /app/manage.py migrate +python /app/manage.py collectstatic +python /app/manage.py loaddata /app/dashboard/fixtures/os.yaml +python /app/manage.py createsuperuser --noinput --username admin --email test@example.com +service nginx start +gunicorn updatesdashboard.wsgi:application + +exec "$@" diff --git a/docker/scripts/entrypoint.prod.sh b/docker/scripts/entrypoint.prod.sh new file mode 100644 index 0000000..3d3b1be --- /dev/null +++ b/docker/scripts/entrypoint.prod.sh @@ -0,0 +1,8 @@ +#!/bin/sh +until nc -vz $1 $2; do echo "Waiting for MySQL $1:$2..."; sleep 3; done; + +#python /app/manage.py flush --no-input +#python /app/manage.py migrate +#python /app/manage.py loaddata dashboard/fixtures/os.yaml + +exec "$@"
HostnameDistribution Number Percentage