From 443c56f5bd659c4fae9dc0c307362cacfb60fc81 Mon Sep 17 00:00:00 2001 From: shinedday <shinedday@gmail.com> Date: Fri, 17 Jun 2022 09:55:22 +0200 Subject: [PATCH] Update how iotamak work with graph --- dist/iotAmak-0.0.8-py3-none-any.whl | Bin 0 -> 33038 bytes iotAmak/agent/agent.py | 2 +- iotAmak/agent/async_agent.py | 2 +- iotAmak/agent/base_agent.py | 6 ++++++ iotAmak/amas/amas.py | 1 + iotAmak/amas/async_amas.py | 26 +++++++++++++++++++++++--- iotAmak/amas/base_amas.py | 7 ++++++- setup.py | 4 ++-- 8 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 dist/iotAmak-0.0.8-py3-none-any.whl diff --git a/dist/iotAmak-0.0.8-py3-none-any.whl b/dist/iotAmak-0.0.8-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..032ba6eeb079757c480fd66518e4447369a8df2f GIT binary patch literal 33038 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 J7*-X7cmUGsBxwKu literal 0 HcmV?d00001 diff --git a/iotAmak/agent/agent.py b/iotAmak/agent/agent.py index 9cbf8c5..103ce07 100644 --- a/iotAmak/agent/agent.py +++ b/iotAmak/agent/agent.py @@ -63,7 +63,7 @@ class Agent(Schedulable, BaseAgent): self.on_cycle_end() - self.publish("metric", str(self.send_metric())) + self.publish("metric", str({"id": self.id, "metric": self.send_metric(), "amas": self.amas_data()})) self.publish("canvas", str(self.to_canvas())) self.publish("cycle_done", "") self.nbr_cycle += 1 diff --git a/iotAmak/agent/async_agent.py b/iotAmak/agent/async_agent.py index 58543c0..8c522cd 100644 --- a/iotAmak/agent/async_agent.py +++ b/iotAmak/agent/async_agent.py @@ -53,6 +53,6 @@ class AsyncAgent(AsyncControlable, BaseAgent): self.on_decide() self.on_act() self.on_cycle_end() - self.publish("metric", str(self.send_metric())) + self.publish("metric", str({"id": self.id, "metric": self.send_metric(), "amas": self.amas_data()})) self.publish("canvas", str(self.to_canvas())) diff --git a/iotAmak/agent/base_agent.py b/iotAmak/agent/base_agent.py index 26b2540..e40fa90 100644 --- a/iotAmak/agent/base_agent.py +++ b/iotAmak/agent/base_agent.py @@ -90,3 +90,9 @@ class BaseAgent: Should be override if the neighbor need to be aware of any other info, should be a dict """ return {"id": self.id} + + def amas_data(self) -> Dict: + """ + Should be override if needed, should be a dict + """ + return {"id": self.id} \ No newline at end of file diff --git a/iotAmak/amas/amas.py b/iotAmak/amas/amas.py index b2d81ef..10b19a2 100644 --- a/iotAmak/amas/amas.py +++ b/iotAmak/amas/amas.py @@ -69,6 +69,7 @@ class Amas(Schedulable, BaseAmas): return self.publish("amas/all_metric", str(self.agents_metric)) + self.publish("amas/graph", str(self.to_graph())) self.on_cycle_begin() self.client.publish("amas/action_done", "") diff --git a/iotAmak/amas/async_amas.py b/iotAmak/amas/async_amas.py index b2ba18c..922643e 100644 --- a/iotAmak/amas/async_amas.py +++ b/iotAmak/amas/async_amas.py @@ -2,6 +2,7 @@ import pathlib import sys import json from ast import literal_eval +from time import sleep from typing import List @@ -59,7 +60,6 @@ class AsyncAmas(AsyncControlable, BaseAmas): def add_agent( self, - experience_name: str, client_ip: str = None, agent_name: str = "agent.py", args: List = None @@ -87,7 +87,7 @@ class AsyncAmas(AsyncControlable, BaseAmas): } command = "nohup python " - command += "\'" + self.iot_path + experience_name + "/" + agent_name + "\' \'" + command += "\'" + self.iot_path + self.experiment_folder + "/" + agent_name + "\' \'" command += json.dumps(arg_dict) + "\' " for arg in args: command += str(arg) + " " @@ -113,4 +113,24 @@ class AsyncAmas(AsyncControlable, BaseAmas): self.subscribe("agent/" + str(self.next_id) + "/metric", self.agent_metric) self.client.publish("amas/agent/new", self.next_id) - self.next_id += 1 \ No newline at end of file + self.next_id += 1 + + def run(self) -> None: + """ + Main method of the client + """ + + while not self.exit_bool: + # wait to be unpause + self.wait() + + # check the need to exit + if self.exit_bool: + return + + self.publish("amas/graph", str(self.to_graph())) + self.publish("amas/all_metric", str(self.agents_metric)) + self.behaviour() + + sleep(self.wait_delay) + self.nbr_cycle += 1 \ No newline at end of file diff --git a/iotAmak/amas/base_amas.py b/iotAmak/amas/base_amas.py index 7ae8a00..ec7b917 100644 --- a/iotAmak/amas/base_amas.py +++ b/iotAmak/amas/base_amas.py @@ -40,6 +40,7 @@ class BaseAmas(SSHClient): self.on_initialization() self.on_initial_agents_creation() self.agents_metric: List[Dict] = [{} for _ in range(self.next_id)] + self.agent_info: List[Dict] = [{} for _ in range(self.next_id)] def on_initialization(self) -> None: """ @@ -133,4 +134,8 @@ class BaseAmas(SSHClient): # print("Received message ", literal_eval(message.payload.decode("utf-8")), " on topic '" + message.topic) result = literal_eval(message.payload.decode("utf-8")) agent_id = result.get("id") - self.agents_metric[agent_id] = result + self.agents_metric[agent_id] = result.get("metric") + self.agent_info[agent_id] = result.get("amas") + + def to_graph(self) -> dict: + pass diff --git a/setup.py b/setup.py index fc4ebef..c76ac28 100644 --- a/setup.py +++ b/setup.py @@ -3,12 +3,12 @@ from setuptools import setup, find_packages setup( name='iotAmak', packages=find_packages(), - version='0.0.7', + version='0.0.8', description='AmakFramework in python', author='SMAC - GOYON Sebastien', install_requires=[ "paho-mqtt >= 1.6.1", "paramiko >= 2.10.4", - "pexpect >= 4.8.0" + "pexpect >= 4.8.0", ], ) -- GitLab