User:Jeffg

From OpenNMS
Jump to: navigation, search

In the bad old days when dial-up was king, I worked for a regional ISP that used MRTG to keep track of call volume trends on its Ascend access servers. The concept of a network management system intrigued me, and in my next job as a contractor for a civilian US government agency I took the reins of an installation of what was then called Concord Network Health.

Concord evidently figured that I "got it" and hired me away in late 2000 to work for their professional services division. After a year of nearly constant travel I jumped to the software engineering side of Concord as a way to spend more time writing code and less time on the road. My work there focused on the system and application management products of the eHealth suite, namely AdvantEDGE View, SystemEDGE, and Service Availability. These products came from the portfolio of Empire Technologies which Concord had acquired in 1999. Computer Associates acquired Concord in mid-2005; my employment at CA ended in August 2005.

I subsequently did a little bit of independent consulting in the network management space while working a day job in information security with BellSouth. It was in that period that I first deployed OpenNMS to manage a bunch of Check Point firewalls and related equipment, then started using it in my independent work, working on the code, attending Dev-Jam, and somehow getting voted into the OGP. After turning in my BellSouth badge four hours before the AT&T merger closed, I moved to an independent carrier where I replaced Netcool OMNIbus and several point products with one multi-server OpenNMS installation. Since November 2007 it has been my privilege to work full-time on nothing but OpenNMS as part of OpenNMS Group. As part of my work there, I also get to spend some time hacking and speaking on Asterisk, which has been a hobby of mine for several years.


get_snmp_V1

This function allows to query inventoried SNMP devices.

You must supply as parameter an XML structure described by the following DTD:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE REQUEST[ 
<!ELEMENT REQUEST(BEGIN,ASKING_FOR,CHECKSUM,WANTED,ID*,TAG*)> 
<!ELEMENT ENGINE(#PCDATA)>
<!ELEMENT BEGIN>
<!ELEMENT ASKING_FOR(#PCDATA)> 
<!ELEMENT CHECKSUM(#PCDATA)>
<!ELEMENT WANTED(#PCDATA) *>
<!ELEMENT ID(#PCDATA) *>
<!ELEMENT TAG(#PCDATA) *>
]>

ENGINE allows to select a search engine. Actually, only one search engine is available. So you must use <ENGINE>FIRST</ENGINE> (case insensitive).

BEGIN allows to navigate in results using an offset.

CHECKSUM allows to query SNMP devices for modified inventory sections. This is a 32 bits number in which each bit identifies an inventory section (inventory sections may be combined).

TODO: work out what these are (including whether there actually are any!)

WANTED is a 32 bits number like CHECKSUM, but for non-standard inventory sections:

TODO: work out what these are (including whether there actually are any!)

The following other search criteria may be used besides of checksum:

ID 
may be multivalued, specifies a database ID of an SNMP device (separate namespace from that of computers)
TAG 
may be multivalued

ASKING_FOR allows to specify which answer is needed, META or INVENTORY.

In both cases, root is always <SNMP_DEVICES/>, and every SNMP device is marked up with <SNMP_DEVICE/>.

(<!ELEMENT SNMP_DEVICES(SNMP_DEVICE*)><!ELEMENT SNMP_DEVICE(Changing here)>...)

Here is the DTD of an SNMP device inventory answer:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE RESPONSE[ 
<!ELEMENT SNMP_DEVICES(DEVICEID,DATABASEID,CHECKSUM,LASTCOME,LASTDATE,NAME,TAG)> 
<!ELEMENT DEVICEID(#PCDATA)>
<!ELEMENT DATABASEID(#PCDATA)>
<!ELEMENT CHECKSUM(#PCDATA)>
<!ELEMENT LASTCOME(#PCDATA)>
<!ELEMENT LASTDATE(#PCDATA)>
<!ELEMENT NAME(#PCDATA)>
<!ELEMENT TAG(#PCDATA)>
]>

Inventory is built from XML sections mapped to database tables (see Database Schema and OCS Inventory NG Server DTD).