Recently in TWiO Category

Since this blog is more about my own personal development on OSX, Fink, KDE, and OpenNMS, and This Week in OpenNMS is about, well, all of OpenNMS development, I figured it was high time to move it to somewhere more official.

Without further ado, I present to you: This Week in OpenNMS. Same bat-time, different bat-channel.

RSS is still available, but the url has moved here, rather than getting everything through my blog.

Please, update your links!

Coding on the Porch
Coding on the Porch

I've decided to do This Week in OpenNMS on Mondays, instead of Fridays, since it's more likely that people will be around to read it on Monday, and since then I don't have to furiously write under a deadline Friday afternoon when I could be sitting out on the porch, sipping drinks and relaxing. Or something.

Anyways, welcome to This (well, Last) Week in OpenNMS!

Project Updates

  • Stable: Current Release is 1.6.2

    1.6.2 is still the current release, and while there are a few fixes pending since it's release, there are no immediate plans for a 1.6.3 yet.

  • Unstable: Current Release is 1.7.0

    Trunk continues to move at a furious rate. We're still hoping to get 1.7.1 out soon. Stay tuned for updates on that. In the meantime, feel free to try the nightly snapshots (if it's not on a production system, of course).

  • Trunk: Build System Updates

    Work has begun on refactoring our Maven build system. We've been trying to move a lot of things out of the main build, to speed up building and to componentize things that should be "external" dependencies. The new structure has been introduced, and we're looking at eventually moving all of our code into this structure:

    • core: OpenNMS core. This will include event handling, basic daemon support, and other support code needed by all of OpenNMS.

      • api: Interfaces and basic APIs

      • lib: "Library" code (the majority of the core code)

      • runtime: Runtime code, ie, things only needed in a running OpenNMS instance

      • web: Web application code common to all of OpenNMS

      • doc: Documentation

    • features: Any feature of OpenNMS that can be modularized, and isn't part of the Core. This will include most of the daemons (Notifd, Provisiond, etc.) Each feature gets it's own directory, and will have a similar structure to the core module.

    • extensions: Any feature of OpenNMS that does not need to be built by default for a basic running OpenNMS installation (ticketing integrations, etc.) Each extension gets it's own directory, and will have a similar structure to the core module.

    • lib: Support "library" code used by any part of OpenNMS, which can be a standalone package. The lib directory is not built by default, but instead deployed to the maven repository as they are updated as if they were individual projects. Examples include the service-registration framework (DNS-SD advertising), our version of JoeSNMP, and the SNMP strategies.

    • assemblies: Assemblies in maven describe how all of these various components get packaged up together. The plan is to make multiple assemblies for a minimal system, full install, and so on so you can choose how much OpenNMS you want when building from source. Having multiple assemblies will also make it easier to run just a portion of OpenNMS for development and testing.

  • Trunk: Provisiond

    Provisiond is solidifying, the only major word to be done is support for the newSuspect events to fully replace Capsd's functionality. Lots of performance work has been going on in it as well, so it should be able to very quickly scan networks that took a long time under Capsd.

  • Trunk: RANCID

    Antonio and Guglielmo have been working hard on the RANCID adapter. I'm told the RANCID map integration is very cool, but I haven't had a chance to check it out yet. It's in the latest snapshots.

  • Trunk: DNS Provisioning Adapter

    I worked on Dave's provisioning adapter some, and got it working. Now whenever a node is added/updated/deleted, we can update a dynamic DNS server with the new hostname -> IP address mapping based on the node label in the provisioning group node configuration. It's a good example of how to make a provisioning adapter.

  • Trunk: UI Enhancements

    Donald continues to make our UI more interactive, and handle large numbers of elements sanely. The node page is looking pretty sweet. :)

  • Trunk: Event Parameter Name Extraction

    Jeff did a useful little feature to be able to use parameter names in %parm% expansions. See bug #3061 for details.

About the Inventory Scanner

Matt Raykowski has been working on a very cool feature in a branch called the inventory scanner. I asked him to send me a quick summary of what his goals are for the inventory scanner, and here's what he said:

Inventory Scanning is a protocol agnostic daemon tasked with collecting inventory and asset information from hosts through whichever means available to it through the coded scanners. At the present point in time only a WMI scanner exists but I plan on trying to get someone "onboard" to write a SNMP scanner and I plan on writing a telnet/ssh-based scanner that works similar to Expect.

