- A postgresql server
libpqinstalled
/config/settings.yml contains the port and database settings, please refer to yesod's document.
/config/lambda-settings.yml contains the configuration specified for lambda project.
-
root-password: since trace must be run in superuser mode, you should provide a root password here, this will be used insudocommand. -
bpf/stap-path: path to the executables. -
submit-chunk-size: http trace results submitting chuck size (in bytes). -
platform-url: url of the platform. -
secret: secret key to verify the identity. -
endpoint-uuid: uuid to identify endpoint.
The communication between the endpoint and the server must be verified. The method is to add a Authorization header. The format is as the following:
[uuid][argon2 of password]
example:
4633d686-f75d-4d1f-8415-02ce37d9e5f8$argon2i$v=19$m=4096,t=3,p=1$lxQKK/JGRLqc01yCPpJvSw$FUjxqpeiwORBGcgzPSytgHf1LTdbMLbGOyCqg61BJoM
-
/heartbeat GET: return a json with fieldstatusandtime.statusshould bealiveandtimeshould be the utc time when replying the request. -
/traces GET: get all traces in the database. The format is as following{ "traceNo": 1, // database id "info": { "process": "/bin/bash", // the process to trace "funtions": ["xmalloc", "xfree"], // the functions to trace "environment": [], // additional environment variables "value": [], // correspoinding value to environment variables "options": [], // addtional options "traceType": [] // BPF or STAP } } -
/trace PUT: put a trace template to the database. The content type must be set asapplication/json. The body format is as the following:{ "process": "/bin/bash", // the process to trace "funtions": ["xmalloc", "xfree"], // the functions to trace "environment": [], // additional environment variables "value": [], // correspoinding value to environment variables "options": [], // addtional options "traceType": [] // BPF or STAP } -
/trace/start POST: start the trace. The content type must be set asapplication/json. The body format is as the following:{ "traceT": "STAP", // trace type "traceId": 1, // trace id (database) "lasting": 3600, // the lasting time of trace (in seconds) }The return form is also json:
{ "thread": 54, // light weight haskell thread id "filePath": "/tmp/4633d686-f75d-4d1f-8415-02ce37d9e5f8.trace" // used as the identifier of a trace }The trace info will be sent to the server via several HTTP PUT request. The url is "/submit"
- At the beginning, a start request will be sent:
{ "trace": "/tmp/4633d686-f75d-4d1f-8415-02ce37d9e5f8.trace", "status": "start" } - Then, whenever the buffer limit is reached, a request contains chunked trace result will be sent.
{ "trace": "/tmp/4633d686-f75d-4d1f-8415-02ce37d9e5f8.trace", "no": <integer represents the chunk number (increasing)>, "field": <BASE64 of current chunk info> } - When finished, a finishing request will be sent:
{ "trace": "/tmp/4633d686-f75d-4d1f-8415-02ce37d9e5f8.trace", "stderr": <as the name>, "code": <exit code>, "status": "finished" }
- At the beginning, a start request will be sent:
-
/trace/remove POST: remove a trace from the database. The content type must be set asapplication/json. The body format is as the following:{ "removeType": "STAP", // trace type "removeId": 5 // trace id } -
/trace/running GET: get a running trace info. Example url:/trace/running?path=/tmp/4633d686-f75d-4d1f-8415-02ce37d9e5f8.trace. The return format is json:{ "process": "/bin/bash", // the process to trace "funtions": ["xmalloc", "xfree"], // the functions to trace "environment": [], // additional environment variables "value": [], // correspoinding value to environment variables "options": [], // addtional options "traceType": [] // BPF or STAP } -
/traces/running/all GET: get all running traces. The return type is json list. Objects is same as/trace/running GET. -
/trace/kill POST: kill a running trace. Return a plaintextKilled. It will not check whether the given process exists or not, but simply ignores those non-exsiting process. The request format should be{ "killPath": "/tmp/4633d686-f75d-4d1f-8415-02ce37d9e5f8.trace" }