Browse Source

More complete check for writing model to root

Yentl Van Tendeloo 7 years ago
parent
commit
aac7e5b81a

+ 19 - 18
bootstrap/core_algorithm.alc

@@ -267,6 +267,7 @@ Void function new_task():
 				// Now create a folder for this user's models!
 				// Now create a folder for this user's models!
 				current_user_id = get_user_id("admin")
 				current_user_id = get_user_id("admin")
 				create_folders(user_id, "users/" + username)
 				create_folders(user_id, "users/" + username)
+				log("User folder created for " + username)
 				current_user_id = user_id
 				current_user_id = user_id
 				break!
 				break!
 			else:
 			else:
@@ -1164,34 +1165,34 @@ String function cmd_model_add(type : String, name : String, code : String):
 	String type_id
 	String type_id
 	Element new_model
 	Element new_model
 	String new_model_id
 	String new_model_id
+	Element mm
 
 
 	type_id = get_entry_id(type)
 	type_id = get_entry_id(type)
 	if (type_id != ""):
 	if (type_id != ""):
 		// Type exists
 		// Type exists
 		if (allow_read(current_user_id, type_id)):
 		if (allow_read(current_user_id, type_id)):
 			// And is readable
 			// And is readable
-			if (element_neq(create_folders(current_user_id, get_foldername(name)), read_root())):
-				if (allow_write(current_user_id, get_entry_id(get_foldername(name)))):
-					if (get_entry_id(name) == ""):
-						// Model doesn't exist yet
-						Element mm
-						mm = get_full_model(type_id, get_entry_id("formalisms/SimpleClassDiagrams"))
-						if (element_eq(mm, read_root())):
-							return "Type is not typed by formalisms/SimpleClassDiagrams: " + type!
-
-						new_model = compile_model(code, mm)
-
-						if (is_physical_string(new_model)):
-							return "Compilation error: " + cast_string(new_model)!
-
-						model_create(new_model, name, type_id, "Model")
-						return "Success"!
+			mm = get_full_model(type_id, get_entry_id("formalisms/SimpleClassDiagrams"))
+			if (element_neq(mm, read_root())):
+				if (element_neq(create_folders(current_user_id, get_foldername(name)), read_root())):
+					if (allow_write(current_user_id, get_entry_id(get_foldername(name)))):
+						if (get_entry_id(name) == ""):
+							// Model doesn't exist yet
+							new_model = compile_model(code, mm)
+
+							if (is_physical_string(new_model)):
+								return "Compilation error: " + cast_string(new_model)!
+
+							model_create(new_model, name, type_id, "Model")
+							return "Success"!
+						else:
+							return "Model exists: " + name!
 					else:
 					else:
-						return "Model exists: " + name!
+						return "Write permission denied to: " + name!
 				else:
 				else:
 					return "Write permission denied to: " + name!
 					return "Write permission denied to: " + name!
 			else:
 			else:
-				return "Write permission denied to: " + name!
+				return "Type is not typed by formalisms/SimpleClassDiagrams: " + type!
 		else:
 		else:
 			return "Read permission denied to: " + type!
 			return "Read permission denied to: " + type!
 	else:
 	else:

+ 1 - 0
bootstrap/task_manager.alc

@@ -19,6 +19,7 @@ Void function task_management():
 	while (True):
 	while (True):
 		while (True):
 		while (True):
 			if (bool_not(other_has_output("task_manager"))):
 			if (bool_not(other_has_output("task_manager"))):
+				log("Output is gone...")
 				while (dict_in(read_root(), taskname)):
 				while (dict_in(read_root(), taskname)):
 					taskname = cast_string(random_string(20))
 					taskname = cast_string(random_string(20))
 				break!
 				break!

+ 2 - 0
hybrid_server/classes/mvkcontroller.xml

@@ -150,6 +150,8 @@
                                     self.forward = (data["taskname"], "input", value)
                                     self.forward = (data["taskname"], "input", value)
                                     self.HTTP_reply = "OK"
                                     self.HTTP_reply = "OK"
                                 elif data["op"] == "get_output":
                                 elif data["op"] == "get_output":
