Skip to content
Snippets Groups Projects
Commit d9a845c8 authored by shinedday's avatar shinedday
Browse files

Improved canvas update

parent c06b52da
Branches
No related tags found
No related merge requests found
......@@ -61,6 +61,10 @@ class CurrentExperiment(models.Model):
seed = models.CharField(default="0", max_length=64)
scheduling = models.CharField(default="sync", max_length=10)
canvas = models.BooleanField(default=False)
canvas_height = models.PositiveIntegerField(default=1)
canvas_width = models.PositiveIntegerField(default=1)
com_graph = models.BooleanField(default=False)
com_fun = models.CharField(default="linear", max_length=64)
com_refresh = models.PositiveIntegerField(default=1)
......@@ -85,3 +89,13 @@ class Link(models.Model):
class Node(models.Model):
name = models.CharField(max_length=60)
group = models.PositiveIntegerField(default=0)
class Canvas(models.Model):
agent_id = models.PositiveIntegerField(default=0)
x = models.PositiveIntegerField(default=0)
y = models.PositiveIntegerField(default=0)
color = models.CharField(max_length=60)
cycle = models.PositiveIntegerField(default=0)
\ No newline at end of file
......@@ -109,11 +109,13 @@ text {
const metrics = JSON.parse(e.data).message;
erraseCanvas();
console.log(metrics)
var count = metrics.length;
for (let id_agent = 0; id_agent < count; id_agent++) {
context.fillStyle = metrics[id_agent][2];
context.fillStyle = metrics[id_agent].color;
context.beginPath();
context.arc(metrics[id_agent][0], metrics[id_agent][1], 1, 0, Math.PI * 2, true);
context.arc(metrics[id_agent].x, metrics[id_agent].y, 1, 0, Math.PI * 2, true);
context.closePath();
context.fill();
};
......@@ -169,16 +171,12 @@ const myChart = new Chart(document.getElementById("line-chart"), {
{% endif %}
{% if com_graph %}
<svg width="500" height="500" style="border:1px solid #000000;"></svg>
<script>
var graph = {
"nodes": [
{"id": "Agent_0", "group": 1},
{"id": "Agent_1", "group": 2},
{"id": "Agent_2", "group": 1},
{"id": "Agent_3", "group": 3}
],
"nodes": [],
"links": []
};
......@@ -244,6 +242,7 @@ comSocket.onmessage = function (e) {
simulation.alpha(1).restart();
};
</script>
{% endif %}
</body>
......
......@@ -17,7 +17,7 @@ from iotAmak.tool.ssh_client import Cmd
from paho.mqtt.client import Client as MQTTClient
from .tool import delete_folder, get_ssh_client, canvas_event_triger, graph_event_triger, com_event_triger
from ..models import Experiment, CurrentExperiment, Metrics, Network, Link, Node
from ..models import Experiment, CurrentExperiment, Metrics, Network, Link, Node, Canvas
client = MQTTClient(client_id="django-ihm")
......@@ -54,20 +54,27 @@ def agent_metric(client, userdata, message) -> None:
metrics = Metrics(cycle=exp.cycle, metrics=results)
metrics.save()
# if canvas
cycle_metrics = [
[metric.get("x"), metric.get("y"), metric.get("color")]
for metric in results if metric != {}]
canvas_event_triger(cycle_metrics)
if False:
data = 0
for metric in results:
if metric == {}:
pass
elif metric.get("color") != "#000000":
data += 1
graph_event_triger([data, exp.cycle])
# if graph
data = 0
for metric in results:
if metric == {}:
pass
elif metric.get("color") != "#000000":
data += 1
graph_event_triger([data, exp.cycle])
def agent_canvas(client, userdata, message) -> None:
results = literal_eval(message.payload.decode("utf-8"))
canvas = Canvas(
agent_id=results.get("id"),
x=results.get("x"),
y=results.get("y"),
color=results.get("color"),
cycle=results.get("cycle")
)
canvas.save()
def evaporation():
......@@ -82,8 +89,6 @@ def evaporation():
def cycle_done(client, userdata, message) -> None:
cur_exp = CurrentExperiment.objects.all()[0]
cur_exp.cycle += 1
cur_exp.save()
if cur_exp.com_graph:
if cur_exp.cycle % cur_exp.com_refresh == 0:
......@@ -106,6 +111,17 @@ def cycle_done(client, userdata, message) -> None:
}
com_event_triger(data)
if cur_exp.canvas:
canvas = [
{"color": elem.color, "x": elem.x, "y": elem.y}
for elem in Canvas.objects.filter(cycle=cur_exp.cycle)
]
canvas_event_triger(canvas)
cur_exp.cycle += 1
cur_exp.save()
def update_nbr_agent(client, userdata, message) -> None:
results = literal_eval(message.payload.decode("utf-8"))
......@@ -114,11 +130,15 @@ def update_nbr_agent(client, userdata, message) -> None:
subscribe(client, "agent/" + str(results.get("id")) + "/log", agent_log)
if exp.com_graph:
subscribe(client, "agent/" + str(results.get("id")) + "/mail", agent_message)
node = Node(name="Agent_"+str(results.get("id")), group=results.get("ip"))
node = Node(name="Agent_" + str(results.get("id")), group=results.get("ip"))
node.save()
for i in range(exp.nbr_agent):
link = Link(id1=i, id2=results.get("id"))
link.save()
if exp.canvas:
subscribe(client, "agent/" + str(results.get("id")) + "/canvas", agent_canvas)
exp.nbr_agent += 1
exp.save()
......@@ -154,6 +174,12 @@ def experiment_load(request):
Link.objects.all().delete()
Node.objects.all().delete()
if "canvas" in config:
cur_exp.canvas = True
cur_exp.canvas_height = config.get("canvas").get("height")
cur_exp.canvas_width = config.get("canvas").get("width")
Canvas.objects.all().delete()
cur_exp.scheduling = config.get("scheduling_type")
cur_exp.save()
......@@ -249,23 +275,18 @@ def experiment_start(request):
def main_play(request):
context = {}
canvas = []
metrics = []
com_graph = False
if len(CurrentExperiment.objects.all()) > 0:
cycle = CurrentExperiment.objects.all()[0].cycle
exp = CurrentExperiment.objects.all()[0]
with open(
str(settings.MEDIA_ROOT) + "current_experiment/" + exp.name + "/config.json",
mode='r',
encoding='utf-8'
) as f:
data = json.load(f)
if "canvas" in data:
canvas = [data.get("canvas").get("height"), data.get("canvas").get("width")]
cycle = exp.cycle
if exp.canvas:
canvas = [exp.canvas_height, exp.canvas_width]
com_graph = exp.com_graph
else:
cycle = 0
metrics = []
for i in range(cycle):
# get all the agent 0 metrics
raw_context = Metrics.objects.filter(cycle=i)[0].metrics
......@@ -276,6 +297,7 @@ def main_play(request):
context["metrics"] = metrics
context["canvas"] = canvas
context["com_graph"] = com_graph
template = loader.get_template('ping/play.html')
return HttpResponse(template.render(context, request))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment