1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2024-12-25 23:55:24 +00:00
webvirtcloud/computes/views.py

250 lines
6.5 KiB
Python
Raw Normal View History

2015-03-19 13:37:16 +00:00
import json
2020-05-29 13:25:36 +00:00
from django.contrib import messages
2015-03-19 13:37:16 +00:00
from django.http import HttpResponse, HttpResponseRedirect
2020-05-29 13:25:36 +00:00
from django.shortcuts import get_object_or_404, redirect, render, reverse
from django.urls import reverse
2020-05-29 13:25:36 +00:00
from django.utils import timezone
from libvirt import libvirtError
from accounts.models import UserInstance
from admin.decorators import superuser_only
2020-06-16 05:04:09 +00:00
from computes.forms import (SocketComputeForm, SshComputeForm, TcpComputeForm, TlsComputeForm)
2015-02-27 08:53:51 +00:00
from computes.models import Compute
2015-03-06 11:59:27 +00:00
from instances.models import Instance
2020-05-29 13:25:36 +00:00
from vrtManager.connection import (CONN_SOCKET, CONN_SSH, CONN_TCP, CONN_TLS, connection_manager, wvmConnect)
2015-02-27 08:53:51 +00:00
from vrtManager.hostdetails import wvmHostDetails
2020-07-13 09:33:09 +00:00
from . import utils
2015-02-27 08:53:51 +00:00
@superuser_only
2015-02-27 08:53:51 +00:00
def computes(request):
"""
:param request:
:return:
"""
2015-11-13 09:13:36 +00:00
computes = Compute.objects.filter().order_by('name')
return render(request, 'computes/list.html', {'computes': computes})
2015-02-27 08:53:51 +00:00
2015-03-19 13:37:16 +00:00
@superuser_only
2015-03-04 13:43:29 +00:00
def overview(request, compute_id):
2015-04-02 12:39:40 +00:00
compute = get_object_or_404(Compute, pk=compute_id)
2020-05-19 11:47:21 +00:00
status = 'true' if connection_manager.host_is_up(compute.type, compute.hostname) is True else 'false'
2020-07-13 09:33:09 +00:00
conn = wvmHostDetails(
compute.hostname,
compute.login,
compute.password,
compute.type,
)
hostname, host_arch, host_memory, logical_cpu, model_cpu, uri_conn = conn.get_node_info()
hypervisor = conn.get_hypervisors_domain_types()
mem_usage = conn.get_memory_usage()
emulator = conn.get_emulator(host_arch)
version = conn.get_version()
lib_version = conn.get_lib_version()
conn.close()
2015-02-27 08:53:51 +00:00
2015-04-02 13:20:46 +00:00
return render(request, 'overview.html', locals())
2015-03-19 13:37:16 +00:00
2020-07-13 09:33:09 +00:00
@superuser_only
def instances(request, compute_id):
compute = get_object_or_404(Compute, pk=compute_id)
utils.refresh_instance_database(compute)
instances = Instance.objects.filter(compute=compute).prefetch_related('userinstance_set')
return render(request, 'computes/instances.html', {'compute': compute, 'instances': instances})
@superuser_only
def compute_create(request, FormClass):
form = FormClass(request.POST or None)
if form.is_valid():
form.save()
return redirect(reverse('computes'))
return render(request, 'computes/form.html', {'form': form})
@superuser_only
def compute_update(request, compute_id):
compute = get_object_or_404(Compute, pk=compute_id)
if compute.type == 1:
FormClass = TcpComputeForm
elif compute.type == 2:
FormClass = SshComputeForm
elif compute.type == 3:
FormClass = TlsComputeForm
elif compute.type == 4:
FormClass = SocketComputeForm
form = FormClass(request.POST or None, instance=compute)
if form.is_valid():
form.save()
return redirect(reverse('computes'))
return render(request, 'computes/form.html', {'form': form})
@superuser_only
def compute_delete(request, compute_id):
compute = get_object_or_404(Compute, pk=compute_id)
if request.method == 'POST':
compute.delete()
return redirect('computes')
return render(
request,
'common/confirm_delete.html',
{'object': compute},
)
2015-03-19 13:37:16 +00:00
def compute_graph(request, compute_id):
"""
:param request:
2019-09-10 06:48:31 +00:00
:param compute_id:
2015-03-19 13:37:16 +00:00
:return:
"""
2015-04-02 12:39:40 +00:00
compute = get_object_or_404(Compute, pk=compute_id)
2015-03-19 13:37:16 +00:00
try:
conn = wvmHostDetails(
compute.hostname,
compute.login,
compute.password,
compute.type,
)
2019-05-21 06:10:32 +00:00
current_time = timezone.now().strftime("%H:%M:%S")
2015-03-19 13:37:16 +00:00
cpu_usage = conn.get_cpu_usage()
mem_usage = conn.get_memory_usage()
conn.close()
except libvirtError:
2019-05-21 06:10:32 +00:00
cpu_usage = {'usage': 0}
mem_usage = {'usage': 0}
2020-05-19 16:53:54 +00:00
current_time = 0
2015-03-19 13:37:16 +00:00
data = json.dumps({
'cpudata': cpu_usage['usage'],
'memdata': mem_usage,
'timeline': current_time,
})
2015-03-19 13:37:16 +00:00
response = HttpResponse()
response['Content-Type'] = "text/javascript"
response.write(data)
2015-03-27 15:12:15 +00:00
return response
def get_compute_disk_buses(request, compute_id, arch, machine, disk):
2020-04-24 16:34:29 +00:00
"""
:param request:
:param compute_id:
:param arch:
:param machine:
:param disk:
:return:
"""
data = dict()
compute = get_object_or_404(Compute, pk=compute_id)
try:
conn = wvmConnect(
compute.hostname,
compute.login,
compute.password,
compute.type,
)
disk_device_types = conn.get_disk_device_types(arch, machine)
if disk in disk_device_types:
if disk == 'disk':
data['bus'] = sorted(disk_device_types)
elif disk == 'cdrom':
2019-09-10 06:48:31 +00:00
data['bus'] = ['ide', 'sata', 'scsi']
elif disk == 'floppy':
2019-09-10 06:48:31 +00:00
data['bus'] = ['fdc']
elif disk == 'lun':
2019-09-10 06:48:31 +00:00
data['bus'] = ['scsi']
except libvirtError:
pass
return HttpResponse(json.dumps(data))
def get_compute_machine_types(request, compute_id, arch):
2020-04-24 16:34:29 +00:00
"""
:param request:
:param compute_id:
:param arch:
:return:
"""
data = dict()
try:
compute = get_object_or_404(Compute, pk=compute_id)
conn = wvmConnect(
compute.hostname,
compute.login,
compute.password,
compute.type,
)
data['machines'] = conn.get_machine_types(arch)
except libvirtError:
pass
return HttpResponse(json.dumps(data))
def get_compute_video_models(request, compute_id, arch, machine):
2020-04-24 16:34:29 +00:00
"""
:param request:
:param compute_id:
:param arch:
:param machine:
:return:
"""
data = dict()
try:
compute = get_object_or_404(Compute, pk=compute_id)
conn = wvmConnect(
compute.hostname,
compute.login,
compute.password,
compute.type,
)
data['videos'] = conn.get_video_models(arch, machine)
except libvirtError:
pass
return HttpResponse(json.dumps(data))
def get_dom_capabilities(request, compute_id, arch, machine):
2020-04-24 16:34:29 +00:00
"""
:param request:
:param compute_id:
:param arch:
:param machine:
:return:
"""
data = dict()
try:
compute = get_object_or_404(Compute, pk=compute_id)
conn = wvmConnect(
compute.hostname,
compute.login,
compute.password,
compute.type,
)
data['videos'] = conn.get_disk_device_types(arch, machine)
data['bus'] = conn.get_disk_device_types(arch, machine)
except libvirtError:
pass
return HttpResponse(json.dumps(data))