Inventory Scanning saves inventory information in three layers: category, asset, property.

  • Categories are high level classifications of assets. For example there may be a "Network Adapters" category. Categories are defined in the configuration and are not driven from host-based data.
  • Assets are items of interest from hosts. Examples of assets would be "Broadcom 100MB Network Adapter."
  • Properties are the individual components of information for a given asset. To continue our previous example you would have a manufacturer, serial number and assorted configuration information.

Categories are largerly going to be used for grouping and organization in the web representation of inventory information. All assets and properties will be idenfitied with a source, whether they're active and an effective date. During the process of scanning the scanner will collect all configured information from the host and pass that information to a persister which will go through the process of comparing the scanned asset information to the most effective version of the hosts configuration. It will add new properties and assets as they appear and remove (by setting the property or asset as deleted) any assets in the effective configuration set that are not in the scanned collection and were defined by that scanner source.

This last part is important: whatever is scanned and saved will have a history. When that history changes a UEI will be emitted for interested parties, potentially for notification. But the tracking of the source is important since now you can have multiple protocols maintaining asset information on a single host in addition to providing the user with limitless ability to manually add custom asset information.

Despite the fact that it can keep a history of inventory information in the database and the UI will have the ability to browse history and the user will have the ability to be notified on configuration change events this is not intended to be an enterprise grade replacement for other CMDB tools or inventory tools. It will not have the ability to send configuration changes to hosts, and at least in my incarnation no ability to differential comparisons between hosts or versions. Although this could be added on by some enterprising member of [The OpenNMS Group] or the community if someone decided this was a feature they desired.

Very cool stuff, Matt!

Upcoming Events

Note: April training has been pushed back to May.

If you have anything to add to the events list, or you wish to be a Dev-Jam sponsor, please let me know.

That's It!

That's it for this week. As always, questions, comments, non-sequiturs, gifts, and bribes are always welcome, feel free to e-mail me. And if you have a question about OpenNMS that you think would be a good topic in TWiO, please, let me know!

So I'm a slacker. But I have an excuse, really! I was having so much fun working on JSPs last Friday, that I totally forgot to write TWiO last week. OK, it's JSPs, so I guess I'm lying about having fun, but I was really almost done with a new feature. ;)

Anyways, since I've gotten a little sloppy, I'm going to make it up for you, with a feature on the new Provisiond, which is shaping up quite nicely. And to show my shame, I've dubbed this week's article: This Week (or Two) in OpenNMS.

But, to begin... What's been going on for the last two weeks?

Project Updates

New Node Page
New Node Page
  • Stable: Current Release is 1.6.2

    1.6.2 is still the current release, and while there are a few fixes pending since it's release, there are no immediate plans for a 1.6.3 yet.

  • Unstable: Current Release is 1.7.0

    Commits have been speeding by on trunk as Provisiond moves it's way into a feature-complete state. I'm still hoping we'll get a 1.7.1 release out soon so people can give it a shot, but, well, we have to stop to breathe first. In the meantime, feel free to try the nightly snapshots (if it's not on a production system, of course).

  • Trunk: RANCID Updates

    Antonio and Guglielmo have been furiously working away on the RANCID integration, focusing on authentication, and the UI for the most part.

  • Trunk: SNMP Refactoring

    Matt has spent some time refactoring some of the SNMP data so that it is instead in the snmpInterface table where it belongs, and it means no more 0.0.0.0 IPs where they don't belong. This cleans up our model a bit to be more sane. (A bit.)

  • Trunk: Provisiond Updates

    Provisiond is nearing feature-complete, and is definitely at a point where it can be tried out on real-world networks. See below for a feature on Provisiond.

  • Trunk: Node Page Updates

    Donald and Matt have both been working on updating the node page to be more dynamic. It's pretty slick now, offering tabs detailing various information related to the node.

  • Branch: Inventory Management

    Matt Raykowski continued work on his inventory daemon. I'm still waiting for a more detailed update of what it does/will do, I'll try to get an update before next week's TWiO.

Provisiond: An Overview

Provisioning Groups: UI
Provisioning Groups: UI
 
Provisioning Groups: Edit Requisition
Provisioning Groups: Edit Requisition
 
Provisioning Groups: Edit Foreign Source
Provisioning Groups: Edit Foreign Source

A History Lesson

Architecturally, OpenNMS is very sound. It was written from the beginning with scalability in mind, by people who had been dealing with network management for their entire careers. However, Java, as a language (and as an environment), has grown immensely in power, reliability, and expressiveness since we started this project. Gone are the heady days of requiring IBM's 1.3 JDK because it was the only one that handled large numbers of open ports gracefully.

That does not mean all remnants of those days are gone, however.

