8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-11-09 11:26:27 +00:00

Refactor de la fonction gen_graph + graph quand modification des objets

This commit is contained in:
Gabriel Detraz 2018-05-11 23:17:57 +02:00 committed by chirac
parent c62a1ac30e
commit b2d57ec827
5 changed files with 108 additions and 21 deletions

View file

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2018-05-11 17:54
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('machines', '0080_auto_20180502_2334'),
]
operations = [
migrations.AlterField(
model_name='service_link',
name='server',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='machines.Interface'),
),
]

View file

@ -1373,9 +1373,8 @@ class Service(RevMixin, AclMixin, models.Model):
def regen(service): def regen(service):
""" Fonction externe pour régérération d'un service, prend un objet service """ Fonction externe pour régérération d'un service, prend un objet service
en arg""" en arg"""
obj = Service.objects.filter(service_type=service) obj, created = Service.objects.get_or_create(service_type=service)
if obj: obj.ask_regen()
obj[0].ask_regen()
return return
@ -1384,7 +1383,12 @@ class Service_link(RevMixin, AclMixin, models.Model):
PRETTY_NAME = "Relation entre service et serveur" PRETTY_NAME = "Relation entre service et serveur"
service = models.ForeignKey('Service', on_delete=models.CASCADE) service = models.ForeignKey('Service', on_delete=models.CASCADE)
server = models.ForeignKey('Interface', on_delete=models.CASCADE) server = models.ForeignKey(
'Interface',
on_delete=models.CASCADE,
null=True,
blank=True
)
last_regen = models.DateTimeField(auto_now_add=True) last_regen = models.DateTimeField(auto_now_add=True)
asked_regen = models.BooleanField(default=False) asked_regen = models.BooleanField(default=False)
@ -1525,6 +1529,8 @@ def machine_post_save(**kwargs):
user.ldap_sync(base=False, access_refresh=False, mac_refresh=True) user.ldap_sync(base=False, access_refresh=False, mac_refresh=True)
regen('dhcp') regen('dhcp')
regen('mac_ip_list') regen('mac_ip_list')
if user == preferences.models.OptionalMachine.get_cached_value('utilisateur_asso'):
regen('graph_topo')
@receiver(post_delete, sender=Machine) @receiver(post_delete, sender=Machine)
@ -1549,6 +1555,8 @@ def interface_post_save(**kwargs):
# Regen services # Regen services
regen('dhcp') regen('dhcp')
regen('mac_ip_list') regen('mac_ip_list')
if interface.machine.user == preferences.models.OptionalMachine.get_cached_value('utilisateur_asso'):
regen('graph_topo')
@receiver(post_delete, sender=Interface) @receiver(post_delete, sender=Interface)
@ -1659,3 +1667,11 @@ def srv_post_save(**_kwargs):
def srv_post_delete(**_kwargs): def srv_post_delete(**_kwargs):
"""Regeneration dns après modification d'un SRV""" """Regeneration dns après modification d'un SRV"""
regen('dns') regen('dns')
@receiver(post_save, sender=Service)
def service_post_save(**kwargs):
"""Création d'un service_link si non existant"""
service = kwargs['instance']
service_link, created = Service_link.objects.get_or_create(service=service)

View file

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2018-05-11 17:54
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('machines', '0081_auto_20180511_1254'),
('topologie', '0059_auto_20180415_2249'),
]
operations = [
migrations.CreateModel(
name='Server',
fields=[
],
options={
'proxy': True,
},
bases=('machines.machine',),
),
]

View file

