master
c 38 lines 1.37 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #include "rrdfunctions-inline.h"
4
5 static int rrd_function_run_inline(struct rrd_function_execute *rfe, void *data) {
6
7 // IMPORTANT: this function MUST call the result_cb even on failures
8
9 rrd_function_execute_inline_cb_t execute_cb = data;
10
11 int code;
12
13 if(rfe->is_cancelled.cb && rfe->is_cancelled.cb(rfe->is_cancelled.data))
14 code = HTTP_RESP_CLIENT_CLOSED_REQUEST;
15 else
16 code = execute_cb(rfe->result.wb, rfe->function, rfe->payload, rfe->source);
17
18 if(code == HTTP_RESP_CLIENT_CLOSED_REQUEST || (rfe->is_cancelled.cb && rfe->is_cancelled.cb(rfe->is_cancelled.data))) {
19 buffer_flush(rfe->result.wb);
20 code = HTTP_RESP_CLIENT_CLOSED_REQUEST;
21 }
22
23 if(rfe->result.cb)
24 rfe->result.cb(rfe->result.wb, code, rfe->result.data);
25
26 return code;
27 }
28
29 void rrd_function_add_inline(RRDHOST *host, RRDSET *st, const char *name, int timeout, int priority, uint32_t version,
30 const char *help, const char *tags,
31 HTTP_ACCESS access, rrd_function_execute_inline_cb_t execute_cb) {
32
33 rrd_collector_started(); // this creates a collector that runs for as long as netdata runs
34
35 rrd_function_add(host, st, name, timeout, priority, version,
36 help, tags, access, true,
37 rrd_function_run_inline, execute_cb);
38 }