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

Reply via email to