<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Matejunkie &#187; dictionary</title>
	<atom:link href="http://www.matejunkie.com/tag/dictionary/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.matejunkie.com</link>
	<description>&#34;Look behind you, a Three-Headed Monkey!&#34;</description>
	<lastBuildDate>Thu, 07 Jan 2010 14:26:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Porting my Nagios Plugins to Python</title>
		<link>http://www.matejunkie.com/porting-my-nagios-plugins-to-python/</link>
		<comments>http://www.matejunkie.com/porting-my-nagios-plugins-to-python/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 08:33:19 +0000</pubDate>
		<dc:creator>Mike Adolphs</dc:creator>
				<category><![CDATA[Binary Talks]]></category>
		<category><![CDATA[apache webserver]]></category>
		<category><![CDATA[dictionary]]></category>
		<category><![CDATA[draft]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[network monitoring]]></category>
		<category><![CDATA[optionparser]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[urllib]]></category>

		<guid isPermaLink="false">http://www.matejunkie.com/?p=873</guid>
		<description><![CDATA[I&#8217;ve just started to rewrite my sh written Nagios Plugins in Python, mainly to get a feeling for writing Python code. First steps with writing object-orientated code were&#8230; &#8220;not so good, Al!&#8221; as Weezer would have said to this. Therefore I&#8217;ve began with some lines of functional programming. That&#8217;ll do the job for now. Below [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just started to rewrite my sh written Nagios Plugins in Python, mainly to get a feeling for writing Python code. First steps with writing object-orientated code were&#8230; &#8220;not so good, Al!&#8221; as Weezer would have said to this. Therefore I&#8217;ve began with some lines of functional programming. That&#8217;ll do the job for now.</p>
<p>Below you&#8217;ll see a rudimentary plugin to check the Apache&#8217;s server-status page. Note that it will never go critical at this time. I was just playing around with retrieving a file, putting the content into a dictionary and then transforming it to a proper output which Nagios would understand.<br />
I&#8217;ll do more work on this within the next days, expect an update here soon. And if you have any suggestions what could have been done better, let me know.</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">urllib</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">optparse</span> <span style="color: #ff7700;font-weight:bold;">import</span> OptionParser
&nbsp;
stateOK = <span style="color: #ff4500;">0</span>
stateWARN = <span style="color: #ff4500;">1</span>
stateCRIT = <span style="color: #ff4500;">2</span>
stateUNK = <span style="color: #ff4500;">3</span>
&nbsp;
<span style="color: #dc143c;">parser</span> = OptionParser<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #dc143c;">parser</span>.<span style="color: black;">add_option</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">&quot;-H&quot;</span>,
                   <span style="color: #483d8b;">&quot;--hostname&quot;</span>,
                   <span style="color: #008000;">type</span>=<span style="color: #483d8b;">&quot;string&quot;</span>,
                   dest=<span style="color: #483d8b;">&quot;hostname&quot;</span>,
                   default=<span style="color: #483d8b;">&quot;localhost&quot;</span>,
                   <span style="color: #008000;">help</span>=<span style="color: #483d8b;">&quot;Sets the hostname to check.&quot;</span><span style="color: black;">&#41;</span>
<span style="color: #dc143c;">parser</span>.<span style="color: black;">add_option</span><span style="color: black;">&#40;</span> <span style="color: #483d8b;">&quot;-p&quot;</span>,
                   <span style="color: #483d8b;">&quot;--port&quot;</span>,
                   <span style="color: #008000;">type</span>=<span style="color: #483d8b;">&quot;int&quot;</span>,
                   dest=<span style="color: #483d8b;">&quot;port&quot;</span>,
                   default=<span style="color: #ff4500;">80</span>,
                   <span style="color: #008000;">help</span>=<span style="color: #483d8b;">&quot;Sets the port of the host to check.&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: black;">&#40;</span>options, args<span style="color: black;">&#41;</span> = <span style="color: #dc143c;">parser</span>.<span style="color: black;">parse_args</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
hostname = options.<span style="color: black;">hostname</span>
port = options.<span style="color: black;">port</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> retrieve_status_page<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    statusPage = <span style="color: #483d8b;">&quot;http://%s:%s/server-status?auto&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>hostname, port<span style="color: black;">&#41;</span>
    retrPage = <span style="color: #dc143c;">urllib</span>.<span style="color: black;">urlretrieve</span><span style="color: black;">&#40;</span>statusPage, <span style="color: #483d8b;">'/tmp/server-status.log'</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> parse_status_page<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #008000;">file</span> = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/tmp/server-status.log'</span>, <span style="color: #483d8b;">'r'</span><span style="color: black;">&#41;</span>
    line = <span style="color: #008000;">file</span>.<span style="color: #dc143c;">readline</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    dictStatus = <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
    counter = <span style="color: #ff4500;">1</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">while</span> line:
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #483d8b;">&quot;Total Accesses:&quot;</span> <span style="color: #ff7700;font-weight:bold;">in</span> line:
            key = <span style="color: #483d8b;">&quot;totalAcc&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #483d8b;">&quot;Total kBytes:&quot;</span> <span style="color: #ff7700;font-weight:bold;">in</span> line:
            key = <span style="color: #483d8b;">&quot;totalKb&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #483d8b;">&quot;Uptime:&quot;</span> <span style="color: #ff7700;font-weight:bold;">in</span> line:
            key = <span style="color: #483d8b;">&quot;uptime&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #483d8b;">&quot;ReqPerSec:&quot;</span> <span style="color: #ff7700;font-weight:bold;">in</span> line:
            key = <span style="color: #483d8b;">&quot;reqPSec&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #483d8b;">&quot;BytesPerSec:&quot;</span> <span style="color: #ff7700;font-weight:bold;">in</span> line:
            key = <span style="color: #483d8b;">&quot;bytesPSec&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #483d8b;">&quot;BytesPerReq:&quot;</span> <span style="color: #ff7700;font-weight:bold;">in</span> line:
            key = <span style="color: #483d8b;">&quot;bytesPReq&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #483d8b;">&quot;BusyWorkers:&quot;</span> <span style="color: #ff7700;font-weight:bold;">in</span> line:
            key = <span style="color: #483d8b;">&quot;busyWkrs&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #483d8b;">&quot;IdleWorkers:&quot;</span> <span style="color: #ff7700;font-weight:bold;">in</span> line:
            key = <span style="color: #483d8b;">&quot;idleWkrs&quot;</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            key = <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>counter<span style="color: black;">&#41;</span>
&nbsp;
        line = line.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        dictStatus<span style="color: black;">&#91;</span>key<span style="color: black;">&#93;</span> = line
        counter = counter + <span style="color: #ff4500;">1</span>
        line = <span style="color: #008000;">file</span>.<span style="color: #dc143c;">readline</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">return</span> dictStatus
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> transform_dict<span style="color: black;">&#40;</span>resParse<span style="color: black;">&#41;</span>:
    totalAcc  = <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>resParse<span style="color: black;">&#91;</span><span style="color: #483d8b;">'totalAcc'</span><span style="color: black;">&#93;</span>.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; Total Accesses:&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    totalKb   = <span style="color: #008000;">float</span><span style="color: black;">&#40;</span>resParse<span style="color: black;">&#91;</span><span style="color: #483d8b;">'totalKb'</span><span style="color: black;">&#93;</span>.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; Total kBytes:&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    uptime    = <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>resParse<span style="color: black;">&#91;</span><span style="color: #483d8b;">'uptime'</span><span style="color: black;">&#93;</span>.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; Uptime:&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    reqPSec   = <span style="color: #008000;">float</span><span style="color: black;">&#40;</span>resParse<span style="color: black;">&#91;</span><span style="color: #483d8b;">'reqPSec'</span><span style="color: black;">&#93;</span>.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; ReqPerSec:&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> + <span style="color: #ff4500;">0</span>
    bytesPSec = <span style="color: #008000;">float</span><span style="color: black;">&#40;</span>resParse<span style="color: black;">&#91;</span><span style="color: #483d8b;">'bytesPSec'</span><span style="color: black;">&#93;</span>.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; BytesPerSec:&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> resParse.<span style="color: black;">has_key</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'bytesPReq'</span><span style="color: black;">&#41;</span>:
        bytesPReq = <span style="color: #008000;">float</span><span style="color: black;">&#40;</span>resParse<span style="color: black;">&#91;</span><span style="color: #483d8b;">'bytesPReq'</span><span style="color: black;">&#93;</span>.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; BytesPerReq:&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
    busyWkrs  = <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>resParse<span style="color: black;">&#91;</span><span style="color: #483d8b;">'busyWkrs'</span><span style="color: black;">&#93;</span>.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; BusyWorkers:&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    idleWkrs  = <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>resParse<span style="color: black;">&#91;</span><span style="color: #483d8b;">'idleWkrs'</span><span style="color: black;">&#93;</span>.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot; IdleWorkers:&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#91;</span>reqPSec, busyWkrs, idleWkrs<span style="color: black;">&#93;</span>
&nbsp;
retrieve_status_page<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
resParse = parse_status_page<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
result = transform_dict<span style="color: black;">&#40;</span>resParse<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;OK: Apache serves %f requests per second. %i busy workers, %i worker &quot;</span> \
      <span style="color: #483d8b;">&quot;idle.&quot;</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>result<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>, result<span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>, result<span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
exit<span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.matejunkie.com/porting-my-nagios-plugins-to-python/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
