From da9f815aa3b823fa101b2afe9878694aa7d04272 Mon Sep 17 00:00:00 2001
From: shinedday <shinedday@gmail.com>
Date: Mon, 30 May 2022 10:09:43 +0200
Subject: [PATCH] Version : IotAmak-0.0.4

Feature :
 * Amas, Env and Agent now take only 1 argument to simplify arg managment for the user. (Not compatible with 0.0.3)
 * It's now possible to seed the experiment.
 * Scheduler will print exec time

Requirements.txt / Setup.py :
 * add requirement version

Known bug :
 * Scheduler : auto mode pause seem to lock the scheduler in a state where it's not possible to interact anymore with it.
---
 dist/iotAmak-0.0.3-py3-none-any.whl | Bin 11215 -> 11281 bytes
 dist/iotAmak-0.0.4-py3-none-any.whl | Bin 0 -> 11621 bytes
 iotAmak/agent.py                    |  15 ++++++++++++++-
 iotAmak/amas.py                     |  23 +++++++++++++++++++----
 iotAmak/environment.py              |  12 +++++++++++-
 iotAmak/scheduler.py                |  13 +++++++++++--
 requirements.txt                    |   6 +++---
 setup.py                            |   8 ++++++--
 8 files changed, 64 insertions(+), 13 deletions(-)
 create mode 100644 dist/iotAmak-0.0.4-py3-none-any.whl

diff --git a/dist/iotAmak-0.0.3-py3-none-any.whl b/dist/iotAmak-0.0.3-py3-none-any.whl
index 284ab4a3bfeb7d001be3cea0645a66430eb7cdc6..1cc743c6130b0688eb4dafe5ad4324cf30c2936b 100644
GIT binary patch
delta 2229
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
M&DvsY6VyQx05Bgb4FCWD

