fix: использовать дефолтные значения порогов (80/90/0) вместо NULL

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
mirivlad 2026-04-14 03:54:03 +08:00
parent ade719f3e0
commit e528a91d8f
1 changed files with 23 additions and 15 deletions

View File

@ -297,36 +297,44 @@ class ServerDetailController extends Model
VALUES (:server_id, :metric_name_id, :warning_threshold, :critical_threshold, :duration) VALUES (:server_id, :metric_name_id, :warning_threshold, :critical_threshold, :duration)
"); ");
// Дефолтные значения порогов (пока хардкод, потом из настроек)
$defaultWarning = 80;
$defaultCritical = 90;
$defaultDuration = 0;
$saved = []; $saved = [];
$partial = []; $usedDefaults = [];
foreach ($metricTypes as $metricType) { foreach ($metricTypes as $metricType) {
$warning = $params[$metricType['name'] . '_warning'] ?? ''; $warning = $params[$metricType['name'] . '_warning'] ?? '';
$critical = $params[$metricType['name'] . '_critical'] ?? ''; $critical = $params[$metricType['name'] . '_critical'] ?? '';
$duration = (int)($params[$metricType['name'] . '_duration'] ?? 0); $duration = $params[$metricType['name'] . '_duration'] ?? '';
// Сохраняем если хотя бы один порог заполнен // Сохраняем если хотя бы один порог заполнен
if ($warning !== '' || $critical !== '') { if ($warning !== '' || $critical !== '') {
// Если не указано - ставим NULL // Если не указано - используем дефолт
$warningVal = $warning !== '' ? (float)$warning : null; $warningVal = $warning !== '' ? (float)$warning : $defaultWarning;
$criticalVal = $critical !== '' ? (float)$critical : null; $criticalVal = $critical !== '' ? (float)$critical : $defaultCritical;
$durationVal = $duration !== '' ? (int)$duration : $defaultDuration;
$insertStmt->execute([ $insertStmt->execute([
':server_id' => $id, ':server_id' => $id,
':metric_name_id' => $metricType['id'], ':metric_name_id' => $metricType['id'],
':warning_threshold' => $warningVal, ':warning_threshold' => $warningVal,
':critical_threshold' => $criticalVal, ':critical_threshold' => $criticalVal,
':duration' => $duration ':duration' => $durationVal
]); ]);
$name = $metricType['name']; $name = $metricType['name'];
if ($warningVal !== null && $criticalVal !== null) { $used = [];
$saved[] = $name; if ($warning === '') $used[] = 'warning=' . $defaultWarning;
if ($critical === '') $used[] = 'critical=' . $defaultCritical;
if ($duration === '') $used[] = 'duration=' . $defaultDuration;
if (count($used) > 0) {
$usedDefaults[] = $name . ' (' . implode(', ', $used) . ')';
} else { } else {
$missing = []; $saved[] = $name;
if ($warningVal === null) $missing[] = 'warning';
if ($criticalVal === null) $missing[] = 'critical';
$partial[] = $name . ' (нет: ' . implode(', ', $missing) . ')';
} }
} }
} }
@ -336,15 +344,15 @@ class ServerDetailController extends Model
if (count($saved) > 0) { if (count($saved) > 0) {
$messages[] = 'Сохранено: ' . implode(', ', $saved); $messages[] = 'Сохранено: ' . implode(', ', $saved);
} }
if (count($partial) > 0) { if (count($usedDefaults) > 0) {
$messages[] = 'Сохранено частично (используются значения по умолчанию): ' . implode(', ', $partial); $messages[] = 'Для остальных подставлены значения по умолчанию: ' . implode(', ', $usedDefaults);
} }
if (count($messages) === 0) { if (count($messages) === 0) {
$messages[] = 'Все пороги удалены'; $messages[] = 'Все пороги удалены';
} }
$_SESSION['flash_message'] = implode('. ', $messages); $_SESSION['flash_message'] = implode('. ', $messages);
$_SESSION['flash_type'] = count($partial) > 0 ? 'warning' : 'success'; $_SESSION['flash_type'] = count($usedDefaults) > 0 ? 'warning' : 'success';
return $response->withHeader('Location', "/servers/{$id}?tab=thresholds")->withStatus(302); return $response->withHeader('Location', "/servers/{$id}?tab=thresholds")->withStatus(302);
} }