101 lines
2.2 KiB
Python
101 lines
2.2 KiB
Python
"""
|
|
FastExec client library very similar to the C library.
|
|
|
|
This provides command-line argument parsing in FASTexec style, and also provides
|
|
a global datastore for exporting metrics (and dumping them to a file if
|
|
desired).
|
|
"""
|
|
|
|
import datastore
|
|
|
|
import sys
|
|
|
|
"""The root datanode for the fx system."""
|
|
datanode = datastore.DataNode()
|
|
|
|
"""Extra command-line arguments that do not contain --."""
|
|
extra_args = []
|
|
|
|
def param(name, mustexist = True):
|
|
v = datanode.get_val_path("/info/params/" + name.strip("/"))
|
|
if mustexist and v == None:
|
|
raise "Parameter [%s] not specified." % (name)
|
|
return v
|
|
|
|
def param_exists(name):
|
|
return param(name, False) != None
|
|
|
|
def param_default(name, val):
|
|
if not param_exists(name):
|
|
datanode.set_val_path("/info/params/" + name.strip("/"), val)
|
|
|
|
def param_str(name):
|
|
# TODO: Validate?
|
|
return param(name)
|
|
|
|
def param_int(name):
|
|
# TODO: Validate?
|
|
return int(param(name))
|
|
|
|
def param_float(name):
|
|
return float(param(name))
|
|
|
|
def param_bool(name):
|
|
str = param(name, False)
|
|
if str == None or (len(str) > 0 and str[0] in "fFnN0"):
|
|
return False
|
|
else:
|
|
return True
|
|
|
|
def dump():
|
|
stream = sys.stdout
|
|
fname = param("fx/output")
|
|
if fname != None:
|
|
stream = open(fname, "w")
|
|
try:
|
|
datanode.write_pathstyle(stream)
|
|
finally:
|
|
if fname != None:
|
|
stream.close()
|
|
|
|
# TODO: Configurable
|
|
|
|
# TODO: FINISH THIS
|
|
|
|
def metric_set(instancename, name, val):
|
|
if instancename == None:
|
|
path = ["info", "metrics", name]
|
|
else:
|
|
path = ["instances", instancename, "metrics", name]
|
|
datanode.set_val(path, val)
|
|
|
|
def subparam_set(instancename, name, val):
|
|
path = ["instances", instancename, "params", name]
|
|
datanode.set_val(path, val)
|
|
|
|
def __parse_args():
|
|
"""Parses command-line arguments.
|
|
|
|
Note that the keys are in path-style and unescaped as so.
|
|
However, the values are assumed not to be escaped.
|
|
"""
|
|
global extra_args
|
|
kvpairs = []
|
|
for arg in sys.argv[1:]:
|
|
if arg[0:2] == "--":
|
|
if '=' in arg:
|
|
i = arg.index("=")
|
|
kvpairs.append((arg[2:i], arg[i+1:]))
|
|
else:
|
|
kvpairs.append((arg[2:], "1"))
|
|
else:
|
|
extra_args.append(arg)
|
|
for (name, val) in kvpairs:
|
|
param_default(name, val)
|
|
|
|
__parse_args()
|
|
|
|
if __name__ == "__main__":
|
|
print datanode
|
|
print extra_args
|