mirror of https://gitlab.federez.net/re2o/re2o
Browse Source
feat: Create footprint optional app See merge request re2o/re2o!625merge-requests/625/merge
19 changed files with 775 additions and 1 deletions
@ -0,0 +1,26 @@ |
|||||
|
# -*- mode: python; coding: utf-8 -*- |
||||
|
# Re2o est un logiciel d'administration développé initiallement au Rézo Metz. Il |
||||
|
# se veut agnostique au réseau considéré, de manière à être installable en |
||||
|
# quelques clics. |
||||
|
# |
||||
|
# Copyright © 2021 Jean-Romain Garnier |
||||
|
# |
||||
|
# This program is free software; you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU General Public License as published by |
||||
|
# the Free Software Foundation; either version 2 of the License, or |
||||
|
# (at your option) any later version. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU General Public License along |
||||
|
# with this program; if not, write to the Free Software Foundation, Inc., |
||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||||
|
""" |
||||
|
Footprint admin model |
||||
|
""" |
||||
|
|
||||
|
from django.contrib import admin |
||||
|
from reversion.admin import VersionAdmin |
||||
@ -0,0 +1,27 @@ |
|||||
|
# -*- mode: python; coding: utf-8 -*- |
||||
|
# Re2o est un logiciel d'administration développé initiallement au Rézo Metz. Il |
||||
|
# se veut agnostique au réseau considéré, de manière à être installable en |
||||
|
# quelques clics. |
||||
|
# |
||||
|
# Copyright © 2021 Jean-Romain Garnier |
||||
|
# |
||||
|
# This program is free software; you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU General Public License as published by |
||||
|
# the Free Software Foundation; either version 2 of the License, or |
||||
|
# (at your option) any later version. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU General Public License along |
||||
|
# with this program; if not, write to the Free Software Foundation, Inc., |
||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||||
|
from django.apps import AppConfig |
||||
|
|
||||
|
|
||||
|
class FootprintConfig(AppConfig): |
||||
|
"""Configuration of the optional footprint app.""" |
||||
|
|
||||
|
name = "footprint" |
||||
@ -0,0 +1,29 @@ |
|||||
|
# -*- mode: python; coding: utf-8 -*- |
||||
|
# Re2o est un logiciel d'administration développé initiallement au Rézo Metz. Il |
||||
|
# se veut agnostique au réseau considéré, de manière à être installable en |
||||
|
# quelques clics. |
||||
|
# |
||||
|
# Copyright © 2021 Jean-Romain Garnier |
||||
|
# |
||||
|
# This program is free software; you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU General Public License as published by |
||||
|
# the Free Software Foundation; either version 2 of the License, or |
||||
|
# (at your option) any later version. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU General Public License along |
||||
|
# with this program; if not, write to the Free Software Foundation, Inc., |
||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||||
|
""" |
||||
|
Footprint optional app forms |
||||
|
""" |
||||
|
|
||||
|
from django import forms |
||||
|
from django.forms import Form, ModelForm |
||||
|
from django.utils.translation import ugettext_lazy as _ |
||||
|
|
||||
|
from re2o.mixins import FormRevMixin |
||||
@ -0,0 +1,119 @@ |
|||||
|
# Re2o est un logiciel d'administration développé initiallement au Rézo Metz. Il |
||||
|
# se veut agnostique au réseau considéré, de manière à être installable en |
||||
|
# quelques clics. |
||||
|
# |
||||
|
# Copyright © 2021 Jean-Romain Garnier |
||||
|
# |
||||
|
# This program is free software; you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU General Public License as published by |
||||
|
# the Free Software Foundation; either version 2 of the License, or |
||||
|
# (at your option) any later version. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU General Public License along |
||||
|
# with this program; if not, write to the Free Software Foundation, Inc., |
||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: 2.5\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2022-01-09 18:35+0100\n" |
||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
||||
|
"Last-Translator: Jean-Romain Garnier <git@jean-romain.com>\n" |
||||
|
"Language-Team: \n" |
||||
|
"Language: fr_FR\n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: 8bit\n" |
||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n" |
||||
|
|
||||
|
#: footprint/preferences/models.py:38 |
||||
|
msgid "Estimated monthly infrastructure emissions (in kgCO₂e/month)" |
||||
|
msgstr "Estimation des émissions mensuelles de l'infrastructure (en kgCO₂e/mois)" |
||||
|
|
||||
|
#: footprint/preferences/models.py:47 |
||||
|
#: footprint/templates/footprint/preferences.html:55 |
||||
|
msgid "User monthly data usage estimation script" |
||||
|
msgstr "Script d'estimation du volume de données mensuelles d'un utilisateur " |
||||
|
|
||||
|
#: footprint/preferences/models.py:52 |
||||
|
msgid "Estimation script timeout (in seconds)" |
||||
|
msgstr "" |
||||
|
"Temps imparti pour le script d'estimation de volume de données (en secondes)" |
||||
|
|
||||
|
#: footprint/preferences/models.py:59 |
||||
|
msgid "Footprint preferences" |
||||
|
msgstr "Préférences d'empreinte" |
||||
|
|
||||
|
#: footprint/templates/footprint/aff_profil.html:29 |
||||
|
#: footprint/templates/footprint/preferences.html:29 |
||||
|
msgid "Footprint" |
||||
|
msgstr "Empreinte" |
||||
|
|
||||
|
#: footprint/templates/footprint/aff_profil.html:38 |
||||
|
msgid "Estimated monthly emissions" |
||||
|
msgstr "Estimation des émissions mensuelles" |
||||
|
|
||||
|
#: footprint/templates/footprint/aff_profil.html:41 |
||||
|
#: footprint/templates/footprint/aff_profil.html:55 |
||||
|
msgid "n/a" |
||||
|
msgstr "n/a" |
||||
|
|
||||
|
#: footprint/templates/footprint/aff_profil.html:43 |
||||
|
msgid "Unavailable" |
||||
|
msgstr "Indisponible" |
||||
|
|
||||
|
#: footprint/templates/footprint/aff_profil.html:45 |
||||
|
#: footprint/templates/footprint/preferences.html:49 |
||||
|
msgid "kgCO₂e/month" |
||||
|
msgstr "kgCO₂e/mois" |
||||
|
|
||||
|
#: footprint/templates/footprint/aff_profil.html:48 |
||||
|
#: footprint/templates/footprint/aff_profil.html:60 |
||||
|
msgid "[Learn more]" |
||||
|
msgstr "[En savoir plus]" |
||||
|
|
||||
|
#: footprint/templates/footprint/aff_profil.html:52 |
||||
|
msgid "Estimated monthly data usage" |
||||
|
msgstr "Estimation du volume de données mensuel" |
||||
|
|
||||
|
#: footprint/templates/footprint/aff_profil.html:57 |
||||
|
msgid "Compute" |
||||
|
msgstr "Calculer" |
||||
|
|
||||
|
#: footprint/templates/footprint/aff_profil.html:80 |
||||
|
msgid "GiB/month" |
||||
|
msgstr "GiO/mois" |
||||
|
|
||||
|
#: footprint/templates/footprint/aff_profil.html:82 |
||||
|
msgid "Unknown error" |
||||
|
msgstr "Erreur inconnue" |
||||
|
|
||||
|
#: footprint/templates/footprint/preferences.html:36 |
||||
|
msgid "Edit" |
||||
|
msgstr "Modifier" |
||||
|
|
||||
|
#: footprint/templates/footprint/preferences.html:44 |
||||
|
msgid "Estimated monthly infrastructure emissions" |
||||
|
msgstr "Estimation des émissions mensuelles de l'infrastructure" |
||||
|
|
||||
|
#: footprint/templates/footprint/preferences.html:47 |
||||
|
msgid "Not specified" |
||||
|
msgstr "Non spécifié" |
||||
|
|
||||
|
#: footprint/templates/footprint/preferences.html:60 |
||||
|
msgid "Data estimation script timeout (in seconds)" |
||||
|
msgstr "" |
||||
|
"Temps imparti pour le script d'estimation de volume de données (en secondes)" |
||||
|
|
||||
|
#: footprint/views.py:45 |
||||
|
msgid "Nonexistent user." |
||||
|
msgstr "Utilisateur inconnu" |
||||
|
|
||||
|
#: footprint/views.py:50 |
||||
|
msgid "Failed to compute data usage." |
||||
|
msgstr "Échec du calcul du volume de données." |
||||
@ -0,0 +1,29 @@ |
|||||
|
# Generated by Django 2.2.18 on 2022-01-09 17:33 |
||||
|
|
||||
|
import django.core.validators |
||||
|
from django.db import migrations, models |
||||
|
import re2o.mixins |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
initial = True |
||||
|
|
||||
|
dependencies = [ |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.CreateModel( |
||||
|
name='FootprintOption', |
||||
|
fields=[ |
||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
|
('monthly_infra_emissions', models.DecimalField(blank=True, decimal_places=2, default=None, max_digits=10, null=True, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Estimated monthly infrastructure emissions (in kgCO₂e/month)')), |
||||
|
('data_usage_script_path', models.CharField(default='footprint/scripts/default_data_usage_estimator.py', max_length=4096, verbose_name='User monthly data usage estimation script')), |
||||
|
('data_usage_script_timeout', models.DecimalField(decimal_places=2, default=10, max_digits=4, verbose_name='Estimation script timeout (in seconds)')), |
||||
|
], |
||||
|
options={ |
||||
|
'verbose_name': 'Footprint preferences', |
||||
|
}, |
||||
|
bases=(re2o.mixins.AclMixin, models.Model), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,31 @@ |
|||||
|
# -*- mode: python; coding: utf-8 -*- |
||||
|
# Re2o est un logiciel d'administration développé initiallement au Rézo Metz. Il |
||||
|
# se veut agnostique au réseau considéré, de manière à être installable en |
||||
|
# quelques clics. |
||||
|
# |
||||
|
# Copyright © 2021 Jean-Romain Garnier |
||||
|
# |
||||
|
# This program is free software; you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU General Public License as published by |
||||
|
# the Free Software Foundation; either version 2 of the License, or |
||||
|
# (at your option) any later version. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU General Public License along |
||||
|
# with this program; if not, write to the Free Software Foundation, Inc., |
||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||||
|
""" |
||||
|
Footprint optional app models |
||||
|
""" |
||||
|
|
||||
|
from __future__ import absolute_import |
||||
|
|
||||
|
from django.db import models |
||||
|
from django.utils.translation import ugettext_lazy as _ |
||||
|
|
||||
|
from preferences.models import PreferencesModel |
||||
|
from re2o.mixins import AclMixin, RevMixin |
||||
@ -0,0 +1,33 @@ |
|||||
|
# -*- mode: python; coding: utf-8 -*- |
||||
|
# Re2o est un logiciel d'administration développé initiallement au Rézo Metz. Il |
||||
|
# se veut agnostique au réseau considéré, de manière à être installable en |
||||
|
# quelques clics. |
||||
|
# |
||||
|
# Copyright © 2019 Gabriel Détraz |
||||
|
# |
||||
|
# This program is free software; you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU General Public License as published by |
||||
|
# the Free Software Foundation; either version 2 of the License, or |
||||
|
# (at your option) any later version. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU General Public License along |
||||
|
# with this program; if not, write to the Free Software Foundation, Inc., |
||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||||
|
from django import forms |
||||
|
from django.forms import Form, ModelForm |
||||
|
from django.utils.translation import ugettext_lazy as _ |
||||
|
|
||||
|
from .models import FootprintOption |
||||
|
|
||||
|
|
||||
|
class EditFootprintOptionForm(ModelForm): |
||||
|
"""Form used to edit the settings of the footprint optional app.""" |
||||
|
|
||||
|
class Meta: |
||||
|
model = FootprintOption |
||||
|
fields = "__all__" |
||||
@ -0,0 +1,59 @@ |
|||||
|
# -*- mode: python; coding: utf-8 -*- |
||||
|
# Re2o est un logiciel d'administration développé initiallement au Rézo Metz. Il |
||||
|
# se veut agnostique au réseau considéré, de manière à être installable en |
||||
|
# quelques clics. |
||||
|
# |
||||
|
# Copyright © 2019 Gabriel Détraz |
||||
|
# |
||||
|
# This program is free software; you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU General Public License as published by |
||||
|
# the Free Software Foundation; either version 2 of the License, or |
||||
|
# (at your option) any later version. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU General Public License along |
||||
|
# with this program; if not, write to the Free Software Foundation, Inc., |
||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||||
|
""" |
||||
|
footprint optional app preferences model |
||||
|
""" |
||||
|
|
||||
|
from django.db import models |
||||
|
from django.core.validators import MinValueValidator |
||||
|
from django.utils.translation import ugettext_lazy as _ |
||||
|
|
||||
|
from preferences.models import PreferencesModel |
||||
|
from re2o.mixins import AclMixin, RevMixin |
||||
|
|
||||
|
|
||||
|
class FootprintOption(AclMixin, PreferencesModel): |
||||
|
"""Definition of the settings of the footprint app.""" |
||||
|
|
||||
|
# https://www.ademe.fr/expertises/consommer-autrement/passer-a-laction/reconnaitre-produit-plus-respectueux-lenvironnement/dossier/laffichage-environnemental/affichage-environnemental-secteur-numerique |
||||
|
monthly_infra_emissions = models.DecimalField( |
||||
|
verbose_name=_("Estimated monthly infrastructure emissions (in kgCO₂e/month)"), |
||||
|
max_digits=10, |
||||
|
decimal_places=2, |
||||
|
null=True, |
||||
|
blank=True, |
||||
|
default=None, |
||||
|
validators=[MinValueValidator(0)], |
||||
|
) |
||||
|
data_usage_script_path = models.CharField( |
||||
|
verbose_name=_("User monthly data usage estimation script"), |
||||
|
default="footprint/scripts/default_data_usage_estimator.py", |
||||
|
max_length=4096, |
||||
|
) |
||||
|
data_usage_script_timeout = models.DecimalField( |
||||
|
verbose_name=_("Estimation script timeout (in seconds)"), |
||||
|
max_digits=4, |
||||
|
decimal_places=2, |
||||
|
default=10, |
||||
|
) |
||||
|
|
||||
|
class Meta: |
||||
|
verbose_name = _("Footprint preferences") |
||||
@ -0,0 +1,46 @@ |
|||||
|
# -*- mode: python; coding: utf-8 -*- |
||||
|
# Re2o est un logiciel d'administration développé initiallement au Rézo Metz. Il |
||||
|
# se veut agnostique au réseau considéré, de manière à être installable en |
||||
|
# quelques clics. |
||||
|
# |
||||
|
# Copyright © 2021 Jean-Romain Garnier |
||||
|
# |
||||
|
# This program is free software; you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU General Public License as published by |
||||
|
# the Free Software Foundation; either version 2 of the License, or |
||||
|
# (at your option) any later version. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU General Public License along |
||||
|
# with this program; if not, write to the Free Software Foundation, Inc., |
||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||||
|
from django.contrib import messages |
||||
|
from django.contrib.auth.decorators import login_required |
||||
|
from django.shortcuts import redirect, render |
||||
|
from django.template.loader import render_to_string |
||||
|
from django.urls import reverse |
||||
|
from django.utils.translation import ugettext as _ |
||||
|
|
||||
|
from preferences.views import edit_options_template_function |
||||
|
|
||||
|
from . import forms, models |
||||
|
|
||||
|
|
||||
|
def aff_preferences(request): |
||||
|
"""View used to display the settings of the footprint app in the preferences page.""" |
||||
|
pref, _ = models.FootprintOption.objects.get_or_create() |
||||
|
context = { |
||||
|
"preferences": pref, |
||||
|
} |
||||
|
return render_to_string( |
||||
|
"footprint/preferences.html", context=context, request=request, using=None |
||||
|
) |
||||
|
|
||||
|
|
||||
|
@login_required |
||||
|
def edit_options(request, section): |
||||
|
return edit_options_template_function(request, section, forms, models) |
||||
@ -0,0 +1,35 @@ |
|||||
|
#!/usr/bin/env python3 |
||||
|
# -*- mode: python; coding: utf-8 -*- |
||||
|
# Re2o est un logiciel d'administration développé initiallement au Rézo Metz. Il |
||||
|
# se veut agnostique au réseau considéré, de manière à être installable en |
||||
|
# quelques clics. |
||||
|
# |
||||
|
# Copyright © 2021 Jean-Romain Garnier |
||||
|
# |
||||
|
# This program is free software; you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU General Public License as published by |
||||
|
# the Free Software Foundation; either version 2 of the License, or |
||||
|
# (at your option) any later version. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU General Public License along |
||||
|
# with this program; if not, write to the Free Software Foundation, Inc., |
||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||||
|
import sys |
||||
|
|
||||
|
|
||||
|
def main(user_id: int) -> float: |
||||
|
return None |
||||
|
|
||||
|
|
||||
|
if __name__ == "__main__": |
||||
|
if len(sys.argv) != 2: |
||||
|
print("Usage: ./default_data_usage_estimator.py <re2o user id>") |
||||
|
exit(1) |
||||
|
|
||||
|
usage = main(sys.argv[1]) |
||||
|
print(usage) |
||||
@ -0,0 +1,92 @@ |
|||||
|
{% comment %} |
||||
|
Re2o est un logiciel d'administration développé initiallement au Rézo Metz. Il |
||||
|
se veut agnostique au réseau considéré, de manière à être installable en |
||||
|
quelques clics. |
||||
|
|
||||
|
Copyright © 2021 Jean-Romain Garnier |
||||
|
|
||||
|
This program is free software; you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation; either version 2 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
This program is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License along |
||||
|
with this program; if not, write to the Free Software Foundation, Inc., |
||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||||
|
{% endcomment %} |
||||
|
|
||||
|
{% load acl %} |
||||
|
{% load i18n %} |
||||
|
|
||||
|
<div class="panel panel-default"> |
||||
|
<div class="panel-heading clearfix profil" data-parent="#accordion" data-toggle="collapse" data-target="#footprint"> |
||||
|
<h3 class="panel-title pull-left"> |
||||
|
<i class="fa fa-leaf"></i> {% trans "Footprint" %} |
||||
|
</h3> |
||||
|
</div> |
||||
|
<div id="footprint" class="panel-collapse collapse"> |
||||
|
<div class="panel-body"> |
||||
|
|
||||
|
<div class="table-responsive"> |
||||
|
<table class="table"> |
||||
|
<tr> |
||||
|
<th>{% trans "Estimated monthly emissions" %}</th> |
||||
|
|
||||
|
{% if not user.has_access %} |
||||
|
<td>{% trans "n/a" %}</td> |
||||
|
{% elif monthly_emissions is None %} |
||||
|
<td>{% trans "Unavailable" %}</td> |
||||
|
{% else %} |
||||
|
<td>{{ monthly_emissions|floatformat:2 }} {% trans "kgCO₂e/month" %}</td> |
||||
|
{% endif %} |
||||
|
|
||||
|
<td><a target="_blank" rel="noreferrer noopener" href="https://www.ademe.fr/expertises/consommer-autrement/passer-a-laction/reconnaitre-produit-plus-respectueux-lenvironnement/dossier/laffichage-environnemental/affichage-environnemental-secteur-numerique">{% trans "[Learn more]" %}</a></td> |
||||
|
</tr> |
||||
|
|
||||
|
<tr> |
||||
|
<th>{% trans "Estimated monthly data usage" %}</th> |
||||
|
|
||||
|
{% if not user.has_access %} |
||||
|
<td>{% trans "n/a" %}</td> |
||||
|
{% else %} |
||||
|
<td id="data_usage_estimate"><a href="javascript:get_data_usage_estimate()">{% trans "Compute" %}</a></td> |
||||
|
{% endif %} |
||||
|
|
||||
|
<td><a target="_blank" rel="noreferrer noopener" href="https://www.ademe.fr/expertises/consommer-autrement/passer-a-laction/reconnaitre-produit-plus-respectueux-lenvironnement/dossier/laffichage-environnemental/affichage-environnemental-secteur-numerique">{% trans "[Learn more]" %}</a></td> |
||||
|
</tr> |
||||
|
</table> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
<script> |
||||
|
function get_data_usage_estimate() { |
||||
|
td = document.getElementById("data_usage_estimate"); |
||||
|
td.innerHTML = "<progress></progress>" |
||||
|
|
||||
|
$.ajax({ |
||||
|
url: "{% url 'footprint:data-usage-estimate' user.id %}", |
||||
|
type: "get", |
||||
|
dataType: "json", |
||||
|
success: function(data) { |
||||
|
if (data["error"] != null) { |
||||
|
td.innerHTML = "<i class=\"text-danger\">" + data["error"] + "</i>"; |
||||
|
} else if (data["data"] != null) { |
||||
|
td.innerHTML = data["data"] + " {% trans 'GiB/month' %}"; |
||||
|
} else { |
||||
|
td.innerHTML = "<i class=\"text-danger\">{% trans 'Unknown error' %}</i>"; |
||||
|
} |
||||
|
}, |
||||
|
error: function(xhr, errmsg, err) { |
||||
|
td.innerHTML = "<i class=\"text-danger\">" + errmsg + "</i>"; |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
</script> |
||||
|
</div> |
||||
|
|
||||
@ -0,0 +1,66 @@ |
|||||
|
{% comment %} |
||||
|
Re2o est un logiciel d'administration développé initiallement au Rézo Metz. Il |
||||
|
se veut agnostique au réseau considéré, de manière à être installable en |
||||
|
quelques clics. |
||||
|
|
||||
|
Copyright © 2021 Jean-Romain Garnier |
||||
|
|
||||
|
This program is free software; you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation; either version 2 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
This program is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License along |
||||
|
with this program; if not, write to the Free Software Foundation, Inc., |
||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||||
|
{% endcomment %} |
||||
|
|
||||
|
{% load design %} |
||||
|
{% load i18n %} |
||||
|
|
||||
|
<div class="panel panel-default" id="footprint"> |
||||
|
<div class="panel-heading" data-toggle="collapse" href="#collapse_footprint"> |
||||
|
<h4 class="panel-title"> |
||||
|
<a><i class="fa fa-leaf"></i> {% trans "Footprint" %}</a> |
||||
|
</h4> |
||||
|
</div> |
||||
|
|
||||
|
<div id="collapse_footprint" class="panel-collapse panel-body collapse"> |
||||
|
<a class="btn btn-primary btn-sm" role="button" href="{% url 'footprint:edit-options' 'FootprintOption' %}"> |
||||
|
<i class="fa fa-edit"></i> |
||||
|
{% trans "Edit" %} |
||||
|
</a> |
||||
|
|
||||
|
<p></p> |
||||
|
|
||||
|
<div class="table-responsive"> |
||||
|
<table class="table"> |
||||
|
<tr> |
||||
|
<th><p>{% trans "Estimated monthly infrastructure emissions" %}</p></th> |
||||
|
|
||||
|
{% if preferences.monthly_infra_emissions is None %} |
||||
|
<td><p>{% trans "Not specified" %}</p></td> |
||||
|
{% else %} |
||||
|
<td><p>{{ preferences.monthly_infra_emissions }} {% trans "kgCO₂e/month" %}</p></td> |
||||
|
{% endif %} |
||||
|
|
||||
|
</tr> |
||||
|
|
||||
|
<tr> |
||||
|
<th><p>{% trans "User monthly data usage estimation script" %}</p></th> |
||||
|
<td><p>{{ preferences.data_usage_script_path }}</p></td> |
||||
|
</tr> |
||||
|
|
||||
|
<tr> |
||||
|
<th><p>{% trans "Data estimation script timeout (in seconds)" %}</p></th> |
||||
|
<td><p>{{ preferences.data_usage_script_timeout }}</p></td> |
||||
|
</tr> |
||||
|
|
||||
|
</table> |
||||
|
</div> |
||||
|
</div> |
||||
@ -0,0 +1,43 @@ |
|||||
|
# -*- mode: python; coding: utf-8 -*- |
||||
|
# Re2o est un logiciel d'administration développé initiallement au Rézo Metz. Il |
||||
|
# se veut agnostique au réseau considéré, de manière à être installable en |
||||
|
# quelques clics. |
||||
|
# |
||||
|
# Copyright © 2021 Jean-Romain Garnier |
||||
|
# |
||||
|
# This program is free software; you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU General Public License as published by |
||||
|
# the Free Software Foundation; either version 2 of the License, or |
||||
|
# (at your option) any later version. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU General Public License along |
||||
|
# with this program; if not, write to the Free Software Foundation, Inc., |
||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||||
|
""" |
||||
|
Footprint optional app urls |
||||
|
""" |
||||
|
|
||||
|
from django.urls import path, re_path |
||||
|
|
||||
|
from . import views |
||||
|
from .preferences.views import edit_options |
||||
|
|
||||
|
app_name = "footprint" |
||||
|
|
||||
|
urlpatterns = [ |
||||
|
re_path( |
||||
|
r"^edit_options/(?P<section>FootprintOption)$", |
||||
|
edit_options, |
||||
|
name="edit-options", |
||||
|
), |
||||
|
path( |
||||
|
"data_usage_estimate/<int:userid>", |
||||
|
views.get_data_usage_estimate, |
||||
|
name="data-usage-estimate", |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,72 @@ |
|||||
|
# -*- mode: python; coding: utf-8 -*- |
||||
|
# Re2o est un logiciel d'administration développé initiallement au Rézo Metz. Il |
||||
|
# se veut agnostique au réseau considéré, de manière à être installable en |
||||
|
# quelques clics. |
||||
|
# |
||||
|
# Copyright © 2021 Jean-Romain Garnier |
||||
|
# |
||||
|
# This program is free software; you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU General Public License as published by |
||||
|
# the Free Software Foundation; either version 2 of the License, or |
||||
|
# (at your option) any later version. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU General Public License along |
||||
|
# with this program; if not, write to the Free Software Foundation, Inc., |
||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||||
|
""" |
||||
|
Footprint optional app utils |
||||
|
""" |
||||
|
import pathlib |
||||
|
import subprocess |
||||
|
|
||||
|
from django.contrib import messages |
||||
|
from django.utils.translation import ugettext as _ |
||||
|
|
||||
|
from re2o.utils import all_has_access |
||||
|
|
||||
|
from .preferences.models import FootprintOption |
||||
|
|
||||
|
|
||||
|
def get_user_monthly_emissions(request, user): |
||||
|
if not user.has_access: |
||||
|
return None |
||||
|
|
||||
|
monthly_infra_emissions = FootprintOption.get_cached_value( |
||||
|
"monthly_infra_emissions" |
||||
|
) |
||||
|
if monthly_infra_emissions is None: |
||||
|
return None |
||||
|
|
||||
|
user_count = all_has_access(including_asso=False).count() |
||||
|
return monthly_infra_emissions / max(user_count, 1) |
||||
|
|
||||
|
|
||||
|
def get_user_monthly_data_usage(request, user): |
||||
|
if not user.has_access: |
||||
|
return None |
||||
|
|
||||
|
data_usage_script_path = FootprintOption.get_cached_value("data_usage_script_path") |
||||
|
if data_usage_script_path is None: |
||||
|
return None |
||||
|
|
||||
|
script_path = pathlib.Path(data_usage_script_path) |
||||
|
if not script_path.is_absolute(): |
||||
|
re2o_base_path = pathlib.Path(__file__).parent.parent.resolve() |
||||
|
script_path = re2o_base_path / script_path |
||||
|
|
||||
|
timeout = float(FootprintOption.get_cached_value("data_usage_script_timeout")) |
||||
|
|
||||
|
cmd = [script_path, str(user.id)] |
||||
|
out = subprocess.check_output(cmd, timeout=timeout).decode("utf-8").strip() |
||||
|
|
||||
|
if out == "None": |
||||
|
out = None |
||||
|
else: |
||||
|
out = float(out) |
||||
|
|
||||
|
return out |
||||
@ -0,0 +1,67 @@ |
|||||
|
# -*- mode: python; coding: utf-8 -*- |
||||
|
# Re2o est un logiciel d'administration développé initiallement au Rézo Metz. Il |
||||
|
# se veut agnostique au réseau considéré, de manière à être installable en |
||||
|
# quelques clics. |
||||
|
# |
||||
|
# Copyright © 2021 Jean-Romain Garnier |
||||
|
# |
||||
|
# This program is free software; you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU General Public License as published by |
||||
|
# the Free Software Foundation; either version 2 of the License, or |
||||
|
# (at your option) any later version. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU General Public License along |
||||
|
# with this program; if not, write to the Free Software Foundation, Inc., |
||||
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
||||
|
""" |
||||
|
Footprint optional app views |
||||
|
""" |
||||
|
|
||||
|
from django.contrib.auth.decorators import login_required |
||||
|
from django.template.loader import render_to_string |
||||
|
from django.utils.translation import ugettext as _ |
||||
|
from django.http import JsonResponse |
||||
|
|
||||
|
from users.models import User |
||||
|
from re2o.acl import can_view |
||||
|
|
||||
|
from .utils import get_user_monthly_emissions, get_user_monthly_data_usage |
||||
|
|
||||
|
|
||||
|
@login_required |
||||
|
@can_view(User) |
||||
|
def get_data_usage_estimate(request, user, userid): |
||||
|
"""View used to compute a user's estimated data usage.""" |
||||
|
data = None |
||||
|
error = None |
||||
|
try: |
||||
|
user_req = User.objects.get(pk=userid) |
||||
|
except User.DoesNotExist: |
||||
|
return JsonResponse({"data": None, "error": _("Nonexistent user.")}) |
||||
|
|
||||
|
try: |
||||
|
data = get_user_monthly_data_usage(request, user_req) |
||||
|
except Exception: |
||||
|
return JsonResponse({"data": None, "error": _("Failed to compute data usage.")}) |
||||
|
|
||||
|
return JsonResponse({"data": data, "error": None}) |
||||
|
|
||||
|
|
||||
|
# Canonic views for optional apps |
||||
|
def aff_profil(request, user): |
||||
|
"""View used to display the footprint on a user's profile.""" |
||||
|
|
||||
|
monthly_emissions = get_user_monthly_emissions(request, user) |
||||
|
|
||||
|
context = { |
||||
|
"user": user, |
||||
|
"monthly_emissions": monthly_emissions, |
||||
|
} |
||||
|
return render_to_string( |
||||
|
"footprint/aff_profil.html", context=context, request=request, using=None |
||||
|
) |
||||
Loading…
Reference in new issue