# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # import logging import time from threading import Semaphore from qpid.messaging import * from qmf2.common import (Notifier, QmfQuery, QmfQueryPredicate, MsgKey, SchemaClassId, SchemaClass, QmfData) from qmf2.console import Console class ExampleNotifier(Notifier): def __init__(self): self._sema4 = Semaphore(0) # locked def indication(self): self._sema4.release() def waitForWork(self): print("Waiting for event...") self._sema4.acquire() print("...event present") logging.getLogger().setLevel(logging.INFO) print( "Starting Connection" ) _c = Connection("localhost") _c.connect() print( "Starting Console" ) _notifier = ExampleNotifier() _myConsole = Console(notifier=_notifier) _myConsole.addConnection( _c ) # Allow discovery only for the agent named "qmf.testAgent" # @todo: replace "manual" query construction with # a formal class-based Query API _query = QmfQuery.create_predicate(QmfQuery.TARGET_AGENT, QmfQueryPredicate({QmfQuery.CMP_EQ: [QmfQuery.KEY_AGENT_NAME, "qmf.testAgent"]})) _myConsole.enable_agent_discovery(_query) _done = False while not _done: # try: _notifier.waitForWork() _wi = _myConsole.get_next_workitem(timeout=0) while _wi: print("!!! work item received %d:%s" % (_wi.get_type(), str(_wi.get_params()))) if _wi.get_type() == _wi.AGENT_ADDED: _agent = _wi.get_params().get("agent") if not _agent: print("!!!! AGENT IN REPLY IS NULL !!! ") _query = QmfQuery.create_wildcard(QmfQuery.TARGET_OBJECT_ID) oid_list = _myConsole.doQuery(_agent, _query) print("!!!************************** REPLY=%s" % oid_list) for oid in oid_list: _query = QmfQuery.create_id(QmfQuery.TARGET_OBJECT, oid) obj_list = _myConsole.doQuery(_agent, _query) print("!!!************************** REPLY=%s" % obj_list) if obj_list is None: obj_list={} for obj in obj_list: resp = obj.invoke_method( "set_meth", {"arg_int": -11, "arg_str": "are we not goons?"}, None, 3) if resp is None: print("!!!*** NO RESPONSE FROM METHOD????") else: print("!!! method succeeded()=%s" % resp.succeeded()) print("!!! method exception()=%s" % resp.get_exception()) print("!!! method get args() = %s" % resp.get_arguments()) if not obj.is_described(): resp = obj.invoke_method( "bad method", {"arg_int": -11, "arg_str": "are we not goons?"}, None, 3) if resp is None: print("!!!*** NO RESPONSE FROM METHOD????") else: print("!!! method succeeded()=%s" % resp.succeeded()) print("!!! method exception()=%s" % resp.get_exception()) print("!!! method get args() = %s" % resp.get_arguments()) #--------------------------------- #_query = QmfQuery.create_id(QmfQuery.TARGET_OBJECT, "99another name") #obj_list = _myConsole.doQuery(_agent, _query) #--------------------------------- # _query = QmfQuery.create_wildcard(QmfQuery.TARGET_PACKAGES) # package_list = _myConsole.doQuery(_agent, _query) # for pname in package_list: # print("!!! Querying for schema from package: %s" % pname) # _query = QmfQuery.create_predicate(QmfQuery.TARGET_SCHEMA_ID, # QmfQueryPredicate( # {QmfQuery.CMP_EQ: [SchemaClassId.KEY_PACKAGE, pname]})) # schema_id_list = _myConsole.doQuery(_agent, _query) # for sid in schema_id_list: # _query = QmfQuery.create_predicate(QmfQuery.TARGET_SCHEMA, # QmfQueryPredicate( # {QmfQuery.CMP_EQ: [SchemaClass.KEY_SCHEMA_ID, # sid.map_encode()]})) # schema_list = _myConsole.doQuery(_agent, _query) # for schema in schema_list: # sid = schema.get_class_id() # _query = QmfQuery.create_predicate( # QmfQuery.TARGET_OBJECT_ID, # QmfQueryPredicate({QmfQuery.CMP_EQ: # [QmfData.KEY_SCHEMA_ID, # sid.map_encode()]})) # oid_list = _myConsole.doQuery(_agent, _query) # for oid in oid_list: # _query = QmfQuery.create_id( # QmfQuery.TARGET_OBJECT, oid) # _reply = _myConsole.doQuery(_agent, _query) # print("!!!************************** REPLY=%s" % _reply) _myConsole.release_workitem(_wi) _wi = _myConsole.get_next_workitem(timeout=0) # except: # logging.info( "shutting down..." ) # _done = True print( "Removing connection" ) _myConsole.removeConnection( _c, 10 ) print( "Destroying console:" ) _myConsole.destroy( 10 ) print( "******** console test done ********" )