+                                    if data["taskname"] == "task_manager":
+                                        print("Get output for " + str(data["taskname"]))
                                     self.forward = (data["taskname"], "output", self.source)
                                     self.forward = (data["taskname"], "output", self.source)
                                     self.HTTP_reply = None
                                     self.HTTP_reply = None
                                 elif data["op"] == "pause":
                                 elif data["op"] == "pause":

+ 1 - 0
hybrid_server/classes/socket.xml

@@ -133,6 +133,7 @@
                             try:
                             try:
                                 params = dict([p.split('=') for p in data.split('&')])
                                 params = dict([p.split('=') for p in data.split('&')])
                                 data = {k: unquote_plus(v) for k, v in params.items()}
                                 data = {k: unquote_plus(v) for k, v in params.items()}
+                                print("Received data: " + str(data))
                             except Exception as e:
                             except Exception as e:
                                 print("Problem receiving data in socket: ")
                                 print("Problem receiving data in socket: ")
                                 print(str(e))
                                 print(str(e))

+ 2 - 0
hybrid_server/classes/task.xml

@@ -151,6 +151,8 @@
                             <state id="output">
                             <state id="output">
                                 <onentry>
                                 <onentry>
                                     <script>
                                     <script>
+                                        if self.taskname == "task_manager":
+                                            print("Output queue: " + str(self.output_queue))
                                         if self.output_queue:
                                         if self.output_queue:
                                             if self.execute_modelverse(self.taskname, "get_output", []):
                                             if self.execute_modelverse(self.taskname, "get_output", []):
                                                 if self.mvk.success:
                                                 if self.mvk.success:

+ 7 - 0
unit/test_all.py

@@ -269,6 +269,13 @@ class TestModelverse(unittest.TestCase):
         except WritePermissionDenied:
         except WritePermissionDenied:
             assert model_list("users/") == set(["user/", "admin/", "LoLA/", "pypdevs_batch_service/", "HUTN/", "JSON/", "file/", "pypdevs_service/"])
             assert model_list("users/") == set(["user/", "admin/", "LoLA/", "pypdevs_batch_service/", "HUTN/", "JSON/", "file/", "pypdevs_service/"])
 
 
+        model_add("users/user/test/c", "users/user/test/a")
+        try:
+            model_add("users/user/test/d", "users/user/test/c")
+            self.fail()
+        except UnknownM3:
+            assert model_list("users/user/test") == set(["a", "b", "c"])
+
     """
     """
     def test_op_model_move(self):
     def test_op_model_move(self):
     def test_op_model_delete(self):
     def test_op_model_delete(self):

+ 8 - 1
wrappers/classes/http_client.xml

@@ -54,6 +54,9 @@
                         <parameter expr="self.socket"/>
                         <parameter expr="self.socket"/>
                         <parameter expr="self.address"/>
                         <parameter expr="self.address"/>
                     </raise>
                     </raise>
+                    <script>
+                        print("Connecting ...")
+                    </script>
                 </onentry>
                 </onentry>
 
 
                 <transition port="socket_in" event="error_socket" target="../cooldown"/>
                 <transition port="socket_in" event="error_socket" target="../cooldown"/>
@@ -65,7 +68,11 @@
             </state>
             </state>
 
 
             <state id="cooldown">
             <state id="cooldown">
-                <transition after="0.1" target="../connecting"/>
+                <transition after="0.1" target="../connecting">
+                    <script>
+                        print("COOLDOWN")
+                    </script>
+                </transition>
             </state>
             </state>
 
 
             <transition after="self.timeout" target="../waiting">
             <transition after="self.timeout" target="../waiting">

+ 14 - 0
wrappers/classes/modelverse.xml

@@ -160,6 +160,7 @@
                             #print("Got input (%s): %s" % (self.taskname, data))
                             #print("Got input (%s): %s" % (self.taskname, data))
                             if self.taskname == "task_manager":
                             if self.taskname == "task_manager":
                                 self.controller.taskname = self.taskname = json.loads(data)
                                 self.controller.taskname = self.taskname = json.loads(data)
+                                print("Got taskname: " + data)
                             else:
                             else:
                                 self.responses.append(json.loads(data))
                                 self.responses.append(json.loads(data))
                         </script>
                         </script>
