Search in sources :

Example 1 with QmfAgentData

use of org.apache.qpid.qmf2.agent.QmfAgentData in project qpid by apache.

the class Test4 method addObject.

public void addObject(QmfAgentData object) throws QmfException {
    SchemaClassId classId = object.getSchemaClassId();
    SchemaClass schema = _schemaCache.get(classId);
    // Try to create an objectName using the set of property names that have been specified as idNames in the schema
    StringBuilder buf = new StringBuilder();
    if (schema != null && schema instanceof SchemaObjectClass) {
        String[] idNames = ((SchemaObjectClass) schema).getIdNames();
        for (String name : idNames) {
            buf.append(object.getStringValue(name));
        }
    }
    String objectName = buf.toString();
    // If the schema hasn't given any help we use a UUID
    if (objectName.length() == 0)
        objectName = UUID.randomUUID().toString();
    // Finish up the name by incorporating package and class names
    objectName = classId.getPackageName() + ":" + classId.getClassName() + ":" + objectName;
    // Now we've got a good name for the object we create it's ObjectId and add that to the object
    ObjectId addr = new ObjectId("test", /*name*/
    objectName, 0);
    object.setObjectId(addr);
    if (_objectIndex.get(addr) != null) {
        throw new QmfException("Duplicate QmfAgentData Address");
    }
    _objectIndex.put(addr, object);
}
Also used : ObjectId(org.apache.qpid.qmf2.common.ObjectId) SchemaClass(org.apache.qpid.qmf2.common.SchemaClass) SchemaObjectClass(org.apache.qpid.qmf2.common.SchemaObjectClass) SchemaClassId(org.apache.qpid.qmf2.common.SchemaClassId) QmfException(org.apache.qpid.qmf2.common.QmfException)

Example 2 with QmfAgentData

use of org.apache.qpid.qmf2.agent.QmfAgentData in project qpid by apache.

the class Test4 method evaluateDataQuery.

public List<QmfConsoleData> evaluateDataQuery(QmfQuery query) {
    List<QmfConsoleData> results = new ArrayList<QmfConsoleData>();
    if (query.getObjectId() != null) {
        // Look up a QmfAgentData object by the ObjectId obtained from the query
        ObjectId objectId = query.getObjectId();
        QmfAgentData object = _objectIndex.get(objectId);
        if (object != null && !object.isDeleted()) {
            results.add(new QmfConsoleData(object.mapEncode(), null));
        }
    } else {
        for (QmfAgentData object : _objectIndex.values()) {
            if (!object.isDeleted() && query.evaluate(object)) {
                results.add(new QmfConsoleData(object.mapEncode(), null));
            }
        }
    }
    return results;
}
Also used : ObjectId(org.apache.qpid.qmf2.common.ObjectId) ArrayList(java.util.ArrayList) QmfConsoleData(org.apache.qpid.qmf2.console.QmfConsoleData) QmfAgentData(org.apache.qpid.qmf2.agent.QmfAgentData)

Example 3 with QmfAgentData

use of org.apache.qpid.qmf2.agent.QmfAgentData in project qpid by apache.

the class AgentTest method onEvent.

