8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-10-06 02:52:10 +00:00

Ajout du domaine d'ip

This commit is contained in:
Guillaume Goessel 2016-11-15 15:25:27 +01:00
parent c34c1c34a9
commit 4b6c2d259d
8 changed files with 81 additions and 10 deletions

View file

@ -1,8 +1,13 @@
<ul class="pagination nav navbar-nav">
<li><a href="?onglet=1">1 mois</a></li>
<li><a href="?onglet=2">2 mois</a></li>
</ul>
{% for key_dict, stats_dict in stats_list.items %} {% for key_dict, stats_dict in stats_list.items %}
{% for key, stats in stats_dict.items %} {% for key, stats in stats_dict.items %}
<table class="table table-striped"> <table class="table table-striped">
<h4>Statistiques par {{ key_dict }} de {{ key }}</h4>
<thead> <thead>
<h4>Statistiques par {{ key_dict }} de {{ key }}</h4>
<tr> <tr>
<th>{{ key_dict }}</th> <th>{{ key_dict }}</th>
<th>Nombre de {{ key }} par {{ key_dict }}</th> <th>Nombre de {{ key }} par {{ key_dict }}</th>

View file

@ -24,6 +24,18 @@ from topologie.models import Switch, Port, Room
from re2o.settings import PAGINATION_NUMBER, PAGINATION_LARGE_NUMBER from re2o.settings import PAGINATION_NUMBER, PAGINATION_LARGE_NUMBER
from django.utils import timezone
from dateutil.relativedelta import relativedelta
STATS_DICT = {
0 : ["Tout", 36],
1 : ["1 mois", 1],
2 : ["2 mois", 2],
3 : ["6 mois", 6],
4 : ["1 an", 12],
5 : ["2 an", 24],
}
def form(ctx, template, request): def form(ctx, template, request):
c = ctx c = ctx
c.update(csrf(request)) c.update(csrf(request))
@ -105,11 +117,18 @@ def stats_models(request):
@login_required @login_required
@permission_required('cableur') @permission_required('cableur')
def stats_users(request): def stats_users(request):
onglet = request.GET.get('onglet')
try:
search_field = STATS_DICT[onglet]
except:
search_field = STATS_DICT[0]
onglet = 0
start_date = timezone.now() + relativedelta(months=-search_field[1])
stats = { stats = {
'Utilisateur' : { 'Utilisateur' : {
'Machines' : User.objects.annotate(num=Count('machine')).order_by('-num')[:10], 'Machines' : User.objects.filter(registered__gt=search_field[1]).annotate(num=Count('machine')).order_by('-num')[:10],
'Facture' : User.objects.annotate(num=Count('facture')).order_by('-num')[:10], 'Facture' : User.objects.filter(registered__gt=search_field[1]).annotate(num=Count('facture')).order_by('-num')[:10],
'Bannissement' : User.objects.annotate(num=Count('ban')).order_by('-num')[:10], 'Bannissement' : User.objects.filter(registered__gt=search_field[1]).annotate(num=Count('ban')).order_by('-num')[:10],
'Accès gracieux' : User.objects.annotate(num=Count('whitelist')).order_by('-num')[:10], 'Accès gracieux' : User.objects.annotate(num=Count('whitelist')).order_by('-num')[:10],
'Droits' : User.objects.annotate(num=Count('right')).order_by('-num')[:10], 'Droits' : User.objects.annotate(num=Count('right')).order_by('-num')[:10],
}, },
@ -123,11 +142,12 @@ def stats_users(request):
'Utilisateur' : Banque.objects.annotate(num=Count('facture')).order_by('-num')[:10], 'Utilisateur' : Banque.objects.annotate(num=Count('facture')).order_by('-num')[:10],
}, },
} }
return render(request, 'logs/stats_users.html', {'stats_list': stats}) return render(request, 'logs/stats_users.html', {'stats_list': stats, 'stats_dict' : STATS_DICT, 'active_field': onglet})
@login_required @login_required
@permission_required('cableur') @permission_required('cableur')
def stats_actions(request): def stats_actions(request):
onglet = request.GET.get('onglet')
stats = { stats = {
'Utilisateur' : { 'Utilisateur' : {
'Action' : User.objects.annotate(num=Count('revision')).order_by('-num')[:40], 'Action' : User.objects.annotate(num=Count('revision')).order_by('-num')[:40],

View file

@ -7,7 +7,7 @@ class MachineAdmin(VersionAdmin):
list_display = ('user','name','active') list_display = ('user','name','active')
class IpTypeAdmin(VersionAdmin): class IpTypeAdmin(VersionAdmin):
list_display = ('type','extension','need_infra') list_display = ('type','extension','need_infra','domaine_ip','domaine_range')
class MachineTypeAdmin(VersionAdmin): class MachineTypeAdmin(VersionAdmin):
list_display = ('type','ip_type') list_display = ('type','ip_type')

View file

@ -88,7 +88,7 @@ class DelMachineTypeForm(ModelForm):
class IpTypeForm(ModelForm): class IpTypeForm(ModelForm):
class Meta: class Meta:
model = IpType model = IpType
fields = ['type','extension','need_infra'] fields = ['type','extension','need_infra','domaine_ip','domaine_range']
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(IpTypeForm, self).__init__(*args, **kwargs) super(IpTypeForm, self).__init__(*args, **kwargs)
@ -98,7 +98,7 @@ class DelIpTypeForm(ModelForm):
iptypes = forms.ModelMultipleChoiceField(queryset=IpType.objects.all(), label="Types d'ip actuelles", widget=forms.CheckboxSelectMultiple) iptypes = forms.ModelMultipleChoiceField(queryset=IpType.objects.all(), label="Types d'ip actuelles", widget=forms.CheckboxSelectMultiple)
class Meta: class Meta:
exclude = ['type','extension','need_infra'] exclude = ['type','extension','need_infra','domaine_ip','domaine_range']
model = IpType model = IpType

View file

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('machines', '0027_alias'),
]
operations = [
migrations.AddField(
model_name='iptype',
name='domaine_ip',
field=models.GenericIPAddressField(blank=True, unique=True, null=True, protocol='IPv4'),
),
]

View file

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
import django.core.validators
class Migration(migrations.Migration):
dependencies = [
('machines', '0028_iptype_domaine_ip'),
]
operations = [
migrations.AddField(
model_name='iptype',
name='domaine_range',
field=models.IntegerField(null=True, validators=[django.core.validators.MinValueValidator(8), django.core.validators.MaxValueValidator(32)], blank=True),
),
]

View file

@ -4,6 +4,7 @@ from django.dispatch import receiver
from django.forms import ValidationError from django.forms import ValidationError
from macaddress.fields import MACAddressField from macaddress.fields import MACAddressField
from netaddr import EUI from netaddr import EUI
from django.core.validators import MinValueValidator,MaxValueValidator
from re2o.settings import MAIN_EXTENSION from re2o.settings import MAIN_EXTENSION
@ -33,6 +34,8 @@ class IpType(models.Model):
type = models.CharField(max_length=255) type = models.CharField(max_length=255)
extension = models.ForeignKey('Extension', on_delete=models.PROTECT) extension = models.ForeignKey('Extension', on_delete=models.PROTECT)
need_infra = models.BooleanField(default=False) need_infra = models.BooleanField(default=False)
domaine_ip = models.GenericIPAddressField(protocol='IPv4', unique=True, blank=True, null=True)
domaine_range = models.IntegerField(blank=True, null=True, validators=[MinValueValidator(8), MaxValueValidator(32)])
def __str__(self): def __str__(self):
return self.type return self.type

View file

@ -4,6 +4,8 @@
<th>Type d'ip</th> <th>Type d'ip</th>
<th>Extension</th> <th>Extension</th>
<th>Nécessite l'autorisation infra</th> <th>Nécessite l'autorisation infra</th>
<th>Domaine d'ip</th>
<th>Range</th>
<th></th> <th></th>
<th></th> <th></th>
</tr> </tr>
@ -13,6 +15,8 @@
<td>{{ type.type }}</td> <td>{{ type.type }}</td>
<td>{{ type.extension }}</td> <td>{{ type.extension }}</td>
<td>{{ type.need_infra }}</td> <td>{{ type.need_infra }}</td>
<td>{{ type.domaine_ip }}</td>
<td>{{ type.domaine_range }}</td>
<td>{% if is_infra %}<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:edit-iptype' type.id %}"><i class="glyphicon glyphicon-pushpin"></i> Editer</a>{% endif %}</td> <td>{% if is_infra %}<a class="btn btn-primary btn-sm" role="button" href="{% url 'machines:edit-iptype' type.id %}"><i class="glyphicon glyphicon-pushpin"></i> Editer</a>{% endif %}</td>
<td><a class="btn btn-info btn-sm" role="button" href="{% url 'machines:history' 'iptype' type.id %}"><i class="glyphicon glyphicon-repeat"></i> Historique</a></td> <td><a class="btn btn-info btn-sm" role="button" href="{% url 'machines:history' 'iptype' type.id %}"><i class="glyphicon glyphicon-repeat"></i> Historique</a></td>
</tr> </tr>