Over the years, most of OpenNMS has gone through an architectural upgrade, under the guidance of Matt Brozowski. Whole subsystems were cleaned up, rewritten, and/or modernized. 3 glaring exceptions remained, until recently: Capsd (the capability scanner), Notifd (the notification engine), and the web UI (I don't know if it's web 1.0, or web 0.9, but well... it needs an upgrade.) Thanks to the recent implementation of Provisiond, I'm happy to say we only have two glaring exceptions to the wonderful architectural upgrades OpenNMS has gone through. Notifd: I'm coming for you next!

Capsd! Huugh! Good God, Y'all! What Is It Good For?

OpenNMS has three distinct phases when it comes to how it discovers and works with nodes:

  1. Discovery (What's Out There?)

    Discovery is the beginning of the life of a node. OpenNMS does a ping sweep across the range of addresses specified in your configuration, and says, "did it respond?" If the answer is "yes," discovery shouts into the event bus, "HEY! I suspect I might have found a new node!" Discovery is not actually a requirement of OpenNMS, it is entirely possible to use it without doing discovery, either by sending your own newSuspect event (through a script, or the "Add Interface" link in the admin UI), or by using the model importer.

  2. Capability Scanning (What Does It Do?)

    Capsd, the capability scanning daemon, listens for newSuspect events, and says, "Hmm, what is this IP address capable of?" It does service scans (based on the capsd plugins defined), checks for SNMP, and does some other things to determine whether it's a new node or part of another node, and what services are publicly listening.

  3. Monitoring (Is It Still Doing It?)

    Once a node has been discovered and capability scanned, it goes into the queue to be monitored, based on the poller-configuration. At that point it becomes a part of the normal poll/data-collection/thresholding/notification cycle that you know and love.

The Model Importer

Some of our users are integrating OpenNMS into larger systems, or want tighter control over what nodes OpenNMS is aware of than can be provided by a ping sweep and Capsd scan. For that, we wrote the model importer, or "provisioner".

To use the model importer, you would create an import definition XML file, which describes the nodes, their interfaces, and services which you want to manage directly. Most folks who are doing this either export from some other internal database of managed nodes, or use the Manage Provisioning Groups UI and custom-build a set of nodes directly. You hit the import button, and voila! Your database is populated with the exact set of nodes, interfaces, and services you specified.

This is very powerful, but also very rigid. It's pretty much an all-or-nothing affair; there's no room for discovering extra information about provisioned nodes.

What Does Provisiond Do?

Provisiond replaces the functionality of Capsd, and replaces and expands upon the old model importer, by defining not only the nodes and interfaces you wish to monitor, but also adding the ability to distinguish how we should behave when importing these nodes. It has a pluggable architecture which allows for defining policies such as, "scan the imported node, and if it's in this IP address range, automatically put it in the routers category," and "scan the specified interface, automatically discover the SNMP interfaces, and if they are non-IP, don't bother putting them in the database."

Architecturally, Provisiond is chopped up into a number of subsystems:

  • The Provisioner

    This is the meat of provisiond, it's responsible for managing a provisioning "lifecycle," which includes scheduling scans, listening for events, and kicking off the various parts of scanning and writing to the database. Matt has written a very powerful engine for doing these various tasks which I suspect will move into other parts of the code as we refactor them in the future. There's a lot more flexibility in determining when things will be scanned than Capsd's main loop.

  • Detectors

    The detectors are the replacements for Capsd scanners, and they've received an upgrade over their Capsd counterparts as well. They've been rewritten with an architecture that allows them to run asynchronously, so service scans which take a while don't have to bottle up the scanning of other nodes. Additionally, the SNMP scanning has received an upgrade that lets us react to bulk gets as soon as a complete "row" of data is received, so node sub-interfaces discovered through SNMP will start showing up sooner.

  • Policies

    Policies act as filters on the data as it's coming in. We've got a few simple ones in the first release, but since they're written with a very simple and pluggable API, it makes it easy for you to define your own business logic by creating an incredibly simple class and dropping it in the classpath.

A Bit More on the Model

The existing model importer had the concept of a "provisioning group," which is a collection of node/interface/etc. definitions, and was configured through the Manage Provisioning Groups UI. Each provisioning group had a "foreign source" which defined a discrete collection of nodes, so that if you removed a node from that foreign source, it would be deleted from the database as well.

In Provisiond, the foreign source is no longer just a tag that's a unique identifier, it's a definition of the behavior of the provisioner (ie, defines the detectors and policies). To that end, we've renamed the generic "provisioning group" to a Requisition. There is then a separate configuration for the Foreign Source which defines the policies which describe how the requisition is imported.

What Works?

At this point, almost everything. The only thing missing is the part that listens for newSuspects, so it doesn't completely replace Capsd as of yet. However, barring that, all of the functionality of Capsd is essentially implemented in Provisiond at this point.

How Do I Try It?

Grab a 1.7.1 snapshot or build from source, and fire it up. Provisiond is enabled by default now, and you can go to the Manage Provisioning Groups link in the UI to try it out. Did I mention this is unstable software? Really, it's unstable software. Don't do this on a production system! That said, it's cool. =)

Upcoming Events

If you have anything to add to the events list, or you wish to be a Dev-Jam sponsor, please let me know.

I'm Beat

Man, it was a lot of work to write that up. I'm so tired, I just might miss TWiO next week. We'll just have to see. ;)

