aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Bersenev <bay@hackerdom.ru>2011-07-25 01:32:59 +0000
committerAlexander Bersenev <bay@hackerdom.ru>2011-07-25 01:32:59 +0000
commit2276366a5a6200dabc0778ffeac896ca20b61bf1 (patch)
treea118d698e382f384633e5a6da95532b4705a35a6 /docs/build/html/_modules/logfs
parentdocumentation: intro (diff)
downloadautodep-2276366a5a6200dabc0778ffeac896ca20b61bf1.tar.gz
autodep-2276366a5a6200dabc0778ffeac896ca20b61bf1.tar.bz2
autodep-2276366a5a6200dabc0778ffeac896ca20b61bf1.zip
documentation, man page
Diffstat (limited to 'docs/build/html/_modules/logfs')
-rw-r--r--docs/build/html/_modules/logfs/fstracer.html315
1 files changed, 315 insertions, 0 deletions
diff --git a/docs/build/html/_modules/logfs/fstracer.html b/docs/build/html/_modules/logfs/fstracer.html
new file mode 100644
index 0000000..efec07a
--- /dev/null
+++ b/docs/build/html/_modules/logfs/fstracer.html
@@ -0,0 +1,315 @@
+
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <title>logfs.fstracer &mdash; Autodep documentation</title>
+ <link rel="stylesheet" href="../../_static/default.css" type="text/css" />
+ <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
+ <script type="text/javascript">
+ var DOCUMENTATION_OPTIONS = {
+ URL_ROOT: '../../',
+ VERSION: '0.1',
+ COLLAPSE_INDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true
+ };
+ </script>
+ <script type="text/javascript" src="../../_static/jquery.js"></script>
+ <script type="text/javascript" src="../../_static/underscore.js"></script>
+ <script type="text/javascript" src="../../_static/doctools.js"></script>
+ <link rel="top" title="Autodep documentation" href="../../index.html" />
+ <link rel="up" title="Module code" href="../index.html" />
+ </head>
+ <body>
+ <div class="related">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../../genindex.html" title="General Index"
+ accesskey="I">index</a></li>
+ <li class="right" >
+ <a href="../../py-modindex.html" title="Python Module Index"
+ >modules</a> |</li>
+ <li><a href="../../index.html">Autodep</a> &raquo;</li>
+ <li><a href="../index.html" accesskey="U">Module code</a> &raquo;</li>
+ </ul>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body">
+
+ <h1>Source code for logfs.fstracer</h1><div class="highlight"><pre>
+<span class="c">#!/usr/bin/env python2</span>
+<span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">This module is a bridge between low-level logging services and high level </span>
+<span class="sd">handling dependency logic.</span>
+
+<span class="sd">It can be used to launch a program and get all file events</span>
+<span class="sd">&quot;&quot;&quot;</span>
+
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+<span class="kn">import</span> <span class="nn">stat</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">tempfile</span>
+<span class="kn">import</span> <span class="nn">socket</span>
+<span class="kn">import</span> <span class="nn">select</span>
+<span class="kn">import</span> <span class="nn">re</span>
+<span class="kn">import</span> <span class="nn">signal</span>
+
+<span class="kn">import</span> <span class="nn">logger_hooklib</span>
+<span class="kn">import</span> <span class="nn">logger_fusefs</span>
+
+<span class="n">stop</span><span class="o">=</span><span class="bp">False</span><span class="p">;</span>
+<span class="n">stoptime</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span>
+
+<span class="k">def</span> <span class="nf">parse_message</span><span class="p">(</span><span class="n">message</span><span class="p">):</span>
+ <span class="n">ret</span><span class="o">=</span><span class="n">message</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\0</span><span class="s">&quot;</span><span class="p">)</span>
+ <span class="k">return</span> <span class="n">ret</span>
+
+<span class="c">#check if process is zombie</span>
+<span class="k">def</span> <span class="nf">iszombie</span><span class="p">(</span><span class="n">pid</span><span class="p">):</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">statfile</span><span class="o">=</span><span class="nb">open</span><span class="p">(</span><span class="s">&quot;/proc/</span><span class="si">%d</span><span class="s">/stat&quot;</span> <span class="o">%</span> <span class="n">pid</span><span class="p">,</span><span class="s">&quot;r&quot;</span><span class="p">)</span>
+ <span class="n">line</span><span class="o">=</span><span class="n">statfile</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span>
+ <span class="n">statfile</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="n">line</span><span class="o">=</span><span class="n">line</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s">&quot;)&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> <span class="c"># find last &quot;)&quot; char</span>
+ <span class="n">line</span><span class="o">=</span><span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+ <span class="n">match</span><span class="o">=</span><span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s">r&quot;^(\w)&quot;</span><span class="p">,</span><span class="n">line</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">match</span><span class="o">==</span><span class="bp">None</span><span class="p">:</span>
+ <span class="k">print</span> <span class="s">&quot;Failed to get check if process is zombie. Format of /proc/&lt;pid&gt;/stat is incorrect. Did you change a kernel?&quot;</span>
+ <span class="k">return</span> <span class="bp">False</span>
+
+ <span class="k">return</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">==</span><span class="s">&quot;Z&quot;</span>
+
+ <span class="k">except</span> <span class="ne">IOError</span><span class="p">,</span><span class="n">e</span><span class="p">:</span>
+ <span class="k">return</span> <span class="bp">True</span>
+
+<span class="c"># default access filter. Allow acess to all files</span>
+<span class="k">def</span> <span class="nf">defaultfilter</span><span class="p">(</span><span class="n">eventname</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">stage</span><span class="p">):</span>
+ <span class="k">return</span> <span class="bp">True</span>
+
+<div class="viewcode-block" id="getfsevents"><a class="viewcode-back" href="../../api.html#logfs.fstracer.getfsevents">[docs]</a><span class="k">def</span> <span class="nf">getfsevents</span><span class="p">(</span><span class="n">prog_name</span><span class="p">,</span><span class="n">arguments</span><span class="p">,</span><span class="n">approach</span><span class="o">=</span><span class="s">&quot;hooklib&quot;</span><span class="p">,</span><span class="n">filterproc</span><span class="o">=</span><span class="n">defaultfilter</span><span class="p">):</span>
+ <span class="sd">&quot;&quot;&quot; run the program and get file access events &quot;&quot;&quot;</span>
+ <span class="n">events</span><span class="o">=</span><span class="p">{}</span>
+ <span class="c"># generate a random socketname</span>
+ <span class="n">tmpdir</span> <span class="o">=</span> <span class="n">tempfile</span><span class="o">.</span><span class="n">mkdtemp</span><span class="p">()</span>
+ <span class="n">socketname</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tmpdir</span><span class="p">,</span> <span class="s">&#39;socket&#39;</span><span class="p">)</span>
+
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">sock_listen</span><span class="o">=</span><span class="n">socket</span><span class="o">.</span><span class="n">socket</span><span class="p">(</span><span class="n">socket</span><span class="o">.</span><span class="n">AF_UNIX</span><span class="p">,</span> <span class="n">socket</span><span class="o">.</span><span class="n">SOCK_SEQPACKET</span><span class="p">)</span>
+
+ <span class="n">sock_listen</span><span class="o">.</span><span class="n">setsockopt</span><span class="p">(</span><span class="n">socket</span><span class="o">.</span><span class="n">SOL_SOCKET</span><span class="p">,</span> <span class="n">socket</span><span class="o">.</span><span class="n">SO_REUSEADDR</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+ <span class="n">sock_listen</span><span class="o">.</span><span class="n">bind</span><span class="p">(</span><span class="n">socketname</span><span class="p">)</span>
+ <span class="n">sock_listen</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="mi">64</span><span class="p">)</span>
+ <span class="c"># enable connect a socket for anyone</span>
+ <span class="n">os</span><span class="o">.</span><span class="n">chmod</span><span class="p">(</span><span class="n">tmpdir</span><span class="p">,</span><span class="n">stat</span><span class="o">.</span><span class="n">S_IRUSR</span><span class="o">|</span><span class="n">stat</span><span class="o">.</span><span class="n">S_IWUSR</span><span class="o">|</span><span class="n">stat</span><span class="o">.</span><span class="n">S_IXUSR</span><span class="o">|</span><span class="n">stat</span><span class="o">.</span><span class="n">S_IROTH</span><span class="o">|</span><span class="n">stat</span><span class="o">.</span><span class="n">S_IWOTH</span><span class="o">|</span><span class="n">stat</span><span class="o">.</span><span class="n">S_IXOTH</span><span class="p">)</span>
+ <span class="n">os</span><span class="o">.</span><span class="n">chmod</span><span class="p">(</span><span class="n">socketname</span><span class="p">,</span><span class="n">stat</span><span class="o">.</span><span class="n">S_IRUSR</span><span class="o">|</span><span class="n">stat</span><span class="o">.</span><span class="n">S_IWUSR</span><span class="o">|</span><span class="n">stat</span><span class="o">.</span><span class="n">S_IXUSR</span><span class="o">|</span><span class="n">stat</span><span class="o">.</span><span class="n">S_IROTH</span><span class="o">|</span><span class="n">stat</span><span class="o">.</span><span class="n">S_IWOTH</span><span class="o">|</span><span class="n">stat</span><span class="o">.</span><span class="n">S_IXOTH</span><span class="p">)</span>
+
+ <span class="k">except</span> <span class="n">socket</span><span class="o">.</span><span class="n">error</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+ <span class="k">print</span> <span class="s">&quot;Failed to create a socket for exchange data with the logger: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">e</span>
+ <span class="k">return</span> <span class="p">[]</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="c">#print socketname</span>
+ <span class="n">pid</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">fork</span><span class="p">()</span>
+ <span class="k">if</span> <span class="n">pid</span><span class="o">==</span><span class="mi">0</span><span class="p">:</span>
+ <span class="n">logger</span><span class="o">=</span><span class="bp">None</span>
+ <span class="k">if</span> <span class="n">approach</span><span class="o">==</span><span class="s">&quot;hooklib&quot;</span><span class="p">:</span>
+ <span class="n">logger</span><span class="o">=</span><span class="n">logger_hooklib</span><span class="o">.</span><span class="n">logger</span><span class="p">(</span><span class="n">socketname</span><span class="p">)</span>
+ <span class="k">elif</span> <span class="n">approach</span><span class="o">==</span><span class="s">&quot;fusefs&quot;</span><span class="p">:</span>
+ <span class="n">logger</span><span class="o">=</span><span class="n">logger_fusefs</span><span class="o">.</span><span class="n">logger</span><span class="p">(</span><span class="n">socketname</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="k">print</span> <span class="s">&quot;Unknown logging approach&quot;</span>
+ <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+
+ <span class="n">logger</span><span class="o">.</span><span class="n">execprog</span><span class="p">(</span><span class="n">prog_name</span><span class="p">,</span><span class="n">arguments</span><span class="p">)</span>
+
+ <span class="c"># should not get here</span>
+ <span class="k">print</span> <span class="s">&quot;Launch likely was unsuccessful&quot;</span>
+ <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="k">def</span> <span class="nf">signal_handler</span><span class="p">(</span><span class="n">sig</span><span class="p">,</span> <span class="n">frame</span><span class="p">):</span>
+ <span class="k">print</span> <span class="s">&quot;You pressed Ctrl+C!&quot;</span>
+ <span class="k">global</span> <span class="n">stoptime</span>
+ <span class="k">if</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span><span class="o">-</span><span class="n">stoptime</span><span class="o">&gt;</span><span class="mi">5</span><span class="p">):</span>
+ <span class="k">print</span> <span class="s">&quot;Sending SIGINT to child&quot;</span>
+ <span class="k">print</span> <span class="s">&quot;Press again in 5 seconds to force exit&quot;</span>
+ <span class="n">stoptime</span><span class="o">=</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="k">print</span> <span class="s">&quot;Sending SIGKILL to child&quot;</span>
+ <span class="n">os</span><span class="o">.</span><span class="n">kill</span><span class="p">(</span><span class="n">pid</span><span class="p">,</span><span class="n">signal</span><span class="o">.</span><span class="n">SIGKILL</span><span class="p">)</span>
+ <span class="n">os</span><span class="o">.</span><span class="n">_exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+ <span class="kn">import</span> <span class="nn">signal</span> <span class="c"># signal must to be in this scope</span>
+ <span class="c"># global signal not works</span>
+ <span class="n">signal</span><span class="o">.</span><span class="n">signal</span><span class="p">(</span><span class="n">signal</span><span class="o">.</span><span class="n">SIGINT</span><span class="p">,</span> <span class="n">signal_handler</span><span class="p">)</span>
+
+ <span class="n">epoll</span><span class="o">=</span><span class="n">select</span><span class="o">.</span><span class="n">epoll</span><span class="p">()</span>
+ <span class="n">epoll</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">sock_listen</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="n">select</span><span class="o">.</span><span class="n">EPOLLIN</span><span class="p">)</span>
+
+ <span class="n">connects</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="n">clients</span><span class="o">=</span><span class="p">{}</span>
+ <span class="n">was_first_connect</span><span class="o">=</span><span class="bp">False</span>
+
+ <span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">sock_events</span> <span class="o">=</span> <span class="n">epoll</span><span class="o">.</span><span class="n">poll</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
+
+ <span class="k">for</span> <span class="n">fileno</span><span class="p">,</span> <span class="n">sock_event</span> <span class="ow">in</span> <span class="n">sock_events</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">fileno</span> <span class="o">==</span> <span class="n">sock_listen</span><span class="o">.</span><span class="n">fileno</span><span class="p">():</span>
+ <span class="c">#print &quot;\n\nEVENT\n\n&quot;</span>
+ <span class="n">ret</span> <span class="o">=</span> <span class="n">sock_listen</span><span class="o">.</span><span class="n">accept</span><span class="p">()</span>
+ <span class="c">#print ret</span>
+ <span class="k">if</span> <span class="n">ret</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
+ <span class="c"># print &quot;\n\nPASS\n\n&quot;</span>
+ <span class="k">pass</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">client</span><span class="p">,</span><span class="n">addr</span><span class="p">)</span><span class="o">=</span><span class="n">ret</span>
+ <span class="c"># print client</span>
+ <span class="n">connects</span><span class="o">+=</span><span class="mi">1</span><span class="p">;</span> <span class="c"># client accepted</span>
+ <span class="n">was_first_connect</span><span class="o">=</span><span class="bp">True</span>
+ <span class="n">epoll</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">client</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="n">select</span><span class="o">.</span><span class="n">EPOLLIN</span><span class="p">)</span>
+ <span class="n">clients</span><span class="p">[</span><span class="n">client</span><span class="o">.</span><span class="n">fileno</span><span class="p">()]</span><span class="o">=</span><span class="n">client</span>
+ <span class="c">#print &quot;opened %d&quot; % client.fileno()</span>
+ <span class="c">#elif sock_event &amp; select.EPOLLHUP:</span>
+ <span class="c">#epoll.unregister(fileno)</span>
+ <span class="c">#clients[fileno].close()</span>
+ <span class="c">#del clients[fileno]</span>
+ <span class="c">#connects-=1</span>
+
+ <span class="k">elif</span> <span class="n">sock_event</span> <span class="o">&amp;</span> <span class="n">select</span><span class="o">.</span><span class="n">EPOLLIN</span><span class="p">:</span>
+ <span class="n">s</span><span class="o">=</span><span class="n">clients</span><span class="p">[</span><span class="n">fileno</span><span class="p">]</span>
+ <span class="n">record</span><span class="o">=</span><span class="n">s</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">8192</span><span class="p">)</span>
+
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">record</span><span class="p">:</span> <span class="c"># if connection was closed</span>
+ <span class="n">epoll</span><span class="o">.</span><span class="n">unregister</span><span class="p">(</span><span class="n">fileno</span><span class="p">)</span>
+ <span class="n">clients</span><span class="p">[</span><span class="n">fileno</span><span class="p">]</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="k">del</span> <span class="n">clients</span><span class="p">[</span><span class="n">fileno</span><span class="p">]</span>
+ <span class="n">connects</span><span class="o">-=</span><span class="mi">1</span>
+ <span class="c">#print &quot;closed %d&quot;%fileno</span>
+ <span class="k">continue</span>
+
+ <span class="n">message</span><span class="o">=</span><span class="n">record</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\0</span><span class="s">&quot;</span><span class="p">)</span>
+ <span class="c">#if message[3]==&quot;compile&quot;: #and message[1]==&quot;debug&quot;:</span>
+ <span class="c">#print message</span>
+
+
+ <span class="k">try</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">message</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span><span class="o">==</span><span class="s">&quot;ASKING&quot;</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">filterproc</span><span class="p">(</span><span class="n">message</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="n">message</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span><span class="n">message</span><span class="p">[</span><span class="mi">3</span><span class="p">]):</span>
+ <span class="c">#print &quot;Allowing an access to %s&quot; % message[2]</span>
+ <span class="n">s</span><span class="o">.</span><span class="n">sendall</span><span class="p">(</span><span class="s">&quot;ALLOW</span><span class="se">\0</span><span class="s">&quot;</span><span class="p">);</span> <span class="c"># TODO: think about flush here</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="k">print</span> <span class="s">&quot;Blocking an access to </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">message</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
+ <span class="n">s</span><span class="o">.</span><span class="n">sendall</span><span class="p">(</span><span class="s">&quot;DENY</span><span class="se">\0</span><span class="s">&quot;</span><span class="p">);</span> <span class="c"># TODO: think about flush here</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">eventname</span><span class="p">,</span><span class="n">filename</span><span class="p">,</span><span class="n">stage</span><span class="p">,</span><span class="n">result</span><span class="o">=</span><span class="n">message</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="mi">5</span><span class="p">]</span>
+
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">stage</span> <span class="ow">in</span> <span class="n">events</span><span class="p">:</span>
+ <span class="n">events</span><span class="p">[</span><span class="n">stage</span><span class="p">]</span><span class="o">=</span><span class="p">[{},{}]</span>
+
+ <span class="n">hashofsucesses</span><span class="o">=</span><span class="n">events</span><span class="p">[</span><span class="n">stage</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
+ <span class="n">hashoffailures</span><span class="o">=</span><span class="n">events</span><span class="p">[</span><span class="n">stage</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span>
+
+ <span class="k">if</span> <span class="n">result</span><span class="o">==</span><span class="s">&quot;OK&quot;</span><span class="p">:</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">filename</span> <span class="ow">in</span> <span class="n">hashofsucesses</span><span class="p">:</span>
+ <span class="n">hashofsucesses</span><span class="p">[</span><span class="n">filename</span><span class="p">]</span><span class="o">=</span><span class="p">[</span><span class="bp">False</span><span class="p">,</span><span class="bp">False</span><span class="p">]</span>
+
+ <span class="n">readed_or_writed</span><span class="o">=</span><span class="n">hashofsucesses</span><span class="p">[</span><span class="n">filename</span><span class="p">]</span>
+
+ <span class="k">if</span> <span class="n">eventname</span><span class="o">==</span><span class="s">&quot;read&quot;</span><span class="p">:</span>
+ <span class="n">readed_or_writed</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">=</span><span class="bp">True</span>
+ <span class="k">elif</span> <span class="n">eventname</span><span class="o">==</span><span class="s">&quot;write&quot;</span><span class="p">:</span>
+ <span class="n">readed_or_writed</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">=</span><span class="bp">True</span>
+
+ <span class="k">elif</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">]</span><span class="o">==</span><span class="s">&quot;ERR&quot;</span> <span class="ow">or</span> <span class="n">result</span><span class="o">==</span><span class="s">&quot;DENIED&quot;</span><span class="p">:</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">filename</span> <span class="ow">in</span> <span class="n">hashoffailures</span><span class="p">:</span>
+ <span class="n">hashoffailures</span><span class="p">[</span><span class="n">filename</span><span class="p">]</span><span class="o">=</span><span class="p">[</span><span class="bp">False</span><span class="p">,</span><span class="bp">False</span><span class="p">]</span>
+ <span class="n">notfound_or_blocked</span><span class="o">=</span><span class="n">hashoffailures</span><span class="p">[</span><span class="n">filename</span><span class="p">]</span>
+
+ <span class="k">if</span> <span class="n">result</span><span class="o">==</span><span class="s">&quot;ERR/2&quot;</span><span class="p">:</span>
+ <span class="n">notfound_or_blocked</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">=</span><span class="bp">True</span>
+ <span class="k">elif</span> <span class="n">result</span><span class="o">==</span><span class="s">&quot;DENIED&quot;</span><span class="p">:</span>
+ <span class="n">notfound_or_blocked</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">=</span><span class="bp">True</span>
+
+ <span class="k">else</span><span class="p">:</span>
+ <span class="k">print</span> <span class="s">&quot;Error in logger module&lt;-&gt;analyser protocol&quot;</span>
+
+ <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
+ <span class="k">print</span> <span class="s">&quot;IndexError while parsing </span><span class="si">%s</span><span class="s">&quot;</span><span class="o">%</span><span class="n">record</span>
+ <span class="k">except</span> <span class="ne">IOError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="o">!=</span><span class="mi">4</span><span class="p">:</span> <span class="c"># handling &quot;Interrupted system call&quot; errors</span>
+ <span class="k">raise</span>
+
+ <span class="k">if</span> <span class="n">was_first_connect</span> <span class="ow">and</span> <span class="n">connects</span><span class="o">==</span><span class="mi">0</span><span class="p">:</span>
+ <span class="k">break</span>
+
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sock_events</span><span class="p">)</span><span class="o">==</span><span class="mi">0</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">clients</span><span class="p">)</span><span class="o">==</span><span class="mi">0</span><span class="p">:</span>
+ <span class="c"># # seems like there is no connect</span>
+ <span class="k">print</span> <span class="s">&quot;It seems like a logger module was unable to start or failed to finish</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">+</span> \
+ <span class="s">&quot;Check that you are not launching a suid program under non-root user.&quot;</span>
+ <span class="k">return</span> <span class="p">[]</span>
+ <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">clients</span><span class="p">)</span><span class="o">==</span><span class="mi">0</span> <span class="ow">and</span> <span class="n">iszombie</span><span class="p">(</span><span class="n">pid</span><span class="p">):</span>
+ <span class="k">break</span>
+
+ <span class="n">epoll</span><span class="o">.</span><span class="n">unregister</span><span class="p">(</span><span class="n">sock_listen</span><span class="o">.</span><span class="n">fileno</span><span class="p">())</span>
+ <span class="n">epoll</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="n">sock_listen</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="n">_</span><span class="p">,</span> <span class="n">exit_status</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">waitpid</span><span class="p">(</span><span class="n">pid</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
+ <span class="n">signal</span><span class="p">,</span><span class="n">exit_status</span><span class="o">=</span><span class="n">exit_status</span><span class="o">%</span><span class="mi">256</span><span class="p">,</span><span class="n">exit_status</span><span class="o">/</span><span class="mi">256</span>
+ <span class="k">print</span> <span class="s">&quot;Signal: </span><span class="si">%s</span><span class="s"> Exit status: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">signal</span><span class="p">,</span><span class="n">exit_status</span><span class="p">)</span>
+
+ <span class="k">return</span> <span class="n">events</span>
+</pre></div></div>
+
+ </div>
+ </div>
+ </div>
+ <div class="sphinxsidebar">
+ <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+ <h3>Quick search</h3>
+ <form class="search" action="../../search.html" method="get">
+ <input type="text" name="q" size="18" />
+ <input type="submit" value="Go" />
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+ <p class="searchtip" style="font-size: 90%">
+ Enter search terms or a module, class or function name.
+ </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../../genindex.html" title="General Index"
+ >index</a></li>
+ <li class="right" >
+ <a href="../../py-modindex.html" title="Python Module Index"
+ >modules</a> |</li>
+ <li><a href="../../index.html">Autodep</a> &raquo;</li>
+ <li><a href="../index.html" >Module code</a> &raquo;</li>
+ </ul>
+ </div>
+ <div class="footer">
+ &copy; Copyright 2011, Alexander Bersenev.
+ Last updated on Jul 25, 2011.
+ Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0.7.
+ </div>
+ </body>
+</html> \ No newline at end of file