mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-12-24 07:53:47 +00:00
Fix machine history views
This commit is contained in:
parent
4b7393b5e4
commit
c4634191f5
6 changed files with 58 additions and 11 deletions
|
@ -40,9 +40,7 @@ class MachineHistoryForm(Form):
|
||||||
)
|
)
|
||||||
t = forms.CharField(
|
t = forms.CharField(
|
||||||
label=_("Search type"),
|
label=_("Search type"),
|
||||||
widget=forms.Select,
|
widget=forms.Select(choices=CHOICES_TYPE)
|
||||||
choices=CHOICES_TYPE,
|
|
||||||
initial=0,
|
|
||||||
)
|
)
|
||||||
s = forms.DateField(required=False, label=_("Start date"))
|
s = forms.DateField(required=False, label=_("Start date"))
|
||||||
e = forms.DateField(required=False, label=_("End date"))
|
e = forms.DateField(required=False, label=_("End date"))
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% extends 'log/sidebar.html' %}
|
{% extends 'logs/sidebar.html' %}
|
||||||
{% comment %}
|
{% comment %}
|
||||||
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
|
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
|
||||||
se veut agnostique au réseau considéré, de manière à être installable en
|
se veut agnostique au réseau considéré, de manière à être installable en
|
||||||
|
|
|
@ -24,19 +24,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
{% load bootstrap3 %}
|
{% load bootstrap3 %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
{% block title %}{% trans "Search" %}{% endblock %}
|
{% block title %}{% trans "Search machine history" %}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<form class="form">
|
<form class="form">
|
||||||
|
<h3>{% trans "Search machine history" %}</h3>
|
||||||
|
|
||||||
{% bootstrap_field history_form.q %}
|
{% bootstrap_field history_form.q %}
|
||||||
{% bootstrap_form_errors history_form.t %}
|
{% bootstrap_field history_form.t %}
|
||||||
{% if history_form.s %}
|
|
||||||
{% bootstrap_field history_form.s %}
|
{% bootstrap_field history_form.s %}
|
||||||
{% endif %}
|
|
||||||
{% if history_form.e %}
|
|
||||||
{% bootstrap_field history_form.e %}
|
{% bootstrap_field history_form.e %}
|
||||||
{% endif %}
|
|
||||||
{% trans "Search" as tr_search %}
|
{% trans "Search" as tr_search %}
|
||||||
{% bootstrap_button tr_search button_type="submit" icon="search" %}
|
{% bootstrap_button tr_search button_type="submit" icon="search" %}
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -46,4 +46,5 @@ urlpatterns = [
|
||||||
views.history,
|
views.history,
|
||||||
name="history",
|
name="history",
|
||||||
),
|
),
|
||||||
|
url(r"^stats_search_machine/$", views.stats_search_machine_history, name="stats-search-machine"),
|
||||||
]
|
]
|
||||||
|
|
|
@ -483,7 +483,7 @@ def stats_actions(request):
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@can_view_app("users")
|
@can_view_app("users")
|
||||||
def search_machine_history(request):
|
def stats_search_machine_history(request):
|
||||||
"""Vue qui permet de rechercher l'historique des machines ayant utilisé
|
"""Vue qui permet de rechercher l'historique des machines ayant utilisé
|
||||||
une IP ou une adresse MAC"""
|
une IP ou une adresse MAC"""
|
||||||
history_form = MachineHistoryForm(request.GET or None)
|
history_form = MachineHistoryForm(request.GET or None)
|
||||||
|
|
50
test.py
Normal file
50
test.py
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
from reversion.models import Version
|
||||||
|
from machines.models import IpList
|
||||||
|
from machines.models import Interface
|
||||||
|
from machines.models import Machine
|
||||||
|
from users.models import User
|
||||||
|
|
||||||
|
|
||||||
|
def get_interfaces_with_ip(ip):
|
||||||
|
"""
|
||||||
|
Get all the interfaces that, at some point, had the given ip
|
||||||
|
"""
|
||||||
|
# TODO: What if IpList was deleted?
|
||||||
|
ip_id = IpList.objects.get(ipv4=ip).id
|
||||||
|
interfaces = Version.objects.get_for_model(Interface)
|
||||||
|
interfaces = filter(lambda x: x.field_dict["ipv4_id"] == ip_id, interfaces)
|
||||||
|
return interfaces
|
||||||
|
|
||||||
|
|
||||||
|
def get_machine_with_interface(interface):
|
||||||
|
"""
|
||||||
|
Get the machine which contained the given interface, even if deleted
|
||||||
|
"""
|
||||||
|
machine_id = interface.field_dict["machine_id"]
|
||||||
|
machines = Version.objects.get_for_model(Machine)
|
||||||
|
machines = filter(lambda x: x.field_dict["id"] == machine_id, machines)
|
||||||
|
return machines[0]
|
||||||
|
|
||||||
|
|
||||||
|
def get_user_with_machine(machine):
|
||||||
|
"""
|
||||||
|
"""
|
||||||
|
user_id = machine.field_dict["user_id"]
|
||||||
|
user = User.objects.filter(id=user_id)
|
||||||
|
return user[0]
|
||||||
|
|
||||||
|
|
||||||
|
interfaces = get_interfaces_with_ip("10.0.0.0")
|
||||||
|
|
||||||
|
output_dict = {}
|
||||||
|
for interface in interfaces:
|
||||||
|
mac = interface.field_dict["mac_address"]
|
||||||
|
machine = get_machine_with_interface(interface)
|
||||||
|
user = get_user_with_machine(machine)
|
||||||
|
output_dict[mac] = {
|
||||||
|
"machine": machine.field_dict["name"],
|
||||||
|
"user": user
|
||||||
|
}
|
||||||
|
|
||||||
|
print(output_dict)
|
||||||
|
|
Loading…
Reference in a new issue