As always, if you wish to berate me publicly, feel free to leave a comment on my blog, and if you wish to berate me privately, feel free to send me an e-mail. Until next time!

Welcome to This Week in OpenNMS for Friday the 13th. It's yet again time to take a look at what's been going on in the world of OpenNMS development.

Project Updates

  • Stable: Current Release is 1.6.2

    1.6.2 is still the current release, and while there are a few fixes pending since it's release, there are no immediate plans for a 1.6.3 yet.

  • Unstable: Current Release is 1.7.0

    Trunk has been moving fast still, and I hope we'll get a 1.7.1 release out soon-ish, but we're still trying to get provisiond up to a demoable state first. In the meantime, feel free to try the nightly snapshots (if it's not on a production system, of course).

  • Trunk: Javamail Updates

    Dave's been working on refactoring our javamail support into it's own module, to make it easier to reuse in different portions of OpenNMS.

  • Trunk: RANCID Integration

    Guglielmo continued work on the RANCID integration; the API has stopped changing much and most of the work has been going on in the UI at this point.

  • Trunk: Provisiond

    Matt has most of the provisiond code working, some simple scanning is possible now, there are just a few loose ends to tie up before there's a working prototype.

  • Trunk: Node Page Updates

    Donald's spiffy new ajaxy node page is active, and lets you page through data related to the node directly in the node page.

  • 1.6 Testing: Minor Updates

    Jeff, Bill, and a few others have done some minor updates to 1.6-testing (which of course are forward-ported to trunk as well) including IE rendering issues, additional MIBs, read-only KSC report support, and more.

  • Trunk: Map Updates

    Antonio has continued work on the new trunk map code, which includes support for all modern SVG browsers (Safari, Firefox, and IE with the Adobe SVG plugin).

  • Trunk: RESTful Support for Map Data

    Matt Raykowski submitted RESTful API support for map and related data (map elements, linkd data, etc.) which will be useful for future map work.

  • Trunk: XMP/Cartographer Support

    Jeff merged Bobby Krupczak's Cartographer agent support for OpenNMS to trunk.

    Cartographer "implements a novel approach to managing distributed systems by automatically discovering and tracking the relationships between its component systems and applications. Cartographer does so via specially designed agents -- residing on clients, servers and (potentially) network devices -- that detect, identify, and track the inter and intra-system dependencies or relationships. Dependencies include network level services like DNS, DHCP, and SMTP as well as higher-level application abstractions like filesystems, databases, directory services, telephony, and middleware."

Upcoming Events

If you have anything to add to the events list, or you wish to be a Dev-Jam sponsor, please let me know.

If You Can't Love the Source You've Opened, Open the Source You Love

That's all for this week. I hope you all have a wonderful valentine's day if you're into that kind of thing. As always, feel free to drop me a line if you have any questions, comments, or if you wish to know my address so you can send me some mysterious white powder through postal mail.

It's time for another This Week in OpenNMS. I will be skipping next week's, as I'll be too busy sunning myself in the caribbean and hanging out with a bunch of rockin' bands on Ships and Dip V. Ahhhhh....

Project Updates

  • Stable: Current Release is 1.6.2

    1.6.2 seems to be holding up nicely, although there have been some reports of issues with JMX thresholding that need to be investigated more deeply still. If you're having issues and can add some details to the bug on the subject, it would be appreciated.

  • Unstable: Current Release is 1.7.0

    Trunk is still moving crazy fast, so hopefully we'll be getting another 1.7 release out there soon when a few things settle down, so people can help test. In the meantime, feel free to try the nightly snapshots (if it's not on a production system, of course).

  • Trunk: Acknowledgement Daemon

    Dave continues to make progress on Ackd in between crazy days at the TeleManagement Forum's Team Action Week (more on that later). Hopefully it will be ready for folks to test it out in the next few weeks.

  • Trunk: Inventory Daemon

    Fresh off the heady high of getting WMI support in trunk, Matt Raykowski has started work on on inventory daemon, which intends to provide a more flexible interface to systems asset and inventory information than our current (anemic) asset system.

  • Trunk: Provisiond

    Provisiond continues to progress towards something usable. Matt's been working on finishing the scanning code, and Matt and I both have spent some time this week making an optimized SNMP table tracker which will let us perform operations on collected SNMP data as it comes in, so scans of nodes with large numbers of interfaces will happen in a more timely manner.

    I also finished up this week a RESTful API to the Provisiond importer, which will let you edit and create model-import and foreign sources. The web UI is next, and will use this API for creating provisiond's configuration.

  • Trunk: RANCID Support

    Guglielmo continues to flesh out the RANCID API. Work has begun on the OpenNMS web UI side of the implementation, and small changes are still being made to the RANCID java bindings.

  • Trunk: Node Page Updates

    Donald continued his work on making the node page more dynamic.

