107 lines
2.8 KiB
Python
107 lines
2.8 KiB
Python
from oslo_config import cfg
|
|
import oslo_messaging
|
|
from scalpels.db import api as db_api
|
|
from scalpels.agents.base import run_agent
|
|
import psutil
|
|
import signal
|
|
|
|
class ServerControlEndpoint(object):
|
|
|
|
target = oslo_messaging.Target(topic="test", version='1.0')
|
|
|
|
def __init__(self, server):
|
|
self.server = server
|
|
|
|
def stop(self, ctx):
|
|
if server:
|
|
self.server.stop()
|
|
|
|
class TraceEndpoint(object):
|
|
|
|
target = oslo_messaging.Target(topic="test", version='1.0')
|
|
|
|
def tracer_list(self, ctx):
|
|
# TODO db_api
|
|
# XXX ctx required?
|
|
from scalpels.client.utils import traces_map
|
|
return traces_map
|
|
|
|
def start_tracers(self, ctx, tracers):
|
|
print locals()
|
|
task = db_api.task_create(results=[], pids=[])
|
|
|
|
pids = []
|
|
for tr in tracers:
|
|
pid = run_agent(task.uuid, tr)
|
|
pids.append(pid)
|
|
|
|
task = db_api.task_update(task.uuid, pids=pids)
|
|
print "task <%s> runs successfully!" % task.uuid
|
|
|
|
class TaskEndpoint(object):
|
|
|
|
target = oslo_messaging.Target(topic="test", version='1.0')
|
|
|
|
LOWEST = 8
|
|
|
|
def get_last_task(self):
|
|
# XXX put it utils?
|
|
last_task = db_api.task_get_last()
|
|
return last_task
|
|
|
|
def stop_task(self, ctx, uuid):
|
|
|
|
print "command stop: %s" % ctx
|
|
print "task: <%s>" % uuid
|
|
task = db_api.task_get(uuid)
|
|
for pid in task.pids:
|
|
p = psutil.Process(int(pid))
|
|
p.send_signal(signal.SIGINT)
|
|
|
|
def get_task(self, ctx, uuid, fuzzy):
|
|
task = db_api.task_get(uuid, fuzzy)
|
|
# TODO object
|
|
return {"uuid":task.uuid,
|
|
"results":task.results,}
|
|
|
|
def get_latest_task(self, ctx):
|
|
task = db_api.task_get_last()
|
|
# TODO object
|
|
return {"uuid":task.uuid,
|
|
"results":task.results,}
|
|
|
|
class ResultEndpoint(object):
|
|
|
|
target = oslo_messaging.Target(topic="test", version='1.0')
|
|
|
|
def get_result(self, ctx, uuid):
|
|
ret = db_api.result_get(uuid)
|
|
# TODO object
|
|
return {
|
|
"id":ret.id,
|
|
"uuid":ret.uuid,
|
|
"name":ret.name,
|
|
"unit":ret.unit,
|
|
"data":ret.data,
|
|
}
|
|
|
|
def get_all_results(self, ctx):
|
|
rets = db_api.get_all_results()
|
|
# TODO object
|
|
return [{"id":ret.id,
|
|
"uuid":ret.uuid,
|
|
"name":ret.name,
|
|
"unit":ret.unit,
|
|
"data":ret.data} for ret in rets]
|
|
|
|
transport = oslo_messaging.get_transport(cfg.CONF)
|
|
target = oslo_messaging.Target(topic='test', server='localhost')
|
|
endpoints = [
|
|
ServerControlEndpoint(None),
|
|
TraceEndpoint(),
|
|
TaskEndpoint(),
|
|
ResultEndpoint(),
|
|
]
|
|
server = oslo_messaging.get_rpc_server(transport, target, endpoints,
|
|
executor='blocking')
|