Beispiel #1
0
class _agentApp(Thread):
    def __init__(self, name, broker_url, heartbeat):
        Thread.__init__(self)
        self.notifier = _testNotifier()
        self.broker_url = broker_url
        self.agent = Agent(name,
                           _notifier=self.notifier,
                           heartbeat_interval=heartbeat)

        # Dynamically construct a management database

        _schema = SchemaObjectClass(_classId=SchemaClassId(
            "MyPackage", "MyClass"),
                                    _desc="A test data schema",
                                    _object_id_names=["index1", "index2"])
        # add properties
        _schema.add_property("index1", SchemaProperty(qmfTypes.TYPE_UINT8))
        _schema.add_property("index2", SchemaProperty(qmfTypes.TYPE_LSTR))

        # these two properties are statistics
        _schema.add_property("query_count",
                             SchemaProperty(qmfTypes.TYPE_UINT32))
        _schema.add_property("method_call_count",
                             SchemaProperty(qmfTypes.TYPE_UINT32))

        # These two properties can be set via the method call
        _schema.add_property("set_string", SchemaProperty(qmfTypes.TYPE_LSTR))
        _schema.add_property("set_int", SchemaProperty(qmfTypes.TYPE_UINT32))

        # add method
        _meth = SchemaMethod(_desc="Method to set string and int in object.")
        _meth.add_argument("arg_int", SchemaProperty(qmfTypes.TYPE_UINT32))
        _meth.add_argument("arg_str", SchemaProperty(qmfTypes.TYPE_LSTR))
        _schema.add_method("set_meth", _meth)

        # Add schema to Agent

        self.agent.register_object_class(_schema)

        # instantiate managed data objects matching the schema

        _obj1 = QmfAgentData(self.agent,
                             _schema=_schema,
                             _values={
                                 "index1": 100,
                                 "index2": "a name"
                             })
        _obj1.set_value("set_string", "UNSET")
        _obj1.set_value("set_int", 0)
        _obj1.set_value("query_count", 0)
        _obj1.set_value("method_call_count", 0)
        self.agent.add_object(_obj1)

        self.agent.add_object(
            QmfAgentData(self.agent,
                         _schema=_schema,
                         _values={
                             "index1": 99,
                             "index2": "another name",
                             "set_string": "UNSET",
                             "set_int": 0,
                             "query_count": 0,
                             "method_call_count": 0
                         }))

        # add an "unstructured" object to the Agent
        _obj2 = QmfAgentData(self.agent, _object_id="01545")
        _obj2.set_value("field1", "a value")
        _obj2.set_value("field2", 2)
        _obj2.set_value("field3", {"a": 1, "map": 2, "value": 3})
        _obj2.set_value("field4", ["a", "list", "value"])
        self.agent.add_object(_obj2)

        self.running = False
        self.ready = Event()

    def start_app(self):
        self.running = True
        self.start()
        self.ready.wait(10)
        if not self.ready.is_set():
            raise Exception("Agent failed to connect to broker.")

    def stop_app(self):
        self.running = False
        # wake main thread
        self.notifier.indication()  # hmmm... collide with daemon???
        self.join(10)
        if self.isAlive():
            raise Exception("AGENT DID NOT TERMINATE AS EXPECTED!!!")

    def run(self):
        # broker_url = "user/passwd@hostname:port"
        self.conn = qpid.messaging.Connection(self.broker_url)
        self.conn.open()
        self.agent.set_connection(self.conn)
        self.ready.set()

        # Agent application main processing loop
        while self.running:
            self.notifier.wait_for_work(None)
            wi = self.agent.get_next_workitem(timeout=0)
            while wi is not None:
                if wi.get_type() == WorkItem.METHOD_CALL:
                    mc = wi.get_params()
                    if not isinstance(mc, MethodCallParams):
                        raise Exception("Unexpected method call parameters")

                    if mc.get_name() == "set_meth":
                        obj = self.agent.get_object(mc.get_object_id(),
                                                    mc.get_schema_id())
                        if obj is None:
                            error_info = QmfData.create(
                                {
                                    "code": -2,
                                    "description": "Bad Object Id."
                                },
                                _object_id="_error")
                            self.agent.method_response(wi.get_handle(),
                                                       _error=error_info)
                        else:
                            obj.inc_value("method_call_count")
                            if "arg_int" in mc.get_args():
                                obj.set_value("set_int",
                                              mc.get_args()["arg_int"])
                            if "arg_str" in mc.get_args():
                                obj.set_value("set_string",
                                              mc.get_args()["arg_str"])
                            self.agent.method_response(wi.get_handle(),
                                                       {"code": 0})
                    elif mc.get_name() == "a_method":
                        obj = self.agent.get_object(mc.get_object_id(),
                                                    mc.get_schema_id())
                        if obj is None:
                            error_info = QmfData.create(
                                {
                                    "code": -3,
                                    "description": "Unknown object id."
                                },
                                _object_id="_error")
                            self.agent.method_response(wi.get_handle(),
                                                       _error=error_info)
                        elif obj.get_object_id() != "01545":
                            error_info = QmfData.create(
                                {
                                    "code": -4,
                                    "description": "Unexpected id."
                                },
                                _object_id="_error")
                            self.agent.method_response(wi.get_handle(),
                                                       _error=error_info)
                        else:
                            args = mc.get_args()
                            if ("arg1" in args and args["arg1"] == 1
                                    and "arg2" in args
                                    and args["arg2"] == "Now set!"
                                    and "arg3" in args
                                    and args["arg3"] == 1966):
                                self.agent.method_response(
                                    wi.get_handle(), {"code": 0})
                            else:
                                error_info = QmfData.create(
                                    {
                                        "code": -5,
                                        "description": "Bad Args."
                                    },
                                    _object_id="_error")
                                self.agent.method_response(wi.get_handle(),
                                                           _error=error_info)
                    else:
                        error_info = QmfData.create(
                            {
                                "code": -1,
                                "description": "Unknown method call."
                            },
                            _object_id="_error")
                        self.agent.method_response(wi.get_handle(),
                                                   _error=error_info)

                self.agent.release_workitem(wi)
                wi = self.agent.get_next_workitem(timeout=0)

        if self.conn:
            self.agent.remove_connection(10)
        self.agent.destroy(10)
