2006.09.04 * Updated THANKS, CONTRIBUTORS, INSTALL, and README. * Started revamping the web ui, templates, etc. * Added a new section to DEPENDENCIES for installing software from Cheeseshop. * Updated presetup.py with the changes to DEPENDENCIES. * Fixed bugs in workflow.service. * Fixed bin/pymond to run from current directory. * Started fixing the web resource code for running from either local directory or installed directory. * Created a new templates directory and moved template files. * Changed the default of the admin "commit.sh" script to not run tests. * Renamed static/web/styles to static/web/css. * Renamed static/web/javascript to static/web/js. * Updated pymon.ui.web.pages to use getResource() to locate files on a relative or install path as well as a new template() function to set the docFactory attribute. * Added an index template composed of nevow slots. * Added template pages for the various new slots defined in index.html. * Added slot classes and fillSlots() calls to pymon.ui.web.pages. * Added simplejson to DEPENDENCIES. * Added a root page child called "json" which, in turn, publishes JSON data under various children. * Forgot to add new JSON nevow template to last commit. * Added links on the main page for viewing the JSON data. * Fixed workflow state transition code to use method names based on the state name instead of the state number. * Added links for peers to the main page. * Added code for generating peer data for the main page. 2006.08.03 * Added news item about the new pymon space at code.google.com. * Updated the home page menu links to reflect this change. * Merged (unfinished) branch r286 to trunk r301. * Created a new directory for non-essential files called "extras". * Moved resource files into extras. * Moved contrib into extras. * Moved trunk/sandbox into its own top-level dir. * Moved etc/old and etc/tests into extras. * Removed old MochiKit. * Added new (packed) MochiKit. * Updated the templates to point to the new MochiKit location. * Moved diagrams into extras. * Fixed the news on the home page. 2006.05.05 * Added WORKFLOW.txt, based on an email to the mail list. 2006.05.04 * Changed the BaseState class to save the entire class, preserving all data instead of just the instance.data data. * Fixed the self-reassignment during application.BaseState.restore(). * Removed dispatch from clients.rules and monitors. * Made BaseState a subclass of Persistent again (forgot to redo that last night after all the testing). * Created pymon.actions, which will hold such methods or functions as sendMessage, escalate issue, etc. * Added a state-definition directive for initial-state. * Moved workflow instantiation out of workflow.service and into application (since it depends upon configuration information). 2006.05.03 * Renamed application.State to application.BaseState, gutted it, and rewrote it to work as a subclass of twisted.sob.Persistent. * Reimplemented MonitorState as a subclass BaseState. * Moved globalRegistry setup out of pymon.registry and into pymon.application. * Added configuration directive and updated the schema for application state saving. * Added a get method to application.BaseState. 2006.05.02 * Moved maintenacen window check out of monitors.MonitorMixin.__call__() and put it in clients.rules. * Moved the state-setting chunks of monitors.MonitorMixin.__call__() into application.setNonChangingState() and removed the redundant code. * Added more convenience methods to clients.rules.ThresholdRules. * Moved checkForMaintenanceWindow() out of rules and into pymon.config, since that's what it's really related to. 2006.05.01 * Set a 'cfg' attribute on pymonsvc in pymon.tac for application configuration. * In engines, passed rootService.cfg to factory.makeMonitor(). * In monitors, make*Monnitor() now also takes a config object as a parameter. * Added monitors.AbstractFactory.configureMonitor() which sets configuration attributes and returns the monitored that was created. * Added the missing peers section to the main section in schema.xml * Changed the lib directory to pymon so that testing without installation was easier. * Moved config-oriented utilities out of utils and put them in config. * Removed all unnecessary reference to pymon.config.cfg and instead used the value as set in the .tac file. * Moved logger contents into utils. * Moved server callbacks out of utils and into servers. * Disabled refresh config for now... until it's more useful. * Commented out History and workflow, as these are not currently being used. 2006.04.30 * Started work on distributed pymon. This included adding a JSON publisher to pymon.servers, a peer checker to pymon.servers, a publish function (incomplete) to pymon.utils, a peer checking function to pymon.utils, and then the necessary configuration directives to etc/pymon.conf and etc/schema.xml. * This requires a new dependency: simplejson. * Started giving pymon.engines an overhaul. * Updated the new page on the sf.net site to reflect the latest work in branch on distributed pymon. 2006.04.10 * Updated the news and menu items on the sf.net site. 2006.03.06 * Started working on some component tests in sandbox/oubiwann/components. 2006.03.02 * Added code for setting configuration in the grammar at a higher level (for now, from at least the parser level). * Grammar() has moved out of the sandbox and into it's own module at pymon.grammar.Grammar(). * shellparser.ShellParser() has moved out of the sandbox and into pymon.parser.Shell(). 2006.03.01 * Added support for "nodes" (hosts) to pymon shell grammar. * Finished the support for services and added an initial help stub to the grammar. 2006.02.28 * Updated the DEPENDENCIES to use pyparsing 1.4.1. * Renewed work on pymon shell. * Got new grammar working for services. 2006.02.27 * Created an admin directory and moved all the shell scripts in there. * Added run.sh and build_and_run.sh. * Removed the registry import from application. * Removed unnecessary references import from utils and substituted with config.cfg. * Moved the logger out of utils and into its own logger module. * Cleaned up more pymon code. * Started adding support for twisted.trial. 2006.02.23 * Added system exit numbers to sys.exit() in presetup.py. * Consolidated tests and removed old files. * Updated test suite runner. * Removed another reference to config in the globalRegistry (in pymon.registry). * Renamed svnstat.sh to stat.sh. * Added commit.sh script. 2005.12.31 * Added exarkun's slides and code from his pycon2004 talk on migrating running twisted applications to newer versions without stopping the application. 2005.12.26 * Fixed the sentIt() bug in client.http (it was sending even when notifications were disabled). * Fixed some log message calls in pymon.monitors. * Changed the page URL in pymon.monitors.HttpStatusMonitor from http://%s/ to http://%s. 2005.12.25 * Had to put the adytum support modules install back in the DEPENDENCIES since it's needed by presetup.py for as long as there is a dependency that can't be downloaded and installed using setuptools (most of them now). * Replaced the globalReg code with a config import in pymon.servers. * Added a quick hack to temporarily fix the error we were getting when sending some failed messages (with more than one entry in "args"). * Added support to schema.xml for disabling all noticications and put the necessary check in pymon.clients.base. * Added a pkg_resource.require to presetup.py so that we can explicitly tell it which Adytum-PyMonitor egg version to use duing the install. With updates to that package (version number increments), we will need to manually update this line in presetup.py as well. * Updated etc/example-pymon.conf with * Updated TODO. * Added pkg_resource.require to postsetup.py to resolve namespace issues. 2005.12.24 * Put all of the globalRegistry setup into pymon.registry (and out of pymon.tac). * Started replacing references of globalRegistry.config with config.cfg. * Replaced all occurences of twisted.python.log with a standard library logger instance. * Updated the TODO. * Updated the news items, features, and future on the website. * Added a new screenshot. * Incremented version number in anticipation of release. * Renamed the main page in the web UI from home.html to main.html and updated pages.py accordingly. * Added release-candidate-generating scripts. * Unified the tarball scripts. * Added an error handler to pymon.monitors.HTTPStatusMonitor for TimeoutError. * Fixed except block on globalRegistry setup. * Started giving each monitor factory a standard __repr__. * Added a bunch of documentation placeholders and updated the release script. * Restructured the manner in which a NullClient is instantiated. * Added an extra except in pymon.monitors.MonitorMixin.__call__() to check for missing configs. * Updated etc/schema.xml to provide failed thresholds for HTTP checks. 2005.12.23 * Fixed the connection-failed messages (typo in the schema.xml). * Added CSS style for "failed". * Redefined the ping threshold defaults such that 1-25 return is "error" and 0 return is "failed". * Redefined state numbers to be more easily extended in the future. * Added new states: maintenance and disabled. * Added missing 'failed' updates in clients.rules. * Added MochiKit in anticipation of dynamically sorting the tables in the pymon web UI. * Wrote a utils.refreshConfig() function that checks for changes in the config file, and if it finds them, restarts via daemontools. * Added support for dynamic, in-process updates of service check and default service check configurations. * Fixed the problem with disabled services. * Added suport for virtual host monster in the Nevow web admin. * Added info on setting pymon up with Apache virtual hosts. * Enabled checks for maintenance windows on indiviidual services. * Added javascript static directory. * Added styles for new states. * Added javascript/sorted_tables.js for sorting the rows of services in the web UI. * Edited the states html files to use the javascript and provide ordered tables. 2005.12.22 * Trying to fix the import issues with setup.py by calling presetup.py prior to importing ez_setup. 2005.12.20 * Fixed some issues with setup.py using os.system. It's now using subprocess.call, and is working well and predictably. * Added a new directive to web: doc-root. * Fixed pymon.ui.web.pages to use absolute path names to files. * Updated TODO and README. * Now copying 'service' to PREFIX in postsetup.py. * Fixed relative path issues with ui.web.pages. * Added notification cut-off and reorganized the base notification list to fall under the more general "notifications". * Updated utils.getMailList() to use the new scheme. * Updated TODO with feedback from the maillist. * Added some sandbox code exploring service flapping and how to encode flapping. 2005.12.19 * Fixed the main management screen and prettied up the status screens. * Added a new secondary stylesheet to be used by the status screens. * Updated the screenshots. * Commented out the linking in postsetup.py and just do a direct copy of the bin files. This needs to be fixed. * Updated the PyAdytum release in DEPENDENCIES. * Deleted etc/pymon.conf. * Updated instructions in INSTALL and README. * Fixed the black on green of the top menu to be white on green on the status web screens. * Updated etc/example-pymon.conf to match the recent schema changes for the backups section. * Fixed postsetup.py to chmod the scripts as well as copy the web material to the appropriate location. * Renamed bin/pymon to bin/pymond and updated the README, setup.py, and postsetup.py to reflect this change. * Added a try/except for removing old binaries in PREFIX/bin during post setup. * Added support for organization entry in config schema, State data structure, ClientMixin, and web ui. * Added notes in TODO and application.State() about taking the data structure out of hardcode and putting it in config. * Added notes about setuptools issues during installs. * Added a delay to presetup.py when installing files in the hopes of eliminating to weird errors (I think some files aren't getting written to quickly enough). * Added dev and regular tarball/release scripts. * Added a Twisted version check in setup.py. * Changed file write mode from 'w' to 'w+' in postsetup.py. * Incremented the version. 2005.12.18 * Updated web content. * Fixed a bug in utils.getMailList where a global data structure was getting appended to instead of a copy of the data structure. * Made the static/web/states.html template usable in Nevow (fixed some unclosed HTML tags). * Added test render and data methods to pymon.ui.web.pages.StatesPage that pull data from each monitor's current state. * Fixed pymon.engines to that the monitor factories were added to the state machine instead of the abstract factory instances (which was useless and a mistake). * Added the appropriate nevow namespace attributes in static/web/states.html in order to view the state data as HTML. * Changed configuration schema for backups to include state directory. * Changed application.State() to accept the uid of a monnitor during initialization. * Exapnded logging in the state machinery. * State is now preserved across pymon restarts for each individual monitor. * Fixed the HTTP status checks return code problem -- it was being returned as a string instead of an integer, and thus wasn't matching anything in the list of integer return codes, failing all the threshold tests. * Made further refinedments on states and statesdetail templates as well as CSS modifications. * Added missing VERSION file. 2005.12.17 * I Couldn't get the includes to work right for the ZConfig files, so I put all the schema files togheter in one schema. * To circumvent bootstrapping issues during install, the datatypes used in pymon's ZConfiguration are going to be called from adytum libraries, a dependency that will need to be installed prior to running pymon's setup.py. * The adytum libraries that have been a part of the working dreictory will now be separated out. * Updated the setup.py to reflect the changes in the library structure. * Updated etc/schema.xml to use the new adytum.config.zconfig types/validators. * Updated the DEPENDENCIES to download the latest adytum/pymon tarball. * Changed the order of execution for code in presetup.py. * Updated presetup.py to create the required directories on the files system. * Moved all the schema files but etc/schema.xml into etc/old. * Re-enabled setup.py. * Organized bin/pymon and bin/pymon.tac better. * Added a bunch of code to postsetup.py and added a call to it in setup.py. * Added Nevow and Phillip Eby's protocols and dispatch to DEPENDENCIES. * Removed old lib/utilities file, as it was replaced by lib/util. * Edited engines, monitors, servers, application, utils, and clients.rules to use the ZConfig API. * Updated schema.xml and example conf files with the missing "agents" section. * Fixed status default setting bug in clients.base. * Cleaned up lib/config.py. 2005.12.16 * Wrote a utility function pyInstall() in presetup.py that downloads and installs pymon dependencies. * Changed DEPENDENCIES to a useful file to be used during installation for downloading missing software. It's now a python data structure that gets eval'ed in presetup.py. * Renamed the "conf" dir to "etc". * Updated the INSTALL instructions. 2005.12.15 * Created pre- and postsetup.py files for getting around the setuptools sandbox. 2005.11.14 * Updated the conf/example-pymon.conf and conf/schema.xml with the code developed in the tests. * Reorganized the service configuration nesting. * Made use of the "extends" attribute in the schema and most of the schema redundancies. * Split schemas (ZConfig definitions) up into separate files for ease of development and maintenance; each monitor will have its own schema file, and the monitors will be grouped together in another services schema file. * Added ZConfig loaders and configuration instance to pymon config. * Setup bin/pymon to import cfg from pymon.config. 2005.11.13 * Added date range custom datatype. * Added configuration and tests for scheduled outages per service. * Filled out the rangedValues() datatype/validator in pymon.zconfig so that it can parse things such as "10-21", "10, 12, 14", and "10, 24, 30, 44-49". * Added configuration scheme for HTTP status checks. * Added example configuration for HTTP status checks as well as doctests for the configuration. 2005.11.12 * In the great debacle of lib rearrangement, the zconfig.py file was deleted with no existing copy remaining anyway. I attempted to reconstruct it from scratch. * Added support for default email notification list withing the general configuration section and overrides in ping-defaults as well as ping. * Added another set of tests for configuration (for pings). 2005.11.07 * Started working on an executable pymon file, such that the entire pymon application could be run from a python egg. * Added more schemas to conf/test for integration into the ZConfig for pymon. 2005.11.06 * Nope. It didn't work. Had to merge lib/app/pymon from previous revision. * Tried moving pymon out of app. * That *did* work. pymon is now a top-level package with it's own namespace. * Re-did all the edits to the python files to reflect the namespace changes. 2005.11.05 * Changed setup.py so that it wouldn't violate the security/sandbox issues of EasyInstall (commented out the chmod/chown). * Began converting to SConfig configuration by adding a schema.xml and example-pymon.conf to the conf dir. * Created a conf/tests directory for this process and for developer reference. * Created a conf/old directory for previous configuration files. * Added custom validators to pymon for zconfig (these are in adytum.app.pymon.zconfig). * Made changes to the source code in order to put pymon in its own name space. * Tried moving the pymon directory... don't think it worked. 2005.06.22 * Sandbox: added some code for testing alternative configruations. * Sandbox: added an Ini -> dic parser file. * Sandbox: added mysql.tac protype for making mysql connections * Modified the FTP Monitor class by setting self.protocol to NullClient() in clientConnectionFailed 2005.06.21 * Added a new state in the config file called "failed" with a numerical value of 5. * Added a failed section to the defaults section for HTTP. * Added an elif clause to clients.rules.ThresholdRules to set the local status. * Created a new class in clients.base called NullClient that subclasses from twisted.internet.protocol.Protocol and ClientMixin. * Modified the HTTP Monitor class by adding clientConnectionRefused that sets self.protocol to NullClient() and performs required calls. 2005.06.20 * Moved state defaults out of their tempary home in pymon.clients.ping and into where they belong: pymon.application.State.__init__(). * Added utils.isInList() function for checking thresholds that aren't ranges but lists of expected values. * Created pymon.clients.base.ThresholdRules which is instantiated by ClientMixin and used by each Client class during connectionLost (when data is returned). * Moved get*Threshold() methods out of ClientMixin and put them in ThresholdRules. * Removed status checking from clients.ping. * Added more state info to clients.ping. * Removed email send from clients.ping and put it into ThresholdRules. * Moved state update code from clients.ping into clients.base.ClientMixin, so that everyone can use it. * Split ThresholdRules into pymon.clients.rules. * Copied Ravi's ftp prototype tac into my sandbox and made some adjustments. * Added connectionMade() (and thus enabled rules processing) for pymon.clients.http.HttpStatusClient. * Finished HTTP status monitor. * Added a prototype for HTTP page text check to my sandbox. * Removed oubiwann addresses from config file. * Added exception handling for pymon.application.State.backup(). 2005.06.18 * Updated the internal pymon management web page for pymon (page actually loads when you go to localhost:8080 after starting pymon). * Added a missing spacer to the image dir. * Began the process of removing the constants file (added vars to setup.py and created conf/tempate-pymon.xml). * Sandbox: added test code for HTTP status. * Updated monitors to support HTTP status checks. * Updated clients.http to support HTTP status checks (still need to do threshold checks and email alerts). * Added line to build.sh to remove /usr/local/pymon. 2005.06.14 * Added script for updating all svn repos in lib. * Made the build.sh script more x-platform by getting the python prefix path (I was just being selfish and using the Mac OS X path). * Removed unused 'patterns' dir from setup.py. 2005.06.13 * Manually added ui.web.pages that the merge didn't do for some reason. * Site update: added a news item about the merge and hinted at upcoming alpha release. 2005.06.11 * Merged pattern refactor branch back into trunk. * Manually added some files that the merge didn't do for some reason. 2005.06.09 * Stubbed out some examples in the pymon.engines files. * Added a little more comment about engines in the .tac file. * Cleaned up the formatting of the .tac file. * Added another variable to the global names in the example-pymon.xml. * Removed ClientMixin config settings and put them in the factory __ini__() method (monitors.MonitorMixin) where they belong. * Enabled email alerts. * Did more work on getting http status checks running. * Added placeholders for dns, mysql, ftp and smtp clients. 2005.06.08 * Moved the servers out of the .tac file and put them in a newly added pymon.servers class file. * Moved class-level properties in ping.ClientMixin to properties set during __init__. * Added a connectionMade() method to ping.PingClient that calls super classes' connectionMade()/__init__() methods. * Bug fix: fixed bad class syntax in http.*. * Bug fix: monitors.MonitorMixin wasn't being called in some classes and was being called wrong in another one (missing part of the signature). * Removed some old bin dir files. * Removed unsed lib files. * Due to an oversight, the ui.web.pages file never got added to subversion. Added it. * Added build and test scripts to ensure that oversights like that mentioned above don't happen again. 2005.06.07 * Moved monitor (twisted factory) creation out of the main tac file and into an "engines" file, since the way the factories are created will affect the application as a whole, and for different tunings, different ways of creating the factories will be used. * Started to stub out the code for HTTP status checks and HTTP text checks. 2005.06.05 * Started making changes to the config file for DNS dig checks. 2005.06.04 * Created an agents.py file for the perspective broker process server. * Added an agents section to the example-pymon.xml system section. * Added a local agent ProcessServer to the pymon.tac file for executing local binaries. * Got the new pymon.tac running with the refactored ping monitor/factory and client code (subclasses of pb.PBClientFactory and pb.Broker). * Changes to the example-pymon.xml config file. 2005.05.30 * Sandbox: added a test for local or remote process execution via twisted.spread.pb (perspective broker). * Sandbox: cleaned up code in previous/other *.tac files. * Sandbox: fixed factory code so that it is created in the right place (factories are state machines and don't get instantiated at each run). * Fixed setup.py file to point to the example-pymon.* files. * Sandbox: more fixes for some of the test code. * Sandbox: added state machine demo for pb client factory. 2005.05.29 * Sandbox: added a test for getting HTTP status information from a server. * Sandbox: added a test for running a process and returning output through a local TCP client/server setup. 2005.05.28 * Started making changes to all the code that needs access to the unique id of a service. * Added group and user id elements to the system section of the XML config file. * Changed the .tac file so that uses these ids to set the uid/gid of the twistd process. 2005.05.27 * Bug fix: example-pymon.xml had a bug: "enabled" was at the same level as "services", and since thee names were different, it was treating everything at that level like a dictionary instead of a list. I therefore had to take the "enabled" tag and subtags out of "services" and put them in their own level. * Changed the .tac file to reflect the above-mentioned change in XML/configuration. * Generalized service component nomenclature in configuration XML file (renamed "hosts" to "entires" and "host" to "entry"). * Changed example-pymon.xml to reflect the use of URIs for the new unique identification scheme for services. * Added missing test.py test harness to branch. 2005.05.23 * Added global registry test code to the sandbox. * Added missing support for top-level module names in the test harness test.py. * Added pymon.registry and doctests to code base. * In pymon.application, added a State class (dict subclass) and a History class that is a subclass of both Queue and object. There is dual inheritance because you cannot create and/or set arbitrary attributes on Queue objects. * Added global varibale names to the configuration file to ease code maintenance where calls are made to the globalRegistry. * Added a backup service for writing state data to disk. * Added configuration for backups to config/pymon.xml. * Added support to application.State for writing backup data to disk. * Added functionality to application.State.__init__() that checks for the state data backup/restore file on disk and if it exists, loads the state data and deletes the file. * Wrote doctests for application.State, included testing backup() and restore(). * Moved monitors back into the main lib, out of the plugins dir. * Created monitors.AbstractFactory. * Created monitors.PingMonitor. * Added support for loading sample configuration into the test harness so that modules that require configuration information can be tested. * Removed the runMonitor() from pymon.tac. * Updated doctests in application.State. 2005.05.22 * Added initial support for Nevow and now have port 8080 open on pymon, displaying a test page. * Created a static directory in pymon root, with a web subdirectory to be used by Nevow for html templates, styles, etc. * Added static subdirectories to pymon.ui.web.Root for accessing images, icons, styles, etc. * Copied contrib/Zope/ZPT files to static web for use in Nevow. These are still ZPT and haven't been converted yet. This will have to wait until the refactor branch is merged, since it will require the new state machine. * Created appropriate Nevow page classes for main web ui page and sub pages. * Created a basic site.css file. * Added initial support for Nevow and now have port 8080 open on pymon, displaying a test page. * Created a static directory in pymon root, with a web subdirectory to be used by Nevow for html templates, styles, etc. * Added static subdirectories to pymon.ui.web.Root for accessing images, icons, styles, etc. * Copied contrib/Zope/ZPT files to static web for use in Nevow. These are still ZPT and haven't been converted yet. This will have to wait until the refactor branch is merged, since it will require the new state machine. * Created appropriate Nevow page classes for main web ui page and sub pages. * Created a basic site.css file. * Merged latest trunk changes back into the refactor branch. * Moved the trunk additions of email notification into the client code and out of the protocol code. * Site update: Updated the news on the pymon.sf.net website. * Updated the css and home.html of the pMI with the look and feel of the pymon.sf.net site. REALLY needs to be cleaned up. And prepared for Nevow. * Added a pymon favoicon.ico to the pMI. 2005.05.20 * Created a MANIFEST file for building source distros. * Added dependancy checks in setup.py. * Commented out entire pymon.storage.sql file. * Ran into problems with api.py files, so stopped importing them for now. * Added temp import fix to pymon.tac. * Added system section for mail notifications to pymon.ini. * Added pymon.message.py for email notifications. * Added support for emailing messages in protocols.PyMonPing. * Updated installation instructions. 2005.05.19 * Created a MANIFEST file for building source distros. * Added dependancy checks in setup.py. * Commented out entire pymon.storage.sql file. * Ran into problems with api.py files, so stopped importing them for now. * Added temp import fix to pymon.tac. * Added system section for mail notifications to pymon.ini. * Added pymon.message.py for email notifications. * Added support for emailing messages in protocols.PyMonPing. * Updated installation instructions. 2005.05.15 * Changed setup.py to reflect the new location of the singleton class in the adytum library. * Modified the db configuration in the XML file. 2005.05.09 * Sandbox: added a true .tac app + service to the reactor sandbox. * Sandbox: added a workflow .tac to the reactor sandbox. * Sandbox: added a Factory-driven .tac to the reactor sandbox (currently only a copy with no Factory code in it). * Made changes to pymon.tac based on the reactor tests. * Updated the setup.py to install adytum.utilities. * Bug: this has been mentioned on the mail list, but I thought it should go in here too: there is currently a bug in the HTTPClient code somewhere. The first call to a remote webserver successfully connects, but all others seem to fail due to timeout. This really needs to be addressed. * Bug: when pymon.tac is run with HTTPClient enabled, shutdown (^C) takes FOREVER. It often has to be manually killed. 2005.05.08 * Added a PyMonState instantiation in pymon.workflow as that which should be imported from the module. * Added a placeholder for the license. * Fixed the descriptions in pymon.workflow. * Changed the wf instance name from pywf to state_wf, to allow for potential future pymon workflows that don't necessarily apply to state. * Reorganized workflow. * Site update: added license statement to the main page. * Pasted license content into placeholder, with a note about exceptions to the license. * Sandbox: added some code for doing experiments on the twisted reactor. 2005.05.07 * Added support for workflow with the adytum.workflow module (based on the itools workflow module). * Added support for python egg distribution. * Added additioanl details to setup.py. * Site update: added news item about workflow. * Implemented a first draft of a pymon workflow using the new supporting library for workflow (specifically, the Singleton version). 2005.05.01 * Pulled protocols.isInRange out and put it in pymon.utilities. * Started making changes to plugins.monnitors to use the new config objects. * Finished putting the stuff from pymon.ini into pymon.xml. * Added services.enabled to pymon.xml. 2005.04.17 * Moved lib/app/pymon/monnitors.py to plugins/monitors.py. * Added more values to pymon.constants. * Changed setup.py to pull values in form lib/app/pymon/constants.py. * Modified the INSTALL instructions. * Added new XML/Ini-file configuration support to pymon.config. * Stubbed pymon.config.PyMonIniConfig() * Added imports to pymon.api so that all imports in all the code can now go through this file. * Changed bin/pymon.tac to use the api imports. * Added pymon.utilities.getService() to acquire the appropriate storage service based on a passed configuration value. * Changed bin/pymon.tac to use pymon.utilities.getService(). * Removed the sql.updateDatabase() dependancy from pymon.protocols and instead moved it into pymon.utilities. Added XXX notes for future changes regarding this. * Added UI interface placeholder in the libs. * Fixed the updateDatabase() call in protocols.PyMonPing. * Replaced the shell script service/run with a python script that is able to get the app configs from adytum.app.pymon.constants; updated the INSTALL file to indicate one no longer needs to edit the service/run script. 2005.04.12 * sandbox: Added ZEO support to wxZODBVieer. There is now a menu option to "Open ZEO Instance... Ctrl-U". * sandbox: Added ZEO support to zodbschema.py. * sandbox: Added runzeo, zeoconfig, and zpasswd. 2005.04.11 * sandbox: Added zodb schema creation script as well as the ZODB viewer script from ASPN. 2005.04.10 * sandbox: Working more with the config API. * sandbox: More experimentation with dictionary configuration. May set aside the config API for now... 2005.04.07 * Updated the "Future" section of the web site. 2005.04.06 * sandbox: Added sandbox/config_api for experimenting with configuation adaptors. * sandbox: Added a bunch of files for experimenting with adaptation. * sandbox: Added an interface stub for IConfig. * Updated web site news. * Updated menus on the web site to point to trunk instead of the old twisted branch. * Updated web site to mention data storage options. * Updated old news about maillist. * sandbox: added a place for Ravi to experiment with pyparsing and creating an interactive shell for pymon. 2005.03.31 * Moved pymon.storage.sqlobject to pymon.storage.sql to avoid name space collisions with the SQLObject package. 2005.03.30 * Added storage and schema placeholders for the data API. * Added an api.py file for consistancy of interface for developers and users of pymon. * Removed some old files that are no longer useful. * Added directories for future interfaces and adaptors. These things have come up in mail list discussions, and will most likely be used. Preferably sooner than later. * Moved updateDatabase() from pymon.datamanager to where it should be, in a data store specific file: pymon.storage.sqlobject. * Updated pymon.protocols to refer to the new location of updateDatabase. 2005.03.29 * Fixed a bug in pymon.protocols. PyMonHTTPClientFactory.clientConnectionLost() had the wrong sig. * Added Exception handling to the http header parser. * Started debugging a problem with PyMonHTTPClientFactory. * Changed PyMonHTTPClient to parse http response instead of PyMonHTTPClientFactory * Changed PyMonHTTPClient to use cfg as the initialization param * Changed PyMonHTTPClient to make a list out of http status codes from the dictionary * Put the extended call syntax back in pymon.tac, for the sake of code elegance. * Enforced int() on the port number in pymon.monitors.getHTTPMonitors(). 2005.03.27 * Changed reactor.connectTCP method. * Added setHTTPConfigs method to __init__. * Changed PyMonHTTPClientFactory to use protocol.ClientFactory. 2005.03.10 * Updated site news. * Updated site menu links. 2005.03.09 * Updated the setup.py script to install the adytum.net.http package. 2005.03.08 * Rearranged the configuration ini files and python classes. * Wrote a HTTP configuration and monitor. * Started writing a protocol to handle HTTP status data for HTTP monitor. 2004.10.14 * Uploaded new site look and feel, logo, and menus to sf.net. * Updated the project details on sf.net. 2004.10.13 * Allan Bailey gave his project space on sourceforge.net. * Archived original site into svn for the sake of history. * Created new logo for sf.net site. 2004.10.11 * Updated pymon.tac with comments. * Moved the old app.pymon.monitor file. * Created a new app.pymon.monitor for the twisted version of pymon. * Renamed app.pymon.monitor to app.pymon.monitors. * Removed all the stuff from pymon.tac that was added to app.pymon.monitors. * Setup app.pymon.protocols.PyMonPing() to set a data dict containing current service status info. * Added more entries to the default ping configurations in config.ini. * Put data inserting and updating capabilities in app.pymon.protocols.PyMonPing for now, but I will take this out as soon as it's been generalized. Data inserts and updates are working like a charm, and previous/current states are being accurately reported. * Separating the data insert/update code was actually very easy, so I went ahead and did it (app.pymon.datamanager). However, I still need to add last* timestamps. * Added logic for "Recovering" state, tested and seems to be working properly... better, in fact, than the PyMonitor that's in production right now. * Added comments to .ini file. * Began adding support for local process checks. * Updated README with more notes about adding monitors. 2004.10.10 * Cleaned up the .tac file code a little, as well as the protocols. * Added a data dir. * Added database setup configuration to .ini * Reworked adytum.app.pymon.datamodel, including the addition of doctests. Doctests were crazy... I wanted to use a test db if the doctest was running the code, and use the real database otherwise. Checking for __name__ didn't work, since doctest re-imports the module, so I had to do some checks against the stack. I don't know much about that stuff, so the check is very fragile. 2004.10.09 * Removed empty dirs. * Added conf, contrib dirs. * Added place-holder for twisted deamon in bin dir. * Added protocols and data model from sandbox. * Added Zope-specific files in contrib dir. * Added setup.py file. * Created a daemontools service direcctory, and removed log dir, since we will be using stdout, letting daemontools perform the logging. * Added INSTALL and DEPENDANCIES files. * Updated README. * Began creating a configuration methodology. * Added a constants file in adytum.app.pymon. * Added doctests for first ping methods in config. * Completely rewrote adytum.net.ping by deleting everything that was in there and writing a Parser class for ping output. * Added tons mode doc tests that helped my fing bugs in the ping.Parser class. * Updated protocols and tac file with fixes and improvements. 2004.10.08 * Have begun reorganization of packages, modules, and library files for use in the next version of PyMonitor. * Moved monitoring-specific code into lib/app/pymon directory and renamed files to conform with the adytum conventions. * Moved general PyMonitor files into the adytum.os and adytum.net packages. * Re-organized top-level files. * Updated site content -- news and main page. 2004.05.13 * fixed the issue with last check/ok/warn/err dates only reporting the last check time * removed the deepcopy and used copy instead (was getting recursion errors) 2004.05.12 * created pickle-specific methods and renamed methods that are used for dealing with pickle files * edited the svn commit shell script to clear out pyc files and remove the tmp files * the _getLastRun method made a call to loadRunData which called _loadPickleFile, but then didn't return anything. Fixing this fixed all the issues I was having with save state info. 2004.05.11 * added support for giving friendly(er) names to data files * pulled out references to remote_* in Internet/Site.py * successfully tested site monitoring with Internet/Site * added a 'close' connection to the httpconn so that I could pickle the data (can't pickle a network connection) 2004.05.09 * moved subject template for email notifications out of System/Monitoring.py and into Monitor.py so that each service can customize it * The problem with remote process monitoring notifications was due to the fact that two rounds were being done at the same time: OK -> ERROR (round 1) + ERROR -> ERROR (round two) = no change between final state of round 1 and 2 and thus no message got sent. * Fixed a bug in process_monitor script: two calls to processMonitor for remote host services monitoring * Set the external storage back to binary pickles * Created a bunch of methods for accessing summary data and creating files that contain summary data. * Correcteed the messages that were getting saved to summary data * Changed the sort order for the summary data * Moved System/Hosts to Internet/Ping * Added Internet/Site and began stubbing out code for site monitoring. 2004.05.02 * moved email message templates into *Monitor methods so they could be easily tailored to each service being monitored * added message for ping monitoring * moved *Monitor methods out of Monitoring class and into Monitor class * moved Monitoring class into System package 2004.04.28 * added minimal support for ping-monitoring hosts * separated more code into general monitoring and type of monitoring * added a 'debug' property to Monitor.py and System/Host.py and removed print statements that were cluttering output * fixed database naming for ping monitoring * fixed a bug (type) in database naming for service monitorings without a remote host set * removed the binary parameter from the read/write methods and created a new property 'binary_pickle' that is checked before reading or writing pickles files