aboutsummaryrefslogtreecommitdiffstats
path: root/src/monitor-api.inc
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2017-07-31 17:50:13 +0200
committerJosé Bollo <jose.bollo@iot.bzh>2017-08-08 11:55:36 +0200
commit4ecf37c1899349e6ef7ac08813ebb52fc80b2677 (patch)
tree88d6b940fc8e6f296ac2a93dfab32bba1711418d /src/monitor-api.inc
parent330edf6a1ec91fa5a9829d6450fa4fff0b91c693 (diff)
afb-trace: Add tracing features to API monitor
This api allows to receive events when particular actions are reached. At the moment, tracing is bound to the API monitor and can trace anything. In the future, this will not be the case and the API monitor will only allow to trace requests of its session. The tracing of all will be available for supervision only. Change-Id: I880852612c2f77ff5329496b16c75fe602db4090 Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'src/monitor-api.inc')
-rw-r--r--src/monitor-api.inc149
1 files changed, 116 insertions, 33 deletions
diff --git a/src/monitor-api.inc b/src/monitor-api.inc
index e5fe5e53..689bdb9b 100644
--- a/src/monitor-api.inc
+++ b/src/monitor-api.inc
@@ -1,39 +1,114 @@
static const char _afb_description_v2_monitor[] =
"{\"openapi\":\"3.0.0\",\"info\":{\"description\":\"\",\"title\":\"monito"
- "r\",\"version\":\"1.0\",\"x-binding\":{\"version\":2,\"prefix\":\"f_\",\""
- "postfix\":\"\",\"start\":null,\"onevent\":null,\"init\":null,\"scope\":\""
- "static\",\"private\":true}},\"servers\":[{\"url\":\"ws://{host}:{port}/a"
- "pi/monitor\",\"description\":\"The API server.\",\"variables\":{\"host\""
- ":{\"default\":\"localhost\"},\"port\":{\"default\":\"1234\"}},\"x-afb-ev"
- "ents\":[{\"$ref\":\"#/components/schemas/afb-event\"}]}],\"components\":"
- "{\"schemas\":{\"afb-reply\":{\"$ref\":\"#/components/schemas/afb-reply-v"
- "1\"},\"afb-event\":{\"$ref\":\"#/components/schemas/afb-event-v1\"},\"af"
- "b-reply-v1\":{\"title\":\"Generic response.\",\"type\":\"object\",\"requ"
- "ired\":[\"jtype\",\"request\"],\"properties\":{\"jtype\":{\"const\":\"af"
- "b-reply\"},\"request\":{\"type\":\"object\",\"required\":[\"status\"],\""
- "properties\":{\"status\":{\"type\":\"string\"},\"info\":{\"type\":\"stri"
- "ng\"},\"token\":{\"type\":\"string\"},\"uuid\":{\"type\":\"string\"},\"r"
- "eqid\":{\"type\":\"string\"}}},\"response\":{\"type\":\"object\"}}},\"af"
- "b-event-v1\":{\"type\":\"object\",\"properties\":{\"jtype\":{\"type\":\""
- "string\"},\"event\":{\"type\":\"string\"},\"data\":{\"type\":\"object\"}"
- "}}},\"x-permissions\":{\"set\":{\"permission\":\"urn:AGL:permission:moni"
- "tor:public:set\"},\"get\":{\"permission\":\"urn:AGL:permission:monitor:p"
- "ublic:get\"},\"get-or-set\":{\"anyOf\":[{\"$ref\":\"#/components/x-permi"
- "ssions/get\"},{\"$ref\":\"#/components/x-permissions/set\"}]}}},\"paths\""
- ":{\"/get\":{\"description\":\"Get monitoring data.\",\"x-permissions\":{"
- "\"$ref\":\"#/components/x-permissions/get-or-set\"},\"get\":{\"parameter"
- "s\":[{\"in\":\"query\",\"name\":\"filter\",\"required\":false,\"schema\""
- ":{\"type\":\"object\",\"properties\":{\"event\":{\"type\":\"string\"}}}}"
- "],\"responses\":{\"200\":{\"description\":\"A complex object array respo"
- "nse\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/compon"
- "ents/schemas/afb-reply\"}}}}}}},\"/set\":{\"description\":\"Set monitori"
- "ng actions.\",\"x-permissions\":{\"$ref\":\"#/components/x-permissions/s"
- "et\"},\"get\":{\"parameters\":[{\"in\":\"query\",\"name\":\"filter\",\"r"
- "equired\":false,\"schema\":{\"type\":\"object\",\"properties\":{\"event\""
- ":{\"type\":\"string\"}}}}],\"responses\":{\"200\":{\"description\":\"A c"
- "omplex object array response\",\"content\":{\"application/json\":{\"sche"
- "ma\":{\"$ref\":\"#/components/schemas/afb-reply\"}}}}}}}}}"
+ "r\",\"version\":\"1.0\",\"x-binding-c-generator\":{\"api\":\"monitor\",\""
+ "version\":2,\"prefix\":\"f_\",\"postfix\":\"\",\"preinit\":null,\"init\""
+ ":null,\"onevent\":null,\"scope\":\"static\",\"private\":true}},\"servers"
+ "\":[{\"url\":\"ws://{host}:{port}/api/monitor\",\"description\":\"The AP"
+ "I server.\",\"variables\":{\"host\":{\"default\":\"localhost\"},\"port\""
+ ":{\"default\":\"1234\"}},\"x-afb-events\":[{\"$ref\":\"#/components/sche"
+ "mas/afb-event\"}]}],\"components\":{\"schemas\":{\"afb-reply\":{\"$ref\""
+ ":\"#/components/schemas/afb-reply-v1\"},\"afb-event\":{\"$ref\":\"#/comp"
+ "onents/schemas/afb-event-v1\"},\"afb-reply-v1\":{\"title\":\"Generic res"
+ "ponse.\",\"type\":\"object\",\"required\":[\"jtype\",\"request\"],\"prop"
+ "erties\":{\"jtype\":{\"type\":\"string\",\"const\":\"afb-reply\"},\"requ"
+ "est\":{\"type\":\"object\",\"required\":[\"status\"],\"properties\":{\"s"
+ "tatus\":{\"type\":\"string\"},\"info\":{\"type\":\"string\"},\"token\":{"
+ "\"type\":\"string\"},\"uuid\":{\"type\":\"string\"},\"reqid\":{\"type\":"
+ "\"string\"}}},\"response\":{\"type\":\"object\"}}},\"afb-event-v1\":{\"t"
+ "ype\":\"object\",\"required\":[\"jtype\",\"event\"],\"properties\":{\"jt"
+ "ype\":{\"type\":\"string\",\"const\":\"afb-event\"},\"event\":{\"type\":"
+ "\"string\"},\"data\":{\"type\":\"object\"}}},\"set-verbosity\":{\"anyOf\""
+ ":[{\"$ref\":\"#/components/schemas/verbosity-map\"},{\"$ref\":\"#/compon"
+ "ents/schemas/verbosity-level\"}]},\"get-request\":{\"type\":\"object\",\""
+ "properties\":{\"verbosity\":{\"$ref\":\"#/components/schemas/get-verbosi"
+ "ty\"},\"apis\":{\"$ref\":\"#/components/schemas/get-apis\"}}},\"get-resp"
+ "onse\":{\"type\":\"object\",\"properties\":{\"verbosity\":{\"$ref\":\"#/"
+ "components/schemas/verbosity-map\"},\"apis\":{\"type\":\"object\"}}},\"g"
+ "et-verbosity\":{\"anyOf\":[{\"type\":\"boolean\"},{\"type\":\"array\",\""
+ "items\":{\"type\":\"string\"}},{\"type\":\"object\"}]},\"get-apis\":{\"a"
+ "nyOf\":[{\"type\":\"boolean\"},{\"type\":\"array\",\"items\":{\"type\":\""
+ "string\"}},{\"type\":\"object\"}]},\"verbosity-map\":{\"type\":\"object\""
+ ",\"patternProperties\":{\"^.*$\":{\"$ref\":\"#/components/schemas/verbos"
+ "ity-level\"}}},\"verbosity-level\":{\"enum\":[\"debug\",3,\"info\",2,\"n"
+ "otice\",\"warning\",1,\"error\",0]},\"trace-add\":{\"anyOf\":[{\"type\":"
+ "\"array\",\"items\":{\"$ref\":\"#/components/schemas/trace-add-object\"}"
+ "},{\"$ref\":\"#/components/schemas/trace-add-any\"}]},\"trace-add-any\":"
+ "{\"anyOf\":[{\"$ref\":\"#/components/schemas/trace-add-request\"},{\"$re"
+ "f\":\"#/components/schemas/trace-add-object\"}]},\"trace-add-object\":{\""
+ "type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"descri"
+ "ption\":\"name of the generated event\",\"default\":\"trace\"},\"tag\":{"
+ "\"type\":\"string\",\"description\":\"tag for grouping traces\",\"defaul"
+ "t\":\"trace\"},\"api\":{\"type\":\"string\",\"description\":\"api for re"
+ "quests, daemons and services\"},\"verb\":{\"type\":\"string\",\"descript"
+ "ion\":\"verb for requests\"},\"session\":{\"type\":\"string\",\"descript"
+ "ion\":\"session for requests\"},\"pattern\":{\"type\":\"string\",\"descr"
+ "iption\":\"pattern for events\"},\"request\":{\"$ref\":\"#/components/sc"
+ "hemas/trace-add-request\"},\"daemon\":{\"$ref\":\"#/components/schemas/t"
+ "race-add-daemon\"},\"service\":{\"$ref\":\"#/components/schemas/trace-ad"
+ "d-service\"},\"event\":{\"$ref\":\"#/components/schemas/trace-add-event\""
+ "},\"for\":{\"$ref\":\"#/components/schemas/trace-add\"}},\"examples\":[{"
+ "\"tag\":\"1\",\"for\":[\"common\",{\"api\":\"xxx\",\"request\":\"*\",\"d"
+ "aemon\":\"*\",\"service\":\"*\"}]}]},\"trace-add-request\":{\"anyOf\":[{"
+ "\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/trace-requ"
+ "est-names\"}},{\"$ref\":\"#/components/schemas/trace-request-names\"}]},"
+ "\"trace-request-names\":{\"title\":\"name of traceable items of requests"
+ "\",\"enum\":[\"*\",\"addref\",\"all\",\"args\",\"begin\",\"common\",\"co"
+ "ntext\",\"context_get\",\"context_set\",\"end\",\"event\",\"extra\",\"fa"
+ "il\",\"get\",\"json\",\"life\",\"ref\",\"result\",\"session\",\"session_"
+ "close\",\"session_set_LOA\",\"simple\",\"store\",\"stores\",\"subcall\","
+ "\"subcall_result\",\"subcalls\",\"subcallsync\",\"subcallsync_result\",\""
+ "subscribe\",\"success\",\"unref\",\"unstore\",\"unsubscribe\",\"vverbose"
+ "\"]},\"trace-add-daemon\":{\"anyOf\":[{\"type\":\"array\",\"items\":{\"$"
+ "ref\":\"#/components/schemas/trace-daemon-names\"}},{\"$ref\":\"#/compon"
+ "ents/schemas/trace-daemon-names\"}]},\"trace-daemon-names\":{\"title\":\""
+ "name of traceable items of daemons\",\"enum\":[\"*\",\"all\",\"common\","
+ "\"event_broadcast_after\",\"event_broadcast_before\",\"event_make\",\"ex"
+ "tra\",\"get_event_loop\",\"get_system_bus\",\"get_user_bus\",\"queue_job"
+ "\",\"require_api\",\"require_api_result\",\"rootdir_get_fd\",\"rootdir_o"
+ "pen_locale\",\"unstore_req\",\"vverbose\"]},\"trace-add-service\":{\"any"
+ "Of\":[{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/tra"
+ "ce-service-names\"}},{\"$ref\":\"#/components/schemas/trace-service-name"
+ "s\"}]},\"trace-service-names\":{\"title\":\"name of traceable items of s"
+ "ervices\",\"enum\":[\"*\",\"all\",\"call\",\"call_result\",\"callsync\","
+ "\"callsync_result\",\"on_event_after\",\"on_event_before\",\"start_after"
+ "\",\"start_before\"]},\"trace-add-event\":{\"anyOf\":[{\"type\":\"array\""
+ ",\"items\":{\"$ref\":\"#/components/schemas/trace-event-names\"}},{\"$re"
+ "f\":\"#/components/schemas/trace-event-names\"}]},\"trace-event-names\":"
+ "{\"title\":\"name of traceable items of events\",\"enum\":[\"*\",\"all\""
+ ",\"broadcast_after\",\"broadcast_before\",\"common\",\"create\",\"drop\""
+ ",\"extra\",\"name\",\"push_after\",\"push_before\"]},\"trace-drop\":{\"a"
+ "nyOf\":[{\"type\":\"boolean\"},{\"type\":\"object\",\"properties\":{\"ev"
+ "ent\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"array\",\"items\":\""
+ "string\"}]},\"tag\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"array\""
+ ",\"items\":\"string\"}]},\"session\":{\"anyOf\":[{\"type\":\"string\"},{"
+ "\"type\":\"array\",\"items\":\"string\"}]}}}]}},\"x-permissions\":{\"set"
+ "\":{\"permission\":\"urn:AGL:permission:monitor:public:set\"},\"get\":{\""
+ "permission\":\"urn:AGL:permission:monitor:public:get\"},\"get-or-set\":{"
+ "\"anyOf\":[{\"$ref\":\"#/components/x-permissions/get\"},{\"$ref\":\"#/c"
+ "omponents/x-permissions/set\"}]}}},\"paths\":{\"/get\":{\"description\":"
+ "\"Get monitoring data.\",\"get\":{\"x-permissions\":{\"$ref\":\"#/compon"
+ "ents/x-permissions/get-or-set\"},\"parameters\":[{\"in\":\"query\",\"nam"
+ "e\":\"verbosity\",\"required\":false,\"schema\":{\"$ref\":\"#/components"
+ "/schemas/get-verbosity\"}},{\"in\":\"query\",\"name\":\"apis\",\"require"
+ "d\":false,\"schema\":{\"$ref\":\"#/components/schemas/get-apis\"}}],\"re"
+ "sponses\":{\"200\":{\"description\":\"A complex object array response\","
+ "\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/s"
+ "chemas/afb-reply\"}}}}}}},\"/set\":{\"description\":\"Set monitoring act"
+ "ions.\",\"get\":{\"x-permissions\":{\"$ref\":\"#/components/x-permission"
+ "s/set\"},\"parameters\":[{\"in\":\"query\",\"name\":\"verbosity\",\"requ"
+ "ired\":false,\"schema\":{\"$ref\":\"#/components/schemas/set-verbosity\""
+ "}}],\"responses\":{\"200\":{\"description\":\"A complex object array res"
+ "ponse\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/comp"
+ "onents/schemas/afb-reply\"}}}}}}},\"/trace\":{\"description\":\"Set moni"
+ "toring actions.\",\"get\":{\"x-permissions\":{\"$ref\":\"#/components/x-"
+ "permissions/set\"},\"parameters\":[{\"in\":\"query\",\"name\":\"add\",\""
+ "required\":false,\"schema\":{\"$ref\":\"#/components/schemas/trace-add\""
+ "}},{\"in\":\"query\",\"name\":\"drop\",\"required\":false,\"schema\":{\""
+ "$ref\":\"#/components/schemas/trace-drop\"}}],\"responses\":{\"200\":{\""
+ "description\":\"A complex object array response\",\"content\":{\"applica"
+ "tion/json\":{\"schema\":{\"$ref\":\"#/components/schemas/afb-reply\"}}}}"
+ "}}}}}"
;
static const struct afb_auth _afb_auths_v2_monitor[] = {
@@ -44,6 +119,7 @@ static const struct afb_auth _afb_auths_v2_monitor[] = {
static void f_get(struct afb_req req);
static void f_set(struct afb_req req);
+static void f_trace(struct afb_req req);
static const struct afb_verb_v2 _afb_verbs_v2_monitor[] = {
{
@@ -60,6 +136,13 @@ static const struct afb_verb_v2 _afb_verbs_v2_monitor[] = {
.info = NULL,
.session = AFB_SESSION_NONE_V2
},
+ {
+ .verb = "trace",
+ .callback = f_trace,
+ .auth = &_afb_auths_v2_monitor[0],
+ .info = NULL,
+ .session = AFB_SESSION_NONE_V2
+ },
{ .verb = NULL }
};