@@ -175,6 +176,7 @@
                             #print("Got input (%s): %s" % (self.taskname, data))
                             #print("Got input (%s): %s" % (self.taskname, data))
                             if self.taskname == "task_manager":
                             if self.taskname == "task_manager":
                                 self.controller.taskname = self.taskname = json.loads(data)
                                 self.controller.taskname = self.taskname = json.loads(data)
+                                print("Got taskname: " + data)
                             else:
                             else:
                                 self.responses.append(json.loads(data))
                                 self.responses.append(json.loads(data))
                         </script>
                         </script>
@@ -211,6 +213,9 @@
                                 <parameter expr="self.address"/>
                                 <parameter expr="self.address"/>
                                 <parameter expr="self.timeout"/>
                                 <parameter expr="self.timeout"/>
                             </raise>
                             </raise>
+                            <script>
+                                print("CONNECT HTTP")
+                            </script>
                         </transition>
                         </transition>
 
 
                         <transition cond="self.i == 2 and self.taskname != 'task_manager'" target="../../wait_for_action/connected">
                         <transition cond="self.i == 2 and self.taskname != 'task_manager'" target="../../wait_for_action/connected">
@@ -225,12 +230,14 @@
                         <transition event="http_client_ready" cond="self.i == 0" target="../connect_http_client">
                         <transition event="http_client_ready" cond="self.i == 0" target="../connect_http_client">
                             <script>
                             <script>
                                 self.i += 1
                                 self.i += 1
+                                print("Got first HTTP ready")
                             </script>
                             </script>
                         </transition>
                         </transition>
 
 
                         <transition event="http_client_ready" cond="self.i == 1" target="../connect_http_client">
                         <transition event="http_client_ready" cond="self.i == 1" target="../connect_http_client">
                             <script>
                             <script>
                                 self.i += 1
                                 self.i += 1
+                                print("RAISE get output")
                             </script>
                             </script>
                             <raise event="HTTP_input" target="self.http_clients[1]">
                             <raise event="HTTP_input" target="self.http_clients[1]">
                                 <parameter expr='urlencode({"op": "get_output", "taskname": self.taskname})'/>
                                 <parameter expr='urlencode({"op": "get_output", "taskname": self.taskname})'/>
@@ -1382,6 +1389,13 @@
                         </raise>
                         </raise>
                     </transition>
                     </transition>
 
 
+                    <transition cond="self.expect_response_partial('Type is not typed by formalisms/SimpleClassDiagrams: ', pop=False)" target="../wait_for_action/history">
+                        <raise event="exception">
+                            <parameter expr="'UnknownM3'"/>
+                            <parameter expr="self.split_response(self.responses.pop(0))[0]"/>
+                        </raise>
+                    </transition>
+
                     <transition cond="self.expect_response_partial('Element exists: ', pop=False)" target="../wait_for_action/history">
                     <transition cond="self.expect_response_partial('Element exists: ', pop=False)" target="../wait_for_action/history">
                         <raise event="exception">
                         <raise event="exception">
                             <parameter expr="'ElementExists'"/>
                             <parameter expr="'ElementExists'"/>

+ 3 - 0
wrappers/modelverse.py

@@ -21,6 +21,9 @@ class ModelverseException(Exception):
 class UnknownError(ModelverseException):
 class UnknownError(ModelverseException):
     pass
     pass
 
 
+class UnknownM3(ModelverseException):
+    pass
+
 class UnknownIdentifier(ModelverseException):
 class UnknownIdentifier(ModelverseException):
     pass
     pass
 
 

+ 47 - 26
wrappers/modelverse_SCCD.py

@@ -1,7 +1,7 @@
 """
 """
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 
 
-Date:   Thu Jun  7 16:08:00 2018
+Date:   Thu Jun  7 16:50:26 2018
 
 
 Model author: Yentl Van Tendeloo
 Model author: Yentl Van Tendeloo
 Model name:   MvK Server
 Model name:   MvK Server
@@ -1798,6 +1798,11 @@ class Modelverse(RuntimeClassBase):
         _initialized_behaviour_operations_16.setTrigger(None)
         _initialized_behaviour_operations_16.setTrigger(None)
         _initialized_behaviour_operations_16.setGuard(self._initialized_behaviour_operations_16_guard)
         _initialized_behaviour_operations_16.setGuard(self._initialized_behaviour_operations_16_guard)
         self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_16)
         self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_16)
