Change Log

All notable changes to GDS will be documented in this file.

2024.098

Fixed

  • Duplicated dissemination of OnlyOnce or OnSignificantChange subscriptions in case of HA failover.

  • DB queries for SQLite backends

Changed

  • Add callback function in filter_toast.py allowing to skip templates in derived classes

2024.068

Changed

  • Set default reverse proxy location to /gds

  • Set default MySQL/MariaDB CHARACTER SET to utf8mb4

  • Simplify installation instructions by removing Apache and uWSGI options

2024.018

Important

THIS IS A MAJOR UPGRADE. MANUAL SETUP IS REQUIRED. Please read the following ChangeLog and the instructions for Database Migrations after 2017.269 carefully.

Changed

  • Speed up DB cleanup

    • add composite index to gds_log_service using service and timestamp column

    • add composite index to gds_log_service using service, content and timestamp column

    • change bulletin clean up query to filter for rows with content

2024.016

Fixed

  • Prevent modification of extra tab configuration through user defined partial templates.

Changed

  • Add configuration variable addTargetPath to send_archive spooler.py.

2023.348

Important

THIS IS A MAJOR UPGRADE. MANUAL SETUP IS REQUIRED. Please read the following ChangeLog and the instructions for Database Migrations after 2017.269 carefully.

Fixed

  • Adjust size of target log field to 180 characters

  • Increase max commline length to 500

Changed

  • Remove GDS_DEBUG setting. Same functionallity is available through default Python logger configuration.

  • Replace sys.stderr statements with call to logging facility.

  • Implement pylint recommendations.

2023.320

Added

  • Allow configuration of GDS command interface request limits

  • Support test mode in filter_toast.py

Changed

  • Remove SeisComP 3 support from tools library and server backend

2023.289

Added

  • Evaluation of file name, content type and encoding in filter_toast.py

2023.226

Fixed

  • Parsing of preferred nodal plain in TOAST multi-user client library

2023.226

Added

  • Query for incident variables in TOAST multi-user client library

2023.215

Added

  • TOAST multi-user client library to

    • Request incident id for earthquake parameters

    • Load configured templates from TOAST database

    • Resolve clearsilver templates

    • Synchronize bulletin revision and bulletin context variables

  • Display bulletin attachment CID in GDS front end

2023.122

Changed

  • Call autosigma in filter_email.py overriding output.exportScript with ‘’. The change prevents that the output gets lost when autosigma is configured with output.exportScript and files are removed by the script.

2023.114

Changed

  • Do not warn about disabled services if the service is used in automatic queues only and the current user has right to access automatic queues

2023.011

Changed

  • Change favicon, add SVG and PNG variants

2022.339

Important

THIS IS A MAJOR UPGRADE. MANUAL SETUP IS REQUIRED. Please read the following ChangeLog and the instructions for Database Migrations after 2017.269 carefully.

Changed

  • Add indexes to service log, subscription and subscriber tables to speedup DB queries.

2022.329

Changed

  • Speedup DB query for event logs of specific day.

2022.301

Fixed

  • Prevent simultaneous execution of deferred and manual disseminations resulting in MySQL error 2014 (Command out of sync).

  • Deployment note in Gunicorn example configuration.

Added

  • Nearest city information to XML filter example.

2022.285

Important

MANUAL SETUP IS REQUIRED. Please copy configuration parameters GDS_SSL and GDS_CAFILE from $SEISCOMP_ROOT/share/gds/web/gds/example-settings.py to your settings.py in the same folder.

Added

  • Support for backend SSL sockets.

Fixed

  • Character encoding in preview of MIME type text

2022.252

Important

THIS IS A MAJOR UPGRADE. MANUAL SETUP IS REQUIRED. Please read the following ChangeLog and the instructions for Database Migrations after 2017.269 carefully.

