without going into the details - why don't you look at the config files of some of the existing network/system monitoring tools, and see how they did this? it might give you some ideas.
note that if your users are not python programmers, you might consider using a real config file, instead of a python-script-config-file ;) it's harder to implement - but it's easier to get non-programmers to edit the files when they look simpler, and when you can give them simple error messages (instead of them getting a python exception thrown at them every time they forget a comma). in the past i have used 'bigbrother' for monitoring a (small) network of unix servers - but there are many other similar systems available - check on freshmeat. --guy On Mon, 12 Feb 2007, Tracy R Reed wrote: > Date: Mon, 12 Feb 2007 03:07:56 -0800 > From: Tracy R Reed <[EMAIL PROTECTED]> > Reply-To: Linux Programming Study Group Discussion > <[email protected]> > To: [email protected] > Subject: inheritable configs > > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > > So I'm somewhat new to the OO thing and somewhat new to python and I am > writing this program to work with nagios. Basically there is a client > part that runs on all of my servers which reports load average, disk > usage, etc. etc. back to the server. The server then looks at these > values, compares them with what is expected, and tells nagios whether to > start paging or whatever. So if a filesystem is 90% full it's a warning > and 95% full is critical etc. I am trying to decide how to implement > configuration for this. I would like to have some default values which > are used if nothing in particular is specified. Sometimes on a really > huge filesystem which grows slowly maybe 99% is good enough for a > critical warning so we will specify that as a threshold instead of > letting it use the default. > > Here's the code as it stands so far: > > http://www.pastebin.ca/351709 > > So far just really basic. The config doesn't even work yet. I am > wondering how to dothis still. At first I was going to just create a > config.py file and import it and it would contain all of the values. It > seems that I need to store a hostname, service name, and pair of > threshold values. But I didn't want to have to search a list of lists > for the hostname of the server I am currently talking to. So I thought I > would use a dictionary. But then I get a dictionary of dictionaries > situation which is really hard to maintain because I find myself > becoming confused over where I need a brace, where I need a paren, where > I need a comma, etc: > > config = {"djutil01" : {"report_load" : (2,4), "report_disk": (90,95)}, > "djutil02" : {"report_load" : (2,4), "report_disk": (90,95)} > } > > This is intended for others to use eventually so maybe that's not such a > good idea. How about a list of lists? Same problem plus I have to search > through the list to find the one I need which seems like a pain. Maybe > there is a smarter OO way to do this? Seems like it would be nicer to be > able to refer to config parameters using actual names instead of > config[hostname][service][0] and so on. Maybe I could have some sort of > configuration objects which I create by reading in some sort of csv file: > > djutil01,report_load,2,4 > djutil01,report_disk,90,95 > djutil02,report_load,2,4 > djutil02,report_disk,90,95 > > etc. and then I can store each of those config objects in a dictionary > and make each of the config objects inherit from some sort of default? > Something like: > > class ServiceConfigDefault: > load_warning=2 > load_critical=4 > disk_warning=90 > disk_critical=95 > > class ServiceConfig(ServiceConfigDefault): > def __init__(self, **kwargs): > service = kwargs["service"] > if kwargs["load_warning"]: > load_warning=kwargs["load_warning"] > if kwargs["load_critical"]: > load_critical=kwargs["load_critical"] > > > And then as I read the data from the config file I can instantiate a > ServiceConfig object and stick it in a dictionary keyed by the hostname. > But this seems less than flexible also. Having that if test and then > assignment if it is not set seems clumsy. And I'll have to add a test > for each possible config option. But at least this should get the > default if the thing isn't defined. > > Also, I will probably get into configuring things which are different > than hostname, threshold, and a pair of integer threshold values. So > perhaps I should be able to have a different sort of service object > depending on what it is exactly thatI am to be monitoring. For example > I will want to be able to monitor that a certain process is running. > That won't have a pair of integer threshold values but will instead have > a string to search the process list for. Currently this config resides > onthe server side. But I think perhaps I will want to push it to the > client side instead because I'm not going to pipe the whole process list > over to the server. The client needs to know what process to be checking > for. But even if I do that the same config questions will remain. > > After thinking about this OO stuff for a bit the first option of using > dictionaries of dictionaries isn't seeming so bad as far as complexity goes! > > Back when I first conceived of this program I thought I knew just how I > would do it but now that I'm actually writing code I'm lost! > > Thoughts? > > - -- > Tracy R Reed > http://ultraviolet.org > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.5 (GNU/Linux) > Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org > > iD8DBQFF0Eg79PIYKZYVAq0RAspRAJ9MmXz7cH74ikhb8mFUqf65BTBekgCfajz2 > TaaVmPjFQ0k9l15ZrpOfkZI= > =AeAX > -----END PGP SIGNATURE----- > > -- > [email protected] > http://www.kernel-panic.org/cgi-bin/mailman/listinfo/kplug-lpsg > -- guy "For world domination - press 1, or dial 0, and please hold, for the creator." -- nob o. dy -- [email protected] http://www.kernel-panic.org/cgi-bin/mailman/listinfo/kplug-lpsg
