v2.3.2 ------ - A few minor cosmetic changes were made. - A few bugs, major and minor, were corrected. - The snmp_collect script I rewrote for v2.3.1 didn't work; I was using textual OIDs instead of numeric ones, so a simple fix to functions.php was all that was needed. - Took the ".php" extension off all Nisca utilities; this way, there won't be any way to run one of them from a browser (which would be bad). - Added the "Add All" button to the Javascript interface selection form on the main index page. - Removed all requirement for "snmpget". Walk & bulkwalk are all that are needed now. - Added the ability to change bit/byte display on a per-report basis; the setting in the global admin section is now just a default. (This is not saved in stored reports; that would have required database changes, and I don't want to do that yet.) - The fonts used in Nisca have always been hardcoded into it. Not the ones on graphs; the ones on all the HTML pages. I've changed that; you need only define the set of fonts you like in one place (nisca.conf) now, and that's what it'll use on every single page. Thanks, Pier. v2.3.1 ------ - v2.3 turned out to be a hopeless mass of annoyance, so I've (hopefully) fixed all the bugs in it and called it 2.3.1. My apologies... just wasn't enough testing; it should have been called a Beta. 2.3.1 has been more thoroughly checked, and has even more enhancements than v2.3 had (all the enhancements from 2.3 are in 2.3.1). Fixed things: nisca_check, nisca_kill, snmp_collect, functions.php, report.php, the config files, and probably others I've since forgotten about. - Replaced the "deprecated" ImageDashedLine function in report.php with ImageSetStyle instead so people using libgd2.x would actually see Y-axis gridlines. - Figured out how to keep the Javascript interface selection box from clearing itself when you hit the "Back" button after viewing a report. Should be easier to use now. v2.3 ---- - First and foremost, got rid of the use of built-in SNMP functions in PHP. You no longer need the SNMP extension in PHP; all you need is the "snmpwalk", etc, binaries that come with ucd-snmp. Not sure if it's really faster or not, but at least it works now no matter what ucd-snmp version you have. Whew. - Changed report.php to fix the hideous Giant Spiked Graph problem. (This fix has been back-ported to 2.2 as well.) - ...and then rewrote it all again. With the Old Way, it first pulled all the stats out of the database as running totals, then converted them into counts-per-interval, THEN averaged them, in three separate operations. This has now all been consolidated into one operation. It hasn't resulted in *much* of a speed increase, but there is a definite improvement. At this point, there isn't much else I can do to speed it up. Sigh. As a nice side effect of all that, I fixed a few potential problems remaining with the Giant Spiked Graph Syndrome. After much consideration, I've back-ported it to 2.2 too. - Something else that I've back-ported to 2.2 in report.php: there was a bug which would cause some report table rows to show "0" when they should be showing a large number. Silly me, I was using the whole byte counter instead of an average bytes/sec rate to compare with the interface's maximum speed. Thanks to Ambrus Csaba for pointing it out. - I've combined the snmp_collect and test_collect scripts. If you run snmp_collect.php with anything after it, like "./snmp_collect test", it will act like it was actually the test_collect.php script... that is, not write to the database and just show you what it encounters during collection cycles, including how long they took. - Added support for putting a visible watermark on graphs from any JPG, PNG, or BMP image. Sorry, no GIFs; thanks again, Unisys. - Fixed a bug in adm_snmp3.php where if you deleted a previously-entered manual ifSpeed entry on an interface, it caused a SQL error. Thanks, Pier. - Added the two rangesX.php scripts to make it easier to figure out what time ranges you can get data from on a particular interface. An idea whose time had come. - Added the ability to click on a graph image to zoom in to that time period. This may be the nicest new feature of all... v2.2 ---- - Added one of the neatest features so far, the "Data Re-Averaging Utility." If your database ever gets too large to handle, you can use this utility to trim out some of the statistics in your database (thus effectively re-averaging the data over a longer period). You can also use it if your statistics are too "fuzzy" (collecting at very frequent intervals on a fast interface will make your graphs fuzzy; the more frequent, the fuzzier it gets). It's like two features in one. Oh, and also, when you strip out database entries to re-average it or make it smaller, you have the option of telling it to create *compressed* text (SQL command) archive files so you can change your mind later. - Modified the "Stats Deletion Utility" to create archive files like the Re-Averaging Utility does now. - Added "multiple" report functionality. This means you can tell it to add up the stats on all the interfaces you have selected and put them all on one graph. This differs from MRTG's method, which requires that you have a special rule set up to *collect* the stats additively. Nisca allows you to just suddenly decide that you want to see the sum of the transfer rates on any number of interfaces on any number of machines over any time period; all that's required is that they have normal statistics already collected for them. This is only supported for the "InOctets" (byte count) statistics, not packets, drops, or errors, though I could add support for multi-IF graphs on those kinds of data if people wanted it. - Added "adm_showconf.php" script to the administration section. This script just shows you the contents of the "nisca.conf" and "db.conf" files it's using; I thought it might come in handy to some people. :) - Added ability to use one of these methods to uniquely identify interfaces on a host: "ifDescr", "ifIndex", "ifName", "ifPhysAddress", "Cisco iflocDescr", or "Catalyst Portname". This was to help those people stuck with a Catalyst or other machine that has the same "ifDescr" entry on every interface. - Added "Committed Information Rate" (CIR) on interfaces so you can see where your graphs go above it. Thanks to Mark Motley for the idea. - Added "Host Aliases" so you aren't stuck with an IP or hostname to display a host as (similar to the user-definable Interface Aliases). Mark Motley's idea, too. - Added the ability to change or add an "ifSpeed" entry for any SNMP or Localhost interface (adm_snmp2.php and adm_local1.php). - Added the display of how much disk space your database consumes to the report index page. (This requires a bit of setting up; see the end of the "nisca.conf" file for details.) - I've had a few requests from people who for whatever reason want to run their collectors from crontab instead of as a daemon. Now, all you have to do is change one variable at the top of "collect.php" or "snmp_collect.php" to toggle daemonic behavior. - Added an SNMP timeout variable in snmp_collect.php. This can be adjusted by the user easily (it defaults to 15 seconds... I hope). - Changed it so trying to save a report with an existing report's name isn't allowed anymore. - Fixed a bug which caused interfaces without an ifSpeed entry to generate wildly inaccurate text-only reports. (This fix has been back-ported to v2.1 as well.) Thanks to Timothy Barbeisch (tim@mkl.com) for drawing it to my attention. - Added the usual "update-to-2.2.php" script. It changes the version in your database to "2.2", adds two "multiple" columns to the "reports" table, adds a column to the "localhost" table for fake ifSpeed entries, and two columns to the "interfaces" table to handle host aliases and IF naming method. - Added "PHP_HINTS" to the documentation for the purpose of explaining in excruciating detail how to install the proper Apache, MySQL, and PHP support for NISCA. v2.1 ---- - Added the "Stats Deletion Utility" that lets you get rid of unneeded statistics that are taking up lots of disk space. - Changed the php_uname function in "nisca_check.php" to posix_uname (didn't notice that php_uname only returns information about the machine PHP was *built* on, not the machine it's *running* on). - Added context-sensitive help, modularized so it's easy to add a help button to any page. - Changed "adm_snmp3" so it won't delete that host's current config before checking to see if it'll do 64-bit counters; it now waits to the very end of the script before it deletes your current config and replaces it with the new one. Duh... - Moved the "hostname", "community", and "if_name" fields out of the stats table and replaced them with a single mediumint identifier in the stats table tied to a record in the stats_ifs table. This has halved the disk space usage and doubled the report generation speed; not only that, but the index page now loads instantly every time. This limits you to monitoring 16.7 million interfaces; sorry about that :) It was either limiting it to that, or 65,000 interfaces; I decided to err on the side of "huge". - Added ability to choose whether you want JPG or PNG format graphs created; added a config option and stored-report field to the database for it. - Made "snmpv2" a per-interface option instead of per-host. I noticed a lot of machines which have some interfaces that do 64-bit counters while others don't; this is the only way to allow collecting some from v1 and some from v2 on the same host. - The SNMP interface administration page (the one with all the checkboxes to turn on, adm_snmp2.php) now displays interfaces which support 64-bit counters in a kinda reddish watermelon- colored font so you can tell at a glance which interfaces on that host actually both support AND are using 64-bit counters. On an interface that doesn't support them, there will not be a checkbox available for enabling 64-bit counters on that interface. - Also on adm_snmp2, interfaces that support SNMPv2 (whether or not they support 64-bit counters) will have their "ifAlias" SNMP entries read to populate the Alias entry fields. If you already manually set an alias for an interface, the alias you entered will be used regardless of its ifAlias entry. - Added the "update-to-2.1.php" script for the usual reason. This script modifies an existing database thus: - Sets version to "2.1" in the "config" table - Creates "stats_ifs" table - Adds "if_id" field to "stats" table - For every unique hostname/community/if_name in "stats", adds an entry to "stats_ifs" and uses last_insert_id to populate the "if_id" column in the "stats" table - Deletes the "hostname", "community", and "if_name" fields and all keys and indices from the "stats" table - Creates new primary key for stats table (no indices needed) - If stats table was empty, simply creates new stats table - Adds the PNG/JPG toggle to "config" and "reports" tables. - Altered mrtg_import script so that it's possible to import an MRTG log that was collected via SNMP on your localhost interface(s) into existing stats for localhost that were collected by NISCA via the proc/net/dev file by specifying "localhost" for the "community" option to mrtg_import.php. v2.0 ---- - Changed hostname/interface separator character from ":" to "!" because colons can appear in IF names. (Thanks to Eddy Lai.) - Added "update_to_2.0.php" script; this modifies an existing database thus: - Sets version to "2.0" - Converts "reports" table (changes separator to "!") - Changes "stats.if_name" to varchar(64) - Adds the "stats.community" column - Fills the "stats.community" column with guessed values - Changes primary key on "stats" to include "community" - Adds the tables "config", "interfaces", "localhost", "users", and "sessions". - Fills "config", "interfaces", and "localhost" tables using pre-existing values (from functions.bak) - Changed "stats.sql" to "create_stats.php" to make it easier to do a fresh installation. - Utterly rewrote the hostname/interface selection method on the index form. If you have Javascript, you get a dropdown list for the hosts, another dynamically-generated list of the interfaces on the selected host, and a multi-select list where the entries selected are stored. If not, you get the same old giant long list as before. This was done so people who monitor a LOT of interfaces won't have to wade through a 1,000-entry list. Also added config option to turn this on and off. (Thanks to Pierfrancesco Caci for the suggestion.) - Added ability to change community differently for each interface, not just each host. - Moved all configuration options to the database. It was getting annoying having to redo functions.php every time you upgrade. Now, upgrades are a snap. - Added "adm*.php", "log*.php", and "security.php" scripts for config admin. Administration scripts are now web-based and in a directory all by themselves (admin/). - Security on the admin pages is assured through the use of cookies, PHP session variables, and database entries connecting them with a username. - Absorbed "snmp_setup.php" script into the configuration interface. - Added "security.php" and "log*.php" scripts to manage authentication on the admin pages. - Made the date format a config option (date & time, date only, and time only). Thanks to Pierfrancesco Caci for telling me I needed to do this. :) - Fixed graph displays so they don't all say "bytes/sec". - Changed SNMP collection to use the numeric ISO OIDs instead of the textual ones; for example, it now uses ".1.3.6.1.2.1.2.2.1.1" instead of the more elegant "interfaces.ifTable.ifEntry.ifDescr.1". - SNMP collection now uses "snmpget()" instead of "snmp_walk()" for collection to speed things up a bit. - Added SNMPv2 support, though it requires a minor patch to the PHP source code (the INSTALL file tells you how).. - Added "total bytes transferred" to the text reports (thanks to Sean for the idea). - Added interface alias support. If you enter an alias for an interface, that will be used; otherwise, if there's an alias defined in the SNMPv2 OID "ifAlias", it will use that. Aliases are implemented for both localhost and SNMP interfaces. - Changed config file location setup; locations are put into the "nisca.conf" file and used for ever after from it. It should always go into "/etc/nisca/". Thanks to Fabio Di Nitto for this idea. - Added "nisca_check.php" script to run from crontab and make sure your collector(s) stay running. - Fabio moved the Changelog into its own file (CHANGELOG) and redid the documentation so it'd make more sense. - As you can see, I've been very busy. :) v1.3 ---- - Made all colors used to make graphs config options and changeable on the index form. - Major revision to SNMP interface name coding; it's no longer a regular expression, just an array of names for each host in $hostname. This means it'll work with IF names containing slashes. It was also breaking the mrtg_import.php script. My apologies to anyone who hates NISCA now because of this... :) (Thanks to Pierfrancesco Caci and Fabio Di Nitto for helping me through this.) - Added the $dynamic["*all*"] variable to "functions.php" and "snmp_collect.php". v1.2 ---- - Changed name of "functions.inc" to "functions.php". - Moved *all* config options to "functions.php". - Optimized stats table structure (removed "id" column and changed primary key to remove all possibility of duplicate data). - Added "update.sql" script. - Now including HTML versions of README, INSTALL, and LICENSE with the distribution. - Added support for dynamically-changing SNMP interface numbers. That is, if interfaces go up and down and the SNMP server keeps changing which number it assigns to them, you can tell it to re-read the list of interface names and numbers every time it gets the rest of the SNMP data. (thanks to Esteve Chust for this idea.) - More SNMP bugfixes (thanks to Jimmy Kaplowitz). - Made SNMP community a config option (Jimmy's idea). - Changed recommended way to run collector scripts by adding "nohup" to it to prevent death (Jimmy). - Added "Saved Reports" functionality (Jimmy again). - Created "reports" MySQL table. - Added "rpt_*.php" scripts for stored report administration. v1.1 ---- - Upgraded report generator to allow for viewing reports on more than one host/if at once. - Added option to show only text reports, graphs, or both. - Some minor bugfixes in the SNMP scripts. v1.01 beta ---------- - Added the "mrtg_import.php" script; updated documentation to match. v1.0 beta --------- - First release.