+        _initialized_behaviour_operations_17 = Transition(self, self.states["/initialized/behaviour/operations"], [self.states["/initialized/behaviour/wait_for_action/history"]])
+        _initialized_behaviour_operations_17.setAction(self._initialized_behaviour_operations_17_exec)
+        _initialized_behaviour_operations_17.setTrigger(None)
+        _initialized_behaviour_operations_17.setGuard(self._initialized_behaviour_operations_17_guard)
+        self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_17)
         
         
         # transition /initialized/behaviour/wait_for_action
         # transition /initialized/behaviour/wait_for_action
         _initialized_behaviour_wait_for_action_0 = Transition(self, self.states["/initialized/behaviour/wait_for_action"], [self.states["/initialized/behaviour/wait_for_action/history"]])
         _initialized_behaviour_wait_for_action_0 = Transition(self, self.states["/initialized/behaviour/wait_for_action"], [self.states["/initialized/behaviour/wait_for_action/history"]])
@@ -2188,83 +2193,89 @@ class Modelverse(RuntimeClassBase):
         return self.expect_response_partial('Attribute exists: ', pop=False)
         return self.expect_response_partial('Attribute exists: ', pop=False)
     
     
     def _initialized_behaviour_operations_4_exec(self, parameters):
     def _initialized_behaviour_operations_4_exec(self, parameters):
-        self.raiseInternalEvent(Event("exception", None, ['ElementExists', self.split_response(self.responses.pop(0))[0]]))
+        self.raiseInternalEvent(Event("exception", None, ['UnknownM3', self.split_response(self.responses.pop(0))[0]]))
     
     
     def _initialized_behaviour_operations_4_guard(self, parameters):
     def _initialized_behaviour_operations_4_guard(self, parameters):
-        return self.expect_response_partial('Element exists: ', pop=False)
+        return self.expect_response_partial('Type is not typed by formalisms/SimpleClassDiagrams: ', pop=False)
     
     
     def _initialized_behaviour_operations_5_exec(self, parameters):
     def _initialized_behaviour_operations_5_exec(self, parameters):
-        self.raiseInternalEvent(Event("exception", None, ['ReadPermissionDenied', self.split_response(self.responses.pop(0))[0]]))
+        self.raiseInternalEvent(Event("exception", None, ['ElementExists', self.split_response(self.responses.pop(0))[0]]))
     
     
     def _initialized_behaviour_operations_5_guard(self, parameters):
     def _initialized_behaviour_operations_5_guard(self, parameters):
-        return self.expect_response_partial('Read permission denied to: ', pop=False)
+        return self.expect_response_partial('Element exists: ', pop=False)
     
     
     def _initialized_behaviour_operations_6_exec(self, parameters):
     def _initialized_behaviour_operations_6_exec(self, parameters):
-        self.raiseInternalEvent(Event("exception", None, ['WritePermissionDenied', self.split_response(self.responses.pop(0))[0]]))
+        self.raiseInternalEvent(Event("exception", None, ['ReadPermissionDenied', self.split_response(self.responses.pop(0))[0]]))
     
     
     def _initialized_behaviour_operations_6_guard(self, parameters):
     def _initialized_behaviour_operations_6_guard(self, parameters):
-        return self.expect_response_partial('Write permission denied to: ', pop=False)
+        return self.expect_response_partial('Read permission denied to: ', pop=False)
     
     
     def _initialized_behaviour_operations_7_exec(self, parameters):
     def _initialized_behaviour_operations_7_exec(self, parameters):
-        self.raiseInternalEvent(Event("exception", None, ['WritePermissionDenied', self.current_model]))
+        self.raiseInternalEvent(Event("exception", None, ['WritePermissionDenied', self.split_response(self.responses.pop(0))[0]]))
     
     
     def _initialized_behaviour_operations_7_guard(self, parameters):
     def _initialized_behaviour_operations_7_guard(self, parameters):
-        return self.expect_response('Write permission denied', pop=True)
+        return self.expect_response_partial('Write permission denied to: ', pop=False)
     
     
     def _initialized_behaviour_operations_8_exec(self, parameters):
     def _initialized_behaviour_operations_8_exec(self, parameters):
