[installation] Init with inital config for global
This commit is contained in:
225
etc/init/gdi2caps.py
Normal file
225
etc/init/gdi2caps.py
Normal file
@ -0,0 +1,225 @@
|
||||
from __future__ import absolute_import, division, print_function
|
||||
|
||||
import os
|
||||
import glob
|
||||
import re
|
||||
import seiscomp.kernel
|
||||
import seiscomp.config
|
||||
import seiscomp.system
|
||||
|
||||
|
||||
class Module(seiscomp.kernel.Module):
|
||||
def __init__(self, env):
|
||||
seiscomp.kernel.Module.__init__(self, env, env.moduleName(__file__))
|
||||
self.config_dir = os.path.join(self.env.SEISCOMP_ROOT, "var", "lib")
|
||||
self.log_dir = os.path.join(self.env.SEISCOMP_ROOT, "var", "log")
|
||||
|
||||
def _run(self):
|
||||
if self.env.syslog:
|
||||
daemon_opt = "-s"
|
||||
else:
|
||||
daemon_opt = "--log-file " + os.path.join(
|
||||
self.log_dir, self.name + ".log"
|
||||
)
|
||||
|
||||
daemon_opt += " -f " + os.path.join(
|
||||
self.config_dir, self.name + ".cfg"
|
||||
)
|
||||
|
||||
prog = "run_with_lock"
|
||||
params = self.env.lockFile(self.name)
|
||||
|
||||
return self.env.start(
|
||||
self.name,
|
||||
prog,
|
||||
f"{params} {self.env.binaryFile(self.name)} {daemon_opt}",
|
||||
True,
|
||||
)
|
||||
|
||||
def supportsAliases(self):
|
||||
return True
|
||||
|
||||
def updateConfig(self):
|
||||
bindings_dir = os.path.join(self.env.SEISCOMP_ROOT, "etc", "key")
|
||||
key_dir = os.path.join(bindings_dir, self.name)
|
||||
cfg_file = os.path.join(self.config_dir, self.name + ".cfg")
|
||||
rx_binding = re.compile(
|
||||
r"(?P<module>[A-Za-z0-9_\.-]+)(:(?P<profile>[A-Za-z0-9_-]+))?$"
|
||||
)
|
||||
|
||||
files = glob.glob(os.path.join(bindings_dir, "station_*"))
|
||||
files.sort()
|
||||
|
||||
try:
|
||||
fb = open(cfg_file, "w", encoding="utf-8")
|
||||
except BaseException:
|
||||
print(f"error: unable to generate configuration file '{cfg_file}'")
|
||||
return 1
|
||||
|
||||
cfg = seiscomp.config.Config()
|
||||
|
||||
try:
|
||||
# Defaults Global + App Cfg
|
||||
cfg.readConfig(
|
||||
os.path.join(
|
||||
self.env.SEISCOMP_ROOT, "etc", "defaults", "global.cfg"
|
||||
)
|
||||
)
|
||||
cfg.readConfig(
|
||||
os.path.join(
|
||||
self.env.SEISCOMP_ROOT,
|
||||
"etc",
|
||||
"defaults",
|
||||
self.name + ".cfg",
|
||||
)
|
||||
)
|
||||
|
||||
# Config Global + App Cfg
|
||||
cfg.readConfig(
|
||||
os.path.join(self.env.SEISCOMP_ROOT, "etc", "global.cfg")
|
||||
)
|
||||
cfg.readConfig(
|
||||
os.path.join(self.env.SEISCOMP_ROOT, "etc", self.name + ".cfg")
|
||||
)
|
||||
|
||||
# User Global + App Cfg
|
||||
cfg.readConfig(
|
||||
os.path.join(os.environ["HOME"], ".seiscomp", "global.cfg")
|
||||
)
|
||||
cfg.readConfig(
|
||||
os.path.join(
|
||||
os.environ["HOME"], ".seiscomp", self.name + ".cfg"
|
||||
)
|
||||
)
|
||||
except BaseException:
|
||||
pass
|
||||
|
||||
try:
|
||||
print(f"queue_size = {cfg.getInt('queueSize')}", file=fb)
|
||||
except BaseException:
|
||||
pass
|
||||
|
||||
try:
|
||||
print(
|
||||
f"backfilling_buffer_size = {cfg.getInt('backFillingBufferSize')}",
|
||||
file=fb,
|
||||
)
|
||||
except BaseException:
|
||||
pass
|
||||
|
||||
# has_channel_mappings = False
|
||||
|
||||
try:
|
||||
print(
|
||||
f"channels = {', '.join(cfg.getStrings('channels'))}",
|
||||
file=fb,
|
||||
)
|
||||
# has_channel_mappings = True
|
||||
except BaseException:
|
||||
pass
|
||||
|
||||
try:
|
||||
default_address = cfg.getString("address")
|
||||
except BaseException:
|
||||
default_address = None
|
||||
|
||||
try:
|
||||
default_sink = cfg.getString("sink")
|
||||
except BaseException:
|
||||
default_sink = None
|
||||
|
||||
# units = {}
|
||||
|
||||
for f in files:
|
||||
try:
|
||||
(path, net, sta) = os.path.basename(f).split("_")
|
||||
if not path.endswith("station"):
|
||||
print("invalid path", f)
|
||||
|
||||
except ValueError:
|
||||
print("invalid path", f)
|
||||
continue
|
||||
|
||||
fd = open(f, encoding="utf-8")
|
||||
line = fd.readline()
|
||||
while line:
|
||||
line = line.strip()
|
||||
if not line or line[0] == "#":
|
||||
line = fd.readline()
|
||||
continue
|
||||
|
||||
m = rx_binding.match(line)
|
||||
if not m:
|
||||
# print("invalid binding in %s: %s" % (f, line))
|
||||
line = fd.readline()
|
||||
continue
|
||||
|
||||
if m.group("module") != self.name:
|
||||
line = fd.readline()
|
||||
continue
|
||||
|
||||
profile = m.group("profile")
|
||||
|
||||
# Setup station net, sta, profile
|
||||
if profile:
|
||||
binding_file = f"profile_{profile}"
|
||||
else:
|
||||
binding_file = f"station_{net}_{sta}"
|
||||
|
||||
cfg = seiscomp.config.Config()
|
||||
cfg.readConfig(os.path.join(key_dir, binding_file))
|
||||
# try:
|
||||
# unit = cfg.getString("unit")
|
||||
# except:
|
||||
# print("warning: unit is not defined in %s" % (binding_file))
|
||||
# break
|
||||
|
||||
# try:
|
||||
# channels = cfg.getStrings("channels")
|
||||
# except:
|
||||
# if not has_channel_mappings:
|
||||
# print("warning: channel mappings are not defined in %s" % (
|
||||
# binding_file))
|
||||
# break
|
||||
# channels = None
|
||||
|
||||
try:
|
||||
address = cfg.getString("address")
|
||||
except BaseException:
|
||||
if default_address is None:
|
||||
print(
|
||||
f"warning: address not defined in {binding_file}"
|
||||
)
|
||||
break
|
||||
address = default_address
|
||||
|
||||
try:
|
||||
sink = cfg.getString("sink")
|
||||
except BaseException:
|
||||
if default_sink is None:
|
||||
print(f"warning: sink not defined in {binding_file}")
|
||||
break
|
||||
sink = default_sink
|
||||
|
||||
# if units.has_key(unit):
|
||||
# print("error: unit %s is bound to multiple stations "
|
||||
# "(%s.%s, %s.%s, ...)" % (
|
||||
# unit, units[unit][0], units[unit][1], net, sta))
|
||||
# return 1
|
||||
|
||||
# units[unit] = (net,sta)
|
||||
|
||||
print(f"address {address}", file=fb)
|
||||
print(f' network = "{net}"', file=fb)
|
||||
print(f' station = "{sta}"', file=fb)
|
||||
# if not channels is None:
|
||||
# print(" channels = %s" % ", ".join(channels), file=fb)
|
||||
print(f" sink = {sink}", file=fb)
|
||||
|
||||
break
|
||||
|
||||
fd.close()
|
||||
|
||||
fb.close()
|
||||
|
||||
return 0
|
||||
Reference in New Issue
Block a user