コード例 #1
0
def send_test_data(udp_client, queue_dict):
    protocols = []

    # Here just register messages are sent: as register messages are acknowledged per default
    # send_message_acknowledged should be successful
    protocols.append(Protocol(MessageType.REGISTER, "registering_with_acks"))
    protocols.append(Protocol(MessageType.REGISTER, "this_is_a_state_id"))
    protocols.append(Protocol(MessageType.REGISTER, "not_the_final_message"))
    # protocols.append(Protocol(MessageType.REGISTER, FINAL_MESSAGE))

    # register for acknowledges in the first message, all subsequent message should then be acknowledged
    protocols.append(
        Protocol(MessageType.REGISTER_WITH_ACKNOWLEDGES,
                 "Registering with acks"))
    protocols.append(Protocol(MessageType.STATE_ID, "This is a state_id"))
    protocols.append(
        Protocol(MessageType.COMMAND,
                 test_non_acknowledged_messages.FINAL_MESSAGE))

    while True:
        protocol = protocols.pop(0)
        logger.debug("For unit test send datagram: {0}".format(str(protocol)))
        # TODO: how does twisted know to which endpoint the message should be sent?
        udp_client.send_message_acknowledged(
            protocol,
            (global_network_config.get_config_value("SERVER_IP"),
             global_network_config.get_config_value("SERVER_UDP_PORT")),
            blocking=True)

        if protocol.message_content == test_non_acknowledged_messages.FINAL_MESSAGE:
            break

        time.sleep(0.1)
    logger.debug("Sender thread finished")

    while udp_client.messages_to_be_acknowledged_pending():
        from test_non_acknowledged_messages import print_highlight
        print_highlight(udp_client._messages_to_be_acknowledged)
        for key, protocoll in udp_client._messages_to_be_acknowledged.iteritems(
        ):
            print_highlight(protocoll[0].message_content)
        time.sleep(0.2)

    if udp_client.number_of_dropped_messages == 0:
        queue_dict[test_non_acknowledged_messages.CLIENT_TO_MAIN_QUEUE].put(
            SUCCESS_MESSAGE)
    else:
        queue_dict[test_non_acknowledged_messages.CLIENT_TO_MAIN_QUEUE].put(
            FAILURE_MESSAGE)
コード例 #2
0
    def on_value_changed(self, widget, path, text):
        """Triggered when a config value is edited.

        :param path: The path identifying the edited variable
        :param text: New variable value
        """
        value = None
        # logger.info("changing value")
        if self.config_list_store[int(path)][1] == text:
            return
        key = self.config_list_store[int(path)][0]
        data_type = type(global_network_config.get_config_value(key))
        try:
            if data_type == bool:
                if text == "False":
                    value = False
                elif text == "True":
                    value = True
                else:
                    logger.info("Invalid input: {0}".format(str(text)))
                    return
            else:
                value = data_type(text)
            self.network_manager_model.set_config_value(key, value)
        except RuntimeError as e:
            logger.exception(e)
コード例 #3
0
 def connect(self):
     """
     This function opens a udp port for remote clients
     :return:
     """
     from twisted.internet import reactor
     self.connector = reactor.listenUDP(global_network_config.get_config_value("SERVER_UDP_PORT"), self)
     self.initialized = True
     logger.info("Initialized")
     return True
コード例 #4
0
def check_if_ports_are_open():
    import psutil
    from acknowledged_udp.config import global_network_config
    config_path = os.path.abspath(
        path=os.path.dirname(os.path.abspath(__file__)) + "/server")
    global_network_config.load(path=config_path)
    for connection in psutil.net_connections():
        if int(global_network_config.get_config_value(
                "SERVER_UDP_PORT")) == connection.laddr[1]:
            return False
    return True
コード例 #5
0
 def set_config_value(self, param, value):
     """
     A method to set all config values into the config_list.
     :param param: dict with config values to search in network_monitoring_config.YAML
     :param value: new value for a config which shall be updated
     :return:
     """
     if not self.config_list:
         for key in self.params:
             if global_network_config.get_config_value(key):
                 self.config_list.append(
                     (key,
                      str(global_network_config.get_config_value(key))))
     else:
         for key in self.config_list:
             if param == key[0]:
                 index = self.config_list.index(key)
                 self.config_list.remove(key)
                 global_network_config.set_config_value(param, value)
                 self.config_list.insert(index, (param, value))
