scmaster

scmaster was designed as a kind of microkernel or mediator which delegates client requests. Therefore it is the key application responsible for the orchestration of the distributed system. In order to participate in the distributed system a client needs to send a connect request to the scmaster. In turn the master returns an acknowledgment message which either informs the client of its admission or rejection. If the connect request was successful the acknowledgment message will provide the client with the available message groups it can subscribe to. Moreover, all currently connected clients will be notified about the newly joined member. In case the master is configured with a database the client will also receive a direct follow up message which holds the address of this database. The address can be used to retrieve archived data later on. After a connection has been established every message will pass through the master first where it is processed accordingly and then relayed to the target groups. Once a client is done with processing a disconnect message will be sent to the master who in turn notifies all remaining clients about the leaving.
scmaster can be configured with a database to ensure the integrity of the system. Before a message is distributed by scmaster the message is written to the specified database. This way each message is stored before it enters the system. In case of a crash all necessary information can be recovered from the database. Currently, driver exist for MySQL, PostgreSQL and sqlite. Note that the scmaster can run without a database but loses data integrity in doing so.

Options

scmaster supports commandline options as well as configuration files (scmaster.cfg).

Configuration

Users configuration file: $HOME/.seiscomp3/scmaster.cfg

msgGroups = <list>
message groups listed will be created. By default the following groups will be created:
  • STATUS_GROUP
  • IMPORT_GROUP
  • AMPLITUDE
  • CONFIG
  • EVENT
  • GUI
  • INVENTORY
  • LOCATION
  • LOGGING
  • MAGNITUDE
  • PICK
  • PUBLICATION
  • QC
  • SERVICE_PROVIDE
  • SERVICE_REQUEST
plugins = <list>
List of plug-ins which will be loaded. The database plug-in should be defined always:
  • plugins = libseiscomp3_dbplugin
plugins.<plugin name>.<attribute> = <string>
Parameters defined for the plug-in. For the database plug-in should be defined:
  • plugins.dbPlugin.dbDriver = mysql
  • plugins.dbPlugin.readConnection = "user:user@host/yourdb"
  • plugins.dbPlugin.writeConnection = "user:user@host/yourdb"

Example:

plugins = libseiscomp3_dbplugin
plugins.dbPlugin.dbDriver = mysql
plugins.dbPlugin.readConnection = "sysop:sysop@localhost/seiscomp3"
plugins.dbPlugin.writeConnection = "sysop:sysop@localhost/seiscomp3"

In case the graphical user interfaces are running on a separate system. The read connection should contain the IP or the system name, e.g.:

plugins.dbPlugin.readConnection = "sysop:sysop@st30dmz/seiscomp3"