TeleManagement Forum's Team Action Week

OpenNMS, represented by OGP members Craig Gallen and David Hustace, is participating this week at the TeleManagment Forum's (TMF) Team Action Week (TAW) in Lisbon.

Craig is leading the TMF Interface Program (TIP) Reference Implementation (RI) team and we will be creating open source implementations of TIP interfaces starting with Service Problem Management (SPM).

The artifacts created by the reference implementation team will be libraries that can be used to develop NGOSS-compliant components in service provider applications. OpenNMS has committed to working on the Service Problem Management (SPM) interface (Alarms), Inventory, Performance Management, and Trouble Ticket implementations. For more information see the interface program page on TMF's web site.

Upcoming Events

If you have anything to add to the events list, or you wish to be a Dev-Jam sponsor, please let me know.

Cruisin'

That's it for now. We'll see you again, in a couple of weeks! As always, if you have questions, comments, or angry hate-filled missives to send, let me know.

Sorry I missed last week, I ended up having so much come up I didn't have time to put it together, so this issue is an action-packed 2-week OpenNMS extravaganza!

Project Updates

  • Stable: Current Release is 1.6.2

    On January 15th, we saw the release of OpenNMS 1.6.2 which included a number of small bugfixes and feature additions.

    For the full list of what was changed, see the 1.6.2 bug milestone.

  • Unstable: Current Release is 1.7.0

    The 15th also saw the first unstable release since 1.6 went stable. It is a work-in-progress release from trunk which gives a preview of the features to come in the 1.8 series. As 1.7.x releases come out, the release notes in the New and Noteworthy section of the web page will be updated with an overview of the new features which will be in 1.8.0.

  • Trunk: Provisioning

    Provisiond is moving along, with lots more commits. Matt has been working on the scheduler and other infrastructure, and I've been working on the data model for the requisition (what nodes/etc. to import) and foreign source (what to do with the information imported). Things are moving along, and hopefully we will be doing actual scanning of node data soon.

  • Trunk: RANCID Integration

    Guglielmo has been working more on the integration with RANCID for Cisco router management.

  • Trunk: Acknowledgement Daemon

    Dave is continuing his work on the acknowledgement daemon. It's approaching finished, and will hopefully be in a usable state in the nightly snapshots soon.

  • Trunk: WMI Updates

    More work has been done on the WMI feature since 1.7.0 came out, including some architectural tweaking, and lots of new data collections.

  • Trunk: Map Work

    More work has been going on in the OpenLaszlo map branch. From what I've been told, it's approaching a usable/demoable state. Look for updates on this soon!

    Also, Antonio did some bugfixes and updates to the Firefox/Safari SVG maps, as well.

  • Trunk: Node Page Enhancements

    Donald has been working on some new spiffy dynamic node pages which will allow you to browse node data, do simple queries, and other neat stuff, using Ext JS.

  • Trunk: Asterisk Notification Support

    Jeff added support for notifications through Asterisk.

Upcoming Events

If you have anything to add to the events list, or you wish to be a Dev-Jam sponsor, please let me know.

Adieu

That's it for this week. As always, questions, comments, constructive and/or destructive criticism are always welcome. =)

The holidays are over, the hangovers have been recovered from, and in the meantime, a flurry of activity has been happening in the OpenNMS world. It's time for another This Week in OpenNMS!