-        self.raiseInternalEvent(Event("exception", None, ['ExecutePermissionDenied', self.split_response(self.responses.pop(0))[0]]))
+        self.raiseInternalEvent(Event("exception", None, ['WritePermissionDenied', self.current_model]))
     
     
     def _initialized_behaviour_operations_8_guard(self, parameters):
     def _initialized_behaviour_operations_8_guard(self, parameters):
-        return self.expect_response_partial('Execute permission denied to: ', pop=False)
+        return self.expect_response('Write permission denied', pop=True)
     
     
     def _initialized_behaviour_operations_9_exec(self, parameters):
     def _initialized_behaviour_operations_9_exec(self, parameters):
-        self.raiseInternalEvent(Event("exception", None, ['GroupPermissionDenied', self.split_response(self.responses.pop(0))[0]]))
+        self.raiseInternalEvent(Event("exception", None, ['ExecutePermissionDenied', self.split_response(self.responses.pop(0))[0]]))
     
     
     def _initialized_behaviour_operations_9_guard(self, parameters):
     def _initialized_behaviour_operations_9_guard(self, parameters):
-        return self.expect_response_partial('Group permission denied to: ', pop=False)
+        return self.expect_response_partial('Execute permission denied to: ', pop=False)
     
     
     def _initialized_behaviour_operations_10_exec(self, parameters):
     def _initialized_behaviour_operations_10_exec(self, parameters):
-        self.raiseInternalEvent(Event("exception", None, ['UserPermissionDenied', self.split_response(self.responses.pop(0))[0]]))
+        self.raiseInternalEvent(Event("exception", None, ['GroupPermissionDenied', self.split_response(self.responses.pop(0))[0]]))
     
     
     def _initialized_behaviour_operations_10_guard(self, parameters):
     def _initialized_behaviour_operations_10_guard(self, parameters):
-        return self.expect_response_partial('User permission denied to: ', pop=False)
+        return self.expect_response_partial('Group permission denied to: ', pop=False)
     
     
     def _initialized_behaviour_operations_11_exec(self, parameters):
     def _initialized_behaviour_operations_11_exec(self, parameters):
-        self.raiseInternalEvent(Event("exception", None, ['AdminPermissionDenied', 'Admin permissions are required for this operation!']))
+        self.raiseInternalEvent(Event("exception", None, ['UserPermissionDenied', self.split_response(self.responses.pop(0))[0]]))
     
     
     def _initialized_behaviour_operations_11_guard(self, parameters):
     def _initialized_behaviour_operations_11_guard(self, parameters):
-        return self.expect_response_partial('Admin permission denied', pop=True)
+        return self.expect_response_partial('User permission denied to: ', pop=False)
     
     
     def _initialized_behaviour_operations_12_exec(self, parameters):
     def _initialized_behaviour_operations_12_exec(self, parameters):
-        self.raiseInternalEvent(Event("exception", None, ['InterfaceMismatch', self.split_response(self.responses.pop(0))[0]]))
+        self.raiseInternalEvent(Event("exception", None, ['AdminPermissionDenied', 'Admin permissions are required for this operation!']))
     
     
     def _initialized_behaviour_operations_12_guard(self, parameters):
     def _initialized_behaviour_operations_12_guard(self, parameters):
-        return self.expect_response_partial('Incorrect format: ', pop=False)
+        return self.expect_response_partial('Admin permission denied', pop=True)
     
     
     def _initialized_behaviour_operations_13_exec(self, parameters):
     def _initialized_behaviour_operations_13_exec(self, parameters):
-        self.raiseInternalEvent(Event("exception", None, ['UnknownElement', self.split_response(self.responses.pop(0))[0]]))
+        self.raiseInternalEvent(Event("exception", None, ['InterfaceMismatch', self.split_response(self.responses.pop(0))[0]]))
     
     
     def _initialized_behaviour_operations_13_guard(self, parameters):
     def _initialized_behaviour_operations_13_guard(self, parameters):
-        return self.expect_response_partial('Element not found: ', pop=False)
+        return self.expect_response_partial('Incorrect format: ', pop=False)
     
     
     def _initialized_behaviour_operations_14_exec(self, parameters):
     def _initialized_behaviour_operations_14_exec(self, parameters):
