145 lines
8.7 KiB
Twig
Executable File
145 lines
8.7 KiB
Twig
Executable File
{% extends "layout.twig" %}
|
||
|
||
{% block content %}
|
||
<div class="row justify-content-center">
|
||
<div class="col-md-8">
|
||
<div class="card">
|
||
<div class="card-header">
|
||
<h3><i class="fas fa-edit"></i> Редактировать сервер "{{ server.name }}"</h3>
|
||
</div>
|
||
<div class="card-body">
|
||
<form method="post" action="/servers/{{ server.id }}">
|
||
|
||
<div class="mb-3">
|
||
<label for="name" class="form-label">Название сервера *</label>
|
||
<input type="text" class="form-control" id="name" name="name" value="{{ server.name }}" required>
|
||
<small class="form-text text-muted">Укажите понятное название сервера</small>
|
||
</div>
|
||
|
||
<div class="mb-3">
|
||
<label for="address" class="form-label">Адрес сервера</label>
|
||
<input type="text" class="form-control" id="address" name="address" value="{{ server.address|default('') }}" placeholder="IP или домен">
|
||
<small class="form-text text-muted">IP-адрес или доменное имя сервера (не обязательно)</small>
|
||
</div>
|
||
|
||
<div class="mb-3">
|
||
<label for="group_id" class="form-label">Группа</label>
|
||
<select class="form-select" id="group_id" name="group_id">
|
||
<option value="">Не выбрана</option>
|
||
{% for group in groups %}
|
||
<option value="{{ group.id }}" {% if server.group_id == group.id %}selected{% endif %}>{{ group.name }}</option>
|
||
{% endfor %}
|
||
</select>
|
||
<small class="form-text text-muted">Выберите группу для объединения серверов</small>
|
||
</div>
|
||
|
||
<div class="mb-3">
|
||
<label for="description" class="form-label">Описание</label>
|
||
<textarea class="form-control" id="description" name="description" rows="3">{{ server.description|default('') }}</textarea>
|
||
<small class="form-text text-muted">Дополнительная информация о сервере</small>
|
||
</div>
|
||
|
||
{% if allMetrics|length > 0 %}
|
||
<hr>
|
||
<h5 class="mb-3"><i class="fas fa-chart-line"></i> Отображаемые метрики</h5>
|
||
<p class="text-muted small">Выберите метрики, которые будут показываться на графиках. Пустой выбор = все метрики.</p>
|
||
|
||
<div class="row mb-3">
|
||
{% set savedMetrics = server_display_metrics ?: [] %}
|
||
{% for metric in allMetrics %}
|
||
<div class="col-md-4 col-lg-3 mb-2">
|
||
<div class="form-check">
|
||
<input class="form-check-input" type="checkbox" name="display_metrics[]"
|
||
id="metric_{{ metric.name }}" value="{{ metric.name }}"
|
||
{% if metric.name in savedMetrics %}checked{% endif %}>
|
||
<label class="form-check-label" for="metric_{{ metric.name }}">
|
||
{{ metric.name }}
|
||
{% if metric.unit %}({{ metric.unit }}){% endif %}
|
||
</label>
|
||
</div>
|
||
</div>
|
||
{% endfor %}
|
||
</div>
|
||
{% endif %}
|
||
|
||
<hr>
|
||
|
||
<h5 class="mb-3"><i class="fas fa-wifi"></i> Настройки мониторинга недоступности</h5>
|
||
|
||
<div class="row">
|
||
<div class="col-md-6">
|
||
<div class="mb-3">
|
||
<label for="offline_timeout" class="form-label">Таймаут offline</label>
|
||
<div class="input-group">
|
||
<input type="number" class="form-control" id="offline_timeout" name="offline_timeout"
|
||
value="{{ server.offline_timeout|default(300) }}" min="0" max="86400">
|
||
<span class="input-group-text">секунд</span>
|
||
</div>
|
||
<small class="form-text text-muted">Сервер будет считаться offline если метрики не приходили N секунд (0 = выключено)</small>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-6">
|
||
<div class="mb-3">
|
||
<label class="form-label">Уведомления</label>
|
||
<div class="form-check form-switch mt-2">
|
||
<input class="form-check-input" type="checkbox" name="notify_on_offline" id="notify_on_offline"
|
||
value="1" {% if server.notify_on_offline|default(1) %}checked{% endif %}>
|
||
<label class="form-check-label" for="notify_on_offline">
|
||
Уведомлять при offline
|
||
</label>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
{% if server.last_offline_alert_at %}
|
||
<div class="alert alert-info small">
|
||
<i class="fas fa-clock"></i> Последний offline алерт: {{ server.last_offline_alert_at|date('d.m.Y H:i:s') }}
|
||
</div>
|
||
{% endif %}
|
||
|
||
<div class="d-grid gap-2 d-md-flex justify-content-md-end">
|
||
<a href="/servers" class="btn btn-secondary me-md-2">
|
||
<i class="fas fa-arrow-left"></i> Назад
|
||
</a>
|
||
<button type="submit" class="btn btn-primary">
|
||
<i class="fas fa-save"></i> Сохранить изменения
|
||
</button>
|
||
</div>
|
||
</form>
|
||
|
||
<hr>
|
||
|
||
<div class="mt-4">
|
||
<h5>Управление агентом мониторинга:</h5>
|
||
{% if agent_token %}
|
||
<div class="row">
|
||
<div class="col-md-4 mb-2">
|
||
<a href="/agent/install.sh?token={{ agent_token }}" class="btn btn-outline-primary w-100">
|
||
<i class="fab fa-linux"></i> Агент для Linux
|
||
</a>
|
||
</div>
|
||
<div class="col-md-4 mb-2">
|
||
<a href="/agent/install.bat?token={{ agent_token }}" class="btn btn-outline-info w-100">
|
||
<i class="fab fa-windows"></i> Агент для Windows
|
||
</a>
|
||
</div>
|
||
<div class="col-md-4 mb-2">
|
||
<a href="/servers/{{ server.id }}/regenerate-token" class="btn btn-outline-warning w-100" onclick="return confirm('Вы уверены, что хотите сгенерировать новый токен? Это сделает недействительным старый скрипт установки.');">
|
||
<i class="fas fa-sync-alt"></i> Сбросить токен
|
||
</a>
|
||
</div>
|
||
</div>
|
||
<p class="mt-2">Если вы потеряли доступ к агенту или хотите создать новый токен безопасности, используйте кнопку "Сбросить токен".</p>
|
||
{% else %}
|
||
<div class="alert alert-warning">
|
||
Токен агента не создан. <a href="/servers/{{ server.id }}/regenerate-token">Создать токен</a>
|
||
</div>
|
||
{% endif %}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
{% endblock %}
|