Project Updates

  • Stable: 1.6.2 Coming

    The goal is to release version 1.6.2 next week. There have been a number of bugs fixed (and a few small features added) since 1.6.2.

  • Trunk: Provisioning

    Work continues on the new provisioning code at a frantic pace. We're not yet at a milestone where people can use it, but lots of pieces are coming together.

  • Trunk: Acknowledgement Daemon

    Dave has begun work on Ackd, the OpenNMS acknowledgement daemon. This will allow API and user-interactive access to acknowledging alarms. The goal is to be able to acknowledge alarms through jabber, email, etc. upon receiving a notification of an issue.

  • Trunk: Alarm Daemon

    Dave also worked on Alarmd, a daemon for managing persistence of alarms to improve event persistence performance and reduce delay in forwarding events to listeners.

    This immediately began discussions with a large Telco in Europe about their contributing a 3GPP compliant alarm strategy. Cool.

  • Trunk: IRC Notification Strategy

    DJ committed a notification strategy that can notify you of events and outages through IRC chat.

  • Trunk: Event Code Updates

    Antonio committed some updates to the event code allowing expanding varbinds in an event log message, as well as some changes to the event proxy.

  • Trunk: Cross-Browser Map Support

    Antonio also committed a first-blush update of the OpenNMS map support that works with Safari and Firefox. It still needs some work, but is in a usable state now.

  • Trunk: WMI Has Landed

    WMI support has landed in trunk! Thanks to Matt Raykowski for the hard work in implementing this much-requested feature!

    It supports polling and datacollection, and through the magic of j-Interop, it is completely platform-independent. You do not need to be running OpenNMS on Windows or have any kind of special proxy to collect WMI information from remote hosts, it's a pure-java client implementation using native DCOM to Windows hosts.

  • Trunk: 1.7.0 Coming

    Alongside 1.6.2, we're looking forward to putting out our first unstable release in the 1.7 series. Considering all of the great work that has happened since 1.6 was branched, it was deemed time to make a release and get it out there for people to test. Look for it soon!

Order of the Green Polo Nomination: Matt Raykowski

In honor of his awesome WMI contribution, Matt Raykowski has now been added to the ranks of the Order of the Green Polo. The OGP is an organization of folks who have made a significant contribution to OpenNMS.

Welcome, Matt, and thank you!

Upcoming Events

There has also been discussion of a user conference during the February training dates in Italy, but it's not yet been finalized. Stay tuned to the opennms-announce list for details when we have them.

If you have anything to add to the events list, please let me know.

Whew

That's it for this week. Tune in next week for another exciting installment.

Will we get 1.6.2 and 1.7.0 out on time? Will we create a provisioning system that can take down the Internet? Will we find out how Jeff was able to grown an extra set of hands to answer support tickets on two computers at once? Find out next Friday on This Week in OpenNMS!

It's been a pretty busy week here in OpenNMS land.

Project Updates

  • Stable: RT Ticketing Plugin

    Jonathan got his RT ticketing updates finished, along with some OTRS cleanup. These have been merged back into trunk and the 1.6-testing branch, so should be ready pending a review, for the 1.6.2 release.

  • Stable: More Vendor Traps

    Jeff spent some time adding more SNMP collection, graphs, and trap events for a number of agents, including SNMP Informant and AIX.

  • Trunk: IfIndex Persistence

    Antonio committed a small change to the event and alarm persistence code to allow Trapd to extract IfIndex from varbinds if it is available.

  • Trunk: Provisioning

    We continued to focus on the new provisioning daemon and API, with a lot of design work and pair programming going on, especially on Matt's part. We all spent time this week breaking the work up into smaller chunks so we can get a better idea of what our progress is.

    Donald continued to work on the detector code, adding more detectors, tests, and cleanups to the existing code.

    I've been working on creating the model for the configuration that will drive provisioning, including changing the default plugin behavior, defining custom behaviors for determining which IP and SNMP interfaces will be managed (as well as what categories the nodes will be put into). I've been learning much about JAXB along the way, which gives us an alternative to all of the intermediate wrapper code we tend to have to put around our existing Castor model objects.

    David's been working on mocking up some code that will allow the provisioning system to automatically update a dynamic DNS server with information discovered during provisioning.

  • Trunk: WMI Support

    Matt Raykowski continued to work on putting some finishing touches on the WMI support. There's some more to do, but he's hoping to get a first drop of it released into trunk any day now.

  • Trunk: RANCID Integration

    Guglielmo committed the starts of what will become an implementation with RANCID, a tool for doing change management and configuration on Cisco devices.

    The first part wraps the existing (Tcl-based) RANCID tools with a web-services API. Next, we will be writing a plugin for the new provisioning API that can be called when managed node information changes.

  • Other: Laszlo Maps

    Matt Raykowski also spent some time in a branch he and Joed have been working on to create network topology maps using OpenLaszlo. It's not yet ready for integration into trunk, but a lot of good low-level work has been going on in that branch alongside the maps work.

  • Other: Web UI Work

    Rob Moore committed some updates to Matt's sandbox "expenses" application (a codebase to test out new technologies) which include a data grid and a sample query interface using JOSQL. We saw a preview of this at Dev-Jam this year, and it looks pretty sweet. Hopefully we can get it integrated into the OpenNMS web UI in the future.

