'load_tab_live',
'trend' => 'load_tab_trend',
'history' => 'load_tab_history',
'system' => 'load_tab_system',
];
$tab_data = [];
foreach ($tabs_to_render as $render_tab_id) {
$tab_data[$render_tab_id] = $tab_loaders[$render_tab_id]($db, $G);
}
// KPI 스트립 타일 정의: [라벨, 값, 부가텍스트, 상태클래스, 이동 탭]
$kpi_tiles = [
['경보 센서', $alert_count . '개', null,
$alert_count > 0 ? 'err' : 'ok', 'live'],
['오프라인', $offline_count . '개', $online_count . '/' . $sensor_total . ' 온라인',
$offline_count > 0 ? 'warn' : 'ok', 'live'],
['미복구 누수', $unrecovered_count . '건', null,
$unrecovered_count > 0 ? 'err' : 'ok', 'live'],
['오늘 경보', $today_alert_count . '건', '측정·이벤트 건수',
$today_alert_count > 0 ? 'warn' : 'ok', 'trend'],
['SMS 잔여', $sms_balance !== null ? $sms_balance . '건' : '확인 전', null,
($sms_balance !== null && $sms_balance <= SMS_BALANCE_WARN_THRESHOLD) ? 'err' : 'ok', 'system'],
['중요 진단', $ops_critical_count . '건', null,
$ops_critical_count > 0 ? 'warn' : 'ok', 'system'],
];
?>
온습도·누수 통합 모니터링 대시보드 = htmlspecialchars(APP_VERSION) ?>
온습도·누수 통합 모니터링 대시보드 = htmlspecialchars(APP_VERSION) ?>
= htmlspecialchars($system_title) ?>
= htmlspecialchars($system_detail) ?>
- = htmlspecialchars($hl['text']) ?>
= date('Y-m-d H:i:s') ?>
인쇄용 전체 보기 · 자동 새로고침 없음
30초 자동 새로고침
0): ?>
경보 SMS 발송 실패
최근 1시간 = (int)$recent_alert_fail ?>건 — 미수신 가능. Cafe24 SMS 잔액·계정·발신번호 확인
시스템 점검 →
0): ?>
미복구 누수 사고 = (int)$unrecovered_count ?>건
현장 조치·복구 확인이 필요합니다
실시간 현황 →
0): ?>
수집 거부 = (int)$rejection_total ?>건
최근 24시간 — 사유·출처 IP 상세 확인
시스템 점검 →
대응 필요 = count($risk_items_all) ?>건
= $sev_text ?>
= htmlspecialchars($risk['name']) ?>= $risk['location'] ? ' · ' . htmlspecialchars($risk['location']) : '' ?>
= htmlspecialchars($risk['detail']) ?>
= htmlspecialchars($pb['title'] ?? '권장 조치') ?> — 권장 조치
- = htmlspecialchars($step) ?>
인쇄용 전체 보기입니다(전 탭 순차 렌더 · 자동 새로고침 없음). 평시 관제는 실시간 현황을 사용하세요.
($current_tab === 'all')] + $G;
foreach ($tabs_to_render as $render_tab_id) {
dash_render_tab(__DIR__ . '/tabs/' . $render_tab_id . '.php', $shared_view_vars, $tab_data[$render_tab_id]);
}
?>