You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
2.0 KiB
56 lines
2.0 KiB
|
|
from django.http import HttpResponse, HttpResponseRedirect |
|
from django.template import loader |
|
from django.shortcuts import render, get_object_or_404 |
|
from django.urls import reverse |
|
from django.contrib import messages |
|
|
|
from .models import RobotInstance |
|
import redis |
|
import json |
|
import datetime |
|
|
|
def overview(request): |
|
r = redis.StrictRedis(unix_socket_path='/var/run/redis/redis') |
|
robot_instances = RobotInstance.objects.order_by('instanceId') |
|
robot_states = [] |
|
index = 0 |
|
for robot in robot_instances: |
|
raw_state = r.get(robot.instanceId) |
|
if raw_state is not None: |
|
state = json.loads(str(raw_state, 'utf-8')) |
|
try: |
|
positions = state['positions'] |
|
del state['positions'] |
|
except KeyError: |
|
positions = dict() |
|
else: |
|
state = dict() |
|
|
|
last_store = r.get(robot.instanceId + ":last_store") |
|
if last_store is not None: |
|
last_store = datetime.datetime.utcfromtimestamp(float(str(last_store, 'utf-8')[:-1])) |
|
index += 1 |
|
robot_states.append((index, robot.instanceId, json.dumps(state, sort_keys=True, indent=2, separators=(',', ': ')), positions, last_store)) |
|
|
|
template = loader.get_template('dashboard/overview.html') |
|
context = { |
|
'robot_instances' : robot_instances, |
|
'robot_states' : robot_states |
|
} |
|
return HttpResponse(template.render(context, request)) |
|
|
|
def add_instance(request): |
|
instance_id = request.POST['instance_id'] |
|
if instance_id == "" or RobotInstance.objects.filter(instanceId=instance_id).count() > 0: |
|
messages.error(request, 'Invalid instance ID specified') |
|
else: |
|
new_instance = RobotInstance(instanceId=instance_id) |
|
new_instance.save() |
|
return HttpResponseRedirect(reverse('overview')) |
|
|
|
def delete_instance(request, instance_id): |
|
instance = get_object_or_404(RobotInstance, instanceId=instance_id) |
|
instance.delete() |
|
return HttpResponseRedirect(reverse('overview')) |
|
|
|
|