Upcoming Events

Note: The OpenNMS Group is running a special until the end of the year. Sign up for basic support and get one basic training voucher, sign up for enterprise support (including upgrading from basic) and get a combined basic/advanced training voucher. See Tarus's "Forget TARP, Take COVER" post for details.

If you have anything to add to the events list, please let me know.

'Zat You, Santa Claus?

That's it for this week.

The OpenNMS Group is off from Christmas to the new year, so things will probably be quiet next week. I want to wish you all a happy non-denominational, non-specific, non-offensive, winter solstice time celebration day!

As always, feel free to drop a comment my way if you have any suggestions, love- or hate-mail, or anything at all.

So far the response has been positive to TWiO, so it's time again for another chapter.

Project Updates

  • Stable: Ticketing Updates

    Jonathan Sartin worked more on the OpenNMS trouble-ticketing API, finishing up a change to allow ticketer plugins to be able to raise exceptions when errors occur. In addition, he resurrected work on an RT (Request Tracker) ticketer plugin. Both will be merged to the 1.6 branch when they're ready.

  • Stable: Bug Fixes

    I spent a little time this week cleaning up some bugs, mostly exceptions, simple bugfixes, and other minor changes.

  • Stable: Windows Updates

    Bobby Krupczak was kind enough to lend a Win64 machine with Visual Studio so I could get 64-bit binaries built. They are available now on SourceForge. (Copy the jicmp and msvcr90 DLLs to your system directory, don't forget to rename them to remove the -win64 bit.)

    In the process of working on that, a reasonably serious bug was found in the JICMP libraries on Windows. Windows passes around HANDLEs instead of file descriptors for the purposes of file I/O (and socket I/O). We were treating them as if they were normal file handles (ie, integers), which just happened to work on Win32, not because it was correct, but because we didn't try to access the filehandle from Java directly. :) The code has now been cleaned up to treat socket operations on HANDLEs (well, SOCKETs) properly on Windows, and the new DLLs in the JICMP 1.0.9 binary release contain these changes (win32 and amd64).

    Additionally, it was determined that Windows XP, at least, is pickier about reading from raw sockets than other platforms, and requires that at least one packet is sent out the socket before reading any in (even though we're just listening for any ICMP packets on the raw socket, so it shouldn't really matter). This is fixed in the jicmp.jar in the 1.0.9 distribution; until 1.6.2 comes out, it is recommended you copy this jar over the one included in $OPENNMS_HOME/lib if you are running on Windows.

  • Trunk: More Work on the New Provisioner

    Donald continued implementing "detectors", the equivalent of Capsd's protocol plugins, including a new asynchronous API which will allow us to interact with services at a much more granular level.

    Matt has proposed we use more agile development practices, and towards that goal, he started working on a document describing the current desired featureset of the provisioner. We've broken it up into chunks which will then be used to do code sprints so we can do a better job of divvying up the work. We're working on going through and cleaning up the documentation and hopefully we'll get it into the wiki soon.

  • Trunk: Refactoring Maven (Services)

    Right now, one of the biggest chunks of code in our source tree is "opennms-services". It's kind of a dumping-ground of all of the high-level code that isn't webapp code, and it's a bit unweildy. I've started a branch to attempt to refactor at least some of it into smaller chunks (splitting out capsd, collectd, config, eventd, mock, notifd, poller, threshd, trapd, xmlrpcd, and so on). Work will be ongoing, but hopefully eventually we'll have things a bit more manageable.

  • (Almost) Trunk: WMI Support

    Matt Raykowski has been finishing up work on his WMI (Windows Management Instrumentation) monitor and collector and we hope to be merging it into trunk in the near future. There are just a few more finishing touches to put on it, and then it will be ready for inclusion in the future 1.8 release.

Upcoming Events

(Or, as Tarus calls it, Git Yer Learnin' On.)

If you have anything to add to the events list, please let me know.

Development: A Brief Interlude

It's time for a little aside on some of the tools we use for development.

Maven is an awesome tool, but with a large project like OpenNMS, checking repositories and other things are actually a significant drag on the build process. To help alleviate this (and to speed up building and sharing artifacts on our Bamboo continuous-integration server) we set up a Nexus proxy at the office. It worked so well, I set one up at home too. =)

If you'd like to set up your own, I've documented what we did on the OpenNMS wiki. Feel free to update it (and/or ask questions) if you run into any issues.

And on the subject of Bamboo, I realized I haven't yet publicly thanked Atlassian for their generosity. They've generally been very generous to open-source projects, offering free licenses for their tools (continuous integration, bug tracking, etc.) OpenNMS has a very large build, and it can take a long time to work it's way through the continuous-integration process even with a fast machine. They were kind enough to extend our open-source license to allow for more than the usual number of agents, and we're now burning rubber with our entire set of classroom machines acting as build agents. No longer do we have huge queues of waiting builds, we get very timely Jabber notices when we break the build. Hm... maybe that's not such a good thing after all. ;)

Anyways, thanks again to Atlassian for the license upgrade, it's working great!

That's It for This Week

That's it for now. I hope you're enjoying these updates. If you have any questions or comments, or if you've done something cool with OpenNMS that you'd like included, please let me know.

I was recently remembering fondly the oldskool "OpenNMS Updates" that Shane O'Donnell used to do, and I thought I'd take a crack at reviving the tradition. So, without further ado...

Project Updates

  • Stable: Current Release: 1.6.1

    OpenNMS 1.6.1 seems to be holding up without any huge bugs reported. There are no immediate plans for a 1.6.2 release but I would expect we'll look into doing one in a month or so just to roll up any bugfixes that have happened, if nothing else.

  • Stable: Configuration Tweaks

    David did some configuration changes that will be in a future 1.6 release which automatically roll up SNMP LinkUp and LinkDown traps into an alarm. Also, Jeff added a bunch of IETF and vendor MIB data collection and graphs to the 1.6 branch.

  • Trunk: Provisiond

    Development is still churning along in trunk, with the focus on the Capsd rewrite. Since this is the first (of hopefully many) TWiO, I will go into a bit more depth.

    OpenNMS has always been written with scalability in the forefront of our minds, but JVM technology and development methodologies have moved a lot since we first started the project 9 years ago. Since the OpenNMS 1.2 series, and even a bit before, many of the subsystems of OpenNMS have been tweaked, cleaned up, and even rewritten for performance and other reasons. One of the things that's needed attention for quite some time is Capsd, the part of OpenNMS that figures out what devices are on your network, and what those devices' capabilities are (hence, Capsd).

    Matt Brozowski has been working on a complete replacement, called Provisiond. One of the benefits of the OpenNMS architecture is that it's event-driven structure with distinct daemons for different subsystems makes it easy to make new implementations without breaking existing things. Thus, Provisiond will be installed (disabled, by default) alongside Capsd in 1.8, and in 1.10 (or 2.0), it will become the default capabilities scanner, with Capsd deprecated but not yet removed.

    The Provisiond architecture is such that a very robust threading model has been introduced to allow scanning huge numbers of resources in a very efficient manner, and the API has been written to make it very simple to implement new "detectors" which detect services and resources.

    Eventually this new architecture can (and should) be extended to polling/monitoring and data collection, but... one thing at a time. ;)

    Anyways, Matt has been rockin' the Java working on Provisiond, and I've been pairing with him off and on. I really like the way this code is shaping up. Donald in the meantime has been making tons of detectors so we can cover the large range of services we already detect with Capsd.

  • Trunk: Mobile UI

    Alexander Finger started work on a simple mobile UI that gives you the outages summary on a single page (at least on my iPhone <g>).

    OpenNMS Mobile UI

Upcoming Events

If you have anything to add to the events list, please let me know.

From the Discussion Lists - Cartographer

[original thread]

Bobby Krupczak has created a tool called Cartographer which "implements a novel approach to managing distributed systems by automatically discovering and tracking the relationships between its component systems and applications." In addition to the Cartographer protocol (XMP), software, and agent, he has written a collector plugin for OpenNMS which allows the collection and graphing of Cartographer XMP data. Very cool!

Hopefully soon we will get the collector integrated into OpenNMS proper and a future release (1.6 if it's not too invasive, or at the latest, 1.8).

That's It!

So that's it for this week. Let me know if you think this is a useful thing for me to do, if there's anything you'd like me to talk about that's missing, or, well, if you have any comments at all. Until next week...