|
|
@@ -4,15 +4,19 @@ import nilmtools.filter |
|
|
|
import nilmtools.decimate |
|
|
|
import nilmdb.client |
|
|
|
import argparse |
|
|
|
import fnmatch |
|
|
|
|
|
|
|
def main(argv = None): |
|
|
|
parser = argparse.ArgumentParser( |
|
|
|
formatter_class = argparse.RawDescriptionHelpFormatter, |
|
|
|
version = "1.0", |
|
|
|
version = nilmtools.__version__, |
|
|
|
description = """\ |
|
|
|
Automatically create multiple decimations from a single source |
|
|
|
stream, continuing until the last decimated level contains fewer |
|
|
|
than 500 points total. |
|
|
|
|
|
|
|
Wildcards and multiple paths are accepted. Decimated paths are |
|
|
|
ignored when matching wildcards. |
|
|
|
""") |
|
|
|
parser.add_argument("-u", "--url", action="store", |
|
|
|
default="http://localhost/nilmdb/", |
|
|
@@ -23,20 +27,36 @@ def main(argv = None): |
|
|
|
default = False, |
|
|
|
help="Force metadata changes if the dest " |
|
|
|
"doesn't match") |
|
|
|
parser.add_argument("path", action="store", |
|
|
|
parser.add_argument("path", action="store", nargs='+', |
|
|
|
help='Path of base stream') |
|
|
|
args = parser.parse_args(argv) |
|
|
|
|
|
|
|
# Pull out info about the base stream |
|
|
|
client = nilmdb.client.Client(args.url) |
|
|
|
|
|
|
|
info = nilmtools.filter.get_stream_info(client, args.path) |
|
|
|
# Find list of paths to process |
|
|
|
streams = [ unicode(s[0]) for s in client.stream_list() ] |
|
|
|
streams = [ s for s in streams if "~decim-" not in s ] |
|
|
|
paths = [] |
|
|
|
for path in args.path: |
|
|
|
new = fnmatch.filter(streams, unicode(path)) |
|
|
|
if not new: |
|
|
|
print "error: no stream matched path:", path |
|
|
|
raise SystemExit(1) |
|
|
|
paths.extend(new) |
|
|
|
|
|
|
|
for path in paths: |
|
|
|
do_decimation(client, args, path) |
|
|
|
|
|
|
|
def do_decimation(client, args, path): |
|
|
|
print "Decimating", path |
|
|
|
info = nilmtools.filter.get_stream_info(client, path) |
|
|
|
if not info: |
|
|
|
raise Exception("path " + args.path + " not found") |
|
|
|
raise Exception("path " + path + " not found") |
|
|
|
|
|
|
|
meta = client.stream_get_metadata(args.path) |
|
|
|
meta = client.stream_get_metadata(path) |
|
|
|
if "decimate_source" in meta: |
|
|
|
print "Stream", args.path, "was decimated from", meta["decimate_source"] |
|
|
|
print "Stream", path, "was decimated from", meta["decimate_source"] |
|
|
|
print "You need to pass the base stream instead" |
|
|
|
raise SystemExit(1) |
|
|
|
|
|
|
@@ -53,7 +73,7 @@ def main(argv = None): |
|
|
|
if info.rows <= 500: |
|
|
|
break |
|
|
|
factor *= args.factor |
|
|
|
new_path = "%s~decim-%d" % (args.path, factor) |
|
|
|
new_path = "%s~decim-%d" % (path, factor) |
|
|
|
|
|
|
|
# Create the stream if needed |
|
|
|
new_info = nilmtools.filter.get_stream_info(client, new_path) |
|
|
@@ -72,5 +92,7 @@ def main(argv = None): |
|
|
|
# Update info using the newly decimated stream |
|
|
|
info = nilmtools.filter.get_stream_info(client, new_path) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
main() |