You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

841 lines
51 KiB
HTML

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE html>
<html >
<head>
<meta charset="utf-8" />
<title>ql2sc &#8212; SeisComP Release documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/seiscomp.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../_static/graphviz.css" />
<script type="text/javascript" src="../_static/seiscomp.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="scalert" href="scalert.html" />
<link rel="prev" title="fdsnws" href="fdsnws.html" />
</head>
<body>
<div class="header">
<div class="container">
<div class="brand">
<img class="logo" src="../_static/brands/seiscomp/text/white.svg"/>
<!-- span class="title">SeisComP Release</span -->
<span class="version">5.3.0</span>
</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="scalert.html" title="scalert"
accesskey="N">
next
</a>
</li>
<li class="right">
<a href="fdsnws.html" title="fdsnws"
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="../modules.html" >Modules</a>
</li>
<li class="nav-item nav-item-2">
<a href="../toc/utilities.html" accesskey="U">Utilities</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="fitted content" id="anchors-container">
<div class="body" role="main">
<div class="section" id="ql2sc">
<span id="id1"></span><h1>ql2sc<a class="headerlink" href="#ql2sc" title="Permalink to this headline"></a></h1>
<p><strong>QuakeLink (gempa GmbH) to SeisComP event parameter exchange.</strong></p>
<div class="section" id="description">
<h2>Description<a class="headerlink" href="#description" title="Permalink to this headline"></a></h2>
<p>ql2sc manages the import of SeisComP objects from one or several QuakeLink servers
into a SeisComP system in real time. Like <a class="reference internal" href="scimex.html#scimex"><span class="std std-ref">scimex</span></a> but contrary to
<a class="reference internal" href="scimport.html#scimport"><span class="std std-ref">scimport</span></a> the exchange of the SeisComP objects is event based. This means no
messages will be exchanged until the exporting system has produced an event.</p>
<p>The user may control at various levels which information to import. Whenever
possible server-side filters should be preferred to reduce both the network
bandwidth consumption as well as the CPU and memory utilization on the local
machine.</p>
</div>
<div class="section" id="server-side-event-filter">
<span id="ql2sc-event-filter"></span><h2>Server-Side Event Filter<a class="headerlink" href="#server-side-event-filter" title="Permalink to this headline"></a></h2>
<p>QuakeLink provides a filter syntax similar to SQL-WHERE clauses which may be
used to filter interesting events on the server side:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>clause := condition[ AND|OR [(]clause[)]]
condition := MAG|DEPTH|LAT|LON|PHASES|OTIME|UPDATED [op float|time]|[IS [NOT] NULL]
op := =|&amp;gt;|&amp;gt;=|&amp;lt;|&amp;lt;=|eq|gt|ge|lt|ge
time := %Y,%m,%d[,%H,%M,%S,%f]
</pre></div>
</div>
<p>E.g. the following filter string would select only those events with a minimum
magnitude of 6, detected by at least 10 stations and which are shallower than
100km:</p>
<div class="highlight-sql notranslate"><div class="highlight"><pre><span></span><span class="n">MAG</span> <span class="o">&gt;=</span> <span class="mi">6</span><span class="p">.</span><span class="mi">0</span> <span class="k">AND</span> <span class="n">PHASES</span> <span class="o">&gt;=</span> <span class="mi">10</span> <span class="k">AND</span> <span class="n">DEPTH</span> <span class="o">&lt;</span> <span class="mi">100</span>
</pre></div>
</div>
</div>
<div class="section" id="server-side-object-filter">
<span id="ql2sc-object-filter"></span><h2>Server-Side Object Filter<a class="headerlink" href="#server-side-object-filter" title="Permalink to this headline"></a></h2>
<p>QuakeLink provides a coarse object filter for the most relevant SeisComP objects:</p>
<table class="docutils align-default">
<colgroup>
<col style="width: 16%" />
<col style="width: 84%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Option</p></th>
<th class="head"><p>Impact</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>picks</p></td>
<td><p>include picks</p></td>
</tr>
<tr class="row-odd"><td><p>amplitudes</p></td>
<td><p>include amplitudes</p></td>
</tr>
<tr class="row-even"><td><p>arrivals</p></td>
<td><p>include origin arrivals</p></td>
</tr>
<tr class="row-odd"><td><p>staMags</p></td>
<td><p>include origin station magnitudes</p></td>
</tr>
<tr class="row-even"><td><p>staMts</p></td>
<td><p>include moment tensor station contributions and phase settings</p></td>
</tr>
<tr class="row-odd"><td><p>preferred</p></td>
<td><p>include only preferred origin and magnitude information</p></td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="local-object-filter-and-routing">
<span id="routing"></span><h2>Local Object Filter and Routing<a class="headerlink" href="#local-object-filter-and-routing" title="Permalink to this headline"></a></h2>
<p>Subsequent to the server-side filters a routing table defines which objects to
import and to which message group to send them. Depending on the <cite>SeisComP</cite> modules
listening to the specified message groups an object may be further processed.
Typically no modules (other than <a class="reference internal" href="scmaster.html#scmaster"><span class="std std-ref">scmaster</span></a>) is connected to the
<code class="docutils literal notranslate"><span class="pre">IMPORT_GROUP</span></code> so that objects sent to this group are just stored to the
database. If an object should be discarded, the special group identifier <code class="docutils literal notranslate"><span class="pre">NULL</span></code>
may be used.</p>
<p>The routing table is defined as a comma-separated list of
<code class="docutils literal notranslate"><span class="pre">object</span> <span class="pre">name:group</span> <span class="pre">name</span></code> pairs. Also the routing rules are inherited
recursively within the SeisComP object tree. If no explicit rule exists for an
object, the routing of its parent is evaluated up to the <code class="docutils literal notranslate"><span class="pre">EventParameters</span></code>
root node.</p>
<div class="section" id="examples">
<h3>Examples<a class="headerlink" href="#examples" title="Permalink to this headline"></a></h3>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>EventParameters:IMPORT_GROUP
</pre></div>
</div>
<p>Imports everything</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>EventParameters:IMPORT_GROUP,Comment:NULL
</pre></div>
</div>
<p>Imports everything except comments</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>Origin:LOCATION,StationMagnitude:MAGNITUDE,Magnitude:MAGNITUDE
</pre></div>
</div>
<p>Sends origins and its children arrival, origin uncertainty to the <code class="docutils literal notranslate"><span class="pre">LOCATION</span></code>
group but the magnitude children to the <code class="docutils literal notranslate"><span class="pre">MAGNITUDE</span></code> group. Skips picks,
amplitudes, focal mechanisms and events.</p>
</div>
<div class="section" id="default-routing-table">
<h3>Default routing table<a class="headerlink" href="#default-routing-table" title="Permalink to this headline"></a></h3>
<p>The default use case of ql2sc is to import earthquake solutions from other data
centers or in-house redundant SeisComP systems. The intention is not to
reprocess the solution but to add them to the local catalog.</p>
<p>By default we route:</p>
<ul class="simple">
<li><p>Picks and Amplitudes to the <code class="docutils literal notranslate"><span class="pre">IMPORT_GROUP</span></code> group to prevent processing by
the local locator and amplitude processor</p></li>
<li><p>Origins (including its StationMagnitude and Magnitude children) to the
<code class="docutils literal notranslate"><span class="pre">LOCATION</span></code> to allow event association.</p></li>
<li><p>FocalMechanisms to the <code class="docutils literal notranslate"><span class="pre">FOCMECH</span></code> group to trigger processing by specialized
applications, e.g. graphical user interfaces for strong motion analysis or
tsunami risk assessment.</p></li>
</ul>
<p>We dont route events at all. With the help of <a class="reference internal" href="scevent.html#scevent"><span class="std std-ref">scevent</span></a> locations are
either associated to existing events or will create new events with local
settings.</p>
<p>We dont route StationMagnitudes and Magnitude to the <code class="docutils literal notranslate"><span class="pre">MAGNITDUE</span></code> group
because <a class="reference internal" href="scmag.html#scmag"><span class="std std-ref">scmag</span></a> subscribes to <code class="docutils literal notranslate"><span class="pre">LOCATION</span></code> and <code class="docutils literal notranslate"><span class="pre">MAGNITUDE</span></code>. Separated
groups might lead to duplicated magnitude types in case a manual magnitude
solution is imported. In this case the foreign Origin with its Magnitudes would
be split into at least two messages, the first one containing the Origin, the
second one the Magnitude. The Origin message immediately triggers magnitude
calculation, potentially for a magnitude type which is received with the second
message.</p>
<p>The default routing table is set as given in <a class="reference internal" href="#confval-host.$name.routingTable"><code class="xref std std-confval docutils literal notranslate"><span class="pre">host.$name.routingTable</span></code></a>.</p>
</div>
</div>
<div class="section" id="agency-list-filter">
<span id="agency-filter"></span><h2>Agency List Filter<a class="headerlink" href="#agency-list-filter" title="Permalink to this headline"></a></h2>
<p>In addition to the local object filter the user may choose to accept only those
objects originating from a set of trusted agencies. If at least one agency is
defined in the <code class="docutils literal notranslate"><span class="pre">processing.whitelist.agencies</span></code> or
<code class="docutils literal notranslate"><span class="pre">processing.blacklist.agencies</span></code> configuration option, then the
<code class="docutils literal notranslate"><span class="pre">creationInfo.agencyID</span></code> of amplitudes, arrivals, comments, events, focal
mechanisms, magnitudes, moment tensors, origins, picks and station magnitudes is
evaluated. Objects with unmatched or unset agency information are filtered out.
If objects with unset agency ID should match, then empty string <code class="docutils literal notranslate"><span class="pre">&quot;&quot;</span></code> has to be
added to the white list.</p>
<p>The agency filter is applied on remote as well as local objects. In this way
remote objects may be excluded from import and local objects my be protected
from overriding or removing. Also the filter is applied recursively. If parent
object (e.g. an origin) is filtered out, all of its children (e.g. magnitudes)
are also skipped even if they carry a different agency ID.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>The agency white list filter might be essential to avoid circular event
updates between cross-connected SeisComP systems.</p>
</div>
</div>
<div class="section" id="publicid-prefix-filter">
<span id="publicid-filter"></span><h2>PublicID Prefix Filter<a class="headerlink" href="#publicid-prefix-filter" title="Permalink to this headline"></a></h2>
<p>In addition to the <a class="reference internal" href="#agency-filter"><span class="std std-ref">agency filter</span></a> incoming or local objects
can be skipped by checking their publicID prefix. It behaves similar to the
<a class="reference internal" href="#agency-filter"><span class="std std-ref">agency filter</span></a> but checks the <code class="docutils literal notranslate"><span class="pre">publicID</span></code> attribute rather
than the <code class="docutils literal notranslate"><span class="pre">creationInfo.agencyID</span></code> attribute.
Prefixes can be configure as white- or blacklist with
<code class="docutils literal notranslate"><span class="pre">processing.whitelist.publicIDs</span> <span class="pre">=</span> <span class="pre">...</span></code> and
<code class="docutils literal notranslate"><span class="pre">processing.blacklist.publicIDs</span> <span class="pre">=</span> <span class="pre">...</span></code>.</p>
</div>
<div class="section" id="workflow">
<h2>Workflow<a class="headerlink" href="#workflow" title="Permalink to this headline"></a></h2>
<p>Each event update received from a QuakeLink host is parsed and analyzed for
differences to the local database. The comparison starts at the level of the
top-level elements in the following order: picks, amplitudes, origins, focal
mechanisms, events.</p>
<p>For each top-level element the object tree is traversed in a depth-first search
order. Objects on the same level are processed in the order of their appearance.
The differences are collected as a list of notifier objects with the following
operation types:</p>
<table class="docutils align-default">
<colgroup>
<col style="width: 9%" />
<col style="width: 91%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Type</p></th>
<th class="head"><p>Description</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>ADD</p></td>
<td><p>The object does not exist locally</p></td>
</tr>
<tr class="row-odd"><td><p>UPDATE</p></td>
<td><p>The object does exist locally but differs from the remote one</p></td>
</tr>
<tr class="row-even"><td><p>REMOVE</p></td>
<td><p>The object exist locally but not remotely</p></td>
</tr>
</tbody>
</table>
<p>The <code class="docutils literal notranslate"><span class="pre">ADD</span></code> and <code class="docutils literal notranslate"><span class="pre">REMOVE</span></code> operation always generates notifies of the same type
for all children of the current object. <code class="docutils literal notranslate"><span class="pre">ADD</span></code> notifiers are collected top-down,
<code class="docutils literal notranslate"><span class="pre">REMOVE</span></code> notifiers are collected bottom-up.</p>
<p>Because the order of child objects is arbitrary, e.g. the arrivals of an origin,
each object on the remote side has to be found in the set of local objects. For
public objects (e.g. origins, magnitudes, magnitudes..), the <code class="docutils literal notranslate"><span class="pre">publicID</span></code> property
is used for comparison. All other objects are compared by looking at their index
properties. For e.g. arrivals this is the <code class="docutils literal notranslate"><span class="pre">pickID</span></code> property, for comments the
<code class="docutils literal notranslate"><span class="pre">id</span></code> property.</p>
<p>Ones all notifiers are collected they are send to the local messaging system.
For performance reasons and because of the processing logic of listening <cite>SeisComP</cite>
modules ql2sc tries to batch as many notifiers as possible into one notifier
message. A separate notifier message is created if the target message group
changes between successive notifiers or if the configurable <a class="reference internal" href="scardac.html#confval-batchSize"><code class="xref std std-confval docutils literal notranslate"><span class="pre">batchSize</span></code></a>
limit is reached.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Care must be taken when configuring the <code class="docutils literal notranslate"><span class="pre">batchSize</span></code> limit. If the value
is to big the overall message size limit (default: 1MB) may be exceeded
resulting in an undeliverable message. On the other hand a much to small
value will create unwanted results in the <cite>SeisComP</cite> processing chain. If for
instance picks are routed to the <code class="docutils literal notranslate"><span class="pre">PICK</span></code> group and the pick set is split
into several notifier messages the local <a class="reference internal" href="scautoloc.html#scautoloc"><span class="std std-ref">scautoloc</span></a> might create
locations based on an incomplete dataset.</p>
</div>
</div>
<div class="section" id="event-attributes">
<h2>Event Attributes<a class="headerlink" href="#event-attributes" title="Permalink to this headline"></a></h2>
<p>It might be desirable to synchronize event attributes set at the source with
the local system. In particular the event type, the type uncertainty, event
descriptions and comments might be of interest. Because it is not advisable
to route events and let <a class="reference internal" href="scevent.html#scevent"><span class="std std-ref">scevent</span></a> associate imported origins it can
happen that the imported event ID is different from the event ID of the local
system. The input host configuration parameter <code class="xref std std-confval docutils literal notranslate"><span class="pre">syncEventAttributes</span></code>
controls that behaviour. It is set to true by default which means that imported
event attributes are going to be imported as well. ql2sc does not update
directly the attributes but commandates scevent in as many cases as possible
to do so. To find the matching local event it takes the first occurrence which
has associated the currently imported preferred origin.</p>
<div class="section" id="limitations">
<h3>Limitations<a class="headerlink" href="#limitations" title="Permalink to this headline"></a></h3>
<p>There are limitations to this process to avoid infinite loops when cross
connecting two systems. Prior to sending the commands to scevent to change a
particular attribute ql2sc checks if that attribute has been set already by
another module (via JournalEntry database table). If not, then ql2sc is allowed
to request an attribute change otherwise not. To illustrate the issue take the
following example:</p>
<p>scolv connected to system <code class="docutils literal notranslate"><span class="pre">A</span></code> changes the event type to earthquake. ql2sc
of system <code class="docutils literal notranslate"><span class="pre">B</span></code> checks if the event type of the local event has been changed
already which is not the case and it requests that change. System <code class="docutils literal notranslate"><span class="pre">A</span></code>
changes the event type again to unset. ql2sc of system <code class="docutils literal notranslate"><span class="pre">B</span></code> notices that
someone has already changed the event type and it was ql2sc itself. It requests
again a change.</p>
<p>scolv connected to system <code class="docutils literal notranslate"><span class="pre">B</span></code> changes the event type to earthquake again.
ql2sc of system <code class="docutils literal notranslate"><span class="pre">A</span></code> notices that <code class="docutils literal notranslate"><span class="pre">scolv&#64;A</span></code> has already changed the
event type and ignores the request.</p>
<p>That simple case would not create an infinite loop even if <code class="docutils literal notranslate"><span class="pre">ql2sc&#64;A</span></code> would
accept the last change. The situation changes immediately if two subsequent
attribute changes are being received by <code class="docutils literal notranslate"><span class="pre">ql2sc&#64;B</span></code> while both of them are
already applied on system <code class="docutils literal notranslate"><span class="pre">A</span></code>. <code class="docutils literal notranslate"><span class="pre">ql2sc&#64;B</span></code> would “restore” the old state due
to the first received update and then apply the “final” state due to the
second update. Each update triggers again an update at system <code class="docutils literal notranslate"><span class="pre">A</span></code> and the
states start flapping. Without the described check there wouldnt be a well
defined exit condition.</p>
</div>
</div>
<div class="section" id="caveats">
<h2>Caveats<a class="headerlink" href="#caveats" title="Permalink to this headline"></a></h2>
<p>Specific combinations of remote and local object filters may result in the loss
of data. If for instance origins are imported from system <code class="docutils literal notranslate"><span class="pre">A</span></code> to <code class="docutils literal notranslate"><span class="pre">B</span></code> and
additional magnitudes for the received origins are calculated on <code class="docutils literal notranslate"><span class="pre">B</span></code>, care must
be taken. Without protection a new event update containing the same origin will
<code class="docutils literal notranslate"><span class="pre">REMOVE</span></code> all newly calculated magnitudes on <code class="docutils literal notranslate"><span class="pre">B</span></code> since they are not included
in the magnitude set sent by <code class="docutils literal notranslate"><span class="pre">A</span></code>.</p>
<p>To avoid losing these local magnitudes one may decide to block magnitudes from
import by routing them to <code class="docutils literal notranslate"><span class="pre">NULL</span></code>. If magnitudes from <code class="docutils literal notranslate"><span class="pre">A</span></code> and from <code class="docutils literal notranslate"><span class="pre">B</span></code>
should be available, an <a class="reference internal" href="#agency-filter"><span class="std std-ref">agency filter</span></a> or
<a class="reference internal" href="#publicid-filter"><span class="std std-ref">publicID filter</span></a> may be defined.</p>
<p>Make sure <code class="docutils literal notranslate"><span class="pre">A</span></code> and <code class="docutils literal notranslate"><span class="pre">B</span></code> use either distinct agency IDs or distinct publicID
patterns and add the agency ID of <code class="docutils literal notranslate"><span class="pre">B</span></code> to <code class="docutils literal notranslate"><span class="pre">processing.blacklist.agencies</span></code> or
the publicID prefix of <code class="docutils literal notranslate"><span class="pre">B</span></code> to <code class="docutils literal notranslate"><span class="pre">processing.blacklist.publicIDs</span></code>.</p>
</div>
<div class="section" id="module-configuration">
<span id="ql2sc-configuration"></span><h2>Module Configuration<a class="headerlink" href="#module-configuration" title="Permalink to this headline"></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/ql2sc.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/ql2sc.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/ql2sc.cfg</span></code></div>
</div>
<p>ql2sc inherits <a class="reference internal" href="global.html#global-configuration"><span class="std std-ref">global options</span></a>.</p>
<dl class="confval">
<dt id="confval-backLog">
<code class="sig-name descname">backLog</code><a class="headerlink" href="#confval-backLog" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">1800</span></code></p>
<p>Type: <em>int</em></p>
<p>Unit: <em>s</em></p>
<p>Number of seconds to fetch missed updates on start up.</p>
</dd></dl>
<dl class="confval">
<dt id="confval-cacheSize">
<code class="sig-name descname">cacheSize</code><a class="headerlink" href="#confval-cacheSize" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">5000</span></code></p>
<p>Type: <em>int</em></p>
<p>Number of public objects to cache.</p>
</dd></dl>
<dl class="confval">
<dt id="confval-batchSize">
<code class="sig-name descname">batchSize</code><a class="headerlink" href="#confval-batchSize" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">2000</span></code></p>
<p>Type: <em>int</em></p>
<p>Maximum number of notifiers to batch in one message. If set
to 0 no size limit is enforced. Make sure to not hit the
overall message size limited of 16MiB which is enforced by
the messaging system.</p>
</dd></dl>
<dl class="confval">
<dt id="confval-eventAssociationTimeout">
<code class="sig-name descname">eventAssociationTimeout</code><a class="headerlink" href="#confval-eventAssociationTimeout" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">10</span></code></p>
<p>Type: <em>int</em></p>
<p>Unit: <em>s</em></p>
<p>If event synchronisation is enabled and an incoming origin
is not yet associated with an event on the target machine,
then this timeout defines the maximum number of seconds to
wait for an association.</p>
</dd></dl>
<dl class="confval">
<dt id="confval-hosts">
<code class="sig-name descname">hosts</code><a class="headerlink" href="#confval-hosts" title="Permalink to this definition"></a></dt>
<dd><p>Type: <em>list:string</em></p>
<p>Registration of the host profiles defining the connection
parameters to the QuakeLink hosts.</p>
</dd></dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p><strong>host.*</strong>
<em>Definition of host profiles. For each host profile a connection</em>
<em>to one QuakeLink server can established. The profiles must be registered</em>
<em>in hosts to apply them.</em></p>
</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p><strong>host.$name.*</strong>
<em>Provide the connection parameters to one QuakeLink server.</em>
$name is a placeholder for the name to be used and needs to be added to <a class="reference internal" href="#confval-hosts"><code class="xref std std-confval docutils literal notranslate"><span class="pre">hosts</span></code></a> to become active.</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="nv">hosts</span> <span class="o">=</span> a,b
host.a.value1 <span class="o">=</span> ...
host.b.value1 <span class="o">=</span> ...
<span class="c1"># c is not active because it has not been added</span>
<span class="c1"># to the list of hosts</span>
host.c.value1 <span class="o">=</span> ...
</pre></div>
</div>
</div>
<dl class="confval">
<dt id="confval-host.$name.url">
<code class="sig-name descname">host.$name.url</code><a class="headerlink" href="#confval-host.$name.url" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">ql://localhost:18010</span></code></p>
<p>Type: <em>string</em></p>
<p>URL of the QuakeLink service, the scheme qls enables SSL.</p>
<p>Format: [ql[s]://][user:pwd&#64;][host][:port].</p>
<p>If set to an empty string the application will run without any QuakeLink connection attempt.</p>
</dd></dl>
<dl class="confval">
<dt id="confval-host.$name.gzip">
<code class="sig-name descname">host.$name.gzip</code><a class="headerlink" href="#confval-host.$name.gzip" 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>Enable/disable GZip (GNU zip) compression.</p>
</dd></dl>
<dl class="confval">
<dt id="confval-host.$name.native">
<code class="sig-name descname">host.$name.native</code><a class="headerlink" href="#confval-host.$name.native" 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>Request native data instead of XML format.
Native data export may be disabled on some hosts.</p>
</dd></dl>
<dl class="confval">
<dt id="confval-host.$name.syncEventAttributes">
<code class="sig-name descname">host.$name.syncEventAttributes</code><a class="headerlink" href="#confval-host.$name.syncEventAttributes" 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>Try to update the event attributes of the target event
with the attributes of the source event which includes
event type and event certainty. It will not import
events but tries to find the associated event of the
input preferred origin at the target system and will
update the event attributes via journaling.</p>
</dd></dl>
<dl class="confval">
<dt id="confval-host.$name.keepAlive">
<code class="sig-name descname">host.$name.keepAlive</code><a class="headerlink" href="#confval-host.$name.keepAlive" 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>Request server to send keep alive message every 30s to
prevent connection reset by firewalls on long idle
periods. If activated the client will reset the
connection if no alive message is received within 60s.</p>
</dd></dl>
<dl class="confval">
<dt id="confval-host.$name.filter">
<code class="sig-name descname">host.$name.filter</code><a class="headerlink" href="#confval-host.$name.filter" title="Permalink to this definition"></a></dt>
<dd><p>Type: <em>string</em></p>
<p>SQL like WHERE clause to filter the result set.</p>
<p>clause := condition[ AND|OR [(]clause[)]] __
condition := MAG|DEPTH|LAT|LON|PHASES|OTIME|UPDATED [op float|time]|[IS [NOT] NULL] __
op := =|&gt;|&gt;=|&lt;|&lt;=|eq|gt|ge|lt|ge __
time := %Y,%m,%d[,%H,%M,%S,%f]</p>
</dd></dl>
<dl class="confval">
<dt id="confval-host.$name.routingTable">
<code class="sig-name descname">host.$name.routingTable</code><a class="headerlink" href="#confval-host.$name.routingTable" title="Permalink to this definition"></a></dt>
<dd><p>Default: <code class="docutils literal notranslate"><span class="pre">Pick:IMPORT_GROUP,Amplitude:IMPORT_GROUP,FocalMechanism:EVENT,Origin:EVENT</span></code></p>
<p>Type: <em>list:string</em></p>
<p>Map datamodel class names to messaging groups. For unmapped objects
the mapping of their parent objects is evaluated recursively. Objects
may be excluded by mapping them to NULL.</p>
</dd></dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p><strong>host.$name.data.*</strong>
<em>Specify the XML components to fetch.</em>
<em>Note: These options are not used if native data is requested.</em></p>
</div>
<dl class="confval">
<dt id="confval-host.$name.data.picks">
<code class="sig-name descname">host.$name.data.picks</code><a class="headerlink" href="#confval-host.$name.data.picks" 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>Include picks</p>
</dd></dl>
<dl class="confval">
<dt id="confval-host.$name.data.amplitudes">
<code class="sig-name descname">host.$name.data.amplitudes</code><a class="headerlink" href="#confval-host.$name.data.amplitudes" 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>Include amplitudes</p>
</dd></dl>
<dl class="confval">
<dt id="confval-host.$name.data.arrivals">
<code class="sig-name descname">host.$name.data.arrivals</code><a class="headerlink" href="#confval-host.$name.data.arrivals" 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>Include origin arrivals</p>
</dd></dl>
<dl class="confval">
<dt id="confval-host.$name.data.staMags">
<code class="sig-name descname">host.$name.data.staMags</code><a class="headerlink" href="#confval-host.$name.data.staMags" 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>Include origin station magnitudes</p>
</dd></dl>
<dl class="confval">
<dt id="confval-host.$name.data.staMts">
<code class="sig-name descname">host.$name.data.staMts</code><a class="headerlink" href="#confval-host.$name.data.staMts" 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>Include moment tensor station contributions and phase settings</p>
</dd></dl>
<dl class="confval">
<dt id="confval-host.$name.data.preferred">
<code class="sig-name descname">host.$name.data.preferred</code><a class="headerlink" href="#confval-host.$name.data.preferred" 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>Include only preferred origin and magnitude information</p>
</dd></dl>
<dl class="confval">
<dt id="confval-processing.blacklist.publicIDs">
<code class="sig-name descname">processing.blacklist.publicIDs</code><a class="headerlink" href="#confval-processing.blacklist.publicIDs" title="Permalink to this definition"></a></dt>
<dd><p>Type: <em>list:string</em></p>
<p>Defines a whitelist of publicID prefixes that are
allowed for processing. Separate items by comma.</p>
</dd></dl>
<dl class="confval">
<dt id="confval-processing.whitelist.publicIDs">
<code class="sig-name descname">processing.whitelist.publicIDs</code><a class="headerlink" href="#confval-processing.whitelist.publicIDs" title="Permalink to this definition"></a></dt>
<dd><p>Type: <em>list:string</em></p>
<p>Defines a blacklist of publicID prefixes that are
not allowed for processing. Separate items by comma.</p>
</dd></dl>
</div>
<div class="section" id="command-line-options">
<h2>Command-Line Options<a class="headerlink" href="#command-line-options" title="Permalink to this headline"></a></h2>
<p><strong class="program">ql2sc [options]</strong></p>
<div class="section" id="generic">
<h3>Generic<a class="headerlink" href="#generic" title="Permalink to this headline"></a></h3>
<dl class="option">
<dt id="cmdoption-ql2sc-h">
<code class="sig-name descname">-h</code><code class="sig-prename descclassname"></code><code class="sig-prename descclassname">, </code><code class="sig-name descname">--help</code><code class="sig-prename descclassname"></code><a class="headerlink" href="#cmdoption-ql2sc-h" title="Permalink to this definition"></a></dt>
<dd><p>Show help message.</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-v">
<code class="sig-name descname">-V</code><code class="sig-prename descclassname"></code><code class="sig-prename descclassname">, </code><code class="sig-name descname">--version</code><code class="sig-prename descclassname"></code><a class="headerlink" href="#cmdoption-ql2sc-v" title="Permalink to this definition"></a></dt>
<dd><p>Show version information.</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-config-file">
<code class="sig-name descname">--config-file</code><code class="sig-prename descclassname"> arg</code><a class="headerlink" href="#cmdoption-ql2sc-config-file" title="Permalink to this definition"></a></dt>
<dd><p>Use alternative configuration file. When this option is
used the loading of all stages is disabled. Only the
given configuration file is parsed and used. To use
another name for the configuration create a symbolic
link of the application or copy it. Example:
scautopick -&gt; scautopick2.</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-plugins">
<code class="sig-name descname">--plugins</code><code class="sig-prename descclassname"> arg</code><a class="headerlink" href="#cmdoption-ql2sc-plugins" title="Permalink to this definition"></a></dt>
<dd><p>Load given plugins.</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-d">
<code class="sig-name descname">-D</code><code class="sig-prename descclassname"></code><code class="sig-prename descclassname">, </code><code class="sig-name descname">--daemon</code><code class="sig-prename descclassname"></code><a class="headerlink" href="#cmdoption-ql2sc-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>
</div>
<div class="section" id="verbosity">
<h3>Verbosity<a class="headerlink" href="#verbosity" title="Permalink to this headline"></a></h3>
<dl class="option">
<dt id="cmdoption-ql2sc-verbosity">
<code class="sig-name descname">--verbosity</code><code class="sig-prename descclassname"> arg</code><a class="headerlink" href="#cmdoption-ql2sc-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="option">
<dt id="id2">
<code class="sig-name descname">-v</code><code class="sig-prename descclassname"></code><code class="sig-prename descclassname">, </code><code class="sig-name descname">--v</code><code class="sig-prename descclassname"></code><a class="headerlink" href="#id2" title="Permalink to this definition"></a></dt>
<dd><p>Increase verbosity level (may be repeated, eg. -vv).</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-q">
<code class="sig-name descname">-q</code><code class="sig-prename descclassname"></code><code class="sig-prename descclassname">, </code><code class="sig-name descname">--quiet</code><code class="sig-prename descclassname"></code><a class="headerlink" href="#cmdoption-ql2sc-q" title="Permalink to this definition"></a></dt>
<dd><p>Quiet mode: no logging output.</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-print-component">
<code class="sig-name descname">--print-component</code><code class="sig-prename descclassname"> arg</code><a class="headerlink" href="#cmdoption-ql2sc-print-component" title="Permalink to this definition"></a></dt>
<dd><p>For each log entry print the component right after the
log level. By default the component output is enabled
for file output but disabled for console output.</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-component">
<code class="sig-name descname">--component</code><code class="sig-prename descclassname"> arg</code><a class="headerlink" href="#cmdoption-ql2sc-component" title="Permalink to this definition"></a></dt>
<dd><p>Limit the logging to a certain component. This option can
be given more than once.</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-s">
<code class="sig-name descname">-s</code><code class="sig-prename descclassname"></code><code class="sig-prename descclassname">, </code><code class="sig-name descname">--syslog</code><code class="sig-prename descclassname"></code><a class="headerlink" href="#cmdoption-ql2sc-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="option">
<dt id="cmdoption-ql2sc-l">
<code class="sig-name descname">-l</code><code class="sig-prename descclassname"></code><code class="sig-prename descclassname">, </code><code class="sig-name descname">--lockfile</code><code class="sig-prename descclassname"> arg</code><a class="headerlink" href="#cmdoption-ql2sc-l" title="Permalink to this definition"></a></dt>
<dd><p>Path to lock file.</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-console">
<code class="sig-name descname">--console</code><code class="sig-prename descclassname"> arg</code><a class="headerlink" href="#cmdoption-ql2sc-console" title="Permalink to this definition"></a></dt>
<dd><p>Send log output to stdout.</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-debug">
<code class="sig-name descname">--debug</code><code class="sig-prename descclassname"></code><a class="headerlink" href="#cmdoption-ql2sc-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="option">
<dt id="cmdoption-ql2sc-trace">
<code class="sig-name descname">--trace</code><code class="sig-prename descclassname"></code><a class="headerlink" href="#cmdoption-ql2sc-trace" title="Permalink to this definition"></a></dt>
<dd><p>Execute in trace mode.
Equivalent to verbosity=4 console=1 print-component=1
print-context=1 .</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-log-file">
<code class="sig-name descname">--log-file</code><code class="sig-prename descclassname"> arg</code><a class="headerlink" href="#cmdoption-ql2sc-log-file" title="Permalink to this definition"></a></dt>
<dd><p>Use alternative log file.</p>
</dd></dl>
</div>
<div class="section" id="messaging">
<h3>Messaging<a class="headerlink" href="#messaging" title="Permalink to this headline"></a></h3>
<dl class="option">
<dt id="cmdoption-ql2sc-u">
<code class="sig-name descname">-u</code><code class="sig-prename descclassname"></code><code class="sig-prename descclassname">, </code><code class="sig-name descname">--user</code><code class="sig-prename descclassname"> arg</code><a class="headerlink" href="#cmdoption-ql2sc-u" title="Permalink to this definition"></a></dt>
<dd><p>Overrides configuration parameter <a class="reference internal" href="global.html#confval-connection.username"><code class="xref std std-confval docutils literal notranslate"><span class="pre">connection.username</span></code></a>.</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-host">
<code class="sig-name descname">-H</code><code class="sig-prename descclassname"></code><code class="sig-prename descclassname">, </code><code class="sig-name descname">--host</code><code class="sig-prename descclassname"> arg</code><a class="headerlink" href="#cmdoption-ql2sc-host" title="Permalink to this definition"></a></dt>
<dd><p>Overrides configuration parameter <a class="reference internal" href="global.html#confval-connection.server"><code class="xref std std-confval docutils literal notranslate"><span class="pre">connection.server</span></code></a>.</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-t">
<code class="sig-name descname">-t</code><code class="sig-prename descclassname"></code><code class="sig-prename descclassname">, </code><code class="sig-name descname">--timeout</code><code class="sig-prename descclassname"> arg</code><a class="headerlink" href="#cmdoption-ql2sc-t" title="Permalink to this definition"></a></dt>
<dd><p>Overrides configuration parameter <a class="reference internal" href="global.html#confval-connection.timeout"><code class="xref std std-confval docutils literal notranslate"><span class="pre">connection.timeout</span></code></a>.</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-g">
<code class="sig-name descname">-g</code><code class="sig-prename descclassname"></code><code class="sig-prename descclassname">, </code><code class="sig-name descname">--primary-group</code><code class="sig-prename descclassname"> arg</code><a class="headerlink" href="#cmdoption-ql2sc-g" title="Permalink to this definition"></a></dt>
<dd><p>Overrides configuration parameter <a class="reference internal" href="global.html#confval-connection.primaryGroup"><code class="xref std std-confval docutils literal notranslate"><span class="pre">connection.primaryGroup</span></code></a>.</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-subscribe-group">
<code class="sig-name descname">-S</code><code class="sig-prename descclassname"></code><code class="sig-prename descclassname">, </code><code class="sig-name descname">--subscribe-group</code><code class="sig-prename descclassname"> arg</code><a class="headerlink" href="#cmdoption-ql2sc-subscribe-group" title="Permalink to this definition"></a></dt>
<dd><p>A group to subscribe to.
This option can be given more than once.</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-content-type">
<code class="sig-name descname">--content-type</code><code class="sig-prename descclassname"> arg</code><a class="headerlink" href="#cmdoption-ql2sc-content-type" title="Permalink to this definition"></a></dt>
<dd><p>Overrides configuration parameter <a class="reference internal" href="global.html#confval-connection.contentType"><code class="xref std std-confval docutils literal notranslate"><span class="pre">connection.contentType</span></code></a>.</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-start-stop-msg">
<code class="sig-name descname">--start-stop-msg</code><code class="sig-prename descclassname"> arg</code><a class="headerlink" href="#cmdoption-ql2sc-start-stop-msg" title="Permalink to this definition"></a></dt>
<dd><p>Set sending of a start and a stop message.</p>
</dd></dl>
</div>
<div class="section" id="database">
<h3>Database<a class="headerlink" href="#database" title="Permalink to this headline"></a></h3>
<dl class="option">
<dt id="cmdoption-ql2sc-db-driver-list">
<code class="sig-name descname">--db-driver-list</code><code class="sig-prename descclassname"></code><a class="headerlink" href="#cmdoption-ql2sc-db-driver-list" title="Permalink to this definition"></a></dt>
<dd><p>List all supported database drivers.</p>
</dd></dl>
<dl class="option">
<dt id="cmdoption-ql2sc-database">
<code class="sig-name descname">-d</code><code class="sig-prename descclassname"></code><code class="sig-prename descclassname">, </code><code class="sig-name descname">--database</code><code class="sig-prename descclassname"> arg</code><a class="headerlink" href="#cmdoption-ql2sc-database" title="Permalink to this definition"></a></dt>
<dd><p>The database connection string, format:
<a class="reference external" href="service://user:pwd&#64;host/database">service://user:pwd&#64;host/database</a>.
“service” is the name of the database driver which
can be queried with “db-driver-list”.</p>
</dd></dl>
</div>
</div>
</div>
<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" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
<h3><a href="../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">ql2sc</a><ul>
<li><a class="reference internal" href="#description">Description</a></li>
<li><a class="reference internal" href="#server-side-event-filter">Server-Side Event Filter</a></li>
<li><a class="reference internal" href="#server-side-object-filter">Server-Side Object Filter</a></li>
<li><a class="reference internal" href="#local-object-filter-and-routing">Local Object Filter and Routing</a><ul>
<li><a class="reference internal" href="#examples">Examples</a></li>
<li><a class="reference internal" href="#default-routing-table">Default routing table</a></li>
</ul>
</li>
<li><a class="reference internal" href="#agency-list-filter">Agency List Filter</a></li>
<li><a class="reference internal" href="#publicid-prefix-filter">PublicID Prefix Filter</a></li>
<li><a class="reference internal" href="#workflow">Workflow</a></li>
<li><a class="reference internal" href="#event-attributes">Event Attributes</a><ul>
<li><a class="reference internal" href="#limitations">Limitations</a></li>
</ul>
</li>
<li><a class="reference internal" href="#caveats">Caveats</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="#messaging">Messaging</a></li>
<li><a class="reference internal" href="#database">Database</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="fdsnws.html"
title="previous chapter">fdsnws</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="scalert.html"
title="next chapter">scalert</a></p>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="../_sources/apps/ql2sc.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<div class="container">
<div class="horizontal layout content">
<a class="fade-in" href="https://www.gempa.de" target="_blank">
<img class="brand" src="../_static/brands/gempa.svg"/>
</a>
<div class="stretched align-center fitted content">
<div>
Version <b>5.3.0</b> Release
</div>
<div class="copyright">
Copyright &copy; gempa GmbH, GFZ Potsdam.
</div>
</div>
<a class="fade-in" href="https://www.gfz-potsdam.de" target="_blank">
<img class="brand" src="../_static/brands/gfz.svg"/>
</a>
</div>
</div>
</div>
</body>
</html>