public function execute() { global $CFG, $DB; $options = $this->expandedOptions; $dataroot = run_external_command("du -s {$CFG->dataroot}", "Couldn't find dataroot directory"); $pattern = '/\\d*/'; preg_match($pattern, $dataroot[0], $matches); $filedir = run_external_command("du -s {$CFG->dataroot}/filedir", "Couldn't find filedir directory"); preg_match($pattern, $filedir[0], $dir_matches); $sql_query = "SELECT SUM(filesize) AS total FROM {files}"; $all_files = $DB->get_record_sql($sql_query); $sql_query = "SELECT DISTINCT contenthash, SUM(filesize) AS total FROM {files}"; if (is_a($DB, 'pgsql_native_moodle_database')) { $sql_query .= " GROUP BY contenthash"; $distinct_contenthash = $DB->get_records_sql($sql_query); $total = 0; foreach ($distinct_contenthash as $k => $v) { $total += $v->total; } $distinctfilestotal = $total; } else { $distinct_contenthash = $DB->get_record_sql($sql_query); $distinctfilestotal = $distinct_contenthash->total; } $filesbycourse = array(); if ($courses = get_all_courses()) { foreach ($courses as $course) { $subcontexts = get_sub_context_ids($course->ctxpath); $filesbycourse[$course->id] = array('unique' => 0, 'all' => 0); foreach ($subcontexts as $subcontext) { if ($files = get_files($subcontext->id)) { foreach ($files as $file) { $filesbycourse[$course->id]['unique'] += file_is_unique($file->contenthash, $subcontext->id) ? $file->filesize : 0; $filesbycourse[$course->id]['all'] += $file->filesize; } } } } } $sortarray = higher_size($filesbycourse); $backups = backup_size(); $data = array('dataroot' => $matches[0], 'filedir' => $dir_matches[0], 'files total' => $all_files->total, 'distinct files total' => $distinctfilestotal); foreach ($sortarray as $courseid => $values) { $data["Course {$courseid} files total"] = strval($values['all']); $data["Course {$courseid} files unique"] = strval($values['unique']); } foreach ($backups as $key => $values) { $data["Backup {$values->username}"] = strval($values->backupsize); } if ($options['json']) { echo json_encode($data); } else { foreach ($data as $k => $v) { echo "{$k}: " . display_size($v) . "\n"; } } }
function parse() { $TimeFile = "/etc/artica-postfix/pids/exec.squid.interface-size.php.time"; $pidfile = "/etc/artica-postfix/pids/exec.squid.interface-size.php.pid"; $unix = new unix(); $sock = new sockets(); $EnableKerbAuth = intval($sock->GET_INFO("EnableKerbAuth")); $ActiveDirectoryEmergency = intval($sock->GET_INFO("ActiveDirectoryEmergency")); if (!is_file("/etc/artica-postfix/settings/Daemons/SQUIDEnable")) { @file_put_contents("/etc/artica-postfix/settings/Daemons/SQUIDEnable", 1); } if ($ActiveDirectoryEmergency == 1) { $EnableKerbAuth = 0; } $pid = @file_get_contents($pidfile); if ($pid < 100) { $pid = null; } if ($unix->process_exists($pid, basename(__FILE__))) { $timepid = $unix->PROCCESS_TIME_MIN($pid); if ($GLOBALS["VERBOSE"]) { echo "{$pid} already executed since {$timepid}Mn\n"; } if (!$GLOBALS["FORCE"]) { if ($timepid < 14) { return; } $kill = $unix->find_program("kill"); unix_system_kill_force($pid); } } @file_put_contents($pidfile, getmypid()); if (!$GLOBALS["FORCE"]) { if (!$GLOBALS["VERBOSE"]) { $time = $unix->file_time_min($TimeFile); if ($time < 14) { echo "Current {$time}Mn, require at least 14mn\n"; return; } } } @unlink($TimeFile); @file_put_contents($TimeFile, time()); $sock = new sockets(); $SquidPerformance = intval($sock->GET_INFO("SquidPerformance")); events("Proxy performance set to {$SquidPerformance}"); build_progress("{refresh_dashboard_values}", 10); system_values(); $php = $unix->LOCATE_PHP5_BIN(); build_progress("{refresh_dashboard_values}", 11); $dateint = InfluxQueryFromUTC(strtotime("-48 hours")); $date = date("Y-m-d H:00:00", $dateint); $qSimple = new mysql(); $sql = "SELECT COUNT(ID) as tcount FROM squid_admin_mysql WHERE severity=0 AND zDate>'{$date}'"; $ligne = mysql_fetch_array($qSimple->QUERY_SQL($sql, "artica_events")); @file_put_contents("{$GLOBALS["BASEDIR"]}/WATCHDOG_COUNT_EVENTS", $ligne["tcount"]); @chmod("{$GLOBALS["BASEDIR"]}/WATCHDOG_COUNT_EVENTS", 0777); build_progress("{refresh_dashboard_values} APACHE_STATISTICS (2)", 11); APACHE_STATISTICS(); build_progress("{refresh_dashboard_values} NETWORK_INTERFACES_RXTX (3)", 11); NETWORK_INTERFACES_RXTX(); build_progress("{refresh_dashboard_values} COUNT_OF_SURICATA (4)", 11); COUNT_OF_SURICATA(); build_progress("{refresh_dashboard_values} NOT_CATEGORIZED (5)", 11); NOT_CATEGORIZED(); $SQUIDEnable = intval(@file_get_contents("/etc/artica-postfix/settings/Daemons/SQUIDEnable")); if ($SQUIDEnable == 0) { build_progress("{done}", 100); return; } if ($SquidPerformance > 1) { if (is_file("/etc/cron.d/artica-stats-hourly")) { @unlink("/etc/cron.d/artica-stats-hourly"); system("/etc/init.d/cron reload"); } build_progress("{statistics_are_disabled}", 110); die; } if (!is_file("/etc/cron.d/artica-stats-hourly")) { @unlink("/etc/cron.d/artica-stats-hourly"); } @mkdir("/usr/share/artica-postfix/ressources/interface-cache", 0755, true); $t1 = time(); $q = new mysql_squid_builder(); $tables[] = "dashboard_size_day"; $tables[] = "dashboard_countwebsite_day"; $tables[] = "dashboard_countuser_day"; $tables[] = "dashboard_user_day"; $tables[] = "dashboard_notcached"; $tables[] = "dashboard_cached"; $tables[] = "dashboard_blocked_day"; while (list($num, $table) = each($tables)) { if (!$q->TABLE_EXISTS($table)) { events("Table: {$table} is not yet ready..."); continue; } $NUM = $q->COUNT_ROWS($table); events("Table: {$table} {$NUM} rows"); } build_progress("{calculate_cache_rate}", 12); CachedOrNot(); squidhour_clean(); $t1 = time(); $influx = new influx(); $now = InfluxQueryFromUTC(strtotime("-24 hour")); build_progress("{refresh_dashboard_values}", 13); // ----------------------------------------------------------------------------------------------------- build_progress("{refresh_dashboard_values}", 14); // ----------------------------------------------------------------------------------------------------- build_progress("{cleaning_databases}", 16); squidhour_clean(); build_progress("{refresh_dashboard_values}", 17); FLUX_RQS(); build_progress("{refresh_dashboard_values}", 18); build_progress("{refresh_dashboard_values}", 19); //USERAGENTS(); build_progress("{calculate_dates}", 20); MAX_MIN(); backup_size(); build_progress("{refresh_dashboard_values}", 21); WEBFILTERING(); build_progress("{refresh_dashboard_values}", 22); $f = array(); // ----------------------------------------------------------------------------------------------------- $q = new mysql_squid_builder(); $ligne = @mysql_fetch_array($q->QUERY_SQL("SELECT COUNT(*) as tcount FROM proxy_ports WHERE enabled=1 AND transparent=1 AND Tproxy=1")); if ($q->ok) { @file_put_contents("{$GLOBALS["BASEDIR"]}/COUNT_DE_TRANSPARENT", intval($ligne["tcount"])); } // ----------------------------------------------------------------------------------------------------- build_progress("{refresh_dashboard_values}", 51); $MAIN = array(); $xdata = array(); $ydata = array(); $f = array(); // ----------------------------------------------------------------------------------------------------- // Calcul des caches en cours. $SquidCacheLevel = $sock->GET_INFO("SquidCacheLevel"); if (!is_numeric($SquidCacheLevel)) { $SquidCacheLevel = 4; } if ($SquidCacheLevel == 0) { @file_put_contents("{$GLOBALS["BASEDIR"]}/COUNT_DE_CACHES", 0); } build_progress("{refresh_dashboard_values}", 52); $q = new mysql(); $sql = "SELECT cache_size,cache_type FROM squid_caches_center WHERE remove=0"; $xsize = 0; $results = $q->QUERY_SQL($sql, "artica_backup"); while ($ligne = @mysql_fetch_array($results, MYSQL_ASSOC)) { $cache_size = $ligne["cache_size"]; $cache_type = $ligne["cache_type"]; if ($cache_type == "Cachenull") { continue; } $xsize = $xsize + $cache_size; } if ($GLOBALS["VERBOSE"]) { echo "COUNT_DE_CACHES: {$xsize}MB\n"; } @file_put_contents("{$GLOBALS["BASEDIR"]}/COUNT_DE_CACHES", $xsize); if ($GLOBALS["PROGRESS"]) { build_progress("{refresh_dashboard_values}", 90); system("{$php} /usr/share/artica-postfix/exec.status.php --all --verbose"); } build_progress("{refresh_dashboard_values} {done}", 100); // ----------------------------------------------------------------------------------------------------- }
function parse() { $TimeFile = "/etc/artica-postfix/pids/exec.squid.interface-size.php.time"; $pidfile = "/etc/artica-postfix/pids/exec.squid.interface-size.php.pid"; $unix = new unix(); $sock = new sockets(); $EnableKerbAuth = intval($sock->GET_INFO("EnableKerbAuth")); $ActiveDirectoryEmergency = intval($sock->GET_INFO("ActiveDirectoryEmergency")); if ($ActiveDirectoryEmergency == 1) { $EnableKerbAuth = 0; } $pid = @file_get_contents($pidfile); if ($pid < 100) { $pid = null; } if ($unix->process_exists($pid, basename(__FILE__))) { $timepid = $unix->PROCCESS_TIME_MIN($pid); if ($GLOBALS["VERBOSE"]) { echo "{$pid} already executed since {$timepid}Mn\n"; } if (!$GLOBALS["FORCE"]) { if ($timepid < 14) { return; } $kill = $unix->find_program("kill"); unix_system_kill_force($pid); } } @file_put_contents($pidfile, getmypid()); if (!$GLOBALS["FORCE"]) { if (!$GLOBALS["VERBOSE"]) { $time = $unix->file_time_min($TimeFile); if ($time < 14) { echo "Current {$time}Mn, require at least 14mn\n"; return; } } } @unlink($TimeFile); @file_put_contents($TimeFile, time()); $sock = new sockets(); $SquidPerformance = intval($sock->GET_INFO("SquidPerformance")); events("Proxy performance set to {$SquidPerformance}"); build_progress("{refresh_dashboard_values}", 10); system_values(); $php = $unix->LOCATE_PHP5_BIN(); build_progress("{refresh_dashboard_values}", 11); $dateint = InfluxQueryFromUTC(strtotime("-48 hours")); $date = date("Y-m-d H:00:00", $dateint); $qSimple = new mysql(); $sql = "SELECT COUNT(ID) as tcount FROM squid_admin_mysql WHERE severity=0 AND zDate>'{$date}'"; $ligne = mysql_fetch_array($qSimple->QUERY_SQL($sql, "artica_events")); @file_put_contents("{$GLOBALS["BASEDIR"]}/WATCHDOG_COUNT_EVENTS", $ligne["tcount"]); @chmod("{$GLOBALS["BASEDIR"]}/WATCHDOG_COUNT_EVENTS", 0777); if ($SquidPerformance > 1) { if (is_file("/etc/cron.d/artica-stats-hourly")) { @unlink("/etc/cron.d/artica-stats-hourly"); system("/etc/init.d/cron reload"); } build_progress("{statistics_are_disabled}", 110); die; } if (!is_file("/etc/cron.d/artica-stats-hourly")) { @unlink("/etc/cron.d/artica-stats-hourly"); } @mkdir("/usr/share/artica-postfix/ressources/interface-cache", 0755, true); $t1 = time(); $q = new mysql_squid_builder(); $tables[] = "dashboard_size_day"; $tables[] = "dashboard_countwebsite_day"; $tables[] = "dashboard_countuser_day"; $tables[] = "dashboard_user_day"; $tables[] = "dashboard_notcached"; $tables[] = "dashboard_cached"; $tables[] = "dashboard_blocked_day"; while (list($num, $table) = each($array)) { if (!$q->TABLE_EXISTS($table)) { events("Table: {$table} is not yet ready..."); continue; } $NUM = $q->COUNT_ROWS($table); events("Table: {$table} {$NUM} rows"); } build_progress("{calculate_cache_rate}", 12); CachedOrNot(); squidhour_clean(); $t1 = time(); $influx = new influx(); $now = InfluxQueryFromUTC(strtotime("-24 hour")); build_progress("{refresh_dashboard_values}", 13); // ----------------------------------------------------------------------------------------------------- $COUNT_DE_SNI_CERTS_TIME = 1000000; $COUNT_DE_SNI_CERTS = "{$GLOBALS["BASEDIR"]}/COUNT_DE_SNI_CERTS"; if (is_file($COUNT_DE_SNI_CERTS)) { $COUNT_DE_SNI_CERTS_TIME = $unix->file_time_min($COUNT_DE_SNI_CERTS); } if ($GLOBALS["VERBOSE"]) { echo "COUNT_DE_SNI_CERTS_TIME = {$COUNT_DE_SNI_CERTS_TIME}\n"; $COUNT_DE_SNI_CERTS_TIME = 999999; } if ($COUNT_DE_SNI_CERTS_TIME > 60) { $sql = "SELECT COUNT(website) as tcount,website FROM sni_certs WHERE time > {$now}s GROUP BY time(24h),website"; $f = array(); echo $sql . "\n"; $main = $influx->QUERY_SQL($sql); foreach ($main as $row) { $website = $row->website; $count = intval($row->tcount); if ($GLOBALS["VERBOSE"]) { echo "SNI: {$website} -> {$count}\n"; } $f[] = "('{$count}','{$website}')"; } if (count($f) > 0) { $q = new mysql_squid_builder(); $q->QUERY_SQL("CREATE TABLE IF NOT EXISTS sni_certs (`hits` BIGINT UNSIGNED, `websites` VARCHAR(128) NOT NULL PRIMARY KEY, KEY `hits` (`hits`) ) ENGINE=MYISAM"); $q->QUERY_SQL("TRUNCATE TABLE sni_certs"); $q->QUERY_SQL("INSERT IGNORE INTO sni_certs (hits,websites) VALUES " . @implode(",", $f)); @unlink($COUNT_DE_SNI_CERTS); @file_put_contents($COUNT_DE_SNI_CERTS, count($f)); } } build_progress("{refresh_dashboard_values}", 14); $NETS = $unix->NETWORK_ALL_INTERFACES(); // ----------------------------------------------------------------------------------------------------- while (list($Interface, $array) = each($NETS)) { $sql = "SELECT SUM(RX) as size FROM ethrxtx WHERE time > {$now}s AND ETH='{$Interface}' GROUP BY time(10m) ORDER BY ASC"; if ($GLOBALS["VERBOSE"]) { echo "\n*****\n{$sql}\n******\n"; } $MAIN = array(); $xdata = array(); $ydata = array(); $main = $influx->QUERY_SQL($sql); foreach ($main as $row) { $time = InfluxToTime($row->time); $min = date("H:i", $time); $size = intval($row->size) / 1024; if ($GLOBALS["VERBOSE"]) { echo "({$time}): ethrxtx {$Interface}:RX: {$min} -> {$size}\n"; } $size = $size / 1024; if (round($size) == 0) { continue; } $xdata[] = $min; $ydata[] = round($size); } $MAIN["xdata"] = $xdata; $MAIN["ydata"] = $ydata; @file_put_contents("{$GLOBALS["BASEDIR"]}/FLUX_{$Interface}_RX", serialize($MAIN)); if (count($xdata) < 2) { @unlink("{$GLOBALS["BASEDIR"]}/FLUX_{$Interface}_RX"); } $sql = "SELECT SUM(TX) as size FROM ethrxtx WHERE time > {$now}s AND ETH='{$Interface}' GROUP BY time(10m) ORDER BY ASC"; $MAIN = array(); $xdata = array(); $ydata = array(); build_progress("{refresh_dashboard_values}", 15); $main = $influx->QUERY_SQL($sql); foreach ($main as $row) { $time = InfluxToTime($row->time); $min = date("H:i", $time); $size = intval($row->size) / 1024; $size = $size / 1024; if ($size == 0) { continue; } if ($GLOBALS["VERBOSE"]) { echo "ethrxtx {$Interface}:TX: {$min} -> {$size}\n"; } $xdata[] = $min; $ydata[] = round($size); } $MAIN["xdata"] = $xdata; $MAIN["ydata"] = $ydata; @file_put_contents("{$GLOBALS["BASEDIR"]}/FLUX_{$Interface}_TX", serialize($MAIN)); if (count($xdata) < 2) { @unlink("{$GLOBALS["BASEDIR"]}/FLUX_{$Interface}_TX"); } } // ----------------------------------------------------------------------------------------------------- build_progress("{cleaning_databases}", 16); squidhour_clean(); build_progress("{refresh_dashboard_values}", 17); FLUX_RQS(); build_progress("{refresh_dashboard_values}", 18); build_progress("{refresh_dashboard_values}", 19); USERAGENTS(); build_progress("{calculate_dates}", 20); MAX_MIN(); backup_size(); build_progress("{refresh_dashboard_values}", 21); WEBFILTERING(); build_progress("{refresh_dashboard_values}", 22); $f = array(); // ----------------------------------------------------------------------------------------------------- $q = new mysql_squid_builder(); $ligne = @mysql_fetch_array($q->QUERY_SQL("SELECT COUNT(*) as tcount FROM proxy_ports WHERE enabled=1 AND transparent=1 AND Tproxy=1")); if ($q->ok) { @file_put_contents("{$GLOBALS["BASEDIR"]}/COUNT_DE_TRANSPARENT", intval($ligne["tcount"])); } // ----------------------------------------------------------------------------------------------------- build_progress("{refresh_dashboard_values}", 51); $MAIN = array(); $xdata = array(); $ydata = array(); $f = array(); // ----------------------------------------------------------------------------------------------------- // Calcul des caches en cours. $SquidCacheLevel = $sock->GET_INFO("SquidCacheLevel"); if (!is_numeric($SquidCacheLevel)) { $SquidCacheLevel = 4; } if ($SquidCacheLevel == 0) { @file_put_contents("{$GLOBALS["BASEDIR"]}/COUNT_DE_CACHES", 0); } build_progress("{refresh_dashboard_values}", 52); $q = new mysql(); $sql = "SELECT cache_size,cache_type FROM squid_caches_center WHERE remove=0"; $xsize = 0; $results = $q->QUERY_SQL($sql, "artica_backup"); while ($ligne = @mysql_fetch_array($results, MYSQL_ASSOC)) { $cache_size = $ligne["cache_size"]; $cache_type = $ligne["cache_type"]; if ($cache_type == "Cachenull") { continue; } $xsize = $xsize + $cache_size; } if ($GLOBALS["VERBOSE"]) { echo "COUNT_DE_CACHES: {$xsize}MB\n"; } @file_put_contents("{$GLOBALS["BASEDIR"]}/COUNT_DE_CACHES", $xsize); if ($GLOBALS["PROGRESS"]) { build_progress("{refresh_dashboard_values}", 90); system("{$php} /usr/share/artica-postfix/exec.status.php --all --verbose"); } build_progress("{refresh_dashboard_values} {done}", 100); // ----------------------------------------------------------------------------------------------------- }