Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
HTML

<div class="section" id="how-can-i-monitor-my-suite-independent-of-the-gui">
<span id="monitor-task"></span><span id="index-0"></span>
<div class="line-block">
<div class="line">In this example we want to monitor a particular task.</div>
<div class="line">If this <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-task"><em class="xref std std-term">task</em></a> is <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-aborted"><em class="xref std std-term">aborted</em></a> for any reason, we ask the</div>
<div class="line">server for the job output. This could be mailed to the user.</div>
</div>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">ecflow</span>
<span class="kn">import</span> <span class="nn">time</span>

<span class="k">def</span> <span class="nf">monitor_critical_task</span><span class="p">(</span><span class="n">ci</span><span class="p">,</span> <span class="n">path_to_task</span><span class="p">):</span>
    
    <span class="c"># Query the server for any changes</span>
    <span class="k">if</span> <span class="n">ci</span><span class="o">.</span><span class="n">news_local</span><span class="p">():</span>
            
        <span class="c"># get the incremental changes, and merge with defs stored on the Client </span>
        <span class="n">ci</span><span class="o">.</span><span class="n">sync_local</span><span class="p">()</span>
        
        <span class="c"># check to see if definition exists in the server</span>
        <span class="n">defs</span> <span class="o">=</span> <span class="n">ci</span><span class="o">.</span><span class="n">get_defs</span><span class="p">()</span>
        <span class="k">if</span> <span class="n">defs</span> <span class="o">==</span> <span class="bp">None</span> <span class="p">:</span>
            <span class="nb">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="c"># return</span>
            
        <span class="c"># find the task we are interested in  </span>
        <span class="n">critical_task</span> <span class="o">=</span> <span class="n">defs</span><span class="o">.</span><span class="n">find_abs_node</span><span class="p">(</span><span class="n">path_to_task</span><span class="p">)</span>
        <span class="k">if</span> <span class="n">critical_task</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
            <span class="c"># No such task</span>
            <span class="nb">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="c"># return</span>
             
        <span class="c"># Check to see if task was aborted, if it was email me the job output</span>
        <span class="k">if</span> <span class="n">critical_task</span><span class="o">.</span><span class="n">get_state</span><span class="p">()</span> <span class="o">==</span> <span class="n">ecflow</span><span class="o">.</span><span class="n">State</span><span class="o">.</span><span class="n">aborted</span><span class="p">:</span>
                
            <span class="c"># Get the job output</span>
            <span class="n">the_aborted_task_output</span> <span class="o">=</span> <span class="n">ci</span><span class="o">.</span><span class="n">get_file</span><span class="p">(</span><span class="n">path_to_task</span><span class="p">,</span><span class="s">&#39;jobout&#39;</span><span class="p">)</span>  
            <span class="c"># email(the_aborted_task_output)</span>
            <span class="nb">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
                
<span class="k">try</span><span class="p">:</span>
    <span class="c"># Create the client. This will read the default environment variables</span>
    <span class="n">ci</span> <span class="o">=</span> <span class="n">ecflow</span><span class="o">.</span><span class="n">Client</span><span class="p">(</span><span class="s">&quot;localhost&quot;</span><span class="p">,</span> <span class="s">&quot;4141&quot;</span><span class="p">)</span>

    <span class="c"># Continually monitor the suite</span>
    <span class="k">while</span> <span class="mi">1</span><span class="p">:</span>

        <span class="n">monitor_critical_task</span><span class="p">(</span><span class="n">ci</span><span class="p">,</span> <span class="s">&quot;/suite/critical_node&quot;</span><span class="p">)</span>
                
        <span class="c"># Sleep for 5 minutes. </span>
        <span class="c"># To avoid overloading server ensure sleep is &gt; 60 seconds </span>
        <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">300</span><span class="p">)</span>
        
<span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
    <span class="k">print</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
</pre></div>
</div>
</div>