139 lines
3.2 KiB
Python
Executable File
139 lines
3.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import sys
|
|
import signal
|
|
import getopt
|
|
from gempa import CAPS
|
|
|
|
usage_info = f"""Usage:
|
|
{os.path.basename(__file__)} [options]
|
|
|
|
Push images into CAPS.
|
|
|
|
Options:
|
|
-H, --host Host to connect to.
|
|
-h, --help Display this help message and exit.
|
|
-d, --directory Input directory to use.
|
|
-n, --network Network code.
|
|
"""
|
|
|
|
|
|
def usage(exitcode=0):
|
|
print(usage_info)
|
|
return exitcode
|
|
|
|
|
|
output = CAPS.Plugin("imageimporter")
|
|
|
|
|
|
def signal_handler(sig, frame): # pylint: disable=W0613
|
|
print("Caught Ctrl+C!")
|
|
output.quit()
|
|
sys.exit(0)
|
|
|
|
|
|
def sendImage(netcode, stacode, timestamp, filename):
|
|
f = open(filename, "rb")
|
|
if not f:
|
|
return False
|
|
|
|
data = f.read()
|
|
f.close()
|
|
|
|
output.push(netcode, stacode, "", "CAM", timestamp, 1, 0, "JPG", data)
|
|
|
|
return True
|
|
|
|
|
|
def main():
|
|
try:
|
|
opts, _ = getopt.getopt(
|
|
sys.argv[1:], "hH:d:n:", ["help", "host=", "directory=", "network="]
|
|
)
|
|
except getopt.GetoptError as err:
|
|
# print help information and exit:
|
|
print(str(err)) # will print something like "option -a not recognized"
|
|
return usage(2)
|
|
|
|
signal.signal(signal.SIGINT, signal_handler)
|
|
|
|
addr = None
|
|
directory = None
|
|
netcode = None
|
|
|
|
for o, a in opts:
|
|
if o in ["-h", "--help"]:
|
|
return usage()
|
|
|
|
if o in ["-H", "--host"]:
|
|
addr = a
|
|
elif o in ["-d", "--directory"]:
|
|
directory = a
|
|
elif o in ["-n", "--network"]:
|
|
netcode = a
|
|
else:
|
|
assert False, "unhandled option"
|
|
|
|
if not netcode:
|
|
print("No network code given\n", file=sys.stderr)
|
|
return 1
|
|
|
|
if addr:
|
|
try:
|
|
host, port = addr.split(":")
|
|
except BaseException:
|
|
print(f"invalid host address given: {addr}\n", file=sys.stderr)
|
|
return 1
|
|
else:
|
|
host = None
|
|
port = None
|
|
|
|
if port:
|
|
try:
|
|
port = int(port)
|
|
except BaseException:
|
|
print(f"invalid port given: {port}\n", file=sys.stderr)
|
|
return 1
|
|
else:
|
|
port = 18002
|
|
|
|
if not host:
|
|
host = "localhost"
|
|
|
|
output.setHost(host)
|
|
output.setPort(port)
|
|
output.setBufferSize(1 << 30)
|
|
|
|
print(f"Looking for images in directory: {directory}\n", file=sys.stderr)
|
|
# Find all images files in the given directory
|
|
for path, _, files in os.walk(directory):
|
|
i = 1
|
|
count = len(files)
|
|
for fn in files:
|
|
if not fn.endswith(".jpg"):
|
|
continue
|
|
|
|
toks = fn.split("_")
|
|
if len(toks) < 4:
|
|
continue
|
|
|
|
toks = toks[len(toks) - 4 :]
|
|
|
|
stacode = toks[1]
|
|
timestamp = CAPS.Time.FromString(toks[2] + toks[3], "%Y%m%d%H%M")
|
|
|
|
filename = os.path.join(path, fn)
|
|
|
|
timeString = timestamp.iso()
|
|
print(f"Sending image {fn}, {i}/{count}, {timeString}\n", file=sys.stdout)
|
|
sendImage(netcode, stacode, timestamp, filename)
|
|
i = i + 1
|
|
|
|
output.quit()
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|