-        self.raiseInternalEvent(Event("exception", None, ['UnknownLocation', self.split_response(self.responses.pop(0))[0]]))
+        self.raiseInternalEvent(Event("exception", None, ['UnknownElement', self.split_response(self.responses.pop(0))[0]]))
     
     
     def _initialized_behaviour_operations_14_guard(self, parameters):
     def _initialized_behaviour_operations_14_guard(self, parameters):
-        return self.expect_response_partial('Location not found: ', pop=False)
+        return self.expect_response_partial('Element not found: ', pop=False)
     
     
     def _initialized_behaviour_operations_15_exec(self, parameters):
     def _initialized_behaviour_operations_15_exec(self, parameters):
-        self.raiseInternalEvent(Event("exception", None, ['UnknownMetamodellingHierarchy', 'Metamodelling hierarchy could not be resolved or automatically inferred: there is no typing relation between your specified model and metamodel (%s)' % self.responses.pop(0)]))
+        self.raiseInternalEvent(Event("exception", None, ['UnknownLocation', self.split_response(self.responses.pop(0))[0]]))
     
     
     def _initialized_behaviour_operations_15_guard(self, parameters):
     def _initialized_behaviour_operations_15_guard(self, parameters):
-        return self.expect_response_partial('Conformance hierarchy unknown for: ', pop=False)
+        return self.expect_response_partial('Location not found: ', pop=False)
     
     
     def _initialized_behaviour_operations_16_exec(self, parameters):
     def _initialized_behaviour_operations_16_exec(self, parameters):
+        self.raiseInternalEvent(Event("exception", None, ['UnknownMetamodellingHierarchy', 'Metamodelling hierarchy could not be resolved or automatically inferred: there is no typing relation between your specified model and metamodel (%s)' % self.responses.pop(0)]))
+    
+    def _initialized_behaviour_operations_16_guard(self, parameters):
+        return self.expect_response_partial('Conformance hierarchy unknown for: ', pop=False)
+    
+    def _initialized_behaviour_operations_17_exec(self, parameters):
         #print("Unknown Error: " + self.responses[0])
         #print("Unknown Error: " + self.responses[0])
         pass
         pass
         self.raiseInternalEvent(Event("exception", None, ['UnknownError', 'Error: %s' % self.responses.pop(0)]))
         self.raiseInternalEvent(Event("exception", None, ['UnknownError', 'Error: %s' % self.responses.pop(0)]))
     
     
-    def _initialized_behaviour_operations_16_guard(self, parameters):
+    def _initialized_behaviour_operations_17_guard(self, parameters):
         return self.expect_response_partial('', pop=False)
         return self.expect_response_partial('', pop=False)
     
     
     def _initialized_behaviour_wait_for_action_0_exec(self, parameters):
     def _initialized_behaviour_wait_for_action_0_exec(self, parameters):
@@ -2452,6 +2463,7 @@ class Modelverse(RuntimeClassBase):
         #print("Got input (%s): %s" % (self.taskname, data))
         #print("Got input (%s): %s" % (self.taskname, data))
         if self.taskname == "task_manager":
         if self.taskname == "task_manager":
             self.controller.taskname = self.taskname = json.loads(data)
             self.controller.taskname = self.taskname = json.loads(data)
+            print("Got taskname: " + data)
         else:
         else:
             self.responses.append(json.loads(data))
             self.responses.append(json.loads(data))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.http_clients[1], Event("HTTP_input", None, [urlencode({"op": "get_output", "taskname": self.taskname}), "parent"])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.http_clients[1], Event("HTTP_input", None, [urlencode({"op": "get_output", "taskname": self.taskname}), "parent"])]))
@@ -2465,6 +2477,7 @@ class Modelverse(RuntimeClassBase):
         #print("Got input (%s): %s" % (self.taskname, data))
         #print("Got input (%s): %s" % (self.taskname, data))
         if self.taskname == "task_manager":
         if self.taskname == "task_manager":
             self.controller.taskname = self.taskname = json.loads(data)
             self.controller.taskname = self.taskname = json.loads(data)
