Enterprise Integration Zone is brought to you in partnership with:

Ioannis works for Red Hat as a Principal Software Engineer, specializing in open source technologies around integration, cloud and OSGi and is a Committer at Apache Karaf, Apache Camel, Fuse Fabric, Jclouds and more. Ioannis is a DZone MVB and is not an employee of DZone and has posted 3 posts at DZone. You can read more from them at their website. View Full User Profile

Hawtio & Apache jClouds

08.06.2013
| 3103 views |
  • submit to reddit

 Introduction
I've spent some time lately working on an Apache Jclouds plugin for Hawtio. While there is still a lot of pending work, I couldn't hold my excitement and wanted to share...

What is this Hawtio anyway?

Whenever a cool open source project is brought to my attention, I usually subscribe to the mailing lists so that I can get a better feel of the projects progress, direction etc. Sooner or later there is always an email with the topic "[Discuss] - Webconsole for our cool project".

Such emails quite often end up in a long discussion about what's the best web framework to use, what should be the target platform and how the console could be integrated with upstream/downstream projects.

A very good example is Apache ServiceMix. ServiceMix runs on Apache Karaf, which runs on Apache Felix and also embeds Apache ActiveMQ and every single of those projects has its own webconsole.

The number of consoles grows so big, that users have to hire a personal assistance just to keep track of the URLs of each web console. Well, maybe that's an overstatement but you get the idea. And if we also take into consideration that some projects are bound to a specific runtime, while others are not then we have a perfect webconsole storm.

Hawtio solves this problem, by providing a lightweight HTML5 modular web console with tons of plugins. Hawtio can run everywhere as its not bound to a specific runtime, and its modular, which means that its pretty easy to write and hook your own plugins.

Writing plugins for Hawtio

Hawtio is a full client framework. Whenever it requires communication with the backend it can use rest. To make things easier it also use Jolokia that exposes JMX with JSON over HTTP. This makes it pretty easy to hook frameworks even if they don't already provide a rest interface, but expose things over JMX.

Once, the communication with the backend is sorted, its pretty easy to create a plugin. Hawtio uses AngularJS, which makes development of webapps a real pleasure.

The Jclouds plugin

Apache Jclouds doesn't have yet a rest interface, nor it has JMX support. Well actually it has pluggable JMX support as of 1.6.1-incubating release. All you need to do is to create a Apache Jclouds Context using the ManagementLifecycle module:

ContextBuilder builder = ContextBuilder.newBuilder(providerOrApi).
                                       .credentials(identity, credential)
                                       .modules(ImmutableSet.<Module>of(new ManagementLifecycle(BaseManagementContext.INSTANCE)))
                                       .build();

Note: Users that are using the jclouds-karaf project, will get that for free (no need to do anything at all).

When the ManagementLifecycle plugin is used, it will create and register Apache Jclouds MBeans to JMX. If those mbeans are discovered by Hawtio, a new tab will be added in the Hawtio user interface:

The main Jclouds plugin Page
The EC2 Api details page
From there the user is able to browse all installed Apache Jclouds providers, apis and services. If for example, you have created a compute service context with the MangementLifecycle module, you'll be able to see in it under the "Compute Service" tab:

List of Compute Services - Amazon AWS & A Stub service.

By selecting one of the available services, a details bar appears, which helps you navigate to all service specific tabs. For a compute service its:

Nodes

A detailed list of all running nodes, with the ability to reboot, destroy, suspend & resume a node.

Nodes
Images
A list of images, with an operating system filter.
Images



Locations A list of all assignable locations
The plugin is not compute service specific. It also supports blobstores. For example, here a view of one of my S3 buckets:
A blobstore browser
Mix & match What I really love about Hawtio is that has a wide range of out of the box plugins that you can mix & match. Here's an example: "A couple of years ago I created an example of using Jclouds with Apache Camel to automatically send email notifications about running instances in the cloud." Hawtio also provides an Apache Camel plugin, so we can visually see, edit or modify the example that sends the notifications. The great thing is that in this example we are using a Hawtio managed compute service: The original example can be found at Cloud Notification with Apache Camel.
Visual representation of a route that polls EC2 for running instances and sends email notifications
An other cool plugin that can be used along with the jclouds plugin is the "Logs plugin", The log plugin let's you search, browse and filter your logs and even see the source that is associated with the log entries:

Searching the logs for jclouds related errors

The code that generated the log entry
Epilogue

This is only a first draft of the jclouds plugin and there are more cool things to be added, like executing scripts, downloading blobs and also have a better way of creating new services (the last is already supported but could be really improved).

If you want to see more of Hawtio in action you can have a look at James Strachan's demonstation of a Camel based iPaas which is basically Hawtio + Fuse FabricApache Camel.




Published at DZone with permission of Ioannis Canellos, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)