Files
seiscomp-training/share/doc/caps/html/apps/sproc2caps.html

818 lines
49 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>sproc2caps &#8212; CAPS: Common Acquisition Protocol Server documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/gempa.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=fa44fd50" />
<link rel="stylesheet" type="text/css" href="../_static/gempa.css?v=c960eebf" />
<link rel="stylesheet" type="text/css" href="../_static/graphviz.css?v=eafc0fe6" />
<script type="text/javascript" src="../_static/gempa.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js?v=b3ba4146"></script>
<script src="../_static/doctools.js?v=888ff710"></script>
<script src="../_static/sphinx_highlight.js?v=4825356b"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="test2caps" href="test2caps.html" />
<link rel="prev" title="slink2caps" href="slink2caps.html" />
</head>
<body>
<div class="header">
<div class="container">
<img class="background" src="../_static/icon.png"/>
<div class="content">
<span class="title">CAPS: Common Acquisition Protocol Server </span>
<span class="version">2025.254#f0c77b29e</span></h1>
</div>
</div>
</div>
<div class="nav">
<div class="container">
<div class="content"><a class="pull-right" id="sidebar-toggle">TOC</a>
<div class="related" role="navigation" aria-label="related navigation">
<ul>
<li class="right">
<a href="../genindex.html" title="General Index"
accesskey="I">
index
</a>
</li>
<li class="right">
<a href="test2caps.html" title="test2caps"
accesskey="N">
next
</a>
</li>
<li class="right">
<a href="slink2caps.html" title="slink2caps"
accesskey="P">
previous
</a>
</li>
<li class="nav-item nav-item-0">
<a href="../index.html">Home</a>
</li>
<li class="nav-item nav-item-1">
<a href="../base/plugins.html" accesskey="U">Data Acquisition and Manipulation by Plugins</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="fitted content" id="anchors-container">
<div class="body" role="main">
<section id="sproc2caps">
<span id="id1"></span><h1>sproc2caps<a class="headerlink" href="#sproc2caps" title="Permalink to this heading"></a></h1>
<p><strong>Recordstream data acquisition plugin that applies filter and/or a
mathematical expression to one or more data streams forming new streams</strong></p>
<section id="description">
<h2>Description<a class="headerlink" href="#description" title="Permalink to this heading"></a></h2>
<p>The sproc2caps plugin requests data from a <cite>SeisComP</cite> <span id="id2"><em>RecordStream</em> [<a class="reference internal" href="../base/references.html#id225" title="RecordStream. SeisComP interface. URL: https://docs.gempa.de/seiscomp/current/apps/global_recordstream.html.">6</a>]</span> in
real time or based on <a class="reference internal" href="#sproc-tw"><span class="std std-ref">time windows</span></a>,
<a class="reference internal" href="#sproc-filter"><span class="std std-ref">filters the data</span></a> and/or applies
<a class="reference internal" href="#sproc-expressions"><span class="std std-ref">mathematical expressions</span></a>. The processed data is sent
to a CAPS server or to stdout. Streams can be <a class="reference internal" href="#sproc-rename"><span class="std std-ref">renamed</span></a>.</p>
</section>
<section id="setup">
<h2>Setup<a class="headerlink" href="#setup" title="Permalink to this heading"></a></h2>
<section id="streams">
<h3>Streams<a class="headerlink" href="#streams" title="Permalink to this heading"></a></h3>
<p>The plugin reads the streams to subscribe to from a separate stream map file.
The location of the file can be either defined in the plugin configuration or
given as a command line argument:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>streams.map<span class="w"> </span><span class="o">=</span><span class="w"> </span>@DATADIR@/sproc2caps/streams.map
</pre></div>
</div>
<p>Each line of the stream map file defines n input streams and one output stream.
By definition at least one input and one output stream must be given. The last
argument in a line is the output stream. All other lines are input stream. Lines
beginning with a comment are ignored.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The map file is required even if the stream codes remain the same. Without an
entry in the map file the input streams are not treated.</p>
</div>
<p>Example map file:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1">#Input 1 Input 2 ... Output</span>
XX.TEST1..HHZ<span class="w"> </span>XX.TEST2..HHZ<span class="w"> </span>...<span class="w"> </span>XX.TEST3..HHZ
</pre></div>
</div>
<p>Each stream entry may contain additional stream options e.g. for
<a class="reference internal" href="#sproc-filter"><span class="std std-ref">data filtering</span></a>. Options are indicated by “?”.</p>
<p>The following stream options are supported:</p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>Name</p></th>
<th class="head"><p>Description</p></th>
<th class="head"><p>Example</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>filter</p></td>
<td><p>Filter string</p></td>
<td><p>filter=BW(4,0.7,2)</p></td>
</tr>
<tr class="row-odd"><td><p>unit</p></td>
<td><p>Output unit</p></td>
<td><p>unit=cm/s</p></td>
</tr>
<tr class="row-even"><td><p>expr</p></td>
<td><p>Expression to be used(Output only)</p></td>
<td><p>expr=x1+x2</p></td>
</tr>
</tbody>
</table>
<p>Examples of streams with stream options:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>XX.TEST1..HHZ?filter<span class="o">=</span>BW_HP<span class="o">(</span><span class="m">4</span>,0.1<span class="o">)</span>
XX.TEST2..HHZ?filter<span class="o">=</span>BW_HP<span class="o">(</span><span class="m">4</span>,0.1<span class="o">)</span>
XX.TEST3..HHZ?filter<span class="o">=</span>BW<span class="o">(</span><span class="m">4</span>,0.7,2<span class="o">)</span>?unit<span class="o">=</span>cm/s
</pre></div>
</div>
<p>For the given example the plugin assigns the following access variables to
the streams. The access variables can be used in the mathematical expression string.
The <em>unit</em> option provides an additional description of the stream. <em>unit</em>
does not modify the stream.</p>
<p>Access variables for N input streams:</p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>map,input</p></th>
<th class="head"><p>input 1</p></th>
<th class="head"><p>input 2</p></th>
<th class="head"><p></p></th>
<th class="head"><p>input N</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>stream</p></td>
<td><p>XX.TEST1..HHZ</p></td>
<td><p>XX.TEST2..HHZ</p></td>
<td><p></p></td>
<td><p>XX.TESTN..HHZ</p></td>
</tr>
<tr class="row-odd"><td><p>variable</p></td>
<td><p>x1</p></td>
<td><p>x2</p></td>
<td><p></p></td>
<td><p>xN</p></td>
</tr>
</tbody>
</table>
<p>When the mathematical expression is evaluated the xi will be replaced with the
sample of the corresponding stream at the sample time. The maximum number of
input streams is 3.</p>
</section>
<section id="filtering">
<span id="sproc-filter"></span><h3>Filtering<a class="headerlink" href="#filtering" title="Permalink to this heading"></a></h3>
<p>Input data can be filtered before <a class="reference internal" href="#sproc-expressions"><span class="std std-ref">mathematical expressions</span></a>
are applied. Filter grammar and all filters <span id="id3">[<a class="reference internal" href="../base/references.html#id143" title="Filter Grammar. SeisComP filter. URL: https://docs.gempa.de/seiscomp/current/base/filter-grammar.html.">4</a>]</span> known from
<cite>SeisComP</cite> can be considered. By default input data remain unfiltered.</p>
<p>Example for setting the filter in the map file:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>XX.TEST1..HHZ?filter<span class="o">=</span>BW<span class="o">(</span><span class="m">4</span>,0.7,2<span class="o">)</span><span class="w"> </span>XX.TEST2..HHZ<span class="w"> </span>XX.TEST3..HHZ
</pre></div>
</div>
</section>
<section id="expressions">
<span id="sproc-expressions"></span><h3>Expressions<a class="headerlink" href="#expressions" title="Permalink to this heading"></a></h3>
<p>The sproc plugin uses the C++ Mathematical Expression Library to evaluate
mathematical expressions. The library supports a wide range of mathematical
expressions. The complete feature list can be found <a class="reference external" href="http://www.partow.net/programming/exprtk/">here</a>. The number of
input variables depends on the number of input streams. The variables are numbered
consecutively from 1 to n: x1, x2, …, xn.</p>
<p>Example how to multiply 3 streams:</p>
<ul class="simple">
<li><p>via command-line:</p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>--expr<span class="o">=</span><span class="s2">&quot;x1*x2*x3&quot;</span>
</pre></div>
</div>
<ul class="simple">
<li><p>via config:</p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>streams.expr<span class="w"> </span><span class="o">=</span><span class="w"> </span>x1*x2*x3
</pre></div>
</div>
<ul class="simple">
<li><p>via stream options:</p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>XX.TEST1..HHZ<span class="w"> </span>XX.TEST2..HHZ<span class="w"> </span>XX.TEST3..HHZ<span class="w"> </span>XX.TESTOUT..HHZ?expr<span class="o">=</span>x1*x2*x3
</pre></div>
</div>
</section>
<section id="rename-streams">
<span id="sproc-rename"></span><h3>Rename Streams<a class="headerlink" href="#rename-streams" title="Permalink to this heading"></a></h3>
<p>In addition to applying mathematical expressions to streams, the plugin can be also used to
rename streams. With the following example we show how to map the streams <strong>GE.APE..BHE</strong> and
<strong>GE.BKNI..BHE</strong> to new stream ids and store the output streams in the same CAPS server:</p>
<ol class="arabic">
<li><p>Open the plugin configuration and create a clone of the input data stream with:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>streams.expr<span class="w"> </span><span class="o">=</span><span class="w"> </span>x1
</pre></div>
</div>
</li>
<li><p>Create the mapping file <strong>&#64;DATADIR&#64;/sproc2caps/streams.map</strong> with the following content</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Input Output</span>
GE.APE..BHE<span class="w"> </span>AB.APE..BHE
GE.BKNI..BHE<span class="w"> </span>GE.BKNI2..BHE
</pre></div>
</div>
</li>
</ol>
</section>
<section id="time-windows">
<span id="sproc-tw"></span><h3>Time windows<a class="headerlink" href="#time-windows" title="Permalink to this heading"></a></h3>
<p>Set the time windows using <em>begin</em> and <em>end</em> to set the start and the end times,
respectively. When no time window is given, real-time input data are considered.</p>
</section>
</section>
<section id="examples">
<h2>Examples<a class="headerlink" href="#examples" title="Permalink to this heading"></a></h2>
<ol class="arabic">
<li><p>To map waveform data for a specific time window reading from a local CAPS server on
localhost:18002 and sending to the plugin port of the same CAPS server on localhost:18003 run:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sproc2caps<span class="w"> </span>--begin<span class="w"> </span><span class="s2">&quot;2019-01-01 00:00:00&quot;</span><span class="w"> </span>--end<span class="w"> </span><span class="s2">&quot;2019-01-01 01:00:00&quot;</span><span class="w"> </span>-I<span class="w"> </span><span class="s2">&quot;caps://localhost:18002&quot;</span><span class="w"> </span>-a<span class="w"> </span>localhost:18003
</pre></div>
</div>
<p>This will create duplicate data on the CAPS server if the map file renames the streams.
To remove the original streams:</p>
<ol class="arabic simple">
<li><p>Configure caps to keep the orignal data for 0 days</p></li>
<li><p>Restart or reload caps</p></li>
</ol>
</li>
<li><p>Read real-time data from an external seedlink server like with
<span id="id4">[<a class="reference internal" href="../base/references.html#id299" title="slinks2caps. gempa plugin. URL: https://docs.gempa.de/caps/current/apps/slink2caps.html#slink2caps.">21</a>]</span> but applying the mapping:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sproc2caps<span class="w"> </span>-I<span class="w"> </span><span class="s2">&quot;slink://host:18000&quot;</span><span class="w"> </span>-a<span class="w"> </span>localhost:18003
</pre></div>
</div>
</li>
<li><p>Read data from the file <em>data.mseed</em> resample to 10 Hz sample rate by the
RecordStream and write the resulting data to stdout. By applying
<a class="reference internal" href="#cmdoption-stop"><code class="xref std std-option docutils literal notranslate"><span class="pre">--stop</span></code></a> the processing stops when the data is read completely:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sproc2caps<span class="w"> </span>-I<span class="w"> </span>dec://file?rate<span class="o">=</span><span class="m">10</span>/data.mseed<span class="w"> </span>-d<span class="w"> </span>localhost<span class="w"> </span>--gain-in<span class="w"> </span><span class="m">1</span><span class="w"> </span>--gain-out<span class="w"> </span><span class="m">1</span><span class="w"> </span>--dump-packets<span class="w"> </span>--mseed<span class="w"> </span>--begin<span class="w"> </span><span class="s2">&quot;2000-01-01 00:00:00&quot;</span><span class="w"> </span>--stop<span class="w"> </span>&gt;<span class="w"> </span>test.mseed
</pre></div>
</div>
<p>You may join the command with <span id="id5"><em>capstool</em> [<a class="reference internal" href="../base/references.html#id120" title="capstool. gempa plugin. URL: https://docs.gempa.de/caps/current/apps/capstool.html.">10</a>]</span> and <span id="id6"><em>scmssort</em> [<a class="reference internal" href="../base/references.html#id266" title="scmssort. SeisComP module. URL: https://docs.gempa.de/seiscomp/current/apps/scmssort.html.">16</a>]</span>:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;2024,01,01,00,00,00 2024,01,01,00,10,00 * * * *&quot;</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>capstool<span class="w"> </span>-H<span class="w"> </span>localhost<span class="w"> </span><span class="p">|</span><span class="se">\</span>
sproc2caps<span class="w"> </span>-I<span class="w"> </span>dec://file?rate<span class="o">=</span><span class="m">10</span>/-<span class="w"> </span>-d<span class="w"> </span>localhost<span class="w"> </span>--gain-in<span class="w"> </span><span class="m">1</span><span class="w"> </span>--gain-out<span class="w"> </span><span class="m">1</span><span class="w"> </span>--dump-packets<span class="w"> </span>--mseed<span class="w"> </span>--begin<span class="w"> </span><span class="s2">&quot;2000-01-01 00:00:00&quot;</span><span class="w"> </span>--stop<span class="w"> </span><span class="p">|</span><span class="se">\</span>
scmssort<span class="w"> </span>-E<span class="w"> </span>&gt;<span class="w"> </span>test.mseed
</pre></div>
</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>A similar action may be executed using <a class="reference internal" href="rs2caps.html#rs2caps"><span class="std std-ref">rs2caps</span></a>.</p>
</div>
</li>
</ol>
</section>
<section id="module-configuration">
<h2>Module Configuration<a class="headerlink" href="#module-configuration" title="Permalink to this heading"></a></h2>
<div class="line-block">
<div class="line"><code class="file docutils literal notranslate"><span class="pre">etc/defaults/global.cfg</span></code></div>
<div class="line"><code class="file docutils literal notranslate"><span class="pre">etc/defaults/sproc2caps.cfg</span></code></div>
<div class="line"><code class="file docutils literal notranslate"><span class="pre">etc/global.cfg</span></code></div>
<div class="line"><code class="file docutils literal notranslate"><span class="pre">etc/sproc2caps.cfg</span></code></div>
<div class="line"><code class="file docutils literal notranslate"><span class="pre">~/.seiscomp/global.cfg</span></code></div>
<div class="line"><code class="file docutils literal notranslate"><span class="pre">~/.seiscomp/sproc2caps.cfg</span></code></div>
</div>
<p>sproc2caps inherits <a class="reference internal" href="global.html#global-configuration"><span class="std std-ref">global options</span></a>.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Modules/plugins may require a license file. The default path to license
files is <code class="file docutils literal notranslate"><span class="pre">&#64;DATADIR&#64;/licenses/</span></code> which can be overridden by global
configuration of the parameter <code class="xref std std-confval docutils literal notranslate"><span class="pre">gempa.licensePath</span></code>. Example:</p>
<div class="highlight-rst notranslate"><div class="highlight"><pre><span></span>gempa.licensePath = @CONFIGDIR@/licenses
</pre></div>
</div>
</div>
<span class="target" id="journal"></span><dl class="std confval">
<dt class="sig sig-object std" id="confval-journal.file">
<span class="sig-name descname"><span class="pre">journal.file</span></span><a class="headerlink" href="#confval-journal.file" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">&#64;ROOTDIR&#64;/var/run/sproc2caps/journal</span></code></p>
<p>Type: <em>string</em></p>
<p>File to store stream states</p>
</dd></dl>
<dl class="std confval">
<dt class="sig sig-object std" id="confval-journal.flush">
<span class="sig-name descname"><span class="pre">journal.flush</span></span><a class="headerlink" href="#confval-journal.flush" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">10</span></code></p>
<p>Unit: <em>s</em></p>
<p>Type: <em>uint</em></p>
<p>Flush stream states to disk every n seconds</p>
</dd></dl>
<dl class="std confval">
<dt class="sig sig-object std" id="confval-journal.waitForAck">
<span class="sig-name descname"><span class="pre">journal.waitForAck</span></span><a class="headerlink" href="#confval-journal.waitForAck" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">60</span></code></p>
<p>Unit: <em>s</em></p>
<p>Type: <em>uint</em></p>
<p>Wait when a sync has been forced, up to n seconds</p>
</dd></dl>
<dl class="std confval">
<dt class="sig sig-object std" id="confval-journal.waitForLastAck">
<span class="sig-name descname"><span class="pre">journal.waitForLastAck</span></span><a class="headerlink" href="#confval-journal.waitForLastAck" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">5</span></code></p>
<p>Unit: <em>s</em></p>
<p>Type: <em>uint</em></p>
<p>Wait on shutdown to receive acknownledgement messages, up to n seconds</p>
</dd></dl>
<div class="admonition note" id="id7">
<p class="admonition-title">Note</p>
<p><strong>streams.*</strong>
<em>Configure operations applied to input streams and the stream mapping.</em></p>
</div>
<dl class="std confval">
<dt class="sig sig-object std" id="confval-streams.begin">
<span class="sig-name descname"><span class="pre">streams.begin</span></span><a class="headerlink" href="#confval-streams.begin" title="Permalink to this definition"></a></dt>
<dd><p>Type: <em>string</em></p>
<p>Start time of data time window, default GMT</p>
</dd></dl>
<dl class="std confval">
<dt class="sig sig-object std" id="confval-streams.end">
<span class="sig-name descname"><span class="pre">streams.end</span></span><a class="headerlink" href="#confval-streams.end" title="Permalink to this definition"></a></dt>
<dd><p>Type: <em>string</em></p>
<p>End time of data time window</p>
</dd></dl>
<dl class="std confval">
<dt class="sig sig-object std" id="confval-streams.filter">
<span class="sig-name descname"><span class="pre">streams.filter</span></span><a class="headerlink" href="#confval-streams.filter" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">self</span></code></p>
<p>Type: <em>string</em></p>
<p>Sets the input filter</p>
</dd></dl>
<dl class="std confval">
<dt class="sig sig-object std" id="confval-streams.expr">
<span class="sig-name descname"><span class="pre">streams.expr</span></span><a class="headerlink" href="#confval-streams.expr" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">x1</span> <span class="pre">+</span> <span class="pre">x2</span></code></p>
<p>Type: <em>string</em></p>
<p>Sets the mathematical expression</p>
</dd></dl>
<dl class="std confval">
<dt class="sig sig-object std" id="confval-streams.map">
<span class="sig-name descname"><span class="pre">streams.map</span></span><a class="headerlink" href="#confval-streams.map" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">&#64;DATADIR&#64;/sproc2caps/streams.map</span></code></p>
<p>Type: <em>string</em></p>
<p>Absolute path to the stream map file. Each line
holds n input streams and one output stream.
Example:</p>
<p>CX.PB11..BHZ CX.PB11..BHZ</p>
<p>CX.PB11..BHZ CX.PB07..BHZ CX.PB11..BBZ</p>
</dd></dl>
<div class="admonition note" id="output">
<p class="admonition-title">Note</p>
<p><strong>output.*</strong>
<em>Configure the data output.</em></p>
</div>
<dl class="std confval">
<dt class="sig sig-object std" id="confval-output.address">
<span class="sig-name descname"><span class="pre">output.address</span></span><a class="headerlink" href="#confval-output.address" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">localhost:18003</span></code></p>
<p>Type: <em>string</em></p>
<p>Data output URL [[caps|capss]://][user:pass&#64;]host[:port]. This parameter
superseds the host and port parameter of previous versions and takes precedence.</p>
</dd></dl>
<dl class="std confval">
<dt class="sig sig-object std" id="confval-output.host">
<span class="sig-name descname"><span class="pre">output.host</span></span><a class="headerlink" href="#confval-output.host" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">localhost</span></code></p>
<p>Type: <em>string</em></p>
<p>Data output host. Deprecated: Use output.address instead.</p>
</dd></dl>
<dl class="std confval">
<dt class="sig sig-object std" id="confval-output.port">
<span class="sig-name descname"><span class="pre">output.port</span></span><a class="headerlink" href="#confval-output.port" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">18003</span></code></p>
<p>Type: <em>int</em></p>
<p>Data output port. Deprecated: Use output.address instead.</p>
</dd></dl>
<dl class="std confval">
<dt class="sig sig-object std" id="confval-output.bufferSize">
<span class="sig-name descname"><span class="pre">output.bufferSize</span></span><a class="headerlink" href="#confval-output.bufferSize" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">1048576</span></code></p>
<p>Unit: <em>B</em></p>
<p>Type: <em>uint</em></p>
<p>Size (bytes) of the packet buffer</p>
</dd></dl>
<dl class="std confval">
<dt class="sig sig-object std" id="confval-output.backfillingBufferSize">
<span class="sig-name descname"><span class="pre">output.backfillingBufferSize</span></span><a class="headerlink" href="#confval-output.backfillingBufferSize" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">180</span></code></p>
<p>Unit: <em>s</em></p>
<p>Type: <em>uint</em></p>
<p>Length of backfilling buffer. Whenever a gap is detected, records
will be held in a buffer and not sent out. Records are flushed from
front to back if the buffer size is exceeded.</p>
</dd></dl>
<span class="target" id="output-mseed"></span><dl class="std confval">
<dt class="sig sig-object std" id="confval-output.mseed.enable">
<span class="sig-name descname"><span class="pre">output.mseed.enable</span></span><a class="headerlink" href="#confval-output.mseed.enable" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">true</span></code></p>
<p>Type: <em>boolean</em></p>
<p>Enable on-the-fly MiniSeed
encoding. If the encoder does not support the input
type of a packet it will be forwarded. Re encoding of
MiniSEED packets is not supported.</p>
</dd></dl>
<dl class="std confval">
<dt class="sig sig-object std" id="confval-output.mseed.encoding">
<span class="sig-name descname"><span class="pre">output.mseed.encoding</span></span><a class="headerlink" href="#confval-output.mseed.encoding" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">Steim2</span></code></p>
<p>Type: <em>string</em></p>
<p>MiniSEED encoding to use. (Uncompressed, Steim1 or Steim2)</p>
</dd></dl>
<span class="target" id="statuslog"></span><dl class="std confval">
<dt class="sig sig-object std" id="confval-statusLog.enable">
<span class="sig-name descname"><span class="pre">statusLog.enable</span></span><a class="headerlink" href="#confval-statusLog.enable" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">false</span></code></p>
<p>Type: <em>boolean</em></p>
<p>Log information status information e.g.
max bytes buffered</p>
</dd></dl>
<dl class="std confval">
<dt class="sig sig-object std" id="confval-statusLog.flush">
<span class="sig-name descname"><span class="pre">statusLog.flush</span></span><a class="headerlink" href="#confval-statusLog.flush" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">10</span></code></p>
<p>Unit: <em>s</em></p>
<p>Type: <em>uint</em></p>
<p>Flush status every n seconds to disk</p>
</dd></dl>
</section>
<section id="command-line-options">
<h2>Command-Line Options<a class="headerlink" href="#command-line-options" title="Permalink to this heading"></a></h2>
<section id="generic">
<span id="id8"></span><h3>Generic<a class="headerlink" href="#generic" title="Permalink to this heading"></a></h3>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-h">
<span id="cmdoption-help"></span><span class="sig-name descname"><span class="pre">-h</span></span><span class="sig-prename descclassname"></span><span class="sig-prename descclassname"><span class="pre">,</span> </span><span class="sig-name descname"><span class="pre">--help</span></span><span class="sig-prename descclassname"></span><a class="headerlink" href="#cmdoption-h" title="Permalink to this definition"></a></dt>
<dd><p>Show help message.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-V">
<span id="cmdoption-version"></span><span class="sig-name descname"><span class="pre">-V</span></span><span class="sig-prename descclassname"></span><span class="sig-prename descclassname"><span class="pre">,</span> </span><span class="sig-name descname"><span class="pre">--version</span></span><span class="sig-prename descclassname"></span><a class="headerlink" href="#cmdoption-V" title="Permalink to this definition"></a></dt>
<dd><p>Show version information.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-D">
<span id="cmdoption-daemon"></span><span class="sig-name descname"><span class="pre">-D</span></span><span class="sig-prename descclassname"></span><span class="sig-prename descclassname"><span class="pre">,</span> </span><span class="sig-name descname"><span class="pre">--daemon</span></span><span class="sig-prename descclassname"></span><a class="headerlink" href="#cmdoption-D" title="Permalink to this definition"></a></dt>
<dd><p>Run as daemon. This means the application will fork itself
and doesnt need to be started with &amp;.</p>
</dd></dl>
</section>
<section id="verbosity">
<span id="id9"></span><h3>Verbosity<a class="headerlink" href="#verbosity" title="Permalink to this heading"></a></h3>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-verbosity">
<span class="sig-name descname"><span class="pre">--verbosity</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-verbosity" title="Permalink to this definition"></a></dt>
<dd><p>Verbosity level [0..4]. 0:quiet, 1:error, 2:warning, 3:info,
4:debug.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-v">
<span id="cmdoption-v"></span><span class="sig-name descname"><span class="pre">-v</span></span><span class="sig-prename descclassname"></span><span class="sig-prename descclassname"><span class="pre">,</span> </span><span class="sig-name descname"><span class="pre">--v</span></span><span class="sig-prename descclassname"></span><a class="headerlink" href="#cmdoption-v" title="Permalink to this definition"></a></dt>
<dd><p>Increase verbosity level (may be repeated, eg. -vv).</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-q">
<span id="cmdoption-quiet"></span><span class="sig-name descname"><span class="pre">-q</span></span><span class="sig-prename descclassname"></span><span class="sig-prename descclassname"><span class="pre">,</span> </span><span class="sig-name descname"><span class="pre">--quiet</span></span><span class="sig-prename descclassname"></span><a class="headerlink" href="#cmdoption-q" title="Permalink to this definition"></a></dt>
<dd><p>Quiet mode: no logging output.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-s">
<span id="cmdoption-syslog"></span><span class="sig-name descname"><span class="pre">-s</span></span><span class="sig-prename descclassname"></span><span class="sig-prename descclassname"><span class="pre">,</span> </span><span class="sig-name descname"><span class="pre">--syslog</span></span><span class="sig-prename descclassname"></span><a class="headerlink" href="#cmdoption-s" title="Permalink to this definition"></a></dt>
<dd><p>Use syslog logging backend. The output usually goes to
/var/lib/messages.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-l">
<span id="cmdoption-lockfile"></span><span class="sig-name descname"><span class="pre">-l</span></span><span class="sig-prename descclassname"></span><span class="sig-prename descclassname"><span class="pre">,</span> </span><span class="sig-name descname"><span class="pre">--lockfile</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-l" title="Permalink to this definition"></a></dt>
<dd><p>Path to lock file.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-console">
<span class="sig-name descname"><span class="pre">--console</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-console" title="Permalink to this definition"></a></dt>
<dd><p>Send log output to stdout.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-debug">
<span class="sig-name descname"><span class="pre">--debug</span></span><span class="sig-prename descclassname"></span><a class="headerlink" href="#cmdoption-debug" title="Permalink to this definition"></a></dt>
<dd><p>Execute in debug mode.
Equivalent to --verbosity=4 --console=1 .</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-log-file">
<span class="sig-name descname"><span class="pre">--log-file</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-log-file" title="Permalink to this definition"></a></dt>
<dd><p>Use alternative log file.</p>
</dd></dl>
</section>
<section id="records">
<span id="id10"></span><h3>Records<a class="headerlink" href="#records" title="Permalink to this heading"></a></h3>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-record-driver-list">
<span class="sig-name descname"><span class="pre">--record-driver-list</span></span><span class="sig-prename descclassname"></span><a class="headerlink" href="#cmdoption-record-driver-list" title="Permalink to this definition"></a></dt>
<dd><p>List all supported record stream drivers.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-I">
<span id="cmdoption-record-url"></span><span class="sig-name descname"><span class="pre">-I</span></span><span class="sig-prename descclassname"></span><span class="sig-prename descclassname"><span class="pre">,</span> </span><span class="sig-name descname"><span class="pre">--record-url</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-I" title="Permalink to this definition"></a></dt>
<dd><p>The recordstream source URL, format:
[<a class="reference external" href="service://">service://</a>]location[#type].
&quot;service&quot; is the name of the recordstream driver
which can be queried with &quot;--record-driver-list&quot;.
If &quot;service&quot; is not given, &quot;<a class="reference external" href="file://">file://</a>&quot; is
used.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-record-file">
<span class="sig-name descname"><span class="pre">--record-file</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-record-file" title="Permalink to this definition"></a></dt>
<dd><p>Specify a file as record source.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-record-type">
<span class="sig-name descname"><span class="pre">--record-type</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-record-type" title="Permalink to this definition"></a></dt>
<dd><p>Specify a type for the records being read.</p>
</dd></dl>
</section>
<section id="id11">
<span id="id12"></span><h3>Output<a class="headerlink" href="#id11" title="Permalink to this heading"></a></h3>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-O">
<span id="cmdoption-output"></span><span class="sig-name descname"><span class="pre">-O</span></span><span class="sig-prename descclassname"></span><span class="sig-prename descclassname"><span class="pre">,</span> </span><span class="sig-name descname"><span class="pre">--output</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-O" title="Permalink to this definition"></a></dt>
<dd><p>Overrides configuration parameter <a class="reference internal" href="#confval-output.address"><code class="xref std std-confval docutils literal notranslate"><span class="pre">output.address</span></code></a>.</p>
<p>This is the CAPS server which shall receive the data.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-agent">
<span class="sig-name descname"><span class="pre">--agent</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-agent" title="Permalink to this definition"></a></dt>
<dd><p>Sets the agent string. Allows the server to identify the
application that sends data.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-b">
<span id="cmdoption-buffer-size"></span><span class="sig-name descname"><span class="pre">-b</span></span><span class="sig-prename descclassname"></span><span class="sig-prename descclassname"><span class="pre">,</span> </span><span class="sig-name descname"><span class="pre">--buffer-size</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-b" title="Permalink to this definition"></a></dt>
<dd><p>Size (bytes) of the journal buffer. If the value ist
exceeded, a synchronization of the journal is forced.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-backfilling">
<span class="sig-name descname"><span class="pre">--backfilling</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-backfilling" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">0</span></code></p>
<p>Buffer size in seconds for backfilling gaps.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-mseed">
<span class="sig-name descname"><span class="pre">--mseed</span></span><span class="sig-prename descclassname"></span><a class="headerlink" href="#cmdoption-mseed" title="Permalink to this definition"></a></dt>
<dd><p>Enable on-the-fly miniSEED encoding. If the encoder does not
support the input type of a packet, it will be forwarded.
Re-encoding of miniSEED packets is not supported.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-encoding">
<span class="sig-name descname"><span class="pre">--encoding</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-encoding" title="Permalink to this definition"></a></dt>
<dd><p>miniSEED encoding to use: Uncompressed, Steim1 or Steim2.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-rec-len">
<span class="sig-name descname"><span class="pre">--rec-len</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-rec-len" title="Permalink to this definition"></a></dt>
<dd><p>miniSEED record length expressed as a power of
2. A 512 byte record would be 9.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-max-future-endtime">
<span class="sig-name descname"><span class="pre">--max-future-endtime</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-max-future-endtime" title="Permalink to this definition"></a></dt>
<dd><p>Maximum allowed relative end time for packets. If the packet
end time is greater than the current time plus this value,
the packet will be discarded. By default this value is set
to 120 seconds.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-dump-packets">
<span class="sig-name descname"><span class="pre">--dump-packets</span></span><span class="sig-prename descclassname"></span><a class="headerlink" href="#cmdoption-dump-packets" title="Permalink to this definition"></a></dt>
<dd><p>Dump packets to stdout.</p>
</dd></dl>
</section>
<section id="id13">
<span id="id14"></span><h3>Journal<a class="headerlink" href="#id13" title="Permalink to this heading"></a></h3>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-j">
<span id="cmdoption-journal"></span><span class="sig-name descname"><span class="pre">-j</span></span><span class="sig-prename descclassname"></span><span class="sig-prename descclassname"><span class="pre">,</span> </span><span class="sig-name descname"><span class="pre">--journal</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-j" title="Permalink to this definition"></a></dt>
<dd><p>File to store stream states. Use an empty string to log to
stdout.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-flush">
<span class="sig-name descname"><span class="pre">--flush</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-flush" title="Permalink to this definition"></a></dt>
<dd><p>Flush stream states to disk every n seconds.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-wait-for-ack">
<span class="sig-name descname"><span class="pre">--wait-for-ack</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-wait-for-ack" title="Permalink to this definition"></a></dt>
<dd><p>Wait when a sync has been forced, up to n seconds.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-w">
<span id="cmdoption-wait-for-last-ack"></span><span class="sig-name descname"><span class="pre">-w</span></span><span class="sig-prename descclassname"></span><span class="sig-prename descclassname"><span class="pre">,</span> </span><span class="sig-name descname"><span class="pre">--wait-for-last-ack</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-w" title="Permalink to this definition"></a></dt>
<dd><p>Wait on shutdown to receive acknownledgement messages, up to
the given number of seconds.</p>
</dd></dl>
</section>
<section id="status">
<span id="id15"></span><h3>Status<a class="headerlink" href="#status" title="Permalink to this heading"></a></h3>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-status-log">
<span class="sig-name descname"><span class="pre">--status-log</span></span><span class="sig-prename descclassname"></span><a class="headerlink" href="#cmdoption-status-log" title="Permalink to this definition"></a></dt>
<dd><p>Log information status information, e.g., max bytes buffered.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-status-flush">
<span class="sig-name descname"><span class="pre">--status-flush</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-status-flush" title="Permalink to this definition"></a></dt>
<dd><p>Flush status every n seconds to disk.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-stop">
<span class="sig-name descname"><span class="pre">--stop</span></span><span class="sig-prename descclassname"></span><a class="headerlink" href="#cmdoption-stop" title="Permalink to this definition"></a></dt>
<dd><p>Stop processing when data acquisition is finished. The
finished signal depends on data source.</p>
</dd></dl>
</section>
<section id="id16">
<span id="id17"></span><h3>Streams<a class="headerlink" href="#id16" title="Permalink to this heading"></a></h3>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-begin">
<span class="sig-name descname"><span class="pre">--begin</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-begin" title="Permalink to this definition"></a></dt>
<dd><p>Start time of data time window.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-end">
<span class="sig-name descname"><span class="pre">--end</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-end" title="Permalink to this definition"></a></dt>
<dd><p>End time of data time window.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-map">
<span class="sig-name descname"><span class="pre">--map</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-map" title="Permalink to this definition"></a></dt>
<dd><p>Stream map file.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-expr">
<span class="sig-name descname"><span class="pre">--expr</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-expr" title="Permalink to this definition"></a></dt>
<dd><p>Mathematical expression to be applied.</p>
</dd></dl>
</section>
<section id="test">
<span id="id18"></span><h3>Test<a class="headerlink" href="#test" title="Permalink to this heading"></a></h3>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-gain-in">
<span class="sig-name descname"><span class="pre">--gain-in</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-gain-in" title="Permalink to this definition"></a></dt>
<dd><p>Gain that is applied to the input values.</p>
</dd></dl>
<dl class="std option">
<dt class="sig sig-object std" id="cmdoption-gain-out">
<span class="sig-name descname"><span class="pre">--gain-out</span></span><span class="sig-prename descclassname"> <span class="pre">arg</span></span><a class="headerlink" href="#cmdoption-gain-out" title="Permalink to this definition"></a></dt>
<dd><p>Gain that is applied to the output values.</p>
</dd></dl>
</section>
</section>
</section>
<div id="anchors-bottom"></div>
</div>
<div class="sidebar" role="navigation" aria-label="main navigation">
<div id="anchors-top"></div>
<div id="anchors" class="content">
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
<div>
<h3><a href="../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">sproc2caps</a><ul>
<li><a class="reference internal" href="#description">Description</a></li>
<li><a class="reference internal" href="#setup">Setup</a><ul>
<li><a class="reference internal" href="#streams">Streams</a></li>
<li><a class="reference internal" href="#filtering">Filtering</a></li>
<li><a class="reference internal" href="#expressions">Expressions</a></li>
<li><a class="reference internal" href="#rename-streams">Rename Streams</a></li>
<li><a class="reference internal" href="#time-windows">Time windows</a></li>
</ul>
</li>
<li><a class="reference internal" href="#examples">Examples</a></li>
<li><a class="reference internal" href="#module-configuration">Module Configuration</a></li>
<li><a class="reference internal" href="#command-line-options">Command-Line Options</a><ul>
<li><a class="reference internal" href="#generic">Generic</a></li>
<li><a class="reference internal" href="#verbosity">Verbosity</a></li>
<li><a class="reference internal" href="#records">Records</a></li>
<li><a class="reference internal" href="#id11">Output</a></li>
<li><a class="reference internal" href="#id13">Journal</a></li>
<li><a class="reference internal" href="#status">Status</a></li>
<li><a class="reference internal" href="#id16">Streams</a></li>
<li><a class="reference internal" href="#test">Test</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="slink2caps.html"
title="previous chapter">slink2caps</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="test2caps.html"
title="next chapter">test2caps</a></p>
</div>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../_sources/apps/sproc2caps.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="container">
<div class="content">
Release <b></b> version <b>2025.254#f0c77b29e</b>
<div class="copyright">
&copy; Copyright <a href="https://www.gempa.de">2013, gempa GmbH.</a>
</div>
</div>
</div>
</div>
</body>
</html>