public void onEvent(WorkItem wi) {
    System.out.println("WorkItem type: " + wi.getType());
    _control.incValue("methodCount", 1);
    if (wi.getType() == METHOD_CALL) {
        MethodCallWorkItem item = (MethodCallWorkItem) wi;
        MethodCallParams methodCallParams = item.getMethodCallParams();
        String methodName = methodCallParams.getName();
        ObjectId objectId = methodCallParams.getObjectId();
        String userId = methodCallParams.getUserId();
        userId = userId.equals("") ? "anonymous" : userId;
        QmfData inArgs = methodCallParams.getArgs();
        ObjectId controlAddress = _control.getObjectId();
        System.out.println("Method Call User ID = " + userId);
        try {
            if (objectId == null) {
                // Method invoked directly on Agent
                if (methodName.equals("toString")) {
                    QmfData outArgs = new QmfData();
                    outArgs.setValue("string", _agent.toString());
                    _agent.methodResponse(methodName, item.getHandle(), outArgs, null);
                }
            } else if (objectId.equals(controlAddress)) {
                if (methodName.equals("stop")) {
                    System.out.println("Invoked stop method");
                    String message = inArgs.getStringValue("message");
                    System.out.println("Stopping: message = " + message);
                    _agent.methodResponse(methodName, item.getHandle(), null, null);
                    _agent.destroy();
                    System.exit(1);
                } else if (methodName.equals("echo")) {
                    System.out.println("Invoked echo method");
                    _agent.methodResponse(methodName, item.getHandle(), inArgs, null);
                } else if (methodName.equals("event")) {
                    System.out.println("Invoked event method");
                    QmfEvent event = new QmfEvent(_eventSchema);
                    event.setSeverity((int) inArgs.getLongValue("severity"));
                    event.setValue("text", inArgs.getStringValue("text"));
                    _agent.raiseEvent(event);
                    _agent.methodResponse(methodName, item.getHandle(), null, null);
                } else if (methodName.equals("fail")) {
                    System.out.println("Invoked fail method");
                    QmfData error = new QmfData();
                    if (inArgs.getBooleanValue("useString")) {
                        error.setValue("error_text", inArgs.getStringValue("stringVal"));
                    } else {
                        error.setValue("whatHappened", "It Failed");
                        error.setValue("howBad", 75);
                        error.setValue("details", inArgs.getValue("details"));
                    }
                    _agent.methodResponse(methodName, item.getHandle(), null, error);
                } else if (methodName.equals("create_child")) {
                    System.out.println("Invoked create_child method");
                    String childName = inArgs.getStringValue("name");
                    System.out.println("childName = " + childName);
                    QmfAgentData child = new QmfAgentData(_childSchema);
                    child.setValue("name", childName);
                    _agent.addObject(child);
                    QmfData outArgs = new QmfData();
                    // Set subtype just to test
                    outArgs.setRefValue("childAddr", child.getObjectId(), "reference");
                    _agent.methodResponse(methodName, item.getHandle(), outArgs, null);
                }
            }
        } catch (QmfException qmfe) {
            System.err.println("QmfException " + qmfe.getMessage() + " caught: AgentTest failed");
            QmfData error = new QmfData();
            error.setValue("error_text", qmfe.getMessage());
            _agent.methodResponse(methodName, item.getHandle(), null, error);
        }
    }
}
Also used : MethodCallWorkItem(org.apache.qpid.qmf2.agent.MethodCallWorkItem) QmfData(org.apache.qpid.qmf2.common.QmfData) ObjectId(org.apache.qpid.qmf2.common.ObjectId) MethodCallParams(org.apache.qpid.qmf2.agent.MethodCallParams) QmfEvent(org.apache.qpid.qmf2.common.QmfEvent) QmfAgentData(org.apache.qpid.qmf2.agent.QmfAgentData) QmfException(org.apache.qpid.qmf2.common.QmfException)

Example 4 with QmfAgentData

use of org.apache.qpid.qmf2.agent.QmfAgentData in project qpid by apache.

the class QmfManagementAgent method onEvent.

// ******************************* QmfEventListener implementation method *******************************
/**
 * Callback method triggered when the underlying QMF2 Agent has WorkItems available for processing.
 * The purpose of this method is mainly to handle the METHOD_CALL WorkItem and demultiplex &amp; delegate
 * to the invokeMethod() call on the relevant concrete QmfAgentData Object.
 * @param wi the WorkItem that has been passed by the QMF2 Agent to be processed here (mainly METHOD_CALL).
 */
@Override
public void onEvent(final WorkItem wi) {
    if (wi.getType() == METHOD_CALL) {
        MethodCallWorkItem item = (MethodCallWorkItem) wi;
        MethodCallParams methodCallParams = item.getMethodCallParams();
        String methodName = methodCallParams.getName();
        ObjectId objectId = methodCallParams.getObjectId();
        // Look up QmfAgentData by ObjectId from the Agent's internal Object store.
        QmfAgentData object = _agent.getObject(objectId);
        if (object == null) {
            _agent.raiseException(item.getHandle(), "No object found with ID=" + objectId);
        } else {
            // other classes yet.
            if (object instanceof org.apache.qpid.server.qmf2.agentdata.Broker) {
                org.apache.qpid.server.qmf2.agentdata.Broker broker = (org.apache.qpid.server.qmf2.agentdata.Broker) object;
                broker.invokeMethod(_agent, item.getHandle(), methodName, methodCallParams.getArgs());
            } else if (object instanceof org.apache.qpid.server.qmf2.agentdata.Queue) {
                org.apache.qpid.server.qmf2.agentdata.Queue queue = (org.apache.qpid.server.qmf2.agentdata.Queue) object;
                queue.invokeMethod(_agent, item.getHandle(), methodName, methodCallParams.getArgs());
            } else {
                _agent.raiseException(item.getHandle(), "Unknown Method " + methodName + " on " + object.getClass().getSimpleName());
            }
        }
    }
}
Also used : MethodCallWorkItem(org.apache.qpid.qmf2.agent.MethodCallWorkItem) Broker(org.apache.qpid.server.model.Broker) ObjectId(org.apache.qpid.qmf2.common.ObjectId) MethodCallParams(org.apache.qpid.qmf2.agent.MethodCallParams) QmfAgentData(org.apache.qpid.qmf2.agent.QmfAgentData) Queue(org.apache.qpid.server.model.Queue)

