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.

132 lines
5.2 KiB
Plaintext

#!/usr/bin/env seiscomp-python
# -*- coding: utf-8 -*-
############################################################################
# Copyright (C) GFZ Potsdam #
# All rights reserved. #
# #
# GNU Affero General Public License Usage #
# This file may be used under the terms of the GNU Affero #
# Public License version 3.0 as published by the Free Software Foundation #
# and appearing in the file LICENSE included in the packaging of this #
# file. Please review the following information to ensure the GNU Affero #
# Public License version 3.0 requirements will be met: #
# https://www.gnu.org/licenses/agpl-3.0.html. #
############################################################################
import sys
import seiscomp.core
import seiscomp.client
import seiscomp.datamodel
class OriginList(seiscomp.client.Application):
def __init__(self, argc, argv):
seiscomp.client.Application.__init__(self, argc, argv)
self.setMessagingEnabled(False)
self.setDatabaseEnabled(True, False)
self.setDaemonEnabled(False)
self._startTime = seiscomp.core.Time()
self._endTime = seiscomp.core.Time.GMT()
self._delimiter = None
def createCommandLineDescription(self):
self.commandline().addGroup("Origins")
self.commandline().addStringOption("Origins", "begin",
"The lower bound of the time interval. Format: '1970-01-01 00:00:00'.")
self.commandline().addStringOption("Origins", "end",
"The upper bound of the time interval. Format: '1970-01-01 00:00:00'.")
self.commandline().addStringOption("Origins", "author",
"The author of the origins.")
self.commandline().addGroup("Output")
self.commandline().addStringOption("Output", "delimiter,D",
"The delimiter of the resulting "
"origin IDs. Default: '\\n')")
return True
def init(self):
if not seiscomp.client.Application.init(self):
return False
try:
start = self.commandline().optionString("begin")
if not self._startTime.fromString(start, "%F %T"):
print("Wrong 'begin' given -> assuming {}"
.format(self._startTime), file=sys.stderr)
except RuntimeError:
print("No 'begin' given -> assuming {}".format(self._startTime),
file=sys.stderr)
try:
end = self.commandline().optionString("end")
if not self._endTime.fromString(end, "%F %T"):
print("Wrong 'end' given -> assuming {}"
.format(self._endTime), file=sys.stderr)
except RuntimeError:
print("No 'end' given -> assuming {}".format(self._endTime),
file=sys.stderr)
try:
self.author = self.commandline().optionString("author")
sys.stderr.write("%s author used for output\n" % (self.author))
except RuntimeError:
self.author = False
try:
self._delimiter = self.commandline().optionString("delimiter")
except RuntimeError:
self._delimiter = "\n"
# sys.stderr.write("Setting end to %s\n" % self._endTime.toString("%F %T"))
return True
def printUsage(self):
print('''Usage:
scorgls [options]
List origin IDs available in a given time range and print to stdout.''')
seiscomp.client.Application.printUsage(self)
print('''Examples:
Print all origin IDs from year 2022 and thereafter
scorgls -d mysql://sysop:sysop@localhost/seiscomp --begin "2022-01-01 00:00:00"
''')
def run(self):
seiscomp.logging.debug("Search interval: %s - %s" %
(self._startTime, self._endTime))
out = []
q = "select PublicObject.%s, Origin.* from Origin, PublicObject where Origin._oid=PublicObject._oid and Origin.%s >= '%s' and Origin.%s < '%s'" %\
(self.database().convertColumnName("publicID"),
self.database().convertColumnName("time_value"),
self.database().timeToString(self._startTime),
self.database().convertColumnName("time_value"),
self.database().timeToString(self._endTime))
if self.author:
q += " and Origin.%s = '%s' " %\
(self.database().convertColumnName("creationInfo_author"),
self.query().toString(self.author))
for obj in self.query().getObjectIterator(q, seiscomp.datamodel.Origin.TypeInfo()):
org = seiscomp.datamodel.Origin.Cast(obj)
if org:
out.append(org.publicID())
print("{}\n".format(self._delimiter.join(out)), file=sys.stdout)
return True
def main():
app = OriginList(len(sys.argv), sys.argv)
app()
if __name__ == "__main__":
main()