45)"; break; case "OS": $whereClauses[] = "OS LIKE '%2003%' OR OS LIKE '%2008%'"; break; case "GLPI": $whereClauses[] = "GLPI IS NULL OR GLPIlu IS NULL OR DATEDIFF(now(), GLPIlu) > 7"; break; case "SCCM": $whereClauses[] = "SCCM IS NULL OR (SCCMlu IS NOT NULL AND DATEDIFF(now(), SCCMlu) > 7)"; break; case "NESSUS": $whereClauses[] = "EPO IS NULL"; break; case "NBU": $whereClauses[] = "NBU IS NULL OR (NBUlu IS NOT NULL AND DATEDIFF(now(), NBUlu) > 30)"; break; case "SCOM": $whereClauses[] = "SCOM IS NULL"; break; case "zabbix": $whereClauses[] = "zabbix IS NULL"; break; case "S1": $whereClauses[] = "S1 IS NULL OR (S1lu IS NOT NULL AND DATEDIFF(now(), S1lu) > 7)"; break; default: $filterTitle = null; break; } if ($filterTitle) { echo "

$filterTitle

"; } } if (!empty($whereClauses)) { $sql .= " WHERE " . implode(' AND ', $whereClauses); } $sql .= " ORDER BY server"; $stmt = $conn->prepare($sql); $stmt->execute(); $result = $stmt->get_result(); // --- PART 2: HELPER FUNCTIONS --- function renderStatusCellWithDate(?string $status, ?string $lastUpdate, int $daysThreshold, string $okText = 'OK'): string { $status = htmlspecialchars($status ?? '', ENT_QUOTES, 'UTF-8'); $lastUpdate = htmlspecialchars($lastUpdate ?? '', ENT_QUOTES, 'UTF-8'); $okText = htmlspecialchars($okText, ENT_QUOTES, 'UTF-8'); if ($status === 'Y') { if (empty($lastUpdate)) { return ""; } try { $diff = date_diff(date_create($lastUpdate), date_create()); $days = (int) $diff->format("%R%a"); if ($days > $daysThreshold) { return ""; } else { return ""; } } catch (Exception) { return ""; } } if ($status !== '') { return ""; } return ""; } // --- PART 3: DATA PROCESSING & DISPLAY --- $counters = [ 'total' => 0, 'ok' => 0, 'nOS' => 0, 'nAD' => 0, 'nSCCM' => 0, 'nGLPI' => 0, 'nFI' => 0, 'nNESSUS' => 0, 'nNBU' => 0, 'nDPM' => 0, 'nS1' => 0, 'nzabbix' => 0, 'nSCOM' => 0 ]; $maxS1Win = "0"; $maxS1Lin = "0"; $dataRows = []; while ($row = $result->fetch_assoc()) { $dataRows[] = $row; $currentV = $row['S1'] ?? ''; $os = $row['OS'] ?? ''; if (str_contains($currentV, '.')) { if (stripos($os, 'Windows') !== false) { if (version_compare($currentV, $maxS1Win, '>')) { $maxS1Win = $currentV; } } else { if (version_compare($currentV, $maxS1Lin, '>')) { $maxS1Lin = $currentV; } } } } foreach ($dataRows as $row) { // KPI Calculation $counters['total']++; $isCompliant = isset($row['AD'], $row['GLPI'], $row['SCCM'], $row['EPO']) && (isset($row['NBU']) || isset($row['DPM'])) && isset($row['SCOM']); if ($isCompliant) { $counters['ok']++; } if (!empty($row['OS']) && !preg_match('(XP|2003|2000|2008|Windows 7|2012)', $row['OS'])) { $counters['nOS']++; } if (!isset($row['AD'])) $counters['nAD']++; if (!isset($row['SCCM'])) $counters['nSCCM']++; if (!isset($row['GLPI'])) $counters['nGLPI']++; if (!isset($row['EPO'])) $counters['nNESSUS']++; if (!isset($row['NBU']) && !isset($row['DPM'])) $counters['nNBU']++; if (!isset($row['SCOM'])) $counters['nSCOM']++; if (!isset($row['zabbix'])) $counters['nzabbix']++; if (!isset($row['S1'])) $counters['nS1']++; // Row Rendering $serverName = htmlspecialchars($row['Server'] ?? '', ENT_QUOTES, 'UTF-8'); $serverUrl = urlencode($row['Server'] ?? ''); if ($isCompliant) { $serverCell = ""; } else { $serverCell = ""; } $osCell = ""; if (!empty($row['OS'])) { $os = htmlspecialchars($row['OS']); $osCell = preg_match('(XP|2003|2000|2008|Windows 7|2012)', $row['OS']) ? "" : ""; } echo ""; echo $serverCell . $osCell; echo ""; echo renderStatusCellWithDate($row['AD'], $row['ADlu'], 45); echo renderStatusCellWithDate($row['GLPI'], $row['GLPIlu'], 7); echo renderStatusCellWithDate($row['SCCM'], $row['SCCMlu'], 7); // NESSUS if (str_contains($row['EPO'] ?? '', '.')) { echo ""; } elseif (isset($row['EPO']) && !in_array($row['EPO'], ['Y', 'N'])) { echo ""; } else { echo ""; } // BACKUP if (($row['NBU'] ?? '') === 'Y') { echo renderStatusCellWithDate($row['NBU'], $row['NBUlu'], 30, 'OK (NBU)'); } elseif (($row['DPM'] ?? '') === 'Y') { echo renderStatusCellWithDate($row['DPM'], $row['DPMlu'], 30, 'OK (DPM)'); } else { echo renderStatusCellWithDate($row['NBU'] ?? $row['DPM'] ?? null, null, 30); } // SCOM if (($row['SCOM'] ?? '') === 'Y') { echo ""; } elseif (isset($row['SCOM'])) { echo ""; } else { echo ""; } // Zabbix $zabbixStatus = $row['zabbix'] ?? ''; if ($zabbixStatus === 'Y' || str_contains($zabbixStatus, '.')) { echo ""; } elseif (isset($row['zabbix'])) { echo ""; } else { echo ""; } // S1 (Comparison) $s1Status = $row['S1'] ?? ''; $osRaw = $row['OS'] ?? ''; $targetMax = (stripos($osRaw, 'Windows') !== false) ? $maxS1Win : $maxS1Lin; if (!empty($s1Status) && $s1Status === $targetMax && $targetMax !== "0") { echo ""; } elseif (str_contains($s1Status, '.')) { echo ""; } else { echo renderStatusCellWithDate($s1Status, $row['S1lu'] ?? null, 7, ($s1Status === 'Y' ? 'OK' : $s1Status)); } echo ""; } //echo ""; $stmt->close(); $conn->close(); ?>
GLPI SCCM
NESSUS SCOM Zabbix SentinelOne
$okTextMissing$okText$lastUpdate ($days days)$okText$lastUpdateInvalid Date$lastUpdate$status Missing $serverName$serverName $os$os
" . htmlspecialchars($row['crit'] ?? '') . "".htmlspecialchars($row['EPO'])."".htmlspecialchars($row['EPO'])."MissingOK".htmlspecialchars($row['SCOM'])."Missing".htmlspecialchars(str_replace('Y', 'OK', $zabbixStatus))."".htmlspecialchars($zabbixStatus)."Missing" . htmlspecialchars($s1Status) . " " . htmlspecialchars($s1Status) . "
AD

GLPI/FI

SCCM

NESSUS

SCOM

Zabbix

SentinelOne