Example 5 with QmfAgentData

use of org.apache.qpid.qmf2.agent.QmfAgentData in project qpid by apache.

the class QmfManagementAgent method childAdded.

/**
 * ConfigurationChangeListener method called when a child ConfiguredObject is added.
 * <p>
 * This method checks the type of the child ConfiguredObject that has been added and creates the equivalent
 * QMF2 Management Object if one doesn't already exist. In most cases it's a one-to-one mapping, but for
 * Binding for example the Binding child is added to both Queue and Exchange so we only create the Binding
 * QMF2 Management Object once and add the queueRef and exchangeRef reference properties referencing the Queue
 * and Exchange parent Objects respectively, Similarly for Consumer (AKA Subscription).
 * <p>
 * This method is also responsible for raising the appropriate QMF2 Events when Management Objects are created.
 * @param object the parent object that the child is being added to.
 * @param child the child object being added.
 */
@Override
public void childAdded(final ConfiguredObject object, final ConfiguredObject child) {
    if (_log.isDebugEnabled()) {
        _log.debug("childAdded: " + child.getClass().getSimpleName() + "." + child.getName());
    }
    QmfAgentData data = null;
    if (child instanceof Broker) {
        data = new org.apache.qpid.server.qmf2.agentdata.Broker((Broker) child);
    } else if (child instanceof Connection) {
        if (!agentConnection && !_objects.containsKey(child)) {
            // If the parent object is the default vhost set it to null so that the Connection ignores it.
            VirtualHost vhost = (object.getName().equals(_defaultVirtualHost)) ? null : (VirtualHost) object;
            data = new org.apache.qpid.server.qmf2.agentdata.Connection(vhost, (Connection) child);
            _objects.put(child, data);
            // Raise a Client Connect Event.
            _agent.raiseEvent(((org.apache.qpid.server.qmf2.agentdata.Connection) data).createClientConnectEvent());
        }
        // Only ignore the first Connection, which is the one from the Agent.
        agentConnection = false;
    } else if (child instanceof Session) {
        if (!_objects.containsKey(child)) {
            // Get the Connection QmfAgentData so we can get connectionRef.
            QmfAgentData ref = _objects.get(object);
            if (ref != null) {
                data = new org.apache.qpid.server.qmf2.agentdata.Session((Session) child, ref.getObjectId());
                _objects.put(child, data);
            }
        }
    } else if (child instanceof Exchange) {
        if (!_objects.containsKey(child)) {
            // If the parent object is the default vhost set it to null so that the Connection ignores it.
            VirtualHost vhost = (object.getName().equals(_defaultVirtualHost)) ? null : (VirtualHost) object;
            data = new org.apache.qpid.server.qmf2.agentdata.Exchange(vhost, (Exchange) child);
            _objects.put(child, data);
            // Raise an Exchange Declare Event.
            _agent.raiseEvent(((org.apache.qpid.server.qmf2.agentdata.Exchange) data).createExchangeDeclareEvent());
        }
    } else if (child instanceof Queue) {
        if (!_objects.containsKey(child)) {
            // If the parent object is the default vhost set it to null so that the Connection ignores it.
            VirtualHost vhost = (object.getName().equals(_defaultVirtualHost)) ? null : (VirtualHost) object;
            data = new org.apache.qpid.server.qmf2.agentdata.Queue(vhost, (Queue) child);
            _objects.put(child, data);
            // Raise a Queue Declare Event.
            _agent.raiseEvent(((org.apache.qpid.server.qmf2.agentdata.Queue) data).createQueueDeclareEvent());
        }
    } else if (child instanceof Binding) {
        // depending on whether Queue or Exchange was the parent of this addChild() call.
        if (!_objects.containsKey(child)) {
            data = new org.apache.qpid.server.qmf2.agentdata.Binding((Binding) child);
            _objects.put(child, data);
            String eName = ((Binding) child).getExchange().getName();
            if (// Don't send Event for Binding to default direct.
            !eName.equals("<<default>>")) {
                // Raise a Bind Event.
                _agent.raiseEvent(((org.apache.qpid.server.qmf2.agentdata.Binding) data).createBindEvent());
            }
        }
        org.apache.qpid.server.qmf2.agentdata.Binding binding = (org.apache.qpid.server.qmf2.agentdata.Binding) _objects.get(child);
        QmfAgentData ref = _objects.get(object);
        if (ref != null) {
            if (object instanceof Queue) {
                binding.setQueueRef(ref.getObjectId());
            } else if (object instanceof Exchange) {
                binding.setExchangeRef(ref.getObjectId());
            }
        }
    } else if (// AKA Subscription
    child instanceof Consumer) {
        // Session reference depending on whether Queue or Session was the parent of this addChild() call.
        if (!_objects.containsKey(child)) {
            data = new org.apache.qpid.server.qmf2.agentdata.Subscription((Consumer) child);
            _objects.put(child, data);
        }
        org.apache.qpid.server.qmf2.agentdata.Subscription subscription = (org.apache.qpid.server.qmf2.agentdata.Subscription) _objects.get(child);
        QmfAgentData ref = _objects.get(object);
        if (ref != null) {
            if (object instanceof Queue) {
                subscription.setQueueRef(ref.getObjectId(), (Queue) object);
                // Raise a Subscribe Event - N.B. Need to do it *after* we've set the queueRef.
                _agent.raiseEvent(subscription.createSubscribeEvent());
            } else if (object instanceof Session) {
                subscription.setSessionRef(ref.getObjectId());
            }
        }
    }
    try {
        // If we've created new QmfAgentData we register it with the Agent.
        if (data != null) {
            _agent.addObject(data);
        }
    } catch (QmfException qmfe) {
        _log.error("QmfException caught in QmfManagementAgent.addObject()", qmfe);
    }
    child.addChangeListener(this);
}
Also used : Binding(org.apache.qpid.server.model.Binding) Broker(org.apache.qpid.server.model.Broker) Connection(org.apache.qpid.server.model.Connection) Exchange(org.apache.qpid.server.model.Exchange) Consumer(org.apache.qpid.server.model.Consumer) QmfAgentData(org.apache.qpid.qmf2.agent.QmfAgentData) VirtualHost(org.apache.qpid.server.model.VirtualHost) Queue(org.apache.qpid.server.model.Queue) Session(org.apache.qpid.server.model.Session) QmfException(org.apache.qpid.qmf2.common.QmfException)

