Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

file 1412 lines (1161 sloc) 56.318 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412
2012.01.05

* Started removing ZConfig code.
* Added new config classes and started working on a new config API.
* Started organizing config API methods by "main" and "monitors" (service
check).
* Moved some methods into the new ConfigMain class and changed their
implementations to use the loaded YAML data.
* Added unit tests for the first few methods that got moved into ConfigMain.
* Stubbed out some test cases for other classes.
* Removed the old ZConfig files from etc (kept the schema.xml file for
references).
* Added missing config example.

2012.01.04

* Added app config info to .yaml file.
* Added service monitoring config info to the services .yaml file.
* Added testing utility module and associated unit tests.
* Renamed pymon.utils.__init__ to pymon.utils.base.
* Converted utils.base doc tests to unit tests.

2011.12.15

* Added PyYAML as a dependency.
* Added .yaml files that will serve as the basis for the new configuration
system.

2011.12.14

* Added txmongo in third-party directory.
* Added a make target for installing txmongo.
* Removed storm, postgres, mysql, and sqlite from pymon.storage.api.
* Removed pymon.storage.sql module.
* Added txmongo to pymon.storage.api.
* Commented out code in model and started replacing it with JSON data
structures.
* Added placeholder subpackage for storage backends.
* Cleaned out old SQL references from storage api test case module.

2011.12.13

* Changed the use of simplejson to json and updated the dep.
* Added meta.requirements and updated setup.py to use them.
* Added a target for pushing tags.
* Added a .gitignore file.
* Moved plugins back into pymon dir.
* Fixed up setup.py to behave properly.
* Added a pymon.scripts subpackage.
* Added a manifest file for packaging etc up with the sdist.
* Added a testing subpackage and updated the check target to use it.
* Updated the deps.
* Added utility functions to pymon.config.
* Updated getConfigFiles to be .egg-friendly.

2011.12.12

* Added a Makefile with push and pull targets for various git repos.
* Added a slew of new targets to the makefile and cleaned up the existing ones.
* Added a meta file to the library code with version info and removed the old
VERSION file and updated the setup.py to pull from the meta file..
* Removed the admin files, since they have been replaced by make targets or
have been moved to other projects.
* Tweaked the MSG output in the Makefile.
* Created a contrib dir and moved the daemontools into it.
* Moved the README to the main dir.
* Moved the tests directory into the pymon lib.
* Removed placeholder "data" and "state" directories.
* Removed the unnecessary dir depth in static.
* Updated README and moved TODO to docs.
* Further improvements to the README.
* Fixed up the rst formatting of the INSTALL file.
* Fixed spacing in files.

2008.04.23

* Updated worflow copyright.

2008.02.23

* Fixed white space in grammar.

2008.02.18

* Updated news script to post news to launchpad.
* Updated favicon.
* Updated logo.
* Added square logo.

2008.02.15

* Updated LICENSE.

2008.01.30

* Moved rules processing into a dedicated method.
* Fixed non-standard variable names in pymon.services.
* Updated TODO.

2008.01.29

* Added comment to listener.

2008.01.28

* Updated TODO with plan for connectionless monitors as well as code-cleanup
thoughts.

2008.01.27

* Fixed the listener (server) to return text data to the client.
* Removed useless __init__ method from listern client.
* Set pymon to attempt to pull the "from" address from the pymon config file
(for mail messages sent from the listener).
* Added a process client for calling command line executables within pymon (not
as part of a service check).
* Removed old and now unneeded RemoteMail class.
* Improved the process server with call/errbacks and a client message.
* Plugged messaging server into services + pymond.
* Cleaned up listener imports.
* Added messaging rules to worflow.rules.
* Added dispatches for all Leave, Transition and Enter workflow states,
regardless of and in addition to type name and updated unit tests for this..
* Added config options for notification types.
* Started work on the workflow code that will send messages to the listener.
* Started work on the messaging rules code that will generate the messages to
send to the listener.
* Started working on MessageFactory.
* Filled in some docstrings.
* Changed the ClientMixin connection-oriented names so as not to be confusing
when used with connectionless monitoris (e.g., DNS or anything else that uses
UDP).
* Fixed some config references in messaging rules.
* Cleaned up a docstring.

2008.01.26

* Added a message module.
* Added code to listener.
* Removed old debugging code from pymon.config.
* Added an email formatter and removed the old (and useless) Email class.
* Added a twisted-based sendmail function.
* Updated Listener with a type checker for email.
* Added smtp options to pymon.conf.
* Created new message classes and registered them with pb so that the message
object can be passed over pb.

2008.01.25