コード例 #6
0
 def on_connect_button_clicked(self, *args):
     """
     Triggered when connect button clicked
     Connects to selected server
     :param args:
     :return:
     """
     path = self.view["connection_tree_view1"].get_cursor()[0]
     if path is not None:
         for index in path:
             address = self.network_manager_model.connected_ip_port[index]
             logger.info("Connecting to: {0}".format(address))
             if self.network_manager_model.get_connected_status(
                     address) == "connected":
                 logger.info("Already connected to server!")
             else:
                 global_monitoring_manager.reconnect(address)
     else:
         address = ((
             global_network_config.get_config_value("SERVER_IP"),
             global_network_config.get_config_value("SERVER_UDP_PORT")))
         global_monitoring_manager.reconnect(address)
コード例 #7
0
def start_udp_server(name, queue_dict):
    info(name)
    udp_server = UdpServer()
    connector = reactor.listenUDP(
        global_network_config.get_config_value("SERVER_UDP_PORT"), udp_server)
    udp_server.datagram_received_function = write_back_message

    global server_transport
    server_transport = udp_server.get_transport()

    wait_for_test_finish = threading.Thread(
        target=wait_for_test_finished,
        args=[queue_dict, udp_server, connector, True])
    wait_for_test_finish.start()
    # reactor.addSystemEventTrigger('before', 'shutdown', udp_server.some_function)
    reactor.run()
    wait_for_test_finish.join()
    logger.info("Server joined wait_for_test_finish")
コード例 #8
0
    def initialize(self, setup_config):
        """
        The is an initialization function, which is called when the connection finally is set up.
        :param setup_config: the setup configuration for the networking
        :return:
        """
        if not self.config_flag:
            self.config = setup_config
            self.config_flag = True
        if global_network_config.get_config_value("SERVER", True):
            if not self.endpoint:
                self.endpoint = MonitoringServer()
            self.endpoint_initialized = self.endpoint.connect()

        else:
            if not self.endpoint:
                self.endpoint = MonitoringClient()
            self.endpoint_initialized = self.endpoint.connect()
        return self.endpoint_initialized
コード例 #9
0
def main_window_setup(main_window_controller):
    """
    Launches the model-view-controller of monitoring plugin. Called in controllers/main_window.py
    :param main_window_controller:
    :return:
    """
    from monitoring.views.server_connection import ServerView
    from monitoring.views.client_connection import ClientView
    from monitoring.controllers.server_controller import ServerController
    from monitoring.controllers.client_controller import ClientController
    from monitoring.model.network_model import network_manager_model
    from rafcon.gui.helpers.label import create_tab_header_label
    import constants

    icon = {"network": constants.ICON_NET}
    monitoring_plugin_eventbox = create_tab_header_label("network", icon)

    if global_network_config.get_config_value("SERVER"):
        main_window_controller.view.state_machine_server = ServerView()
        main_window_controller.view.state_machine_server.show()
        main_window_controller.view['lower_notebook'].append_page(
            main_window_controller.view.state_machine_server.get_top_widget(),
            monitoring_plugin_eventbox)
        monitoring_manager_ctrl = ServerController(
            network_manager_model,
            main_window_controller.view.state_machine_server)
    else:
        main_window_controller.view.state_machine_client = ClientView()
        main_window_controller.view.state_machine_client.show()
        main_window_controller.view['lower_notebook'].append_page(
            main_window_controller.view.state_machine_client.get_top_widget(),
            monitoring_plugin_eventbox)
        monitoring_manager_ctrl = ClientController(
            network_manager_model,
            main_window_controller.view.state_machine_client)
    main_window_controller.add_controller('monitoring_manager_ctrl',
                                          monitoring_manager_ctrl)
コード例 #10
0
 def networking_enabled():
     """
     A method to check if the monitoring capability is globally enabled.
     :return:
     """
     return global_network_config.get_config_value("ENABLED", False)
