For those of you who follow my postings on the Qpid Mailing List you'll probably be aware that I've been doing quite a lot with QMF2.

I've just made a fairly major uplift to the QMF2 code base.

https://issues.apache.org/jira/browse/QPID-3675


There are a few bug fixes to the core Java QMF2 implementation, the most significant being that the ManagementAgent can return multiple partial responses if there are large numbers of objects, the QMF2 getObjects() call now caters for that.

However the most significant uplift is the addition of:
1) A QMF2 REST API Implementation.
2) A JavaScript QMF2 Implementation that uses the REST API as a back end.
3) A fully featured Qpid Management Web GUI that does pretty much anything you'd need to do to monitor and manage one or more brokers (it supports connecting to different brokers).

The REST and JavaScript QMF2 implementations are fairly complete, the main thing missing is support for QMF2 Query Subscriptions, which are supported in the Java API but I've not got round to adding them to REST & JavaScript versions.

The JavaScript implementation uses AJAX to talk to the REST API, this is mainly because that approach is supported on pretty much every browser. I might look to adding WebSocket support IDC when I've got a bit more familiarity with WebSockets.


The Web GUI works on multiple browsers and is even functional on IE6 :-), it morphs quite well onto mobile devices and uses GPU accelerated animations to give a fairly "native app" feel on iPad/iPhone.

The REST API Server was deliberately designed to have almost no dependencies. It uses the com.sun.net.httpserver.HttpServer embedded Web Server that is part of JDK 6 (at least on Sun and OpenJDK) so just requires the Qpid jars on the classpath. It has been designed to make it fairly easy to add a Servlet implementation, but that's not been done yet as the initial goal was to make it fairly dependency free and embedded.

The REST API is very RESTful and uses PUT to add Qpid Connections but there is automatic creation of a "default" resource if one tries to do a GET so for example doing:

http://<host>:8080/qpid/connection/default/console/objects/queue

will retrieve the latest update of the QMF queues as a JSON string, which will parse into a list of QmfConsoleData objects. The QpidServer class JavaDoc documents the complete REST API but hopefully the example above should give the gist (that's the REST equivalent of getObjects("queue") in case it wasn't obvious).


To get up and running all that should be required is the Qpid jars on the classpath and running ant in the root qmf2 directory.


Once compiled cd to bin and do ./QpidRestAPI.sh by default it tries to bind to the wildcard address on the host it's running on and port 8080 though this stuff is configurable.

Point a browser at <host>:8080 and you should be in business. By default it will create a default QMF connection to a broker running on the same host as the QpidRestAPI on port 5672 but the default broker connection is configurable too.

Once running you can add QMF2 Console Connections to other brokers and connect to them via the Web GUI.

The main limitation at the moment is the authentication. It uses basic authentication so username/password are sent clear. I'll look to do something better IDC but I wanted to get it released as it represents around a years worth of work over weekends.

the authentication file is in qmf2/bin/qpid-web/authentication/authentication.properties and has the traditional
admin=admin
guest=guest

Obviously you might want to change that :-) it supports dynamic changes to the file.

FWIW although the Web GUI doesn't yet have better authentication it should be possible to configure the QpidRestAPI to use a default connection to a secure broker. The broker credentials for the default broker aren't returned to the browser - to use the defaults it just supplies a broker URL of "". Obviously the broker management statistics will still be being sent over an unsecure channel but that may not be an issue in many cases.



It's all released under the Apache Licence and the GUI uses a JavaScript UI library that I ended up writing as part of this project (called itablet) which should be reusable in other projects.


I hope that this is useful to people, as I say it's taken an awful lot of effort to put together, so I'd *really* appreciate feedback.


I should point out that this is QMF2 based and so it can only talk to the C++ broker at the moment, however if people are interested and the feedback is positive I'll look to uplifting the back end to also proxy to the JMX mechanism used by the Java broker. I must admit that I've not got any real familiarity with the Java broker, but it ought to be do-able assuming that the Java broker JMX Management Objects have similar capabilities to the C++ QMF Management Objects.

Finally if you point it at a broker less than 0.10 the add/delete queue/exchange/binding features won't work as they require broker object create/delete methods that were added in 0.10.

I've attached a couple of screen shots of a few different pages on a few different browsers to pique your interest :-)


I really hope that the QMF stuff can make it into the main Qpid release at some point, I did the first Java QMF2 API release over a year ago but I've not had much feedback, hopefully with the addition of a management GUI it'll get a bit of traction?

Best Regards,
Frase




---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to