* Cleaned up admin scripts and renamed site sync script.
* Updated TODO for work on URLS, services, and messasging.
* Stubbed out dirs and files for messaging work.
* Split old message utility into two messaging modules.
* Moved old, unnamed messaging class out of workflow.rules and into
messaging.email.
* Moved the agents module into its own package.
* Updated services module to use the new agents package.
* Adjusted local agent configuration and added a config for local messaging
agent.
* Moved pb-specific code from ping plugin into agents.local module.
* Changed the ping plugin to subclass agents.local client and monitor.
* Updated TODO with plan for creating listener and first messenging client.

2008.01.17

* Added scripts for publishing news content.

2008.01.16

* Added NEWS_SUBMISSIONS.txt for best practices with SF.net.
* Added missing link to DEPENDENCIES.
* Updated TODO.
* Cleaned up some white space in the index.shtml page.
* Added google analytics to template.
* Started revamping INSTALL.
* Copied index.shtml to archives.shtml for planned organization of site news.
* Lots of content updates, including a news archive sections and three news
items (1 in December, 2 for January so far).
* Fixed the bad link in the site header.
* Updated main menu with dev section.
* Added support for subheadings to pageparts cgi.
* Made sourceforge_website and sourceforge_website/cgi-bin packages for content
scripting convenience.
* Fixed footer formatting bug.
* Added latest news date functions.
* Removed string module imports and use.

2008.01.12

* Updated DEPENDENCIES.
* Created third-party directory for source files.

2008.01.11

* Fixed utils.isInList() and added more unit tests.
* Added getSimplePlural() to utils and added some unit tests.
* Moved discoverServices code into utils.scanner and changed discoverServices
to just call that.
* Removed old pymond and setup pymon.tac to be run as an executable.
* Moved 'is in' functions out of workflow.rules and into utils, renamed them,
generalized and added unit tests.
* Put self.updateState() back where it belongs (in
monitors.BaseMonitor.__call__).
* Moved pymon.tac to pymond.
* Moving scripts around, trying to get perms stored in svn properly.
* Used svn propset to set the svn:executable property on pymond.
* Removed testing executable from bin.
* Updated the daemontools service run script to reflect new way of running the
pymon daemon.
* Updated TODO.
* Added a timeout to the ping_tcp defaults config as well as an attribute in
the TCPPingMonitor.
* Updated the connection logic in BaseMonitor.__call__.
* Added a custom ping factory to plugins.ping_tcp.monitor.
* Fixed assembleConfig() to work with config files that start with a new line.
* Set info logs in engines back to debug.
* Added missing deferred returns in tcp ping plugin monitor.
* Added a single ping client to tcp ping.
* Added missing data attr to monitor.
* Added missing arg to getPingReturn callback.
* Renamed and fixed recorded data.
* Fixed getPingReturn.

2008.01.10

* Moved maintenance window check into its own method, isMaintenance().
* Moved disabled check into its own method, isDisabled().
* Removed redundant checks in those two methods and put them into
_setNonCheckState().
* Added an isMaintenance check to the CheckConfig object that checks both the
service check default configuration as well as the specific check
configuration.
* Also added an isDisabled check to CheckConfig for the same convenience.
* Updated SchemalessSection object to turn 'true' and 'false' strings into
appropriate boolean values.
* Copied the parse date function from utils.zconfig to utils and made some
minor changes.
* Fixed the logic in checkForMaintenanceWindow().
* Moved monnitors.BaseMonitor state updating into its own method.
* Added a parameter to BaseMonitor.__call__ (e.g., "connect=True") that allows
subclasses to determine if Subclass() will call connectTCP or not.
* Fixed the discoverServices script to coerce the types of the passed batch
size and timeout parameters.
* Removed unused imports from discoverServices.
* Cleaned up imports and vars in worflow.app.
* Cleaned up imports in worflow.service.
* Removed unused import in utils.

2008.01.08

* Added best practices/advice to usage in discoverServices script.
* Coped the ping plugin as the basis for the new ping_tcp plugin.
* Removed TCPPingClient from plugins.ping.client.
* Removed LocalAgentPingClient from plugins.ping_tcp.client.
* Started hacking on TCPPingMonitor and TCPPingClient.
* Added the ability to pass both args and kwds to BaseMonitor.__call__.
* Fixed up initial ping_tcp config options.

2008.01.01

* More option edits for discoverServices script.
* Finished up the config-saving part of discoverServices.

2007.12.31

* Updated the micro version several times, based on the changes that were made
in the last few months; retroactively anotated ChangeLog at the points where a
micro version increment should have taken place. Current version reflects the
sum of those changes.
* Added another scanner to the sandbox for testing parameters, custom
schedulers, etc.
* Added optparse support to discoverServices.

2007.12.24

* Added bin/discoverServices script (requires NetCIDR package).

2007.12.22

