/* This file is part of vmod-tbf Copyright (C) 2013-2014 Sergey Poznyakoff Vmod-tbf 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, or (at your option) any later version. Vmod-tbf 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 vmod-tbf. If not, see . */ #define _BSD_SOURCE #include "tbf.h" #if defined(HAVE_SYSINFO) && defined(HAVE_SYS_SYSINFO_H) # include #endif static double sys_getla(int what) { #if defined(HAVE_GETLOADAVG) double loadavg[3]; if (getloadavg(loadavg, 3) != 3) { syslog(LOG_DAEMON|LOG_CRIT, "tbf.getla cannot get values"); return 0.0; } return loadavg[what]; #elif defined(HAVE_SYSINFO) && defined(HAVE_SYS_SYSINFO_H) struct sysinfo info; if (sysinfo(&info)) { syslog(LOG_DAEMON|LOG_CRIT, "tbf.getla cannot get values"); return 0.0; } return info.loads[what] / 65536.0; #else syslog(LOG_DAEMON|LOG_CRIT, "tbf.getla is not implemented"); return 0.0; #endif } VCL_REAL vmod_getla(MOD_CTX ctx, VCL_INT what) { switch (what) { case 1: what = 0; break; case 5: what = 1; break; case 15: what = 2; break; default: what = 0; } return sys_getla(what); }