Beispiel #2
0
    while not _done:
        # try:
        _notifier.waitForWork()

        _wi = _agent.get_next_workitem(timeout=0)
        while _wi:

            if _wi.get_type() == WorkItem.METHOD_CALL:
                mc = _wi.get_params()
            
                if mc.get_name() == "set_meth":
                    print("!!! Calling 'set_meth' on Object_id = %s" % mc.get_object_id())
                    print("!!! args='%s'" % str(mc.get_args()))
                    print("!!! userid=%s" % str(mc.get_user_id()))
                    print("!!! handle=%s" % _wi.get_handle())
                    _agent.method_response(_wi.get_handle(),
                                           {"rc1": 100, "rc2": "Success"})
                else:
                    print("!!! Unknown Method name = %s" % mc.get_name())
                    _agent.method_response(_wi.get_handle(), _error=_error_data)
            else:
                print("TBD: work item %d:%s" % (_wi.get_type(), str(_wi.get_params())))

            _agent.release_workitem(_wi)
            _wi = _agent.get_next_workitem(timeout=0)
            #    except:
            #        print( "shutting down...")
            #        _done = True

    print( "Removing connection... TBD!!!" )
    #_myConsole.remove_connection( _c, 10 )
Beispiel #3
0
class _agentApp(Thread):
    def __init__(self, name, broker_url, heartbeat):
        Thread.__init__(self)
        self.notifier = _testNotifier()
        self.broker_url = broker_url
        self.agent = Agent(name,
                           _notifier=self.notifier,
                           heartbeat_interval=heartbeat)

        # Dynamically construct a management database

        _schema = SchemaObjectClass( _classId=SchemaClassId("MyPackage", "MyClass"),
                                     _desc="A test data schema",
                                     _object_id_names=["index1", "index2"] )
        # add properties
        _schema.add_property( "index1", SchemaProperty(qmfTypes.TYPE_UINT8))
        _schema.add_property( "index2", SchemaProperty(qmfTypes.TYPE_LSTR))

        # these two properties are statistics
        _schema.add_property( "query_count", SchemaProperty(qmfTypes.TYPE_UINT32))
        _schema.add_property( "method_call_count", SchemaProperty(qmfTypes.TYPE_UINT32))

        # These two properties can be set via the method call
        _schema.add_property( "set_string", SchemaProperty(qmfTypes.TYPE_LSTR))
        _schema.add_property( "set_int", SchemaProperty(qmfTypes.TYPE_UINT32))

        # add method
        _meth = SchemaMethod( _desc="Method to set string and int in object." )
        _meth.add_argument( "arg_int", SchemaProperty(qmfTypes.TYPE_UINT32) )
        _meth.add_argument( "arg_str", SchemaProperty(qmfTypes.TYPE_LSTR) )
        # the input value of cookie is returned in the response
        _meth.add_argument( "cookie", SchemaProperty(qmfTypes.TYPE_LSTR,
                                                     kwargs={"dir":"IO"}))
        _schema.add_method( "set_meth", _meth )

        # Add schema to Agent

        self.agent.register_object_class(_schema)

        # instantiate managed data objects matching the schema

        _obj1 = QmfAgentData( self.agent, _schema=_schema,
                              _values={"index1":100, "index2":"a name"})
        _obj1.set_value("set_string", "UNSET")
        _obj1.set_value("set_int", 0)
        _obj1.set_value("query_count", 0)
        _obj1.set_value("method_call_count", 0)
        self.agent.add_object( _obj1 )

        self.agent.add_object( QmfAgentData( self.agent, _schema=_schema,
                                             _values={"index1":99, 
                                                      "index2": "another name",
                                                      "set_string": "UNSET",
                                                      "set_int": 0,
                                                      "query_count": 0,
                                                      "method_call_count": 0} ))

        # add an "unstructured" object to the Agent
        _obj2 = QmfAgentData(self.agent, _object_id="01545")
        _obj2.set_value("field1", "a value")
        _obj2.set_value("field2", 2)
        _obj2.set_value("field3", {"a":1, "map":2, "value":3})
        _obj2.set_value("field4", ["a", "list", "value"])
        self.agent.add_object(_obj2)

        self.running = False
        self.ready = Event()

    def start_app(self):
        self.running = True
        self.start()
        self.ready.wait(10)
        if not self.ready.is_set():
            raise Exception("Agent failed to connect to broker.")

    def stop_app(self):
        self.running = False
        # wake main thread
        self.notifier.indication() # hmmm... collide with daemon???
        self.join(10)
        if self.isAlive():
            raise Exception("AGENT DID NOT TERMINATE AS EXPECTED!!!")

    def run(self):
        # broker_url = "user/passwd@hostname:port"
        self.conn = qpid.messaging.Connection(self.broker_url)
        self.conn.open()
        self.agent.set_connection(self.conn)
        self.ready.set()

        # Agent application main processing loop
        while self.running:
            self.notifier.wait_for_work(None)
            wi = self.agent.get_next_workitem(timeout=0)
            while wi is not None:
                if wi.get_type() == WorkItem.METHOD_CALL:
                    mc = wi.get_params()
                    if not isinstance(mc, MethodCallParams):
                        raise Exception("Unexpected method call parameters")

                    if mc.get_name() == "set_meth":
                        obj = self.agent.get_object(mc.get_object_id(),
                                                    mc.get_schema_id())
                        if obj is None:
                            error_info = QmfData.create({"code": -2, 
                                                         "description":
                                                             "Bad Object Id."},
                                                        _object_id="_error")
                            self.agent.method_response(wi.get_handle(),
                                                       _error=error_info)
                        else:
                            obj.inc_value("method_call_count")
                            out_args = {"code" : 0}
                            if "cookie" in mc.get_args():
                                out_args["cookie"] = mc.get_args()["cookie"]
                            if "arg_int" in mc.get_args():
                                obj.set_value("set_int", mc.get_args()["arg_int"])
                            if "arg_str" in mc.get_args():
                                obj.set_value("set_string", mc.get_args()["arg_str"])
                            self.agent.method_response(wi.get_handle(),
                                                       out_args)
                    elif mc.get_name() == "a_method":
                        obj = self.agent.get_object(mc.get_object_id(),
                                                    mc.get_schema_id())
                        if obj is None:
                            error_info = QmfData.create({"code": -3, 
                                                         "description":
                                                             "Unknown object id."},
                                                        _object_id="_error")
                            self.agent.method_response(wi.get_handle(),
                                                       _error=error_info)
                        elif obj.get_object_id() != "01545":
                            error_info = QmfData.create( {"code": -4, 
                                                          "description":
                                                              "Unexpected id."},
                                                         _object_id="_error")
                            self.agent.method_response(wi.get_handle(),
                                                       _error=error_info)
                        else:
                            args = mc.get_args()
                            if ("arg1" in args and args["arg1"] == 1 and
                                "arg2" in args and args["arg2"] == "Now set!"
                                and "arg3" in args and args["arg3"] == 1966): 
                                out_args = {"code" : 0}
                                if "cookie" in mc.get_args():
                                    out_args["cookie"] = mc.get_args()["cookie"]
                                self.agent.method_response(wi.get_handle(),
                                                           out_args)
                            else:
                                error_info = QmfData.create(
                                    {"code": -5, 
                                     "description":
                                         "Bad Args."},
                                    _object_id="_error")
                                self.agent.method_response(wi.get_handle(),
                                                           _error=error_info)
                    else:
                        error_info = QmfData.create( {"code": -1, 
                                                     "description":
                                                         "Unknown method call."},
                                                     _object_id="_error")
                        self.agent.method_response(wi.get_handle(), _error=error_info)

                self.agent.release_workitem(wi)
                wi = self.agent.get_next_workitem(timeout=0)

        if self.conn:
            self.agent.remove_connection(10)
        self.agent.destroy(10)
Beispiel #4
0
        _notifier.waitForWork()

        _wi = _agent.get_next_workitem(timeout=0)
        while _wi:

            if _wi.get_type() == WorkItem.METHOD_CALL:
                mc = _wi.get_params()

                if mc.get_name() == "set_meth":
                    print("!!! Calling 'set_meth' on Object_id = %s" %
                          mc.get_object_id())
                    print("!!! args='%s'" % str(mc.get_args()))
                    print("!!! userid=%s" % str(mc.get_user_id()))
                    print("!!! handle=%s" % _wi.get_handle())
                    _agent.method_response(_wi.get_handle(), {
                        "rc1": 100,
                        "rc2": "Success"
                    })
                else:
                    print("!!! Unknown Method name = %s" % mc.get_name())
                    _agent.method_response(_wi.get_handle(),
                                           _error=_error_data)
            else:
                print("TBD: work item %d:%s" %
                      (_wi.get_type(), str(_wi.get_params())))

            _agent.release_workitem(_wi)
            _wi = _agent.get_next_workitem(timeout=0)
            #    except:
            #        print( "shutting down...")
            #        _done = True