Changed

  • Decrease target field of Subscription from 400 to 180 characters. Version 2022.231 increased the field length from 100 to 400 characters. With 400 x 4 bytes = 1600 bytes, the upper index limit of 767 bytes for older MySQL/MariaDB versions was exceeded and the migration step failed.

    In case you already specified targets longer than 180 characters the new migration will fail, e.g.,

    MySQLdb.DataError: (1265, "Data truncated for column 'service_target' ...
    

    and you have to login to your database and manually reduce the target string, e.g.,

    UPDATE gds_subscription SET service_target = LEFT(service_target, 180);
    

2022.244

Fixed

  • Database migration 0012 broken in version 2022.231

2022.231

Important

THIS IS A MAJOR UPGRADE. MANUAL SETUP IS REQUIRED. Please read the following ChangeLog and the instructions for Database Migrations after 2017.269 carefully.

Changed

  • Distinguish magnitude and depth availability from delta values in significant change properties of Subscriber

    • From now on delta values are only evaluated if they are available in the current and previous dissemination

    • The new depth/magnitude added/removed flags may be used to define a significant change based on the availability of these fields

    • The availability fields are disabled by default. However, they are enabled by the database migration routine for all subscribers which define a corresponding delta value in order to preserve the old rule set.

  • Increase target field of Subscription from 100 to 400 characters

  • Require fix django-simple-history version 3.0.* since later versions dropped Python 3.6 support and introduced datamodel changes.

Fixed

  • Typos in log messages

2022.221

Changed

  • Prioritize dictionary entries from service specific tab over entries of ‘extra’ tabs

2022.126

Added

  • sink.py in tools/lib for SeisComP object serialization compatible with all SeisComP and Python versions

Changed

  • GDSConfigParser renamed to ConfigParser and moved to tools/lib/compat.py

  • tools/lib/scml.py code move to tools/lib/seismo.py

2022.112

Fixed

  • Typos in NGINX/Gunicorn installation instructions

  • Handle NaN values in tools/lib/cities.py

Added

  • Allow deactivation of initialization checks in SMS spooler

  • Systemd service example for Gunicorn Version < 20

2022.055

Fixed

  • Spooler timeout (-t) parameter broken since 2020.282

Changed

  • Add FAX spooler using HylaFAX service on local machine

  • Add NetGSM spooler using HWg-SMS-GW3 SMS gateway on network

  • Load text attachments as text content for proper display in web interface

  • Documentation:

    • Correct typos

    • Highlight configuration of production settings

2022.021

Changed

  • Improved documentation

Added

  • FTP spooler

  • toBytes method in attachment class of bulletin.py

2021.355

Fixed

  • Use full available height in bulletin preview and log perspective

  • Extra tab type filter configured in settings.py was not evaluated correctly

Added

  • Archive spooler

  • saveToFile method in bulletin attachment class

  • NGINX and Gunicorn installation instructions

Changed

  • Refine NGINX and uWSGI installation instructions

2021.335

Fixed

  • Attachment URL loading in bulletin.py for requests with POST data under Python 3

Added

  • Documentation on NGINX web server integration

2021.322

Fixed

  • Database migration 0012 introduced by 2020.282 cleared the content column of the gds_log_service table

  • Attachment parsing in GDS bulletin library for data produced before 2019.207

2021.321

Fixed

  • Show list of recipients in GDS service log perspective if messages content is not requested

  • Define sort order for paginator in service and content log perspective

  • Remove reference to map file from gds.css

Changed

  • When filtering waveforms using SeisComP Butterworth filters, the upper corner frequency must be below the Nyqusit frequency of the signal. Since BH? streams are often sampled at 20 Hz, the default filter in attachTracesImageServer() of share/gds/tools/filter_email.py we set to BW(3,1.0,8). Scripts derived from this template may require adjustment, too.

  • Improve send_sms.py

    • Send CUR command as early as possible to disable periodic messages send automatically by some devices

    • Support more modems

2021.305

Fixed

  • Blue background representing selected state in tabs of log perspective

  • Page reporting insufficient permissions

Added

  • Show icon and name of current perspective in page header

2021.301

Fixed

  • django import in `share/gds/web/gds/wsgi.py

  • loadFromCommand in share/gds/web/gds/lib/bullein.py when used with stdin data under Python3

  • tools/lib/send_sms.py for Python3

2021.294

Important

THIS IS A MAJOR UPGRADE. MANUAL SETUP IS REQUIRED. Please read the following ChangeLog and the Update Instructions (2021.294) carefully.

Added

  • Support for GeoJSON polygon Region definition

  • History support for the data model allowing to review all changes to a particular configuration object and to revert back to a previous revision.

Changed

  • Django update from 3.1 to 3.2.* (LTS version)

  • Improve front-end support for binary attachments, e.g. PDF files

  • Display decoded attachment size

  • Log levels

    • Decrease log level for missing magnitude from warning to info

    • Increase log level for configuration summary from debug to info

  • Reduce width of criterion inlines

    • Remove columns: Min/max magnitude count, RMS

    • Reduce with of columns

    • Limit hight of multiple select fields

Fixed

  • Link to specific data model object in the admin log entry list.

2021.253

Changed

  • Update jquery (3.6.0) and fancybox (3.5.7) java script libraries

  • Remove tinymce HTML editor and display editable text area with raw HTML instead. Motivation

    • The editor was rarely used

    • The output of the editor diverted significantly from the HTML produced by the content filter, e.g., the HTML header was stripped.

  • Improve HTML bulletin preview and log view by rendering the HTML without the GDS style sheets.

  • Default to MIME type application/xml if no filter is configured

2021.189

Changed

  • Increase default command interface client connection limit from 2 to 200

  • connections configuration parameter

2021.175

Added

  • QuakeLink keepAliveInterval configuration option

2021.166

Fixed

  • tools/lib

    • Read string configuration parameters under Python 2 as byte string

    • Stop using of deprecated SafeConfigParser

Added

  • Python 3 support for send_sms spooler

2021.148

Fixed

  • tools/lib/bulletin.py

    • Use kill() instead of terminate() to ensure subprocess stops if timeout is exceeded in Attachment.loadFromCommand()

    • Use psutil to recursively send kill signal to all children of subprocess

Added

  • tools/lib/aoi.py for simple area of interest definitions in filter scripts

  • Turn Save and add another button of Queues and Subscriptions into a Save as new button allowing to clone the object including all references. In case of the Queue all Criteria and all Subscriptions will be duplicated.

2021.130

Fixed

  • Last dissemination time in disseminate perspective

2021.025

Fixed

  • MIME type parsing in DISSEMINATE command

2021.015

Fixed

  • iSMS spooler: Use GET instead of POST, remove unicode characters

Added

  • Improve documentation on installation an update instructions

  • Automatically read GDS bulletin in spooler base class if requested by specific spooler implementation

2020.344

Fixed

  • Test for a maximum of 4 images per tweet in Twitter spooler

  • Attachment loading in html2bulletin.py

2020.339

Added

  • Image and video upload feature to Twitter filter and spooler

2020.300

Added

  • URL encode attachment’s file name during Content-ID generation (RFC2392)

2020.296

Fixed

  • Errors in the GDS Python library introduced in 2020.282 (Python 3 support)

    • Correct log level check

    • SMS spooler errors related to Python 3 unicode and integer division handling

2020.295

Fixed

  • During manual dissemination uploaded files where not included while they appeared in bulletin preview

2020.282

Important

THIS IS A MAJOR UPGRADE. MANUAL SETUP IS REQUIRED. Please read the following ChangeLog and the Update Instructions (2020.282) carefully.

  • The front-end was upgraded to Django version 3.1 and requires a minimum Python version of 3.6. Please make sure Python 3.6 is available before proceeding with the update.

  • The back-end was updated to support Python 3 but continues to support Python 2 starting from version 2.7 in order to support SeisComP3 Jakarta 2018.327 and older.

  • Descriptions in the data model changed. Please run python3 manage.py migrate to complete the installation.

  • Python library

    • seiscomp-python - The GDS Python library ($SEISCOMP_ROOT/share/gds/tools) uses the seiscomp-python shebang to determine the Python version the SeisComP Python bindings are compiled for. For SeisComP versions <= 2018.327 an alias pointing to either python2 or python3 needs to be created. When the GDS is installed via GSM this will done automatically.

    • renamed lib/xml.py to lib/scml.py to avoid naming conflicts

    • Logging facility

      • new messageLimit configuration parameter

      • try to read log directory from SeisComP Environment, use ~/.seiscomp/log as fallback

  • Mandatory MIME types for content preview in GDS front-end - In contrast to previous GDS versions the MIME type of a filter is no longer guessed but must be specified in the GDS back-end configuration. Common MIME types are

    • text/gds - GDS bulletin format used by most of the sample filter scripts shipped with GDS

    • text/x-python - Python dictionary displayed as key-value pairs

    • image/[subtype] - Images of any type

    • text/[subtype] - Generic text

2020.098

Added

  • Support for QuakeLink API=2 and SUMMARY/2 format providing author information and complete evaluation status and evaluation mode support

  • SHOW_AUTHOR_INFORMATION configuration variable adding origin author information during manual event dissemination

2020.042

Added

  • Optional parameter --automatic to the DISSEMINATE command of the back-end API allowing to trigger only automatic Queues.

2020.021

Important

The data model changed. Please run python manage.py migrate to complete the installation.

Added

  • Magnitude type to the significant change properties of the Subscriber

2020.009

Fixed

  • Use timeout parameter for HTTP POST requests of bulletin library

2020.006

Fixed

  • Add missing migration script

2019.354

Important

  • The data model changed. Please run python manage.py migrate to complete the installation.

  • If you use an account without super user status for manual dissemination you might want to grant the permission gds | queue | Can view and trigger automatic queues to be able to trigger automatic Queues.

Added

  • User permission controlling access to automatic Queues

2019.340

Added

  • Support binary bulletin types, e.g., images or PDF documents

  • Support gempa bulletins without content, e.g., attachments only

  • Support review of non image gempa bulletin attachments, e.g. PDF documents

2019.315

Fixed

  • Missing char in SMS spooler for multipart GSM (7bit) encoded messages

2019.305

Added

  • Keep current selected tab in GDS front-end on Load bulletin action

  • Switch to toggle all Services at once

2019.291

Fixed

  • Exception handling in GDS front-end

2019.287

Fixed

  • Minimum Subscriber delay value was not evaluated for Subscription pre-selection in manual dissemination via GDS web interface. This bug was introduced in version 2017.257.

2019.267

Fixed

  • Default HA timeout was set to 10,000 instead of 10 seconds

2019.267

Added

  • Support text attachments in send_email.py spooler

2019.254

Added

  • Maintain scroll position on Subscription list toggle

2019.207

Changed

  • Web interface redesign

    • Queue and Subscription selection

      • Review Queue evaluation result (hover mouse over Queue name)

      • Show/hide automatic Queues

      • Overall toggle for all Subscriptions and Queues

    • Dissemination

      • Ask for confirmation (optionally)

      • Exclusion of entire Services prior to dissemination

      • Option to skip event selection. Dissemination may be manually triggered without event information using user input or other data sources.

    • Bulletin preview and modification

      • Service tabs instead of side menu

      • Synchronize only those fields which actually changed

      • Allow deselection of attachments and header fields

      • Fix attachment cid rendering, e.g., for images embedded in HTML email

      • Show stderr output of filter application as info message

      • Customizable bulletin forms trough partials (share/gds/web/gds/templates/gds/partials), e.g., define select boxes for input

    • Navigation

      • Step menu in dissemination and log perspective

      • Store selected date in session

      • Store event or recent items selection in session

      • Direct access to Queue configuration

    • Open Django admin perspective in new tab

  • Web configuration (settings.py)

    • Add RECENT_DEFAULT option to prefer recent items perspective over calendar

    • Add CONFIRM_DISSEMINATE option to ask for confirmation on dissemination

    • Add LOAD_BULLETINS option to automatically active bulletin review

    • Add DISS_EXTRA_TABS option for extra user input used by multiple bulletins, e.g, define a ‘Main’ tab with general parameters used in all bulletins

    • Add SHOW_AUTOMATIC_QUEUES option to show/hide automatic Queues in dissemination perspective

    • Correct MESSAGE_LEVEL parameter controlling verbosity of messages shown in web interface

  • GDS back-end

    • Add API version check to ensure GDS web interface and back-end match

    • Change GDS command protocol to report Queue evaluation result

    • support evaluation of match state in filter scripts through ‘@MATCH@’ command line parameter, e.g., service.email.filter.primary.cmd = “@DATADIR@/gds/tools/filter_email.py –match @MATCH@”

    • Option to stop automatic dissemination after first manual dissemination

    • Log all event parameters if dissemination is triggered with pre-formatted content

    • Cache primary filter results for identical filter commands

  • Filter and Spooler scripts (the share/gds/tools folder)

    • Filter library

      • Add –match parameter allowing match-dependent content generation

      • Add –input parameter to read input from file instead of stdin

    • Bulletin library

      • Use requests library improving support for multipart GIS requests

      • Fix UTF-8 encoding

      • Add support for text attachments

    • New cities library

      • Calculation of direction and distance of N nearest cities optionally filtered by population

      • Calculation of direction and distance to specific city

      • Read data from SeisComP cities.xml or CSV file

      • Filter cities.xml into CSV based on region and population for faster lookup

    • New database library

      • query event specific dissemination serial number

    • Email filter

      • add example to attach shake map generated by SIGMA

      • add GIS multipart example rendering overlay image and layer

    • Email spooler

      • Allow specification of To email address in case of BCC mails

      • Use Undisclosed Recipients <EMAIL> as default where EMAIL is the configured From email address

  • Data model

    • Add Service long name and sort order

    • Change Queue manual field to automatic adding option to stop automatic dissemination once a manual dissemination was performed

  • Improved documentation

  • Update of external components

    • django 1.11.20

    • django_extensions 2.1.6

    • fancybox 3.5.1

    • tinymce 4.9.2

2018.318

Fixed

  • Segfault when ran in spooler only mode

2018.269

Fixed

  • Logging of partial success

2018.222

Added

  • UNSET option to evaluation mode, evaluation status and event type parameter allowing to explicitly check for undefined values

2018.176

Added

  • Log event revision

2018.134

Added

  • Sort Queues by name in dissemination perspective (3/3) of web interface

2018.122

Added

  • Multiple choice event type parameter to Criterion

  • Event region name regular expression filter to Region

Fixed

  • In automatic mode do not include once matched Subscriptions of manual Queues

2018.107

Added

  • Significant change flags to Subscriber allowing to resend if evaluation mode/status, region, event type was changed or focal mechanism was added/removed

2018.106

Fixed

  • Resend mode ‘Once Matched & Significant Change’: Dissemination was triggered regardless of significant change status if current refinement did not match but previous dissemination existed

2017.319

Added

  • Permission granting read only access to dissemination perspective

2017.286

Fixed

  • Content download in web interface

2017.269

Important

This purpose of this GDS update is to upgrade the Django framework to 1.11.7. Please follow upgrade instructions under https://docs.gempa.de/gds/current/base/installation.html#migration-to-2017-269-django-1-11-7

Fixed

  • Unicode error when changing description field of Subscription

2017.257

Added

  • Use a timer for Subscriptions not matching the minDelay criterion. This ensures that the dissemination is triggered even if no further event update is received from the QuakeLink server.

  • Reverse event revision order in publish step 2/3 to make sure that the latest revision is displayed on the first page

2017.081

Fixed

  • Resend option

2017.079

Important

This is a major update introducing many new features.

Note: The database model changed significantly. Migration scripts are provided under share/gds/web/gds/migrations and need to be executed in sequential order. Also the bitfield Django plugin needs to be installed. Please check the documentation for an installation description.

Added

  • Support for circular and polygon Region. Region definitions becomes optional for a Criterion.

  • External Criteria may now be defined per Criterion instead of per Queue

  • Allow definition of significant change parameters per Subscriber. New recent modes: On significant change, Onces matched and significant change

  • Allow Criteria, Subscribers and Subscriptions to be disabled

  • Add Evaluation Status Criterion parameter

  • Log stderr output of External Criterion scripts

  • Improved log output for Queue match/mismatch

  • Support list of recent events in log and dissemination pages in addition to calendar perspective

  • Show precise values when moving mouse over table cell

  • Update HTML editor and attachment viewer

2017.047

Fixed

  • Log correct MIME type if no second filter stage is configured. This bug was introduced in version 2015.320.

2016.333

Fixed

  • Repeated dissemination if gds.id is not specified

2016.297

Added

  • Add high availability (HA) mode allowing multiple GDS instances sharing one database to work as one. This feature requires a special GDS HA license.

2016.287

Added

  • Support spooling of external Services not managed by GDS, add spoolOnly mode

  • Set logID to None in spooler lib if extraction from file name failed

2016.173

Fixed

  • Use socket timeout only if keep alive messages have been requested

2018.176

Added

  • Log event revision

Fixed

  • Shutdown

Added

  • Support cross-referenced magnitudes (preferred magnitude child of non-preferred origin)

2016.160

Added

  • Support PostgreSQL database server

2016.109

Added

  • If enabled, reconnect if no alive message is received within 60s

2016.051

Fixed

  • Query for Subscriber delay

2015.320

Fixed

  • Apply 2nd filter to bulletins in SEND command

  • Format preview if MIME type is set to application/gds

2015.239

Added

  • Allow NATIVE (non filtered) QuakeLink query

2015.266

Fixed

  • QuakeLink reconnect problem on some operating systems

2015.216

Added

  • Python tools: keep track about execution time in spooler and filter library

    • Added timeout command line parameter (-t, –timeout)

    • Use timeout in filter_email.py to abort image generation