From 6372ed837298a34f6d16e0cde929822879863195 Mon Sep 17 00:00:00 2001 From: Alon Bar-Lev Date: Sun, 15 Nov 2015 18:40:17 +0200 Subject: [PATCH] build: migrate to autotools Signed-off-by: Alon Bar-Lev --- .gitignore | 28 +- Makefile | 45 --- Makefile.am | 29 ++ autogen.sh | 2 + charts.d/Makefile.am | 20 ++ conf.d/Makefile.am | 8 + configure.ac | 163 ++++++++++ m4/ax_pthread.m4 | 332 +++++++++++++++++++++ netdata.spec.in | 58 ++++ plugins.d/Makefile.am | 15 + plugins.d/loopsleepms.sh.inc | 2 - src/.keep | 0 src/Makefile | 101 ------- src/Makefile.am | 82 +++++ src/{config.c => appconfig.c} | 6 +- src/{config.h => appconfig.h} | 0 src/{plugins.d => }/apps_plugin.c | 16 +- src/avl.c | 3 + src/common.c | 5 +- src/common.h | 21 +- src/daemon.c | 9 +- src/dictionary.c | 4 +- src/global_statistics.c | 3 + src/log.c | 3 + src/main.c | 9 +- src/plugin_checks.c | 5 +- src/plugin_idlejitter.c | 5 +- src/plugin_nfacct.c | 7 +- src/plugin_proc.c | 5 +- src/plugin_tc.c | 5 +- src/plugins.d/Makefile | 66 ---- src/plugins_d.c | 5 +- src/popen.c | 3 + src/proc_diskstats.c | 6 +- src/proc_interrupts.c | 6 +- src/proc_meminfo.c | 6 +- src/proc_net_dev.c | 6 +- src/proc_net_ip_vs_stats.c | 6 +- src/proc_net_netstat.c | 6 +- src/proc_net_rpc_nfsd.c | 6 +- src/proc_net_snmp.c | 6 +- src/proc_net_stat_conntrack.c | 6 +- src/proc_stat.c | 6 +- src/proc_sys_kernel_random_entropy_avail.c | 6 +- src/proc_vmstat.c | 6 +- src/procfile.c | 4 +- src/rrd.c | 9 +- src/rrd2json.c | 3 + src/storage_number.c | 3 + src/storage_number.h | 2 - src/unit_test.c | 3 + src/url.c | 3 + src/web_buffer.c | 6 +- src/web_client.c | 32 +- src/web_server.c | 8 +- web/Makefile.am | 13 + 56 files changed, 914 insertions(+), 309 deletions(-) delete mode 100755 Makefile create mode 100644 Makefile.am create mode 100755 autogen.sh create mode 100644 charts.d/Makefile.am create mode 100644 conf.d/Makefile.am create mode 100644 configure.ac create mode 100644 m4/ax_pthread.m4 create mode 100644 netdata.spec.in create mode 100644 plugins.d/Makefile.am mode change 100755 => 100644 plugins.d/loopsleepms.sh.inc create mode 100644 src/.keep delete mode 100755 src/Makefile create mode 100644 src/Makefile.am rename src/{config.c => appconfig.c} (99%) rename src/{config.h => appconfig.h} (100%) rename src/{plugins.d => }/apps_plugin.c (99%) delete mode 100755 src/plugins.d/Makefile create mode 100644 web/Makefile.am diff --git a/.gitignore b/.gitignore index c4c9fb9d..81989e7a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,27 @@ -conf.d/* -log/* -cache/* +.deps +.libs + *.o -*.old +*.in +*~ + +Makefile +aclocal.m4 +autom4te.cache +compile +config.guess +config.h +config.log +config.status +config.sub +configure +depcomp +install-sh +libtool +ltmain.sh +missing +stamp-h1 + netdata apps.plugin +netdata.spec diff --git a/Makefile b/Makefile deleted file mode 100755 index 052dff92..00000000 --- a/Makefile +++ /dev/null @@ -1,45 +0,0 @@ -ifndef BIN_DIR -BIN_DIR = "$(PWD)" -endif - -ifndef CONFIG_DIR -CONFIG_DIR = "$(PWD)/conf.d" -endif - -ifndef LOG_DIR -LOG_DIR = "$(PWD)/log" -endif - -ifndef PLUGINS_DIR -PLUGINS_DIR = "$(PWD)/plugins.d" -endif - -COMMON_FLAGS = BIN_DIR='$(BIN_DIR)' CONFIG_DIR='$(CONFIG_DIR)' LOG_DIR='$(LOG_DIR)' PLUGINS_DIR='$(PLUGINS_DIR)' - -ifdef debug -COMMON_FLAGS += debug=1 -endif - -ifdef nozlib -COMMON_FLAGS += nozlib=1 -endif - -all: - $(MAKE) -C src $(COMMON_FLAGS) all - -clean: - $(MAKE) -C src clean - -rm -f netdata netdata.old plugins.d/apps.plugin plugins.d/apps.plugin.old - -install: - $(MAKE) -C src $(COMMON_FLAGS) install - -getconf: - @wget -O conf.d/netdata.conf.new "http://localhost:19999/netdata.conf"; \ - if [ $$? -eq 0 -a -s conf.d/netdata.conf.new ]; \ - then \ - mv conf.d/netdata.conf conf.d/netdata.conf.old; \ - mv conf.d/netdata.conf.new conf.d/netdata.conf; \ - fi - -.PHONY: all clean install getconf diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 00000000..5f7e7870 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,29 @@ +# +# Copyright (C) 2015 Alon Bar-Lev +# +AUTOMAKE_OPTIONS=foreign dist-bzip2 1.10 +ACLOCAL_AMFLAGS = -I m4 + +MAINTAINERCLEANFILES= \ + config.log config.status \ + $(srcdir)/Makefile.in \ + $(srcdir)/config.h.in $(srcdir)/config.h.in~ $(srcdir)/configure \ + $(srcdir)/install-sh $(srcdir)/ltmain.sh $(srcdir)/missing \ + $(srcdir)/compile $(srcdir)/depcomp $(srcdir)/aclocal.m4 \ + $(srcdir)/config.guess $(srcdir)/config.sub \ + $(srcdir)/m4/ltsugar.m4 $(srcdir)/m4/libtool.m4 \ + $(srcdir)/m4/ltversion.m4 $(srcdir)/m4/lt~obsolete.m4 \ + $(srcdir)/m4/ltoptions.m4 \ + $(srcdir)/pkcs11-helper.spec $(srcdir)/config-w32-vc.h + +EXTRA_DIST = README.md + +SUBDIRS = \ + charts.d \ + conf.d \ + plugins.d \ + src \ + web \ + $(NULL) + +dist_noinst_DATA = netdata.spec diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 00000000..3b076d1a --- /dev/null +++ b/autogen.sh @@ -0,0 +1,2 @@ +#!/bin/sh +autoreconf -ivf diff --git a/charts.d/Makefile.am b/charts.d/Makefile.am new file mode 100644 index 00000000..431b0b8f --- /dev/null +++ b/charts.d/Makefile.am @@ -0,0 +1,20 @@ +# +# Copyright (C) 2015 Alon Bar-Lev +# +MAINTAINERCLEANFILES= $(srcdir)/Makefile.in + +dist_charts_SCRIPTS = \ + airsearches.chart.sh \ + cpu_apps.chart.sh \ + cpufreq.chart.sh \ + crsproxy.chart.sh \ + example.chart.sh \ + load_average.chart.sh \ + mem_apps.chart.sh \ + mysql.chart.sh \ + nut.chart.sh \ + opensips.chart.sh \ + postfix.chart.sh \ + sensors.chart.sh \ + squid.chart.sh \ + $(NULL) diff --git a/conf.d/Makefile.am b/conf.d/Makefile.am new file mode 100644 index 00000000..73e45c19 --- /dev/null +++ b/conf.d/Makefile.am @@ -0,0 +1,8 @@ +# +# Copyright (C) 2015 Alon Bar-Lev +# +MAINTAINERCLEANFILES= $(srcdir)/Makefile.in + +dist_config_DATA = \ + apps_groups.conf \ + $(NULL) diff --git a/configure.ac b/configure.ac new file mode 100644 index 00000000..fbfbec6e --- /dev/null +++ b/configure.ac @@ -0,0 +1,163 @@ +# +# Copyright (C) 2015 Alon Bar-Lev +# +AC_PREREQ(2.60) + +define([VERSION_MAJOR], [1]) +define([VERSION_MINOR], [0]) +define([VERSION_FIX], [0]) +define([VERSION_NUMBER], VERSION_MAJOR[.]VERSION_MINOR[.]VERSION_FIX) +define([VERSION_SUFFIX], [_master]) + +AC_INIT([netdata], VERSION_NUMBER[]VERSION_SUFFIX) +PACKAGE_RPM_VERSION="VERSION_NUMBER" +PACKAGE_RPM_RELEASE="0.0.$(echo VERSION_SUFFIX | sed 's/^_//')" +AC_SUBST([PACKAGE_RPM_VERSION]) +AC_SUBST([PACKAGE_RPM_RELEASE]) + +AC_CONFIG_AUX_DIR([.]) +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_SRCDIR([src/main.c]) +AM_INIT_AUTOMAKE +AC_CANONICAL_HOST +AC_PROG_CC +AC_PROG_INSTALL +PKG_PROG_PKG_CONFIG +AC_USE_SYSTEM_EXTENSIONS + +AC_ARG_ENABLE( + [daemon], + [AS_HELP_STRING([--disable-daemon], [disable daemon])], + , + [enable_daemon="yes"] +) +AC_ARG_ENABLE( + [plugin-plugin-nfacct], + [AS_HELP_STRING([--enable-plugin-plugin-nfacct], [enable nfacct plugin, requires root])], + , + [enable_plugin_plugin_nfacct="no"] +) +AC_ARG_ENABLE( + [pedantic], + [AS_HELP_STRING([--enable-pedantic], [enable pedantic compiler warnings])], + , + [enable_pedantic="no"] +) +AC_ARG_WITH( + [webdir], + [AS_HELP_STRING([--with-webdir], [location of webdir @<:@PKGDATADIR/web@:>@])], + [webdir="${withval}"], + [webdir="\$(pkgdatadir)/web"] +) +AC_ARG_WITH( + [zlib], + [AS_HELP_STRING([--with-zlib], [build with zlib])], + , + [with_zlib="yes"] +) +AC_ARG_WITH( + [math], + [AS_HELP_STRING([--with-math], [build with math])], + , + [with_math="yes"] +) +AC_ARG_WITH( + [user], + [AS_HELP_STRING([--with-user], [use this user to drop privilege])], + , + [with_user="nobody"] +) + +ACX_PTHREAD(, [AC_MSG_ERROR([Cannot initialize pthread environment])]) +LIBS="${PTHREAD_LIBS} ${LIBS}" +CFLAGS="${CFLAGS} ${PTHREAD_CFLAGS}" +CC="${PTHREAD_CC}" + +AC_TYPE_UINT8_T +AC_TYPE_UINT16_T +AC_TYPE_UINT32_T +AC_C_INLINE + +PKG_CHECK_MODULES( + [NFACCT], + [libnetfilter_acct], +) +PKG_CHECK_MODULES( + [LIBMNL], + [libmnl], +) +PKG_CHECK_MODULES( + [ZLIB], + [zlib], +) +AC_ARG_VAR([MATH_CFLAGS], [C compiler flags for math]) +AC_ARG_VAR([MATH_LIBS], [linker flags for math]) +if test -z "${MATH_LIBS}"; then + AC_CHECK_LIB( + [m], + [sin], + [MATH_LIBS="-lm"] + ) +fi + +test "${enable_daemon}" = "yes" && AC_DEFINE([NETDATA_DAEMON], [1], [daemon settings]) +if test "${enable_plugin_plugin_nfacct}" = "yes"; then + test -z "${NFACCT_LIBS}" && AC_MSG_ERROR([netfilter_acct required but not found]) + test -z "${LIBMNL_LIBS}" && AC_MSG_ERROR([libmnl required but not found]) + AC_DEFINE([INTERNAL_PLUGIN_NFACCT], [1], [nfacct plugin settings]) + OPTIONAL_NFACCT_CLFAGS="${NFACCT_CFLAGS} ${LIBMNL_CFLAGS}" + OPTIONAL_NFACCT_LIBS="${NFACCT_LIBS} ${LIBMNL_LIBS}" +fi +if test "${with_zlib}" = "yes"; then + test -z "${ZLIB_LIBS}" && AC_MSG_ERROR([zlib required but not found]) + AC_DEFINE([NETDATA_WITH_ZLIB], [1], [zlib settings]) + OPTIONAL_ZLIB_CLFAGS="${ZLIB_CFLAGS}" + OPTIONAL_ZLIB_LIBS="${ZLIB_LIBS}" +fi +if test "${with_math}" = "yes"; then + test -z "${MATH_LIBS}" && AC_MSG_ERROR([math required but not found]) + AC_DEFINE([STORAGE_WITH_MATH], [1], [math settings]) + OPTIONAL_MATH_CFLAGS="${MATH_CFLAGS}" + OPTIONAL_MATH_LIBS="${MATH_LIBS}" +fi + +if test "${GCC}" = "yes"; then + AC_DEFINE_UNQUOTED([likely(x)], [__builtin_expect(!!(x), 1)], [gcc branch optimization]) + AC_DEFINE_UNQUOTED([unlikely(x)], [__builtin_expect(!!(x), 0)], [gcc branch optimization]) +else + AC_DEFINE_UNQUOTED([likely(x)], [(x)], [gcc branch optimization]) + AC_DEFINE_UNQUOTED([unlikely(x)], [(x)], [gcc branch optimization]) +fi + +if test "${enable_pedantic}" = "yes"; then + enable_strict="yes" + CFLAGS="${CFLAGS} -pedantic -Wall -Wextra -Wno-long-long" +fi + +AC_DEFINE_UNQUOTED([NETDATA_USER], ["${with_user}"], [use this user to drop privileged]) + +AC_SUBST([cachedir], ["\$(localstatedir)/cache/netdata"]) +AC_SUBST([chartsdir], ["\$(libexecdir)/netdata/charts.d"]) +AC_SUBST([configdir], ["\$(sysconfdir)/netdata"]) +AC_SUBST([logdir], ["\$(localstatedir)/log/netdata"]) +AC_SUBST([pluginsdir], ["\$(libexecdir)/netdata/plugins.d"]) +AC_SUBST([webdir]) + +AC_SUBST([OPTIONAL_MATH_CLFAGS]) +AC_SUBST([OPTIONAL_MATH_LIBS]) +AC_SUBST([OPTIONAL_NFACCT_CLFAGS]) +AC_SUBST([OPTIONAL_NFACCT_LIBS]) +AC_SUBST([OPTIONAL_ZLIB_CLFAGS]) +AC_SUBST([OPTIONAL_ZLIB_LIBS]) + +AC_CONFIG_FILES([ + Makefile + charts.d/Makefile + conf.d/Makefile + netdata.spec + plugins.d/Makefile + src/Makefile + web/Makefile +]) +AC_OUTPUT diff --git a/m4/ax_pthread.m4 b/m4/ax_pthread.m4 new file mode 100644 index 00000000..d383ad5c --- /dev/null +++ b/m4/ax_pthread.m4 @@ -0,0 +1,332 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_pthread.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +# +# DESCRIPTION +# +# This macro figures out how to build C programs using POSIX threads. It +# sets the PTHREAD_LIBS output variable to the threads library and linker +# flags, and the PTHREAD_CFLAGS output variable to any special C compiler +# flags that are needed. (The user can also force certain compiler +# flags/libs to be tested by setting these environment variables.) +# +# Also sets PTHREAD_CC to any special C compiler that is needed for +# multi-threaded programs (defaults to the value of CC otherwise). (This +# is necessary on AIX to use the special cc_r compiler alias.) +# +# NOTE: You are assumed to not only compile your program with these flags, +# but also link it with them as well. e.g. you should link with +# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS +# +# If you are only building threads programs, you may wish to use these +# variables in your default LIBS, CFLAGS, and CC: +# +# LIBS="$PTHREAD_LIBS $LIBS" +# CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +# CC="$PTHREAD_CC" +# +# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant +# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name +# (e.g. PTHREAD_CREATE_UNDETACHED on AIX). +# +# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the +# PTHREAD_PRIO_INHERIT symbol is defined when compiling with +# PTHREAD_CFLAGS. +# +# ACTION-IF-FOUND is a list of shell commands to run if a threads library +# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it +# is not found. If ACTION-IF-FOUND is not specified, the default action +# will define HAVE_PTHREAD. +# +# Please let the authors know if this macro fails on any platform, or if +# you have any other suggestions or comments. This macro was based on work +# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help +# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by +# Alejandro Forero Cuervo to the autoconf macro repository. We are also +# grateful for the helpful feedback of numerous users. +# +# Updated for Autoconf 2.68 by Daniel Richard G. +# +# LICENSE +# +# Copyright (c) 2008 Steven G. Johnson +# Copyright (c) 2011 Daniel Richard G. +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 21 + +AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) +AC_DEFUN([AX_PTHREAD], [ +AC_REQUIRE([AC_CANONICAL_HOST]) +AC_LANG_PUSH([C]) +ax_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on True64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) + AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes]) + AC_MSG_RESULT([$ax_pthread_ok]) + if test x"$ax_pthread_ok" = xno; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) +# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) +# -pthreads: Solaris/gcc +# -mthreads: Mingw32/gcc, Lynx/gcc +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads too; +# also defines -D_REENTRANT) +# ... -mt is also the pthreads flag for HP/aCC +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case ${host_os} in + solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (We need to link with -pthreads/-mt/ + # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather + # a function called by this macro, so we could check for that, but + # who knows whether they'll stub that too in a future libc.) So, + # we'll just look for -pthreads and -lpthread first: + + ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" + ;; + + darwin*) + ax_pthread_flags="-pthread $ax_pthread_flags" + ;; +esac + +# Clang doesn't consider unrecognized options an error unless we specify +# -Werror. We throw in some extra Clang-specific options to ensure that +# this doesn't happen for GCC, which also accepts -Werror. + +AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags]) +save_CFLAGS="$CFLAGS" +ax_pthread_extra_flags="-Werror" +CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])], + [AC_MSG_RESULT([yes])], + [ax_pthread_extra_flags= + AC_MSG_RESULT([no])]) +CFLAGS="$save_CFLAGS" + +if test x"$ax_pthread_ok" = xno; then +for flag in $ax_pthread_flags; do + + case $flag in + none) + AC_MSG_CHECKING([whether pthreads work without any flags]) + ;; + + -*) + AC_MSG_CHECKING([whether pthreads work with $flag]) + PTHREAD_CFLAGS="$flag" + ;; + + pthread-config) + AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) + if test x"$ax_pthread_config" = xno; then continue; fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + AC_MSG_CHECKING([for the pthreads library -l$flag]) + PTHREAD_LIBS="-l$flag" + ;; + esac + + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include + static void routine(void *a) { a = 0; } + static void *start_routine(void *a) { return a; }], + [pthread_t th; pthread_attr_t attr; + pthread_create(&th, 0, start_routine, 0); + pthread_join(th, 0); + pthread_attr_init(&attr); + pthread_cleanup_push(routine, 0); + pthread_cleanup_pop(0) /* ; */])], + [ax_pthread_ok=yes], + []) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + AC_MSG_RESULT([$ax_pthread_ok]) + if test "x$ax_pthread_ok" = xyes; then + break; + fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$ax_pthread_ok" = xyes; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + AC_MSG_CHECKING([for joinable pthread attribute]) + attr_name=unknown + for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], + [int attr = $attr; return attr /* ; */])], + [attr_name=$attr; break], + []) + done + AC_MSG_RESULT([$attr_name]) + if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then + AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name], + [Define to necessary symbol if this constant + uses a non-standard name on your system.]) + fi + + AC_MSG_CHECKING([if more special flags are required for pthreads]) + flag=no + case ${host_os} in + aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; + osf* | hpux*) flag="-D_REENTRANT";; + solaris*) + if test "$GCC" = "yes"; then + flag="-D_REENTRANT" + else + # TODO: What about Clang on Solaris? + flag="-mt -D_REENTRANT" + fi + ;; + esac + AC_MSG_RESULT([$flag]) + if test "x$flag" != xno; then + PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" + fi + + AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], + [ax_cv_PTHREAD_PRIO_INHERIT], [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[int i = PTHREAD_PRIO_INHERIT;]])], + [ax_cv_PTHREAD_PRIO_INHERIT=yes], + [ax_cv_PTHREAD_PRIO_INHERIT=no]) + ]) + AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"], + [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])]) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + # More AIX lossage: compile with *_r variant + if test "x$GCC" != xyes; then + case $host_os in + aix*) + AS_CASE(["x/$CC"], + [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], + [#handle absolute path differently from PATH based program lookup + AS_CASE(["x$CC"], + [x/*], + [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], + [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) + ;; + esac + fi +fi + +test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" + +AC_SUBST([PTHREAD_LIBS]) +AC_SUBST([PTHREAD_CFLAGS]) +AC_SUBST([PTHREAD_CC]) + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$ax_pthread_ok" = xyes; then + ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) + : +else + ax_pthread_ok=no + $2 +fi +AC_LANG_POP +])dnl AX_PTHREAD diff --git a/netdata.spec.in b/netdata.spec.in new file mode 100644 index 00000000..af73a7b6 --- /dev/null +++ b/netdata.spec.in @@ -0,0 +1,58 @@ +Summary: Linux real time system monitoring, over the web +Name: @PACKAGE_NAME@ +Version: @PACKAGE_RPM_VERSION@ +Release: @PACKAGE_RPM_RELEASE@%{?release_suffix}%{?dist} +License: GPLv2+ +URL: http://firehol.org +Source: %{name}-@PACKAGE_VERSION@.tar.bz2 + +BuildRequires: libmnl-devel +BuildRequires: libnetfilter_acct-devel +BuildRequires: zlib-devel +Requires: libmnl +Requires: libnetfilter_acct +Requires: zlib + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +%description +Linux real time system monitoring, over the web! + +%pre +getent group netdata > /dev/null || groupadd -r netdata +getent passwd netdata > /dev/null || useradd -r -g netdata -c netdata -s /sbin/nologin -d / netdata + +%global ovirt_create_user_engine \ +%_ovirt_create_user %{engine_user} %{engine_uid} %{engine_group} %{engine_gid} "%{ovirt_user_description}" %{engine_state} + + +%prep +%setup -q -n %{name}-@PACKAGE_VERSION@ + +%build +%configure \ + --docdir="%{_docdir}/%{name}-%{version}" \ + --enable-plugin-plugin-nfacct \ + --with-zlib \ + --with-math \ + --with-user=netdata \ + %{?conf} +make %{?_smp_mflags} + +%install +rm -rf "%{buildroot}" +make %{?_smp_mflags} install DESTDIR="%{buildroot}" +find "%{buildroot}" -name .keep -exec rm {} \; + +%files +%attr(4755, root, root) %{_libexecdir}/%{name}/plugins.d/apps.plugin +%attr(-, netdata, netdata) %dir %{_localstatedir}/cache/%{name}/ +%attr(-, netdata, netdata) %dir %{_localstatedir}/log/%{name}/ +%{_bindir}/%{name} +%{_datadir}/%{name}/ +%{_libexecdir}/%{name}/ +%{_sysconfdir}/%{name}/ + +%changelog +* Sun Nov 15 2015 Alon Bar-Lev - 1.0.0-1 +- Initial add. diff --git a/plugins.d/Makefile.am b/plugins.d/Makefile.am new file mode 100644 index 00000000..903fae26 --- /dev/null +++ b/plugins.d/Makefile.am @@ -0,0 +1,15 @@ +# +# Copyright (C) 2015 Alon Bar-Lev +# +MAINTAINERCLEANFILES= $(srcdir)/Makefile.in + +dist_plugins_DATA = \ + README \ + loopsleepms.sh.inc \ + $(NULL) + +dist_plugins_SCRIPTS = \ + charts.d.dryrun-helper.sh \ + charts.d.plugin \ + tc-qos-helper.sh \ + $(NULL) diff --git a/plugins.d/loopsleepms.sh.inc b/plugins.d/loopsleepms.sh.inc old mode 100755 new mode 100644 index 2f9e097c..fabd49ad --- a/plugins.d/loopsleepms.sh.inc +++ b/plugins.d/loopsleepms.sh.inc @@ -1,5 +1,3 @@ -#!/bin/sh - # this function is used to sleep a fraction of a second # it calculates the difference between every time is called # and tries to align the sleep time to give you exactly the diff --git a/src/.keep b/src/.keep new file mode 100644 index 00000000..e69de29b diff --git a/src/Makefile b/src/Makefile deleted file mode 100755 index 65cb401d..00000000 --- a/src/Makefile +++ /dev/null @@ -1,101 +0,0 @@ -ifndef BIN_DIR -BIN_DIR = "." -endif - -ifndef CONFIG_DIR -CONFIG_DIR = "conf.d" -endif - -ifndef LOG_DIR -LOG_DIR = "log" -endif - -ifndef PLUGINS_DIR -PLUGINS_DIR = "plugins.d" -endif - -ifndef nomath -STORAGE_WITH_MATH = 1 -endif - -ifdef nofork -NETDATA_NO_DAEMON = 1 -endif - -ifdef nozlib -NETDATA_WITHOUT_ZLIB = 1 -endif - -COMMON_FLAGS = BIN_DIR='$(BIN_DIR)' CONFIG_DIR='$(CONFIG_DIR)' LOG_DIR='$(LOG_DIR)' PLUGINS_DIR='$(PLUGINS_DIR)' - -proc_sources = proc_net_dev.c proc_net_ip_vs_stats.c proc_diskstats.c proc_meminfo.c proc_net_netstat.c proc_net_snmp.c proc_net_stat_conntrack.c proc_stat.c proc_vmstat.c proc_net_rpc_nfsd.c proc_sys_kernel_random_entropy_avail.c proc_interrupts.c -sources = rrd.c rrd2json.c avl.c dictionary.c procfile.c common.c log.c popen.c url.c config.c web_buffer.c storage_number.c web_client.c global_statistics.c web_server.c plugins_d.c daemon.c plugin_tc.c plugin_checks.c plugin_idlejitter.c plugin_proc.c unit_test.c main.c -libs = -pthread - -ifdef debug -COMMON_FLAGS += debug=1 -CFLAGS = -Wall -Wextra -O -ggdb -DBIN_DIR='$(BIN_DIR)' -DCONFIG_DIR='$(CONFIG_DIR)' -DLOG_DIR='$(LOG_DIR)' -DPLUGINS_DIR='$(PLUGINS_DIR)' -fno-omit-frame-pointer -# CFLAGS := -Wall -Wextra -O -g -DBIN_DIR='$(BIN_DIR)' -DCONFIG_DIR='$(CONFIG_DIR)' -DLOG_DIR='$(LOG_DIR)' -DPLUGINS_DIR='$(PLUGINS_DIR)' -fsanitize=thread -fno-omit-frame-pointer -fPIE -# libs += -pie -ltsan -libs += -rdynamic -else -CFLAGS := -Wall -Wextra -O3 -DBIN_DIR='$(BIN_DIR)' -DCONFIG_DIR='$(CONFIG_DIR)' -DLOG_DIR='$(LOG_DIR)' -DPLUGINS_DIR='$(PLUGINS_DIR)' -fomit-frame-pointer -endif - -CC = gcc - -ifdef STORAGE_WITH_MATH -CFLAGS += -DSTORAGE_WITH_MATH=1 -libs += -lm -endif - -ifdef NETDATA_NO_DAEMON -CFLAGS += -DNETDATA_NO_DAEMON=1 -endif - -ifdef NETDATA_WITHOUT_ZLIB -CFLAGS += -DNETDATA_WITHOUT_ZLIB=1 -else -libs += -lz -endif - -# nfacct requires root access, so we prefer it as a plugin.d external plugin -ifdef INTERNAL_PLUGIN_NFACCT -CFLAGS += -DINTERNAL_PLUGIN_NFACCT=1 -sources += plugin_nfacct.c -libs += -lmnl -lnetfilter_acct -endif - -headers = $(patsubst %.c,%.h,$(sources)) -objects = $(patsubst %.c,%.o,$(sources) $(proc_sources)) - -all: show_options netdata plugins - -%.o: %.c ${headers} - $(CC) $(CFLAGS) -c $< -o $@ - -netdata: $(objects) - $(CC) -o netdata $(objects) $(libs) - -show_options: - @echo " COMPILING WITH OPTIONS: $(CFLAGS)" - -plugins: - $(MAKE) -C plugins.d $(COMMON_FLAGS) all - -clean: - $(MAKE) -C plugins.d clean - rm -f *.o netdata core - -install: all - $(MAKE) -C plugins.d $(COMMON_FLAGS) install - @echo; \ - echo " INSTALLING netdata to $(BIN_DIR)"; \ - if [ -f $(BIN_DIR)/netdata ]; \ - then \ - mv -f $(BIN_DIR)/netdata $(BIN_DIR)/netdata.old; \ - fi; \ - cp -f netdata $(BIN_DIR)/; \ - echo - -.PHONY: all show_options plugins clean install diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 00000000..dde90145 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,82 @@ +# +# Copyright (C) 2015 Alon Bar-Lev +# +MAINTAINERCLEANFILES= $(srcdir)/Makefile.in + +AM_CPPFLAGS = \ + -DCACHE_DIR="\"$(cachedir)\"" \ + -DCONFIG_DIR="\"$(configdir)\"" \ + -DLOG_DIR="\"$(logdir)\"" \ + -DPLUGINS_DIR="\"$(pluginsdir)\"" \ + -DWEB_DIR="\"$(webdir)\"" \ + $(NULL) +AM_CFLAGS = \ + $(OPTIONAL_MATH_CFLAGS) \ + $(OPTIONAL_NFACCT_CLFAGS) \ + $(OPTIONAL_ZLIB_CFLAGS) \ + $(NULL) + +bin_PROGRAMS = netdata +dist_cache_DATA = .keep +dist_log_DATA = .keep +plugins_PROGRAMS = apps.plugin + +netdata_SOURCES = \ + appconfig.c appconfig.h \ + avl.c avl.h \ + common.c common.h \ + daemon.c daemon.h \ + dictionary.c dictionary.h \ + global_statistics.c global_statistics.h \ + log.c log.h \ + main.c main.h \ + plugin_checks.c plugin_checks.h \ + plugin_idlejitter.c plugin_idlejitter.h \ + plugin_nfacct.c plugin_nfacct.h \ + plugin_proc.c plugin_proc.h \ + plugin_tc.c plugin_tc.h \ + plugins_d.c plugins_d.h \ + popen.c popen.h \ + proc_diskstats.c \ + proc_interrupts.c \ + proc_meminfo.c \ + proc_net_dev.c \ + proc_net_ip_vs_stats.c \ + proc_net_netstat.c \ + proc_net_rpc_nfsd.c \ + proc_net_snmp.c \ + proc_net_stat_conntrack.c \ + proc_stat.c \ + proc_sys_kernel_random_entropy_avail.c \ + proc_vmstat.c \ + procfile.c procfile.h \ + rrd.c rrd.h \ + rrd2json.c rrd2json.h \ + storage_number.c storage_number.h \ + unit_test.c unit_test.h \ + url.c url.h \ + web_buffer.c web_buffer.h \ + web_client.c web_client.h \ + web_server.c web_server.h \ + $(NULL) +netdata_LDADD = \ + $(OPTIONAL_MATH_LIBS) \ + $(OPTIONAL_NFACCT_LIBS) \ + $(OPTIONAL_ZLIB_LIBS) \ + $(NULL) + +apps_plugin_SOURCES = \ + apps_plugin.c \ + avl.c avl.h \ + common.c common.h \ + log.c log.h \ + procfile.c procfile.h \ + $(NULL) + +install-data-hook: + @echo + @echo "ATTENTION" + @echo + @echo "setuid bit of $(pluginsdir)/apps.plugin must be set, please execute as root:" + @echo "chown root '$(pluginsdir)/apps.plugin' && chmod 4755 '$(pluginsdir)/apps.plugin'" + @echo diff --git a/src/config.c b/src/appconfig.c similarity index 99% rename from src/config.c rename to src/appconfig.c index d76f20c9..0a60bc51 100755 --- a/src/config.c +++ b/src/appconfig.c @@ -1,11 +1,13 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include -#include #include "avl.h" #include "common.h" -#include "config.h" +#include "appconfig.h" #include "log.h" #define CONFIG_FILE_LINE_MAX ((CONFIG_MAX_NAME + CONFIG_MAX_VALUE + 1024) * 2) diff --git a/src/config.h b/src/appconfig.h similarity index 100% rename from src/config.h rename to src/appconfig.h diff --git a/src/plugins.d/apps_plugin.c b/src/apps_plugin.c similarity index 99% rename from src/plugins.d/apps_plugin.c rename to src/apps_plugin.c index cf16ab41..99a1de05 100755 --- a/src/plugins.d/apps_plugin.c +++ b/src/apps_plugin.c @@ -3,10 +3,9 @@ // 1. support -ch option to set global /proc and /sys prefix // 2. disable RESET_OR_OVERFLOW check in charts - -#define __STDC_FORMAT_MACROS -#include - +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include @@ -26,14 +25,13 @@ #include #include -#include #include #include -#include "../common.h" -#include "../log.h" -#include "../avl.h" -#include "../procfile.h" +#include "common.h" +#include "log.h" +#include "avl.h" +#include "procfile.h" #define MAX_COMPARE_NAME 15 #define MAX_NAME 100 diff --git a/src/avl.c b/src/avl.c index 7b3d9427..352cf4d7 100644 --- a/src/avl.c +++ b/src/avl.c @@ -13,6 +13,9 @@ * */ +#ifdef HAVE_CONFIG_H +#include +#endif #include "avl.h" /* Private methods */ diff --git a/src/common.c b/src/common.c index 4af46b30..2df676f9 100755 --- a/src/common.c +++ b/src/common.c @@ -1,5 +1,6 @@ -// enable O_NOATIME -#define _GNU_SOURCE +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include diff --git a/src/common.h b/src/common.h index 71ef6f69..46af8bc8 100755 --- a/src/common.h +++ b/src/common.h @@ -1,10 +1,14 @@ +#ifndef NETDATA_COMMON_H +#define NETDATA_COMMON_H 1 + +#if defined(HAVE_INTTYPES_H) #include +#elif defined(HAVE_STDINT_H) +#include +#endif #include #include -#ifndef NETDATA_COMMON_H -#define NETDATA_COMMON_H 1 - #define abs(x) ((x < 0)? -x : x) #define usecdiff(now, last) (((((now)->tv_sec * 1000000ULL) + (now)->tv_usec) - (((last)->tv_sec * 1000000ULL) + (last)->tv_usec))) @@ -20,17 +24,6 @@ extern int fd_is_valid(int fd); extern char *global_host_prefix; -#ifdef __GNUC__ -// gcc branch optimization -// #warning "Using GCC branch optimizations" -#define likely(x) __builtin_expect(!!(x), 1) -#define unlikely(x) __builtin_expect(!!(x), 0) -#else -#define likely(x) (x) -#define unlikely(x) (x) -#endif - - /* Number of ticks per second */ #define HZ hz extern unsigned int hz; diff --git a/src/daemon.c b/src/daemon.c index 83e00bb3..19c7657e 100755 --- a/src/daemon.c +++ b/src/daemon.c @@ -1,3 +1,7 @@ +#ifdef HAVE_CONFIG_H +#include +#endif +#ifdef NETDATA_DAEMON #include #include #include @@ -12,9 +16,9 @@ #include #include -#include "config.h" -#include "log.h" #include "common.h" +#include "appconfig.h" +#include "log.h" #include "web_client.h" #include "plugins_d.h" #include "rrd.h" @@ -314,3 +318,4 @@ int become_daemon(int dont_fork, int close_all_files, const char *input, const c return(0); } +#endif diff --git a/src/dictionary.c b/src/dictionary.c index 74d58920..e0c38a68 100755 --- a/src/dictionary.c +++ b/src/dictionary.c @@ -1,7 +1,9 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include -#include #include "avl.h" #include "common.h" diff --git a/src/global_statistics.c b/src/global_statistics.c index 493e92ea..1b8c5d6f 100755 --- a/src/global_statistics.c +++ b/src/global_statistics.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include "common.h" diff --git a/src/log.c b/src/log.c index c7b8283b..21c44afc 100755 --- a/src/log.c +++ b/src/log.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include diff --git a/src/main.c b/src/main.c index 6a341917..138277df 100755 --- a/src/main.c +++ b/src/main.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include @@ -16,7 +19,7 @@ #include "daemon.h" #include "web_server.h" #include "popen.h" -#include "config.h" +#include "appconfig.h" #include "web_client.h" #include "rrd.h" #include "rrd2json.h" @@ -340,7 +343,7 @@ int main(int argc, char **argv) // -------------------------------------------------------------------- prepare_rundir(); - char *user = config_get("global", "run as user", (getuid() == 0)?"nobody":""); + char *user = config_get("global", "run as user", (getuid() == 0)?NETDATA_USER:""); if(*user) { if(become_user(user) != 0) { fprintf(stderr, "Cannot become user %s.\n", user); @@ -379,7 +382,7 @@ int main(int argc, char **argv) // never become a problem if(nice(20) == -1) fprintf(stderr, "Cannot lower my CPU priority. Error: %s.\n", strerror(errno)); -#ifndef NETDATA_NO_DAEMON +#ifdef NETDATA_DAEMON if(become_daemon(dont_fork, 0, input_log_file, output_log_file, error_log_file, access_log_file, &access_fd, &stdaccess) == -1) { fprintf(stderr, "Cannot demonize myself (%s).", strerror(errno)); exit(1); diff --git a/src/plugin_checks.c b/src/plugin_checks.c index cf022417..c8e1f75f 100755 --- a/src/plugin_checks.c +++ b/src/plugin_checks.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include @@ -5,7 +8,7 @@ #include #include "common.h" -#include "config.h" +#include "appconfig.h" #include "log.h" #include "rrd.h" #include "plugin_checks.h" diff --git a/src/plugin_idlejitter.c b/src/plugin_idlejitter.c index bc336fcd..92b9b393 100755 --- a/src/plugin_idlejitter.c +++ b/src/plugin_idlejitter.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include @@ -6,7 +9,7 @@ #include "global_statistics.h" #include "common.h" -#include "config.h" +#include "appconfig.h" #include "log.h" #include "rrd.h" #include "plugin_idlejitter.h" diff --git a/src/plugin_nfacct.c b/src/plugin_nfacct.c index f4c191bd..507db93f 100644 --- a/src/plugin_nfacct.c +++ b/src/plugin_nfacct.c @@ -1,3 +1,7 @@ +#ifdef HAVE_CONFIG_H +#include +#endif +#ifdef INTERNAL_PLUGIN_NFACCT #include #include #include @@ -14,7 +18,7 @@ #include "global_statistics.h" #include "common.h" -#include "config.h" +#include "appconfig.h" #include "log.h" #include "rrd.h" #include "plugin_proc.h" @@ -206,3 +210,4 @@ void *nfacct_main(void *ptr) { mnl_socket_close(nl); return NULL; } +#endif diff --git a/src/plugin_proc.c b/src/plugin_proc.c index 8691d2d0..8e7a257b 100755 --- a/src/plugin_proc.c +++ b/src/plugin_proc.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include @@ -6,7 +9,7 @@ #include "global_statistics.h" #include "common.h" -#include "config.h" +#include "appconfig.h" #include "log.h" #include "rrd.h" #include "plugin_proc.h" diff --git a/src/plugin_tc.c b/src/plugin_tc.c index 3edcc200..8f932011 100755 --- a/src/plugin_tc.c +++ b/src/plugin_tc.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include @@ -6,7 +9,7 @@ #include "avl.h" #include "log.h" #include "common.h" -#include "config.h" +#include "appconfig.h" #include "rrd.h" #include "popen.h" #include "plugin_tc.h" diff --git a/src/plugins.d/Makefile b/src/plugins.d/Makefile deleted file mode 100755 index f83a256c..00000000 --- a/src/plugins.d/Makefile +++ /dev/null @@ -1,66 +0,0 @@ -ifndef BIN_DIR -BIN_DIR = "." -endif - -ifndef CONFIG_DIR -CONFIG_DIR = "conf.d" -endif - -ifndef LOG_DIR -LOG_DIR = "log" -endif - -ifndef PLUGINS_DIR -PLUGINS_DIR = "plugins.d" -endif - -COMMON_FLAGS = BIN_DIR='$(BIN_DIR)' CONFIG_DIR='$(CONFIG_DIR)' LOG_DIR='$(LOG_DIR)' PLUGINS_DIR='$(PLUGINS_DIR)' - -CC := gcc -libs := - -ifdef debug -COMMON_FLAGS += debug=1 -# CFLAGS = -Wall -Wextra -ggdb -DBIN_DIR='$(BIN_DIR)' -DCONFIG_DIR='$(CONFIG_DIR)' -DLOG_DIR='$(LOG_DIR)' -DPLUGINS_DIR='$(PLUGINS_DIR)' -fsanitize=address -fno-omit-frame-pointer -CFLAGS := -Wall -Wextra -O3 -ggdb -DBIN_DIR='$(BIN_DIR)' -DCONFIG_DIR='$(CONFIG_DIR)' -DLOG_DIR='$(LOG_DIR)' -DPLUGINS_DIR='$(PLUGINS_DIR)' -fsanitize=address -fno-omit-frame-pointer -#libs += -ltsan -lpie -else -CFLAGS := -Wall -Wextra -O3 -DBIN_DIR='$(BIN_DIR)' -DCONFIG_DIR='$(CONFIG_DIR)' -DLOG_DIR='$(LOG_DIR)' -DPLUGINS_DIR='$(PLUGINS_DIR)' -fomit-frame-pointer -endif - -all: options plugins - -options: - @echo " COMPILING WITH OPTIONS: $(CFLAGS)" - -plugins: apps.plugin - -apps.plugin: apps_plugin.c - $(CC) $(CFLAGS) -o $@ apps_plugin.c ../avl.o ../common.o ../log.o ../procfile.o $(libs) - -clean: - -rm -f *.o apps.plugin core - -install: all - @echo; \ - echo " INSTALLING apps.plugin to $(PLUGINS_DIR)"; \ - if [ -f $(PLUGINS_DIR)/apps.plugin ]; \ - then \ - mv -f $(PLUGINS_DIR)/apps.plugin $(PLUGINS_DIR)/apps.plugin.old; \ - fi; \ - cp apps.plugin $(PLUGINS_DIR)/; \ - if [ ! "$$USER" = "root" ]; \ - then \ - echo; \ - echo " >>> apps.plugin requires root access to access files in /proc"; \ - echo " >>> Please authorize it!"; \ - echo; \ - sudo chown root $(PLUGINS_DIR)/apps.plugin; \ - sudo chmod 4775 $(PLUGINS_DIR)/apps.plugin; \ - else \ - chown root $(PLUGINS_DIR)/apps.plugin; \ - chmod 4775 $(PLUGINS_DIR)/apps.plugin; \ - fi; \ - echo; - -.PHONY: options all plugins clean install diff --git a/src/plugins_d.c b/src/plugins_d.c index 05d59eb4..71d1fb2d 100755 --- a/src/plugins_d.c +++ b/src/plugins_d.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include @@ -8,7 +11,7 @@ #include "main.h" #include "common.h" -#include "config.h" +#include "appconfig.h" #include "log.h" #include "rrd.h" #include "popen.h" diff --git a/src/popen.c b/src/popen.c index dbc55c1b..16f21a7d 100755 --- a/src/popen.c +++ b/src/popen.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include diff --git a/src/proc_diskstats.c b/src/proc_diskstats.c index e7a84162..d48b8bf9 100755 --- a/src/proc_diskstats.c +++ b/src/proc_diskstats.c @@ -1,11 +1,13 @@ -#include +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include #include "common.h" #include "log.h" -#include "config.h" +#include "appconfig.h" #include "procfile.h" #include "rrd.h" #include "plugin_proc.h" diff --git a/src/proc_interrupts.c b/src/proc_interrupts.c index 6e25b840..1e811eaf 100755 --- a/src/proc_interrupts.c +++ b/src/proc_interrupts.c @@ -1,11 +1,13 @@ -#include +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include #include #include "common.h" -#include "config.h" +#include "appconfig.h" #include "procfile.h" #include "rrd.h" #include "plugin_proc.h" diff --git a/src/proc_meminfo.c b/src/proc_meminfo.c index ad702687..ceec2378 100755 --- a/src/proc_meminfo.c +++ b/src/proc_meminfo.c @@ -1,11 +1,13 @@ -#include +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include #include "common.h" #include "log.h" -#include "config.h" +#include "appconfig.h" #include "procfile.h" #include "rrd.h" #include "plugin_proc.h" diff --git a/src/proc_net_dev.c b/src/proc_net_dev.c index 88ab8fe9..0bb97fa7 100755 --- a/src/proc_net_dev.c +++ b/src/proc_net_dev.c @@ -1,9 +1,11 @@ -#include +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include "common.h" -#include "config.h" +#include "appconfig.h" #include "procfile.h" #include "rrd.h" #include "plugin_proc.h" diff --git a/src/proc_net_ip_vs_stats.c b/src/proc_net_ip_vs_stats.c index 3e46c186..18114af2 100755 --- a/src/proc_net_ip_vs_stats.c +++ b/src/proc_net_ip_vs_stats.c @@ -1,9 +1,11 @@ -#include +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include "common.h" -#include "config.h" +#include "appconfig.h" #include "procfile.h" #include "rrd.h" #include "plugin_proc.h" diff --git a/src/proc_net_netstat.c b/src/proc_net_netstat.c index ffdc80cf..35535265 100755 --- a/src/proc_net_netstat.c +++ b/src/proc_net_netstat.c @@ -1,11 +1,13 @@ -#include +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include #include "common.h" #include "log.h" -#include "config.h" +#include "appconfig.h" #include "procfile.h" #include "rrd.h" #include "plugin_proc.h" diff --git a/src/proc_net_rpc_nfsd.c b/src/proc_net_rpc_nfsd.c index a27fc2e4..b87a0c8e 100644 --- a/src/proc_net_rpc_nfsd.c +++ b/src/proc_net_rpc_nfsd.c @@ -1,11 +1,13 @@ -#include +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include #include "common.h" #include "log.h" -#include "config.h" +#include "appconfig.h" #include "procfile.h" #include "rrd.h" #include "plugin_proc.h" diff --git a/src/proc_net_snmp.c b/src/proc_net_snmp.c index a3b5d296..b6929827 100755 --- a/src/proc_net_snmp.c +++ b/src/proc_net_snmp.c @@ -1,11 +1,13 @@ -#include +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include #include "common.h" #include "log.h" -#include "config.h" +#include "appconfig.h" #include "procfile.h" #include "rrd.h" #include "plugin_proc.h" diff --git a/src/proc_net_stat_conntrack.c b/src/proc_net_stat_conntrack.c index e3d82330..5f16c8df 100755 --- a/src/proc_net_stat_conntrack.c +++ b/src/proc_net_stat_conntrack.c @@ -1,11 +1,13 @@ -#include +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include #include "common.h" #include "log.h" -#include "config.h" +#include "appconfig.h" #include "procfile.h" #include "rrd.h" #include "plugin_proc.h" diff --git a/src/proc_stat.c b/src/proc_stat.c index 77599bef..27d11fb3 100755 --- a/src/proc_stat.c +++ b/src/proc_stat.c @@ -1,11 +1,13 @@ -#include +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include #include "common.h" #include "log.h" -#include "config.h" +#include "appconfig.h" #include "procfile.h" #include "rrd.h" #include "plugin_proc.h" diff --git a/src/proc_sys_kernel_random_entropy_avail.c b/src/proc_sys_kernel_random_entropy_avail.c index 790ee102..b576968b 100755 --- a/src/proc_sys_kernel_random_entropy_avail.c +++ b/src/proc_sys_kernel_random_entropy_avail.c @@ -1,9 +1,11 @@ -#include +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include "common.h" -#include "config.h" +#include "appconfig.h" #include "procfile.h" #include "rrd.h" #include "plugin_proc.h" diff --git a/src/proc_vmstat.c b/src/proc_vmstat.c index 39b44a1a..b6c8ce7b 100755 --- a/src/proc_vmstat.c +++ b/src/proc_vmstat.c @@ -1,4 +1,6 @@ -#include +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include @@ -6,7 +8,7 @@ #include "common.h" #include "log.h" -#include "config.h" +#include "appconfig.h" #include "procfile.h" #include "rrd.h" #include "plugin_proc.h" diff --git a/src/procfile.c b/src/procfile.c index f2269457..31b97ae2 100755 --- a/src/procfile.c +++ b/src/procfile.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include @@ -5,7 +8,6 @@ #include #include #include -#include #include #include #include diff --git a/src/rrd.c b/src/rrd.c index aabcd5c0..7aa2327e 100755 --- a/src/rrd.c +++ b/src/rrd.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include @@ -11,9 +14,9 @@ #include #include -#include "log.h" -#include "config.h" #include "common.h" +#include "log.h" +#include "appconfig.h" #include "rrd.h" @@ -278,7 +281,7 @@ char *rrdset_cache_dir(const char *id) char *ret = NULL; static char *cache_dir = NULL; - if(!cache_dir) cache_dir = config_get("global", "database directory", "cache"); + if(!cache_dir) cache_dir = config_get("global", "database directory", CACHE_DIR); char b[FILENAME_MAX + 1]; char n[FILENAME_MAX + 1]; diff --git a/src/rrd2json.c b/src/rrd2json.c index e2a88d9e..84ba5866 100755 --- a/src/rrd2json.c +++ b/src/rrd2json.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include diff --git a/src/storage_number.c b/src/storage_number.c index e3751299..fe8e4f1f 100755 --- a/src/storage_number.c +++ b/src/storage_number.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #ifdef STORAGE_WITH_MATH #include #endif diff --git a/src/storage_number.h b/src/storage_number.h index e26fde78..50d3e52f 100755 --- a/src/storage_number.h +++ b/src/storage_number.h @@ -1,5 +1,3 @@ -#include - #ifndef NETDATA_STORAGE_NUMBER_H #define NETDATA_STORAGE_NUMBER_H diff --git a/src/unit_test.c b/src/unit_test.c index ca5983a7..dd69d68a 100755 --- a/src/unit_test.c +++ b/src/unit_test.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include diff --git a/src/url.c b/src/url.c index c8c09210..c9dbd415 100755 --- a/src/url.c +++ b/src/url.c @@ -1,3 +1,6 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include diff --git a/src/web_buffer.c b/src/web_buffer.c index d9eb11d5..f679f1b7 100755 --- a/src/web_buffer.c +++ b/src/web_buffer.c @@ -1,12 +1,14 @@ +#ifdef HAVE_CONFIG_H +#include +#endif #include #ifdef STORAGE_WITH_MATH #include #endif -#include "web_buffer.h" - #include "common.h" +#include "web_buffer.h" #include "log.h" void web_buffer_strcpy(struct web_buffer *wb, const char *txt) diff --git a/src/web_client.c b/src/web_client.c index 1fd41a1e..48fd47be 100755 --- a/src/web_client.c +++ b/src/web_client.c @@ -1,6 +1,6 @@ -// enable strcasestr() -#define _GNU_SOURCE - +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include @@ -16,7 +16,7 @@ #include "common.h" #include "log.h" -#include "config.h" +#include "appconfig.h" #include "url.h" #include "web_buffer.h" #include "web_server.h" @@ -136,7 +136,7 @@ struct web_client *web_client_free(struct web_client *w) int mysendfile(struct web_client *w, char *filename) { static char *web_dir = NULL; - if(!web_dir) web_dir = config_get("global", "web files directory", "web"); + if(!web_dir) web_dir = config_get("global", "web files directory", WEB_DIR); debug(D_WEB_CLIENT, "%llu: Looking for file '%s'...", w->id, filename); @@ -227,7 +227,7 @@ void web_client_reset(struct web_client *w) long sent = (w->mode == WEB_CLIENT_MODE_FILECOPY)?w->data->rbytes:w->data->bytes; -#ifndef NETDATA_WITHOUT_ZLIB +#ifdef NETDATA_WITH_ZLIB if(likely(w->zoutput)) sent = (long)w->zstream.total_out; #endif @@ -270,7 +270,7 @@ void web_client_reset(struct web_client *w) w->zoutput = 0; // if we had enabled compression, release it -#ifndef NETDATA_WITHOUT_ZLIB +#ifdef NETDATA_WITH_ZLIB if(w->zinitialized) { debug(D_DEFLATE, "%llu: Reseting compression.", w->id); deflateEnd(&w->zstream); @@ -282,10 +282,10 @@ void web_client_reset(struct web_client *w) w->zstream.total_out = 0; w->zinitialized = 0; } -#endif // NETDATA_WITHOUT_ZLIB +#endif // NETDATA_WITH_ZLIB } -#ifndef NETDATA_WITHOUT_ZLIB +#ifdef NETDATA_WITH_ZLIB void web_client_enable_deflate(struct web_client *w) { if(w->zinitialized == 1) { error("%llu: Compression has already be initialized for this client.", w->id); @@ -330,7 +330,7 @@ void web_client_enable_deflate(struct web_client *w) { debug(D_DEFLATE, "%llu: Initialized compression.", w->id); } -#endif // NETDATA_WITHOUT_ZLIB +#endif // NETDATA_WITH_ZLIB int web_client_data_request(struct web_client *w, char *url, int datasource_type) { @@ -555,11 +555,11 @@ void web_client_process(struct web_client *w) { if(strcasestr(w->data->buffer, "Connection: keep-alive")) w->keepalive = 1; else w->keepalive = 0; -#ifndef NETDATA_WITHOUT_ZLIB +#ifdef NETDATA_WITH_ZLIB // check if the client accepts deflate if(web_enable_gzip && strstr(w->data->buffer, "gzip")) web_client_enable_deflate(w); -#endif // NETDATA_WITHOUT_ZLIB +#endif // NETDATA_WITH_ZLIB int datasource_type = DATASOURCE_GOOGLE_JSONP; //if(strstr(w->data->buffer, "X-DataSource-Auth")) @@ -988,7 +988,7 @@ long web_client_send_chunk_finalize(struct web_client *w) return bytes; } -#ifndef NETDATA_WITHOUT_ZLIB +#ifdef NETDATA_WITH_ZLIB long web_client_send_deflate(struct web_client *w) { long bytes = 0, t = 0; @@ -1089,13 +1089,13 @@ long web_client_send_deflate(struct web_client *w) return(bytes); } -#endif // NETDATA_WITHOUT_ZLIB +#endif // NETDATA_WITH_ZLIB long web_client_send(struct web_client *w) { -#ifndef NETDATA_WITHOUT_ZLIB +#ifdef NETDATA_WITH_ZLIB if(likely(w->zoutput)) return web_client_send_deflate(w); -#endif // NETDATA_WITHOUT_ZLIB +#endif // NETDATA_WITH_ZLIB long bytes; diff --git a/src/web_server.c b/src/web_server.c index f633ca75..fbfc034a 100755 --- a/src/web_server.c +++ b/src/web_server.c @@ -1,6 +1,6 @@ -// enable strcasestr() -#define _GNU_SOURCE - +#ifdef HAVE_CONFIG_H +#include +#endif #include #include #include @@ -16,7 +16,7 @@ #include "common.h" #include "log.h" -#include "config.h" +#include "appconfig.h" #include "url.h" #include "web_buffer.h" #include "web_client.h" diff --git a/web/Makefile.am b/web/Makefile.am new file mode 100644 index 00000000..2344edf3 --- /dev/null +++ b/web/Makefile.am @@ -0,0 +1,13 @@ +# +# Copyright (C) 2015 Alon Bar-Lev +# +MAINTAINERCLEANFILES= $(srcdir)/Makefile.in + +dist_web_DATA = \ + datasource.html \ + index.html \ + index.js \ + netdata.js \ + robots.txt \ + theme.css \ + $(NULL) -- 2.39.2