delta 2176
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
ANB{r;

diff --git a/dist/iotAmak-0.0.4-py3-none-any.whl b/dist/iotAmak-0.0.4-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..42769f4e5d488201bd5a91be52ffdac1598420de
GIT binary patch
literal 11621
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

literal 0
HcmV?d00001

diff --git a/iotAmak/agent.py b/iotAmak/agent.py
index f749a10..bbaaf26 100644
--- a/iotAmak/agent.py
+++ b/iotAmak/agent.py
@@ -1,6 +1,8 @@
 """
 Agent class file
 """
+import json
+import random
 from ast import literal_eval
 from typing import Dict, List
 
@@ -17,9 +19,20 @@ class Agent(Schedulable):
     base class for agent
     """
 
-    def __init__(self, identifier: int, broker_ip: str) -> None:
+    def __init__(self, arguments: str) -> None:
+
+        arguments = json.loads(arguments)
+
+        broker_ip: str = arguments.get("broker_ip")
+        identifier: int = int(arguments.get("identifier"))
+        seed: int = int(arguments.get("seed"))
+
         self.id: int = identifier
 
+        random.seed(seed + 10 + self.id)
+
+        print(random.random())
+
         Schedulable.__init__(self, broker_ip, "Agent" + str(self.id))
 
         self.subscribe("scheduler/agent/wakeup", self.wake_up)
diff --git a/iotAmak/amas.py b/iotAmak/amas.py
index eda32cc..f0e82f4 100644
--- a/iotAmak/amas.py
+++ b/iotAmak/amas.py
@@ -1,11 +1,13 @@
 """
 Amas class
 """
+import json
 from ast import literal_eval
 from typing import List, Dict
 
 import sys
 import pathlib
+import random
 
 sys.path.insert(0, str(pathlib.Path(__file__).parent))
 
@@ -19,13 +21,24 @@ class Amas(Schedulable, SSHClient):
     Amas class
     """
 
-    def __init__(self, broker_ip: str, clients: str) -> None:
+    def __init__(self, arguments: str) -> None:
+
+        arguments = json.loads(arguments)
+
+        broker_ip: str = arguments.get("broker_ip")
+        clients: str = arguments.get("clients")
+        seed: int = int(arguments.get("seed"))
+
+        random.seed(seed)
+
         Schedulable.__init__(self, broker_ip, "Amas")
 
         true_client = [RemoteClient(i.get("hostname"), i.get("user"), i.get("password")) for i in literal_eval(clients)]
 
         SSHClient.__init__(self, true_client)
 
+        self.seed = seed
+
         self.broker_ip: str = broker_ip
         self.subscribe("scheduler/schedulable/wakeup", self.wake_up)
 
@@ -54,10 +67,12 @@ class Amas(Schedulable, SSHClient):
         """
         if args is None:
             args = []
+
+        arg_dict = {"broker_ip": str(self.broker_ip), "seed": self.seed, "identifier": self.next_id}
+
         command = "nohup python "
-        command += "\"Desktop/mqtt_goyon/example/" + experience_name + "/agent.py\" "
-        command += str(self.next_id) + " \""
-        command += str(self.broker_ip) + "\" "
+        command += "\'Desktop/mqtt_goyon/example/" + experience_name + "/agent.py\' \'"
+        command += json.dumps(arg_dict) + "\' "
         for arg in args:
             command += str(arg) + " "
         command += "&"
diff --git a/iotAmak/environment.py b/iotAmak/environment.py
index 9adb398..1691058 100644
--- a/iotAmak/environment.py
+++ b/iotAmak/environment.py
@@ -1,6 +1,8 @@
 """
 Environment class
 """
+import json
+import random
 import sys
 import pathlib
 
@@ -14,7 +16,15 @@ class Environment(Schedulable):
     Environment class
     """
 
-    def __init__(self, broker_ip: str) -> None:
+    def __init__(self, arguments: str) -> None:
+
+        arguments = json.loads(arguments)
+
+        broker_ip: str = arguments.get("broker_ip")
+        seed: int = int(arguments.get("seed"))
+
+        random.seed(seed + 1)
+
         Schedulable.__init__(self, broker_ip, "Env")
 
         self.subscribe("scheduler/schedulable/wakeup", self.wake_up)
diff --git a/iotAmak/scheduler.py b/iotAmak/scheduler.py
index 4af27f4..3f6a54f 100644
--- a/iotAmak/scheduler.py
+++ b/iotAmak/scheduler.py
@@ -2,7 +2,7 @@
 Scheduler class file
 """
 from threading import Semaphore
-from time import sleep
+from time import sleep, time
 
 import sys
 import pathlib
@@ -144,19 +144,28 @@ class Scheduler(Schedulable):
 
             self.wait_ihm()
             if self.exit_bool:
+                print("Exit")
                 break
 
             print("-First part")
+            start_time = time()
             self.first_part()
+            print("--- %s seconds ---" % (time() - start_time))
             print("-Main part")
+            start_time = time()
             self.main_part()
+            print("--- %s seconds ---" % (time() - start_time))
             print("-Last part")
+            start_time = time()
             self.last_part()
+            print("--- %s seconds ---" % (time() - start_time))
 
             self.nbr_cycle += 1
             self.publish("scheduler/cycledone", "")
 
-        # exit
+        print("Exit loop")
         self.client.publish("scheduler/schedulable/wakeup", "")
         self.client.publish("scheduler/agent/wakeup", "")
+        
         sleep(5)
+        print("Done")
diff --git a/requirements.txt b/requirements.txt
index a48456a..b0194c6 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,3 +1,3 @@
-paho-mqtt
-paramiko
-pexpect
\ No newline at end of file
+paho-mqtt >= 1.6.1
+paramiko >= 2.10.4
+pexpect >= 4.8.0
\ No newline at end of file
diff --git a/setup.py b/setup.py
index a2f08fd..c62ced9 100644
--- a/setup.py
+++ b/setup.py
@@ -3,8 +3,12 @@ from setuptools import setup, find_packages
 setup(
     name='iotAmak',
     packages=find_packages(),
-    version='0.0.3',
+    version='0.0.4',
     description='AmakFramework in python',
     author='SMAC - GOYON Sebastien',
-    install_requires=[],
+    install_requires=[
+        "paho-mqtt >= 1.6.1",
+        "paramiko >= 2.10.4",
+        "pexpect >= 4.8.0"
+    ],
 )
-- 
GitLab