save config to db
sca-manage setup -s <show configs> sca-manage setup -d key=value <set key value config> Change-Id: I1cc4d918d0d7f87bc785c96b6470bdff7e38fb48
This commit is contained in:
parent
bc668d0230
commit
61a8907939
|
@ -22,7 +22,6 @@ class TraceEndpoint(object):
|
|||
|
||||
def tracer_list(self, ctx):
|
||||
tracers = db_api.tracer_list()
|
||||
print tracers
|
||||
ret = {}
|
||||
for tr in tracers:
|
||||
ret[tr.name] = tr.template
|
||||
|
@ -98,6 +97,15 @@ class ResultEndpoint(object):
|
|||
"data":ret.data,
|
||||
"rtype":ret.rtype} for ret in rets]
|
||||
|
||||
class ConfigEndpoint(object):
|
||||
|
||||
target = oslo_messaging.Target(topic="test", version='1.0')
|
||||
def update_config(self, ctx, data_opts):
|
||||
db_api.update_config(data_opts)
|
||||
|
||||
def get_config(self, ctx):
|
||||
return db_api.get_config()
|
||||
|
||||
transport = oslo_messaging.get_transport(cfg.CONF)
|
||||
target = oslo_messaging.Target(topic='test', server='localhost')
|
||||
endpoints = [
|
||||
|
@ -105,6 +113,7 @@ endpoints = [
|
|||
TraceEndpoint(),
|
||||
TaskEndpoint(),
|
||||
ResultEndpoint(),
|
||||
ConfigEndpoint(),
|
||||
]
|
||||
server = oslo_messaging.get_rpc_server(transport, target, endpoints,
|
||||
executor='blocking')
|
||||
|
|
|
@ -49,7 +49,13 @@ class API(object):
|
|||
raise ValueError("tracer must have a name")
|
||||
if "tpl" not in tracer_opts:
|
||||
raise ValueError("tracer must have a name")
|
||||
return rpcapi.register_tracer(tracer_opts=tracer_opts)
|
||||
rpcapi.register_tracer(tracer_opts=tracer_opts)
|
||||
|
||||
def update_config(self, data_opts):
|
||||
rpcapi.update_config(data_opts=data_opts)
|
||||
|
||||
def get_config(self):
|
||||
return rpcapi.get_config()
|
||||
|
||||
|
||||
api = API()
|
||||
|
|
|
@ -31,5 +31,11 @@ class RPCAPI(object):
|
|||
def register_tracer(self, ctxt={}, tracer_opts=None):
|
||||
self._client.cast(ctxt, "register_tracer", tracer_opts=tracer_opts)
|
||||
|
||||
def update_config(self, ctxt={}, data_opts=None):
|
||||
self._client.cast(ctxt, "update_config", data_opts=data_opts)
|
||||
|
||||
def get_config(self, ctxt={}):
|
||||
return self._client.call(ctxt, "get_config")
|
||||
|
||||
transport = messaging.get_transport(cfg.CONF)
|
||||
rpcapi = RPCAPI(transport)
|
||||
|
|
|
@ -20,30 +20,35 @@ def get_default_tracer_dir():
|
|||
default_data_dir = os.path.join(scalpels_package, "scripts")
|
||||
return default_data_dir
|
||||
|
||||
def do_setup(parser):
|
||||
data_opts = dict(parser.data_opts) if parser.data_opts else None
|
||||
tracer_opts = dict(parser.tracer_opts) if parser.tracer_opts else None
|
||||
if data_opts and data_opts.get("tracer_path") is None: # "" is meaningful sometime
|
||||
data_opts["tracer_path"] = get_default_tracer_dir()
|
||||
setup_config = {"data_opts":data_opts,
|
||||
"force":parser.force,
|
||||
"stat":parser.stat,
|
||||
"tracer":tracer_opts}
|
||||
print "Setup config: %s" % setup_config
|
||||
def do_db(parser):
|
||||
setup_config = {"tracer_path":get_default_tracer_dir()}
|
||||
if parser.force:
|
||||
print "recreating database"
|
||||
db_api.db_drop()
|
||||
db_api.db_create(setup_config)
|
||||
elif parser.data_opts is None and parser.tracer_opts is None and parser.stat is False:
|
||||
else:
|
||||
print "creating database"
|
||||
db_api.db_create(setup_config)
|
||||
|
||||
def do_setup(parser):
|
||||
data_opts = dict(parser.data_opts) if parser.data_opts else None
|
||||
|
||||
if data_opts:
|
||||
agent_api.update_config(data_opts)
|
||||
|
||||
tracer_opts = dict(parser.tracer_opts) if parser.tracer_opts else None
|
||||
|
||||
if tracer_opts:
|
||||
print "registering tracer %s" % tracer_opts["name"]
|
||||
agent_api.register_tracer(tracer_opts)
|
||||
|
||||
if parser.stat:
|
||||
raise NotImplementedError()
|
||||
config = agent_api.get_config()
|
||||
from prettytable import PrettyTable
|
||||
t = PrettyTable(["key", "value"])
|
||||
for k,v in config.items():
|
||||
t.add_row([k, v])
|
||||
print t
|
||||
|
||||
def do_stop(parser):
|
||||
# TODO call rpc server's stop API instead
|
||||
|
@ -59,9 +64,12 @@ def main():
|
|||
rootparser = argparse.ArgumentParser(description="main entry point for scalpels")
|
||||
subparsers = rootparser.add_subparsers(title="actions", dest="action")
|
||||
|
||||
# db actions
|
||||
db = subparsers.add_parser("db-create")
|
||||
db.add_argument("-f", "--force", action="store_true", dest="force", help="re-create db")
|
||||
|
||||
# setup re-setup actions
|
||||
setup = subparsers.add_parser("setup")
|
||||
setup.add_argument("-f", "--force", action="store_true", dest="force", help="re-create db")
|
||||
setup.add_argument("-d", "--data_opts", action="append", dest="data_opts", type=lambda kv:kv.split("="), help="data opts for tracer variables", required=False)
|
||||
setup.add_argument("-t", "--tracer_opts", action="append", dest="tracer_opts", type=lambda kv:kv.split("="), help="tracer opts for registering", required=False)
|
||||
setup.add_argument("-s", "--stat", action="store_true", dest="stat", help="setup stats for this agent")
|
||||
|
@ -70,6 +78,9 @@ def main():
|
|||
|
||||
parser = rootparser.parse_args()
|
||||
|
||||
if parser.action == "db-create":
|
||||
do_db(parser)
|
||||
|
||||
if parser.action == "setup":
|
||||
do_setup(parser)
|
||||
|
||||
|
|
|
@ -62,3 +62,9 @@ def register_tracer(name, template):
|
|||
|
||||
def tracer_list():
|
||||
return IMPL.tracer_list()
|
||||
|
||||
def update_config(data_opts):
|
||||
return IMPL.update_config(data_opts)
|
||||
|
||||
def get_config():
|
||||
return IMPL.get_config()
|
||||
|
|
|
@ -8,6 +8,7 @@ from scalpels.db.sqlalchemy import BASE
|
|||
from scalpels.db.sqlalchemy import models
|
||||
from oslo_db.sqlalchemy import session as db_session
|
||||
from oslo_db.sqlalchemy import utils as oslodbsqa_utils
|
||||
from copy import deepcopy as copy
|
||||
|
||||
CONF = cfg.CONF
|
||||
|
||||
|
@ -125,3 +126,16 @@ def register_tracer(name, template):
|
|||
def tracer_list():
|
||||
tracers = model_query(models.Tracer).all()
|
||||
return tracers
|
||||
|
||||
def update_config(data_opts):
|
||||
session = get_session()
|
||||
config = model_query(models.Setup, session=session).first()
|
||||
new = copy(config.config)
|
||||
new.update(data_opts)
|
||||
config.update({"config":new})
|
||||
config.save(session=session)
|
||||
return config
|
||||
|
||||
def get_config():
|
||||
config = model_query(models.Setup).first()
|
||||
return config.config
|
||||
|
|
Loading…
Reference in New Issue