afb-trace: Add tracing features to API monitor
[src/app-framework-binder.git] / src / monitor-api.inc
1
2 static const char _afb_description_v2_monitor[] =
3     "{\"openapi\":\"3.0.0\",\"info\":{\"description\":\"\",\"title\":\"monito"
4     "r\",\"version\":\"1.0\",\"x-binding-c-generator\":{\"api\":\"monitor\",\""
5     "version\":2,\"prefix\":\"f_\",\"postfix\":\"\",\"preinit\":null,\"init\""
6     ":null,\"onevent\":null,\"scope\":\"static\",\"private\":true}},\"servers"
7     "\":[{\"url\":\"ws://{host}:{port}/api/monitor\",\"description\":\"The AP"
8     "I server.\",\"variables\":{\"host\":{\"default\":\"localhost\"},\"port\""
9     ":{\"default\":\"1234\"}},\"x-afb-events\":[{\"$ref\":\"#/components/sche"
10     "mas/afb-event\"}]}],\"components\":{\"schemas\":{\"afb-reply\":{\"$ref\""
11     ":\"#/components/schemas/afb-reply-v1\"},\"afb-event\":{\"$ref\":\"#/comp"
12     "onents/schemas/afb-event-v1\"},\"afb-reply-v1\":{\"title\":\"Generic res"
13     "ponse.\",\"type\":\"object\",\"required\":[\"jtype\",\"request\"],\"prop"
14     "erties\":{\"jtype\":{\"type\":\"string\",\"const\":\"afb-reply\"},\"requ"
15     "est\":{\"type\":\"object\",\"required\":[\"status\"],\"properties\":{\"s"
16     "tatus\":{\"type\":\"string\"},\"info\":{\"type\":\"string\"},\"token\":{"
17     "\"type\":\"string\"},\"uuid\":{\"type\":\"string\"},\"reqid\":{\"type\":"
18     "\"string\"}}},\"response\":{\"type\":\"object\"}}},\"afb-event-v1\":{\"t"
19     "ype\":\"object\",\"required\":[\"jtype\",\"event\"],\"properties\":{\"jt"
20     "ype\":{\"type\":\"string\",\"const\":\"afb-event\"},\"event\":{\"type\":"
21     "\"string\"},\"data\":{\"type\":\"object\"}}},\"set-verbosity\":{\"anyOf\""
22     ":[{\"$ref\":\"#/components/schemas/verbosity-map\"},{\"$ref\":\"#/compon"
23     "ents/schemas/verbosity-level\"}]},\"get-request\":{\"type\":\"object\",\""
24     "properties\":{\"verbosity\":{\"$ref\":\"#/components/schemas/get-verbosi"
25     "ty\"},\"apis\":{\"$ref\":\"#/components/schemas/get-apis\"}}},\"get-resp"
26     "onse\":{\"type\":\"object\",\"properties\":{\"verbosity\":{\"$ref\":\"#/"
27     "components/schemas/verbosity-map\"},\"apis\":{\"type\":\"object\"}}},\"g"
28     "et-verbosity\":{\"anyOf\":[{\"type\":\"boolean\"},{\"type\":\"array\",\""
29     "items\":{\"type\":\"string\"}},{\"type\":\"object\"}]},\"get-apis\":{\"a"
30     "nyOf\":[{\"type\":\"boolean\"},{\"type\":\"array\",\"items\":{\"type\":\""
31     "string\"}},{\"type\":\"object\"}]},\"verbosity-map\":{\"type\":\"object\""
32     ",\"patternProperties\":{\"^.*$\":{\"$ref\":\"#/components/schemas/verbos"
33     "ity-level\"}}},\"verbosity-level\":{\"enum\":[\"debug\",3,\"info\",2,\"n"
34     "otice\",\"warning\",1,\"error\",0]},\"trace-add\":{\"anyOf\":[{\"type\":"
35     "\"array\",\"items\":{\"$ref\":\"#/components/schemas/trace-add-object\"}"
36     "},{\"$ref\":\"#/components/schemas/trace-add-any\"}]},\"trace-add-any\":"
37     "{\"anyOf\":[{\"$ref\":\"#/components/schemas/trace-add-request\"},{\"$re"
38     "f\":\"#/components/schemas/trace-add-object\"}]},\"trace-add-object\":{\""
39     "type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"descri"
40     "ption\":\"name of the generated event\",\"default\":\"trace\"},\"tag\":{"
41     "\"type\":\"string\",\"description\":\"tag for grouping traces\",\"defaul"
42     "t\":\"trace\"},\"api\":{\"type\":\"string\",\"description\":\"api for re"
43     "quests, daemons and services\"},\"verb\":{\"type\":\"string\",\"descript"
44     "ion\":\"verb for requests\"},\"session\":{\"type\":\"string\",\"descript"
45     "ion\":\"session for requests\"},\"pattern\":{\"type\":\"string\",\"descr"
46     "iption\":\"pattern for events\"},\"request\":{\"$ref\":\"#/components/sc"
47     "hemas/trace-add-request\"},\"daemon\":{\"$ref\":\"#/components/schemas/t"
48     "race-add-daemon\"},\"service\":{\"$ref\":\"#/components/schemas/trace-ad"
49     "d-service\"},\"event\":{\"$ref\":\"#/components/schemas/trace-add-event\""
50     "},\"for\":{\"$ref\":\"#/components/schemas/trace-add\"}},\"examples\":[{"
51     "\"tag\":\"1\",\"for\":[\"common\",{\"api\":\"xxx\",\"request\":\"*\",\"d"
52     "aemon\":\"*\",\"service\":\"*\"}]}]},\"trace-add-request\":{\"anyOf\":[{"
53     "\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/trace-requ"
54     "est-names\"}},{\"$ref\":\"#/components/schemas/trace-request-names\"}]},"
55     "\"trace-request-names\":{\"title\":\"name of traceable items of requests"
56     "\",\"enum\":[\"*\",\"addref\",\"all\",\"args\",\"begin\",\"common\",\"co"
57     "ntext\",\"context_get\",\"context_set\",\"end\",\"event\",\"extra\",\"fa"
58     "il\",\"get\",\"json\",\"life\",\"ref\",\"result\",\"session\",\"session_"
59     "close\",\"session_set_LOA\",\"simple\",\"store\",\"stores\",\"subcall\","
60     "\"subcall_result\",\"subcalls\",\"subcallsync\",\"subcallsync_result\",\""
61     "subscribe\",\"success\",\"unref\",\"unstore\",\"unsubscribe\",\"vverbose"
62     "\"]},\"trace-add-daemon\":{\"anyOf\":[{\"type\":\"array\",\"items\":{\"$"
63     "ref\":\"#/components/schemas/trace-daemon-names\"}},{\"$ref\":\"#/compon"
64     "ents/schemas/trace-daemon-names\"}]},\"trace-daemon-names\":{\"title\":\""
65     "name of traceable items of daemons\",\"enum\":[\"*\",\"all\",\"common\","
66     "\"event_broadcast_after\",\"event_broadcast_before\",\"event_make\",\"ex"
67     "tra\",\"get_event_loop\",\"get_system_bus\",\"get_user_bus\",\"queue_job"
68     "\",\"require_api\",\"require_api_result\",\"rootdir_get_fd\",\"rootdir_o"
69     "pen_locale\",\"unstore_req\",\"vverbose\"]},\"trace-add-service\":{\"any"
70     "Of\":[{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/tra"
71     "ce-service-names\"}},{\"$ref\":\"#/components/schemas/trace-service-name"
72     "s\"}]},\"trace-service-names\":{\"title\":\"name of traceable items of s"
73     "ervices\",\"enum\":[\"*\",\"all\",\"call\",\"call_result\",\"callsync\","
74     "\"callsync_result\",\"on_event_after\",\"on_event_before\",\"start_after"
75     "\",\"start_before\"]},\"trace-add-event\":{\"anyOf\":[{\"type\":\"array\""
76     ",\"items\":{\"$ref\":\"#/components/schemas/trace-event-names\"}},{\"$re"
77     "f\":\"#/components/schemas/trace-event-names\"}]},\"trace-event-names\":"
78     "{\"title\":\"name of traceable items of events\",\"enum\":[\"*\",\"all\""
79     ",\"broadcast_after\",\"broadcast_before\",\"common\",\"create\",\"drop\""
80     ",\"extra\",\"name\",\"push_after\",\"push_before\"]},\"trace-drop\":{\"a"
81     "nyOf\":[{\"type\":\"boolean\"},{\"type\":\"object\",\"properties\":{\"ev"
82     "ent\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"array\",\"items\":\""
83     "string\"}]},\"tag\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"array\""
84     ",\"items\":\"string\"}]},\"session\":{\"anyOf\":[{\"type\":\"string\"},{"
85     "\"type\":\"array\",\"items\":\"string\"}]}}}]}},\"x-permissions\":{\"set"
86     "\":{\"permission\":\"urn:AGL:permission:monitor:public:set\"},\"get\":{\""
87     "permission\":\"urn:AGL:permission:monitor:public:get\"},\"get-or-set\":{"
88     "\"anyOf\":[{\"$ref\":\"#/components/x-permissions/get\"},{\"$ref\":\"#/c"
89     "omponents/x-permissions/set\"}]}}},\"paths\":{\"/get\":{\"description\":"
90     "\"Get monitoring data.\",\"get\":{\"x-permissions\":{\"$ref\":\"#/compon"
91     "ents/x-permissions/get-or-set\"},\"parameters\":[{\"in\":\"query\",\"nam"
92     "e\":\"verbosity\",\"required\":false,\"schema\":{\"$ref\":\"#/components"
93     "/schemas/get-verbosity\"}},{\"in\":\"query\",\"name\":\"apis\",\"require"
94     "d\":false,\"schema\":{\"$ref\":\"#/components/schemas/get-apis\"}}],\"re"
95     "sponses\":{\"200\":{\"description\":\"A complex object array response\","
96     "\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/s"
97     "chemas/afb-reply\"}}}}}}},\"/set\":{\"description\":\"Set monitoring act"
98     "ions.\",\"get\":{\"x-permissions\":{\"$ref\":\"#/components/x-permission"
99     "s/set\"},\"parameters\":[{\"in\":\"query\",\"name\":\"verbosity\",\"requ"
100     "ired\":false,\"schema\":{\"$ref\":\"#/components/schemas/set-verbosity\""
101     "}}],\"responses\":{\"200\":{\"description\":\"A complex object array res"
102     "ponse\",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/comp"
103     "onents/schemas/afb-reply\"}}}}}}},\"/trace\":{\"description\":\"Set moni"
104     "toring actions.\",\"get\":{\"x-permissions\":{\"$ref\":\"#/components/x-"
105     "permissions/set\"},\"parameters\":[{\"in\":\"query\",\"name\":\"add\",\""
106     "required\":false,\"schema\":{\"$ref\":\"#/components/schemas/trace-add\""
107     "}},{\"in\":\"query\",\"name\":\"drop\",\"required\":false,\"schema\":{\""
108     "$ref\":\"#/components/schemas/trace-drop\"}}],\"responses\":{\"200\":{\""
109     "description\":\"A complex object array response\",\"content\":{\"applica"
110     "tion/json\":{\"schema\":{\"$ref\":\"#/components/schemas/afb-reply\"}}}}"
111     "}}}}}"
112 ;
113
114 static const struct afb_auth _afb_auths_v2_monitor[] = {
115         { .type = afb_auth_Permission, .text = "urn:AGL:permission:monitor:public:set" },
116         { .type = afb_auth_Permission, .text = "urn:AGL:permission:monitor:public:get" },
117         { .type = afb_auth_Or, .first = &_afb_auths_v2_monitor[1], .next = &_afb_auths_v2_monitor[0] }
118 };
119
120 static void f_get(struct afb_req req);
121 static void f_set(struct afb_req req);
122 static void f_trace(struct afb_req req);
123
124 static const struct afb_verb_v2 _afb_verbs_v2_monitor[] = {
125     {
126         .verb = "get",
127         .callback = f_get,
128         .auth = &_afb_auths_v2_monitor[2],
129         .info = NULL,
130         .session = AFB_SESSION_NONE_V2
131     },
132     {
133         .verb = "set",
134         .callback = f_set,
135         .auth = &_afb_auths_v2_monitor[0],
136         .info = NULL,
137         .session = AFB_SESSION_NONE_V2
138     },
139     {
140         .verb = "trace",
141         .callback = f_trace,
142         .auth = &_afb_auths_v2_monitor[0],
143         .info = NULL,
144         .session = AFB_SESSION_NONE_V2
145     },
146     { .verb = NULL }
147 };
148
149 static const struct afb_binding_v2 _afb_binding_v2_monitor = {
150     .api = "monitor",
151     .specification = _afb_description_v2_monitor,
152     .info = NULL,
153     .verbs = _afb_verbs_v2_monitor,
154     .preinit = NULL,
155     .init = NULL,
156     .onevent = NULL,
157     .noconcurrency = 0
158 };
159