コード例 #11
0
                        "Try to initialize the global monitoring manager and setup the connection to the server!"
                    )
                    succeeded = global_monitoring_manager.initialize(
                        setup_config)
                    if succeeded:
                        monitoring_manager_initialized = True
            except CannotListenError, e:
                logger.exception(
                    "Cannot start rafcon as a server: Address already in use!")

        import threading
        init_thread = threading.Thread(target=initialize_monitoring_manager)
        init_thread.daemon = True
        init_thread.start()

    if not global_network_config.get_config_value(
            "SERVER") and not 'rafcon.gui' in sys.modules:
        logger.error(
            "Starting RAFCON with the monitoring plugin in client mode without GUI, does not make sense ..."
        )


def main_window_setup(main_window_controller):
    """
    Launches the model-view-controller of monitoring plugin. Called in controllers/main_window.py
    :param main_window_controller:
    :return:
    """
    from monitoring.views.server_connection import ServerView
    from monitoring.views.client_connection import ClientView
    from monitoring.controllers.server_controller import ServerController
    from monitoring.controllers.client_controller import ClientController
コード例 #12
0
    def monitoring_data_received_function(self, message, address):
        """
        This functions receives all messages sent by the remote RAFCON server.
        :param message: the received message
        :param address: the address (port, ip-address) of the remote server
        :return:
        """
        logger.info("Received datagram {0} from address: {1}".format(str(message), str(address)))
        assert isinstance(message, Protocol)

        network_manager_model.add_to_message_list(message.message_content, address, "received")

        if message.message_type is MessageType.REGISTER:
            ident = message.message_content.split("@")
            if 2 < ident:
                ident.append(None)
            network_manager_model.set_connected_ip_port(address)
            network_manager_model.set_connected_id(address, ident[1])
            network_manager_model.set_connected_status(address, "connected")

            if ident[1]:
                protocol = Protocol(MessageType.ID, global_network_config.get_config_value("SERVER_ID"))
                self.send_message_non_acknowledged(protocol, address)
                network_manager_model.add_to_message_list(protocol, address, "send")
            thread = Thread(target=ping_endpoint, args=(address, ))
            thread.daemon = True
            thread.start()

        elif message.message_type is MessageType.COMMAND and network_manager_model.get_connected_status(address) is not "disabled":
            received_command = message.message_content.split("@")

            execution_mode = StateMachineExecutionStatus(int(received_command[0]))

            # currently the monitoring plugin cannot select the target state machine
            sm_key, sm = state_machine_manager.state_machines.items()[0]

            if execution_mode is StateMachineExecutionStatus.STARTED:
                # as there is no dedicated RUN_TO_STATE execution status the message has to be checked for an optional
                # start state path
                if len(received_command) == 2:
                    print "start state machine from state " + received_command[1]
                    state_machine_execution_engine.start(sm.state_machine_id, start_state_path=received_command[1])
                else:
                    state_machine_execution_engine.start(sm.state_machine_id)
            elif execution_mode is StateMachineExecutionStatus.STOPPED:
                state_machine_execution_engine.stop()
            elif execution_mode is StateMachineExecutionStatus.PAUSED:
                state_machine_execution_engine.pause()
            elif execution_mode is StateMachineExecutionStatus.FORWARD_INTO:
                state_machine_execution_engine.step_into()
            elif execution_mode is StateMachineExecutionStatus.FORWARD_OVER:
                state_machine_execution_engine.step_over()
            elif execution_mode is StateMachineExecutionStatus.FORWARD_OUT:
                state_machine_execution_engine.step_out()
            elif execution_mode is StateMachineExecutionStatus.BACKWARD:
                state_machine_execution_engine.backward_step()
            elif execution_mode is StateMachineExecutionStatus.RUN_TO_SELECTED_STATE:
                state_machine_execution_engine.run_to_selected_state(received_command[1],
                                                                     state_machine_id=sm.state_machine_id)

        elif message.message_type is MessageType.UNREGISTER:
            network_manager_model.set_connected_status(address, "disconnected")
            network_manager_model.delete_connection(address)

        logger.info("Received datagram {0} from address: {1}".format(str(message), str(address)))