123456789101112131415161718192021222324252627282930313233343536373839404142 |
- // SPDX-License-Identifier: GPL-3.0-or-later
- #include "rrdfunctions-inline.h"
- struct rrd_function_inline {
- rrd_function_execute_inline_cb_t cb;
- };
- static int rrd_function_run_inline(struct rrd_function_execute *rfe, void *data) {
- // IMPORTANT: this function MUST call the result_cb even on failures
- struct rrd_function_inline *fi = data;
- int code;
- if(rfe->is_cancelled.cb && rfe->is_cancelled.cb(rfe->is_cancelled.data))
- code = HTTP_RESP_CLIENT_CLOSED_REQUEST;
- else
- code = fi->cb(rfe->result.wb, rfe->function);
- if(code == HTTP_RESP_CLIENT_CLOSED_REQUEST || (rfe->is_cancelled.cb && rfe->is_cancelled.cb(rfe->is_cancelled.data))) {
- buffer_flush(rfe->result.wb);
- code = HTTP_RESP_CLIENT_CLOSED_REQUEST;
- }
- if(rfe->result.cb)
- rfe->result.cb(rfe->result.wb, code, rfe->result.data);
- return code;
- }
- void rrd_function_add_inline(RRDHOST *host, RRDSET *st, const char *name, int timeout, int priority, const char *help, const char *tags,
- HTTP_ACCESS access, rrd_function_execute_inline_cb_t execute_cb) {
- rrd_collector_started(); // this creates a collector that runs for as long as netdata runs
- struct rrd_function_inline *fi = callocz(1, sizeof(struct rrd_function_inline));
- fi->cb = execute_cb;
- rrd_function_add(host, st, name, timeout, priority, help, tags, access, true, rrd_function_run_inline, fi);
- }
|