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:
Kun Huang 2015-11-17 18:16:45 +08:00
parent bc668d0230
commit 61a8907939
6 changed files with 67 additions and 15 deletions

View File

@ -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')

View File

@ -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()

View File

@ -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)

View File

@ -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)

View File

@ -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()

View File

@ -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