* Copied the portscanner I wrote for Zenoss to my sandbox.
* Removed the old Twisted 1.3 support from the portscanner.
* Removed unused portscanner files.
* Replaced the use of DeferredSemaphore in the portscanner with the twisted
task cooperator.
* Renamed TCP ping client from PingClient to TCPPingClient.
* Updated storage.api.createTables to execute all the currently defined SQL
statments in storage.sql.

2007.12.17

* Added more unit tests for the storage api (and filled in the incomplete
ones).
* Fixed database creation code (imports).
* Filled in stub for checking for the presence of tables.
* Added code for getting the deferred store (first creating tables if they
don't exist).
* Filled in data model.
* Added missing init file.
* Added sorting to unit test, now that Thomas Herve has added order_by support
to the twisted storm wrapper.
* More data model tweaks.
* TODO update.

2007.12.16

* Removed old database code from storage module.
* Split up stormorm into separate modules: sql, model, and api.
* Filled in a long-awaited database setting in the configuration file.

2007.12.15

* Added the SQL CREATE statements for the tables as well as the storm schemas
for initial testing purposes.
* Added initial unit tests storm storage support.
* Updated ChangeLog and TODO.

2007.12.13

* Added more doctests to workflow.
* Identified the source of the invalid-transition bug in workflow.
* Added a worflow transition registry and related methods.
* Added more custom workflow exceptions.
* Fixed (known) workflow bugs.
* Added additional methods to workflow.service.ServiceState.
* Split up rules and messaging code.
* Set plugin.ping.client.LocalAgentPingClient to use the new workflow code.
* Lots of important changes/updates in TODO.
* Incremented the micro version number.

2007.12.12

* Added dispatch and noOp methods.
* Added a 'name' attribute to WorkflowState.

2007.12.11

* More notes about workflow (as well as other features).
* Workflow cleanup and bug fixes, of particular note, the unit tests are better
and the configuration code has been moved out of the base workflow module.

2007.12.09

* Cleaned up pymon.monitors.BaseMonitor (and affected code).
* Took some notes for starting on cleaning up current rules by integrating
workflow.
* Incremented the micro version number.

2007.12.04

* Fixed the bugs in the config assembly.
* Removed old config function.
* A few more application fixes (part of the new config refactor).
* Updated plugin configs with message defaults.
* Added a repr to the config classes.
* Cleaned up some whitespace.
* Added missing configuration directives.
* Added some error checking (try/excepts and addErrbacks).
* Updated the pb-based agent with a new required attribute.
* Added code for the new config that properly processes ranged values.
* Fixed a bug in rules.ThresholdRules.isIn() so that it now actually returns a
value.

2007.12.03

* Added a "resources" directory for none-code references.
* Added the new pymon.conf file.
* Added demo services configuration.

2007.11.30

* Updated news and TODO.

2007.11.29

* Fixed some bugs in the schemaless ZConfig wrapper.
* Fixed some old import statements.
* Fixed the agent-based ping monitor inheritance.
* Updated pymon.engines to use the new configuration.
* Added support for dispatching from a config file.

2007.11.27

* Moved all clients into plugins.
* Moved clients.rules into workflow (for now).
* Added missing zconfig function (copied from adytyum.config.zconfig).
* Added code for assembling configuration from spread-out and/or generated
config files.
* Updated TODO.
* Incremented the micro version number.

2007.11.26

* Moved most of the clients into their own plugins directories.
* Gave the pymon shell a name (MOS) and grouped related lib files into a new
subpackage by that name.
* Consolidated utility code into their own subpackage.

2007.11.25

* Updated the site content/news/links.
* Added a TCP ping tool to my sandbox that will soon be included in pymon
trunk, replacing the PB-based tool (which uses the command-line ping program).
* Removed unused function.
* Added a note about dispatching monitor factories with information from
plugins.
* Moved new PingClient out of pymon.clients.ping and into plugins.ping.client.
* Added a version of the sandbox pinger for use in pymon.

2007.11.24

* Did some work on configuration crap.
* Had to temporarily disable saving state due to pickle problems.
* Added an adaptor for the HTTP status monitor.
* Merged changes from Google project code.
* Cleaned up top-level dir.
* Removed support for setuptools.
* Added plugin directories.

2007.05.01

* Removed configuation-setting from .tac and put it in engines.
* Pulled config-agnostic code out of config and put it in utils.
* Pulled exceptions out of application and put them in their own file.
* Created an interfaces file.
* Made MonitorState an adaptor for monitors and IState.
* Changed config.cfg to be a wrapper class instance with custom pymon config
methods.
* Incremented version.

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

2001 - 2004: Historic Note:

* During this time period, I had created a series of UNIX shell scripts, which
were then ported to perl. After a few years of frustration, I ported them
again, but this time to python.
Something went wrong with that request. Please try again.