Aggregations

QmfAgentData (org.apache.qpid.qmf2.agent.QmfAgentData)11 ObjectId (org.apache.qpid.qmf2.common.ObjectId)11 QmfException (org.apache.qpid.qmf2.common.QmfException)5 ArrayList (java.util.ArrayList)4 Queue (org.apache.qpid.server.model.Queue)4 MethodCallParams (org.apache.qpid.qmf2.agent.MethodCallParams)3 MethodCallWorkItem (org.apache.qpid.qmf2.agent.MethodCallWorkItem)3 QmfData (org.apache.qpid.qmf2.common.QmfData)3 QmfQuery (org.apache.qpid.qmf2.common.QmfQuery)3 SchemaClass (org.apache.qpid.qmf2.common.SchemaClass)3 SchemaClassId (org.apache.qpid.qmf2.common.SchemaClassId)3 Binding (org.apache.qpid.server.model.Binding)3 Exchange (org.apache.qpid.server.model.Exchange)3 HashMap (java.util.HashMap)2 Map (java.util.Map)2 Subscription (org.apache.qpid.qmf2.agent.Subscription)2 QmfEvent (org.apache.qpid.qmf2.common.QmfEvent)2 SchemaObjectClass (org.apache.qpid.qmf2.common.SchemaObjectClass)2 Broker (org.apache.qpid.server.model.Broker)2 Connection (org.apache.qpid.server.model.Connection)2