1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- // SPDX-License-Identifier: GPL-3.0-or-later
- /*
- * netdata registry
- *
- * this header file describes the public interface
- * to the netdata registry
- *
- * only these high level functions are exposed
- *
- */
- // ----------------------------------------------------------------------------
- // TODO
- //
- // 1. the default tracking cookie expires in 1 year, but the persons are not
- // removed from the db - this means the database only grows - ideally the
- // database should be cleaned in registry_db_save() for both on-disk and
- // on-memory entries.
- //
- // Cleanup:
- // i. Find all the PERSONs that have expired cookie
- // ii. For each of their PERSON_URLs:
- // - decrement the linked MACHINE links
- // - if the linked MACHINE has no other links, remove the linked MACHINE too
- // - remove the PERSON_URL
- //
- // 2. add protection to prevent abusing the registry by flooding it with
- // requests to fill the memory and crash it.
- //
- // Possible protections:
- // - limit the number of URLs per person
- // - limit the number of URLs per machine
- // - limit the number of persons
- // - limit the number of machines
- // - [DONE] limit the size of URLs
- // - [DONE] limit the size of PERSON_URL names
- // - limit the number of requests that add data to the registry,
- // per client IP per hour
- //
- // 3. lower memory requirements
- //
- // - embed avl structures directly into registry objects, instead of DICTIONARY
- // [DONE for PERSON_URLs, PENDING for MACHINE_URLs]
- // - store GUIDs in memory as UUID instead of char *
- // - do not track persons using the demo machines only
- // (i.e. start tracking them only when they access a non-demo machine)
- // - [DONE] do not track custom dashboards by default
- #ifndef NETDATA_REGISTRY_H
- #define NETDATA_REGISTRY_H 1
- #include "daemon/common.h"
- #define NETDATA_REGISTRY_COOKIE_NAME "netdata_registry_id"
- // initialize the registry
- // should only happen when netdata starts
- int registry_init(void);
- // free all data held by the registry
- // should only happen when netdata exits
- void registry_free(void);
- // HTTP requests handled by the registry
- int registry_request_access_json(RRDHOST *host, struct web_client *w, char *person_guid, char *machine_guid, char *url, char *name, time_t when);
- int registry_request_delete_json(RRDHOST *host, struct web_client *w, char *person_guid, char *machine_guid, char *url, char *delete_url, time_t when);
- int registry_request_search_json(RRDHOST *host, struct web_client *w, char *person_guid, char *machine_guid, char *url, char *request_machine, time_t when);
- int registry_request_switch_json(RRDHOST *host, struct web_client *w, char *person_guid, char *machine_guid, char *url, char *new_person_guid, time_t when);
- int registry_request_hello_json(RRDHOST *host, struct web_client *w);
- // update the registry config
- void registry_update_cloud_base_url();
- // update the registry monitoring charts
- void registry_statistics(void);
- char *registry_get_this_machine_guid(void);
- char *registry_get_mgmt_api_key(void);
- char *registry_get_this_machine_hostname(void);
- int regenerate_guid(const char *guid, char *result);
- #endif /* NETDATA_REGISTRY_H */
|