1 #ifndef NETDATA_COMMON_H
2 #define NETDATA_COMMON_H 1
8 // ----------------------------------------------------------------------------
9 // system include files for all netdata C programs
11 /* select the memory allocator, based on autoconf findings */
12 #if defined(ENABLE_JEMALLOC)
14 #if defined(HAVE_JEMALLOC_JEMALLOC_H)
15 #include <jemalloc/jemalloc.h>
20 #elif defined(ENABLE_TCMALLOC)
22 #include <google/tcmalloc.h>
24 #else /* !defined(ENABLE_JEMALLOC) && !defined(ENABLE_TCMALLOC) */
26 #if !(defined(__FreeBSD__) || defined(__APPLE__))
28 #endif /* __FreeBSD__ || __APPLE__ */
41 #include <arpa/inet.h>
42 #include <netinet/tcp.h>
44 #ifdef HAVE_NETINET_IN_H
45 #include <netinet/in.h>
70 #ifdef HAVE_SYS_PRCTL_H
71 #include <sys/prctl.h>
74 #include <sys/resource.h>
75 #include <sys/socket.h>
77 #include <sys/statvfs.h>
78 #include <sys/syscall.h>
80 #include <sys/types.h>
84 #include <uuid/uuid.h>
88 #include <sys/mkdev.h>
90 #ifdef MAJOR_IN_SYSMACROS
91 #include <sys/sysmacros.h>
98 #ifdef STORAGE_WITH_MATH
102 #if defined(HAVE_INTTYPES_H)
103 #include <inttypes.h>
104 #elif defined(HAVE_STDINT_H)
108 #ifdef NETDATA_WITH_ZLIB
112 #ifdef HAVE_CAPABILITY
113 #include <sys/capability.h>
116 // ----------------------------------------------------------------------------
117 // netdata common definitions
119 #if (SIZEOF_VOID_P == 8)
120 #define ENVIRONMENT64
121 #elif (SIZEOF_VOID_P == 4)
122 #define ENVIRONMENT32
124 #error "Cannot detect if this is a 32 or 64 bit CPU"
128 #define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
131 #ifdef HAVE_FUNC_ATTRIBUTE_RETURNS_NONNULL
132 #define NEVERNULL __attribute__((returns_nonnull))
137 #ifdef HAVE_FUNC_ATTRIBUTE_MALLOC
138 #define MALLOCLIKE __attribute__((malloc))
143 #ifdef HAVE_FUNC_ATTRIBUTE_FORMAT
144 #define PRINTFLIKE(f, a) __attribute__ ((format(__printf__, f, a)))
146 #define PRINTFLIKE(f, a)
149 #ifdef HAVE_FUNC_ATTRIBUTE_NORETURN
150 #define NORETURN __attribute__ ((noreturn))
155 #ifdef HAVE_FUNC_ATTRIBUTE_WARN_UNUSED_RESULT
156 #define WARNUNUSED __attribute__ ((warn_unused_result))
164 #define abs(x) ((x < 0)? -x : x)
168 // ----------------------------------------------------------------------------
169 // netdata include files
174 #include "simple_pattern.h"
176 #include "global_statistics.h"
177 #include "storage_number.h"
178 #include "web_buffer.h"
179 #include "web_buffer_svg.h"
183 #include "procfile.h"
184 #include "appconfig.h"
185 #include "dictionary.h"
186 #include "proc_self_mountinfo.h"
187 #include "plugin_checks.h"
188 #include "plugin_idlejitter.h"
189 #include "plugin_nfacct.h"
191 #if defined(__FreeBSD__)
192 #include <pthread_np.h>
193 #include "plugin_freebsd.h"
194 #define NETDATA_OS_TYPE "freebsd"
195 #elif defined(__APPLE__)
196 #include "plugin_macos.h"
197 #define NETDATA_OS_TYPE "macos"
199 #include "plugin_proc.h"
200 #include "plugin_proc_diskspace.h"
201 #define NETDATA_OS_TYPE "linux"
202 #endif /* __FreeBSD__, __APPLE__*/
208 #include "plugin_tc.h"
209 #include "plugins_d.h"
210 #include "rrd2json.h"
211 #include "rrd2json_api_old.h"
212 #include "web_client.h"
213 #include "web_server.h"
214 #include "registry.h"
217 #include "unit_test.h"
219 #include "backends.h"
221 #include "adaptive_resortable_list.h"
223 #include "web_api_v1.h"
224 #include "web_api_old.h"
226 extern char *netdata_configured_hostname;
227 extern char *netdata_configured_config_dir;
228 extern char *netdata_configured_log_dir;
229 extern char *netdata_configured_plugins_dir;
230 extern char *netdata_configured_web_dir;
231 extern char *netdata_configured_cache_dir;
232 extern char *netdata_configured_varlib_dir;
233 extern char *netdata_configured_home_dir;
234 extern char *netdata_configured_host_prefix;
236 extern void netdata_fix_chart_id(char *s);
237 extern void netdata_fix_chart_name(char *s);
239 extern void strreverse(char* begin, char* end);
240 extern char *mystrsep(char **ptr, char *s);
241 extern char *trim(char *s);
243 extern int vsnprintfz(char *dst, size_t n, const char *fmt, va_list args);
244 extern int snprintfz(char *dst, size_t n, const char *fmt, ...) PRINTFLIKE(3, 4);
246 // memory allocation functions that handle failures
247 #ifdef NETDATA_LOG_ALLOCATIONS
248 #define strdupz(s) strdupz_int(__FILE__, __FUNCTION__, __LINE__, s)
249 #define callocz(nmemb, size) callocz_int(__FILE__, __FUNCTION__, __LINE__, nmemb, size)
250 #define mallocz(size) mallocz_int(__FILE__, __FUNCTION__, __LINE__, size)
251 #define reallocz(ptr, size) reallocz_int(__FILE__, __FUNCTION__, __LINE__, ptr, size)
252 #define freez(ptr) freez_int(__FILE__, __FUNCTION__, __LINE__, ptr)
254 extern char *strdupz_int(const char *file, const char *function, const unsigned long line, const char *s);
255 extern void *callocz_int(const char *file, const char *function, const unsigned long line, size_t nmemb, size_t size);
256 extern void *mallocz_int(const char *file, const char *function, const unsigned long line, size_t size);
257 extern void *reallocz_int(const char *file, const char *function, const unsigned long line, void *ptr, size_t size);
258 extern void freez_int(const char *file, const char *function, const unsigned long line, void *ptr);
260 extern char *strdupz(const char *s) MALLOCLIKE NEVERNULL;
261 extern void *callocz(size_t nmemb, size_t size) MALLOCLIKE NEVERNULL;
262 extern void *mallocz(size_t size) MALLOCLIKE NEVERNULL;
263 extern void *reallocz(void *ptr, size_t size) MALLOCLIKE NEVERNULL;
264 extern void freez(void *ptr);
267 extern void json_escape_string(char *dst, const char *src, size_t size);
269 extern void *mymmap(const char *filename, size_t size, int flags, int ksm);
270 extern int savememory(const char *filename, void *mem, size_t size);
272 extern int fd_is_valid(int fd);
274 extern int enable_ksm;
276 extern pid_t gettid(void);
278 extern int sleep_usec(usec_t usec);
280 extern char *fgets_trim_len(char *buf, size_t buf_size, FILE *fp, size_t *len);
282 extern int processors;
283 extern long get_system_cpus(void);
285 extern pid_t pid_max;
286 extern pid_t get_system_pid_max(void);
288 /* Number of ticks per second */
289 extern unsigned int hz;
290 extern void get_system_HZ(void);
292 extern volatile sig_atomic_t netdata_exit;
293 extern const char *os_type;
295 extern const char *program_version;
297 /* fix for alpine linux */
298 #ifndef RUSAGE_THREAD
299 #ifdef RUSAGE_CHILDREN
300 #define RUSAGE_THREAD RUSAGE_CHILDREN
304 #endif /* NETDATA_COMMON_H */