+            print("Got taskname: " + data)
         else:
         else:
             self.responses.append(json.loads(data))
             self.responses.append(json.loads(data))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.http_clients[1], Event("HTTP_input", None, [urlencode({"op": "get_output", "taskname": self.taskname}), "parent"])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.http_clients[1], Event("HTTP_input", None, [urlencode({"op": "get_output", "taskname": self.taskname}), "parent"])]))
@@ -2475,6 +2488,7 @@ class Modelverse(RuntimeClassBase):
     
     
     def _initialized_behaviour_init_connect_http_client_0_exec(self, parameters):
     def _initialized_behaviour_init_connect_http_client_0_exec(self, parameters):
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.http_clients[self.i], Event("connect", None, [self.address, self.timeout])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.http_clients[self.i], Event("connect", None, [self.address, self.timeout])]))
+        print("CONNECT HTTP")
     
     
     def _initialized_behaviour_init_connect_http_client_0_guard(self, parameters):
     def _initialized_behaviour_init_connect_http_client_0_guard(self, parameters):
         return self.i < 2
         return self.i < 2
@@ -2487,12 +2501,14 @@ class Modelverse(RuntimeClassBase):
     
     
     def _initialized_behaviour_init_waiting_http_client_0_exec(self, parameters):
     def _initialized_behaviour_init_waiting_http_client_0_exec(self, parameters):
         self.i += 1
         self.i += 1
+        print("Got first HTTP ready")
     
     
     def _initialized_behaviour_init_waiting_http_client_0_guard(self, parameters):
     def _initialized_behaviour_init_waiting_http_client_0_guard(self, parameters):
         return self.i == 0
         return self.i == 0
     
     
     def _initialized_behaviour_init_waiting_http_client_1_exec(self, parameters):
     def _initialized_behaviour_init_waiting_http_client_1_exec(self, parameters):
         self.i += 1
         self.i += 1
+        print("RAISE get output")
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.http_clients[1], Event("HTTP_input", None, [urlencode({"op": "get_output", "taskname": self.taskname}), "parent"])]))
         self.big_step.outputEventOM(Event("narrow_cast", None, [self, self.http_clients[1], Event("HTTP_input", None, [urlencode({"op": "get_output", "taskname": self.taskname}), "parent"])]))
     
     
     def _initialized_behaviour_init_waiting_http_client_1_guard(self, parameters):
     def _initialized_behaviour_init_waiting_http_client_1_guard(self, parameters):
@@ -3580,6 +3596,7 @@ class HTTPClient(RuntimeClassBase):
         
         
         # transition /connecting/cooldown
         # transition /connecting/cooldown
         _connecting_cooldown_0 = Transition(self, self.states["/connecting/cooldown"], [self.states["/connecting/connecting"]])
         _connecting_cooldown_0 = Transition(self, self.states["/connecting/cooldown"], [self.states["/connecting/connecting"]])
+        _connecting_cooldown_0.setAction(self._connecting_cooldown_0_exec)
         _connecting_cooldown_0.setTrigger(Event("_1after"))
         _connecting_cooldown_0.setTrigger(Event("_1after"))
         self.states["/connecting/cooldown"].addTransition(_connecting_cooldown_0)
         self.states["/connecting/cooldown"].addTransition(_connecting_cooldown_0)
         
         
@@ -3654,6 +3671,7 @@ class HTTPClient(RuntimeClassBase):
     
     
     def _connecting_connecting_enter(self):
     def _connecting_connecting_enter(self):
         self.big_step.outputEvent(Event("connect_socket", "socket_out", [self.socket, self.address]))
         self.big_step.outputEvent(Event("connect_socket", "socket_out", [self.socket, self.address]))
+        print("Connecting ...")
     
     
     def _connecting_cooldown_enter(self):
     def _connecting_cooldown_enter(self):
         self.addTimer(1, 0.1)
         self.addTimer(1, 0.1)
@@ -3694,6 +3712,9 @@ class HTTPClient(RuntimeClassBase):
         socket = parameters[0]
         socket = parameters[0]
         return self.socket == socket
         return self.socket == socket
     
     
+    def _connecting_cooldown_0_exec(self, parameters):
+        print("COOLDOWN")
+    
     def _connected_listening_listen_0_exec(self, parameters):
     def _connected_listening_listen_0_exec(self, parameters):
         socket = parameters[0]
         socket = parameters[0]
         data = parameters[1]
         data = parameters[1]