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

Improved canvas update

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