@ -492,26 +492,47 @@ class Room(AclMixin, RevMixin, models.Model):
def ap_post_save(**_kwargs): def ap_post_save(**_kwargs):
"""Regeneration des noms des bornes vers le controleur""" """Regeneration des noms des bornes vers le controleur"""
regen('unifi-ap-names') regen('unifi-ap-names')
regen("graph_topo")
@receiver(post_delete, sender=AccessPoint) @receiver(post_delete, sender=AccessPoint)
def ap_post_delete(**_kwargs): def ap_post_delete(**_kwargs):
"""Regeneration des noms des bornes vers le controleur""" """Regeneration des noms des bornes vers le controleur"""
regen('unifi-ap-names') regen('unifi-ap-names')
regen("graph_topo")
@receiver(post_delete, sender=Stack) @receiver(post_delete, sender=Stack)
def stack_post_delete(**_kwargs): def stack_post_delete(**_kwargs):
"""Vide les id des switches membres d'une stack supprimée""" """Vide les id des switches membres d'une stack supprimée"""
Switch.objects.filter(stack=None).update(stack_member_id=None) Switch.objects.filter(stack=None).update(stack_member_id=None)
#@receiver(post_save, sender=Port) @receiver(post_save, sender=Port)
#@receiver(post_save, sender=AccessPoint) def port_post_save(**_kwargs):
#@receiver(post_save, sender=ModelSwitch) regen("graph_topo")
#@receiver(post_save, sender=Building)
#@receiver(post_save, sender=Building) @receiver(post_delete, sender=Port)
#@receiver(post_save, sender=Server) def port_post_delete(**_kwargs):
@receiver(pre_save, sender=Switch) regen("graph_topo")
def delete_graph(**_kwargs):
if isfile("media/images/switchs.png"): @receiver(post_save, sender=ModelSwitch)
remove("media/images/switchs.png") def modelswitch_post_save(**_kwargs):
regen("graph_topo")
@receiver(post_delete, sender=ModelSwitch)
def modelswitch_post_delete(**_kwargs):
regen("graph_topo")
@receiver(post_save, sender=Building)
def building_post_save(**_kwargs):
regen("graph_topo")
@receiver(post_delete, sender=Building)
def building_post_delete(**_kwargs):
regen("graph_topo")
@receiver(post_save, sender=Switch)
def switch_post_save(**_kwargs):
regen("graph_topo")
@receiver(post_delete, sender=Switch)
def switch_post_delete(**_kwargs):
regen("graph_topo")

View file

@ -57,13 +57,14 @@ from re2o.acl import (
can_view, can_view,
can_view_all, can_view_all,
) )
from re2o.settings import MEDIA_ROOT
from machines.forms import ( from machines.forms import (
DomainForm, DomainForm,
EditInterfaceForm, EditInterfaceForm,
AddInterfaceForm AddInterfaceForm
) )
from machines.views import generate_ipv4_mbf_param from machines.views import generate_ipv4_mbf_param
from machines.models import Interface from machines.models import Interface, Service_link
from preferences.models import AssoOption, GeneralOption from preferences.models import AssoOption, GeneralOption
from .models import ( from .models import (
@ -118,7 +119,10 @@ def index(request):
pagination_number = GeneralOption.get_cached_value('pagination_number') pagination_number = GeneralOption.get_cached_value('pagination_number')
switch_list = re2o_paginator(request, switch_list, pagination_number) switch_list = re2o_paginator(request, switch_list, pagination_number)
# make_machine_graph() if any(service_link.need_regen() for service_link in Service_link.objects.filter(service__service_type='graph_topo')):
make_machine_graph()
for service_link in Service_link.objects.filter(service__service_type='graph_topo'):
service_link.done_regen()
return render( return render(
request, request,
@ -1022,15 +1026,15 @@ def make_machine_graph():
#Exportation du dot et génération de l'image #Exportation du dot et génération de l'image
dot_data=generate_image(dico) dot_data=generate_image(dico)
fichier = open("media/images/switchs.dot","w") fichier = open(MEDIA_ROOT + "/images/switchs.dot","w", encoding='utf-8')
fichier.write(dot_data) fichier.write(dot_data)
fichier.close() fichier.close()
unflatten = Popen( unflatten = Popen(
["unflatten","-l", "3", "media/images/switchs.dot"], ["unflatten","-l", "3", MEDIA_ROOT + "/images/switchs.dot"],
stdout=PIPE stdout=PIPE
) )
image = Popen( image = Popen(
["dot", "-Tpng", "-o", "media/images/switchs.png"], ["dot", "-Tpng", "-o", MEDIA_ROOT + "/images/switchs.png"],
stdin=unflatten.stdout, stdin=unflatten.stdout,
stdout=PIPE stdout=PIPE
) )