mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-02 19:02:31 +00:00
docs: review Monitor documentation in all seven translations
This commit is contained in:
@@ -10,7 +10,7 @@
|
||||
},
|
||||
"intro": {
|
||||
"title": "Un lanzador, no un instalador de aplicaciones",
|
||||
"body": "La pestaña <strong>Apps</strong> no instala software ni descubre servicios por sí sola. Convierte los enlaces web guardados en una cuadrícula con búsqueda. Los enlaces que pertenecen a un LXC se configuran en la <appTabLink>pestaña App</appTabLink> del contenedor; los enlaces personalizados permiten incluir servicios de VMs, proxies inversos y paneles externos."
|
||||
"body": "La pestaña <strong>Apps</strong> no instala ni descubre servicios. Convierte enlaces guardados en una cuadrícula con búsqueda. Los enlaces de LXC se configuran en su <appTabLink>pestaña App</appTabLink>; los personalizados permiten incluir servicios VM, proxies inversos y paneles externos."
|
||||
},
|
||||
"sources": {
|
||||
"heading": "Qué aparece en Apps",
|
||||
@@ -31,12 +31,12 @@
|
||||
},
|
||||
{
|
||||
"source": "Enlace personalizado sin asociación",
|
||||
"appears": "Cualquier destino HTTP(S), incluido un servicio externo o publicado mediante proxy inverso.",
|
||||
"appears": "Cualquier destino HTTP(S), incluidos servicios externos o publicados mediante proxy inverso.",
|
||||
"managedFrom": "Apps → Editar"
|
||||
}
|
||||
],
|
||||
"relationshipTitle": "Apps y la pestaña App del LXC tienen funciones diferentes",
|
||||
"relationshipBody": "La <appTabLink>pestaña App</appTabLink> del LXC gestiona la identidad de la aplicación, sus enlaces web y el seguimiento opcional de versión. La pestaña principal <strong>Apps</strong> utiliza esos enlaces para ofrecer un acceso rápido. Por eso, al editar una tarjeta que pertenece a un LXC se vuelve a su registro original en lugar de crear una segunda configuración."
|
||||
"relationshipBody": "La <appTabLink>pestaña App</appTabLink> del LXC gestiona identidad, enlaces web y seguimiento opcional de versión. <strong>Apps</strong> usa esos enlaces para abrirlos rápidamente. Editar una tarjeta LXC vuelve al registro del invitado sin duplicar la configuración."
|
||||
},
|
||||
"cards": {
|
||||
"heading": "Cómo utilizar una tarjeta",
|
||||
@@ -45,7 +45,7 @@
|
||||
"Pulsa la tarjeta para abrir su URL en una pestaña nueva del navegador.",
|
||||
"El logotipo utiliza primero el definido para el enlace web y, cuando corresponde, recurre al logotipo general de la aplicación.",
|
||||
"La etiqueta de categoría utiliza el mismo color y nombre que el enlace correspondiente en la pestaña App del LXC.",
|
||||
"La etiqueta del invitado identifica la VM o el LXC asociado. Púlsala para abrir su modal; los enlaces de LXC abren directamente <strong>App</strong> y los de VM abren <strong>Estado</strong>.",
|
||||
"La etiqueta del invitado identifica la VM o LXC asociado. Púlsala para abrir su ventana: LXC abre <strong>App</strong> y VM abre <strong>Estado</strong>.",
|
||||
"La flecha morada hacia arriba indica que existe una actualización para esa aplicación o imagen Docker concreta. No representa el total de actualizaciones del invitado."
|
||||
]
|
||||
},
|
||||
@@ -55,8 +55,8 @@
|
||||
"items": [
|
||||
"La búsqueda tiene en cuenta el nombre de la aplicación, el nombre del invitado, el VMID y la categoría.",
|
||||
"El filtro de categoría permite mostrar una categoría concreta o todas las aplicaciones.",
|
||||
"Se puede ordenar por <strong>Nombre</strong>, <strong>ID</strong> o <strong>Categoría</strong>. Al ordenar por categoría se insertan encabezados entre los grupos de tarjetas.",
|
||||
"El orden seleccionado se recuerda en este navegador. El texto de búsqueda y el filtro de categoría se restablecen al volver a la página.",
|
||||
"Ordena por <strong>Nombre</strong>, <strong>ID</strong> o <strong>Categoría</strong>. Ordenar por categoría añade encabezados entre grupos de tarjetas.",
|
||||
"El orden se recuerda en este navegador. Búsqueda y filtro de categoría se restablecen al volver a la página.",
|
||||
"La pestaña Apps permanece disponible aunque la cuadrícula esté vacía, de modo que se pueda añadir el primer enlace personalizado sin registrar antes una aplicación LXC."
|
||||
]
|
||||
},
|
||||
@@ -67,21 +67,41 @@
|
||||
"Pulsa <strong>Añadir enlace</strong> en la barra de herramientas o en el estado vacío.",
|
||||
"Introduce un nombre y una URL completa que empiece por <code>http://</code> o <code>https://</code>.",
|
||||
"Opcionalmente, añade un logotipo, elige o crea una categoría y asocia el enlace a una VM o un LXC.",
|
||||
"Guarda el enlace. La nueva tarjeta se añade a la cuadrícula de inmediato.",
|
||||
"Para modificar o eliminar un enlace personalizado, pulsa <strong>Editar</strong> y utiliza el lápiz de su tarjeta."
|
||||
"Guarda el enlace. Su tarjeta aparece inmediatamente en la cuadrícula.",
|
||||
"Para modificar o eliminar un enlace personalizado, pulsa <strong>Editar</strong> y el lápiz de su tarjeta."
|
||||
],
|
||||
"colField": "Campo",
|
||||
"colRequired": "Obligatorio",
|
||||
"colPurpose": "Finalidad",
|
||||
"fields": [
|
||||
{ "field": "Nombre", "required": "Sí", "purpose": "Título de la tarjeta y término de búsqueda." },
|
||||
{ "field": "URL", "required": "Sí", "purpose": "Destino HTTP(S) completo que abre la tarjeta." },
|
||||
{ "field": "URL del logotipo", "required": "No", "purpose": "Imagen remota que se muestra en la tarjeta." },
|
||||
{ "field": "Categoría", "required": "No", "purpose": "Añade una etiqueta común y permite filtrar por categoría." },
|
||||
{ "field": "Asociación a invitado", "required": "No", "purpose": "Vincula el enlace a una VM o un LXC y activa su acceso directo." }
|
||||
{
|
||||
"field": "Nombre",
|
||||
"required": "Sí",
|
||||
"purpose": "Título de la tarjeta y término de búsqueda."
|
||||
},
|
||||
{
|
||||
"field": "URL",
|
||||
"required": "Sí",
|
||||
"purpose": "Destino HTTP(S) completo que abre la tarjeta."
|
||||
},
|
||||
{
|
||||
"field": "URL del logotipo",
|
||||
"required": "No",
|
||||
"purpose": "Imagen remota que se muestra en la tarjeta."
|
||||
},
|
||||
{
|
||||
"field": "Categoría",
|
||||
"required": "No",
|
||||
"purpose": "Añade una etiqueta común y permite filtrar por categoría."
|
||||
},
|
||||
{
|
||||
"field": "Asociación al invitado",
|
||||
"required": "No",
|
||||
"purpose": "Vincula el enlace a una VM o un LXC y activa su acceso directo."
|
||||
}
|
||||
],
|
||||
"editTitle": "Edita la fuente original",
|
||||
"editBody": "El modo de edición solo muestra lápices en los enlaces personalizados. Para cambiar una tarjeta generada desde una aplicación LXC registrada, abre la <appTabLink>pestaña App</appTabLink> de ese contenedor y edita allí el enlace web guardado."
|
||||
"editBody": "El modo de edición solo muestra lápices en enlaces personalizados. Para una tarjeta de aplicación LXC, abre la <appTabLink>pestaña App</appTabLink> del invitado y cambia allí el enlace guardado."
|
||||
},
|
||||
"categories": {
|
||||
"heading": "Categorías y señales de actualización",
|
||||
@@ -90,17 +110,17 @@
|
||||
"El registro asistido por catálogo puede proponer una categoría para una aplicación LXC, pero el usuario siempre puede modificarla.",
|
||||
"Desde el mismo selector se pueden crear categorías propias y reutilizarlas después en el filtro.",
|
||||
"Los colores de las categorías son estables y se adaptan al tema claro u oscuro. El morado y el rojo se reservan para actualizaciones y estados de peligro.",
|
||||
"En los enlaces web de Docker, ProxMenux relaciona la tarjeta con su contenedor o imagen y muestra el estado de actualización de esa imagen. Las actualizaciones de Docker Engine permanecen en la <updatesLink>pestaña Updates</updatesLink> del LXC."
|
||||
"En Docker, la tarjeta se relaciona con su contenedor o imagen y muestra las actualizaciones de esa imagen. Las de Docker Engine permanecen en la <updatesLink>pestaña Actualizaciones</updatesLink> del LXC."
|
||||
]
|
||||
},
|
||||
"persistence": {
|
||||
"heading": "Persistencia y comportamiento de la caché",
|
||||
"intro": "El panel está diseñado para abrirse con los datos ya disponibles en el Monitor, sin volver a analizar todos los invitados.",
|
||||
"items": [
|
||||
"Los enlaces personalizados se guardan de forma atómica en <code>/etc/proxmenux/custom_links.json</code> y se cargan en memoria al iniciar el Monitor.",
|
||||
"Los enlaces personalizados se guardan atómicamente en <code>/etc/proxmenux/custom_links.json</code> y se cargan en memoria al iniciar Monitor.",
|
||||
"Los enlaces registrados en LXCs siguen formando parte del registro guardado de cada aplicación; el panel Apps no los duplica en el archivo de enlaces personalizados.",
|
||||
"Al crear, editar o eliminar un enlace personalizado, la lista en memoria se actualiza de inmediato.",
|
||||
"La preferencia de ordenación se guarda solo en el navegador. No se sincroniza entre dispositivos ni usuarios.",
|
||||
"La preferencia de orden solo se guarda en este navegador, sin sincronizarse entre dispositivos o usuarios.",
|
||||
"La posición de Apps en la navegación principal se configura por separado en <settingsLink>Ajustes → Orden de navegación</settingsLink>."
|
||||
]
|
||||
},
|
||||
@@ -109,19 +129,46 @@
|
||||
"colProblem": "Situación",
|
||||
"colResolution": "Solución",
|
||||
"rows": [
|
||||
{ "problem": "Una aplicación LXC está registrada, pero no aparece ninguna tarjeta", "resolution": "Abre su pestaña App y añade al menos un enlace web. El seguimiento de versión por sí solo no crea una tarjeta en el lanzador." },
|
||||
{ "problem": "La URL o el logotipo son incorrectos", "resolution": "Edita el enlace personalizado desde Apps o modifica el enlace web en la pestaña App del LXC correspondiente." },
|
||||
{ "problem": "Falta un servicio Docker", "resolution": "Edita la aplicación Docker registrada y guarda el puerto web publicado por el servicio como enlace web." },
|
||||
{ "problem": "La flecha morada corresponde a otra actualización Docker", "resolution": "Revisa el nombre y la descripción del enlace web para que se puedan relacionar con el contenedor o la imagen correctos." },
|
||||
{ "problem": "Apps se abre antes que Resumen del sistema", "resolution": "El primer elemento guardado en Ajustes → Orden de navegación se convierte en la pestaña inicial. Restaura el orden predeterminado o mueve Resumen a la primera posición." }
|
||||
{
|
||||
"problem": "Una aplicación LXC está registrada, pero no aparece ninguna tarjeta",
|
||||
"resolution": "Abre su pestaña App y añade al menos un enlace web. El seguimiento de versión por sí solo no crea una tarjeta en el lanzador."
|
||||
},
|
||||
{
|
||||
"problem": "La URL o el logotipo son incorrectos",
|
||||
"resolution": "Edita el enlace personalizado desde Apps o modifica el enlace web en la pestaña App del LXC correspondiente."
|
||||
},
|
||||
{
|
||||
"problem": "Falta un servicio Docker",
|
||||
"resolution": "Edita la aplicación Docker registrada y guarda el puerto web publicado por el servicio como enlace web."
|
||||
},
|
||||
{
|
||||
"problem": "La flecha morada corresponde a otra actualización Docker",
|
||||
"resolution": "Revisa el nombre y la descripción del enlace web para que se puedan relacionar con el contenedor o la imagen correctos."
|
||||
},
|
||||
{
|
||||
"problem": "Apps se abre antes que Resumen del sistema",
|
||||
"resolution": "El primer elemento guardado en Ajustes → Orden de navegación se convierte en la pestaña inicial. Restaura el orden predeterminado o mueve Resumen a la primera posición."
|
||||
}
|
||||
]
|
||||
},
|
||||
"whereNext": {
|
||||
"heading": "Por dónde seguir",
|
||||
"items": [
|
||||
{ "label": "Pestaña App del LXC", "href": "/docs/monitor/dashboard/vms-lxcs/app", "tail": " — registrar aplicaciones, enlaces web y seguimiento opcional de versión." },
|
||||
{ "label": "Pestaña Updates del LXC", "href": "/docs/monitor/dashboard/vms-lxcs/updates", "tail": " — configurar y ejecutar actualizaciones de aplicaciones, Docker Engine e imágenes." },
|
||||
{ "label": "Pestaña Ajustes", "href": "/docs/monitor/dashboard/settings#navigation-order", "tail": " — cambiar el orden de navegación y la pestaña inicial." }
|
||||
{
|
||||
"label": "Pestaña App del LXC",
|
||||
"href": "/docs/monitor/dashboard/vms-lxcs/app",
|
||||
"tail": " — registrar aplicaciones, enlaces web y seguimiento opcional de versión."
|
||||
},
|
||||
{
|
||||
"label": "Pestaña Updates del LXC",
|
||||
"href": "/docs/monitor/dashboard/vms-lxcs/updates",
|
||||
"tail": " — configurar y ejecutar actualizaciones de aplicaciones, Docker Engine e imágenes."
|
||||
},
|
||||
{
|
||||
"label": "Pestaña Ajustes",
|
||||
"href": "/docs/monitor/dashboard/settings#navigation-order",
|
||||
"tail": " — cambiar el orden de navegación y la pestaña inicial."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "ProxMenux Monitor — Panel: pestaña Hardware | ProxMenux Documentation",
|
||||
"title": "ProxMenux Monitor — Panel: Hardware | Documentación de ProxMenux",
|
||||
"description": "La pestaña Hardware inventaría la máquina física: CPU y placa base, módulos de memoria, sensores térmicos, GPUs (con monitorización en tiempo real por slot e instalador de drivers en un clic), aceleradoras Coral TPU, resumen de almacenamiento con comprobaciones de velocidad de enlace, listas completas de dispositivos PCI y USB, consumo de energía, PSUs, ventiladores y estado del UPS."
|
||||
},
|
||||
"header": {
|
||||
@@ -14,29 +14,29 @@
|
||||
},
|
||||
"thresholds": {
|
||||
"title": "Colores de estado y umbrales aplicados aquí",
|
||||
"intro": "Cada chip de temperatura y lectura de esta pestaña sigue la misma clasificación — <green/> <strong>verde</strong> por debajo de Warning, <amber/> <strong>ámbar</strong> entre Warning y Critical, <red/> <strong>rojo</strong> en Critical y por encima. Valores por defecto recomendados que vienen con ProxMenux:",
|
||||
"intro": "Cada indicador y lectura de temperatura usa la misma escala: <green/> <strong>verde</strong> por debajo de Advertencia, <amber/> <strong>ámbar</strong> entre Advertencia y Crítico, <red/> <strong>rojo</strong> desde Crítico. Valores recomendados incluidos con ProxMenux:",
|
||||
"items": [
|
||||
"<strong>Temperatura de CPU</strong> — Warning 80 °C, Critical 90 °C.",
|
||||
"<strong>Temperatura de disco</strong> — HDD 60/65 °C · SSD 70/75 °C · NVMe 80/85 °C · SAS 55/65 °C (warning / critical)."
|
||||
"<strong>Temperatura de CPU</strong>: advertencia 80 °C, crítico 90 °C.",
|
||||
"<strong>Temperatura de disco</strong>: HDD 60/65 °C · SSD 70/75 °C · NVMe 80/85 °C · SAS 55/65 °C (advertencia / crítico)."
|
||||
],
|
||||
"outro": "Cada valor es configurable por host — <link>Settings → Health Monitor Thresholds</link> es la fuente única de verdad y explica cómo ajustarlos."
|
||||
"outro": "Los valores se configuran por host; <link>Ajustes → Umbrales del monitor de salud</link> documenta y centraliza su ajuste."
|
||||
},
|
||||
"sections": {
|
||||
"heading": "Secciones",
|
||||
"intro": "La pestaña renderiza de arriba abajo en este orden. Algunas secciones solo aparecen cuando el host tiene el hardware o la herramienta correspondiente instalada — se marcan <em>(condicional)</em> abajo.",
|
||||
"systemInfoTitle": "System Information",
|
||||
"intro": "Las secciones aparecen en este orden de arriba abajo. Algunas requieren el hardware o la herramienta correspondiente; se indican como <em>(condicional)</em>.",
|
||||
"systemInfoTitle": "Información del sistema",
|
||||
"systemInfoIntro": "Dos bloques uno al lado del otro, siempre presentes:",
|
||||
"systemInfoItems": [
|
||||
"<strong>CPU</strong> — nombre del modelo, microarquitectura, sockets / cores / threads, frecuencia base / boost, flags de virtualización (VT-x / AMD-V), topología de caché.",
|
||||
"<strong>Placa base</strong> — vendor, modelo, versión de BIOS, fecha de BIOS, UUID SMBIOS. Útil para emparejar con páginas de descarga del fabricante al buscar actualizaciones de firmware."
|
||||
"<strong>CPU</strong>: modelo, microarquitectura, sockets, núcleos, hilos, frecuencias base y turbo, capacidades de virtualización (VT-x / AMD-V) y topología de caché.",
|
||||
"<strong>Placa base</strong>: fabricante, modelo, versión y fecha de BIOS y UUID SMBIOS. Sirve para localizar la página de descarga correcta del fabricante al buscar firmware."
|
||||
],
|
||||
"memoryTitle": "Memory Modules",
|
||||
"memoryBody": "Una fila por slot poblado desde <code>dmidecode</code>: etiqueta del slot, tamaño del módulo, tipo (DDR4 / DDR5 / variantes ECC), velocidad (configurada y nominal), fabricante, part number y serial. Los slots vacíos se listan atenuados para que veas de un vistazo el margen de ampliación.",
|
||||
"thermalTitle": "Thermal Monitoring",
|
||||
"thermalIntro": "Siete sub-bloques alimentados por <code>lm-sensors</code>, <code>sysfs</code> y scrapers específicos por herramienta. Los sensores hwmon de almacenamiento se correlacionan con el dispositivo de bloques físico, por lo que cada unidad detectada incluye su modelo y la ruta <code>/dev/...</code>. Un bloque permanece oculto cuando no hay sensores en esa categoría.",
|
||||
"memoryTitle": "Módulos de memoria",
|
||||
"memoryBody": "Una fila por ranura ocupada según <code>dmidecode</code>: etiqueta, capacidad del módulo, tipo (DDR4 / DDR5 / variantes ECC), velocidad configurada y nominal, fabricante, referencia y número de serie. Las ranuras vacías aparecen atenuadas para mostrar el margen de ampliación.",
|
||||
"thermalTitle": "Monitoreo Térmico",
|
||||
"thermalIntro": "Siete bloques alimentados por <code>lm-sensors</code>, <code>sysfs</code> y lectores específicos de cada herramienta. Los sensores hwmon de almacenamiento se asocian al dispositivo de bloques físico, con su modelo y ruta <code>/dev/...</code>. Cada bloque se oculta si no hay sensores en su categoría.",
|
||||
"thermalItems": [
|
||||
"<strong>CPU</strong> — temperaturas de package y por core.",
|
||||
"<strong>GPU</strong> — sensores de GPU discreta vía <code>nvidia-smi</code> / <code>amdgpu_top</code> / iGPU Intel. Incluye hot-spot y memory-junction cuando el driver los expone.",
|
||||
"<strong>CPU</strong>: temperatura del encapsulado y de cada núcleo.",
|
||||
"<strong>GPU</strong>: sensores de GPU dedicada mediante <code>nvidia-smi</code> / <code>amdgpu_top</code> y de iGPU Intel. Incluye punto caliente y unión de memoria cuando el controlador los ofrece.",
|
||||
"<strong>NVME</strong> — temperatura composite del controlador asociada a su namespace NVMe exacto.",
|
||||
"<strong>HDD</strong> — lecturas de <code>drivetemp</code> para dispositivos de bloques rotacionales.",
|
||||
"<strong>SSD</strong> — lecturas de <code>drivetemp</code> para dispositivos de bloques SATA/SAS no rotacionales.",
|
||||
@@ -45,16 +45,16 @@
|
||||
]
|
||||
},
|
||||
"graphics": {
|
||||
"heading": "Graphics Cards",
|
||||
"intro": "Cada controlador de vídeo detectado renderiza como su propia tarjeta con vendor, modelo, tipo (<em>Integrada</em> / <em>PCI</em> / BMC), slot PCI (BDF), kernel driver y lista de módulos. La tarjeta también expone un control inline <strong>Switch Mode</strong> que alterna la GPU entre compartición LXC (driver nativo) y passthrough a VM (<code>vfio-pci</code>) — mira <link>Switch GPU Mode (VM ↔ LXC)</link> para entender qué pasa en el host cuando lo pulsas.",
|
||||
"heading": "Tarjetas gráficas",
|
||||
"intro": "Cada controlador de vídeo aparece en una tarjeta con fabricante, modelo, tipo (<em>Integrada</em> / <em>PCI</em> / BMC), dirección PCI (BDF), controlador del kernel y módulos. <strong>Cambiar modo</strong> alterna entre compartir la GPU con LXC (controlador nativo) y passthrough a VM (<code>vfio-pci</code>). <link>Cambiar modo GPU (VM ↔ LXC)</link> explica sus efectos en el host.",
|
||||
"vfioImageAlt": "Sección Graphics Cards mostrando una GPU integrada Matrox G200EH atada a mgag200 (Ready for LXC) y una NVIDIA Quadro P400 atada a vfio-pci (Ready for VM passthrough)",
|
||||
"vfioImageCaption": "Dos GPUs detectadas: el chip BMC Matrox está en el driver nativo y listo para LXC; la NVIDIA Quadro P400 está atada a <code>vfio-pci</code>, lista para passthrough a VM.",
|
||||
"lxcImageAlt": "Sección Graphics Cards mostrando una iGPU Intel UHD Graphics en i915 y una NVIDIA Quadro P1000 en el driver nvidia, ambas etiquetadas Ready for LXC containers",
|
||||
"lxcImageAlt": "Tarjetas gráficas: iGPU Intel UHD Graphics con i915 y NVIDIA Quadro P1000 con nvidia, ambas listas para contenedores LXC",
|
||||
"lxcImageCaption": "Mismo nodo después de devolver la tarjeta NVIDIA al driver nativo — ambas GPUs ahora Ready for LXC containers.",
|
||||
"realtimeTitle": "Modal de monitorización en tiempo real",
|
||||
"realtimeBody": "Pulsar una tarjeta de GPU abre una modal de monitorización por slot que sondea la herramienta del vendor adecuada cada tres segundos. La modal expone vendor, tipo, slot PCI, driver, módulo(s) del kernel, utilización en vivo de motores (Render/3D, Video, Blitter, VideoEnhance), clocks de gráficos y memoria, temperatura, consumo de potencia (cuando se reporta), uso de VRAM y una tabla Active Processes con carga de motor por proceso. Los datos se sirven desde <code>/api/gpu/<slot>/realtime</code>.",
|
||||
"toolsIntro": "La herramienta de vendor usada por GPU:",
|
||||
"headerVendor": "Vendor",
|
||||
"realtimeTitle": "Ventana de monitorización en tiempo real",
|
||||
"realtimeBody": "Pulsa una GPU para abrir su monitorización por ranura, que consulta la herramienta del fabricante cada tres segundos. Muestra fabricante, tipo, ranura PCI, controlador, módulos del kernel, uso de motores (Render/3D, Video, Blitter, VideoEnhance), frecuencias de gráficos y memoria, temperatura, consumo si está disponible, VRAM y procesos activos con carga por proceso. Datos de <code>/api/gpu/<slot>/realtime</code>.",
|
||||
"toolsIntro": "Herramienta del fabricante usada para cada GPU:",
|
||||
"headerVendor": "Proveedor",
|
||||
"headerTool": "Herramienta",
|
||||
"headerProject": "Proyecto",
|
||||
"tools": [
|
||||
@@ -65,7 +65,7 @@
|
||||
"projectHref": "https://developer.nvidia.com/nvidia-system-management-interface"
|
||||
},
|
||||
{
|
||||
"vendor": "Intel iGPU",
|
||||
"vendor": "iGPU Intel",
|
||||
"tool": "intel_gpu_top (igt-gpu-tools)",
|
||||
"projectLabel": "gitlab.freedesktop.org",
|
||||
"projectHref": "https://gitlab.freedesktop.org/drm/igt-gpu-tools"
|
||||
@@ -78,97 +78,97 @@
|
||||
},
|
||||
{
|
||||
"vendor": "Matrox / ASPEED (BMC)",
|
||||
"tool": "— (solo display)",
|
||||
"tool": "— (solo visualización)",
|
||||
"projectLabel": "Detectado y etiquetado como BMC; sin bloque realtime."
|
||||
}
|
||||
],
|
||||
"nvidiaImageAlt": "Modal de monitorización de GPU para una NVIDIA Quadro P1000: vendor NVIDIA, driver nvidia cargado, clock gráfico 1.26 GHz, clock de memoria 2.50 GHz, temperatura 50 °C, todas las barras de utilización de motor al 0 %, sin procesos activos, memoria total 4096 MiB",
|
||||
"nvidiaImageCaption": "NVIDIA Quadro P1000 con el driver propietario cargado — clocks, temperatura, barras de motores y procesos activos todos visibles.",
|
||||
"intelImageAlt": "Modal de monitorización de GPU para una iGPU Intel UHD Graphics en driver i915, mostrando 11.31 W de consumo, 1 % de carga en motor de video y un proceso ffmpeg consumiendo 8 MB",
|
||||
"nvidiaImageAlt": "Monitorización de NVIDIA Quadro P1000: fabricante NVIDIA, controlador nvidia cargado, frecuencia gráfica 1.26 GHz, memoria 2.50 GHz, temperatura 50 °C, motores al 0 %, sin procesos activos y memoria total 4096 MiB",
|
||||
"nvidiaImageCaption": "NVIDIA Quadro P1000 con controlador propietario: frecuencias, temperatura, barras de uso de motores y procesos activos.",
|
||||
"intelImageAlt": "Monitorización de iGPU Intel UHD Graphics con controlador i915: consumo 11.31 W, carga de vídeo 1 % y proceso ffmpeg con 8 MB",
|
||||
"intelImageCaption": "iGPU Intel con <code>i915</code> activo. La tabla Active Processes recoge un job ffmpeg usando el motor de video.",
|
||||
"amdImageAlt": "Modal de monitorización de GPU para una GPU integrada AMD Lucienne en driver amdgpu, con barras de utilización de motor al 0 % y amdgpu_top listado como proceso activo",
|
||||
"amdImageCaption": "iGPU AMD monitorizada a través de <code>amdgpu_top</code> — la propia herramienta aparece como proceso activo porque es el backend de polling en vivo.",
|
||||
"installTitle": "Instalar el driver NVIDIA desde la modal",
|
||||
"installBody": "Cuando una GPU NVIDIA está atada a <code>nouveau</code>/<code>nvidiafb</code> (sin driver propietario instalado), el bloque realtime no puede leer clocks, potencia ni carga por proceso. La modal entonces reemplaza las métricas con un botón <strong>Install NVIDIA Drivers</strong> que conecta directamente con el mismo script documentado en <link>Install NVIDIA Drivers (Host)</link>.",
|
||||
"noDriverAlt": "Modal de monitorización de GPU para una NVIDIA Quadro P620 con módulos de kernel nvidiafb y nouveau cargados, un callout Extended Monitoring Not Available y un botón azul Install NVIDIA Drivers",
|
||||
"amdImageAlt": "Monitorización de GPU integrada AMD Lucienne con amdgpu: motores al 0 % y amdgpu_top como proceso activo",
|
||||
"amdImageCaption": "iGPU AMD monitorizada con <code>amdgpu_top</code>. La herramienta aparece como proceso activo porque obtiene los datos en vivo.",
|
||||
"installTitle": "Instalar el controlador NVIDIA desde la ventana",
|
||||
"installBody": "Si una GPU NVIDIA usa <code>nouveau</code>/<code>nvidiafb</code> sin controlador propietario, no se pueden leer frecuencias, consumo ni carga por proceso. La ventana muestra <strong>Instalar controladores NVIDIA</strong>, que ejecuta el script de <link>Instalar controladores NVIDIA (Host)</link>.",
|
||||
"noDriverAlt": "Monitorización de NVIDIA Quadro P620 con nvidiafb y nouveau cargados, aviso Monitorización ampliada no disponible y botón azul Instalar controladores NVIDIA",
|
||||
"noDriverCaption": "Sin driver propietario instalado todavía — la modal muestra un instalador de un solo clic.",
|
||||
"promptAlt": "Diálogo de confirmación NVIDIA GPU Driver Installation listando las GPUs detectadas, contenedores LXC con passthrough NVIDIA y un par Yes/Cancel",
|
||||
"promptAlt": "Confirmación de instalación de controladores NVIDIA, con GPU detectadas, contenedores LXC con passthrough NVIDIA y botones Sí/Cancelar",
|
||||
"promptCaption": "Resumen pre-instalación: GPUs detectadas, contenedores LXC que ya tienen passthrough NVIDIA y qué hará el script. No se toca nada hasta que confirmas.",
|
||||
"successAlt": "Salida de terminal mostrando el driver NVIDIA 580.105.08 instalado correctamente y nvidia-smi reportando una Quadro P620",
|
||||
"successCaption": "Instalación correcta — el <code>.run</code> de NVIDIA construido vía DKMS, el servicio de persistencia en su sitio y <code>nvidia-smi</code> reportando la GPU.",
|
||||
"warningTitle": "Elige una versión de driver que tu GPU soporte de verdad",
|
||||
"warningBody": "Las ramas más nuevas de driver NVIDIA dejan de dar soporte a familias de GPU antiguas (p. ej. Maxwell / Kepler). Si la instalación termina pero <code>nvidia-smi</code> reporta <em>\"No devices were found\"</em> o DKMS da error, lo más probable es que la rama elegida no cubra tu GPU — vuelve a lanzar el instalador y elige una rama más antigua (legacy 470.x para tarjetas de era Kepler, etc.). NVIDIA publica la compatibilidad por GPU en la <a>página oficial de búsqueda de drivers</a>.",
|
||||
"warningBody": "Las ramas nuevas de NVIDIA eliminan soporte para GPU antiguas, como Maxwell o Kepler. Si termina la instalación pero <code>nvidia-smi</code> muestra <em>\"No devices were found\"</em> o falla DKMS, puede que la rama no sea compatible. Repite el instalador con una rama anterior, como legacy 470.x para Kepler. Consulta la compatibilidad en la <a>página oficial de búsqueda de controladores</a>.",
|
||||
"whereGoIntro": "Por dónde seguir desde aquí:",
|
||||
"whereGoItems": [
|
||||
"<link1>Install NVIDIA Drivers (Host)</link1> — recorrido completo del instalador, matriz de compatibilidad de kernel, parche opcional NVENC y propagación a LXC.",
|
||||
"<link2>Switch GPU Mode (VM ↔ LXC)</link2> — qué hace realmente el control inline <em>Switch Mode</em>.",
|
||||
"<link3>Add GPU to VM (Passthrough)</link3> y <link4>Add GPU to LXC</link4> — asignación por primera vez de una GPU sin atar."
|
||||
"<link1>Instalar controladores NVIDIA (Host)</link1>: guía del instalador, matriz de compatibilidad del kernel, parche NVENC opcional y propagación a LXC.",
|
||||
"<link2>Cambiar modo GPU (VM ↔ LXC)</link2>: efectos del control <em>Cambiar modo</em> de la tarjeta.",
|
||||
"<link3>Añadir GPU a VM (passthrough)</link3> y <link4>Añadir GPU a LXC</link4>: primera asignación de una GPU sin asociar."
|
||||
]
|
||||
},
|
||||
"coral": {
|
||||
"heading": "Coral TPU / Aceleradoras de IA",
|
||||
"subHeading": "(condicional)",
|
||||
"intro": "Se renderiza cuando el host tiene dispositivos Google Coral u otras aceleradoras de IA conectadas. Cada dispositivo abre una modal con su tipo de conexión (M.2 / mini-PCIe / USB), ancho de enlace PCIe, vendor / product ID, kernel driver (<code>apex</code> para PCIe, <code>libedgetpu</code> para USB), módulos del kernel (<code>gasket</code> + <code>apex</code>), nodos de dispositivo (<code>/dev/apex_*</code>), estado del runtime Edge TPU, temperatura en vivo y los umbrales de aviso de hardware del firmware.",
|
||||
"intro": "Aparece cuando hay dispositivos Google Coral u otras aceleradoras de IA conectadas. Cada dispositivo abre sus detalles: conexión (M.2 / mini-PCIe / USB), ancho PCIe, ID de fabricante/producto, soporte de software (<code>apex</code> del kernel para PCIe, <code>libedgetpu</code> de usuario para USB), módulos (<code>gasket</code> + <code>apex</code>), nodos (<code>/dev/apex_*</code>), estado del runtime Edge TPU, temperatura en vivo y umbrales de aviso del firmware.",
|
||||
"imageAlt": "Modal de detalle Coral Edge TPU: conexión PCIe / M.2, enlace PCIe 5.0 GT/s x1, vendor 1ac1:089a, kernel driver apex, módulos gasket y apex cargados, /dev/apex_0 presente, Edge TPU Runtime no instalado, temperatura 53.5 °C con umbrales de aviso de hardware",
|
||||
"imageCaption": "Coral M.2 con los módulos de kernel del host cargados, el nodo de dispositivo arriba y los avisos de temperatura del firmware expuestos. La línea del runtime se pone verde una vez instalado el runtime Edge TPU correspondiente.",
|
||||
"pathsIntro": "Existen dos rutas de instalación dependiendo del form factor:",
|
||||
"pathsIntro": "Hay dos vías de instalación según el formato:",
|
||||
"pathsItems": [
|
||||
"<strong>M.2 / Mini-PCIe</strong> — el host necesita los módulos de kernel <code>gasket</code> + <code>apex</code> construidos vía DKMS para que el nodo de dispositivo <code>/dev/apex_0</code> aparezca en el arranque.",
|
||||
"<strong>USB Accelerator</strong> — el host solo necesita el runtime de espacio de usuario Edge TPU (<code>libedgetpu1-std</code>) desde el repositorio APT de Google."
|
||||
],
|
||||
"outro": "Ambas las gestiona una única entrada de ProxMenux — <installLink>Install Coral TPU on the Host</installLink> — que auto-detecta lo que tienes. El contexto y el runtime oficial viven en <a>coral.ai/docs</a>. Una vez listo el lado del host, entrega el dispositivo a un contenedor con <lxcLink>Add Coral TPU to LXC</lxcLink>."
|
||||
"outro": "Una sola entrada, <installLink>Instalar Coral TPU en el host</installLink>, detecta y gestiona ambos tipos. Consulta el contexto y runtime oficial en <a>coral.ai/docs</a>. Después, asígnalo a un contenedor con <lxcLink>Añadir Coral TPU a LXC</lxcLink>."
|
||||
},
|
||||
"storage": {
|
||||
"heading": "Storage Summary",
|
||||
"intro": "Cada dispositivo de bloque que conoce el kernel, agrupado por tipo. Para cada disco obtienes el nombre del kernel (<code>sda</code>, <code>nvme0n1</code>, <code>zram0</code> …), la etiqueta de tipo (<em>SSD</em>, <em>HDD</em>, <em>NVMe SSD</em>), la cadena del modelo y la información del enlace negociado. Pulsa cualquier disco para abrir una modal de info de hardware con modelo, serial, capacidad, interfaz y velocidad de enlace actual vs máxima.",
|
||||
"heading": "Resumen de almacenamiento",
|
||||
"intro": "Todos los dispositivos de bloques conocidos por el kernel, agrupados por tipo. Cada disco muestra su nombre (<code>sda</code>, <code>nvme0n1</code>, <code>zram0</code>…), tipo (<em>SSD</em>, <em>HDD</em>, <em>NVMe SSD</em>), modelo y enlace negociado. Pulsa para abrir modelo, número de serie, capacidad, interfaz y velocidad actual y máxima.",
|
||||
"imageAlt": "Tarjeta Storage Summary listando once dispositivos de bloque (SSDs SATA, HDDs SATA, SSDs NVMe y zram) con cadenas de modelo y velocidades de enlace negociadas; los dos discos NVMe muestran 3.0 x4 con la velocidad actual resaltada",
|
||||
"imageCaption": "Once dispositivos en este nodo. Los enlaces SATA se imprimen como <em>SATA <version>, <Gb/s> (current: ...)</em>; los discos NVMe se imprimen como <em><PCIe gen> x<width></em>.",
|
||||
"nvmeBody": "Para los discos NVMe la línea por tarjeta muestra tanto el enlace negociado como el máximo que soporta el dispositivo. Cuando ambos no coinciden (p. ej. un SSD Gen3 x4 corriendo a <strong>3.0 x1</strong> porque está sentado en un slot del chipset cableado a un solo lane), la velocidad actual se renderiza en ámbar para que el downgrade sea visible de un vistazo — útil al diagnosticar discos inesperadamente lentos o después de que una actualización de BIOS reorganice los lanes.",
|
||||
"imageCaption": "Once dispositivos en este nodo. Los enlaces SATA aparecen como <em>SATA <version>, <Gb/s> (current: ...)</em>; los NVMe como <em><PCIe gen> x<width></em>.",
|
||||
"nvmeBody": "La línea de cada NVMe compara el enlace negociado con el máximo admitido. Si difieren, como un SSD Gen3 x4 funcionando a <strong>3.0 x1</strong> en una ranura de un solo carril, el valor actual aparece en ámbar. Permite detectar enlaces limitados al investigar discos lentos o cambios de carriles tras actualizar BIOS.",
|
||||
"nvmeModalAlt": "Modal de detalle de disco NVMe para nvme0n1: tipo NVMe SSD, 953.9 GB de capacidad, velocidad actual de enlace 3.0 x1 resaltada en ámbar, velocidad máxima 3.0 x4, modelo WDC CL SN720, número de serie, interfaz PCIe/NVMe",
|
||||
"nvmeModalCaption": "Modal NVMe mostrando el downgrade de lanes — el disco soporta x4 pero el slot está cableado x1.",
|
||||
"outro": "Los datos SMART, los self-tests, el historial y el informe PDF de disco viven una pestaña a la derecha, en <storageLink>Panel: pestaña Almacenamiento</storageLink>. Los mismos datos alimentan el script en <smartLink>SMART Disk Health & Test</smartLink> — lanzar un test long desde el script escribe el JSON que el Monitor muestra en <em>Storage → History</em>."
|
||||
"nvmeModalCaption": "Detalles NVMe con enlace limitado: el disco admite x4, pero la ranura está conectada a x1.",
|
||||
"outro": "Los datos SMART, autopruebas, historial e informe PDF están en <storageLink>Panel: Almacenamiento</storageLink>. Los mismos datos alimentan <smartLink>Salud y pruebas SMART de discos</smartLink>. Una prueba larga desde el script escribe el JSON mostrado por Monitor en <em>Almacenamiento → Historial</em>."
|
||||
},
|
||||
"pci": {
|
||||
"heading": "PCI Devices",
|
||||
"intro": "Cada dispositivo direccionable por PCI, identificado por su <strong>BDF PCI</strong> (Bus:Device.Function — p. ej. <code>03:00.0</code>) y su clase de dispositivo (<em>Storage Controller</em>, <em>USB Controller</em>, <em>Graphics Card</em>, <em>Network Controller</em>, <em>Audio Controller</em> …). Cada tarjeta muestra el fabricante, el nombre del dispositivo y el <strong>kernel driver actualmente atado</strong> — que es el campo que realmente quieres al diagnosticar passthrough, grupos IOMMU o una tarjeta que el host no esté manejando correctamente.",
|
||||
"heading": "Dispositivos PCI",
|
||||
"intro": "Dispositivos PCI identificados por <strong>BDF PCI</strong> (Bus:Device.Function, p. ej. <code>03:00.0</code>) y clase (<em>Controlador de almacenamiento</em>, <em>Controlador USB</em>, <em>Tarjeta gráfica</em>, <em>Controlador de red</em>, <em>Controlador de audio</em>…). Cada tarjeta muestra fabricante, nombre y <strong>controlador del kernel asociado</strong>, útil para diagnosticar passthrough, grupos IOMMU o controladores incorrectos.",
|
||||
"imageAlt": "Sección PCI Devices listando quince dispositivos agrupados por clase: storage controllers en ahci/nvme, USB controllers, tarjetas gráficas (una en vfio-pci, otra en el driver nativo), network controllers en igb / tg3, un audio controller junto a una GPU pasada por passthrough",
|
||||
"imageCaption": "Quince dispositivos en este nodo. Fíjate en la GPU y su función de audio compañera, ambas atadas a <code>vfio-pci</code> — esa es una tarjeta preparada para passthrough a VM.",
|
||||
"bdfTitle": "Leer el BDF",
|
||||
"bdfBody": "<code>03:00.0</code> significa bus PCI <code>03</code>, dispositivo <code>00</code>, función <code>0</code>. Los dispositivos multifunción como las GPUs discretas suelen reclamar <code>.0</code> para la GPU y <code>.1</code> para la función de audio HDMI — ambos hay que pasarlos por passthrough juntos, por eso <link>Switch GPU Mode</link> también gestiona la limpieza de la función de audio huérfana al salir del modo VM."
|
||||
"bdfBody": "<code>03:00.0</code> indica bus PCI <code>03</code>, dispositivo <code>00</code> y función <code>0</code>. Las GPU dedicadas suelen usar <code>.0</code> para gráficos y <code>.1</code> para audio HDMI. Ambas funciones se pasan juntas a la VM; por eso <link>Cambiar modo GPU</link> limpia también el audio que quedaría sin asociar al salir del modo VM."
|
||||
},
|
||||
"usb": {
|
||||
"heading": "USB Devices",
|
||||
"intro": "Cada dispositivo USB que enumera el host, con cadenas de fabricante / producto, versión USB, la dirección <code>bus:device</code>, el par <code>vendor:product</code> y el kernel driver. El renderer también clasifica roles comunes — <em>Communications</em> (sticks Z-Wave / Zigbee), <em>UPS</em>, almacenamiento, HID — para que veas de un vistazo cuál de tus sticks es cuál sin cruzar IDs.",
|
||||
"imageAlt": "Tarjeta USB Devices listando tres dispositivos: un Z-Stick Z-Wave Aeotec, un coordinador Zigbee ConBee II y un UPS Ellipse ECO, cada uno con versión USB, dirección, vendor:product ID y driver atado",
|
||||
"heading": "Dispositivos USB",
|
||||
"intro": "Dispositivos USB con fabricante y producto, versión USB, dirección <code>bus:device</code>, ID <code>vendor:product</code> y controlador del kernel. Se clasifican por función: <em>Comunicaciones</em> (adaptadores Z-Wave / Zigbee), <em>SAI</em>, almacenamiento o HID. Así se identifican sin comparar sus ID.",
|
||||
"imageAlt": "Dispositivos USB: Aeotec Z-Wave Z-Stick, coordinador Zigbee ConBee II y SAI Ellipse ECO, con versión USB, dirección, ID vendor:product y controlador asociado",
|
||||
"imageCaption": "Tres dispositivos USB — dos radios de domótica en <code>usbfs</code> y un UPS en <code>usbfs</code> (NUT le habla a través de libusb)."
|
||||
},
|
||||
"power": {
|
||||
"heading": "Power Consumption",
|
||||
"heading": "Consumo de energía",
|
||||
"subHeading": "(condicional)",
|
||||
"intro": "Se renderiza solo cuando el host expone telemetría de energía. Se exponen dos fuentes independientes cuando están disponibles:",
|
||||
"intro": "Aparece si el host ofrece telemetría de potencia. Muestra dos fuentes independientes cuando están disponibles:",
|
||||
"items": [
|
||||
"<strong>Consumo total ACPI / IPMI</strong> — watios de todo el sistema desde un sensor a nivel de placa o el BMC. Típico en placas de servidor.",
|
||||
"<strong>Consumo de package CPU</strong> — leído de los contadores Intel RAPL (o equivalente AMD). Útil para separar el consumo de CPU del resto del sistema en placas consumer que no exponen una cifra total."
|
||||
"<strong>Consumo total ACPI / IPMI</strong>: potencia de todo el sistema desde un sensor de la placa o el BMC. Habitual en placas de servidor.",
|
||||
"<strong>Consumo del encapsulado CPU</strong>: contadores Intel RAPL o equivalente AMD. Distingue el consumo de CPU del resto en placas de consumo sin sensor total."
|
||||
],
|
||||
"supplyImageAlt": "Sección Power Consumption mostrando 198 W de consumo total vía interfaz ACPI, más una tarjeta Power Supplies con dos PSUs ambas reportando OK (salida de 185 W y 5 W)",
|
||||
"supplyImageAlt": "Consumo: 198 W totales por ACPI y dos fuentes de alimentación con estado OK y salida de 185 W y 5 W",
|
||||
"supplyImageCaption": "Placa de servidor con un único sensor de energía ACPI y PSUs duales reportadas a través de IPMI — la segunda PSU es la redundante, en idle a 5 W.",
|
||||
"cpuImageAlt": "Sección Power Consumption en una placa consumer mostrando solo CPU Power 8.7 W vía Intel RAPL",
|
||||
"cpuImageCaption": "Placa consumer sin sensor de todo el sistema — la sección cae a RAPL solo-CPU."
|
||||
"cpuImageAlt": "Consumo en una placa de uso doméstico: solo 8.7 W de CPU medidos por Intel RAPL",
|
||||
"cpuImageCaption": "Placa de uso doméstico sin sensor de consumo total: se muestra solo CPU mediante RAPL."
|
||||
},
|
||||
"psu": {
|
||||
"heading": "Power Supplies",
|
||||
"heading": "Fuentes de alimentación",
|
||||
"subHeading": "(condicional)",
|
||||
"body": "Máquinas con placa de servidor / PSU dual vía IPMI: presencia (PSU 1 / PSU 2 / …), voltaje de entrada, watios de salida, flag OK / failed. Lo primero que compruebas tras un parpadeo de luz en un nodo con PSUs redundantes."
|
||||
"body": "En máquinas con placa de servidor o fuentes dobles, IPMI muestra presencia (PSU 1 / PSU 2 / …), tensión de entrada, potencia de salida y estado correcto/fallo. Compruébalo tras una interrupción eléctrica en nodos con fuentes redundantes."
|
||||
},
|
||||
"fans": {
|
||||
"heading": "System Fans",
|
||||
"heading": "Ventiladores del sistema",
|
||||
"subHeading": "(condicional)",
|
||||
"body": "RPM por ventilador con un pequeño sparkline (cuando se soporta). En placas sin reporte por ventilador la sección cae a una única lectura del ventilador de chasis."
|
||||
"body": "RPM de cada ventilador con minigráfico de tendencia, si se admite. Sin datos individuales, muestra una sola lectura del ventilador del chasis."
|
||||
},
|
||||
"ups": {
|
||||
"heading": "UPS Status",
|
||||
"heading": "Estado del SAI",
|
||||
"subHeading": "(condicional)",
|
||||
"body": "Se renderiza cuando hay un servidor NUT (Network UPS Tools) configurado y accesible. Muestra: estado (online / on battery / charging / low battery), porcentaje de carga de batería, estimación de runtime, porcentaje de carga, voltaje de entrada, modelo y firmware. Los mismos datos alimentan la categoría <em>Security & Certificates</em> del Monitor de salud — un UPS que pasa a batería sale inmediatamente."
|
||||
"body": "Aparece si hay un servidor NUT (Network UPS Tools) configurado y accesible. Muestra estado (en línea / batería / cargando / batería baja), carga de batería, autonomía estimada, porcentaje de carga soportada, tensión de entrada, modelo y firmware. Alimenta también <em>Seguridad y certificados</em> del monitor de salud: el paso a batería se señala inmediatamente."
|
||||
},
|
||||
"dataCollected": {
|
||||
"heading": "Cómo se recopilan los datos",
|
||||
@@ -184,12 +184,12 @@
|
||||
{
|
||||
"section": "Valores de sensores en vivo",
|
||||
"endpoint": "/api/hardware/live",
|
||||
"source": "<code>sensors</code> (lm-sensors) junto con <code>/sys/class/hwmon</code> y <code>/sys/block</code> para identificar los dispositivos de almacenamiento. Las temperaturas permanecen en vivo; solo la topología hwmon-dispositivo se guarda en caché durante 60 segundos."
|
||||
"source": "<code>sensors</code> (lm-sensors), <code>/sys/class/hwmon</code> y <code>/sys/block</code> identifican los dispositivos de almacenamiento. Las temperaturas son en vivo; solo se guarda en caché 60 segundos la asociación hwmon-dispositivo."
|
||||
},
|
||||
{
|
||||
"section": "Historial de temperatura de CPU",
|
||||
"endpoint": "/api/temperature/history",
|
||||
"source": "Serie temporal muestreada por el Monitor de salud cada 5 min y persistida a SQLite."
|
||||
"source": "Serie temporal registrada cada 60 segundos por el recolector de temperatura y almacenada en SQLite."
|
||||
},
|
||||
{
|
||||
"section": "Métricas en vivo de GPU",
|
||||
@@ -197,31 +197,31 @@
|
||||
"source": "NVIDIA: <code>nvidia-smi --query-gpu=...</code>. Intel: <code>intel_gpu_top</code>. AMD: sysfs <code>/sys/class/drm/cardN</code>."
|
||||
}
|
||||
],
|
||||
"codeComment1": "# Cross-check del inventario contra la vista del SO",
|
||||
"codeComment1": "# Contrastar el inventario con la información del sistema operativo",
|
||||
"codeComment2": "# Confirmar la tarjeta GPU que ve el panel"
|
||||
},
|
||||
"whereNext": {
|
||||
"heading": "Por dónde seguir",
|
||||
"items": [
|
||||
{
|
||||
"label": "Install NVIDIA Drivers (Host)",
|
||||
"label": "Instalar controladores NVIDIA (Host)",
|
||||
"href": "/docs/hardware/nvidia-host",
|
||||
"tail": " — lo que ejecuta el botón de instalación de la modal de GPU."
|
||||
"tail": " — script que ejecuta el botón de instalación de la ventana de GPU."
|
||||
},
|
||||
{
|
||||
"label": "Switch GPU Mode (VM ↔ LXC)",
|
||||
"label": "Cambiar modo GPU (VM ↔ LXC)",
|
||||
"href": "/docs/hardware/switch-gpu-mode",
|
||||
"tail": " — lo que el conmutador de modo inline en cada tarjeta de GPU le hace al host."
|
||||
},
|
||||
{
|
||||
"label": "Install Coral TPU on the Host",
|
||||
"label": "Instalar Coral TPU en el host",
|
||||
"href": "/docs/hardware/install-coral-tpu-host",
|
||||
"tail": " — la instalación del módulo de kernel / runtime de Coral."
|
||||
"tail": " — instalación del módulo del kernel y runtime de Coral."
|
||||
},
|
||||
{
|
||||
"label": "SMART Disk Health & Test",
|
||||
"label": "Prueba de salud de disco SMART",
|
||||
"href": "/docs/disk-manager/smart-disk-test",
|
||||
"tail": " — el script detrás de los datos SMART que muestra la vista en detalle de disco de la pestaña Almacenamiento."
|
||||
"tail": " — script que produce los datos SMART de los detalles de disco en Almacenamiento."
|
||||
},
|
||||
{
|
||||
"label": "Panel: pestaña Almacenamiento",
|
||||
@@ -231,12 +231,12 @@
|
||||
{
|
||||
"label": "Monitor de salud",
|
||||
"href": "/docs/monitor/health-monitor",
|
||||
"tail": " — la categoría CPU y Temperatura que consume los mismos sensores."
|
||||
"tail": " — categoría CPU y Temperatura, que usa los mismos sensores."
|
||||
},
|
||||
{
|
||||
"label": "Referencia de la API",
|
||||
"href": "/docs/monitor/api",
|
||||
"tail": " — los endpoints de hardware y GPU."
|
||||
"tail": " — endpoints de hardware y GPU."
|
||||
},
|
||||
{
|
||||
"label": "Índice del panel",
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "ProxMenux Monitor — Panel | ProxMenux Documentation",
|
||||
"description": "El panel es la interfaz principal de ProxMenux Monitor: diez pestañas de contenido, incluido el lanzador Apps, además de la cabecera global y un orden de navegación configurable."
|
||||
"title": "ProxMenux Monitor — Panel | Documentación de ProxMenux",
|
||||
"description": "El panel es la interfaz principal de ProxMenux Monitor: diez pestañas, incluido el lanzador Apps, una cabecera global y un orden de navegación configurable."
|
||||
},
|
||||
"header": {
|
||||
"title": "Panel",
|
||||
"description": "El panel es la vista diaria de ProxMenux Monitor: diez pestañas de contenido, incluido el lanzador Apps, además de una cabecera global y un orden de navegación configurable.",
|
||||
"description": "La vista diaria de ProxMenux Monitor: diez pestañas, incluido el lanzador Apps, una cabecera global y un orden de navegación configurable.",
|
||||
"section": "ProxMenux Monitor"
|
||||
},
|
||||
"oneHeader": {
|
||||
"title": "Una cabecera, diez pestañas",
|
||||
"body": "La cabecera (logo, nombre del nodo, información de estado, uptime, refresco, conmutador de tema) permanece visible en todo momento. La pestaña activa que hay debajo cambia el área de contenido entera. El color de la información de estado refleja la peor categoría del <link>Monitor de salud</link> — es el mismo dato visto desde el panel."
|
||||
"body": "La cabecera (logo, nombre del nodo, indicador de estado, tiempo activo, actualización y tema) permanece visible. La pestaña activa cambia toda el área de contenido. El color del indicador refleja la peor categoría del <link>Monitor de estado</link>: el mismo dato mostrado en el panel."
|
||||
},
|
||||
"tabs": {
|
||||
"heading": "Las diez pestañas",
|
||||
@@ -24,9 +24,9 @@
|
||||
"owns": "Widgets de CPU, memoria y temperatura; contador de VMs y LXCs activos; gráficas históricas y resúmenes de almacenamiento y red. Es la pestaña inicial mientras no se personalice el orden de navegación."
|
||||
},
|
||||
{
|
||||
"name": "Apps",
|
||||
"name": "Aplicaciones",
|
||||
"linksTo": "/docs/monitor/dashboard/apps",
|
||||
"owns": "Lanzador unificado para enlaces web registrados en LXCs y enlaces personalizados, con categorías, búsqueda, acceso al invitado y señales de actualización por aplicación."
|
||||
"owns": "Lanzador unificado de enlaces web de LXC registrados y enlaces personalizados, con categorías, búsqueda, accesos al invitado y señales de actualización por aplicación."
|
||||
},
|
||||
{
|
||||
"name": "Almacenamiento",
|
||||
@@ -34,11 +34,11 @@
|
||||
},
|
||||
{
|
||||
"name": "Red",
|
||||
"owns": "Cada interfaz (física / bond / bridge / OVS), IP/MAC, gráficas RX/TX, RRD histórica por interfaz."
|
||||
"owns": "Interfaces físicas, bond, bridge y OVS, direcciones IP/MAC, gráficas RX/TX e histórico RRD por interfaz."
|
||||
},
|
||||
{
|
||||
"name": "VMs y LXCs",
|
||||
"owns": "Inventario de guests, vista en detalle de config / métricas / logs, acciones start / stop / reboot / shutdown."
|
||||
"owns": "Inventario de invitados, detalles de configuración, métricas y registros, acciones de iniciar, detener, reiniciar y apagar."
|
||||
},
|
||||
{
|
||||
"name": "Hardware",
|
||||
@@ -50,7 +50,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Terminal",
|
||||
"owns": "Shell en el navegador al host o a cualquier VM/CT, sobre <code>xterm.js</code> y WebSockets."
|
||||
"owns": "Shell del host o de cualquier VM/CT en el navegador, con <code>xterm.js</code> sobre WebSockets."
|
||||
},
|
||||
{
|
||||
"name": "Seguridad",
|
||||
@@ -58,19 +58,19 @@
|
||||
},
|
||||
{
|
||||
"name": "Ajustes",
|
||||
"owns": "Idioma del Monitor, orden de navegación, canales de notificación, proveedor de IA, umbrales de salud, exclusiones e inventario de optimizaciones."
|
||||
"owns": "Idioma de Monitor, orden de navegación, canales de notificación, proveedor IA, umbrales de estado, exclusiones e inventario de optimizaciones posteriores a la instalación."
|
||||
}
|
||||
]
|
||||
},
|
||||
"headerAnatomy": {
|
||||
"heading": "Anatomía de la cabecera",
|
||||
"items": [
|
||||
"<strong>Logo de ProxMenux.</strong> El logo cambia a la variante \"actualización disponible\" cuando se detecta una nueva release del Monitor.",
|
||||
"<strong>Identidad del nodo</strong> — el nombre del nodo Proxmox resuelto desde <code>pvesh get /nodes</code>, con fallback a <code>hostname</code>.",
|
||||
"<strong>Información del estado de salud</strong> — Healthy (verde), Warning (amarillo), Critical (rojo). Pulsa encima para abrir la modal del Monitor de salud. Aparece una insignia azul extra de <em>info</em> cuando hay items descartados que siguen dentro de su ventana de supresión.",
|
||||
"<strong>Uptime</strong> — tiempo desde el último arranque del host, formateado de forma legible.",
|
||||
"<strong>Botón de refresco</strong> — relanza todas las llamadas API en vivo sin recargar la página entera.",
|
||||
"<strong>Conmutador de tema</strong> — claro / oscuro / sistema. Persiste en <code>localStorage</code>."
|
||||
"<strong>Logo y nombre del producto</strong> a la izquierda. El logo adopta la variante «actualización disponible» cuando se detecta una versión más reciente de Monitor.",
|
||||
"<strong>Identidad del nodo</strong>: nombre obtenido con <code>pvesh get /nodes</code>, usando <code>hostname</code> como alternativa.",
|
||||
"<strong>Indicador de estado</strong>: Correcto (verde), Advertencia (amarillo), Crítico (rojo). Abre el Monitor de estado al pulsarlo. Una insignia azul <em>info</em> aparece si hay elementos descartados cuyo periodo de supresión sigue vigente.",
|
||||
"<strong>Tiempo activo</strong>: tiempo de funcionamiento del host en formato legible.",
|
||||
"<strong>Botón de actualización</strong>: repite las llamadas API de datos en directo sin recargar toda la página.",
|
||||
"<strong>Selector de tema</strong>: claro, oscuro o sistema. Se guarda en <code>localStorage</code>."
|
||||
]
|
||||
},
|
||||
"whereNext": {
|
||||
@@ -79,7 +79,7 @@
|
||||
{
|
||||
"label": "Pestaña Apps",
|
||||
"href": "/docs/monitor/dashboard/apps",
|
||||
"tail": " — el lanzador unificado de enlaces web y su relación con las aplicaciones registradas en LXCs."
|
||||
"tail": " — lanzador unificado de enlaces web y relación con las aplicaciones LXC registradas."
|
||||
},
|
||||
{
|
||||
"label": "Pestaña Resumen del sistema",
|
||||
@@ -89,7 +89,7 @@
|
||||
{
|
||||
"label": "Monitor de salud",
|
||||
"href": "/docs/monitor/health-monitor",
|
||||
"tail": " — la modal detrás de la información de estado, vista en profundidad de las diez categorías."
|
||||
"tail": " — ventana del indicador de estado, con detalle de diez categorías."
|
||||
},
|
||||
{
|
||||
"label": "Arquitectura",
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "ProxMenux Monitor — Panel: pestaña Red | ProxMenux Documentation",
|
||||
"description": "La pestaña Red inventaría cada interfaz del host: NICs físicas, bridges, bonds, VLANs y las interfaces virtuales de VM/LXC. La vista en detalle por interfaz muestra IP / MAC / estado / miembros del bond / tráfico desde el arranque y una gráfica RRD histórica."
|
||||
"title": "ProxMenux Monitor — Panel: pestaña Red | Documentación de ProxMenux",
|
||||
"description": "La pestaña Red enumera todas las interfaces del host: físicas, puentes, enlaces agrupados, VLAN e interfaces virtuales VM/LXC. El detalle muestra IP, MAC, estado, miembros del enlace agrupado, tráfico desde el arranque e historial RRD."
|
||||
},
|
||||
"header": {
|
||||
"title": "Panel: pestaña Red",
|
||||
"description": "Cada interfaz que reporta el kernel — NICs físicas, bridges, bonds, VLANs y puertos virtuales de VM/LXC — agrupadas en tres tarjetas. Cada fila es pulsable y abre una vista en detalle con direccionamiento, contadores de tráfico y datos RRD históricos.",
|
||||
"description": "Todas las interfaces que detecta el kernel —físicas, puentes, enlaces agrupados, VLAN y puertos virtuales VM/LXC— se agrupan en tres tarjetas. Pulsa una fila para ver direcciones, contadores de tráfico e historial RRD.",
|
||||
"section": "ProxMenux Monitor · Panel"
|
||||
},
|
||||
"intro": {
|
||||
"title": "En vivo + histórico, ambos incluidos",
|
||||
"body": "El estado en vivo viene de <code>psutil.net_if_stats()</code> y <code>ip</code>; el ancho de banda histórico del almacén RRD de Proxmox vía <code>/api/network/<interface>/metrics</code>. La página refresca cada ~5 segundos los contadores en vivo y obtiene datos RRD frescos bajo demanda para la gráfica."
|
||||
"title": "Datos actuales e históricos",
|
||||
"body": "El estado actual procede de <code>psutil.net_if_stats()</code> e <code>ip</code>; el historial de ancho de banda, del almacén RRD de Proxmox mediante <code>/api/network/<interface>/metrics</code>. Los contadores se actualizan cada 5 segundos aproximadamente y el gráfico obtiene datos RRD cuando se solicitan."
|
||||
},
|
||||
"topRow": {
|
||||
"heading": "Fila superior: cuatro tarjetas de estadísticas",
|
||||
@@ -18,122 +18,122 @@
|
||||
"headerWhat": "Qué muestra",
|
||||
"rows": [
|
||||
{
|
||||
"card": "Network Traffic",
|
||||
"card": "Tráfico de red",
|
||||
"what": "Tasa agregada RX / TX a lo largo de todas las interfaces, formateada en la unidad correcta (bps / Kbps / Mbps / Gbps)."
|
||||
},
|
||||
{
|
||||
"card": "Active Interfaces",
|
||||
"what": "Dos contadores: <em>Physical X / Y</em> y <em>Bridges X / Y</em> (activas sobre total). El primer contador que miras cuando algo deja de funcionar."
|
||||
"card": "Interfaces activas",
|
||||
"what": "Dos contadores: <em>Physical X / Y</em> y <em>Bridges X / Y</em>, con interfaces activas respecto al total. Es un primer punto de comprobación cuando algo deja de funcionar."
|
||||
},
|
||||
{
|
||||
"card": "Network Status",
|
||||
"what": "Veredicto rápido — Healthy / Warning / Critical en función del estado del enlace, alcanzabilidad del gateway e integridad del bridge. Refleja la categoría <em>Network Interfaces</em> del Monitor de salud."
|
||||
"card": "Estado de la red",
|
||||
"what": "Estado rápido: Correcto / Aviso / Crítico según el enlace, la accesibilidad de la puerta de enlace y la integridad del puente. Refleja la categoría <em>Interfaces de red</em> de Health Monitor."
|
||||
},
|
||||
{
|
||||
"card": "Network Latency",
|
||||
"what": "Round-trip time al gateway con un sparkline. Pulsar la tarjeta abre la <strong>modal Network Latency</strong> documentada más abajo — vista histórica + test de ping bajo demanda contra gateway / Cloudflare / Google con un informe PDF descargable."
|
||||
"card": "Latencia de red",
|
||||
"what": "Tiempo de ida y vuelta a la puerta de enlace con un minigráfico. Al pulsar, abre el <strong>diálogo Latencia de red</strong> descrito más abajo: historial y prueba de ping a petición contra la puerta de enlace, Cloudflare o Google, con informe PDF descargable."
|
||||
}
|
||||
]
|
||||
},
|
||||
"flow": {
|
||||
"heading": "Diagrama Network Flow",
|
||||
"intro": "Entre la fila superior y las tres tarjetas de grupos, la pestaña renderiza una vista de topología en vivo llamada <strong>Network Flow</strong>. Dibuja cada camino que un paquete puede tomar a través del host — NICs físicas en un extremo, bridges en el medio, VMs y contenedores en el otro — con pulsos animados que muestran el tráfico rx/tx en tiempo real sobre cada enlace.",
|
||||
"intro": "Entre la fila superior y las tres tarjetas aparece la topología en directo <strong>Network Flow</strong>. Muestra los recorridos de los paquetes: interfaces físicas en un extremo, puentes en medio y máquinas virtuales y contenedores en el otro. Los pulsos animados representan el tráfico rx/tx actual de cada enlace.",
|
||||
"imageAlt": "Diagrama Network Flow — NICs a la izquierda, host y bridges en el medio, VMs y LXCs a la derecha, con pulsos animados en cada conexión",
|
||||
"imageCaption": "Network Flow — nodos con código de color más cometas animados cuya dirección y grosor reflejan el tráfico en vivo.",
|
||||
"elementsTitle": "Qué muestra el diagrama",
|
||||
"elementsIntro": "Cada nodo es una entidad del mismo inventario que usan las tarjetas de abajo, pero organizadas como topología para que las relaciones se vean de un vistazo:",
|
||||
"elementsIntro": "Cada nodo representa una entidad del mismo inventario que las tarjetas inferiores. La disposición como topología permite ver sus relaciones de un vistazo:",
|
||||
"elements": [
|
||||
"<strong>NICs</strong> (ámbar) — cada interfaz física con enlace activo. Las interfaces reportadas como down se dibujan atenuadas.",
|
||||
"<strong>Host</strong> (ámbar) — el propio host Proxmox, situado entre las NICs y los bridges. Renderizado como anclaje fijo; no clicable.",
|
||||
"<strong>Bridges</strong> (cian) — bridges Linux y OVS. Sólo se dibujan los bridges que llevan al menos un guest activo; los bridges sin uso se ocultan para que el diagrama muestre lo que realmente mueve tráfico.",
|
||||
"<strong>LXCs</strong> (cian) — contenedores en ejecución conectados a un bridge.",
|
||||
"<strong>VMs</strong> (púrpura) — máquinas virtuales en ejecución conectadas a un bridge.",
|
||||
"Los guests offline (VMs / contenedores parados) se ocultan."
|
||||
"<strong>NIC</strong> (ámbar): interfaces físicas con enlace activo; las inactivas aparecen atenuadas.",
|
||||
"<strong>Host</strong> (ámbar): el host Proxmox entre las interfaces físicas y los puentes. Es un punto fijo y no se puede pulsar.",
|
||||
"<strong>Puentes</strong> (cian): puentes Linux y OVS con al menos una máquina invitada activa. Los que no se usan se ocultan para centrar el diagrama en el tráfico actual.",
|
||||
"<strong>LXC</strong> (cian): contenedores en ejecución conectados a un puente.",
|
||||
"<strong>VM</strong> (morado): máquinas virtuales en ejecución conectadas a un puente.",
|
||||
"Las máquinas virtuales y los contenedores detenidos se ocultan."
|
||||
],
|
||||
"pulsesTitle": "Qué codifica la animación",
|
||||
"pulsesBody": "Los cometas animados que viajan por cada arista representan tráfico en vivo:",
|
||||
"pulses": [
|
||||
"<strong>Dirección</strong> — un pulso que fluye hacia la NIC es <em>tx</em> del guest; hacia el guest es <em>rx</em>.",
|
||||
"<strong>Grosor de trazo</strong> escala con el rate combinado rx+tx del guest. Un guest inactivo dibuja una línea animada tenue; uno con carga la dibuja gruesa.",
|
||||
"<strong>Halo de la cabeza del cometa</strong> — templado hacia ~1 MB/s, caliente a ≥30 MB/s. Útil para detectar de un vistazo qué guest está dominando una NIC.",
|
||||
"<strong>Click</strong> — cada nodo excepto el host es clicable y abre el mismo modal de detalle por interfaz documentado más abajo. Pulsar el host es intencionadamente un no-op — no hay modal a nivel de host en esta vista."
|
||||
"<strong>Dirección</strong>: hacia la NIC significa <em>tx</em> de la máquina invitada; hacia la máquina, <em>rx</em>.",
|
||||
"El <strong>grosor del trazo</strong> aumenta con la tasa rx+tx de la máquina invitada. Sin tráfico se mantiene una línea animada tenue; con mucho tráfico, la línea es gruesa.",
|
||||
"<strong>Brillo de la cabeza del cometa</strong>: tono cálido hacia 1 MB/s e intenso a partir de 30 MB/s. Permite identificar qué máquina invitada concentra el tráfico de una NIC.",
|
||||
"<strong>Clic</strong>: todos los nodos salvo el host abren el diálogo de detalle por interfaz descrito más abajo. Pulsar el host no tiene efecto; esta vista no incluye un diálogo para él."
|
||||
],
|
||||
"useTitle": "Cuándo es útil",
|
||||
"useBody": "Las tarjetas de grupos de abajo te dicen <em>qué</em> existe; el diagrama te dice <em>cómo está conectado</em> y por dónde fluye el tráfico ahora mismo. Patrones fáciles de ver de un vistazo: un bridge sin ningún guest activo conectado, dos guests pesados usando la misma NIC (candidato a cuello de botella), o una única VM saturando un enlace mientras el resto está tranquilo."
|
||||
"useBody": "Las tarjetas muestran <em>qué</em> existe; el diagrama, <em>cómo está conectado</em> y por dónde fluye el tráfico. Permite detectar máquinas que comparten un puente, dos máquinas con mucho tráfico en una misma NIC —posible cuello de botella— o una VM que satura un enlace mientras las demás apenas transmiten."
|
||||
},
|
||||
"groups": {
|
||||
"heading": "Tres grupos de interfaces",
|
||||
"intro": "Bajo la fila superior, tres tarjetas dividen el inventario por rol. Cada tarjeta tiene su propia insignia de recuento de activas en la cabecera. El <strong>tipo</strong> de interfaz se identifica de un vistazo mediante una insignia coloreada en cada fila:",
|
||||
"intro": "Tres tarjetas agrupan las interfaces por función. La cabecera de cada una indica cuántas están activas. Una etiqueta de color identifica el <strong>tipo</strong> de cada interfaz:",
|
||||
"badges": [
|
||||
"Azul <strong>Physical</strong> — NIC real.",
|
||||
"Verde <strong>Bridge</strong> — bridge Linux o bridge OVS (<code>vmbr*</code>).",
|
||||
"Morado <strong>Bond</strong> — agregador bond / LACP / active-backup.",
|
||||
"Cian <strong>VLAN</strong> — sub-interfaz VLAN (<code>vmbr0.10</code>, <code>eno1.42</code>, …)."
|
||||
"Cian <strong>VLAN</strong>: subinterfaz VLAN (<code>vmbr0.10</code>, <code>eno1.42</code>, …)."
|
||||
],
|
||||
"clickable": "<strong>Cada fila es pulsable</strong> — física, virtual, bridge o bond — y abre la vista en detalle por interfaz descrita más abajo (info básica, IPs, contadores de tráfico, gráfica RX/TX histórica del almacén RRD de Proxmox).",
|
||||
"physicalTitle": "Physical Interfaces",
|
||||
"physicalBody": "Cada NIC que el kernel ve como un dispositivo real — <code>eno1</code>, <code>enp4s0</code>, <code>eth0</code>, <code>wlp3s0</code>, etc. Una fila por dispositivo con la insignia azul <strong>Physical</strong> y el estado del enlace. Los <em>miembros del bond</em> (NICs esclavizadas a un bond) también se muestran aquí, con una pista que apunta al bond padre.",
|
||||
"bridgeTitle": "Bridge Interfaces",
|
||||
"bridgeBody": "Bridges Linux (<code>vmbr0</code>, <code>vmbr1</code>, …) y los bridges OVS que gestiona Proxmox. Cada fila muestra la insignia verde <strong>Bridge</strong>, la interfaz física subyacente (cuando es un bridge de un solo puerto) y el estado del bridge. Los bonds visibles en esta capa reciben la insignia morada <strong>Bond</strong>; las sub-interfaces VLAN reciben la insignia cian <strong>VLAN</strong>.",
|
||||
"vmTitle": "VM / LXC Interfaces",
|
||||
"vmBody": "Las interfaces <code>tap*</code> y <code>veth*</code> creadas cuando arrancan los guests — una por NIC virtual. La cabecera de la tarjeta muestra <em>X / Y Active</em>; las filas enlazan con el VM/CT al que pertenecen, así que puedes saltar directamente al guest en la pestaña VMs y LXCs. Las entradas inactivas quedan por un instante después de que un guest se pare; envejecen y se eliminan en el siguiente ciclo de refresco."
|
||||
"clickable": "<strong>Todas las filas se pueden pulsar</strong>: físicas, virtuales, puentes y bonds. Abren el detalle descrito más abajo: información básica, IP, contadores y gráfico histórico RX/TX del almacén RRD Proxmox.",
|
||||
"physicalTitle": "Interfaces físicas",
|
||||
"physicalBody": "Interfaces físicas reconocidas por el kernel: <code>eno1</code>, <code>enp4s0</code>, <code>eth0</code>, <code>wlp3s0</code>, etc. Cada dispositivo tiene una fila con etiqueta azul <strong>Physical</strong> y estado del enlace. Los <em>miembros de un bond</em> también aparecen, con una referencia al bond al que pertenecen.",
|
||||
"bridgeTitle": "Interfaces de puente",
|
||||
"bridgeBody": "Puentes Linux (<code>vmbr0</code>, <code>vmbr1</code>, …) y OVS gestionados por Proxmox. Cada fila muestra la etiqueta verde <strong>Bridge</strong>, la interfaz física subyacente si tiene un solo puerto y su estado. Los enlaces agrupados llevan la etiqueta morada <strong>Bond</strong>; las subinterfaces VLAN, la cian <strong>VLAN</strong>.",
|
||||
"vmTitle": "Interfaces de VM / LXC",
|
||||
"vmBody": "Interfaces <code>tap*</code> y <code>veth*</code> creadas al arrancar las máquinas invitadas, una por NIC virtual. La cabecera muestra <em>X / Y Active</em> y las filas enlazan a su VM/CT en la pestaña VMs y LXCs. Tras detener una máquina, las entradas inactivas desaparecen en el siguiente ciclo de actualización."
|
||||
},
|
||||
"drillIn": {
|
||||
"heading": "Vista en detalle por interfaz",
|
||||
"intro": "Pulsar cualquier fila abre una modal con cinco bloques:",
|
||||
"heading": "Detalle por interfaz",
|
||||
"intro": "Al pulsar una fila, se abre un diálogo con cinco bloques:",
|
||||
"headerBlock": "Bloque",
|
||||
"headerContents": "Contenido",
|
||||
"rows": [
|
||||
{
|
||||
"block": "Basic Information",
|
||||
"contents": "Nombre de la interfaz, tipo (física / bridge / bond / VLAN / vm), dirección MAC, estado (up / down), MTU y la interfaz física subyacente para los tipos no físicos."
|
||||
"block": "Información básica",
|
||||
"contents": "Nombre, tipo (física / puente / bond / VLAN / vm), MAC, estado (activo / inactivo), MTU e interfaz física subyacente para los tipos virtuales."
|
||||
},
|
||||
{
|
||||
"block": "Bond Members",
|
||||
"contents": "Solo para bonds. Lista cada NIC esclavizada con el flag active / failed, el modo del bond (active-backup / 802.3ad / balance-alb / …) y la interfaz primaria cuando está configurada."
|
||||
"block": "Miembros del bond",
|
||||
"contents": "Solo para bonds: cada NIC integrante con estado activo o fallido, modo del bond (active-backup / 802.3ad / balance-alb / …) e interfaz principal si está configurada."
|
||||
},
|
||||
{
|
||||
"block": "IP Addresses",
|
||||
"block": "Direcciones IP",
|
||||
"contents": "Cada dirección IPv4 / IPv6 con su longitud de prefijo. Las direcciones link-local autoconfiguradas se listan pero salen atenuadas."
|
||||
},
|
||||
{
|
||||
"block": "Gráfica histórica",
|
||||
"contents": "Ancho de banda RX / TX sobre el timeframe seleccionado (1 hora / 24 horas / 7 días / 30 días / 1 año), traído de <code>/api/network/<interface>/metrics</code> (RRD de Proxmox)."
|
||||
"contents": "Ancho de banda RX/TX durante el periodo elegido (1 hora / 24 horas / 7 días / 30 días / 1 año), obtenido de <code>/api/network/<interface>/metrics</code> (RRD Proxmox)."
|
||||
},
|
||||
{
|
||||
"block": "Tráfico desde el último arranque",
|
||||
"contents": "Bytes y paquetes totales RX / TX desde el último arranque del host, más contadores de errores y descartes."
|
||||
"contents": "Total de bytes y paquetes RX/TX desde el último arranque del host, con contadores de errores y descartes."
|
||||
}
|
||||
],
|
||||
"inactiveTitle": "Las interfaces inactivas siguen abriendo la vista en detalle",
|
||||
"inactiveBody": "Para una interfaz <em>down</em>, la modal renderiza un pequeño banner \"Interface Inactive\" y omite los contadores en vivo. La configuración (direcciones, miembros del bond) y los datos históricos siguen mostrándose — útil al diagnosticar por qué falló algo y cuándo."
|
||||
"inactiveTitle": "También puedes ver el detalle de las interfaces inactivas",
|
||||
"inactiveBody": "Si la interfaz está <em>inactiva</em>, el diálogo muestra el aviso «Interfaz inactiva» y omite los contadores actuales. Conserva la configuración —direcciones y miembros del bond— y el historial para diagnosticar qué falló y cuándo."
|
||||
},
|
||||
"latency": {
|
||||
"heading": "Modal Network Latency",
|
||||
"intro": "Pulsar la tarjeta <em>Network Latency</em> de la fila superior abre una modal dedicada. Tiene dos modos (histórico y test bajo demanda), tres opciones de destino y un informe PDF descargable.",
|
||||
"heading": "Diálogo Latencia de red",
|
||||
"intro": "Pulsa <em>Latencia de red</em> en la fila superior para abrir su diálogo. Incluye historial, pruebas a petición, tres destinos y un informe PDF descargable.",
|
||||
"targetsTitle": "Destinos",
|
||||
"targetsIntro": "Un desplegable de destino en lo alto de la modal selecciona contra qué se hace ping:",
|
||||
"targetsIntro": "El desplegable de la parte superior selecciona el destino del ping:",
|
||||
"targets": [
|
||||
"<strong>Gateway</strong> — tu router de la LAN. Solo testea el tramo de red local; útil cuando sospechas de un problema de switch / cableado y quieres descartar la WAN.",
|
||||
"<strong>Cloudflare (1.1.1.1)</strong> — resolutor DNS público, red anycast. Testea el tramo WAN.",
|
||||
"<strong>Google (8.8.8.8)</strong> — destino público alternativo, útil como verificación sanity o cuando Cloudflare está degradado regionalmente."
|
||||
"<strong>Puerta de enlace</strong>: tu router LAN. Comprueba solo el tramo local para investigar problemas del switch o del cableado sin incluir la WAN.",
|
||||
"<strong>Cloudflare (1.1.1.1)</strong>: resolutor DNS público en una red anycast. Comprueba el tramo WAN.",
|
||||
"<strong>Google (8.8.8.8)</strong>: destino público alternativo para contrastar resultados o comprobar incidencias regionales de Cloudflare."
|
||||
],
|
||||
"mode1Title": "Modo 1 — Vista histórica",
|
||||
"mode1Alt": "Modal Network Latency en modo histórico — destino Gateway con un timeframe de 1 hora y las muestras pasadas ploteadas",
|
||||
"mode1Caption": "Vista histórica — destino Gateway sobre la última hora, alimentada desde la base de datos de historial de latencia que el hilo recolector de temperatura/latencia escribe cada 60 segundos.",
|
||||
"mode1Body1": "El modo por defecto al abrir la modal. Un segundo desplegable elige el timeframe (<em>1 Hour / 24 Hours / 7 Days / 30 Days / 1 Year</em>); la resolución de los datos baja con la ventana para que la gráfica se mantenga legible. Las estadísticas titulares — Current / Min / Avg / Max — se renderizan encima de la gráfica, con una pastilla de estado (Excellent / Good / Fair / Poor) que refleja el valor actual frente a los umbrales de abajo.",
|
||||
"mode1Body2": "Fuente: las mismas muestras de latencia que usa el Monitor de salud para detectar ralentizaciones persistentes de red — muestreadas cada 60 segundos contra el gateway por el hilo en background <code>_temperature_collector_loop</code>, escritas a un historial SQLite local.",
|
||||
"mode1Alt": "Diálogo de latencia en modo histórico, con destino Puerta de enlace, periodo de una hora y muestras anteriores representadas",
|
||||
"mode1Caption": "Historial de la puerta de enlace durante la última hora. El recolector de temperatura y latencia guarda las muestras en la base de datos cada 60 segundos.",
|
||||
"mode1Body1": "Es el modo inicial del diálogo. Un segundo desplegable elige el periodo (<em>1 hora / 6 horas / 24 horas / 3 días / 7 días</em>). Encima aparecen Actual / Mínimo / Media / Máximo y un indicador Excelente / Bueno / Regular / Malo según los umbrales siguientes.",
|
||||
"mode1Body2": "Fuente: las muestras que usa Health Monitor para detectar ralentizaciones persistentes. El hilo <code>_temperature_collector_loop</code> mide la latencia de la puerta de enlace cada 60 segundos y la guarda en un historial SQLite local.",
|
||||
"mode2Title": "Modo 2 — Test en tiempo real",
|
||||
"mode2Alt": "Modal Network Latency ejecutando un test de ping en tiempo real contra Cloudflare — barra de progreso al 50%, muestras en vivo acumulándose en la gráfica",
|
||||
"mode2Caption": "Test en tiempo real contra Cloudflare — ejecución de 2 minutos con una lectura cada 5 segundos, muestras ploteadas según llegan. Pulsa <em>Stop</em> para terminar antes; <em>Test Again</em> añade más muestras al mismo dataset.",
|
||||
"mode2Alt": "Diálogo de latencia ejecutando un ping a Cloudflare en tiempo real, con progreso al 50 % y nuevas muestras en el gráfico",
|
||||
"mode2Caption": "Prueba de dos minutos contra Cloudflare, con una lectura cada cinco segundos que se añade al gráfico al llegar. Pulsa <em>Detener</em> para finalizar antes; <em>Repetir prueba</em> añade muestras al mismo conjunto de datos.",
|
||||
"mode2Intro": "Cambiar el destino a Cloudflare o Google arranca un test de ping bajo demanda. Comportamiento:",
|
||||
"mode2Items": [
|
||||
"<strong>Duración</strong> — 2 minutos por ejecución, con barra de progreso y un contador de segundos restantes.",
|
||||
"<strong>Cadencia</strong> — una lectura cada 5 segundos (24 lecturas por ejecución).",
|
||||
"<strong>Método</strong> — ICMP Echo Request (<code>ping</code>), 3 pings consecutivos por muestra, latencia promediada.",
|
||||
"<strong>Duración</strong>: dos minutos por ejecución, con barra de progreso y segundos restantes.",
|
||||
"<strong>Frecuencia</strong>: una lectura cada cinco segundos, 24 por ejecución.",
|
||||
"<strong>Método</strong>: ICMP Echo Request (<code>ping</code>), con tres pings seguidos por muestra y su latencia media.",
|
||||
"<strong>Stop</strong> — termina el test inmediatamente; los datos parciales se preservan.",
|
||||
"<strong>Test Again</strong> — añade nuevas muestras al dataset existente en lugar de empezar de cero, así puedes construir un registro más largo a lo largo de varias ejecuciones.",
|
||||
"<strong>Pastilla de estado en vivo</strong> — se reevalúa tras cada muestra con los mismos umbrales Excellent / Good / Fair / Poor."
|
||||
"<strong>Repetir prueba</strong>: añade muestras a los datos existentes para construir un registro más largo con varias ejecuciones.",
|
||||
"<strong>Indicador de estado actual</strong>: se recalcula tras cada muestra con los mismos umbrales Excelente / Bueno / Regular / Malo."
|
||||
],
|
||||
"thresholdsTitle": "Umbrales de rendimiento",
|
||||
"headerStatus": "Estado",
|
||||
@@ -141,47 +141,47 @@
|
||||
"headerImpact": "Impacto práctico",
|
||||
"thresholdRows": [
|
||||
{
|
||||
"status": "Excellent",
|
||||
"status": "Excelente",
|
||||
"range": "< 50 ms",
|
||||
"impact": "Óptimo para apps en tiempo real, gaming y videollamadas."
|
||||
},
|
||||
{
|
||||
"status": "Good",
|
||||
"status": "Bueno",
|
||||
"range": "50 – 100 ms",
|
||||
"impact": "Aceptable para la mayoría de aplicaciones con impacto mínimo."
|
||||
},
|
||||
{
|
||||
"status": "Fair",
|
||||
"status": "Regular",
|
||||
"range": "100 – 200 ms",
|
||||
"impact": "Retardo perceptible. Puede afectar a VoIP y apps interactivas."
|
||||
},
|
||||
{
|
||||
"status": "Poor",
|
||||
"status": "Malo",
|
||||
"range": "> 200 ms",
|
||||
"impact": "Latencia significativa. Se recomienda investigar."
|
||||
}
|
||||
],
|
||||
"reportTitle": "Network Latency Report (PDF)",
|
||||
"reportIntro": "Ambos modos tienen un botón <strong>Report</strong> junto al selector de destino. Pulsarlo genera un PDF con todo lo que enviarías a tu ISP si quisieras argumentar un mal servicio.",
|
||||
"reportPreviewAlt": "Primera página del PDF Network Latency Report — Executive Summary con el gauge, estadísticas de latencia, la gráfica de latencia y la guía de umbrales",
|
||||
"reportPreviewCaption": "Primera página del Network Latency Report — Executive Summary con el dial del gauge y las estadísticas titulares, la gráfica de latencia por segundo y la guía de umbrales. De la página 2 en adelante está la tabla por muestra y la metodología.",
|
||||
"downloadLabel": "Descargar informe de ejemplo Network Latency (PDF)",
|
||||
"reportTitle": "Informe de latencia de red (PDF)",
|
||||
"reportIntro": "Ambos modos tienen un botón <strong>Informe</strong> junto al selector de destino. Genera un PDF de las mediciones que puedes adjuntar a una solicitud de asistencia a tu proveedor de Internet.",
|
||||
"reportPreviewAlt": "Primera página del informe PDF de latencia: resumen ejecutivo, indicador, estadísticas, gráfico y guía de umbrales",
|
||||
"reportPreviewCaption": "La primera página contiene resumen ejecutivo, indicador, estadísticas principales, serie temporal de latencia y guía de umbrales. Desde la página 2 aparecen la tabla de muestras y la metodología.",
|
||||
"downloadLabel": "Descargar informe de ejemplo de latencia (PDF)",
|
||||
"sectionsIntro": "El informe tiene seis secciones:",
|
||||
"sections": [
|
||||
"<strong>Executive Summary</strong> — dial del gauge (0–300+ ms con zonas verde / amarilla / roja), el veredicto de estado (EXCELLENT / GOOD / FAIR / POOR), el destino / modo / recuento de muestras y un resumen de una línea sobre packet loss.",
|
||||
"<strong>Latency Statistics</strong> — Current / Min / Avg / Max como cuatro tiles grandes, más Sample Count, Packet Loss (avg) y Test Period.",
|
||||
"<strong>Latency Graph</strong> — gráfica de área de cada muestra a lo largo de la ventana del test con una rejilla en el eje y de min/avg/max.",
|
||||
"<strong>Performance Thresholds</strong> — la misma escala de cuatro niveles documentada arriba, con un punto coloreado por nivel.",
|
||||
"<strong>Detailed Test Results</strong> — tabla numerada con timestamp, latencia, packet loss y estado para cada muestra. Útil para detectar micro-ráfagas que esconden los promedios titulares.",
|
||||
"<strong>Methodology</strong> — método del test (ICMP Echo Request), muestras por test (3 pings consecutivos), nombre del destino, IP del destino y un párrafo final \"Performance Assessment\" derivado del veredicto."
|
||||
"<strong>Resumen ejecutivo</strong>: indicador de 0 a más de 300 ms con zonas verde, amarilla y roja; estado Excelente / Bueno / Regular / Malo; destino, modo, número de muestras y resumen de pérdida de paquetes.",
|
||||
"<strong>Estadísticas de latencia</strong>: cuatro indicadores con valor actual, mínimo, media y máximo, además del número de muestras, pérdida media de paquetes y periodo de prueba.",
|
||||
"<strong>Gráfico de latencia</strong>: gráfico de área de las muestras durante la prueba, con referencias de mínimo, media y máximo en el eje vertical.",
|
||||
"<strong>Umbrales de rendimiento</strong>: la misma escala de cuatro niveles anterior, con un punto de color por nivel.",
|
||||
"<strong>Resultados detallados</strong>: tabla numerada con fecha y hora, latencia, pérdida de paquetes y estado de cada muestra. Permite detectar picos breves ocultos por las medias.",
|
||||
"<strong>Metodología</strong>: ICMP Echo Request, tres pings consecutivos por muestra, nombre e IP del destino y evaluación final derivada del estado."
|
||||
],
|
||||
"useCaseTitle": "Caso de uso: reclamaciones a tu ISP",
|
||||
"useCaseBody": "Ejecuta el test en tiempo real contra Cloudflare durante 2 minutos en un momento de lentitud percibida, después pulsa <em>Test Again</em> unas cuantas veces para extender el dataset y finalmente <em>Report</em>. El PDF lleva la tabla completa por muestra más el bloque de metodología — los ISPs suelen aceptar esto como evidencia, sobre todo si está correlacionado con timestamps de una reclamación aparte."
|
||||
"useCaseTitle": "Caso de uso: asistencia de tu proveedor de Internet",
|
||||
"useCaseBody": "Ejecuta dos minutos de prueba contra Cloudflare cuando notes lentitud, usa <em>Repetir prueba</em> para ampliar el registro y selecciona <em>Informe</em>. El PDF incluye todas las muestras y la metodología. Puedes adjuntarlo a una solicitud de asistencia con las horas de la incidencia; tu proveedor decide qué pruebas necesita."
|
||||
},
|
||||
"excluding": {
|
||||
"heading": "Excluir interfaces ruidosas",
|
||||
"body1": "Igual que los almacenamientos, las interfaces individuales se pueden excluir de la monitorización de salud — útil para bridges deshabilitados a propósito, interfaces de test o NICs físicamente retiradas pero que siguen en la configuración. El flag se guarda en la tabla <code>excluded_interfaces</code> y lo respeta el ciclo del Monitor de salud: sin warnings, sin notificaciones, sin contribución a la pastilla de estado de la cabecera.",
|
||||
"body2": "Desde el menú contextual de la fila, elige <em>Exclude from monitoring</em>. La interfaz sigue visible en el panel con una insignia morada <strong>excluded</strong>, y puedes reactivar la monitorización desde el mismo menú."
|
||||
"heading": "Excluir interfaces de la supervisión",
|
||||
"body1": "Puedes excluir interfaces de la supervisión, por ejemplo puentes desactivados a propósito, interfaces de prueba o NIC retiradas que siguen en la configuración. El ajuste se guarda en <code>excluded_interfaces</code>: Health Monitor no genera avisos ni notificaciones ni incluye esas interfaces en el indicador general.",
|
||||
"body2": "En el menú contextual de la fila, elige <em>Excluir de la supervisión</em>. La interfaz sigue visible con una etiqueta morada <strong>excluida</strong>. Puedes reactivar la supervisión desde el mismo menú."
|
||||
},
|
||||
"dataCollected": {
|
||||
"heading": "Cómo se recopilan los datos",
|
||||
@@ -192,31 +192,31 @@
|
||||
{
|
||||
"section": "Inventario de interfaces",
|
||||
"endpoint": "/api/network",
|
||||
"source": "<code>ip -j addr</code> + <code>ip -j link</code> + introspección de bond / bridge."
|
||||
"source": "<code>ip -j addr</code> + <code>ip -j link</code> y consulta de bonds y puentes."
|
||||
},
|
||||
{
|
||||
"section": "Tarjetas resumen",
|
||||
"endpoint": "/api/network/summary",
|
||||
"source": "Agregación sobre el inventario más recuentos up/down por interfaz."
|
||||
"source": "Resumen del inventario y recuento de interfaces activas e inactivas."
|
||||
},
|
||||
{
|
||||
"section": "Serie temporal RX/TX por interfaz",
|
||||
"endpoint": "/api/network/<iface>/metrics",
|
||||
"source": "<code>/proc/net/dev</code> muestreado por el Monitor de salud con cálculo de byte-rate."
|
||||
"source": "Los contadores actuales usan <code>/proc/net/dev</code>; el historial del gráfico procede de RRD Proxmox mediante pvesh. Las interfaces VM/LXC usan datos del invitado; las físicas y los puentes, datos del nodo."
|
||||
},
|
||||
{
|
||||
"section": "Latencia: actual",
|
||||
"endpoint": "/api/network/latency/current",
|
||||
"source": "Una ráfaga corta de <code>ping</code> contra el gateway / destino configurado."
|
||||
"source": "Serie corta de <code>ping</code> a la puerta de enlace o al destino configurado."
|
||||
},
|
||||
{
|
||||
"section": "Latencia: histórica",
|
||||
"endpoint": "/api/network/latency/history",
|
||||
"source": "Muestras persistidas — cada 5 min por el ciclo del Monitor de salud."
|
||||
"source": "Muestras guardadas aproximadamente cada 60 segundos por el recolector de temperatura y latencia en segundo plano."
|
||||
}
|
||||
],
|
||||
"codeComment1": "# Cross-check del estado de interfaz que ve el panel",
|
||||
"codeComment2": "# Verificar una sonda de latencia actual de extremo a extremo"
|
||||
"codeComment1": "# Contrastar el estado de las interfaces que muestra el panel",
|
||||
"codeComment2": "# Comprobar una medición actual de latencia de extremo a extremo"
|
||||
},
|
||||
"whereNext": {
|
||||
"heading": "Por dónde seguir",
|
||||
@@ -224,17 +224,17 @@
|
||||
{
|
||||
"label": "Monitor de salud",
|
||||
"href": "/docs/monitor/health-monitor",
|
||||
"tail": " — la categoría Red y los umbrales del historial de latencia."
|
||||
"tail": " — categoría Red y umbrales del historial de latencia."
|
||||
},
|
||||
{
|
||||
"label": "Referencia de la API",
|
||||
"href": "/docs/monitor/api",
|
||||
"tail": " — los endpoints de red y latencia."
|
||||
"tail": " — endpoints de red y latencia."
|
||||
},
|
||||
{
|
||||
"label": "Integraciones",
|
||||
"href": "/docs/monitor/integrations",
|
||||
"tail": " — el scrape de Prometheus expone las mismas métricas de red."
|
||||
"tail": " — la recopilación de Prometheus ofrece las mismas métricas de red."
|
||||
},
|
||||
{
|
||||
"label": "Índice del panel",
|
||||
|
||||
@@ -1,174 +1,174 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "ProxMenux Monitor — Panel: pestaña Seguridad | ProxMenux Documentation",
|
||||
"description": "La pestaña Seguridad agrupa cada control relacionado con protección en dos columnas: ProxMenux Monitor (Autenticación, SSL/HTTPS, tokens API, Secure Gateway) y Proxmox VE (Firewall, Fail2Ban, auditoría Lynis). Asistente paso a paso de Secure Gateway, recorrido de auditoría Lynis, instalación de Fail2Ban y ajuste de reglas."
|
||||
"title": "ProxMenux Monitor — Panel: pestaña Seguridad | Documentación de ProxMenux",
|
||||
"description": "La pestaña Seguridad reúne los controles de protección en dos columnas: ProxMenux Monitor (autenticación, SSL/HTTPS, tokens de API y Secure Gateway) y Proxmox VE (cortafuegos, Fail2Ban y auditoría de Lynis). Incluye el asistente de Secure Gateway, la auditoría de Lynis y la instalación y el ajuste de reglas de Fail2Ban."
|
||||
},
|
||||
"header": {
|
||||
"title": "Panel: pestaña Seguridad",
|
||||
"description": "Cada control de seguridad del panel, agrupado en dos bloques claramente etiquetados: configuración del propio Monitor (auth, SSL, tokens, Secure Gateway) y configuración del host Proxmox al que vigila (firewall, Fail2Ban, Lynis).",
|
||||
"description": "Los controles de seguridad del panel se agrupan en dos bloques: la configuración del propio Monitor (autenticación, SSL, tokens y Secure Gateway) y la del host Proxmox que supervisa (cortafuegos, Fail2Ban y Lynis).",
|
||||
"section": "ProxMenux Monitor · Panel"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Dos ámbitos, una pestaña",
|
||||
"body": "La pestaña Seguridad está dividida en dos secciones claramente separadas: <strong>ProxMenux Monitor</strong> (settings para el propio panel) y <strong>Proxmox VE</strong> (settings para el host de debajo). Las tarjetas se renderizan de forma condicional — Fail2Ban y Lynis solo aparecen una vez instalados."
|
||||
"body": "La pestaña Seguridad tiene dos secciones: <strong>ProxMenux Monitor</strong> (ajustes del panel) y <strong>Proxmox VE</strong> (ajustes del host). Las tarjetas de Fail2Ban y Lynis ofrecen instalar estas herramientas si faltan y muestran sus controles una vez instaladas."
|
||||
},
|
||||
"monitor": {
|
||||
"heading": "ProxMenux Monitor",
|
||||
"intro": "Cuatro tarjetas controlan cómo se alcanza y autentica el propio panel."
|
||||
"intro": "Cuatro tarjetas permiten configurar el acceso al panel y su autenticación."
|
||||
},
|
||||
"auth": {
|
||||
"heading": "Autenticación",
|
||||
"imageAlt": "Tarjeta Authentication mostrando estado Enabled, Logout, Change Password, info de Two-Factor Authentication, botones Enable Two-Factor Authentication y Disable Authentication",
|
||||
"imageCaption": "Tarjeta Authentication con auth activa — insignia de estado, Change Password, Enable 2FA y la acción (destructiva) Disable Authentication.",
|
||||
"intro": "La tarjeta te permite gestionar el login del propio panel. El flujo completo de primer arranque, política de contraseñas, pantallas de alta de TOTP y recuperación de authenticator perdido están documentados en <link>Acceso y autenticación</link> — esta tarjeta es la superficie del día a día para esos settings:",
|
||||
"imageAlt": "Tarjeta de autenticación con estado Activada, botones Cerrar sesión y Cambiar contraseña, información sobre la autenticación de dos factores y botones para activarla o desactivar la autenticación",
|
||||
"imageCaption": "Tarjeta con la autenticación activada: indicador de estado, Cambiar contraseña, Activar 2FA y la acción destructiva Desactivar autenticación.",
|
||||
"intro": "La tarjeta permite gestionar el inicio de sesión del panel. El primer inicio, la política de contraseñas, el alta de TOTP y la recuperación por pérdida del autenticador se explican en <link>Acceso y autenticación</link>. Esta tarjeta permite gestionar esos ajustes a diario:",
|
||||
"items": [
|
||||
"<strong>Authentication Status</strong> — insignia mostrando <em>Enabled</em> / <em>Disabled</em> / <em>Declined</em>.",
|
||||
"<strong>Change Password</strong> — contraseña actual + nueva contraseña + confirmación.",
|
||||
"<strong>Enable / Disable Two-Factor Authentication</strong> — abre el diálogo de alta con QR al activar, pide la contraseña actual al desactivar.",
|
||||
"<strong>Disable Authentication</strong> — acción destructiva que vuelve a mostrar el diálogo de primer arranque <em>Protect your dashboard?</em> en la siguiente visita."
|
||||
"<strong>Estado de autenticación</strong>: indicador con <em>Activada</em> / <em>Desactivada</em> / <em>Rechazada</em>.",
|
||||
"<strong>Cambiar contraseña</strong>: contraseña actual + nueva contraseña + confirmación.",
|
||||
"<strong>Activar / Desactivar autenticación de dos factores</strong>: al activarla, abre el diálogo de registro con QR; al desactivarla, solicita la contraseña actual.",
|
||||
"<strong>Desactivar autenticación</strong>: acción destructiva que vuelve a mostrar el diálogo inicial <em>¿Proteger tu panel?</em> en la siguiente visita."
|
||||
]
|
||||
},
|
||||
"ssl": {
|
||||
"heading": "SSL / HTTPS",
|
||||
"imageAlt": "Tarjeta SSL / HTTPS mostrando estado HTTP No SSL, certificado del host Proxmox detectado con Subject, Issuer, Expires, botón Use Proxmox Certificate y opción Use Custom Certificate",
|
||||
"imageCaption": "Tarjeta SSL / HTTPS con HTTPS apagado. El Monitor detecta el certificado ya instalado en el host Proxmox y lo ofrece como opción de un solo clic, con un fallback a <em>Use Custom Certificate</em> si tienes tus propios archivos en otro sitio.",
|
||||
"intro": "Sirve el panel sobre HTTPS sin ningún reverse proxy por delante. La tarjeta auto-detecta el certificado que usa el propio Proxmox (bajo <code>/etc/pve/local/</code>) y muestra el subject, issuer y expiración para que lo puedas verificar antes de activar. Dos rutas para activar HTTPS:",
|
||||
"heading": "SSL/HTTPS",
|
||||
"imageAlt": "Tarjeta SSL/HTTPS con estado HTTP sin SSL, certificado del host Proxmox detectado con sujeto, emisor y caducidad, botón Usar certificado de Proxmox y opción Usar certificado personalizado",
|
||||
"imageCaption": "Tarjeta SSL/HTTPS con HTTPS desactivado. Monitor detecta el certificado instalado en el host Proxmox y permite usarlo con un clic. Si tienes otros archivos, puedes elegir <em>Usar certificado personalizado</em>.",
|
||||
"intro": "Permite servir el panel por HTTPS sin un proxy inverso. La tarjeta detecta el certificado usado por Proxmox en <code>/etc/pve/local/</code> y muestra su sujeto, emisor y caducidad para verificarlo antes de activarlo. Hay dos formas de activar HTTPS:",
|
||||
"items": [
|
||||
"<strong>Use Proxmox Certificate</strong> — un clic. El Monitor reutiliza el certificado instalado en el host. Buena opción para usuarios que ya tienen su PVE corriendo en el mismo nombre DNS que el panel.",
|
||||
"<strong>Use Custom Certificate</strong> — pega rutas absolutas a tus propios archivos <code>.pem</code> de certificado y <code>.key</code> de clave privada. Las rutas se validan antes de reiniciar el servicio; si la carga falla, el panel cae a HTTP automáticamente (sin estado roto)."
|
||||
"<strong>Usar certificado de Proxmox</strong>: con un clic, Monitor reutiliza el certificado del host. Es adecuado si PVE y el panel ya usan el mismo nombre DNS.",
|
||||
"<strong>Usar certificado personalizado</strong>: pega las rutas absolutas de tu certificado <code>.pem</code> y clave privada <code>.key</code>. Se validan antes de reiniciar el servicio. Si no pueden cargarse, el panel vuelve automáticamente a HTTP y permanece accesible."
|
||||
],
|
||||
"enabledAlt": "Tarjeta SSL/HTTPS con estado HTTPS Enabled, Active Certificate mostrando rutas pve-ssl.pem y pve-ssl.key, y un botón Disable HTTPS",
|
||||
"enabledCaption": "HTTPS activo — la tarjeta expone el certificado actualmente en uso, las rutas de archivos y una acción <em>Disable HTTPS</em> que vuelve a HTTP en el mismo puerto.",
|
||||
"enabledAlt": "Tarjeta SSL/HTTPS con HTTPS activado, certificado activo con las rutas de pve-ssl.pem y pve-ssl.key y botón Desactivar HTTPS",
|
||||
"enabledCaption": "HTTPS activo: la tarjeta muestra el certificado en uso, sus rutas y la acción <em>Desactivar HTTPS</em>, que vuelve a HTTP en el mismo puerto.",
|
||||
"acmeTitle": "ACME / Let's Encrypt vía Proxmox",
|
||||
"acmeBody": "Si tu nodo Proxmox ya tiene Let's Encrypt configurado en <em>Datacenter → Certificates → ACME</em>, ese es el certificado que el host sirve a los navegadores — y eso es lo que el panel reutiliza al pulsar <em>Use Proxmox Certificate</em>. No necesitas fontanería ACME separada para el Monitor.",
|
||||
"walkthroughLink": "Para un recorrido paso a paso — incluyendo cómo el Monitor auto-detecta el certificado subido por ACME, qué se escribe a disco y cómo caer a un par <code>.pem</code> / <code>.key</code> custom — mira <link>HTTPS para ProxMenux Monitor</link>."
|
||||
"acmeBody": "Si tu nodo Proxmox ya tiene Let’s Encrypt configurado en <em>Datacenter → Certificates → ACME</em>, el panel reutiliza ese mismo certificado al pulsar <em>Usar certificado de Proxmox</em>. No necesitas configurar ACME por separado para Monitor.",
|
||||
"walkthroughLink": "Consulta <link>HTTPS para ProxMenux Monitor</link> para ver paso a paso cómo se detecta el certificado de ACME, qué se guarda en disco y cómo usar un par <code>.pem</code> / <code>.key</code> propio."
|
||||
},
|
||||
"apiTokens": {
|
||||
"heading": "Tokens de acceso API",
|
||||
"emptyAlt": "Tarjeta API Access Tokens en estado vacío con caja info About API Tokens y botón Generate New API Token",
|
||||
"emptyCaption": "Tarjeta API Access Tokens en una instalación recién hecha — la caja <em>About API Tokens</em> resume lifetime, uso y cómo embeber el token en cabeceras <code>Authorization: Bearer</code>.",
|
||||
"intro": "Tokens de vida larga (1 año) para integraciones desatendidas — widgets Homepage, sensores REST de Home Assistant, scrapers de Grafana, flujos n8n, scripts propios. La tarjeta te lleva por tres estados: vacío → formulario → generado.",
|
||||
"generateBody": "<strong>Generar un token.</strong> Pulsa <em>Generate New API Token</em>. El formulario pide un <em>Token Name</em> descriptivo (ayuda a identificarlo después en la lista activa) y tu <em>contraseña</em> como confirmación de segundo factor. Si 2FA está activo, el formulario pide adicionalmente el código TOTP actual.",
|
||||
"generateAlt": "Formulario API Access Tokens generate con input Token Name, input Password, botones Generate Token y Cancel",
|
||||
"generateCaption": "El formulario Generate API Token — rellena un nombre y confirma con tu contraseña (y TOTP si 2FA está activo).",
|
||||
"saveBody": "<strong>Guarda el token inmediatamente.</strong> La cadena completa del token se muestra <strong>solo una vez</strong> tras generarlo. La tarjeta lo destaca con un aviso ámbar y un botón de copia. No hay forma de recuperarlo después — solo verás el prefix en la lista Active Tokens.",
|
||||
"generatedAlt": "Token API generado correctamente con token enmascarado, botón de copia, instrucciones para cabecera Authorization Bearer y lista Active Tokens con prefix",
|
||||
"generatedCaption": "Token generado — el valor se muestra una vez con un botón de copia y el snippet exacto <code>Authorization: Bearer</code>. Debajo, la lista Active Tokens mantiene nombre + prefix + fecha de creación para que puedas revocar tokens individuales después.",
|
||||
"outro": "La tarjeta muestra cada token activo con un botón <em>Revoke</em> por fila. Revocar invalida el token inmediatamente; cualquier integración que lo use deja de funcionar desde ese momento. Los cookbooks para Homepage, Home Assistant, n8n y Prometheus están en <link>Integraciones</link>."
|
||||
"emptyAlt": "Tarjeta de tokens de acceso a la API vacía, con información sobre los tokens y botón Generar nuevo token de API",
|
||||
"emptyCaption": "Tarjeta de tokens en una instalación nueva. El cuadro <em>Acerca de los tokens de API</em> resume su duración, uso y cómo incluirlos en cabeceras <code>Authorization: Bearer</code>.",
|
||||
"intro": "Tokens con un año de validez para integraciones desatendidas: widgets de Homepage, sensores REST de Home Assistant, recolectores de Grafana, flujos de n8n y scripts propios. La tarjeta pasa por tres estados: vacío → formulario → generado.",
|
||||
"generateBody": "<strong>Generar un token.</strong> Pulsa <em>Generar nuevo token de API</em>. Introduce un <em>nombre del token</em> descriptivo para identificarlo después y tu <em>contraseña</em> como confirmación adicional. Si 2FA está activo, también solicita el código TOTP actual.",
|
||||
"generateAlt": "Formulario de generación de tokens de API con campos Nombre del token y Contraseña y botones Generar token y Cancelar",
|
||||
"generateCaption": "Formulario Generar token de API: introduce un nombre y confirma con tu contraseña y, si 2FA está activo, el código TOTP.",
|
||||
"saveBody": "<strong>Guarda el token inmediatamente.</strong> Su valor completo se muestra <strong>solo una vez</strong> tras generarlo. La tarjeta lo señala con un aviso naranja y un botón de copia. No podrás recuperarlo después; la lista de tokens activos solo mostrará su prefijo.",
|
||||
"generatedAlt": "Token de API generado, con valor oculto, botón de copia, instrucciones para la cabecera Authorization: Bearer y lista de tokens activos con sus prefijos",
|
||||
"generatedCaption": "Token generado: el valor se muestra una vez, con botón de copia y el fragmento exacto <code>Authorization: Bearer</code>. Debajo, la lista de tokens activos muestra nombre, prefijo y fecha de creación para revocarlos individualmente.",
|
||||
"outro": "Cada token activo tiene un botón <em>Revocar</em>. La revocación lo invalida inmediatamente y las integraciones que lo usen dejan de funcionar. Encontrarás ejemplos para Homepage, Home Assistant, n8n y Prometheus en <link>Integraciones</link>."
|
||||
},
|
||||
"gateway": {
|
||||
"heading": "Secure Gateway",
|
||||
"cardAlt": "Tarjeta Secure Gateway con botón Deploy Secure Gateway antes de que se haya desplegado ningún gateway",
|
||||
"cardCaption": "Tarjeta Secure Gateway en setup recién hecho — un botón arranca el asistente.",
|
||||
"intro": "Alcanza el panel, la UI web de Proxmox y cualquier guest desde cualquier sitio en tu tailnet de <a>Tailscale</a>, sin exponer ningún puerto a la internet pública. El Monitor despliega un contenedor LXC Alpine en el host corriendo <code>tailscaled</code> como subnet router; una vez aprobado en la consola de admin de Tailscale, tus dispositivos remotos alcanzan la IP de LAN del host desde cualquier sitio.",
|
||||
"cardAlt": "Tarjeta Secure Gateway con el botón Desplegar Secure Gateway antes de desplegar la primera pasarela",
|
||||
"cardCaption": "Tarjeta Secure Gateway en una instalación nueva: un botón inicia el asistente.",
|
||||
"intro": "Accede al panel, a la interfaz web de Proxmox y a cualquier máquina invitada desde tu red <a>Tailscale</a>, sin exponer puertos a Internet. Monitor despliega en el host un contenedor LXC Alpine con <code>tailscaled</code> como router de subred. Tras aprobarlo en la consola de administración de Tailscale, los dispositivos remotos pueden acceder a la IP LAN del host desde cualquier lugar.",
|
||||
"wizardTitle": "Asistente paso a paso",
|
||||
"wizardIntro": "Antes de pulsar <em>Deploy Secure Gateway</em>, genera una auth key en tu consola de admin de Tailscale — el asistente la pedirá en el paso 2.",
|
||||
"step0Title": "0. Generar la auth key de Tailscale",
|
||||
"step0Body": "Entra en <a>login.tailscale.com/admin/settings/keys</a> y pulsa <em>Generate auth key…</em>. Elige una key <em>pre-autenticada</em> (para que el gateway no necesite un login interactivo de Tailscale) y copia el valor — se muestra solo una vez.",
|
||||
"step0Alt": "Consola de admin de Tailscale, página Settings Keys con el botón Generate auth key resaltado",
|
||||
"wizardIntro": "Antes de pulsar <em>Deploy Secure Gateway</em>, genera una clave de autenticación en la consola de Tailscale. El asistente la pedirá en el paso 2.",
|
||||
"step0Title": "0. Generar la clave de autenticación de Tailscale",
|
||||
"step0Body": "Entra en <a>login.tailscale.com/admin/settings/keys</a> y pulsa <em>Generate auth key…</em>. Elige una clave <em>preautenticada</em> para que la pasarela no necesite un inicio de sesión interactivo. Copia el valor: solo se muestra una vez.",
|
||||
"step0Alt": "Página Settings → Keys de la consola de administración de Tailscale, con el botón Generate auth key resaltado",
|
||||
"step0Caption": "Consola de admin de Tailscale — <em>Settings → Keys → Generate auth key…</em>. Usa una cuenta gratuita de Tailscale si aún no tienes (link dentro del asistente).",
|
||||
"step1Title": "1. Abrir el asistente",
|
||||
"step1Body": "De vuelta en la pestaña Seguridad, pulsa <em>Deploy Secure Gateway</em>. El primer paso es una intro con lo que vas a obtener y lo que necesitas.",
|
||||
"step1Alt": "Paso intro del asistente Secure Gateway Setup explicando qué provee el gateway: acceso VPN, sin port forwarding, cifrado de extremo a extremo",
|
||||
"step1Body": "Vuelve a la pestaña Seguridad y pulsa <em>Deploy Secure Gateway</em>. El primer paso presenta sus funciones y requisitos.",
|
||||
"step1Alt": "Introducción del asistente Secure Gateway con acceso VPN, sin redirección de puertos y con cifrado de extremo a extremo",
|
||||
"step1Caption": "Paso 1 — resumen de lo que provee el Secure Gateway y recordatorio de que necesitarás una cuenta gratuita de Tailscale.",
|
||||
"step2Title": "2. Tailscale Authentication",
|
||||
"step2Body": "Pega la auth key del paso 0 y elige un hostname (así es como aparecerá el gateway en la consola de admin de Tailscale — típicamente <code>proxmox-gateway</code> o el nombre de tu nodo).",
|
||||
"step2Alt": "Paso del asistente Secure Gateway pidiendo Tailscale Auth Key y Device Hostname con link para generar la key",
|
||||
"step2Caption": "Paso 2 — pega la pre-auth key y elige el hostname del dispositivo. El link debajo del campo abre la página de Tailscale del paso 0 si te lo saltaste.",
|
||||
"step3Title": "3. Access Scope",
|
||||
"step2Title": "2. Autenticación de Tailscale",
|
||||
"step2Body": "Pega la clave de autenticación del paso 0 y elige un nombre de host. Será el nombre de la pasarela en la consola de Tailscale, normalmente <code>proxmox-gateway</code> o el nombre de tu nodo.",
|
||||
"step2Alt": "Paso del asistente Secure Gateway que solicita la clave de autenticación de Tailscale y el nombre de host del dispositivo, con enlace para generar la clave",
|
||||
"step2Caption": "Paso 2: pega la clave preautenticada y elige el nombre de host. Si omitiste el paso 0, el enlace bajo el campo abre la página de Tailscale correspondiente.",
|
||||
"step3Title": "3. Alcance de acceso",
|
||||
"step3Intro": "Elige a qué puede llegar tu tailnet a través del gateway:",
|
||||
"step3Items": [
|
||||
"<strong>Proxmox Only</strong> — solo la UI de Proxmox y el Monitor. La menor superficie de ataque.",
|
||||
"<strong>Full Local Network</strong> — la subred LAN entera (auto-detectada desde la interfaz primaria del host). Te permite alcanzar NAS, impresoras, VMs y cualquier otro dispositivo de la LAN.",
|
||||
"<strong>Custom Subnets</strong> — lista CIDRs específicos. Para setups multi-VLAN donde quieres exponer algunos segmentos pero no otros."
|
||||
"<strong>Subredes personalizadas</strong>: indica los CIDR concretos. Permite dar acceso solo a determinados segmentos en instalaciones con varias VLAN."
|
||||
],
|
||||
"step3Alt": "Paso Access Scope del asistente Secure Gateway con tres opciones: Proxmox Only, Full Local Network, Custom Subnets",
|
||||
"step3Caption": "Paso 3 — elige el access scope. <em>Full Local Network</em> se autorrellena con la subred LAN detectada.",
|
||||
"step4Title": "4. Advanced Options (opcional)",
|
||||
"step4Intro": "Dos toggles opcionales. Ambos <strong>off por defecto</strong>:",
|
||||
"step3Alt": "Paso Ámbito de acceso del asistente Secure Gateway, con las opciones Solo Proxmox, Toda la red local y Subredes personalizadas",
|
||||
"step3Caption": "Paso 3: elige el ámbito de acceso. <em>Toda la red local</em> rellena automáticamente la subred LAN detectada.",
|
||||
"step4Title": "4. Opciones avanzadas (opcional)",
|
||||
"step4Intro": "Dos interruptores opcionales, ambos <strong>desactivados por defecto</strong>:",
|
||||
"step4Items": [
|
||||
"<strong>Exit Node</strong> — cuando se activa y se selecciona desde un dispositivo remoto, todo el tráfico de internet de ese dispositivo sale por la WAN del host Proxmox. Útil para escenarios de viaje donde quieres que el tráfico de tu móvil parezca de casa.",
|
||||
"<strong>Accept Routes</strong> — deja que este gateway alcance redes anunciadas por <em>otros</em> subnet routers del tailnet (para setups multi-sitio)."
|
||||
"<strong>Exit Node</strong>: al activarlo y seleccionarlo desde un dispositivo remoto, todo el tráfico de Internet de ese dispositivo sale por la WAN del host Proxmox. Es útil al viajar para que el tráfico del móvil salga por tu conexión de casa.",
|
||||
"<strong>Aceptar rutas</strong>: permite que esta pasarela acceda a redes anunciadas por <em>otros</em> routers de subred de la red Tailscale, para instalaciones en varias ubicaciones."
|
||||
],
|
||||
"step4Alt": "Paso Advanced Options del asistente Secure Gateway con checkboxes Exit Node y Accept Routes",
|
||||
"step4Caption": "Paso 4 — Exit Node y Accept Routes. Salta ambos si lo único que quieres es acceso al panel desde tu móvil o portátil.",
|
||||
"step5Title": "5. Review & Deploy",
|
||||
"step5Body": "Resumen final antes de que arranque el deploy. El asistente te recuerda que aún queda un paso manual en el admin de Tailscale tras desplegar: <strong>aprobar la subnet route</strong>.",
|
||||
"step5Alt": "Paso Review and Deploy del asistente Secure Gateway con Configuration Summary mostrando hostname, access mode, networks, exit node, accept routes y un botón Deploy Gateway",
|
||||
"step4Alt": "Paso Opciones avanzadas de Secure Gateway con las casillas Exit Node y Accept Routes",
|
||||
"step4Caption": "Paso 4: Exit Node y Accept Routes. Deja ambas opciones desactivadas si solo necesitas acceder al panel desde el móvil o el portátil.",
|
||||
"step5Title": "5. Revisar y desplegar",
|
||||
"step5Body": "Resumen final antes del despliegue. El asistente recuerda que después queda un paso manual en la consola de Tailscale: <strong>aprobar la ruta de subred</strong>.",
|
||||
"step5Alt": "Paso Revisar y desplegar de Secure Gateway, con el resumen del nombre de host, modo de acceso, redes, Exit Node y Accept Routes y el botón Desplegar pasarela",
|
||||
"step5Caption": "Paso 5 — revisa la configuración y despliega. El aviso azul al pie señala la aprobación de ruta pendiente.",
|
||||
"approvalTitle": "Un último paso manual en el admin de Tailscale",
|
||||
"approvalBody": "Tras desplegar, vuelve a <a>login.tailscale.com/admin/machines</a> y aprueba la subnet route que el gateway está anunciando. Hasta que lo hagas, los dispositivos remotos de tu tailnet no podrán alcanzar realmente IPs de LAN a través del gateway. Tailscale marca las rutas pendientes con un aviso amarillo en la fila del dispositivo — pulsa <em>Edit route settings</em> y marca la casilla de la ruta."
|
||||
"approvalBody": "Tras el despliegue, vuelve a <a>login.tailscale.com/admin/machines</a> y aprueba la ruta de subred anunciada por la pasarela. Hasta entonces, los dispositivos remotos de tu red Tailscale no podrán acceder a las IP LAN a través de ella. Las rutas pendientes aparecen con un aviso amarillo en la fila del dispositivo: pulsa <em>Edit route settings</em> y marca la casilla de la ruta."
|
||||
},
|
||||
"pve": {
|
||||
"heading": "Proxmox VE",
|
||||
"intro": "Las protecciones del propio host — firewall, prevención de intrusiones y auditoría de seguridad. Los dos últimos solo se renderizan cuando sus herramientas respectivas están instaladas."
|
||||
"intro": "Las protecciones del host: cortafuegos, prevención de intrusiones y auditoría de seguridad. Las tarjetas de Fail2Ban y Lynis ofrecen instalarlos si faltan y después muestran sus controles de gestión."
|
||||
},
|
||||
"firewall": {
|
||||
"heading": "Proxmox Firewall",
|
||||
"imageAlt": "Tarjeta Proxmox Firewall mostrando estado de Cluster Firewall y Host Firewall, Quick Access Rules para ProxMenux Monitor y Proxmox Web UI, contadores Rules Overview y una lista de Firewall Rules con botón Add Rule",
|
||||
"imageCaption": "Tarjeta Proxmox Firewall — toggles enable / disable a nivel cluster y host, puertos comunes como <em>Quick Access Rules</em>, totales en <em>Rules Overview</em> y la lista completa de reglas con <em>+ Add Rule</em>.",
|
||||
"intro": "La tarjeta expone el firewall integrado de Proxmox VE (que es independiente de cualquier <code>iptables</code> / <code>nftables</code> a nivel host que puedas correr en paralelo). Tres bloques:",
|
||||
"imageAlt": "Tarjeta del cortafuegos Proxmox con estado del clúster y del host, reglas de acceso rápido para Monitor y la interfaz web Proxmox, contadores, lista de reglas y botón Añadir regla",
|
||||
"imageCaption": "Tarjeta del cortafuegos Proxmox: interruptores para el clúster y el host, puertos comunes en <em>Reglas de acceso rápido</em>, contadores en <em>Resumen de reglas</em> y lista completa con <em>+ Añadir regla</em>.",
|
||||
"intro": "La tarjeta gestiona la configuración del cortafuegos de Proxmox VE. El backend clásico usa <code>iptables</code> y el alternativo usa <code>nftables</code>. No gestiona reglas arbitrarias creadas fuera de Proxmox. Tres bloques:",
|
||||
"items": [
|
||||
"<strong>Cluster Firewall + Host Firewall</strong> — toggles globales. El cluster firewall debe estar activo para que cualquier regla a nivel host surta efecto; la tarjeta señala esta dependencia inline.",
|
||||
"<strong>Quick Access Rules</strong> — filas predefinidas para puertos que importan al propio ProxMenux: <code>8008/TCP</code> (Monitor), <code>8006/TCP</code> (UI web de Proxmox). Cada fila muestra el estado actual allow / deny / unprotected. La UI web de Proxmox se permite vía el macro de firewall <em>integrado</em> de Proxmox y no se puede eliminar por accidente.",
|
||||
"<strong>Rules Overview</strong> — contadores de reglas totales, reglas accept, reglas drop / reject y puertos distintos protegidos. Los números se leen de <code>/etc/pve/firewall/cluster.fw</code> y <code>/etc/pve/nodes/<node>/host.fw</code>.",
|
||||
"<strong>Firewall Rules</strong> — lista completa con action / protocolo / puerto / source / level. <em>+ Add Rule</em> abre un editor inline; el icono de papelera en cada fila elimina la regla. Las ediciones escriben a los mismos archivos que usa Proxmox, así que los cambios también aparecen en la UI de Proxmox (Datacenter / Node → Firewall)."
|
||||
"<strong>Cortafuegos del clúster + cortafuegos del host</strong>: interruptores globales. El del clúster debe estar activado para que se apliquen las reglas del host. La tarjeta indica esta dependencia junto al ajuste.",
|
||||
"<strong>Reglas de acceso rápido</strong>: filas predefinidas para <code>8008/TCP</code> (Monitor) y <code>8006/TCP</code> (interfaz web Proxmox), con estado permitido, bloqueado o sin protección. La interfaz de Proxmox se permite mediante su macro de cortafuegos <em>integrada</em>, que no puede eliminarse por accidente.",
|
||||
"<strong>Resumen de reglas</strong>: contadores del total de reglas, reglas accept, reglas drop/reject y puertos distintos protegidos. Los datos se leen de <code>/etc/pve/firewall/cluster.fw</code> y <code>/etc/pve/nodes/<node>/host.fw</code>.",
|
||||
"<strong>Reglas del cortafuegos</strong>: lista con acción, protocolo, puerto, origen y nivel. <em>+ Añadir regla</em> abre el editor en la tarjeta; la papelera elimina la regla. Los cambios se guardan en los archivos de Proxmox y también aparecen en su interfaz (Datacenter / Node → Firewall)."
|
||||
]
|
||||
},
|
||||
"fail2ban": {
|
||||
"heading": "Fail2Ban",
|
||||
"subHeading": "(condicional)",
|
||||
"whatIs": "<strong>Qué es.</strong> Fail2Ban es un daemon open-source de prevención de intrusiones que vigila archivos de log buscando intentos repetidos fallidos de login y banea la IP ofensora a nivel de firewall. Es la respuesta de facto a los escáneres de fuerza bruta que pegan SSH y formularios de login web 24/7. ProxMenux lo conecta a tres jails por defecto: SSH, el login de la UI web de Proxmox (puerto 8006) y el login del ProxMenux Monitor (puerto 8008).",
|
||||
"notBundled": "Fail2Ban <strong>no viene de fábrica</strong>. La tarjeta detecta si está instalado y se adapta: cuando falta ofrece una instalación de un clic; una vez instalado muestra estado en vivo de jails, IPs baneadas y te deja ajustar retries / ban time por jail.",
|
||||
"notInstalledAlt": "Tarjeta Fail2Ban mostrando estado Not Installed con explicación de lo que configuraría: SSH, UI web de Proxmox y protección de ProxMenux Monitor con backend nftables, más un botón Install and Configure Fail2Ban",
|
||||
"subHeading": "(según el estado)",
|
||||
"whatIs": "<strong>Qué es.</strong> Fail2Ban es un servicio de código abierto que detecta intentos de inicio de sesión fallidos repetidos en los registros y bloquea la IP en el cortafuegos. Protege frente a ataques de fuerza bruta continuos contra SSH y los formularios web. ProxMenux configura tres jails: SSH, acceso web de Proxmox (puerto 8006) y acceso de ProxMenux Monitor (puerto 8008).",
|
||||
"notBundled": "Fail2Ban <strong>no viene incluido</strong>. La tarjeta detecta si está instalado y adapta su contenido: si falta, ofrece instalarlo con un clic; una vez instalado, muestra el estado de las jails y las IP bloqueadas, y permite ajustar los reintentos y el tiempo de bloqueo de cada jail.",
|
||||
"notInstalledAlt": "Tarjeta Fail2Ban sin instalar, con descripción de la protección de SSH, la interfaz web Proxmox y Monitor mediante nftables y botón Instalar y configurar Fail2Ban",
|
||||
"notInstalledCaption": "Tarjeta Fail2Ban antes de instalar — la caja azul previsualiza lo que configuraría la instalación.",
|
||||
"clickBody": "Pulsa <em>Install and Configure Fail2Ban</em> y obtienes una modal de confirmación listando cada cambio que hará el script en el host:",
|
||||
"confirmAlt": "Modal de confirmación Install Fail2Ban listando protección SSH modo agresivo, protección de interfaz web Proxmox puerto 8006, protección ProxMenux Monitor puerto 8008, backend nftables auto-detectado, ajuste del log level de journald y hardening de SSH MaxAuthTries",
|
||||
"confirmCaption": "Confirmación de instalación — lista explícita de jails, ajustes al log level de journald (para que el jail de auth pueda leer eventos SSH) y un efecto colateral de hardening SSH (<code>MaxAuthTries=3</code>).",
|
||||
"confirmIntro": "La confirmación dispara un panel de instalación en streaming (apt + config de jails + tests). La misma fontanería que el instalador CLI de ProxMenux.",
|
||||
"progressAlt": "Panel Fail2Ban Installation mostrando log de instalación en vivo: instalación del paquete, journald MaxLevelStore ajustado para logging de auth, jails configurados, backend nftables detectado, hardening MaxAuthTries, test de comunicación fail2ban-client, mensaje de finalización",
|
||||
"progressCaption": "Instalación en curso — cada paso se loguea en el panel. Connection-closed al final marca el fin de la sesión de streaming.",
|
||||
"afterInstall": "Tras instalar la tarjeta pasa a la vista de estado en vivo: jails configurados, contador de IPs baneadas, eventos recientes de ban. Las pestañas grandes separan <em>Jails & Banned IPs</em> de <em>Recent Activity</em> (las últimas N entradas del log de Fail2Ban).",
|
||||
"activeAlt": "Tarjeta Fail2Ban tras instalar con estado Active, tres jails configurados (proxmenux, proxmox, sshd), contador Banned IPs, Total Bans, Failed Attempts, y filas por jail con retries, ban time, window e icono de rueda dentada",
|
||||
"activeCaption": "Fail2Ban activo — los tres jails por defecto (<code>proxmenux</code>, <code>proxmox</code>, <code>sshd</code>) con sus settings de retries / ban time / window.",
|
||||
"tuneBody": "<strong>Ajustar reglas del jail.</strong> Pulsa el icono de rueda dentada en cualquier fila de jail para ajustar <em>Max Retries</em>, <em>Ban Time</em> (usa ban permanente si quieres que los ofensores queden bloqueados hasta que tú los desbanees manualmente) y <em>Find Time</em> (la ventana deslizante para contar retries). Los valores comunes están documentados dentro del formulario.",
|
||||
"configAlt": "Formulario Configure jail sshd con Max Retries, Ban Time en segundos con opción Permanent Ban, Find Time, recordatorio de valores comunes y botón Save Configuration",
|
||||
"configCaption": "Editando el jail sshd — elige un <em>Max Retries</em> más estricto para SSH si solo te logueas desde tu propia subred, o extiende el <em>Ban Time</em> para el panel de cara al público.",
|
||||
"outro": "El recorrido completo <em>Qué instala / cómo se configura / cómo desinstalar</em> — incluyendo la ruta de instalación manual, el efecto colateral de SSH MaxAuthTries y la relación con el journal <code>proxmenux-auth.log</code> — está en <link>ProxMenux → Seguridad → Fail2Ban</link>.",
|
||||
"calloutTitle": "Sin Fail2Ban, la protección contra fuerza bruta es best-effort",
|
||||
"calloutBody": "ProxMenux Monitor tiene su propio hook de ban a <em>nivel de aplicación</em> en el pipeline de peticiones de Flask — pero solo surte efecto si Fail2Ban está instalado y escribe a la tabla de bans. Sin Fail2Ban, el Monitor loguea los logins fallidos a <code>proxmenux-auth.log</code> para inspección futura pero no bloquea IPs activamente."
|
||||
"clickBody": "Pulsa <em>Instalar y configurar Fail2Ban</em> para abrir un diálogo de confirmación que enumera todos los cambios del script en el host:",
|
||||
"confirmAlt": "Confirmación de Fail2Ban con modo agresivo para SSH, protección de Proxmox en el puerto 8006 y Monitor en el 8008, detección de nftables, ajuste de registros de journald y refuerzo de SSH MaxAuthTries",
|
||||
"confirmCaption": "Confirmación de instalación: lista de jails, ajuste del nivel de registro de journald para leer eventos SSH y refuerzo adicional de SSH (<code>MaxAuthTries=3</code>).",
|
||||
"confirmIntro": "Al confirmar, se abre un panel con el registro de instalación en directo: apt, configuración de jails y pruebas. Usa el mismo mecanismo que el instalador CLI de ProxMenux.",
|
||||
"progressAlt": "Panel con el registro de instalación de Fail2Ban: paquete, journald MaxLevelStore para autenticación, jails, detección de nftables, refuerzo MaxAuthTries, prueba de comunicación fail2ban-client y mensaje de finalización",
|
||||
"progressCaption": "Instalación en curso: el panel registra cada paso. El mensaje Connection closed al final indica que ha terminado la sesión de transmisión.",
|
||||
"afterInstall": "Tras instalarse, la tarjeta muestra el estado en directo: jails configurados, IP bloqueadas y bloqueos recientes. Las pestañas separan <em>Jails e IP bloqueadas</em> de <em>Actividad reciente</em>, con las últimas N entradas del registro de Fail2Ban.",
|
||||
"activeAlt": "Tarjeta Fail2Ban activa con tres jails (proxmenux, proxmox, sshd), contadores de IP bloqueadas, bloqueos totales e intentos fallidos, y filas con intentos, tiempo de bloqueo, intervalo y rueda dentada",
|
||||
"activeCaption": "Fail2Ban activo: los tres jails predeterminados (<code>proxmenux</code>, <code>proxmox</code> y <code>sshd</code>) con sus ajustes de intentos, duración del bloqueo e intervalo de detección.",
|
||||
"tuneBody": "<strong>Ajustar las reglas del jail.</strong> Pulsa su rueda dentada para cambiar <em>Max Retries</em>, <em>Ban Time</em> y <em>Find Time</em>, el intervalo móvil en que se cuentan los intentos. Un bloqueo permanente dura hasta que lo retires manualmente. El formulario explica los valores habituales.",
|
||||
"configAlt": "Formulario del jail sshd con Max Retries, Ban Time en segundos, opción Permanent Ban, Find Time, ayuda con valores habituales y botón Guardar configuración",
|
||||
"configCaption": "Edición del jail sshd: reduce <em>Max Retries</em> para SSH si solo accedes desde tu subred, o amplía <em>Ban Time</em> para el panel expuesto a Internet.",
|
||||
"outro": "La guía <em>Qué instala, cómo se configura y cómo desinstalar</em> incluye la instalación manual, el cambio de SSH MaxAuthTries y la relación con el registro <code>proxmenux-auth.log</code>. Consulta <link>ProxMenux → Seguridad → Fail2Ban</link>.",
|
||||
"calloutTitle": "Sin Fail2Ban, este mecanismo no bloquea las IP",
|
||||
"calloutBody": "ProxMenux Monitor comprueba las IP bloqueadas por Fail2Ban a <em>nivel de aplicación</em> antes de procesar las peticiones de Flask. Consulta fail2ban-client y guarda el resultado en caché durante 30 segundos; no lee ninguna tabla SQL de bloqueos. Sin Fail2Ban, los intentos fallidos se registran en <code>proxmenux-auth.log</code>, pero este mecanismo no bloquea IPs."
|
||||
},
|
||||
"lynis": {
|
||||
"heading": "Lynis Security Audit",
|
||||
"subHeading": "(condicional)",
|
||||
"whatIs": "<strong>Qué es.</strong> Lynis es una herramienta open-source de auditoría de seguridad que ejecuta ~280 tests en el host (permisos de archivos, hardening del kernel, config SSH, vulnerabilidades de paquetes, política de cripto, tareas programadas, banner grabbing, etc.) y produce una puntuación de hardening 0–100, una lista de warnings y una lista de sugerencias. Es la baseline de facto para \"¿este servidor está en buena forma?\" en servidores basados en Debian.",
|
||||
"whyUseful": "<strong>Por qué es útil.</strong> Conocer la postura de seguridad de tu servidor es difícil de hacer leyendo archivos de config uno a uno. Lynis captura las cosas que rutinariamente se pasan por alto: flags de hardening del kernel ausentes, cifrados SSH débiles activos, journal no persistente, <code>NOPASSWD</code> en sudoers para cuentas por defecto, y muchas más. Volver a ejecutarlo tras aplicar los ajustes post-instalación de ProxMenux te da un número objetivo de la mejora.",
|
||||
"notInstalledAlt": "Tarjeta Lynis Security Audit con estado Not Installed y botón Install Lynis, listando features: scoring de hardening, detección de vulnerabilidades, comprobación de compliance y fuente GitHub",
|
||||
"heading": "Auditoría de seguridad de Lynis",
|
||||
"subHeading": "(según el estado)",
|
||||
"whatIs": "<strong>Qué es.</strong> Lynis es una herramienta de auditoría de seguridad de código abierto que realiza unas 280 pruebas del host: permisos, protección del kernel, SSH, vulnerabilidades de paquetes, política criptográfica, tareas programadas e identificación de servicios, entre otras. Genera un índice de seguridad de 0 a 100, avisos y sugerencias. Se usa como referencia para evaluar servidores basados en Debian.",
|
||||
"whyUseful": "<strong>Por qué es útil.</strong> Evaluar la seguridad leyendo cada archivo de configuración resulta difícil. Lynis detecta fallos habituales: opciones de protección del kernel ausentes, cifrados SSH débiles, registros no persistentes o <code>NOPASSWD</code> en sudoers para cuentas predeterminadas. Repetir el análisis tras los ajustes de ProxMenux permite comparar la mejora con una puntuación.",
|
||||
"notInstalledAlt": "Tarjeta Lynis sin instalar con botón Instalar Lynis y funciones: puntuación de seguridad, detección de vulnerabilidades, cumplimiento y código en GitHub",
|
||||
"notInstalledCaption": "Tarjeta Lynis antes de instalar — la caja azul resume lo que hace la herramienta.",
|
||||
"notBundled": "Lynis tampoco <strong>viene de fábrica</strong>. ProxMenux instala la última release directamente desde la fuente oficial en GitHub (no el paquete Debian, que va varias versiones menores por detrás).",
|
||||
"confirmAlt": "Modal de confirmación Install Lynis listando lo que hace Lynis: scoring de hardening, detección de vulnerabilidades, análisis de configuración, comprobación de compliance, fuente desde el repositorio oficial de GitHub",
|
||||
"confirmCaption": "Confirmación de instalación — explícita sobre la fuente GitHub.",
|
||||
"progressAlt": "Panel en streaming Lynis Installation: instalando la última herramienta de scan, versión 3.1.6 confirmada, mensaje de instalación completada",
|
||||
"progressCaption": "Instalación en curso — el mismo patrón de panel en streaming que Fail2Ban.",
|
||||
"afterInstall": "Tras instalar la tarjeta muestra la versión y un historial de auditorías vacío. Pulsa <em>Run Security Audit</em> para arrancar el primer scan.",
|
||||
"installedAlt": "Tarjeta Lynis Security Audit tras instalar con insignia versión 3.1.6 Installed, timestamp Last Scan, Hardening Index 0, Warnings 0, Suggestions 0, fila de audit report vacía y botón Run Security Audit",
|
||||
"installedCaption": "Lynis instalado, sin auditoría todavía. La tarjeta prerrellena los tiles de métricas con ceros.",
|
||||
"runningAlt": "Tarjeta Lynis Security Audit mientras la auditoría está corriendo mostrando mensaje Security audit in progress, duración estimada de 2-5 minutos y un botón Running Audit deshabilitado",
|
||||
"runningCaption": "Auditoría en curso — el botón de acción muestra un spinner y la tarjeta avisa explícitamente de que el scan puede llevar 2–5 minutos.",
|
||||
"finishedBody": "Cuando termina, la tarjeta pasa a la vista de resultados: hardening index, warnings, suggestions y una lista <em>Audit Reports</em> con cada scan histórico.",
|
||||
"resultsAlt": "Tarjeta Lynis Security Audit con resultados: Hardening Index 71 con desglose Lynis 66 PVE 71, 3 warnings, 40 suggestions, barra de progreso Security Hardening Score Proxmox Adjusted 71 de 100 en el rango Good, lista de audit reports con descarga PDF y botón Run Security Audit",
|
||||
"resultsCaption": "Resultados de auditoría — Hardening Index <strong>71/100 (Good)</strong> en una ejecución de ejemplo. La tarjeta también muestra la \"puntuación raw de Lynis\" (66) frente a la puntuación ajustada para Proxmox (71) que devuelve 11 puntos por hallazgos que el corpus de tests de Lynis marca pero que son comportamiento esperado en Proxmox VE.",
|
||||
"scoreTitle": "Puntuación raw de Lynis vs puntuación ajustada para Proxmox",
|
||||
"scoreIntro": "Lynis trae reglas ajustadas para Debian de propósito general. Proxmox diverge legítimamente de algunas (servicios corriendo como root por razones de cluster, tuning custom de <code>journald</code>, etc.). La tarjeta muestra ambos números para que puedas:",
|
||||
"notBundled": "Lynis tampoco <strong>viene incluido</strong>. ProxMenux lo instala directamente desde el código oficial de GitHub en lugar del paquete de Debian.",
|
||||
"confirmAlt": "Diálogo de confirmación de Lynis con sus funciones: puntuación de seguridad, detección de vulnerabilidades, análisis de configuración, comprobación de cumplimiento y origen en el repositorio oficial de GitHub",
|
||||
"confirmCaption": "Confirmación de instalación que indica expresamente el origen en GitHub.",
|
||||
"progressAlt": "Panel de instalación de Lynis en directo, con instalación de la herramienta más reciente, versión 3.1.6 confirmada y mensaje de finalización",
|
||||
"progressCaption": "Instalación en curso: el panel muestra el registro en directo, igual que con Fail2Ban.",
|
||||
"afterInstall": "Tras la instalación, la tarjeta muestra la versión y un historial de auditorías vacío. Pulsa <em>Ejecutar auditoría de seguridad</em> para iniciar el primer análisis.",
|
||||
"installedAlt": "Tarjeta Lynis tras instalarse con versión 3.1.6, fecha del último análisis, índice de seguridad 0, avisos 0, sugerencias 0, informe vacío y botón Ejecutar auditoría de seguridad",
|
||||
"installedCaption": "Lynis instalado, aún sin auditorías. Los indicadores muestran ceros inicialmente.",
|
||||
"runningAlt": "Tarjeta Lynis durante la auditoría con mensaje de análisis en curso, duración estimada de 2 a 5 minutos y botón Auditoría en curso deshabilitado",
|
||||
"runningCaption": "Auditoría en curso: el botón muestra un indicador de carga y la tarjeta avisa de que el análisis puede tardar de 2 a 5 minutos.",
|
||||
"finishedBody": "Al terminar, la tarjeta muestra los resultados: índice de seguridad, avisos, sugerencias y la lista de <em>Informes de auditoría</em> con los análisis anteriores.",
|
||||
"resultsAlt": "Tarjeta Lynis con índice 71, desglose Lynis 66 y PVE 71, 3 avisos, 40 sugerencias, puntuación ajustada a Proxmox 71 de 100 en el rango Bueno, informes con descarga PDF y botón Ejecutar auditoría de seguridad",
|
||||
"resultsCaption": "Resultados de ejemplo: índice de seguridad <strong>71/100 (Bueno)</strong>. La tarjeta muestra la puntuación original de Lynis (66) y la ajustada para Proxmox (71). El ajuste depende de la puntuación original y de la proporción de hallazgos considerados normales en Proxmox VE; no suma 11 puntos fijos.",
|
||||
"scoreTitle": "Puntuación original de Lynis y puntuación ajustada para Proxmox",
|
||||
"scoreIntro": "Las reglas de Lynis están pensadas para Debian de uso general. Proxmox se aparta de algunas por motivos válidos, como servicios de clúster ejecutados como root o ajustes propios de <code>journald</code>. La tarjeta muestra ambas puntuaciones para:",
|
||||
"scoreItems": [
|
||||
"Trackear tu <em>puntuación raw de Lynis</em> igual que lo harían auditores externos.",
|
||||
"Trackear la puntuación <em>ajustada para Proxmox</em> — una baseline más justa si estás comparando nodos dentro del mismo cluster."
|
||||
"Seguir la evolución de la <em>puntuación original de Lynis</em>, como haría un auditor externo.",
|
||||
"Seguir la puntuación <em>ajustada para Proxmox</em>, una referencia más adecuada para comparar nodos del mismo clúster."
|
||||
],
|
||||
"reportBody": "<strong>El informe completo.</strong> Cada fila de auditoría en la lista tiene un botón <em>PDF</em> que descarga un informe de varias páginas con el resumen ejecutivo, info del sistema, postura de seguridad, cada warning con explicación, cada sugerencia rankeada por impacto y el inventario de paquetes. Es el artefacto que adjuntarías a una revisión de seguridad.",
|
||||
"reportAlt": "Primera página de ejemplo del PDF Lynis Security Audit Report mostrando resumen ejecutivo con hardening 71 de 100, contadores de warnings y suggestions, bloque de System Information con hostname, kernel, versión de Lynis, fecha del informe, resumen de postura de seguridad",
|
||||
"reportCaption": "Primera página de un informe descargado — resumen ejecutivo, System Information y resumen de postura de seguridad. El informe completo continúa con warnings detallados, sugerencias y la lista de paquetes instalados. Hay un <a>PDF de ejemplo</a> adjunto como referencia.",
|
||||
"reportBody": "<strong>Informe completo.</strong> El botón <em>PDF</em> de cada auditoría descarga un informe de varias páginas: resumen ejecutivo, información del sistema, estado de seguridad, avisos explicados, sugerencias ordenadas por impacto e inventario de paquetes. Puedes adjuntarlo a una revisión de seguridad.",
|
||||
"reportAlt": "Primera página de ejemplo del informe PDF de Lynis con resumen ejecutivo, índice 71 de 100, contadores de avisos y sugerencias, nombre de host, kernel, versión de Lynis, fecha y resumen del estado de seguridad",
|
||||
"reportCaption": "Primera página del informe descargado: resumen ejecutivo, información del sistema y estado de seguridad. Después incluye avisos detallados, sugerencias y paquetes instalados. Se adjunta un <a>PDF de ejemplo</a> como referencia.",
|
||||
"runPeriodically": "Ejecuta la auditoría periódicamente (tras grandes upgrades de Proxmox, tras aplicar ajustes post-instalación, antes de abrir una ruta de acceso remoto) y guarda los informes — la tendencia importa más que cualquier número aislado.",
|
||||
"outro": "El recorrido completo <em>Qué instala / cómo se configura / cómo desinstalar</em> y un análisis escrito del informe de ejemplo están en <link>ProxMenux → Seguridad → Lynis</link>."
|
||||
"outro": "La guía completa de <em>instalación, configuración y desinstalación</em> y el análisis de un informe de ejemplo están en <link>ProxMenux → Seguridad → Lynis</link>."
|
||||
},
|
||||
"dataCollected": {
|
||||
"heading": "Cómo se recopilan los datos",
|
||||
@@ -179,22 +179,22 @@
|
||||
{
|
||||
"card": "Autenticación, 2FA, cambio de contraseña",
|
||||
"endpoint": "/api/auth/*",
|
||||
"source": "SQLite local + JWT emitido por el Monitor."
|
||||
"source": "Configuración local de autenticación en ~/.config/proxmenux-monitor/auth.json; JWT emitidos por Monitor."
|
||||
},
|
||||
{
|
||||
"card": "SSL / HTTPS",
|
||||
"card": "SSL/HTTPS",
|
||||
"endpoint": "/api/auth/ssl/*",
|
||||
"source": "<code>openssl x509</code> sobre <code>/etc/pve/local/pve-ssl.pem</code> + <code>/etc/proxmenux/ssl_config.json</code>."
|
||||
},
|
||||
{
|
||||
"card": "Listar / generar / revocar tokens API",
|
||||
"card": "Listar, generar y revocar tokens de API",
|
||||
"endpoint": "/api/auth/api-tokens",
|
||||
"source": "Filas de token guardadas localmente; nada sale del host."
|
||||
},
|
||||
{
|
||||
"card": "Secure Gateway (deploy + estado)",
|
||||
"endpoint": "/api/oci/*",
|
||||
"source": "Provisiona LXC Alpine + <code>tailscaled</code> vía <code>pct create</code> / <code>pct exec</code>."
|
||||
"source": "Crea un LXC Alpine y configura <code>tailscaled</code> mediante <code>pct create</code> / <code>pct exec</code>."
|
||||
},
|
||||
{
|
||||
"card": "Estado y reglas de firewall",
|
||||
@@ -219,27 +219,27 @@
|
||||
{
|
||||
"label": "Acceso y autenticación",
|
||||
"href": "/docs/monitor/access-auth",
|
||||
"tail": " — flujo completo de primer arranque, selector de app 2FA, recuperación de authenticator perdido, snippets de reverse proxy."
|
||||
"tail": " — configuración inicial completa, selección de app 2FA, recuperación por pérdida del autenticador y ejemplos de proxy inverso."
|
||||
},
|
||||
{
|
||||
"label": "Integraciones",
|
||||
"href": "/docs/monitor/integrations",
|
||||
"tail": " — cookbooks para usar tokens API con Homepage, Home Assistant, Prometheus, n8n y el Secure Gateway de extremo a extremo."
|
||||
"tail": " — ejemplos de uso de tokens de API con Homepage, Home Assistant, Prometheus y n8n, y configuración completa de Secure Gateway."
|
||||
},
|
||||
{
|
||||
"label": "Referencia de la API",
|
||||
"href": "/docs/monitor/api",
|
||||
"tailRich": " — cada endpoint <code>/api/auth</code>, <code>/api/security</code> y <code>/api/oci</code> con método, body y ejemplos curl."
|
||||
"tailRich": " — endpoints de <code>/api/auth</code>, <code>/api/security</code> y <code>/api/oci</code> con método, cuerpo de petición y ejemplos de curl."
|
||||
},
|
||||
{
|
||||
"label": "ProxMenux → Seguridad → Fail2Ban",
|
||||
"href": "/docs/security/fail2ban",
|
||||
"tail": " — recorrido de instalación, jails configurados, ruta de instalación manual."
|
||||
"tail": " — guía de instalación, jails configurados e instalación manual."
|
||||
},
|
||||
{
|
||||
"label": "ProxMenux → Seguridad → Lynis",
|
||||
"href": "/docs/security/lynis",
|
||||
"tail": " — informe de ejemplo, interpretación del score, cuándo volver a ejecutarlo."
|
||||
"tail": " — informe de ejemplo, interpretación de la puntuación y cuándo repetir la auditoría."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,173 +1,173 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "ProxMenux Monitor — Panel: pestaña Ajustes | Documentación de ProxMenux",
|
||||
"description": "La pestaña Ajustes controla el idioma del Monitor, el orden de navegación, las preferencias del panel, los umbrales y exclusiones de salud, las notificaciones, la IA y el inventario de optimizaciones."
|
||||
"description": "La pestaña Ajustes controla idioma, orden de navegación, preferencias del panel, umbrales y exclusiones de supervisión, notificaciones, IA e inventario de optimizaciones posteriores a la instalación."
|
||||
},
|
||||
"header": {
|
||||
"title": "Panel: pestaña Ajustes",
|
||||
"description": "Idioma del Monitor, orden de navegación, preferencias del panel, exclusiones de monitorización, notificaciones, configuración de IA e inventario de optimizaciones de ProxMenux.",
|
||||
"description": "Idioma de Monitor, orden de navegación, preferencias del panel, exclusiones, notificaciones, IA e inventario actualizado de optimizaciones de ProxMenux.",
|
||||
"section": "ProxMenux Monitor · Panel"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Dónde vive realmente cada setting",
|
||||
"body": "La pestaña Ajustes reúne varias funciones distintas: cómo se muestra el panel, qué vigila el Monitor de salud, cómo se envían las alertas y qué cambios ha aplicado ProxMenux en el host. Las tarjetas que tienen su propia página de documentación enlazan a ella en lugar de duplicar el contenido: Ajustes es el punto de entrada."
|
||||
"title": "Dónde se guarda cada ajuste",
|
||||
"body": "Ajustes reúne la presentación del panel, la supervisión de Health Monitor, el envío de alertas y los cambios ya aplicados al host por ProxMenux. Las tarjetas con documentación detallada enlazan a ella; aquí encontrarás su punto de acceso."
|
||||
},
|
||||
"interfaceLanguage": {
|
||||
"heading": "Idioma de la interfaz",
|
||||
"intro": "Selecciona el idioma de la <strong>interfaz web del Monitor</strong>. El cambio se aplica de inmediato; no reinicia el servicio ni modifica el idioma de los menús de ProxMenux ejecutados en la terminal.",
|
||||
"intro": "Elige el idioma de la <strong>interfaz web del Monitor</strong>. Se aplica de inmediato, sin reiniciar el servicio ni cambiar el idioma de los menús de terminal de ProxMenux.",
|
||||
"items": [
|
||||
"ProxMenux Monitor ofrece actualmente inglés, alemán, español, francés, italiano, portugués, eslovaco y sueco.",
|
||||
"En la primera visita, el Monitor utiliza el idioma del navegador si está disponible; en caso contrario, utiliza inglés.",
|
||||
"Al cambiar la selección, se actualiza el idioma de la página y también el de otras pestañas abiertas con el mismo perfil del navegador.",
|
||||
"Si falta una cadena traducida, solo ese texto se muestra en inglés en lugar de presentar una clave rota."
|
||||
"En la primera visita usa el idioma del navegador si está disponible; en caso contrario, inglés.",
|
||||
"Cambiar la selección actualiza el idioma de la página y lo sincroniza con las demás pestañas del mismo perfil del navegador.",
|
||||
"Si falta una traducción, solo ese texto aparece en inglés en lugar de una clave o marcador roto."
|
||||
],
|
||||
"scopeTitle": "Preferencia local del navegador",
|
||||
"scopeBody": "La selección se guarda en <code>localStorage</code> con la clave <code>proxmenux-ui-language</code>. Por tanto, pertenece a este perfil de navegador y dispositivo; no es un ajuste global del nodo. Cada administrador puede utilizar un idioma distinto."
|
||||
"scopeBody": "La selección se guarda en <code>localStorage</code> con la clave <code>proxmenux-ui-language</code>. Pertenece al perfil y dispositivo actuales, no a todo el nodo. Cada administrador puede elegir su idioma."
|
||||
},
|
||||
"navigationOrder": {
|
||||
"heading": "Orden de navegación",
|
||||
"intro": "Esta tarjeta permite ordenar los siete elementos principales: <strong>Resumen, Apps, VMs y LXCs, Nodo, Copias, Terminal y Administración</strong>. Pulsa <strong>Editar</strong>, arrastra las filas y guarda el resultado.",
|
||||
"intro": "Ordena los siete elementos principales: <strong>Resumen, Apps, VMs y LXCs, Nodo, Copias, Terminal y Administración</strong>. Pulsa <strong>Editar</strong>, arrastra las filas y guarda.",
|
||||
"items": [
|
||||
"Con el ratón, el arrastre comienza al pulsar. En una pantalla táctil se utiliza una pulsación mantenida de 250 ms para no confundir el desplazamiento normal con una reordenación.",
|
||||
"Los grupos <strong>Nodo</strong> y <strong>Administración</strong> se mueven como unidades completas; sus páginas internas conservan el orden establecido por ProxMenux.",
|
||||
"El menú móvil respeta el mismo orden guardado.",
|
||||
"<strong>Restaurar valores predeterminados</strong> restablece el borrador. Es necesario guardar para aplicar el cambio.",
|
||||
"Si una versión futura añade una nueva pestaña principal, esta se incorpora al final del orden personalizado sin borrar la organización del usuario."
|
||||
"Con el ratón, el arrastre empieza al pulsar. En pantallas táctiles requiere mantener la pulsación 250 ms para distinguirlo del desplazamiento.",
|
||||
"Los grupos <strong>Nodo</strong> y <strong>Administración</strong> se mueven completos; sus páginas internas conservan el orden establecido.",
|
||||
"El menú móvil respeta el orden guardado.",
|
||||
"<strong>Restaurar valores predeterminados</strong> restablece el orden en edición. Guarda para aplicar el cambio.",
|
||||
"Las nuevas pestañas principales de futuras versiones se añaden al final del orden personalizado, conservando tu organización."
|
||||
],
|
||||
"landingTitle": "El primer elemento se convierte en la pestaña inicial",
|
||||
"landingBody": "El primer elemento guardado es la página que abre el Monitor al cargar. Si <strong>Nodo</strong> ocupa la primera posición, se abre Almacenamiento; si la ocupa <strong>Administración</strong>, se abren los Logs del sistema. El orden se guarda solo en este navegador con la clave <code>proxmenux-nav-order</code>, por lo que cada dispositivo puede utilizar una organización distinta."
|
||||
"landingTitle": "El primer elemento es la pestaña inicial",
|
||||
"landingBody": "Monitor abre el primer elemento guardado. Si es <strong>Nodo</strong>, abre Almacenamiento; si es <strong>Administración</strong>, abre Registros del sistema. El orden se guarda en este navegador bajo <code>proxmenux-nav-order</code>, por lo que cada dispositivo puede tener su propia organización."
|
||||
},
|
||||
"networkUnits": {
|
||||
"heading": "Network Units",
|
||||
"imageAlt": "Tarjeta Network Units con desplegable Network Unit Display puesto en Bytes",
|
||||
"imageCaption": "Elige entre bits por segundo y bytes por segundo para cada rate de red mostrado en el panel.",
|
||||
"body": "Elige cómo se muestra el throughput de red a lo largo del panel: <strong>bits por segundo</strong> (Mbps / Gbps) o <strong>bytes por segundo</strong> (MB/s / GB/s). Bits es el valor por defecto porque es como los fabricantes de NICs e ISPs etiquetan sus productos; bytes es lo que reportan la mayoría de herramientas de transferencia de archivos. El setting afecta cada gráfica, insignia y tooltip que muestra rate de red — aplicado inmediatamente, sin recargar."
|
||||
"heading": "Unidades de red",
|
||||
"imageAlt": "Tarjeta Unidades de red con el selector de visualización en Bytes",
|
||||
"imageCaption": "Elige bits por segundo o bytes por segundo para todas las velocidades de red del panel.",
|
||||
"body": "Muestra la velocidad de red en <strong>bits por segundo</strong> (Mbps/Gbps) o <strong>bytes por segundo</strong> (MB/s/GB/s). Por defecto se usan bits, como en las especificaciones de interfaces y proveedores; las transferencias de archivos suelen usar bytes. El cambio se aplica de inmediato a gráficos, etiquetas y ayudas, sin recargar."
|
||||
},
|
||||
"health": {
|
||||
"heading": "Monitor de salud",
|
||||
"intro": "La tarjeta expone el setting <strong>Suppression Duration</strong> por categoría — una vez se descarta una alerta, cuánto tiene que pasar antes de que se permita al escáner volver a dispararla. Cada una de las diez categorías del Monitor de salud (CPU, Memoria, Almacenamiento, Discos, Red, VMs, Servicios PVE, Logs, Updates, Seguridad) tiene su propio desplegable con estos valores:",
|
||||
"intro": "La tarjeta configura la <strong>duración del silenciamiento</strong>: cuánto debe esperar el análisis antes de volver a avisar de una alerta descartada. Cada categoría —CPU, memoria, almacenamiento, discos, red, VM, servicios PVE, registros, actualizaciones y seguridad— tiene su desplegable:",
|
||||
"items": [
|
||||
"<strong>24 h</strong> — por defecto para la mayoría de categorías transitorias.",
|
||||
"<strong>72 h</strong> — para eventos sobre los que quieres unos días de silencio.",
|
||||
"<strong>72 h</strong> — para silenciar estos eventos durante unos días.",
|
||||
"<strong>168 h</strong> (1 semana) y <strong>720 h</strong> (1 mes) — chequeos periódicos.",
|
||||
"<strong>8760 h</strong> (1 año) — efectivamente \"silencio en el futuro previsible\".",
|
||||
"<strong>8760 h</strong> (1 año) — silencio durante un periodo largo.",
|
||||
"<strong>-1</strong> — silencio permanente hasta que lo reactives manualmente.",
|
||||
"<strong>Custom hours</strong> — cualquier entero si necesitas un valor intermedio."
|
||||
"<strong>Horas personalizadas</strong>: cualquier número entero si necesitas un valor intermedio."
|
||||
],
|
||||
"imageAlt": "Card Settings → Monitor de salud con los desplegables de supresión por categoría y la sección Active Suppressions",
|
||||
"imageCaption": "Card Monitor de salud — los desplegables por categoría fijan los valores por defecto para nuevos dismisses; la sección Active Suppressions debajo lista cada alerta actualmente silenciada y permite revertirlas.",
|
||||
"editTitle": "Modo Edit",
|
||||
"editBody": "La tarjeta es de solo-lectura por defecto. Pulsa <strong>Edit</strong> en la esquina superior derecha de la card para activar los desplegables y los botones Re-enable. <strong>Save</strong> confirma todos los cambios pendientes (cambios de Suppression Duration y re-enables encolados) en un solo lote; <strong>Cancel</strong> los descarta todos. El botón Save solo se activa cuando hay al menos un cambio pendiente.",
|
||||
"activeTitle": "Active Suppressions",
|
||||
"activeIntro": "Debajo de los desplegables de Suppression Duration, la sección <strong>Active Suppressions</strong> lista cada alerta actualmente silenciada — tanto los dismisses time-limited (24 h, 7 días, ventanas custom) como los <em>Permanent</em>. Cada fila muestra:",
|
||||
"imageAlt": "Ajustes, tarjeta Health Monitor con duración por categoría y sección de silenciamientos activos",
|
||||
"imageCaption": "Los desplegables definen la duración para futuros descartes. La sección inferior muestra las alertas silenciadas y permite reactivarlas.",
|
||||
"editTitle": "Modo de edición",
|
||||
"editBody": "La tarjeta comienza en solo lectura. Pulsa <strong>Editar</strong> arriba a la derecha para activar desplegables y botones de reactivación. <strong>Guardar</strong> aplica en un lote las duraciones y reactivaciones pendientes; <strong>Cancelar</strong> las descarta. Guardar solo se activa cuando hay cambios.",
|
||||
"activeTitle": "Silenciamientos activos",
|
||||
"activeIntro": "Bajo las duraciones, <strong>Silenciamientos activos</strong> enumera las alertas silenciadas temporalmente —24 h, 7 días u otro periodo— y las <em>permanentes</em>. Cada fila muestra:",
|
||||
"activeItems": [
|
||||
"Un badge coloreado — <strong>Permanent</strong> (ámbar) o una cuenta atrás como <strong>24h remaining</strong> / <strong>7d remaining</strong> (azul).",
|
||||
"El identificador de la alerta, normalizado para legibilidad (p. ej. <code>pve_storage_full_PBS-Cloud</code> → <em>PVE Storage Full: PBS-Cloud</em>).",
|
||||
"Categoría, severidad y el timestamp en que se descartó la alerta.",
|
||||
"Un botón <strong>Re-enable</strong> (activo solo en modo Edit) que encola la alerta para ser un-acknowledged al siguiente Save."
|
||||
"Una insignia de color: <strong>Permanente</strong> en ámbar o una cuenta atrás, como <strong>24 h restantes</strong> / <strong>7 días restantes</strong>, en azul.",
|
||||
"El identificador de la alerta, adaptado para facilitar su lectura (p. ej. <code>pve_storage_full_PBS-Cloud</code> → <em>Almacenamiento PVE lleno: PBS-Cloud</em>).",
|
||||
"Categoría, gravedad y fecha y hora en que se descartó la alerta.",
|
||||
"Un botón <strong>Reactivar</strong>, disponible al editar, deja pendiente retirar el silenciamiento al guardar."
|
||||
],
|
||||
"activeReenableTitle": "Flujo de Re-enable",
|
||||
"activeReenableBody": "Pulsar <strong>Re-enable</strong> en modo Edit marca la fila en verde y tacha su identificador — está encolada pero todavía no aplicada. Volver a hacer clic en la misma fila la <strong>Undo</strong> (la saca de la cola). Cuando pulsas <strong>Save</strong>, cada re-enable encolado dispara <code>POST /api/health/un-acknowledge</code> en paralelo y las filas afectadas desaparecen de la lista. Si la condición subyacente sigue presente y la categoría soporta re-fire, la alerta reaparece en la lista Active del Monitor de salud en el siguiente ciclo de escaneo.",
|
||||
"activePermanentNote": "Los dismisses permanentes (alertas descartadas con <em>Permanently</em> desde el modal del Monitor, o aquellas cuya categoría tenga el default puesto a <code>-1</code>) <strong>solo se pueden revertir desde aquí</strong>. El modal del dashboard no expone un botón un-dismiss para ellas — el panel Active Suppressions es el único log de auditoría + UI de revert.",
|
||||
"activeAutoRefreshTitle": "Auto-refresh",
|
||||
"activeAutoRefreshBody": "La lista se refresca automáticamente cuando descartas o un-dismiss una alerta desde el modal del Monitor de salud (vía un evento in-browser), cuando la pestaña recupera el foco y al cambio de visibilidad. No necesitas recargar la página tras descartar una alerta desde el dashboard.",
|
||||
"calloutTitle": "La semántica completa vive en la página del Monitor de salud",
|
||||
"calloutBody": "Las reglas de escalada (cuándo un re-fire pasa a critical), el comportamiento de auto-resolve para eventos cuyo dispositivo subyacente desaparece y la diferencia entre dismissed y resolved — todo documentado bajo <link>Monitor de salud → Descartar alertas y la Suppression Duration</link>. Esta tarjeta solo expone los desplegables por categoría y el panel Active Suppressions."
|
||||
"activeReenableTitle": "Cómo reactivar una alerta",
|
||||
"activeReenableBody": "<strong>Reactivar</strong> al editar marca la fila en verde y tacha su identificador; aún no se aplica. Pulsa de nuevo para <strong>Deshacer</strong>. <strong>Guardar</strong> envía en paralelo <code>POST /api/health/un-acknowledge</code> por cada reactivación y retira sus filas. Si el problema persiste y la categoría permite repetir avisos, la alerta volverá a Activas en el próximo análisis.",
|
||||
"activePermanentNote": "Los descartes permanentes —mediante <em>Permanente</em> o duración predeterminada <code>-1</code>— <strong>solo se revierten aquí</strong>. El diálogo general no ofrece ese botón; esta sección reúne el registro y la reactivación.",
|
||||
"activeAutoRefreshTitle": "Actualización automática",
|
||||
"activeAutoRefreshBody": "La lista se actualiza al descartar o reactivar una alerta desde Health Monitor, al volver a la pestaña y al cambiar su visibilidad. No necesitas recargar la página.",
|
||||
"calloutTitle": "Detalles en la página de Health Monitor",
|
||||
"calloutBody": "Las reglas de escalado, la resolución automática cuando desaparece un dispositivo y la diferencia entre descartar y resolver se explican en <link>Health Monitor → Descartar alertas y duración del silenciamiento</link>. Esta tarjeta ofrece los desplegables y los silenciamientos activos."
|
||||
},
|
||||
"thresholds": {
|
||||
"heading": "Health Monitor Thresholds",
|
||||
"intro": "Donde la tarjeta anterior decide <em>cuánto tiempo quedarse callado tras un dismiss</em>, esta decide <strong>a qué valor se dispara una alerta en primer lugar</strong>. Cada chequeo que ejecuta el Monitor de salud está parametrizado por un par de números — un umbral <strong>Warning</strong> y un umbral <strong>Critical</strong> — y ambos se exponen aquí para que el operador los ajuste.",
|
||||
"heading": "Umbrales de Health Monitor",
|
||||
"intro": "La tarjeta anterior define <em>cuánto dura el silencio tras descartar</em>; esta define <strong>el valor que activa una alerta</strong>. La mayoría de controles tienen valores <strong>Aviso</strong> y <strong>Crítico</strong> ajustables. La tabla explica excepciones como la regla combinada de swap y el detector actual de RAM.",
|
||||
"whatForTitle": "Para qué sirve",
|
||||
"whatForIntro": "Los valores por defecto que vienen con ProxMenux son sensatos para el host Proxmox medio, pero cada entorno tiene su propio sobre operativo:",
|
||||
"whatForIntro": "Los valores predeterminados sirven como punto de partida, pero cada entorno tiene sus propias condiciones:",
|
||||
"whatForItems": [
|
||||
"Un homelab pequeño con un SSD único puede querer avisar antes en capacidad (75 / 90 %) para dejar margen a snapshots.",
|
||||
"Un host de datacenter con nodos Ceph redundantes puede ser más relajado en avisos de memoria (un working set al 90 % es normal bajo ARC de ZFS).",
|
||||
"Un mini-PC con refrigeración pasiva necesita umbrales de temperatura más bajos que un servidor con refrigeración forzada por aire — misma clase de drive, sobre físico distinto.",
|
||||
"Un host muy virtualizado que clava CPU durante builds no debería avisar en cada pico del 80 %, pero sí debe seguir alertando sobre presión sostenida."
|
||||
"Un homelab con un único SSD puede avisar antes de llenarse, por ejemplo al 75/90 %, para dejar margen a las instantáneas.",
|
||||
"Los umbrales de memoria deben reflejar las mediciones y la carga del host. La redundancia Ceph no justifica por sí sola relajar avisos, y el uso elevado de ARC de ZFS no equivale a memoria de trabajo irrecuperable.",
|
||||
"Elige umbrales de temperatura según las especificaciones del disco y sus condiciones reales. La refrigeración pasiva o forzada no determina por sí sola un límite seguro universalmente más bajo o más alto.",
|
||||
"Un host muy virtualizado puede alcanzar picos de CPU durante compilaciones sin necesitar avisos por cada pico del 80 %, pero debe seguir avisando de saturación sostenida."
|
||||
],
|
||||
"whatForOutro": "Editar un umbral surte efecto <strong>en el siguiente scan</strong> — el Monitor de salud relee los valores desde <code>/usr/local/share/proxmenux/health_thresholds.json</code> en cada ciclo, sin reinicio de servicio. Los mismos números también alimentan los rangos de color de los widgets del panel (la línea de temperatura en la modal de temperatura de disco, las barras de las tarjetas de almacenamiento) para que la clasificación visual coincida con lo que dispara la alerta.",
|
||||
"coloursTitle": "Colores de estado: cómo renderizan Warning y Critical en el panel",
|
||||
"coloursIntro": "Cada umbral de abajo produce la misma clasificación de tres estados a lo largo del panel — los mismos colores para barras de almacenamiento, anillos de CPU/memoria, chips de temperatura y el punto de la modal de disco. Leer un color en cualquier sitio del Monitor mapea a un rango definido relativo al par configurado:",
|
||||
"whatForOutro": "Los cambios admitidos se aplican <strong>en el siguiente análisis</strong>. Health Monitor lee <code>/usr/local/share/proxmenux/health_thresholds.json</code> cada ciclo sin reinicio. Algunos indicadores, como temperatura de disco, usan estos valores; ciertas barras de capacidad conservan sus propios cortes. La fila de RAM explica una excepción actual.",
|
||||
"coloursTitle": "Colores de estado de Aviso y Crítico",
|
||||
"coloursIntro": "Los widgets que usan el par Aviso/Crítico siguen los tres estados siguientes. Algunos indicadores, como las barras de capacidad PVE, tienen límites propios; su color no basta para deducir una alerta de Health Monitor.",
|
||||
"headerColour": "Color",
|
||||
"headerRange": "Rango",
|
||||
"headerMeaning": "Significado",
|
||||
"colourRows": [
|
||||
{
|
||||
"colour": "Verde",
|
||||
"range": "valor < Warning",
|
||||
"meaning": "Rango operativo normal. No se dispara alerta."
|
||||
"range": "Valor < Aviso",
|
||||
"meaning": "Rango normal. No se genera alerta."
|
||||
},
|
||||
{
|
||||
"colour": "Ámbar",
|
||||
"range": "Warning ≤ valor < Critical",
|
||||
"meaning": "Estado warning. El Monitor de salud dispara un evento de severidad WARNING; las notificaciones respetan los filtros del canal y las Quiet Hours."
|
||||
"range": "Aviso ≤ valor < Crítico",
|
||||
"meaning": "Estado de aviso. Health Monitor genera un evento WARNING; las notificaciones respetan filtros de canal y horario de silencio."
|
||||
},
|
||||
{
|
||||
"colour": "Rojo",
|
||||
"range": "valor ≥ Critical",
|
||||
"meaning": "Estado critical. El Monitor de salud dispara un evento CRITICAL; CRITICAL salta las Quiet Hours y siempre alcanza al canal."
|
||||
"range": "Valor ≥ Crítico",
|
||||
"meaning": "Estado crítico. Health Monitor genera un evento CRITICAL que omite el horario de silencio. Siguen aplicándose los ajustes de categoría y evento del canal; la entrega también depende de su disponibilidad."
|
||||
}
|
||||
],
|
||||
"sectionsTitle": "Secciones y valores por defecto recomendados",
|
||||
"sectionsIntro": "Estos son los valores con los que viene ProxMenux — la baseline recomendada. Es lo que ves en un host recién montado hasta que sobreescribes algo. Las secciones están ordenadas de arriba abajo de <em>cómputo</em> → <em>calor</em> → <em>capacidad de almacenamiento</em>, así que leer hacia abajo va de lo concreto (carga actual) al estado acumulado (espacio libre).",
|
||||
"sectionsTitle": "Secciones y valores predeterminados recomendados",
|
||||
"sectionsIntro": "Son los valores iniciales de ProxMenux hasta que los cambies. Las secciones van de <em>carga de cómputo</em> a <em>temperatura</em> y <em>capacidad de almacenamiento</em>, desde la carga actual al espacio ocupado.",
|
||||
"headerSection": "Sección",
|
||||
"headerWarning": "Warning",
|
||||
"headerCritical": "Critical",
|
||||
"headerWarning": "Aviso",
|
||||
"headerCritical": "Crítico",
|
||||
"headerGates": "Qué controla",
|
||||
"thresholdRows": [
|
||||
{
|
||||
"section": "Uso de CPU",
|
||||
"warning": "85 %",
|
||||
"critical": "95 %",
|
||||
"gates": "Alerta de carga sostenida cuando la CPU promedia por encima del umbral durante la ventana de scan."
|
||||
"gates": "Alerta de carga sostenida cuando la CPU media supera el umbral durante el periodo de análisis."
|
||||
},
|
||||
{
|
||||
"section": "Memoria",
|
||||
"warning": "85 %",
|
||||
"critical": "95 %",
|
||||
"gates": "Presión de RAM en el host."
|
||||
"gates": "Presión de RAM del host. La configuración muestra Crítico al 95 %, pero el detector actual usa una regla fija del 90 % sostenido; cambiar ese ajuste no modifica actualmente esa rama de ejecución."
|
||||
},
|
||||
{
|
||||
"section": "Swap (solo critical)",
|
||||
"section": "Uso de swap (solo crítico)",
|
||||
"warning": "—",
|
||||
"critical": "5 %",
|
||||
"gates": "Swap realmente en uso. El número es intencionadamente bajo: un host Proxmox sano apenas debería tocar swap, así que incluso un 5 % es una señal significativa de presión de RAM."
|
||||
"critical": "80 %",
|
||||
"gates": "El estado CRITICAL de swap exige superar el 80 % de swap y tener menos del 15 % de RAM disponible, sostenido en las muestras. El swap ocupado por sí solo no activa esta regla."
|
||||
},
|
||||
{
|
||||
"section": "Temperatura de CPU",
|
||||
"warning": "80 °C",
|
||||
"critical": "90 °C",
|
||||
"gates": "Lectura de temperatura de package / core de CPU desde <code>lm-sensors</code>."
|
||||
"gates": "Temperatura del conjunto o de los núcleos de CPU obtenida de <code>lm-sensors</code>."
|
||||
},
|
||||
{
|
||||
"section": "Temp de disco — HDD",
|
||||
"warning": "60 °C",
|
||||
"critical": "65 °C",
|
||||
"gates": "Drives spinning estándar. El sobre del fabricante topa alrededor de 60–65 °C, así que Critical se fija justo en el límite duro."
|
||||
"gates": "Temperatura HDD. Valores iniciales: aviso a 60 °C y crítico a 65 °C. Son valores de supervisión, no un límite universal del fabricante; consulta las especificaciones del modelo."
|
||||
},
|
||||
{
|
||||
"section": "Temp de disco — SSD",
|
||||
"warning": "70 °C",
|
||||
"critical": "75 °C",
|
||||
"gates": "SSDs SATA 2.5'' / M.2 — corren más frescos que NVMe pero más calientes que HDDs."
|
||||
"gates": "SSD SATA de 2,5 pulgadas o M.2. Esta clase usa valores iniciales de 70/75 °C; los límites reales dependen del modelo."
|
||||
},
|
||||
{
|
||||
"section": "Temp de disco — NVMe",
|
||||
"warning": "80 °C",
|
||||
"critical": "85 °C",
|
||||
"gates": "Los drives NVMe corren más calientes por diseño; los controladores auto-throttlean por encima de ~85 °C, así que Warning captura la escalada antes de que entre el throttling."
|
||||
"gates": "Temperatura NVMe. Esta clase usa valores iniciales de 80/85 °C. La temperatura de limitación del controlador varía por modelo y no siempre es 85 °C."
|
||||
},
|
||||
{
|
||||
"section": "Temp de disco — SAS",
|
||||
"warning": "55 °C",
|
||||
"critical": "65 °C",
|
||||
"gates": "Los drives SAS enterprise comparten el mismo límite de fabricante de ~65 °C que los HDDs, pero se despliegan normalmente en chasis rack con refrigeración activa. Una lectura a 55 °C ya señala un problema de refrigeración (ventilador fallando, problema de HVAC) <em>antes</em> de que el propio drive esté en riesgo — de ahí un Warning más bajo que HDD, no porque SAS sea menos tolerante al calor."
|
||||
"gates": "Temperatura SAS. Esta clase usa aviso a 55 °C y crítico a 65 °C. Son <em>valores de supervisión</em>, no una prueba de fallo de refrigeración a 55 °C ni un límite universal del fabricante."
|
||||
},
|
||||
{
|
||||
"section": "Espacio de disco — host",
|
||||
"warning": "85 %",
|
||||
"critical": "95 %",
|
||||
"gates": "Capacidad de <code>/</code> y cada mountpoint del host (<code>/var/lib/vz</code>, <code>/mnt/*</code>…)."
|
||||
"gates": "Capacidad de <code>/</code> y de cada punto de montaje del host (<code>/var/lib/vz</code>, <code>/mnt/*</code>…)."
|
||||
},
|
||||
{
|
||||
"section": "Espacio de disco — rootfs LXC",
|
||||
@@ -176,105 +176,105 @@
|
||||
"gates": "Disco raíz por contenedor, evaluado contra el tamaño del rootfs según PVE."
|
||||
},
|
||||
{
|
||||
"section": "Mount points LXC",
|
||||
"section": "Puntos de montaje LXC",
|
||||
"warning": "85 %",
|
||||
"critical": "95 %",
|
||||
"gates": "Capacidad de mountpoints dentro de CTs en ejecución (mp0, mp1, NFS, bind mounts). Excluye rootfs."
|
||||
"gates": "Capacidad de montajes en CT en ejecución: mp0, mp1, NFS y bind mounts. Excluye rootfs."
|
||||
},
|
||||
{
|
||||
"section": "Almacenamiento PVE",
|
||||
"warning": "85 %",
|
||||
"critical": "95 %",
|
||||
"gates": "Almacenamientos PVE estilo bloque (LVM, LVM-thin, ZFS-pool, RBD/Ceph, PBS)."
|
||||
"gates": "Almacenamientos gestionados por PVE: LVM, LVM-thin, ZFS-pool, RBD/Ceph y PBS. No todos son backends de bloques."
|
||||
},
|
||||
{
|
||||
"section": "Pool ZFS",
|
||||
"warning": "85 %",
|
||||
"critical": "95 %",
|
||||
"gates": "Pools ZFS a nivel host — independiente del registro PVE."
|
||||
"gates": "Pools ZFS del host, con independencia de su registro en PVE."
|
||||
}
|
||||
],
|
||||
"defaultsTitle": "Valores por defecto, overrides y reset",
|
||||
"defaultsBody": "El backend expone una vista fundida: cada sección parte de los valores por defecto de ProxMenux (los que ves cuando el host está recién hecho) y sobreescribes solo los knobs que te importan. La tarjeta muestra el valor <em>efectivo</em> — la sobreescritura si pones una, en otro caso el valor por defecto. Un botón <strong>Reset</strong> limpia cada override y vuelve a los valores por defecto en todas las secciones de una vez.",
|
||||
"defaultsTitle": "Valores predeterminados, modificaciones y restablecimiento",
|
||||
"defaultsBody": "Cada sección parte de los valores predeterminados y solo guardas las modificaciones necesarias. La tarjeta muestra el valor <em>efectivo</em>: tu modificación o el valor inicial. <strong>Restablecer</strong> borra todas las modificaciones y restaura los valores de todas las secciones.",
|
||||
"validationTitle": "Validación",
|
||||
"validationBody": "Guardar rechaza valores que no tienen sentido (porcentajes fuera de 0–100, critical por debajo de warning, temperaturas negativas). El frontend muestra el error inline; el backend valida otra vez antes de persistir, así que no se puede engañar a la API con un PUT hecho a mano para que acepte un umbral roto."
|
||||
"validationBody": "Al guardar se comprueban los rangos permitidos y se rechaza Crítico por debajo de Aviso. La interfaz muestra errores y el servidor vuelve a validar las peticiones API antes de guardar."
|
||||
},
|
||||
"lxcDetection": {
|
||||
"heading": "LXC Update Detection",
|
||||
"imageAlt": "Tarjeta LXC Update Detection con un único switch — cuando está activo, el Monitor escanea periódicamente contenedores LXC Debian/Ubuntu/Alpine en ejecución buscando paquetes con update pendiente.",
|
||||
"imageCaption": "El toggle para el scan periódico <code>apt list --upgradable</code> / <code>apk list -u</code> a lo largo de cada CT en ejecución. Por defecto ON. El toggle de notificación correspondiente en Notifications → Services solo aparece mientras la detección está activa.",
|
||||
"intro": "Un toggle dedicado para el scan de actualizaciones LXC, situado entre Health Monitor Thresholds y la tarjeta Notifications. Cuando está ON, ProxMenux recorre cada CT en ejecución del host y consulta al gestor de paquetes dentro del contenedor por updates pendientes; los resultados aterrizan en los contadores de insignias de la pestaña Hardware y alimentan la notificación <code>lxc_updates_available</code>. Cuando está OFF, el scan se detiene por completo (sin llamadas <code>pct exec</code>) y cualquier entrada LXC existente en <code>managed_installs.json</code> se purga inmediatamente, así el panel y el endpoint <code>/api/managed-installs</code> dejan de reportar estado de update LXC sin esperar al siguiente ciclo de 24h.",
|
||||
"whatRunsTitle": "Qué ejecuta realmente el scan",
|
||||
"whatRunsIntro": "Para cada CT en estado <code>running</code> con un gestor de paquetes soportado:",
|
||||
"heading": "Detección de actualización de LXC",
|
||||
"imageAlt": "Tarjeta de detección de actualizaciones LXC con interruptor para buscar paquetes pendientes en contenedores Debian, Ubuntu y Alpine en ejecución",
|
||||
"imageCaption": "Interruptor del análisis periódico con <code>apt list --upgradable</code> / <code>apk list -u</code> en los CT en ejecución. Viene activado. El interruptor de aviso en Notificaciones → Servicios aparece mientras la detección está activa.",
|
||||
"intro": "El interruptor entre Umbrales y Notificaciones controla el análisis LXC. Al activarlo, consulta los gestores de paquetes de CT en ejecución; los resultados aparecen en Hardware y alimentan <code>lxc_updates_available</code>. Al desactivarlo, cesan sus llamadas <code>pct exec</code> y se eliminan las entradas LXC de <code>managed_installs.json</code>, por lo que <code>/api/managed-installs</code> deja de mostrar ese estado sin esperar 24 h.",
|
||||
"whatRunsTitle": "Qué ejecuta el análisis",
|
||||
"whatRunsIntro": "Para cada CT en estado <code>running</code> con un gestor de paquetes compatible:",
|
||||
"whatRunsItems": [
|
||||
"<strong>Gate de frescura de caché.</strong> Si la caché de metadatos apt/apk dentro del contenedor es más vieja que <strong>24 horas</strong>, primero corre un refresh best-effort (<code>apt-get update -qq</code> en Debian/Ubuntu, <code>apk update</code> en Alpine) con un timeout de 60 s. Cualquier fallo (sin red, repo roto, timeout) se traga en silencio — el listado de abajo sigue corriendo contra la caché que exista, así que un problema transitorio de repo nunca puede empeorar la detección.",
|
||||
"<strong>Listing.</strong> Después ProxMenux ejecuta <code>apt list --upgradable</code> / <code>apk list -u</code> y parsea la salida en un recuento estructurado más una muestra de los nombres de paquetes top.",
|
||||
"<strong>Dedup por CT.</strong> Una fingerprint construida a partir del recuento, security-count y los nombres top ordenados se almacena para que un conjunto estable de updates pendientes no re-notifique diariamente, mientras que un conjunto significativamente distinto sí lo haga."
|
||||
"<strong>Actualización de metadatos.</strong> Si la caché apt/apk supera <strong>24 horas</strong>, intenta renovarla con <code>apt-get update -qq</code> en Debian/Ubuntu o <code>apk update</code> en Alpine, con límite de 60 s. Si falla, el listado usa la caché disponible y puede estar desactualizado.",
|
||||
"<strong>Listado.</strong> Ejecuta <code>apt list --upgradable</code> / <code>apk list -u</code> y obtiene el número de paquetes y una muestra de sus nombres.",
|
||||
"<strong>Evitar duplicados por CT.</strong> Guarda una huella del total, las actualizaciones de seguridad y los nombres ordenados para no repetir avisos diarios del mismo conjunto. Un cambio relevante sí vuelve a avisar."
|
||||
],
|
||||
"selfUpdateTitle": "Los CTs que se auto-actualizan fuera de apt pueden legítimamente reportar 0",
|
||||
"selfUpdateBody": "La detección solo ve lo que el gestor de paquetes dentro del contenedor conoce. Un CT cuyo software clave se actualiza fuera de apt (el cron <code>plexupdate</code> de Plex, contenedores Docker actualizados vía <code>docker pull</code>, el actualizador integrado de Frigate, etc.) seguirá reportando updates apt bajos o cero aunque el appliance se mantenga al día activamente — eso es correcto, no es un bug. El sistema base a nivel apt del mismo CT puede aún tener sus propios updates pendientes, que sí saca a la luz el scan.",
|
||||
"refreshTitle": "Por qué el auto-refresh de 24 h",
|
||||
"refreshBody": "Los CTs appliance de larga vida con frecuencia acaban con cachés apt meses desactualizadas porque nadie ejecuta rutinariamente <code>apt update</code> dentro de ellos. Sin el refresh, <code>apt list --upgradable</code> reporta 0 updates desde una snapshot congelada y el operador nunca ve el backlog. El umbral coincide con el resto del ciclo de chequeo — si el CT se refrescó en las últimas 24 h, ProxMenux confía en esa señal y se salta el refresh.",
|
||||
"toggleTitle": "Toggle de notificación condicional",
|
||||
"toggleBody": "El toggle de notificación por canal <code>lxc_updates_available</code> en <strong>Notifications → Services</strong> solo se renderiza mientras la detección está activa. Cuando pones la detección en OFF, esa fila desaparece de la lista de categorías de cada canal — pero su preferencia almacenada se preserva en la DB, así que reactivar la detección trae el toggle de vuelta al valor que tenía antes.",
|
||||
"purgeTitle": "Qué se purga al desactivar la detección",
|
||||
"purgeBody": "Apagar el switch elimina inmediatamente cada entrada <code>type=lxc</code> de <code>/usr/local/share/proxmenux/managed_installs.json</code>. Las insignias de la pestaña Hardware caen a cero en el siguiente refresco del panel. Volver a activarlo repuebla el registro en el siguiente ciclo de detección (o antes si disparas un refresh manual desde la API)."
|
||||
"selfUpdateTitle": "Los CT con actualizaciones fuera de apt pueden mostrar 0",
|
||||
"selfUpdateBody": "La detección solo cubre el gestor de paquetes del CT. Software actualizado fuera de apt, como un trabajo <code>plexupdate</code> configurado o imágenes obtenidas con <code>docker pull</code>, queda fuera del recuento. Cero actualizaciones apt no demuestra que todas las aplicaciones estén al día. El sistema base del CT puede tener paquetes pendientes que sí se detectan.",
|
||||
"refreshTitle": "Por qué renovar los metadatos cada 24 h",
|
||||
"refreshBody": "Un CT de larga duración puede tener metadatos apt antiguos si nadie ejecuta <code>apt update</code>. Entonces <code>apt list --upgradable</code> puede omitir actualizaciones recientes. ProxMenux intenta renovarlos si tienen más de 24 horas y omite el paso si son más recientes.",
|
||||
"toggleTitle": "Interruptor de aviso condicionado a la detección",
|
||||
"toggleBody": "El interruptor por canal <code>lxc_updates_available</code> en <strong>Notificaciones → Servicios</strong> solo aparece con la detección activa. Al desactivarla, la fila se oculta en todos los canales. Su preferencia se conserva en la base de datos y recupera el mismo valor al reactivarla.",
|
||||
"purgeTitle": "Qué se elimina al desactivar la detección",
|
||||
"purgeBody": "Desactivarlo elimina de inmediato las entradas <code>type=lxc</code> de <code>/usr/local/share/proxmenux/managed_installs.json</code>. Los contadores de actualizaciones LXC de Hardware desaparecen en el siguiente refresco. Al reactivarlo, el próximo ciclo de detección repuebla el registro, o antes con una actualización manual de la API."
|
||||
},
|
||||
"storageExclusions": {
|
||||
"heading": "Remote Storage Exclusions",
|
||||
"imageAlt": "Tarjeta Remote Storage Exclusions listando almacenamientos PBS-Cloud, PBS y PBS2 con toggles Health y Alerts por fila",
|
||||
"imageCaption": "Toggles <em>Health</em> y <em>Alerts</em> por almacenamiento. Los almacenamientos con ambos toggles en off dejan de contar contra el Monitor de salud y dejan de generar notificaciones — pero siguen renderizándose en la pestaña Almacenamiento marcados como excluidos.",
|
||||
"intro": "Marca los almacenamientos gestionados por Proxmox (NFS / CIFS / PBS / Ceph / iSCSI / etc.) como excluidos de monitorización. Dos toggles independientes por almacenamiento:",
|
||||
"heading": "Exclusiones de almacenamiento remoto",
|
||||
"imageAlt": "Tarjeta de exclusiones de almacenamiento remoto con PBS-Cloud, PBS y PBS2 y controles de Estado y Alertas por fila",
|
||||
"imageCaption": "Controles <em>Estado</em> y <em>Alertas</em> por almacenamiento. Con ambos desactivados, deja de participar en Health Monitor y de enviar avisos. Sigue visible en Almacenamiento, marcado como excluido.",
|
||||
"intro": "Puedes excluir almacenamientos gestionados por Proxmox (NFS / CIFS / PBS / Ceph / iSCSI / etc.) con dos controles independientes:",
|
||||
"items": [
|
||||
"<strong>Health</strong> — cuando está off, el almacenamiento deja de contribuir a la categoría Almacenamiento del Monitor de salud. Útil para volúmenes de archivo que están intencionadamente offline la mayor parte del tiempo o destinos de backup remotos que solo se encienden a horario.",
|
||||
"<strong>Alerts</strong> — cuando está off, las alertas sobre este almacenamiento dejan de salir a través de los canales configurados, aunque los chequeos Health sigan activos. Útil cuando quieres la vista del panel pero no las notificaciones."
|
||||
"<strong>Estado</strong> — al desactivar este control, el almacenamiento deja de contar en la categoría Almacenamiento de Health Monitor. Útil para volúmenes de archivo habitualmente desconectados o destinos remotos de copia que solo se encienden según un horario.",
|
||||
"<strong>Alertas</strong> — desactivarlo impide enviar avisos de este almacenamiento por los canales configurados, aunque los controles de estado sigan activos. Útil si quieres ver su estado en el panel sin recibir avisos."
|
||||
],
|
||||
"outro": "Los almacenamientos excluidos siguen renderizándose en la <link>pestaña Almacenamiento</link> con una insignia morada <em>excluded</em> para que la entrada no desaparezca silenciosamente de tu inventario. El estado se persiste en la tabla SQLite <code>excluded_storages</code>."
|
||||
"outro": "Los almacenamientos excluidos siguen en la <link>pestaña Almacenamiento</link> con la insignia morada <em>excluido</em>, para mantener visible el inventario. El estado se guarda en la tabla SQLite <code>excluded_storages</code>."
|
||||
},
|
||||
"interfaceExclusions": {
|
||||
"heading": "Network Interface Exclusions",
|
||||
"imageAlt": "Tarjeta Network Interface Exclusions listando vmbr0, vmbr1, vmbr2, bond0 y eno1 con toggles Health y Alerts por interfaz",
|
||||
"imageCaption": "La misma forma que Storage Exclusions — toggles <em>Health</em> y <em>Alerts</em> por interfaz. Cada fila muestra la interfaz, insignia de tipo (bridge / bond / física), la IP y la velocidad del enlace.",
|
||||
"intro": "La misma forma que Storage Exclusions pero para interfaces de red. Por interfaz: excluir de los chequeos Health y/o excluir de las notificaciones. Casos de uso típicos:",
|
||||
"heading": "Exclusiones de interfaz de red",
|
||||
"imageAlt": "Tarjeta de exclusiones de interfaces con vmbr0, vmbr1, vmbr2, bond0 y eno1 y controles de Estado y Alertas por interfaz",
|
||||
"imageCaption": "Igual que las exclusiones de almacenamiento, ofrece <em>Estado</em> y <em>Alertas</em> por interfaz. Cada fila muestra nombre, tipo (bridge / bond / física), IP y velocidad del enlace.",
|
||||
"intro": "El mismo principio se aplica a las interfaces: excluir cada una de los controles de estado, de los avisos o de ambos. Ejemplos habituales:",
|
||||
"items": [
|
||||
"Un bridge spare intencionadamente down.",
|
||||
"Una NIC que se retiró físicamente pero sigue referenciada en <code>/etc/network/interfaces</code>.",
|
||||
"Una sub-interfaz VLAN usada solo durante ventanas de mantenimiento.",
|
||||
"Un bridge de gestión que está up pero no lleva tráfico — flappeando ruidosamente en cada ciclo."
|
||||
"Un bridge de reserva desactivado intencionadamente.",
|
||||
"Una NIC retirada físicamente que aún figura en <code>/etc/network/interfaces</code>.",
|
||||
"Una subinterfaz VLAN usada solo durante tareas de mantenimiento.",
|
||||
"Un bridge de gestión con cambios de estado del enlace conocidos y repetidos durante el mantenimiento."
|
||||
],
|
||||
"outro": "El estado se persiste en la tabla SQLite <code>excluded_interfaces</code>. La misma insignia morada <em>excluded</em> en la <link>pestaña Red</link> para que las interfaces excluidas sigan visibles."
|
||||
"outro": "El estado se guarda en la tabla SQLite <code>excluded_interfaces</code>. La insignia morada <em>excluida</em> de la <link>pestaña Red</link> mantiene visibles las interfaces excluidas."
|
||||
},
|
||||
"notifications": {
|
||||
"heading": "Notificaciones e IA",
|
||||
"body1": "Esta sección de la pestaña Settings es donde se activan las notificaciones de ProxMenux Monitor y el reescritor con IA. Pulsar <em>Enable Notifications</em> arranca el hilo de envío en background, registra un target de webhook de Proxmox VE en el host para que los eventos emitidos por PVE fluyan al mismo pipeline y despliega el formulario de canales para que puedas conectar Telegram, Discord, Email, Gotify y el resto. El reescritor con IA vive dentro del mismo panel como una sección avanzada colapsable.",
|
||||
"body2": "Ambas superficies tienen muchas piezas en movimiento — canales, toggles por evento, mensajes Rich, el Display Name, el pipeline de envío (dedup, cooldown, agregación, quiet hours), la integración del webhook PVE, proveedores de IA, modos de prompt — y viven en sus propias páginas dedicadas en lugar de repetirse aquí:",
|
||||
"body1": "Aquí se activan las notificaciones de ProxMenux Monitor y la reformulación con IA. <em>Activar notificaciones</em> inicia el proceso de envío en segundo plano, registra un destino webhook de Proxmox VE para incorporar sus eventos y abre el formulario de canales: Telegram, Discord, correo, Gotify y otros. La reformulación con IA está en una sección avanzada desplegable del mismo panel.",
|
||||
"body2": "Sus opciones se explican en páginas propias: canales, controles por evento, mensajes enriquecidos, nombre visible, envío (duplicados, espera, agrupación y horario de silencio), webhook PVE, proveedores de IA y modos de instrucciones:",
|
||||
"items": [
|
||||
"<notifLink>Notificaciones</notifLink> — recorridos por canal (Telegram, Discord, Gotify, Email + app passwords de Gmail / Microsoft, ntfy, Slack, Teams, webhook genérico), categorías por evento, mensajes Rich, Display Name, pipeline de envío, integración del webhook PVE, historial y API.",
|
||||
"<aiLink>Asistente de IA</aiLink> — proveedores (OpenAI, Anthropic, Gemini, Groq, OpenRouter, Ollama), selección de modelo, modos de prompt (default / custom), idioma de salida, niveles de detalle por canal y sugerencias de IA."
|
||||
"<notifLink>Notificaciones</notifLink>: configuración de canales (Telegram, Discord, Gotify, correo y contraseñas de aplicación de Gmail / Microsoft, ntfy, Slack, Teams y webhook genérico), categorías por evento, mensajes enriquecidos, nombre visible, envío, webhook PVE, historial y API.",
|
||||
"<aiLink>Asistente de IA</aiLink>: proveedores (OpenAI, Anthropic, Gemini, Groq, OpenRouter, Ollama), modelos, instrucciones predeterminadas o personalizadas, idioma de salida, detalle por canal y sugerencias de IA."
|
||||
]
|
||||
},
|
||||
"optimizations": {
|
||||
"heading": "ProxMenux Optimizations",
|
||||
"intro": "Un inventario en vivo y transparente de cada optimización post-instalación de ProxMenux actualmente activa en el host. Cada vez que aplicas una opción post-instalación desde el lado Scripts — ya sea vía el <autoLink>Automated post-install</autoLink> o vía el <customLink>Customizable post-install</customLink> a la carta — el script correspondiente se registra a sí mismo en <code>/usr/local/share/proxmenux/installed_tools.json</code>. El Monitor lee ese archivo y renderiza esta tarjeta para que veas, de un vistazo, qué se ha cambiado en tu servidor.",
|
||||
"imageAlt": "Tarjeta ProxMenux Optimizations con rejilla de herramientas instaladas, cada fila mostrando un punto verde, nombre de la herramienta y versión. Ejemplos incluyen APT IPv4 Force, Bashrc Customization, Fastfetch, Log2ram SSD Protection, Memory Settings Optimization, Setting persistent network interfaces, System Limits Increase, APT Language Skip, Entropy Generation haveged con insignia Legacy, Kernel Panic Configuration, Logrotate Optimization, Network Optimizations, Subscription Banner Removal, VFIO IOMMU Passthrough — 14 activas en total",
|
||||
"imageCaption": "La tarjeta lista cada optimización activa con su nombre, versión, un punto coloreado y un contador naranja <em>14 active</em> arriba a la derecha. Las herramientas cuyo source es alcanzable son pulsables.",
|
||||
"heading": "Optimizaciones ProxMenux",
|
||||
"intro": "Inventario de optimizaciones posteriores a la instalación registradas por ProxMenux en el host. Las opciones de <autoLink>Instalación posterior automatizada</autoLink> y <customLink>Instalación posterior personalizable</customLink> registran su aplicación en <code>/usr/local/share/proxmenux/installed_tools.json</code>. Monitor usa ese registro para la tarjeta. Una entrada no comprueba de nuevo que todos los ajustes sigan intactos.",
|
||||
"imageAlt": "Tarjeta de optimizaciones ProxMenux con 14 entradas: punto de color, nombre y versión. Figuran APT IPv4 Force, Bashrc Customization, Fastfetch, Log2ram SSD Protection, Memory Settings Optimization, Setting persistent network interfaces, System Limits Increase, APT Language Skip, Entropy Generation haveged con Legacy, Kernel Panic Configuration, Logrotate Optimization, Network Optimizations, Subscription Banner Removal y VFIO IOMMU Passthrough.",
|
||||
"imageCaption": "Cada optimización aparece con nombre, versión y punto de color. Arriba a la derecha hay un contador naranja <em>14 activas</em>. Las herramientas con código fuente disponible se pueden abrir.",
|
||||
"dotsTitle": "Qué significan los puntos",
|
||||
"dotsItems": [
|
||||
"<green/> <strong>Punto verde</strong> — optimización actual, registrada por la versión activa de ProxMenux. El código fuente es alcanzable: pulsa la fila para abrirlo.",
|
||||
"<amber/> <strong>Punto ámbar + insignia <em>legacy</em></strong> — aplicada por una versión más vieja de ProxMenux cuyo script ha sido renombrado o reemplazado desde entonces. Sigue activa en el host; el source abre en modo \"legacy\" (con un acento ámbar) para que puedas auditar qué se ejecutó realmente."
|
||||
"<green/> <strong>Punto verde</strong>: optimización registrada sin marca Legacy ni actualización indicada. Pulsa la fila si tiene código fuente disponible.",
|
||||
"<amber/> <strong>Punto ámbar e insignia <em>legacy</em></strong>: optimización registrada cuyo script cambió de nombre o fue sustituido. Abre su código conservado en modo Legacy con detalles ámbar. No comprueba de nuevo la configuración actual del host."
|
||||
],
|
||||
"clickTitle": "Acceso al código fuente",
|
||||
"clickBody": "Pulsar una herramienta abre una modal con la función bash exacta que aplicó el cambio, más la ruta del archivo de script en el que vive (<code>auto_post_install.sh</code> para el bundle Automated, <code>customizable_post_install.sh</code> para el lado à la carte). Los comentarios y constructos de shell tienen syntax highlighting; un botón Copy pone el source en tu portapapeles. Esta es la superficie \"muestra tu trabajo\" — verifica lo que ProxMenux le hizo a tu host antes de cualquier cambio manual que añadas encima.",
|
||||
"detailAlt": "Modal de código fuente de herramienta para APT IPv4 Force mostrando la función bash force_apt_ipv4 desde customizable_post_install.sh versión 1.0 con código resaltado que configura /etc/apt/apt.conf.d/99-force-ipv4 con Acquire ForceIPv4 true, registra la herramienta y emite un mensaje translate APT IPv4 configuration completed",
|
||||
"detailCaption": "Modal de source para <em>APT IPv4 Force</em> — función <code>force_apt_ipv4()</code> exacta de <code>customizable_post_install.sh v1.0</code>, con syntax highlighting y un Copy de un clic.",
|
||||
"clickTitle": "Abrir el código fuente",
|
||||
"clickBody": "Pulsar una herramienta abre su función bash asociada y el nombre del script (<code>auto_post_install.sh</code> o <code>customizable_post_install.sh</code>). Para herramientas actuales se extrae del archivo del host; las antiguas pueden usar código conservado. Hay resaltado de sintaxis y Copiar. No garantiza una copia del código exacto ejecutado al instalar.",
|
||||
"detailAlt": "Ventana de código de APT IPv4 Force con la función bash force_apt_ipv4 de customizable_post_install.sh versión 1.0. El código resaltado configura /etc/apt/apt.conf.d/99-force-ipv4 con Acquire ForceIPv4 true, registra la herramienta y muestra un mensaje traducido de configuración APT IPv4 completada.",
|
||||
"detailCaption": "Código de <em>APT IPv4 Force</em>: función <code>force_apt_ipv4()</code> de <code>customizable_post_install.sh v1.0</code>, con resaltado de sintaxis y copia con un clic.",
|
||||
"whyTitle": "Por qué importa esto",
|
||||
"whyBody": "ProxMenux cambia cosas en tu host: parámetros de kernel, configuración de repositorios, bits de red, rotación de logs, passthrough de GPU, etc. Saber exactamente qué está activo es esencial antes de empezar a añadir customización manual encima — y aún más si un admin distinto opera el host del que lo montó. Esta tarjeta es el registro auditable de cada optimización actualmente en efecto, con el código exacto que la produjo.",
|
||||
"updatesTitle": "Banner Updates available",
|
||||
"updatesBody": "Cuando una optimización post-instalación tiene en disco una versión más nueva que la actualmente registrada en el host, la tarjeta muestra un banner \"Updates available\" arriba con el recuento y un botón <strong>Apply</strong>. Pulsar <strong>Apply</strong> abre un selector por optimización (el mismo disponible desde la entrada <em>Apply available updates</em> del menú Post-Install). Elige qué optimizaciones aplicar; ProxMenux relanza la función correspondiente y refresca la versión en el registro. Cuando todo está al día, el banner desaparece.",
|
||||
"updatesAlt": "Tarjeta ProxMenux Optimizations con un banner Updates available arriba — recuento de updates pendientes más un botón Apply que abre el selector por optimización",
|
||||
"updatesCaption": "El banner solo se renderiza cuando al menos una optimización tiene una versión más nueva en disco. Mira <link>Apply Available Updates</link> para el flujo completo de update y el equivalente Path-A en el menú de la shell.",
|
||||
"revertTitle": "Revertir una optimización",
|
||||
"revertBody": "La tarjeta es de solo lectura — para deshacer una optimización, ejecuta la opción correspondiente <link>Uninstall Optimizations</link> del menú ProxMenux Scripts. El paso de desinstalación elimina la entrada de <code>installed_tools.json</code>, así que desaparece de esta tarjeta en el siguiente refresco."
|
||||
"whyBody": "ProxMenux puede cambiar parámetros del kernel, repositorios, red, rotación de registros y passthrough de GPU. Revisa las optimizaciones registradas antes de añadir cambios manuales, sobre todo si otro administrador preparó el host. La tarjeta muestra el registro y el código disponible; no audita todos los ajustes actuales ni conserva un historial exacto de ejecución.",
|
||||
"updatesTitle": "Aviso de actualizaciones disponibles",
|
||||
"updatesBody": "Si la versión de una optimización disponible en disco supera la registrada en el host, aparece un aviso con el total y <strong>Aplicar</strong>. <strong>Aplicar</strong> abre un selector de optimizaciones, como <em>Aplicar actualizaciones disponibles</em> del menú posterior a la instalación. Elige cuáles actualizar: ProxMenux vuelve a ejecutar sus funciones y actualiza el registro. El aviso desaparece cuando no quedan versiones pendientes.",
|
||||
"updatesAlt": "Tarjeta de optimizaciones ProxMenux con aviso de actualizaciones disponibles, número pendiente y botón Aplicar para seleccionar optimizaciones",
|
||||
"updatesCaption": "El aviso aparece si al menos una optimización tiene una versión más reciente en disco. Consulta <link>Aplicar actualizaciones disponibles</link> para el proceso completo y la opción equivalente Path-A del menú de consola.",
|
||||
"revertTitle": "Deshacer una optimización",
|
||||
"revertBody": "Para deshacer una optimización, usa la opción correspondiente de <link>Desinstalar optimizaciones</link> en ProxMenux Scripts. Al desinstalar se elimina su entrada de <code>installed_tools.json</code> y desaparece de la tarjeta en el siguiente refresco."
|
||||
},
|
||||
"dataCollected": {
|
||||
"heading": "Cómo se recopilan los datos",
|
||||
@@ -285,22 +285,22 @@
|
||||
{
|
||||
"card": "Idioma de la interfaz",
|
||||
"endpoint": "localStorage",
|
||||
"source": "Preferencia del navegador <code>proxmenux-ui-language</code>, obtenida inicialmente del idioma del navegador cuando todavía no existe una selección guardada."
|
||||
"source": "Preferencia <code>proxmenux-ui-language</code> del navegador; inicialmente usa su idioma si no hay una elección guardada."
|
||||
},
|
||||
{
|
||||
"card": "Orden de navegación",
|
||||
"endpoint": "localStorage",
|
||||
"source": "Preferencia del navegador <code>proxmenux-nav-order</code>; también determina la pestaña inicial."
|
||||
"source": "Preferencia <code>proxmenux-nav-order</code> del navegador; también determina la pestaña inicial."
|
||||
},
|
||||
{
|
||||
"card": "Network Units",
|
||||
"card": "Unidades de red",
|
||||
"endpoint": "/api/settings",
|
||||
"source": "Persistido en la tabla SQLite de settings del panel."
|
||||
"source": "Guardado en la tabla de ajustes SQLite del panel."
|
||||
},
|
||||
{
|
||||
"card": "Duraciones del Monitor de salud",
|
||||
"card": "Duraciones de Health Monitor",
|
||||
"endpoint": "/api/health/settings",
|
||||
"source": "Duraciones de supresión por categoría en la DB de Health."
|
||||
"source": "Duración de silenciamiento por categoría en la base de datos de Health Monitor."
|
||||
},
|
||||
{
|
||||
"card": "Exclusiones de almacenamiento / interfaz",
|
||||
@@ -310,17 +310,17 @@
|
||||
{
|
||||
"card": "Panel Notificaciones e IA",
|
||||
"endpoint": "/api/notifications/*",
|
||||
"source": "Mira las páginas dedicadas <notifLink>Notificaciones</notifLink> / <aiLink>Asistente de IA</aiLink>."
|
||||
"source": "Consulta <notifLink>Notificaciones</notifLink> y <aiLink>Asistente de IA</aiLink>."
|
||||
},
|
||||
{
|
||||
"card": "Lista ProxMenux Optimizations",
|
||||
"card": "Lista de optimizaciones ProxMenux",
|
||||
"endpoint": "/api/proxmenux/installed-tools",
|
||||
"source": "Lee <code>/usr/local/share/proxmenux/installed_tools.json</code>, escrito por llamadas <code>register_tool</code> dentro de los scripts post-instalación."
|
||||
"source": "Lee <code>/usr/local/share/proxmenux/installed_tools.json</code>, escrito mediante llamadas a <code>register_tool</code> en los scripts posteriores a la instalación."
|
||||
},
|
||||
{
|
||||
"card": "Modal de código fuente de optimización",
|
||||
"card": "Ventana de código de optimización",
|
||||
"endpoint": "/api/proxmenux/tool-source",
|
||||
"source": "Extrae la función bash correspondiente de <code>auto_post_install.sh</code> o <code>customizable_post_install.sh</code> en el host."
|
||||
"source": "Extrae la función bash asociada de <code>auto_post_install.sh</code> o <code>customizable_post_install.sh</code> del host; las antiguas pueden usar código conservado."
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -330,37 +330,37 @@
|
||||
{
|
||||
"label": "Pestaña Apps",
|
||||
"href": "/docs/monitor/dashboard/apps",
|
||||
"tail": " — el lanzador cuya posición se puede cambiar desde Orden de navegación."
|
||||
"tail": " — el lanzador cuya posición se cambia con Orden de navegación."
|
||||
},
|
||||
{
|
||||
"label": "Notificaciones",
|
||||
"href": "/docs/monitor/notifications",
|
||||
"tail": " — canales, toggles por evento, overrides de canal, historial, test-send."
|
||||
"tail": " — canales, controles por evento, ajustes particulares por canal, historial y envíos de prueba."
|
||||
},
|
||||
{
|
||||
"label": "Asistente de IA",
|
||||
"href": "/docs/monitor/ai-assistant",
|
||||
"tail": " — proveedores, modelos, modos de prompt, idiomas, niveles de detalle por canal."
|
||||
"tail": " — proveedores, modelos, modos de instrucciones, idiomas y detalle por canal."
|
||||
},
|
||||
{
|
||||
"label": "Monitor de salud → Descartar alertas y la Suppression Duration",
|
||||
"label": "Health Monitor → Descartar alertas y duración del silenciamiento",
|
||||
"href": "/docs/monitor/health-monitor#dismissing-alerts-and-the-suppression-duration",
|
||||
"tail": " — la semántica detrás de los desplegables por categoría de arriba."
|
||||
"tail": " — cómo funcionan los desplegables de duración por categoría."
|
||||
},
|
||||
{
|
||||
"label": "ProxMenux Scripts → Automated post-install",
|
||||
"label": "ProxMenux Scripts → Ajustes posteriores a la instalación automatizados",
|
||||
"href": "/docs/post-install/automated",
|
||||
"tailRich": " y <customLink>Customizable post-install</customLink> — los scripts reales que se registran en la lista de optimizaciones de arriba."
|
||||
"tailRich": " y <customLink>Ajustes posteriores a la instalación personalizables</customLink>: los scripts que registran las optimizaciones en la lista anterior."
|
||||
},
|
||||
{
|
||||
"label": "Uninstall Optimizations",
|
||||
"label": "Desinstalar optimizaciones",
|
||||
"href": "/docs/post-install/uninstall",
|
||||
"tail": " — cómo revertir una optimización registrada arriba."
|
||||
"tail": " — cómo deshacer una optimización de la lista anterior."
|
||||
},
|
||||
{
|
||||
"label": "Índice del panel",
|
||||
"href": "/docs/monitor/dashboard",
|
||||
"tail": " — volver al resumen de la pestaña."
|
||||
"tail": " — volver al resumen de pestañas."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,193 +1,193 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "ProxMenux Monitor — Panel: pestaña Almacenamiento | ProxMenux Documentation",
|
||||
"description": "La pestaña Almacenamiento consolida cuatro vistas: almacenamientos gestionados por Proxmox con su estado, pools ZFS, discos físicos internos con datos SMART y unidades externas (USB). La vista en detalle de cada disco expone atributos SMART, desgaste y vida útil y el historial permanente de observaciones."
|
||||
"title": "ProxMenux Monitor — Panel: pestaña Almacenamiento | Documentación de ProxMenux",
|
||||
"description": "La pestaña Almacenamiento reúne cuatro vistas: almacenamientos Proxmox con su estado, pools ZFS, discos internos con SMART y unidades USB externas. El detalle de cada disco muestra atributos SMART, desgaste, vida útil e historial permanente de observaciones."
|
||||
},
|
||||
"header": {
|
||||
"title": "Panel: pestaña Almacenamiento",
|
||||
"description": "El estado de almacenamiento del host en una pantalla — pools de Proxmox (NFS / CIFS / LVM / ZFS / dir), salud de pools ZFS, discos internos SATA / NVMe con SMART y unidades USB externas. Pulsa cualquier disco para abrir una vista en detalle con la tabla completa de atributos SMART y el historial de observaciones por disco.",
|
||||
"description": "Todo el almacenamiento del host en una pantalla: NFS / CIFS / LVM / ZFS / dir de Proxmox, estado de pools ZFS, discos internos SATA/NVMe con SMART y unidades USB externas. Pulsa un disco para abrir sus atributos SMART y su historial de observaciones.",
|
||||
"section": "ProxMenux Monitor · Panel"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Respaldado por tres fuentes",
|
||||
"body": "Los almacenamientos Proxmox vienen de <code>pvesm status</code>; el estado ZFS de <code>zpool status</code>; los discos físicos de <code>lsblk</code> + <code>smartctl</code> (y <code>nvme</code> para campos específicos de NVMe). La pestaña refresca cada ~60 segundos; la vista en detalle por disco dispara una lectura SMART fresca bajo demanda."
|
||||
"body": "Los almacenamientos Proxmox proceden de <code>pvesm status</code>; ZFS, de <code>zpool status</code>; los discos físicos, de <code>lsblk</code> + <code>smartctl</code>, y <code>nvme</code> para campos específicos. La pestaña se actualiza aproximadamente cada 60 segundos; abrir el detalle solicita una lectura SMART."
|
||||
},
|
||||
"thresholds": {
|
||||
"title": "Colores de estado y umbrales aplicados aquí",
|
||||
"intro": "Cada barra, chip y punto de esta pestaña sigue la misma clasificación de tres estados — <green/> <strong>verde</strong> por debajo de Warning, <amber/> <strong>ámbar</strong> entre Warning y Critical, <red/> <strong>rojo</strong> en Critical y por encima. Valores por defecto recomendados que vienen con ProxMenux:",
|
||||
"intro": "Health Monitor clasifica el estado como <green/> <strong>verde</strong> por debajo de Aviso, <amber/> <strong>ámbar</strong> entre Aviso y Crítico y <red/> <strong>rojo</strong> desde Crítico. Sus valores predeterminados se indican a continuación. Las barras del panel pueden usar otros límites visuales, descritos más abajo.",
|
||||
"items": [
|
||||
"<strong>Capacidad</strong> (discos del host, almacenamientos PVE, pools ZFS, mounts de LXC) — Warning 85 %, Critical 95 %.",
|
||||
"<strong>Capacidad</strong> (discos del host, almacenamientos PVE, pools ZFS y montajes LXC): aviso 85 %, crítico 95 %.",
|
||||
"<strong>Temperatura de disco</strong> — HDD 60/65 °C · SSD 70/75 °C · NVMe 80/85 °C · SAS 55/65 °C (warning / critical)."
|
||||
],
|
||||
"outro": "Cada valor es configurable por host — <link>Settings → Health Monitor Thresholds</link> es la fuente única de verdad y explica cómo ajustarlos."
|
||||
"outro": "Puedes configurar cada valor por host. <link>Ajustes → Umbrales de Health Monitor</link> recoge los valores y explica cómo ajustarlos."
|
||||
},
|
||||
"topRow": {
|
||||
"heading": "Fila superior: almacenamiento de un vistazo",
|
||||
"intro": "Al abrir la pestaña Almacenamiento aterrizas en un resumen de cuatro tarjetas del estado de almacenamiento del host — capacidad total, qué se está usando localmente, qué se está usando en almacenamientos remotos y el inventario de discos físicos. Cada tarjeta es una respuesta de una línea a una pregunta común; las tarjetas debajo de la fila son donde profundizas en el detalle.",
|
||||
"imageAlt": "Pestaña Almacenamiento — fila superior de cuatro tarjetas de estadísticas: Total Storage, Local Used, Remote Used, Physical Disks",
|
||||
"imageCaption": "Fila superior de la pestaña Almacenamiento — capacidad total y recuento de discos, bytes usados separados en almacenamientos locales vs remotos y un desglose por tipo de discos físicos con su resumen de salud.",
|
||||
"heading": "Fila superior: resumen del almacenamiento",
|
||||
"intro": "Al abrir Almacenamiento, cuatro tarjetas resumen capacidad total, uso local, uso remoto e inventario de discos físicos. Ofrecen respuestas rápidas; las tarjetas inferiores contienen los detalles.",
|
||||
"imageAlt": "Pestaña Almacenamiento, con cuatro tarjetas: capacidad total, uso local, uso remoto y discos físicos",
|
||||
"imageCaption": "Fila superior: capacidad total y número de discos, bytes usados localmente y en remoto y desglose de discos físicos por tipo con resumen de estado.",
|
||||
"headerCard": "Tarjeta",
|
||||
"headerWhat": "Qué muestra",
|
||||
"totalLabel": "Total Storage",
|
||||
"totalWhat": "Capacidad bruta combinada de todos los discos físicos. La línea al pie muestra el recuento de discos físicos descubiertos.",
|
||||
"localLabel": "Local Used",
|
||||
"localWhat": "Bytes usados en almacenamientos locales (LVM / LVM-thin / ZFS / dir en los discos del propio host). Muestra los bytes usados de forma prominente, con una línea al pie <em>X.XX % de Y TB</em> para que veas el porcentaje de llenado al mismo tiempo.",
|
||||
"remoteLabel": "Remote Used",
|
||||
"remoteWhat": "La misma forma que Local Used pero para almacenamientos remotos (NFS / CIFS / PBS / Ceph / iSCSI). Se cuentan por separado porque las caídas remotas no afectan a los datos locales y normalmente los dimensionas y monitorizas de forma diferente.",
|
||||
"disksLabel": "Physical Disks",
|
||||
"totalLabel": "Almacenamiento total",
|
||||
"totalWhat": "Capacidad bruta total de todos los discos físicos. El pie indica cuántos discos se han detectado.",
|
||||
"localLabel": "Local usado",
|
||||
"localWhat": "Bytes usados en almacenamientos locales: LVM / LVM-thin / ZFS / dir en los discos del host. El valor principal indica los bytes usados y el pie <em>X.XX % de Y TB</em> muestra también el porcentaje de ocupación.",
|
||||
"remoteLabel": "Uso remoto",
|
||||
"remoteWhat": "El mismo formato que Uso local, para almacenamientos remotos NFS / CIFS / PBS / Ceph / iSCSI. Se cuentan por separado porque los fallos remotos y locales tienen un alcance distinto y estos recursos suelen dimensionarse y supervisarse de forma diferente.",
|
||||
"disksLabel": "Discos físicos",
|
||||
"disksIntro": "Dos líneas de desglose para el inventario:",
|
||||
"disksItems": [
|
||||
"<strong>Por tipo</strong> — recuentos de NVMe (morado), SSD (azul) y HDD (azul) descubiertos. Los hosts con discos mixtos reciben los tres; un host todo-NVMe muestra solo el recuento NVMe.",
|
||||
"<strong>Por salud</strong> — recuentos de discos <em>normal</em> (verde), <em>warning</em> (amarillo) y <em>critical</em> (rojo). El estado sano normalmente muestra solo \"X normal\"; warnings y critical aparecen solo cuando algo escala."
|
||||
"<strong>Por tipo</strong>: número de NVMe en morado y de SSD y HDD en azul. Se muestran los tipos detectados; un host solo con NVMe muestra únicamente ese recuento.",
|
||||
"<strong>Por estado</strong>: número de discos <em>normales</em> en verde, con <em>aviso</em> en amarillo y <em>críticos</em> en rojo. Sin problemas, solo aparece «X normales»; los otros estados aparecen cuando hay incidencias."
|
||||
]
|
||||
},
|
||||
"pveStorage": {
|
||||
"heading": "Tarjeta Proxmox Storage",
|
||||
"intro": "Una fila por almacenamiento configurado en <code>/etc/pve/storage.cfg</code>. Cada fila muestra la insignia de tipo (<code>nfs</code> / <code>cifs</code> / <code>zfspool</code> / <code>lvm</code> / <code>lvmthin</code> / <code>dir</code> / <code>pbs</code>), el nombre del almacenamiento, una insignia active / error / not-monitored, el porcentaje de uso y una barra de progreso coloreada:",
|
||||
"intro": "Una fila por almacenamiento de <code>/etc/pve/storage.cfg</code>, con tipo (<code>nfs</code> / <code>cifs</code> / <code>zfspool</code> / <code>lvm</code> / <code>lvmthin</code> / <code>dir</code> / <code>pbs</code>), nombre, estado activo/error/no supervisado, porcentaje de uso y barra de color:",
|
||||
"items": [
|
||||
"<strong>< 75 %</strong> — barra de progreso azul, valor en azul.",
|
||||
"<strong>75 – 90 %</strong> — barra de progreso amarilla, valor en amarillo (el Monitor de salud avisa en este punto).",
|
||||
"<strong>> 90 %</strong> — barra de progreso roja, valor en rojo (el Monitor de salud escala).",
|
||||
"<strong>error</strong> — fila entera con borde rojo, se usa cuando el almacenamiento está configurado pero inalcanzable (servidor NFS caído, credenciales CIFS caducadas).",
|
||||
"<strong>excluded</strong> — borde morado + la insignia \"not monitored\". Almacenamientos excluidos explícitamente por el usuario de los chequeos de salud (cómodo para volúmenes manuales / de archivo que están intencionadamente offline)."
|
||||
"<strong>Hasta el 75 %</strong>: barra y valor azules.",
|
||||
"<strong>Más del 75 % y hasta el 90 %</strong>: barra y valor amarillos. Son límites visuales distintos de los umbrales de Health Monitor.",
|
||||
"<strong>> 90 %</strong>: barra y valor rojos. Este límite visual es distinto del escalado de Health Monitor.",
|
||||
"<strong>Error</strong>: borde rojo en toda la fila cuando el almacenamiento está configurado pero no es accesible, por ejemplo por caída de NFS o credenciales CIFS caducadas.",
|
||||
"<strong>Excluido</strong>: borde morado y etiqueta «no supervisado». Almacenamientos que has excluido de las comprobaciones, como volúmenes de archivo que mantienes desconectados."
|
||||
],
|
||||
"calloutTitle": "Excluir un almacenamiento ruidoso",
|
||||
"calloutBody": "Desde la fila del almacenamiento, el menú por almacenamiento te permite marcarlo como <em>excluded from monitoring</em>. El flag se guarda en la tabla <code>excluded_storages</code> y lo respetan tanto la vista del panel como el ciclo del Monitor de salud — no se disparan notificaciones para almacenamientos excluidos, y no empujan la pastilla de la cabecera."
|
||||
"calloutTitle": "Excluir un almacenamiento de la supervisión",
|
||||
"calloutBody": "El menú de cada almacenamiento permite marcarlo como <em>excluido de la supervisión</em>. Se guarda en <code>excluded_storages</code> y lo respetan el panel y Health Monitor: no genera notificaciones ni afecta al indicador general."
|
||||
},
|
||||
"zfs": {
|
||||
"heading": "Tarjeta ZFS Pools",
|
||||
"intro": "Se renderiza solo cuando ZFS está instalado y existe al menos un pool. Una fila por pool con una insignia de salud, size / allocated / free y un icono que refleja el estado de salud:",
|
||||
"intro": "Solo aparece si ZFS está instalado y existe al menos un pool. Cada fila muestra un pool con estado, tamaño, espacio asignado y libre e icono de estado:",
|
||||
"items": [
|
||||
"<strong>ONLINE</strong> — verde. Todo sano.",
|
||||
"<strong>DEGRADED</strong> — amarillo. El pool sigue sirviendo datos pero al menos un dispositivo no está disponible; arranca la ventana de reemplazo.",
|
||||
"<strong>FAULTED</strong> / <strong>UNAVAIL</strong> / <strong>SUSPENDED</strong> — rojo. El pool no sirve datos; se requiere intervención inmediata."
|
||||
"<strong>DEGRADED</strong>: amarillo. El pool sirve datos, pero al menos un dispositivo no está disponible; hay que gestionar su sustitución.",
|
||||
"<strong>FAULTED</strong> / <strong>UNAVAIL</strong> / <strong>SUSPENDED</strong>: rojo. El pool no sirve datos y requiere intervención inmediata."
|
||||
],
|
||||
"outro": "Tanto el estado ZFS como el estado SMART por disco alimentan la categoría <em>Disks & I/O</em> del <link>Monitor de salud</link>."
|
||||
"outro": "El estado ZFS y SMART de cada disco contribuyen a la categoría <em>Discos y E/S</em> de <link>Health Monitor</link>."
|
||||
},
|
||||
"physical": {
|
||||
"heading": "Physical Disks & SMART Status",
|
||||
"heading": "Discos físicos y estado SMART",
|
||||
"intro": "Discos internos (SATA / NVMe). Cada fila condensa los campos más útiles de un vistazo:",
|
||||
"items": [
|
||||
"<strong>Ruta del dispositivo</strong> — <code>/dev/sda</code>, <code>/dev/nvme0n1</code>.",
|
||||
"<strong>Insignia de tipo</strong> — SATA / NVMe (y el icono correspondiente).",
|
||||
"<strong>Insignia System</strong> — etiqueta naranja que marca los discos desde los que se está ejecutando el SO del host. El panel lo deriva de los mountpoints de <code>/</code> y <code>/boot</code>: cualquier disco físico que los aloje recibe la etiqueta <em>System</em> para que no lo borres o reasignes por accidente. Los discos sin la etiqueta son unidades puras de datos.",
|
||||
"<strong>Modelo</strong> — vendor + cadena del modelo de <code>smartctl -i</code>.",
|
||||
"<strong>Capacidad</strong> — formateada de forma legible.",
|
||||
"<strong>Temperatura</strong> — °C actuales, coloreada por el umbral de tipo de disco (NVMe corre más caliente que SATA).",
|
||||
"<strong>Estado SMART</strong> — passed / failed / unknown.",
|
||||
"<strong>Insignia de observaciones</strong> — cuando el historial permanente <code>disk_observations</code> tiene entradas para este disco, aparece una insignia azul con el recuento (p. ej. <em>3 obs.</em>). Pulsa el disco para entrar y revisarlas.",
|
||||
"<strong>Insignia de salud</strong> — Healthy / Warning / Critical, derivada del chequeo SMART + observaciones recientes."
|
||||
"<strong>Etiqueta de tipo</strong>: SATA / NVMe y su icono.",
|
||||
"<strong>Etiqueta de sistema</strong>: marca naranja para los discos identificados como discos del SO. Se detectan mediante los montajes de <code>/</code> y <code>/boot</code> y reciben la etiqueta <em>System</em>. La ausencia de etiqueta no demuestra que se puedan borrar o reutilizar sin riesgo.",
|
||||
"<strong>Modelo</strong>: fabricante y modelo de <code>smartctl -i</code>.",
|
||||
"<strong>Capacidad</strong>: expresada en unidades legibles.",
|
||||
"<strong>Temperatura</strong>: °C actuales, con color según el umbral del tipo de disco; NVMe admite umbrales más altos que SATA.",
|
||||
"<strong>Estado SMART</strong>: correcto / fallido / desconocido.",
|
||||
"<strong>Etiqueta de observaciones</strong>: si el historial permanente <code>disk_observations</code> contiene entradas del disco, aparece una etiqueta azul con el número, como <em>3 obs.</em>. Pulsa el disco para revisarlas.",
|
||||
"<strong>Etiqueta de estado</strong>: Correcto / Aviso / Crítico, según SMART y las observaciones recientes."
|
||||
],
|
||||
"clickHint": "La fila entera es pulsable y abre la vista en detalle por disco descrita abajo.",
|
||||
"warningTitle": "No toques los discos con etiqueta System a la ligera",
|
||||
"warningBody": "Los discos con la insignia naranja <strong>System</strong> alojan el SO en ejecución. El panel expone la etiqueta como guardarraíl — las acciones destructivas lanzadas desde <link>ProxMenux → Disk Manager → Format / Wipe</link> se niegan explícitamente a actuar sobre ellos. Si de verdad necesitas reasignar el disco de arranque, hazlo desde un entorno de rescate, no desde dentro de Proxmox."
|
||||
"clickHint": "Toda la fila se puede pulsar para abrir el detalle del disco descrito más abajo.",
|
||||
"warningTitle": "Cuidado con los discos etiquetados como System",
|
||||
"warningBody": "Los discos con etiqueta naranja <strong>System</strong> alojan el SO activo. La etiqueta ayuda a identificarlos; <link>ProxMenux → Gestor de discos → Formatear / Borrar</link> rechaza las acciones destructivas sobre ellos. Para reutilizar un disco de arranque, usa un entorno de rescate externo al Proxmox en ejecución."
|
||||
},
|
||||
"external": {
|
||||
"heading": "External Storage (USB)",
|
||||
"body": "Una tarjeta separada para unidades conectadas por USB, solo se renderiza cuando hay al menos una presente. Los mismos campos que los discos internos más una etiqueta naranja <strong>USB</strong>. Las unidades USB suelen aparecer y desaparecer (backups en frío, jobs ocasionales de descarga), así que el Monitor de salud es conservador con ellas — las observaciones se retienen, pero los errores de E/S en una unidad USB desconectada no escalan."
|
||||
"heading": "Almacenamiento externo (USB)",
|
||||
"body": "Las unidades USB tienen una tarjeta propia, visible cuando hay alguna conectada. Muestra los mismos campos que los discos internos y una etiqueta naranja <strong>USB</strong>. Como suelen conectarse solo para copias o transferencias ocasionales, se conservan sus observaciones, pero los errores de E/S de una unidad USB desconectada no se escalan."
|
||||
},
|
||||
"drillIn": {
|
||||
"heading": "Modal de vista en detalle de disco",
|
||||
"intro": "Pulsar cualquier fila de disco abre una modal con cuatro pestañas: <strong>Overview</strong> · <strong>SMART</strong> · <strong>History</strong> · <strong>Schedule</strong>. La cabecera siempre muestra la ruta del dispositivo, el modelo + capacidad y la insignia naranja <em>System</em> si aplica.",
|
||||
"overviewTitle": "Pestaña 1 — Overview",
|
||||
"overviewImageAlt": "Modal de vista en detalle de disco — pestaña Overview con estado de salud, anillo Wear & Lifetime y atributos SMART rápidos",
|
||||
"overviewImageCaption": "Pestaña Overview — identidad, insignia de salud, anillo de vida restante con el desgaste actual y los datos escritos, además de un bloque rápido con los atributos SMART más vigilados.",
|
||||
"overviewIntro": "La pestaña por defecto al entrar — todo lo que necesitas para responder \"¿este disco está bien?\" sin lanzar un test. Tres bloques:",
|
||||
"heading": "Diálogo de detalle del disco",
|
||||
"intro": "Pulsa un disco para abrir cuatro pestañas: <strong>Resumen</strong> · <strong>SMART</strong> · <strong>Historial</strong> · <strong>Programación</strong>. La cabecera muestra ruta, modelo, capacidad y, si corresponde, la etiqueta naranja <em>System</em>.",
|
||||
"overviewTitle": "Pestaña 1 — Resumen",
|
||||
"overviewImageAlt": "Detalle de disco, pestaña Resumen con estado, indicador circular de desgaste y vida útil y atributos SMART principales",
|
||||
"overviewImageCaption": "Resumen: identificación, estado, vida restante con desgaste actual y datos escritos, y atributos SMART principales.",
|
||||
"overviewIntro": "Pestaña inicial para consultar el estado del disco sin ejecutar una prueba. Tiene tres bloques:",
|
||||
"overviewItems": [
|
||||
"<strong>Identity</strong> — modelo, serial, capacidad, insignia Health (Healthy / Warning / Critical).",
|
||||
"<strong>Wear & Lifetime</strong> — anillo grande de vida restante (97 %, 50 %, …) con el atributo de origen explícito (<em>Media Wearout Indicator</em>, <em>Percentage Used</em>, …), una barra de desgaste (% de consumo actual), una proyección <em>Est. Life</em> en años y los Data Written totales. Los discos NVMe también muestran <em>Available Spare</em>.",
|
||||
"<strong>SMART Attributes</strong> — seis campos titulares en una rejilla de 2 columnas: Temperature, Power On Hours (con duración humanizada como <em>3y 116d</em>), Rotation Rate (o <em>SSD</em>), Power Cycles, SMART Status, Reallocated Sectors, Pending Sectors, CRC Errors. La tabla de atributos completa vive en la pestaña SMART."
|
||||
"<strong>Identificación</strong>: modelo, número de serie, capacidad y estado Correcto / Aviso / Crítico.",
|
||||
"<strong>Desgaste y vida útil</strong>: indicador circular de vida restante (97 %, 50 %, …) con atributo de origen (<em>Media Wearout Indicator</em>, <em>Percentage Used</em>, …), barra del porcentaje consumido, proyección <em>Vida estimada</em> en años y total de datos escritos. NVMe también muestra <em>Available Spare</em>.",
|
||||
"<strong>Atributos SMART</strong>: los datos principales se muestran en dos columnas: temperatura, horas de encendido (con una duración legible, como <em>3 años y 116 días</em>), velocidad de rotación (o <em>SSD</em>), ciclos de encendido, estado SMART, sectores reasignados, sectores pendientes y errores CRC. La tabla completa de atributos se encuentra en la pestaña SMART."
|
||||
],
|
||||
"smartTitle": "Pestaña 2 — SMART",
|
||||
"smartImageAlt": "Modal de vista en detalle de disco — pestaña SMART con botones Run SMART Test (Short / Extended), resultado del último test y la tabla completa de atributos SMART",
|
||||
"smartImageCaption": "Pestaña SMART — lanza un test Short o Extended, mira el resultado del último test, scrollea la tabla completa de atributos SMART y genera el informe PDF completo de salud.",
|
||||
"smartIntro": "Donde viven las acciones. Tres secciones:",
|
||||
"smartImageAlt": "Detalle del disco, pestaña SMART con pruebas corta y extendida, resultado anterior y tabla completa de atributos",
|
||||
"smartImageCaption": "Pestaña SMART: ejecuta pruebas cortas o extendidas, consulta el último resultado, revisa todos los atributos y abre el informe completo para imprimirlo o guardarlo como PDF.",
|
||||
"smartIntro": "Acciones disponibles, en tres secciones:",
|
||||
"smartItems": [
|
||||
"<strong>Run SMART Test</strong> — dos botones. <em>Short Test (~2 min)</em> corre síncrono y muestra el resultado inline. <em>Extended Test (background)</em> puede tardar horas en discos grandes, corre en el servidor y dispara una notificación cuando termina.",
|
||||
"<strong>Last Test</strong> — tipo, insignia de estado (<em>passed</em> / <em>failed</em>) y timestamp de la ejecución más reciente.",
|
||||
"<strong>SMART Attributes</strong> — la tabla completa de atributos (ID / nombre / valor / worst / estado con iconos OK / warning / critical). Para SATA / SAS, la lista numerada clásica. Para NVMe, los campos estructurados de <code>nvme smart-log</code> (temperatura, available spare, percentage used, data units written / read, host reads / writes, controller busy time, power cycles, unsafe shutdowns, media errors, error-log entries, warning / critical composite temperature time)."
|
||||
"<strong>Ejecutar prueba SMART</strong>: dos botones. <em>Prueba corta (~2 min)</em> espera al resultado y lo muestra en el diálogo. <em>Prueba extendida (segundo plano)</em> puede tardar horas en discos grandes, continúa en el servidor y avisa al terminar.",
|
||||
"<strong>Última prueba</strong>: tipo, estado (<em>correcta</em> / <em>fallida</em>) y fecha y hora de la última ejecución.",
|
||||
"<strong>Atributos SMART</strong>: tabla completa con ID, nombre, valor, peor valor y estado correcto, aviso o crítico. SATA/SAS muestra la lista numerada. NVMe usa <code>nvme smart-log</code>: temperatura, reserva disponible, porcentaje usado, unidades leídas/escritas, lecturas/escrituras del host, tiempo ocupado del controlador, ciclos de encendido, apagados inseguros, errores del medio, entradas del registro de errores y tiempo con temperatura compuesta en aviso/crítico."
|
||||
],
|
||||
"pdfTitle": "View Full SMART Report (PDF)",
|
||||
"pdfIntro": "Al pie de la pestaña SMART, el botón <strong>View Full SMART Report</strong> genera un PDF imprimible y listo para archivo — el mismo informe estructurado que enviarías a un fabricante para un RMA.",
|
||||
"pdfPreviewAlt": "Primera página del PDF SMART Health Report generado — Executive Summary con el anillo PASSED + bloque Disk Information",
|
||||
"pdfPreviewCaption": "Primera página del SMART Health Report — Executive Summary con el anillo PASSED y el bloque Disk Information completo. El PDF completo de abajo lleva el anillo de desgaste SSD, cada atributo SMART y el historial de tests.",
|
||||
"pdfTitle": "Ver informe SMART completo (PDF)",
|
||||
"pdfIntro": "Al pie de SMART, <strong>Ver informe SMART completo</strong> abre un informe imprimible. Usa el diálogo de impresión del navegador para guardarlo como PDF, archivarlo o compartirlo con el fabricante en un RMA.",
|
||||
"pdfPreviewAlt": "Primera página del informe SMART: resumen ejecutivo con indicador PASSED e información del disco",
|
||||
"pdfPreviewCaption": "Primera página: resumen, indicador PASSED e información completa del disco. El PDF de ejemplo incluye desgaste SSD, todos los atributos SMART e historial de pruebas.",
|
||||
"pdfDownloadLabel": "Descargar informe SMART de ejemplo (PDF)",
|
||||
"pdfSectionsIntro": "El informe tiene cinco secciones de alto nivel:",
|
||||
"pdfSectionsIntro": "El informe tiene seis secciones principales:",
|
||||
"pdfSections": [
|
||||
"<strong>Executive Summary</strong> — gran veredicto PASSED / FAILED, párrafo de evaluación de salud del disco en lenguaje claro (\"tu disco está sano / muestra signos de desgaste / está fallando\") y cuatro estadísticas rápidas (timestamp del informe, tipo del último test, resultado del test, atributos comprobados).",
|
||||
"<strong>Disk Information</strong> — modelo, serial, capacidad, tipo (HDD / SSD / NVMe), familia, form factor, interfaz (SATA 3.3 · 6.0 Gb/s, …), soporte de TRIM, temperatura actual con el umbral óptimo, tiempo de power-on, ciclos de encendido, estado SMART, además de los contadores titulares (pending sectors, CRC errors, reallocated sectors).",
|
||||
"<strong>SSD Wear & Lifetime</strong> (solo SSD / NVMe) — anillo de vida restante, atributo de origen, nivel actual de desgaste, datos escritos, horas de power-on.",
|
||||
"<strong>SMART Attributes (full)</strong> — cada atributo que reporta el drive, con ID, nombre, valor, worst, threshold, valor raw y una pastilla de estado. Los más relevantes para el usuario (Reallocated Sector Ct, Power On Hours, Reported Uncorrect, UDMA CRC Error Count, Media Wearout Indicator, …) incluyen una explicación de una línea en lenguaje claro bajo la fila.",
|
||||
"<strong>Last Self-Test Result + Full Self-Test History</strong> — el último test (tipo, resultado, mensaje de finalización, en qué marca de power-on-hours) más una tabla numerada de cada test retenido.",
|
||||
"<strong>Recommendations</strong> — items de acción basados en el veredicto: <em>Disk is Healthy / Schedule periodic tests / Backup strategy</em> para discos sanos, lenguaje en escalada con guía de reemplazo cuando los atributos se salen de rango."
|
||||
"<strong>Resumen ejecutivo</strong>: estado PASSED/FAILED, evaluación clara del disco —correcto, con desgaste o fallando— y cuatro datos: fecha del informe, tipo de última prueba, resultado y atributos comprobados.",
|
||||
"<strong>Información del disco</strong>: modelo, serie, capacidad, tipo HDD/SSD/NVMe, familia, formato, interfaz (SATA 3.3 · 6.0 Gb/s, …), TRIM, temperatura y umbral óptimo, horas y ciclos de encendido, SMART, sectores pendientes y reasignados y errores CRC.",
|
||||
"<strong>Desgaste y vida útil SSD</strong> (solo SSD/NVMe): indicador de vida restante, atributo de origen, desgaste actual, datos escritos y horas de encendido.",
|
||||
"<strong>Atributos SMART completos</strong>: ID, nombre, valor, peor valor, umbral, valor bruto y estado de cada atributo. Los principales —Reallocated Sector Ct, Power On Hours, Reported Uncorrect, UDMA CRC Error Count, Media Wearout Indicator, …— incluyen una explicación breve bajo su fila.",
|
||||
"<strong>Última autoprueba e historial completo</strong>: última prueba con tipo, resultado, mensaje final y horas de encendido en ese momento, más una tabla numerada de todas las pruebas conservadas.",
|
||||
"<strong>Recomendaciones</strong>: acciones según el resultado. Para discos correctos: <em>disco sano / pruebas periódicas / estrategia de copias</em>. Si los atributos salen de rango, incluye indicaciones de sustitución."
|
||||
],
|
||||
"pdfOutro": "El PDF se produce en el servidor y se descarga con un patrón de nombre estable (<code>SMART-<short-id>.pdf</code>) para que múltiples snapshots a lo largo del tiempo puedan convivir en tu archivo. Útil cuando estás rastreando degradación a lo largo de meses o enviando evidencia al soporte del fabricante.",
|
||||
"historyTitle": "Pestaña 3 — History",
|
||||
"historyImageAlt": "Modal de vista en detalle de disco — pestaña History listando tests SMART pasados con acciones de descarga y borrado",
|
||||
"historyImageCaption": "Pestaña History — cada test SMART retenido para este disco. Por fila: tipo, timestamp, etiqueta \"X days ago\", marca latest, descargar (salida raw de <code>smartctl</code>) y acciones de borrado.",
|
||||
"historyIntro": "El pool retenido de tests SMART para este disco — tanto las ejecuciones short como extended que se completaron. Cada entrada es la salida raw de <code>smartctl</code> capturada en tiempo de ejecución, más los campos estructurados que el Monitor parseó para el panel. Acciones por fila:",
|
||||
"pdfOutro": "El navegador crea el informe imprimible; Imprimir y Guardar como PDF abren su diálogo de impresión. Elige un nombre como <code>SMART-<short-id>.pdf</code>. Conserva copias fechadas para comparar cambios o compartirlas con el fabricante.",
|
||||
"historyTitle": "Pestaña 3 — Historial",
|
||||
"historyImageAlt": "Detalle del disco, pestaña Historial con pruebas SMART anteriores y acciones de descarga y eliminación",
|
||||
"historyImageCaption": "Historial de pruebas SMART del disco. Cada fila muestra tipo, fecha y hora, antigüedad, marca de última prueba y acciones de descarga de la salida <code>smartctl</code> y eliminación.",
|
||||
"historyIntro": "Pruebas cortas y extendidas completadas y conservadas para el disco. Cada entrada guarda la salida original de <code>smartctl</code> y los campos que Monitor interpreta para el panel. Acciones por fila:",
|
||||
"historyItems": [
|
||||
"<strong>Download</strong> — guarda la salida raw de <code>smartctl -a</code> como un archivo de texto. Idéntico a lo que parsea el informe PDF, útil cuando necesitas la línea exacta que pide un fabricante.",
|
||||
"<strong>Delete</strong> — elimina el test del historial. El límite de retención fijado en la pestaña Schedule (<em>Last 5 / 10 / 20</em>) borra el más viejo primero automáticamente; esta acción es la sobreescritura manual."
|
||||
"<strong>Descargar</strong>: guarda la instantánea JSON con los datos de <code>smartctl -a</code> usados por el informe. Útil si el fabricante necesita los campos de diagnóstico originales.",
|
||||
"<strong>Eliminar</strong>: borra una prueba del historial manualmente. La retención de Programación (<em>últimas 5 / 10 / 20</em>) elimina automáticamente las más antiguas."
|
||||
],
|
||||
"scheduleTitle": "Pestaña 4 — Schedule",
|
||||
"scheduleImageAlt": "Modal de vista en detalle de disco — pestaña Schedule con el toggle Automatic SMART Tests, la lista de schedules configurados y el botón Add Schedule",
|
||||
"scheduleImageCaption": "Pestaña Schedule — elige tipo de test, frecuencia y retención; el Monitor lo conecta a <code>cron</code> para que los tests corran sin atención.",
|
||||
"scheduleIntro": "Tests SMART automáticos guiados por cron, sin shell. La página tiene tres áreas:",
|
||||
"scheduleTitle": "Pestaña 4 — Programación",
|
||||
"scheduleImageAlt": "Detalle del disco, pestaña Programación con interruptor de pruebas SMART automáticas, lista de horarios y botón Añadir programación",
|
||||
"scheduleImageCaption": "Programación: elige tipo, frecuencia y retención; Monitor configura <code>cron</code> para ejecutar las pruebas automáticamente.",
|
||||
"scheduleIntro": "Pruebas SMART automáticas mediante cron, sin usar la terminal. Tres áreas:",
|
||||
"scheduleItems": [
|
||||
"<strong>Toggle Automatic SMART Tests</strong> — interruptor global on/off para cada schedule de este disco. Útil cuando quieres pausar todo durante mantenimiento sin perder las definiciones de schedule.",
|
||||
"<strong>Configured Schedules</strong> — una fila por schedule existente con la insignia de tipo de test (<em>short</em> / <em>long</em>), la expresión cron en forma humana (<em>\"Day 1 of month at 03:00\"</em>, <em>\"Every Sunday at 02:00\"</em>), los discos que cubre y el ajuste de retención.",
|
||||
"<strong>Add Schedule / Edit Schedule</strong> — formulario con: Test Type (<em>Short ~2 min</em> / <em>Long 1-4 h</em>), Frequency (<em>Daily / Weekly / Monthly</em>), Day of Month / Day of Week, Time, Keep Results (<em>Last 5 / 10 / 20</em>)."
|
||||
"<strong>Pruebas SMART automáticas</strong>: interruptor general de todos los horarios del disco. Permite pausarlos durante el mantenimiento sin borrar su configuración.",
|
||||
"<strong>Programaciones configuradas</strong>: una fila por horario con tipo (<em>corto</em> / <em>largo</em>), expresión cron legible (<em>«Día 1 de cada mes a las 03:00»</em>, <em>«Cada domingo a las 02:00»</em>), discos incluidos y retención.",
|
||||
"<strong>Añadir / Editar programación</strong>: tipo (<em>corta ~2 min</em> / <em>larga 1–4 h</em>), frecuencia (<em>diaria / semanal / mensual</em>), día del mes o semana, hora y resultados guardados (<em>últimos 5 / 10 / 20</em>)."
|
||||
],
|
||||
"scheduleOutro": "El schedule se materializa como una entrada cron en el host que llama de vuelta al Monitor; los resultados se guardan en el mismo historial SMART mostrado en la pestaña 3, y el ajuste de retención auto-poda el test más viejo cuando termina uno nuevo.",
|
||||
"tempTitle": "Modal de historial de temperatura",
|
||||
"tempIntro": "Cada disco que expone un sensor de temperatura tiene sus lecturas muestreadas de forma continua por el Monitor y persistidas a una serie temporal local. El valor actual aparece como uno de los seis atributos SMART titulares en la pestaña Overview; pulsar ese bloque abre una modal dedicada de historial de temperatura con la imagen completa.",
|
||||
"tempImageAlt": "Modal de historial de temperatura de disco — cabecera con la ruta y modelo del disco, un selector de timeframe (1 Hour / 24 Hours / 7 Days / 30 Days), una fila de cuatro tarjetas de estadísticas (Current / Min / Avg / Max) y una gráfica de línea de la temperatura sobre el rango seleccionado coloreada por los umbrales por tipo de disco",
|
||||
"tempImageCaption": "Detalle de temperatura — se abre desde la pestaña Overview en cualquier disco cuyo sensor devuelva una lectura no-cero. La gráfica se colorea contra el umbral de tipo de disco (HDD / SSD / NVMe / SAS).",
|
||||
"tempShowsTitle": "Lo que muestra la modal",
|
||||
"scheduleOutro": "El horario crea una entrada cron en el host que llama a Monitor. Los resultados se guardan en el historial SMART de la pestaña 3 y la retención elimina automáticamente los más antiguos al terminar una prueba nueva.",
|
||||
"tempTitle": "Diálogo de historial de temperatura",
|
||||
"tempIntro": "Monitor toma periódicamente las lecturas de los discos con sensor de temperatura y las guarda en un historial local. El valor actual aparece en Resumen; al pulsarlo, se abre el detalle del historial de temperatura.",
|
||||
"tempImageAlt": "Historial de temperatura del disco con ruta y modelo, periodos de 1 hora, 24 horas, 7 días o 30 días, indicadores Actual/Mínimo/Media/Máximo y gráfico de líneas coloreado según los umbrales del tipo de disco",
|
||||
"tempImageCaption": "El detalle de temperatura se abre desde Resumen si el sensor devuelve un valor distinto de cero. El gráfico usa umbrales de HDD / SSD / NVMe / SAS.",
|
||||
"tempShowsTitle": "Qué muestra el diálogo",
|
||||
"tempShowsItems": [
|
||||
"<strong>Selector de timeframe</strong> con cuatro rangos: <em>1 Hour</em>, <em>24 Hours</em> (por defecto), <em>7 Days</em>, <em>30 Days</em>. Cada uno consulta al mismo backend con un downsampling distinto para que la gráfica siga legible en cada horizonte.",
|
||||
"<strong>Cuatro tarjetas de estadísticas</strong> en lo alto de la modal: <em>Current</em>, <em>Min</em>, <em>Avg</em>, <em>Max</em> para el rango seleccionado. La tarjeta <em>Current</em> se colorea con los mismos umbrales de estado que usan la pestaña Almacenamiento y las notificaciones, para que veas de un vistazo si el disco está en territorio normal / warm / hot.",
|
||||
"<strong>Gráfica de línea</strong> de la temperatura a lo largo del tiempo, con la línea y el área sombreada coloreadas por tipo de disco:"
|
||||
"<strong>Selector de periodo</strong>: <em>1 hora</em>, <em>24 horas</em> por defecto, <em>7 días</em> o <em>30 días</em>. Cada consulta ajusta la resolución para mantener el gráfico legible.",
|
||||
"<strong>Cuatro indicadores</strong>: <em>Actual</em>, <em>Mínimo</em>, <em>Media</em> y <em>Máximo</em> del periodo. <em>Actual</em> usa los umbrales de la pestaña Almacenamiento y las notificaciones para distinguir temperatura normal, elevada o alta.",
|
||||
"<strong>Gráfico de líneas</strong> de la temperatura a lo largo del tiempo, con línea y área sombreada coloreadas según el tipo de disco:"
|
||||
],
|
||||
"tempDiskTypes": [
|
||||
"HDD — umbrales típicamente más frescos.",
|
||||
"SSD — umbrales moderados.",
|
||||
"NVMe — umbrales más altos (NVMe corre más caliente por diseño).",
|
||||
"SAS — mismos valores por defecto que HDD."
|
||||
"SAS: aviso a 55 °C y crítico a 65 °C, con umbral de aviso distinto al HDD."
|
||||
],
|
||||
"tempConfigurable": "Los cuatro son configurables desde <em>Settings → Health Monitor Thresholds</em>.",
|
||||
"tempWhyTitle": "Por qué importa aquí un historial",
|
||||
"tempConfigurable": "Los cuatro tipos se configuran en <em>Ajustes → Umbrales de Health Monitor</em>.",
|
||||
"tempWhyTitle": "Por qué importa el historial",
|
||||
"tempWhyItems": [
|
||||
"<strong>Detección de drift.</strong> Los discos que se calientan progresivamente a lo largo de semanas (ventilador fallando, acumulación de polvo, disco vecino muriéndose y empujando aire caliente) son invisibles para una lectura única de \"temperatura actual\". Las vistas de 7 días y 30 días sacan el drift a la superficie.",
|
||||
"<strong>Correlación de picos.</strong> Cuando una ventana de backup o un rebuild empujaron el disco brevemente por encima de su umbral, los rangos de 1 hora y 24 horas muestran si fue puntual o un patrón recurrente.",
|
||||
"<strong>Ajuste de umbrales.</strong> Antes de subir o bajar un umbral en <em>Settings → Health Monitor Thresholds</em>, la gráfica de 30 días muestra el rango operativo real del disco para que el nuevo valor encaje con lo que el hardware realmente hace en vez de un cálculo a ojo."
|
||||
"<strong>Detectar tendencias.</strong> Una lectura aislada no revela que un disco lleva semanas calentándose, por ejemplo por fallos de ventilación, polvo o calor cercano. Las vistas de 7 y 30 días permiten ver la evolución.",
|
||||
"<strong>Relacionar picos.</strong> Si una copia de seguridad o reconstrucción elevó brevemente la temperatura por encima del umbral, las vistas de 1 y 24 horas muestran si fue puntual o recurrente.",
|
||||
"<strong>Ajustar umbrales.</strong> Antes de cambiarlos en <em>Ajustes → Umbrales de Health Monitor</em>, consulta el gráfico de 30 días para conocer el rango real de funcionamiento del disco."
|
||||
],
|
||||
"obsTitle": "Historial de observaciones (a lo largo de pestañas)",
|
||||
"obsIntro": "Los discos modernos fallan de forma gradual. Un disco puede reportar SMART <strong>PASSED</strong> y aún así loguear errores ocasionales de lectura en dmesg, perder enlaces SATA o exponer pending sectors que van y vienen. La UI estándar de Proxmox te muestra el veredicto SMART actual — no mantiene un historial de esas <em>señales</em>. ProxMenux sí, y las expone directamente dentro de la modal de disco.",
|
||||
"obsImageAlt": "Pestaña Overview de la modal Disk Details mostrando un disco sano con estado SMART Passed, 0 errores reallocated/pending/CRC y una sección Observations listando un evento I/O Error registrado con el mensaje raw del kernel, una traducción humana del código de error ATA, timestamps de primera y última ocurrencia y un contador de ocurrencias",
|
||||
"obsImageCaption": "Un disco que <strong>SMART dice que está bien</strong> puede aún así tener un historial de observaciones. La tarjeta es la capa de señales histórica bajo el veredicto SMART.",
|
||||
"obsTitle": "Historial de observaciones en las pestañas",
|
||||
"obsIntro": "Los fallos de disco pueden desarrollarse gradualmente. Un disco puede indicar SMART <strong>PASSED</strong> y registrar errores de lectura en dmesg, perder enlaces SATA o mostrar sectores pendientes intermitentes. ProxMenux conserva estas <em>señales</em> y las muestra en el diálogo junto al estado SMART actual.",
|
||||
"obsImageAlt": "Resumen de un disco con SMART correcto y cero sectores reasignados, pendientes y errores CRC, pero una observación de error E/S con mensaje original del kernel, explicación ATA, primera y última fecha y contador",
|
||||
"obsImageCaption": "Un disco que <strong>supera SMART</strong> puede tener observaciones anteriores. La tarjeta añade el historial de señales al estado actual.",
|
||||
"obsWhatTitle": "Qué es una observación",
|
||||
"obsWhatIntro": "Cualquier cosa que ProxMenux capture en el log del kernel, dmesg o salida SMART que parezca un evento a nivel de disco — y que por sí sola sería demasiado granular para una notificación — se registra como una <strong>observación</strong>. Cada fila muestra:",
|
||||
"obsWhatIntro": "ProxMenux registra como <strong>observación</strong> los eventos de disco detectados en el registro del kernel, dmesg o SMART que por sí solos serían demasiado específicos para una notificación. Cada fila muestra:",
|
||||
"obsWhatItems": [
|
||||
"<strong>Insignia de tipo</strong> (I/O Error, SMART Error, Filesystem Error, ZFS Pool Error, Connection Error).",
|
||||
"<strong>Mensaje raw del kernel</strong> tal cual apareció en dmesg — útil al copiar y pegar en un buscador o en un ticket de soporte.",
|
||||
"<strong>Una frase humana</strong> bajo el mensaje raw para códigos ATA conocidos (<code>IDNF</code> → \"Sector address not found — posible bad sector o problema de cable\", <code>UNC</code> → \"Uncorrectable read error — bad sector\", y el resto de códigos estándar).",
|
||||
"<strong>Timestamps de primera y última ocurrencia</strong>, más un <strong>contador de ocurrencias</strong> deduplicado por signature de error."
|
||||
"<strong>Tipo</strong>: error E/S, SMART, sistema de archivos, pool ZFS o conexión.",
|
||||
"<strong>Mensaje original del kernel</strong> tal como aparece en dmesg, para copiarlo a un buscador o solicitud de soporte.",
|
||||
"<strong>Explicación breve</strong> para códigos ATA conocidos: <code>IDNF</code>, dirección de sector no encontrada, posible sector defectuoso o cable; <code>UNC</code>, error de lectura irrecuperable, sector defectuoso; y otros códigos estándar.",
|
||||
"<strong>Primera y última fecha</strong> y <strong>número de apariciones</strong>, agrupadas por firma del error."
|
||||
],
|
||||
"obsWhyTitle": "Por qué ProxMenux las registra y las muestra",
|
||||
"obsWhyTitle": "Por qué ProxMenux las registra y muestra",
|
||||
"obsWhyItems": [
|
||||
"<strong>El fallo de disco rara vez es un evento único.</strong> Normalmente empieza con errores esporádicos de bus ATA, algún sector UNC o un par de errores medium semanas antes de que SMART pase a <em>FAILED</em>. Sin persistencia esos avisos tempranos desaparecen de dmesg en el siguiente arranque.",
|
||||
"<strong>SMART puede mentir.</strong> Un drive puede mostrar todos los atributos en verde y aún así estar a punto de irse — la capa de observaciones captura los síntomas que SMART no expone (en especial ICRC, IDNF, link resets a velocidades SATA más bajas).",
|
||||
"<strong>Separa \"está pasando ahora\" de \"pasó recientemente\".</strong> El Monitor de salud auto-resuelve errores transitorios en cuanto dejan de dispararse, lo cual es genial para mantener limpia la lista de alertas activas — pero aún quieres ver, días después, que este disco tuvo tres errores de E/S esa noche. La tabla de observaciones es la respuesta.",
|
||||
"<strong>Alimenta el modelo de notificación por niveles.</strong> El detector disk_io lee la tasa de observaciones de esta tabla para decidir silent / WARNING / CRITICAL (la ventana deslizante de 24h introducida en 1.2.1.2). El historial es lo que hace posible esa clasificación."
|
||||
"<strong>Los fallos pueden evolucionar.</strong> Pueden aparecer errores de bus ATA, sectores UNC o errores del medio antes de que SMART indique <em>FAILED</em>. El búfer dmesg no los conserva tras reiniciar; el historial de observaciones sí.",
|
||||
"<strong>SMART no descarta todos los fallos.</strong> Un disco puede tener atributos verdes y presentar problemas. Las observaciones conservan síntomas adicionales, como ICRC, IDNF, reinicios de enlace SATA o reducción de velocidad.",
|
||||
"<strong>Distingue lo actual de lo reciente.</strong> Health Monitor resuelve automáticamente errores transitorios que dejan de aparecer. El historial permite comprobar días después que el disco tuvo, por ejemplo, tres errores de E/S esa noche.",
|
||||
"<strong>Alimenta las notificaciones por niveles.</strong> disk_io usa la frecuencia de observaciones de la tabla para elegir silencio, WARNING o CRITICAL mediante una ventana móvil de 24 horas introducida en 1.2.1.2."
|
||||
],
|
||||
"obsDedupTitle": "Cómo funcionan dedup y re-notificación",
|
||||
"obsDedupBody1": "Las observaciones se deduplican por su <strong>signature</strong> — una huella estable del tipo de error, dispositivo y campos clave de la línea del kernel. El mismo evento repitiéndose sube el <code>occurrence_count</code> de la fila existente en lugar de crear una nueva. Una <strong>signature diferente</strong> en el mismo disco crea una nueva observación y se trata como un evento nuevo para efectos de notificación.",
|
||||
"obsDedupBody2": "Las notificaciones siguen una regla anti-cascada: la primera ocurrencia de una combinación (disco, signature, severidad) dada avisa al operador, y entonces ProxMenux espera 24 horas antes de volver a pingar sobre la misma combinación — aunque el contador siga subiendo. Una severidad escalando (WARNING → CRITICAL) rompe el cooldown para que se le cuente al operador cuando las cosas empeoran, no solo cuando ocurren.",
|
||||
"obsDismissTitle": "Historial permanente vs errores activos",
|
||||
"obsDismissBody1": "Una observación no se puede descartar, ocultar ni eliminar. Cada observación distinta de un disco es una tarjeta; la misma observación vista de nuevo suma a su contador de ocurrencias y actualiza su última fecha en lugar de crear otra tarjeta. El historial pertenece al disco, identificado por su número de serie: un disco conectado donde había otro empieza sin ninguna, y un disco que el kernel renombra conserva las suyas.",
|
||||
"obsDismissBody2": "Resolver o descartar del lado de error activo (Monitor de salud) es independiente de las observaciones — la observación persiste más allá del auto-resolve del error activo. Ese es justo el punto: sobrevive, para que un warning transitorio de la semana pasada siga visible hoy en la tarjeta del disco. Mira <link>Monitor de salud</link> para el lado de error activo de la misma imagen."
|
||||
"obsDedupTitle": "Agrupación de duplicados y repetición de avisos",
|
||||
"obsDedupBody1": "Las observaciones se agrupan por <strong>firma</strong>, una huella estable del tipo de error, dispositivo y campos clave del mensaje. Las repeticiones aumentan <code>occurrence_count</code> en la fila existente. Una <strong>firma distinta</strong> crea otra observación y cuenta como evento nuevo para las notificaciones.",
|
||||
"obsDedupBody2": "Para evitar avisos en cascada, la primera combinación de disco, firma y gravedad notifica al operador. La misma combinación no vuelve a avisar hasta pasadas 24 horas, aunque aumente el contador. Un cambio de WARNING a CRITICAL interrumpe esa espera y avisa del empeoramiento.",
|
||||
"obsDismissTitle": "Historial permanente y errores activos",
|
||||
"obsDismissBody1": "Las observaciones no se pueden descartar, ocultar ni borrar. Cada firma tiene una tarjeta; si se repite, aumenta el contador y actualiza la última fecha. El historial sigue al número de serie: otro disco empieza vacío aunque use el mismo puerto, y un cambio de nombre del kernel no pierde el historial.",
|
||||
"obsDismissBody2": "Resolver o descartar un error activo en Health Monitor no modifica sus observaciones. Se conservan después de la resolución automática, de modo que un aviso transitorio de la semana pasada siga visible hoy. Consulta <link>Health Monitor</link> para gestionar los errores activos."
|
||||
},
|
||||
"dataCollected": {
|
||||
"heading": "Cómo se recopilan los datos",
|
||||
@@ -196,14 +196,14 @@
|
||||
"headerSource": "Fuente",
|
||||
"rows": [
|
||||
{
|
||||
"section": "Tarjetas resumen superiores",
|
||||
"section": "Tarjetas de resumen superiores",
|
||||
"endpoint": "/api/storage/summary",
|
||||
"source": "Agregado desde <code>lsblk</code>, <code>zpool list</code>, <code>vgs</code> / <code>lvs</code>."
|
||||
},
|
||||
{
|
||||
"section": "Inventario por disco",
|
||||
"endpoint": "/api/storage",
|
||||
"source": "<code>lsblk -O</code> + <code>smartctl -i</code> por dispositivo, con caché estable de identidad de disco (limpiado en eventos de hot-plug)."
|
||||
"source": "<code>lsblk -O</code> + <code>smartctl -i</code> por dispositivo, con caché de identidad que se vacía al conectar o desconectar discos en caliente."
|
||||
},
|
||||
{
|
||||
"section": "Almacenamientos Proxmox",
|
||||
@@ -213,22 +213,22 @@
|
||||
{
|
||||
"section": "Valores SMART actuales",
|
||||
"endpoint": "/api/storage/smart/<disk>",
|
||||
"source": "<code>smartctl -A <dev></code> — refrescado bajo demanda, no cacheado."
|
||||
"source": "<code>smartctl -A <dev></code> es una de las consultas disponibles; el endpoint de detalle también usa JSON SMART completo y datos específicos de NVMe."
|
||||
},
|
||||
{
|
||||
"section": "Historial de self-tests SMART",
|
||||
"section": "Historial de autopruebas SMART",
|
||||
"endpoint": "/api/storage/smart/<disk>/history",
|
||||
"source": "Almacenado bajo <code>/var/lib/proxmenux-monitor/smart/<disk>/</code> como snapshots JSON."
|
||||
"source": "Se guarda en <code>/usr/local/share/proxmenux/smart/<disk>/</code> como instantáneas JSON."
|
||||
},
|
||||
{
|
||||
"section": "Observaciones permanentes",
|
||||
"endpoint": "/api/storage/observations",
|
||||
"source": "Tabla SQLite alimentada por el Monitor de salud cada ciclo (se mantiene tras auto-resolve)."
|
||||
"source": "Tabla SQLite actualizada por Health Monitor en cada ciclo, conservada después de resolver errores activos."
|
||||
}
|
||||
],
|
||||
"outro": "Verificar la cadena de recolección en el host:",
|
||||
"codeComment1": "# Traer la snapshot actual desde un script",
|
||||
"codeComment2": "# Cross-check de lo que ve el panel contra la vista raw del SO"
|
||||
"codeComment1": "# Obtener el estado actual desde un script",
|
||||
"codeComment2": "# Contrastar los datos del panel con el estado directo del sistema operativo"
|
||||
},
|
||||
"whereNext": {
|
||||
"heading": "Por dónde seguir",
|
||||
@@ -236,17 +236,17 @@
|
||||
{
|
||||
"label": "Monitor de salud",
|
||||
"href": "/docs/monitor/health-monitor",
|
||||
"tail": " — la categoría discos y E/S y el modelo de supresión."
|
||||
"tail": " — categoría Discos y E/S y reglas de supresión."
|
||||
},
|
||||
{
|
||||
"label": "Referencia de la API",
|
||||
"href": "/docs/monitor/api",
|
||||
"tail": " — los endpoints de storage y SMART."
|
||||
"tail": " — endpoints de almacenamiento y SMART."
|
||||
},
|
||||
{
|
||||
"label": "Notificaciones",
|
||||
"href": "/docs/monitor/notifications",
|
||||
"tailRich": " — qué disparan aguas abajo <code>disk_io_error</code>, <code>storage_unavailable</code> y <code>smart_test_failed</code>."
|
||||
"tailRich": " — qué acciones posteriores desencadenan <code>disk_io_error</code>, <code>storage_unavailable</code> y <code>smart_test_failed</code>."
|
||||
},
|
||||
{
|
||||
"label": "Índice del panel",
|
||||
@@ -254,14 +254,14 @@
|
||||
"tail": " — el resto de pestañas."
|
||||
},
|
||||
{
|
||||
"label": "ProxMenux → Disk Manager",
|
||||
"label": "ProxMenux → Gestor de discos",
|
||||
"href": "/docs/disk-manager",
|
||||
"tail": " — la cara de las acciones: format / wipe / SMART tests / importar discos a VMs y CTs desde la TUI."
|
||||
"tail": " — acciones de la TUI: formatear, borrar, pruebas SMART e importar discos a VM y contenedores."
|
||||
},
|
||||
{
|
||||
"label": "ProxMenux → SMART Disk Health & Test",
|
||||
"label": "ProxMenux → Estado y pruebas SMART del disco",
|
||||
"href": "/docs/disk-manager/smart-disk-test",
|
||||
"tail": " — la contraparte CLI de esta pestaña: programar tests SMART, exportar el JSON que renderiza el panel y la referencia más profunda de tipos de test / interpretación."
|
||||
"tail": " — equivalente CLI: programar pruebas SMART, exportar el JSON mostrado en el panel y consultar los tipos de prueba y su interpretación."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,41 +1,41 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "ProxMenux Monitor — Panel: pestaña Logs del sistema | ProxMenux Documentation",
|
||||
"title": "ProxMenux Monitor — Panel: Logs del sistema | Documentación de ProxMenux",
|
||||
"description": "La pestaña Logs del sistema reúne tres fuentes en una sola pantalla: journalctl en vivo con filtros y descarga, historial de tareas de Proxmox (UPIDs) y log de notificaciones — todo buscable, filtrable por severidad / rango temporal y descargable como paquetes de texto."
|
||||
},
|
||||
"header": {
|
||||
"title": "Panel: pestaña Logs del sistema",
|
||||
"description": "Tres sub-pestañas bajo un mismo techo: el journal del sistema (journalctl con filtros), el historial de tareas de Proxmox y el log de notificaciones. Las tres son buscables, filtrables y descargables como paquetes de texto.",
|
||||
"description": "Tres subpestañas en una pantalla: journal del sistema (journalctl con filtros), historial de tareas de Proxmox y registro de notificaciones. Las tres permiten buscar, filtrar y descargar los datos como paquetes de texto.",
|
||||
"section": "ProxMenux Monitor · Panel"
|
||||
},
|
||||
"readOnly": {
|
||||
"title": "Solo lectura por diseño",
|
||||
"body": "Nada en esta pestaña modifica los archivos de log. Los filtros viven en la URL / estado, las descargas son paquetes generados en el servidor. El panel nunca borra entradas de log — para mantenimiento usa el propio <code>journalctl --vacuum-time=<N></code> o <code>logrotate</code> del host."
|
||||
"body": "Esta pestaña no modifica los archivos de log. Los filtros se mantienen en la URL o en el estado de la interfaz y las descargas se generan en el servidor. El panel nunca borra entradas; para su mantenimiento usa <code>journalctl --vacuum-time=<N></code> o <code>logrotate</code> en el host."
|
||||
},
|
||||
"topRow": {
|
||||
"heading": "Fila superior: cuatro contadores",
|
||||
"items": [
|
||||
"<strong>Total Entries</strong> — número de registros dentro de la ventana de filtro activa.",
|
||||
"<strong>Errors</strong> — recuento de severidad ≤ 3 (<code>err</code> / <code>crit</code> / <code>alert</code> / <code>emerg</code>).",
|
||||
"<strong>Warnings</strong> — recuento de severidad 4 (<code>warning</code>).",
|
||||
"<strong>Backups</strong> — recuento de entradas de tareas vzdump / PBS en la misma ventana."
|
||||
"<strong>Entradas totales</strong>: número de registros dentro del intervalo del filtro activo.",
|
||||
"<strong>Errores</strong>: número de entradas con severidad ≤ 3 (<code>err</code> / <code>crit</code> / <code>alert</code> / <code>emerg</code>).",
|
||||
"<strong>Advertencias</strong>: número de entradas con severidad 4 (<code>warning</code>).",
|
||||
"<strong>Copias de seguridad</strong>: número de entradas de tareas vzdump / PBS en el mismo intervalo."
|
||||
]
|
||||
},
|
||||
"subtabs": {
|
||||
"heading": "Tres sub-pestañas",
|
||||
"logsTitle": "Logs",
|
||||
"logsIntro": "El journal del sistema, servido por <code>journalctl</code> en el backend. Filtros disponibles en la barra de herramientas:",
|
||||
"logsTitle": "Registros",
|
||||
"logsIntro": "El journal del sistema, obtenido en el servidor con <code>journalctl</code>. La barra de herramientas ofrece estos filtros:",
|
||||
"logsFilters": [
|
||||
"<strong>Severidad</strong> — emerg / alert / crit / err / warning / notice / info / debug, o cualquier combinación.",
|
||||
"<strong>Severidad</strong>: emerg / alert / crit / err / warning / notice / info / debug o cualquier combinación.",
|
||||
"<strong>Rango temporal</strong> — últimos 5 min / 15 min / 1 h / 6 h / 24 h / 7 d / personalizado.",
|
||||
"<strong>Búsqueda de texto libre</strong> — substring o regex (<code>journalctl --grep</code>).",
|
||||
"<strong>Filtro por unidad</strong> — restringir a una unidad systemd concreta (<code>pveproxy.service</code>, <code>nginx.service</code>, …)."
|
||||
"<strong>Búsqueda de texto libre</strong>: subcadena o expresión regular (<code>journalctl --grep</code>).",
|
||||
"<strong>Filtro de unidad</strong>: restringe a una unidad systemd concreta (<code>pveproxy.service</code>, <code>nginx.service</code>, …)."
|
||||
],
|
||||
"logsRowsAfter": "Cada fila muestra timestamp, insignia de severidad, unidad de origen y el mensaje. Los mensajes largos se colapsan con un conmutador \"mostrar más\". La acción <strong>Download</strong> empaqueta el filtro actual en un único archivo <code>.txt</code> vía <code>GET /api/logs/download</code> — útil cuando quieres compartir un trozo del journal con alguien.",
|
||||
"logDetailsModalTitle": "Modal Log Details",
|
||||
"logDetailsBody": "Pulsar cualquier fila abre una modal <strong>Log Details</strong> con cada campo estructurado que journald capturó para esa entrada — la misma vista que construirías a mano ejecutando <code>journalctl --output=verbose</code> en el host.",
|
||||
"logDetailsBody": "Al pulsar una fila se abre <strong>Detalles del log</strong> con todos los campos estructurados que journald capturó para esa entrada, como al ejecutar <code>journalctl --output=verbose</code> en el host.",
|
||||
"logDetailsImageAlt": "Modal Log Details — una entrada del journal desplegada con Level, Service, Timestamp, Source, Systemd Unit, Process ID, Hostname y el mensaje completo",
|
||||
"logDetailsImageCaption": "Modal Log Details — cada campo estructurado que journald lleva para esta entrada, con el mensaje íntegro sin truncar al final. Útil para logs de cron y de servicios donde importa la línea de comandos ejecutada.",
|
||||
"logDetailsImageCaption": "Detalles del log: todos los campos estructurados de journald para la entrada, con el mensaje completo sin truncar al final. Útil para logs de cron y servicios donde importa la línea de comando ejecutada.",
|
||||
"fieldsIntro": "Campos mostrados:",
|
||||
"fields": [
|
||||
"<strong>Level</strong> — insignia de severidad coloreada (INFO / WARNING / ERROR / CRITICAL).",
|
||||
@@ -45,15 +45,15 @@
|
||||
"<strong>Systemd Unit</strong> — la unidad <code>.service</code> / <code>.timer</code> / <code>.socket</code> real si la entrada estaba asociada a una.",
|
||||
"<strong>Process ID</strong> — PID del proceso emisor.",
|
||||
"<strong>Hostname</strong> — útil cuando los journals se reenvían entre nodos de cluster.",
|
||||
"<strong>Message</strong> — el mensaje completo sin truncar en un bloque monoespaciado, listo para copiar."
|
||||
"<strong>Mensaje</strong>: mensaje completo sin truncar, en un bloque monoespaciado listo para copiar."
|
||||
],
|
||||
"maxLevelStoreTitle": "MaxLevelStore de journald",
|
||||
"maxLevelStoreBody": "En una instalación recién hecha de Proxmox, journald usa por defecto <code>MaxLevelStore=warning</code>, lo que descarta en silencio los mensajes de nivel info. El Monitor lo detecta en el arranque y añade un drop-in (<code>/etc/systemd/journald.conf.d/proxmenux-loglevel.conf</code>) que sube el umbral a <code>info</code> para que la pestaña Logs tenga algo que mostrar en todas las severidades.",
|
||||
"backupsTitle": "Backups",
|
||||
"maxLevelStoreBody": "En una instalación nueva de Proxmox, journald usa por defecto <code>MaxLevelStore=warning</code>, que descarta los mensajes info. Monitor lo detecta al arrancar y añade un archivo de configuración complementario (<code>/etc/systemd/journald.conf.d/proxmenux-loglevel.conf</code>) con el umbral <code>info</code> para conservar los mensajes informativos y los de mayor gravedad. Esto no incluye debug.",
|
||||
"backupsTitle": "Copias de seguridad",
|
||||
"backupsBody": "Historial de tareas de Proxmox filtrado a las entradas relacionadas con backup. Una fila por tarea (<code>vzdump</code>, transferencias PBS, Garbage Collect, Verify) con el estado (OK / WARNINGS / ERROR), el guest implicado, el almacenamiento de origen, la duración y el UPID. Pulsa una fila para cargar el log completo de la tarea vía <code>GET /api/task-log/<upid></code> — los mismos datos que Proxmox expone a través de <em>Datacenter → Tasks</em>, acotado a backups.",
|
||||
"notificationsTitle": "Notifications",
|
||||
"notificationsBody1": "Cada notificación enviada por el Monitor — Telegram, Discord, Email, Gotify, ntfy, Slack, Teams, webhook. Cada fila: timestamp, canal, tipo de evento, severidad, el título renderizado, el cuerpo renderizado y (si IA está activa) un conmutador para ver la reescritura con IA junto al original.",
|
||||
"notificationsBody2": "Usa esta pestaña para verificar que un canal está entregando de verdad y para comparar lo que produjo la reescritura con IA frente a la plantilla base. La configuración de canales vive en la página detallada de <link>Notificaciones</link>."
|
||||
"notificationsTitle": "Notificaciones",
|
||||
"notificationsBody1": "Todas las notificaciones enviadas por Monitor: Telegram, Discord, correo electrónico, Gotify, ntfy, Slack, Teams y webhook. Cada fila muestra fecha y hora, canal, tipo de evento, severidad, título y cuerpo generados y, si la IA está activa, un selector para comparar su reescritura con el original.",
|
||||
"notificationsBody2": "Usa esta pestaña para verificar la entrega de un canal y comparar la reescritura de IA con la plantilla base. Los canales se configuran en la página detallada de <link>Notificaciones</link>."
|
||||
},
|
||||
"dataCollected": {
|
||||
"heading": "Cómo se recopilan los datos",
|
||||
@@ -64,27 +64,27 @@
|
||||
{
|
||||
"subtab": "Logs (filtro en vivo)",
|
||||
"endpoint": "/api/logs",
|
||||
"source": "<code>journalctl --output json --since <range></code> con filtros de severidad / unidad / búsqueda aplicados en el servidor."
|
||||
"source": "<code>journalctl --output json --since <range></code> con filtros de severidad, unidad y búsqueda aplicados en el servidor."
|
||||
},
|
||||
{
|
||||
"subtab": "Download",
|
||||
"subtab": "Descargar",
|
||||
"endpoint": "/api/logs/download",
|
||||
"source": "La misma consulta, devuelta como texto plano para grep / less."
|
||||
},
|
||||
{
|
||||
"subtab": "Backups",
|
||||
"subtab": "Copias de seguridad",
|
||||
"endpoint": "/api/backups",
|
||||
"source": "Historial de tareas PVE filtrado por <code>vzdump</code>, transferencias PBS, Garbage Collect, Verify."
|
||||
},
|
||||
{
|
||||
"subtab": "Vista en detalle de una tarea de backup",
|
||||
"subtab": "Detalles de una tarea de copia de seguridad",
|
||||
"endpoint": "/api/task-log/<upid>",
|
||||
"source": "Log completo de la tarea en texto plano leído de <code>/var/log/pve/tasks/<index>/<upid></code>."
|
||||
},
|
||||
{
|
||||
"subtab": "Historial de notificaciones",
|
||||
"endpoint": "/api/notifications/history",
|
||||
"source": "Tabla SQLite <code>notification_history</code> alimentada por el loop de envío."
|
||||
"source": "Tabla SQLite <code>notification_history</code>, alimentada por el bucle de envío."
|
||||
}
|
||||
],
|
||||
"apiIntro": "Tanto el filtro en vivo como las descargas también son accesibles vía API:",
|
||||
@@ -98,17 +98,17 @@
|
||||
{
|
||||
"label": "Monitor de salud",
|
||||
"href": "/docs/monitor/health-monitor",
|
||||
"tail": " — la categoría Logs del sistema que vigila patrones persistentes / picos / cascadas."
|
||||
"tail": " — la categoría Logs del sistema, que vigila patrones persistentes, picos y cascadas."
|
||||
},
|
||||
{
|
||||
"label": "Notificaciones",
|
||||
"href": "/docs/monitor/notifications",
|
||||
"tail": " — el watcher del journal lee la misma fuente y convierte coincidencias en notificaciones."
|
||||
"tail": " — el observador del journal lee la misma fuente y convierte las coincidencias en notificaciones."
|
||||
},
|
||||
{
|
||||
"label": "Referencia de la API",
|
||||
"href": "/docs/monitor/api",
|
||||
"tail": " — los endpoints logs y task-log con sus parámetros de consulta."
|
||||
"tail": " — endpoints logs y task-log y sus parámetros de consulta."
|
||||
},
|
||||
{
|
||||
"label": "Índice del panel",
|
||||
|
||||
@@ -1,85 +1,85 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "ProxMenux Monitor — Panel: pestaña Resumen del sistema | ProxMenux Documentation",
|
||||
"description": "La pestaña por defecto al abrir ProxMenux Monitor: cuatro tarjetas de métricas (CPU, memoria, VMs y LXCs activos, temperatura) con actualizaciones en vivo y sparkline, la gráfica de métricas históricas y los paneles condensados de Almacenamiento y Red con acceso directo a sus pestañas dedicadas."
|
||||
"title": "ProxMenux Monitor — Panel: Resumen del sistema | Documentación de ProxMenux",
|
||||
"description": "La pestaña inicial por defecto de ProxMenux Monitor: cuatro tarjetas (CPU, memoria, VM y LXC activos, temperatura) con actualización en vivo y minigráfico de tendencia, gráfica histórica y resúmenes de almacenamiento y red con enlaces a sus pestañas."
|
||||
},
|
||||
"header": {
|
||||
"title": "Panel: pestaña Resumen del sistema",
|
||||
"description": "La primera pestaña que abre el panel. Cuatro tarjetas de métricas en vivo arriba, la gráfica de métricas históricas en el medio y paneles condensados de almacenamiento / red abajo — todo derivado de las mismas APIs que alimentan las pestañas dedicadas.",
|
||||
"description": "La pestaña que el panel abre por defecto. Cuatro tarjetas con métricas en vivo arriba, gráfica histórica en el centro y resúmenes de almacenamiento y red abajo, usando las mismas API que sus pestañas dedicadas.",
|
||||
"section": "ProxMenux Monitor · Panel"
|
||||
},
|
||||
"readOnly": {
|
||||
"title": "Un vistazo de solo lectura",
|
||||
"body": "Nada en esta pestaña es una superficie de control — todos los paneles son informativos. Las acciones viven en las pestañas dedicadas a las que enlazan: entra en Almacenamiento para gestionar discos, en VMs y LXCs para arrancar / parar guests, en la pestaña Seguridad para configurar autenticación, y así sucesivamente."
|
||||
"body": "Todos los paneles de esta pestaña son informativos. Las acciones están en las pestañas enlazadas: Almacenamiento para gestionar discos, VMs y LXCs para iniciar o detener invitados y Seguridad para configurar la autenticación."
|
||||
},
|
||||
"captureAlt": "Pestaña Resumen del sistema — cuatro tarjetas de métricas (CPU, Memoria, VMs activos, Temperatura), gráfica de métricas del nodo y tarjetas resumen de Almacenamiento / Red",
|
||||
"captureCaption": "La pestaña Resumen del sistema — la que abre el panel. Las cuatro tarjetas están en vivo, la gráfica de debajo es histórica y las dos tarjetas de abajo resumen Almacenamiento y Red.",
|
||||
"captureCaption": "Resumen del sistema, la pestaña inicial por defecto. Las cuatro tarjetas se actualizan en vivo, la gráfica muestra el historial y las dos tarjetas inferiores resumen almacenamiento y red.",
|
||||
"topRow": {
|
||||
"heading": "Fila superior: tarjetas de métricas en vivo",
|
||||
"intro": "Cuatro tarjetas en una rejilla 2×2 en móvil, una sola fila en escritorio. Cada una se actualiza desde <code>/api/system</code> cada pocos segundos.",
|
||||
"intro": "Cuatro tarjetas en rejilla 2×2 en móvil y una fila en escritorio. Cada una recibe datos de <code>/api/system</code> cada pocos segundos.",
|
||||
"headerCard": "Tarjeta",
|
||||
"headerWhat": "Qué muestra",
|
||||
"headerSource": "Fuente",
|
||||
"rows": [
|
||||
{
|
||||
"card": "CPU Usage",
|
||||
"card": "Uso de CPU",
|
||||
"what": "Porcentaje actual con barra de progreso. Se actualiza cada ~1 s vía el sampler de signos vitales.",
|
||||
"source": "psutil.cpu_percent()"
|
||||
},
|
||||
{
|
||||
"card": "Memory Usage",
|
||||
"what": "GB usados, porcentaje, GB totales. La barra de progreso sigue al porcentaje.",
|
||||
"card": "Uso de la memoria",
|
||||
"what": "GB usados, porcentaje y GB totales. La barra representa el porcentaje.",
|
||||
"source": "psutil.virtual_memory()"
|
||||
},
|
||||
{
|
||||
"card": "Active VM & LXC",
|
||||
"what": "Recuento de guests actualmente en ejecución, con una insignia de desglose Running / Stopped y una línea al pie con los totales de VMs y LXCs.",
|
||||
"card": "VM y LXC activos",
|
||||
"what": "Número de invitados en ejecución, con desglose En ejecución / Detenidos y totales de VMs y LXCs al pie.",
|
||||
"source": "/api/vms (consolidado)"
|
||||
},
|
||||
{
|
||||
"card": "Temperature",
|
||||
"what": "Temperatura de CPU en °C con insignia de estado (cool / warm / hot) y un sparkline de 5 minutos detrás. Muestra <em>N/A</em> cuando no se detecta sensor. Pulsa para abrir la modal de detalle de temperatura.",
|
||||
"card": "Temperatura",
|
||||
"what": "Temperatura de CPU en °C, estado (fría / templada / caliente) y minigráfico de los últimos 5 minutos detrás. Muestra <em>N/A</em> si no hay sensor. Pulsa para abrir los detalles.",
|
||||
"source": "sensors / coretemp"
|
||||
}
|
||||
],
|
||||
"thresholdsTitle": "Colores de estado y umbrales aplicados aquí",
|
||||
"thresholdsIntro": "Cada anillo, barra y sparkline en las cuatro tarjetas de métricas sigue la misma clasificación — <green/> <strong>verde</strong> por debajo de Warning, <amber/> <strong>ámbar</strong> entre Warning y Critical, <red/> <strong>rojo</strong> en Critical y por encima. Valores por defecto recomendados que vienen con ProxMenux:",
|
||||
"thresholdsIntro": "Cada anillo, barra y minigráfico usa la misma escala: <green/> <strong>verde</strong> por debajo de Advertencia, <amber/> <strong>ámbar</strong> entre Advertencia y Crítico, <red/> <strong>rojo</strong> desde Crítico. Valores recomendados incluidos con ProxMenux:",
|
||||
"thresholdsItems": [
|
||||
"<strong>Uso de CPU</strong> — Warning 85 %, Critical 95 %.",
|
||||
"<strong>Memoria</strong> — Warning 85 %, Critical 95 % (el swap también dispara Critical al 5 % usado — un host Proxmox sano apenas debería tocar swap).",
|
||||
"<strong>Temperatura de CPU</strong> — Warning 80 °C, Critical 90 °C."
|
||||
"<strong>Uso de CPU</strong>: advertencia 85 %, crítico 95 %.",
|
||||
"<strong>Memoria</strong>: advertencia 85 %, crítico 95 %. Swap también activa Crítico al 5 % de uso; un host Proxmox sano debería usarlo rara vez.",
|
||||
"<strong>Temperatura de CPU</strong>: advertencia 80 °C, crítico 90 °C."
|
||||
],
|
||||
"thresholdsOutro": "Cada valor es configurable por host — <link>Settings → Health Monitor Thresholds</link> es la fuente única de verdad y explica cómo ajustarlos.",
|
||||
"sparklineTitle": "El sparkline es significativo",
|
||||
"thresholdsOutro": "Los valores se configuran por host; <link>Ajustes → Umbrales del monitor de salud</link> documenta y centraliza su ajuste.",
|
||||
"sparklineTitle": "El minigráfico muestra la tendencia",
|
||||
"sparklineBody": "La tarjeta de temperatura dibuja una traza de 5 minutos bajo el valor, con la línea y el degradado siguiendo el mismo par Warning/Critical documentado arriba. Es la forma más rápida de ver si el host está en escalada térmica sin abrir la modal de detalle."
|
||||
},
|
||||
"processes": {
|
||||
"heading": "Top procesos por CPU / Memoria",
|
||||
"intro": "Las tarjetas CPU Usage y Memory de la pestaña Resumen son clicables. Al pulsar cualquiera de ellas se abre una lista ordenable con los 25 procesos top — ordenada por uso de CPU si la abriste desde la tarjeta de CPU, o por memoria residente si la abriste desde la de Memory.",
|
||||
"intro": "Las tarjetas Uso de CPU y Memoria son pulsables. Abren una lista ordenable con los 25 procesos principales, por uso de CPU desde la primera tarjeta o por memoria residente desde la segunda.",
|
||||
"listTitle": "El diálogo con la lista",
|
||||
"listItems": [
|
||||
"<strong>Auto-refresco</strong> — la lista se actualiza cada 5 segundos mientras el diálogo está abierto y deja de pedir datos en cuanto se cierra.",
|
||||
"<strong>Filtro</strong> — la caja de búsqueda acota la lista por command, user o PID.",
|
||||
"<strong>Actualización automática</strong>: la lista se actualiza cada 5 segundos mientras está abierta y deja de consultar datos al cerrar.",
|
||||
"<strong>Filtro</strong>: el buscador acota la lista por comando, usuario o PID.",
|
||||
"<strong>Barra en línea</strong> — la columna de la métrica principal dibuja una barra pequeña escalada al mayor valor de la lista filtrada, para que el orden siga siendo visible aunque ningún proceso esté cerca del 100 %.",
|
||||
"<strong>Layout móvil</strong> — por debajo de 640 px las columnas PID y User se ocultan para que Command, CPU % y Memory sigan cabiendo en la pantalla de un teléfono sin scroll horizontal."
|
||||
],
|
||||
"captureListAlt": "Modal Top processes by Memory — tabla con columnas PID, USER, COMMAND, CPU %, Memory ordenada por RSS",
|
||||
"captureListCaption": "La tarjeta Memory abre la lista ordenada por RSS (acento índigo). La tarjeta CPU abre la misma lista ordenada por uso de CPU (acento azul).",
|
||||
"detailTitle": "Detalle por proceso",
|
||||
"detailIntro": "Al pulsar cualquier fila de la lista se abre un segundo diálogo con la foto en vivo de ese proceso, organizada en cuatro secciones:",
|
||||
"detailIntro": "Pulsa una fila para abrir un segundo diálogo con los datos en vivo del proceso, organizados en cuatro secciones:",
|
||||
"detailItems": [
|
||||
"<strong>Overview</strong> — estado, proceso padre, número de hilos, descriptores de fichero abiertos, usuario y grupo.",
|
||||
"<strong>Resources</strong> — CPU %, Memoria %, Resident (RSS), Virtual size, Swap, totales de I/O de lectura y escritura.",
|
||||
"<strong>Command</strong> — nombre corto, línea de comandos completa, ruta del ejecutable y directorio de trabajo.",
|
||||
"<strong>Lifetime</strong> — timestamp de arranque y tiempo transcurrido en ejecución."
|
||||
"<strong>Resumen</strong>: estado, proceso padre, número de hilos, descriptores de archivo abiertos, usuario y grupo.",
|
||||
"<strong>Recursos</strong>: CPU %, memoria %, memoria residente (RSS), tamaño virtual, swap y totales de E/S leída y escrita.",
|
||||
"<strong>Comando</strong>: nombre corto, línea de comandos completa, ruta del ejecutable y directorio de trabajo.",
|
||||
"<strong>Duración</strong>: fecha y hora de inicio y tiempo transcurrido en ejecución."
|
||||
],
|
||||
"detailRefresh": "El diálogo de detalle se refresca cada 3 segundos mientras está abierto. Si el proceso termina con el diálogo abierto, el polling se detiene, aparece un banner ámbar <em>This process has finished</em> y el último snapshot capturado se queda en pantalla (atenuado) para que sigas viendo qué estaba pasando justo antes de que terminara.",
|
||||
"captureDetailAlt": "Modal de detalle de proceso — secciones Overview, Resources, Command y Lifetime para un único PID",
|
||||
"detailRefresh": "El detalle se actualiza cada 3 segundos mientras está abierto. Al terminar el proceso, cesan las consultas y aparece el aviso ámbar <em>Este proceso ha terminado</em>. La última captura queda atenuada para ver qué ocurría justo antes de finalizar.",
|
||||
"captureDetailAlt": "Detalle de proceso: secciones Resumen, Recursos, Comando y Duración para un PID",
|
||||
"captureDetailCaption": "Diálogo de detalle por proceso abierto desde una fila de la lista. El color de acento sigue al de la tarjeta que lo abrió (azul para CPU, índigo para Memory)."
|
||||
},
|
||||
"middle": {
|
||||
"heading": "Medio: gráficas de métricas del nodo",
|
||||
"body1": "Bajo la fila superior se encuentra el componente <code>NodeMetricsCharts</code> — gráficas históricas de CPU, memoria y E/S de disco tomadas del propio almacén RRD de Proxmox vía <code>/api/node/metrics</code>. Un selector de timeframe alterna entre <em>1 hora / 24 horas / 7 días / 30 días / 1 año</em>; la resolución de los datos baja a medida que crece la ventana para que la gráfica se mantenga fluida.",
|
||||
"body1": "Bajo las tarjetas está <code>NodeMetricsCharts</code>, con gráficas históricas de CPU, memoria y E/S de disco del almacén RRD de Proxmox mediante <code>/api/node/metrics</code>. El selector permite <em>1 hora / 24 horas / 7 días / 30 días / 1 año</em>; la resolución baja al ampliar el intervalo para mantener la fluidez.",
|
||||
"body2": "Son las mismas gráficas que la UI web de Proxmox renderiza para un nodo, simplemente consolidadas en el tema oscuro del Monitor y alineadas con el resto de paneles."
|
||||
},
|
||||
"bottom": {
|
||||
@@ -87,25 +87,25 @@
|
||||
"storageTitle": "Tarjeta Storage Overview",
|
||||
"storageIntro": "Una vista condensada del estado de almacenamiento del host, dividida en tres bloques:",
|
||||
"storageItems": [
|
||||
"<strong>Total Node Capacity</strong> — suma de todos los almacenamientos de VM/LXC más el almacenamiento local de sistema, con una barra de progreso en degradado del reparto total usado / libre.",
|
||||
"<strong>Capacidad total del nodo</strong>: suma de los almacenamientos de VM/LXC y del almacenamiento local del sistema, con barra degradada de espacio usado y libre.",
|
||||
"<strong>Total Capacity / Physical Disks</strong> — titular de capacidad bruta y el recuento de discos físicos descubiertos.",
|
||||
"<strong>VM/LXC Storage</strong> — usado / libre / porcentaje para los almacenamientos donde viven los guests, más un contador cuando hay más de uno configurado.",
|
||||
"<strong>Local Storage (System)</strong> — el propio mount raíz / sistema del host, separado del pool de guests."
|
||||
"<strong>Almacenamiento VM/LXC</strong>: espacio usado, libre y porcentaje de los almacenamientos de invitados, con contador si hay más de uno.",
|
||||
"<strong>Almacenamiento local (sistema)</strong>: montaje raíz o de sistema del host, separado del pool de invitados."
|
||||
],
|
||||
"storageDrillIn": "La vista en detalle vive en la <link>pestaña Almacenamiento</link> — SMART por disco, detalles de pool ZFS, historial de observaciones, etc.",
|
||||
"storageDrillIn": "Los detalles están en la <link>pestaña Almacenamiento</link>: SMART por disco, pools ZFS, historial de observaciones, etc.",
|
||||
"networkTitle": "Tarjeta Network Overview",
|
||||
"networkBody1": "La línea superior muestra el recuento de interfaces activas (físicas + bridges combinados). Debajo, dos filas de insignias coloreadas para las interfaces en <code>up</code> — NICs físicas en azul, bridges en un color secundario. Un selector de timeframe arriba a la derecha (1 hora / 24 horas / 7 días / 30 días / 1 año) controla una pequeña gráfica de tráfico RX / TX.",
|
||||
"networkBody2": "La vista en detalle por interfaz (IP/MAC, gráfica RRD, miembros del bridge, modo del bond, etc.) vive en la <link>pestaña Red</link>."
|
||||
"networkBody2": "Los detalles por interfaz (IP/MAC, gráfica RRD, miembros del bridge, modo de bond, etc.) están en la <link>pestaña Red</link>."
|
||||
},
|
||||
"refresh": {
|
||||
"heading": "Modelo de refresco",
|
||||
"intro": "Cada panel gestiona su propio estado de carga (<code>loadingStates.cpu</code>, <code>loadingStates.storage</code>, …) para que una fuente lenta no bloquee al resto. Mientras un panel está obteniendo datos, muestra un skeleton con animación pulse; los fetchs fallidos degradan con elegancia — por ejemplo, un sensor de temperatura ausente renderiza la tarjeta como <em>N/A</em> en vez de un error.",
|
||||
"heading": "Modelo de actualización",
|
||||
"intro": "Cada panel tiene su propio estado de carga (<code>loadingStates.cpu</code>, <code>loadingStates.storage</code>, …), de modo que una fuente lenta no bloquea las demás. Mientras carga muestra un marcador pulsante. Los fallos se presentan sin interrumpir el resto; por ejemplo, sin sensor de temperatura muestra <em>N/A</em> en vez de un error.",
|
||||
"items": [
|
||||
"<strong>Tarjetas de métricas superiores</strong> — refresco cada ~5 s. Los paneles de CPU y temperatura también reciben un push de 1 s del sampler de signos vitales.",
|
||||
"<strong>Gráfica de métricas del nodo</strong> — refresco cada 30 s, o al cambiar de timeframe.",
|
||||
"<strong>Tarjetas superiores</strong>: se actualizan cada ~5 s. CPU y temperatura también reciben datos cada 1 s del muestreador de signos vitales.",
|
||||
"<strong>Gráfica de métricas del nodo</strong>: carga al abrir y al cambiar de intervalo o idioma. Si hay que reintentar, espera 60 s.",
|
||||
"<strong>Tarjeta de almacenamiento</strong> — refresco cada 60 s. Los datos SMART se cachean más tiempo (la pestaña Almacenamiento dispara una lectura fresca bajo demanda).",
|
||||
"<strong>Tarjeta de red</strong> — refresco cada 5 s en el timeframe activo.",
|
||||
"<strong>Refresco manual</strong> — el botón Refresh en la cabecera fuerza a todos los paneles a recargar inmediatamente."
|
||||
"<strong>Tarjeta de red</strong>: resumen cada 59 s y gráfica de tráfico cada 60 s en el intervalo activo.",
|
||||
"<strong>Actualización manual</strong>: el botón Actualizar de la cabecera vuelve a cargar todos los paneles inmediatamente."
|
||||
]
|
||||
},
|
||||
"dataCollected": {
|
||||
@@ -115,12 +115,12 @@
|
||||
"headerSource": "Fuente",
|
||||
"rows": [
|
||||
{
|
||||
"card": "Pastilla de estado de la cabecera",
|
||||
"card": "Indicador de estado de la cabecera",
|
||||
"endpoint": "/api/health",
|
||||
"source": "El estado global cacheado que produce el Monitor de salud en cada ciclo."
|
||||
},
|
||||
{
|
||||
"card": "CPU / RAM / Swap / Uptime",
|
||||
"card": "CPU / RAM / Swap / Tiempo de actividad",
|
||||
"endpoint": "/api/system",
|
||||
"source": "<code>/proc/stat</code>, <code>/proc/meminfo</code>, <code>/proc/uptime</code> con muestreo de CPU en ventana corta."
|
||||
},
|
||||
@@ -135,13 +135,13 @@
|
||||
"source": "Mira las pestañas dedicadas para cada una. Las tarjetas de la cabecera muestran una vista compactada de los mismos endpoints."
|
||||
},
|
||||
{
|
||||
"card": "Cadencia de refresco",
|
||||
"card": "Frecuencia de actualización",
|
||||
"endpoint": "—",
|
||||
"source": "CPU / red 5 s; almacenamiento / VMs 30 s; info estática cada 5 min. El botón Refresh de la cabecera fuerza una recarga inmediata en todos los paneles."
|
||||
"source": "Sistema cada 5 s; almacenamiento, VMs y resumen de red cada 59 s. El botón Actualizar de la cabecera fuerza la recarga inmediata de todos los paneles."
|
||||
}
|
||||
],
|
||||
"codeComment1": "# Llamada única que alimenta la pastilla de la cabecera",
|
||||
"codeComment2": "# pública, sin token",
|
||||
"codeComment1": "# Llamada que alimenta el indicador de estado de la cabecera",
|
||||
"codeComment2": "# público, sin token",
|
||||
"codeComment3": "# Snapshot autenticada que usan las tarjetas"
|
||||
},
|
||||
"whereNext": {
|
||||
@@ -150,12 +150,12 @@
|
||||
{
|
||||
"label": "Monitor de salud",
|
||||
"href": "/docs/monitor/health-monitor",
|
||||
"tail": " — la modal detrás de la pastilla de estado de la cabecera (diez categorías, descartes, supresión)."
|
||||
"tail": " — la ventana del indicador de estado de la cabecera: diez categorías, descartes y supresión de avisos."
|
||||
},
|
||||
{
|
||||
"label": "Referencia de la API",
|
||||
"href": "/docs/monitor/api",
|
||||
"tail": " — los endpoints system, info y health."
|
||||
"tail": " — endpoints system, info y health."
|
||||
},
|
||||
{
|
||||
"label": "Notificaciones",
|
||||
@@ -165,12 +165,12 @@
|
||||
{
|
||||
"label": "Índice del panel",
|
||||
"href": "/docs/monitor/dashboard",
|
||||
"tail": " — las otras ocho pestañas de un vistazo."
|
||||
"tail": " — las demás pestañas del panel de un vistazo."
|
||||
},
|
||||
{
|
||||
"label": "Arquitectura",
|
||||
"href": "/docs/monitor/architecture",
|
||||
"tail": " — los hilos en background y las APIs que alimentan esta vista."
|
||||
"tail": " — los hilos en segundo plano y las API que alimentan esta vista."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "ProxMenux Monitor — Panel: pestaña Terminal | ProxMenux Documentation",
|
||||
"description": "Shell en el navegador al host Proxmox: hasta 4 terminales a la vez con vista en rejilla, ayudas de teclado para móvil (ESC, TAB, flechas, combinaciones con Ctrl), una chuleta de comandos integrada con cheat.sh, protegida con JWT."
|
||||
"title": "ProxMenux Monitor — Panel: Terminal | Documentación de ProxMenux",
|
||||
"description": "Shell del host Proxmox en el navegador: hasta 4 terminales en rejilla, botones de teclado para móviles (ESC, TAB, flechas, combinaciones Ctrl), guía de comandos integrada con cheat.sh y protección JWT."
|
||||
},
|
||||
"header": {
|
||||
"title": "Panel: pestaña Terminal",
|
||||
"description": "Una sesión real de shell en el navegador, sobre el host Proxmox. Hasta cuatro terminales a la vez, ayudas de teclado para móvil, una chuleta de comandos integrada — todo en el mismo tema que el resto del panel.",
|
||||
"description": "Una sesión real de shell en el host Proxmox desde el navegador. Hasta cuatro terminales a la vez, botones de teclado para móviles y una guía de comandos integrada, con el mismo tema que el resto del panel.",
|
||||
"section": "ProxMenux Monitor · Panel"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Un PTY real en el navegador",
|
||||
"body": "El terminal asigna una PTY del lado del servidor a través de <code>flask_terminal_routes</code>, la canaliza por un WebSocket hacia <code>xterm.js</code> en el navegador y se ejecuta como <code>root</code> (el usuario de la unidad systemd). Cualquier cosa que puedas hacer en <code>ssh root@<host></code> funciona aquí — incluidos <code>vim</code>, <code>tmux</code>, herramientas ncurses y las CLIs de Proxmox (<code>qm</code>, <code>pct</code>, <code>pvesh</code>, <code>pvecm</code>). Cada PTY lanzada desde esta pestaña exporta la variable de entorno <code>PROXMENUX_TERMINAL=monitor</code>, que hereda todo proceso <code>bash</code> hijo — incluida una llamada posterior a <code>menu</code> — para que los flujos de ProxMenux puedan saber si se están ejecutando dentro del terminal del navegador del Monitor."
|
||||
"body": "El terminal crea una PTY en el servidor mediante <code>flask_terminal_routes</code>, la conecta por WebSocket con <code>xterm.js</code> en el navegador y se ejecuta como <code>root</code>, el usuario de la unidad systemd. Permite lo mismo que <code>ssh root@<host></code>: <code>vim</code>, <code>tmux</code>, herramientas ncurses y las CLI de Proxmox (<code>qm</code>, <code>pct</code>, <code>pvesh</code>, <code>pvecm</code>). Cada PTY exporta <code>PROXMENUX_TERMINAL=monitor</code>. Sus procesos hijos <code>bash</code>, incluido un lanzamiento posterior de <code>menu</code>, heredan esta variable para reconocer el terminal de Monitor."
|
||||
},
|
||||
"singleAlt": "Pestaña Terminal de ProxMenux Monitor — una única sesión de terminal mostrando el resumen del sistema de Fastfetch al hacer login",
|
||||
"singleCaption": "Un terminal del host abierto — la barra de arriba muestra el recuento (<em>1 / 4 terminals</em>), <em>+ New</em>, <em>Search</em>, <em>Clear</em> y <em>Close</em>. Las ayudas de teclado para móvil aparecen bajo el terminal en dispositivos táctiles.",
|
||||
@@ -20,24 +20,24 @@
|
||||
"body2": "Para llegar a un <strong>contenedor LXC</strong> desde el navegador, usa el botón <em>Console</em> dedicado en cada tarjeta de CT en ejecución de la <link>pestaña VMs y LXCs</link>. Abre una modal que ejecuta <code>pct enter <vmid></code> y reutiliza la misma barra para móvil descrita abajo."
|
||||
},
|
||||
"menuGuard": {
|
||||
"heading": "Guarda de autoactualización cuando menu corre dentro de este terminal",
|
||||
"body1": "El <code>menu</code> de ProxMenux se autoactualiza en sitio: aceptar el prompt reemplaza su propio árbol de scripts y recarga. Eso funciona bien por SSH o desde la consola de Proxmox, pero el terminal del navegador no puede sobrevivir a ello — la actualización desmonta la propia PTY sobre la que corre la shell y el WebSocket cae a mitad. Para no dejar la sesión colgada, los handlers internos <code>check_updates_stable</code>, <code>check_updates_beta</code> y <code>apply_release_channel</code> leen <code>PROXMENUX_TERMINAL</code> y detectan el contexto Monitor.",
|
||||
"body2": "Al detectarlo, el diálogo clásico sí / no se sustituye por un msgbox informativo con el instalador canónico de una línea — <code>bash -c \"$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh)\"</code> para el canal estable, y la URL equivalente de <code>install_proxmenux_beta.sh</code> para beta. La actualización propiamente dicha se deja para una sesión SSH o la consola del host Proxmox; el terminal del navegador solo se usa para confirmar y leer el comando."
|
||||
"heading": "Protección de autoactualización de menu en este terminal",
|
||||
"body1": "<code>menu</code> se autoactualiza sustituyendo su árbol de scripts y recargándose al aceptar. Funciona por SSH o consola Proxmox, pero en el navegador cerraría la PTY de la shell e interrumpiría el WebSocket. Para evitarlo, <code>check_updates_stable</code>, <code>check_updates_beta</code> y <code>apply_release_channel</code> consultan <code>PROXMENUX_TERMINAL</code> y detectan el contexto Monitor.",
|
||||
"body2": "Al detectarlo, el diálogo sí/no se sustituye por un mensaje informativo con el comando oficial del instalador: <code>bash -c \"$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh)\"</code> para estable y la URL equivalente de <code>install_proxmenux_beta.sh</code> para beta. Ejecuta la actualización por SSH o consola del host Proxmox; el terminal del navegador solo permite leer y confirmar el mensaje."
|
||||
},
|
||||
"fourTerminals": {
|
||||
"heading": "Hasta cuatro terminales a la vez",
|
||||
"intro": "La pestaña te permite abrir hasta cuatro terminales del host simultáneamente. Cada uno obtiene su propia PTY y su propio WebSocket — son sesiones totalmente independientes. Dos layouts se alternan con los iconos junto al botón \"New\":",
|
||||
"intro": "La pestaña permite abrir hasta cuatro terminales del host simultáneamente, cada uno con su propia PTY y WebSocket: son sesiones independientes. Los iconos junto a «Nuevo» alternan entre dos disposiciones:",
|
||||
"items": [
|
||||
"<strong>Vista en pestañas</strong> — un terminal visible a la vez, los demás como pestañas nombradas arriba (<em>Terminal 1</em>, <em>Terminal 2</em>…). Ideal para trabajar en una tarea con el resto en background.",
|
||||
"<strong>Vista en rejilla</strong> — todos los terminales abiertos visibles a la vez en una rejilla 2×2. Útil para vigilar <code>htop</code> en un panel, <code>iftop</code> en otro y editar en un tercero sin saltar entre ellos."
|
||||
"<strong>Vista en pestañas</strong>: un terminal visible y los demás como pestañas con nombre arriba (<em>Terminal 1</em>, <em>Terminal 2</em>…). Adecuado para trabajar en una tarea con las otras en segundo plano.",
|
||||
"<strong>Vista en rejilla</strong>: todos los terminales abiertos en una rejilla 2×2. Permite vigilar <code>htop</code> en uno, <code>iftop</code> en otro y editar en un tercero sin cambiar de pestaña."
|
||||
],
|
||||
"outro": "La barra muestra el recuento actual (<em>1/4 terminals</em>, <em>4/4 terminals</em>). Las nuevas pestañas se abren con <strong>+ New</strong> y las individuales se cierran desde la pequeña <code>×</code> en la cabecera de la pestaña. El botón rojo grande <strong>Close</strong> de arriba derriba todos los terminales a la vez."
|
||||
"outro": "La barra muestra el recuento (<em>1/4 terminales</em>, <em>4/4 terminales</em>). <strong>+ Nuevo</strong> abre una pestaña y la <code>×</code> de su cabecera cierra solo esa. El botón rojo grande <strong>Cerrar</strong> de arriba cierra todos los terminales."
|
||||
},
|
||||
"gridAlt": "Pestaña Terminal de ProxMenux Monitor — vista en rejilla con cuatro terminales del host ejecutando ls, configuración de red, iftop y el menú principal de ProxMenux uno al lado del otro",
|
||||
"gridCaption": "Vista en rejilla (4 / 4 terminals) — cuatro PTYs del host independientes corriendo en paralelo: listado de directorio, <code>/etc/network/interfaces</code> en un lado, <code>iftop</code> en otro y el menú principal de ProxMenux en el cuarto. Alterna entre rejilla y pestañas con el conmutador de layout en la barra.",
|
||||
"gridCaption": "Vista en rejilla (4 / 4 terminales): cuatro PTY independientes en paralelo, con listado de directorio, <code>/etc/network/interfaces</code>, <code>iftop</code> y el menú principal de ProxMenux. Alterna entre rejilla y pestañas con el selector de disposición de la barra.",
|
||||
"keyboard": {
|
||||
"heading": "Ayudas de teclado para móvil",
|
||||
"intro": "Los teclados de móvil y tablet normalmente no exponen ESC, TAB, las flechas ni combinaciones con modificadores. Sin ellos, navegar por <code>vim</code>, <code>nano</code>, <code>htop</code> o cualquier menú TUI es imposible. La pestaña Terminal lo resuelve renderizando una fila de botones táctiles bajo el terminal siempre que el dispositivo sea suficientemente pequeño o tenga capacidad táctil:",
|
||||
"heading": "Botones de teclado para dispositivos móviles",
|
||||
"intro": "Los teclados de móvil y tablet suelen carecer de ESC, TAB, flechas y combinaciones de modificadores. Estas teclas son necesarias para manejar <code>vim</code>, <code>nano</code>, <code>htop</code> o menús TUI. Terminal añade botones táctiles debajo cuando la pantalla es pequeña o el dispositivo admite interacción táctil:",
|
||||
"headerButton": "Botón",
|
||||
"headerSends": "Envía",
|
||||
"headerUse": "Uso típico",
|
||||
@@ -50,7 +50,7 @@
|
||||
{
|
||||
"button": "TAB",
|
||||
"sends": "\\t",
|
||||
"use": "Autocompletado de rutas, navegación de campos en dialog/whiptail."
|
||||
"use": "Autocompletado de rutas y navegación entre campos en dialog/whiptail."
|
||||
},
|
||||
{
|
||||
"button": "↑ ↓ ← →",
|
||||
@@ -58,9 +58,9 @@
|
||||
"use": "Historial de la shell, movimiento del cursor, navegación de menús."
|
||||
},
|
||||
{
|
||||
"button": "↵ Enter",
|
||||
"button": "↵ Intro",
|
||||
"sends": "\\r",
|
||||
"use": "Confirmar. Algunos teclados en pantalla cambian Enter por Go/Done — este botón es inequívoco."
|
||||
"use": "Confirmar. Algunos teclados en pantalla sustituyen Intro por Ir/Hecho; este botón evita ambigüedades."
|
||||
},
|
||||
{
|
||||
"button": "Ctrl ▾",
|
||||
@@ -71,46 +71,46 @@
|
||||
"ctrlIntro": "Tres secuencias de control:",
|
||||
"ctrlItems": [
|
||||
"<code>Ctrl+C</code> — cancelar / interrumpir el comando en ejecución (<code>\\x03</code>).",
|
||||
"<code>Ctrl+X</code> — salir de <code>nano</code> (<code>\\x18</code>).",
|
||||
"<code>Ctrl+R</code> — búsqueda inversa en el historial de bash (<code>\\x12</code>)."
|
||||
"<code>Ctrl+X</code>: salir de <code>nano</code> (<code>\\x18</code>).",
|
||||
"<code>Ctrl+R</code>: búsqueda inversa en el historial de bash (<code>\\x12</code>)."
|
||||
],
|
||||
"modalTitle": "Misma barra en la modal de consola LXC",
|
||||
"modalBody": "La consola del contenedor que lanzas desde <link>VMs y LXCs → Console</link> renderiza las mismas ayudas de teclado bajo la modal. La modal además auto-tipea <code>pct enter <vmid></code> al conectar, para que aterrices directamente dentro del contenedor."
|
||||
"modalTitle": "La misma barra en la ventana de consola LXC",
|
||||
"modalBody": "La consola que abres desde <link>VMs y LXCs → Consola</link> muestra los mismos botones de teclado bajo la ventana. Al conectar, introduce automáticamente <code>pct enter <vmid></code> para entrar directamente en el contenedor."
|
||||
},
|
||||
"lxcAlt": "Modal de consola LXC de ProxMenux Monitor — Terminal: ubuntu (ID: 103) con la misma barra para móvil (ESC, TAB, flechas, Enter, Ctrl) bajo el terminal",
|
||||
"lxcCaption": "La modal de consola LXC — abierta desde <em>VMs y LXCs → Console</em>. La cabecera muestra el contenedor de destino (<em>Terminal: ubuntu (ID: 103)</em>) y la misma barra táctil aparece bajo el terminal.",
|
||||
"lxcAlt": "Ventana de consola LXC de ProxMenux Monitor — Terminal: ubuntu (ID: 103), con la misma barra para móviles (ESC, TAB, flechas, Intro, Ctrl) debajo",
|
||||
"lxcCaption": "Consola LXC abierta desde <em>VMs y LXCs → Consola</em>. La cabecera identifica el contenedor (<em>Terminal: ubuntu (ID: 103)</em>) y debajo del terminal aparece la misma barra táctil.",
|
||||
"search": {
|
||||
"heading": "Search Commands — chuleta integrada",
|
||||
"intro": "El botón azul <strong>Search</strong> de la barra abre una modal con búsqueda difusa de comandos. Escribe unas letras de cualquier comando de Linux o Proxmox (<code>ls</code>, <code>tar</code>, <code>qm</code>, <code>pct</code>, <code>zpool</code>, <code>systemctl</code>…) y la modal lista ejemplos de uso con <em>Send to active terminal</em> de un solo toque. Elimina el viaje de ida y vuelta \"espera, ¿qué flag era esa?\" a otra pestaña del navegador.",
|
||||
"modalAlt": "Modal Search Commands de ProxMenux Monitor — búsqueda difusa de comandos de Linux y Proxmox con cheat.sh, mostrando varios ejemplos de uso de ls",
|
||||
"modalCaption": "La modal Search Commands consultando <code>ls</code> — cada resultado muestra el comando, su descripción y una pequeña flecha \"send\" que lo canaliza al terminal activo. La esquina inferior derecha indica la fuente de los datos (<em>Powered by cheat.sh</em>).",
|
||||
"heading": "Buscar comandos: guía de referencia integrada",
|
||||
"intro": "El botón azul <strong>Buscar</strong> abre una búsqueda aproximada de comandos. Escribe unas letras de un comando Linux o Proxmox (<code>ls</code>, <code>tar</code>, <code>qm</code>, <code>pct</code>, <code>zpool</code>, <code>systemctl</code>…) para ver ejemplos de uso y <em>Enviar al terminal activo</em> con un toque. Así puedes consultar sus opciones sin cambiar de pestaña.",
|
||||
"modalAlt": "Ventana Buscar comandos de ProxMenux Monitor: búsqueda aproximada de comandos Linux y Proxmox con cheat.sh y varios ejemplos de ls",
|
||||
"modalCaption": "Buscar comandos con la consulta <code>ls</code>: cada resultado muestra comando, descripción y una flecha de envío al terminal activo. La esquina inferior derecha indica la fuente (<em>Con tecnología de cheat.sh</em>).",
|
||||
"aboutLabel": "Sobre cheat.sh:",
|
||||
"aboutBody": "es una chuleta unificada de código abierto y curada por la comunidad que agrega ejemplos cortos y prácticos de uso para cientos de comandos de Linux, herramientas de sysadmin y lenguajes de programación. Diseñada originalmente para consultarse desde un terminal con <code>curl cheat.sh/<command></code>, también es accesible desde cualquier navegador. ProxMenux Monitor pasa las consultas por un proxy en el servidor para que la modal siga funcionando bajo el mismo origen que el panel.",
|
||||
"aboutBody": "es una guía de referencia de código abierto mantenida por la comunidad, con ejemplos breves y prácticos de cientos de comandos Linux, herramientas de administración y lenguajes de programación. Diseñada para consultarse con <code>curl cheat.sh/<command></code>, también funciona en el navegador. ProxMenux Monitor envía las consultas mediante un proxy del servidor para mantener el mismo origen que el panel.",
|
||||
"headerSource": "Fuente",
|
||||
"headerWhen": "Cuándo se usa",
|
||||
"headerWhat": "Lo que ves",
|
||||
"onlineLabel": "(online)",
|
||||
"onlineLabel": "(en línea)",
|
||||
"onlineWhen": "Cuando el host tiene acceso a internet y el proxy de cheat.sh responde.",
|
||||
"onlineWhat": "Varios ejemplos del mundo real por comando, tipeados con su descripción encima. El punto de estado en la cabecera de la modal es <green>verde</green>.",
|
||||
"fallbackLabel": "Fallback local",
|
||||
"onlineWhat": "Varios ejemplos prácticos por comando con su descripción encima. El punto de estado de la cabecera es <green>verde</green>.",
|
||||
"fallbackLabel": "Alternativa local",
|
||||
"fallbackWhen": "Cuando cheat.sh no está disponible (host offline, firewall restrictivo, caída de cheat.sh).",
|
||||
"fallbackWhat": "Una lista empaquetada de comandos comunes de Linux + Proxmox. Catálogo más pequeño pero siempre disponible. El punto de estado es <red>rojo</red>.",
|
||||
"sendingNote": "<strong>Cómo funciona el envío</strong>: pulsar la pequeña flecha \"send\" junto a un resultado reenvía el texto del comando al terminal que esté activo en ese momento (la pestaña enfocada, o la última en la que pulsaste en la vista en rejilla). La modal se cierra automáticamente para que puedas darle a Enter inmediatamente."
|
||||
"fallbackWhat": "Una lista incluida de comandos habituales Linux y Proxmox. El catálogo es menor, pero siempre está disponible. El punto de estado es <red>rojo</red>.",
|
||||
"sendingNote": "<strong>Cómo funciona el envío</strong>: la flecha junto al resultado envía el texto al terminal activo (la pestaña enfocada o el último terminal pulsado en rejilla). La ventana se cierra automáticamente para que puedas pulsar Intro."
|
||||
},
|
||||
"auth": {
|
||||
"heading": "Autenticación",
|
||||
"items": [
|
||||
"El upgrade WebSocket lleva el JWT en la cabecera <code>Authorization</code>. Si la autenticación está activa y el token falta o ha caducado, la conexión se rechaza con HTTP 401 antes de asignar una PTY.",
|
||||
"El navegador primero solicita un ticket de un solo uso mediante <code>POST /api/terminal/ticket</code>, autenticado con JWT en la cabecera <code>Authorization</code>. Después envía ese ticket al abrir el WebSocket. Caduca a los 5 segundos; si la autenticación está activa y falta o no es válido, se cierra la conexión antes de crear una PTY.",
|
||||
"Si el Monitor está detrás de un reverse proxy, el proxy debe reenviar los upgrades WebSocket. Mira la página <link>Acceso y autenticación</link> para snippets de Nginx / Caddy / Traefik."
|
||||
]
|
||||
},
|
||||
"clipboard": {
|
||||
"heading": "Portapapeles, scrollback y resize",
|
||||
"heading": "Portapapeles, historial de pantalla y tamaño",
|
||||
"items": [
|
||||
"<strong>Copiar / pegar</strong> — usa el portapapeles nativo del navegador. Selecciona texto con el ratón / trackpad y usa el atajo del SO (<code>Cmd+C</code> en macOS, <code>Ctrl+Shift+C</code> en Linux/Windows). Los escritorios Linux también soportan pegar con el botón central del ratón.",
|
||||
"<strong>Scrollback</strong> — rueda / scroll con dos dedos. xterm.js mantiene las últimas varios miles de líneas en memoria.",
|
||||
"<strong>Resize</strong> — el terminal renegocia el tamaño de ventana de la PTY cuando redimensionas el panel del dashboard, así <code>htop</code> y <code>vim</code> renderizan bien.",
|
||||
"<strong>Reconexión al recuperar foco de la pestaña</strong> — si cambias de app en móvil o tablet (comportamiento habitual en iPad), el WebSocket normalmente caería. La pestaña Terminal detecta el cambio de visibilidad y reconecta automáticamente al volver, con un timeout de 15 segundos para rutas VPN lentas."
|
||||
"<strong>Copiar y pegar</strong>: usa el portapapeles del navegador. Selecciona texto con ratón o trackpad y usa el atajo del sistema (<code>Cmd+C</code> en macOS, <code>Ctrl+Shift+C</code> en Linux/Windows). Los escritorios Linux también permiten pegar con clic central.",
|
||||
"<strong>Historial de pantalla</strong>: rueda o desplazamiento con dos dedos. xterm.js conserva en memoria los últimos miles de líneas.",
|
||||
"<strong>Cambiar tamaño</strong>: al redimensionar el panel se ajusta la ventana PTY para mostrar correctamente <code>htop</code> y <code>vim</code>.",
|
||||
"<strong>Reconexión al volver a la pestaña</strong>: cambiar de app en móvil o tablet, especialmente iPad, puede cortar el WebSocket. Terminal detecta el cambio de visibilidad y reconecta al volver, con un tiempo de espera de 15 segundos para VPN lentas."
|
||||
]
|
||||
},
|
||||
"disconnect": {
|
||||
@@ -120,26 +120,26 @@
|
||||
"headerFix": "Solución",
|
||||
"rows": [
|
||||
{
|
||||
"cause": "JWT de sesión caducado (ventana de 24 h).",
|
||||
"cause": "JWT de sesión caducado al abrir o reconectar un terminal (ventana de 24 h).",
|
||||
"fix": "Refresca la página y vuelve a hacer login. El terminal no está pensado para sesiones desatendidas, así que el tiempo de vida del JWT coincide con el del login normal del panel."
|
||||
},
|
||||
{
|
||||
"cause": "Timeout de idle del reverse proxy.",
|
||||
"fix": "Sube <code>proxy_read_timeout</code> en Nginx o el equivalente en Caddy / Traefik (snippets en Acceso y autenticación)."
|
||||
"cause": "Tiempo de espera por inactividad del proxy inverso.",
|
||||
"fix": "Aumenta <code>proxy_read_timeout</code> en Nginx o su equivalente en Caddy / Traefik (ejemplos en Acceso y autenticación)."
|
||||
},
|
||||
{
|
||||
"cause": "Móvil o tablet en sleep.",
|
||||
"fix": "Cuando el dispositivo despierta, la pestaña auto-reconecta (timeout de 15 s para rutas VPN). Si no lo hace, recarga la pestaña."
|
||||
"cause": "Móvil o tablet en reposo.",
|
||||
"fix": "Al reactivarse el dispositivo, la pestaña reconecta automáticamente (15 s de espera para rutas VPN). Si falla, recárgala."
|
||||
},
|
||||
{
|
||||
"cause": "Reinicio del servicio en el host.",
|
||||
"fix": "Cualquier reinicio de <code>proxmenux-monitor.service</code> tira todas las PTY. Abre nuevos terminales una vez el panel termine de recargar."
|
||||
"fix": "Reiniciar <code>proxmenux-monitor.service</code> cierra todas las PTY. Abre nuevos terminales cuando el panel termine de recargarse."
|
||||
}
|
||||
]
|
||||
},
|
||||
"warning": {
|
||||
"title": "El terminal es una shell de root sobre el host",
|
||||
"body": "El terminal hereda la identidad de la unidad systemd (<code>root</code>) y por tanto tiene privilegios totales sobre el host Proxmox. Configura un usuario, contraseña y 2FA en <authLink>Acceso y autenticación</authLink> antes de exponer el panel más allá de tu red local: cualquiera que llegue al puerto 8008 sin autenticación aterrizaría directamente en una shell de root — sin prompts adicionales, sin credenciales SSH. Para acceso desde fuera de la LAN, enruta el panel a través de <gatewayLink>Secure Gateway</gatewayLink> (Tailscale) o un reverse proxy con HTTPS, en lugar de abrir el puerto a la internet pública."
|
||||
"title": "El terminal es una shell de root en el host",
|
||||
"body": "El terminal hereda el usuario de la unidad systemd (<code>root</code>) y tiene todos los privilegios del host Proxmox. Configura usuario, contraseña y 2FA en <authLink>Acceso y autenticación</authLink> antes de dar acceso fuera de tu red local. Con la autenticación desactivada, quien llegue al puerto 8008 puede abrir una shell de root sin más confirmaciones ni credenciales SSH. Para acceso externo, usa <gatewayLink>Secure Gateway</gatewayLink> (Tailscale) o un proxy inverso HTTPS en lugar de publicar el puerto en Internet."
|
||||
},
|
||||
"whereNext": {
|
||||
"heading": "Por dónde seguir",
|
||||
@@ -147,17 +147,17 @@
|
||||
{
|
||||
"label": "Acceso y autenticación",
|
||||
"href": "/docs/monitor/access-auth",
|
||||
"tail": " — snippets de reverse proxy incluyendo las líneas de upgrade WebSocket que requiere el terminal."
|
||||
"tail": " — ejemplos de proxy inverso con las líneas de cambio de protocolo WebSocket necesarias para el terminal."
|
||||
},
|
||||
{
|
||||
"label": "Arquitectura",
|
||||
"href": "/docs/monitor/architecture",
|
||||
"tail": " — el transporte WebSocket (HTTP vía flask-sock vs HTTPS / WSS vía gevent)."
|
||||
"tail": " — transporte WebSocket (HTTP mediante flask-sock y HTTPS / WSS mediante gevent)."
|
||||
},
|
||||
{
|
||||
"label": "Referencia de la API",
|
||||
"href": "/docs/monitor/api",
|
||||
"tail": " — los endpoints WebSocket /ws/terminal y /ws/script/<sid> junto al resto de la API."
|
||||
"tail": " — endpoints WebSocket /ws/terminal y /ws/script/<sid>, junto al resto de la API."
|
||||
},
|
||||
{
|
||||
"label": "Integraciones → Secure Gateway",
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"p2": "El procedimiento que modifica el software se configura por separado en la <link>pestaña Actualizaciones</link>. Guardar una app nunca ejecuta un instalador ni un actualizador.",
|
||||
"callout": "El registro, el seguimiento de versiones y la actualización son tres capacidades independientes. Cada una puede utilizarse sin exigir las otras dos.",
|
||||
"dashboardTitle": "Del registro al lanzador Apps",
|
||||
"dashboard": "Cada enlace web guardado aquí también se muestra como una tarjeta en la <appsLink>pestaña Apps</appsLink> principal. Esta página del LXC sigue siendo la fuente original para el nombre, el logotipo, los enlaces y el seguimiento de versión de la aplicación."
|
||||
"dashboard": "Cada enlace web guardado aquí aparece también como tarjeta en la <appsLink>pestaña Apps</appsLink> principal. Esta página del LXC sigue siendo la referencia para nombre, logotipo, enlaces y seguimiento de versiones."
|
||||
},
|
||||
"overview": {
|
||||
"heading": "Qué puede contener un registro",
|
||||
@@ -31,7 +31,7 @@
|
||||
"lead": "Las aplicaciones sugeridas forman parte de la caché del modal de cada LXC. El escaneo de arranque las prepara en segundo plano para que la pestaña App pueda mostrar inmediatamente los resultados almacenados.",
|
||||
"items": [
|
||||
"Abrir la pestaña App <strong>no</strong> inicia otro escaneo del catálogo ni consulta repetidamente el LXC.",
|
||||
"<strong>Buscar aplicaciones</strong> ejecuta expresamente una detección nueva solo para ese LXC. Se utiliza después de instalar software mientras ProxMenux ya está en ejecución.",
|
||||
"<strong>Buscar aplicaciones</strong> ejecuta una detección nueva para ese LXC. Úsalo tras instalar software nuevo mientras ProxMenux ya está en ejecución.",
|
||||
"La lista anterior permanece visible durante la búsqueda. Las nuevas coincidencias se añaden al finalizar.",
|
||||
"Si no se encuentra ninguna coincidencia nueva, el resultado aparece junto a las acciones y <strong>Registrar aplicación</strong> continúa disponible para introducirla manualmente.",
|
||||
"Guardar, eliminar o restaurar una app actualiza la misma caché inmediatamente. El arranque o la restauración de un LXC actualiza únicamente ese sistema mediante su evento de ciclo de vida existente."
|
||||
@@ -42,10 +42,10 @@
|
||||
"heading": "Registrar una aplicación",
|
||||
"lead": "Las sugerencias detectadas y los registros manuales utilizan el mismo editor:",
|
||||
"steps": [
|
||||
"Pulsa <strong>Registrar</strong> en una sugerencia o <strong>Registrar aplicación</strong> para elegir una entrada del catálogo o escribir un nombre personalizado.",
|
||||
"Pulsa <strong>Registrar</strong> en una sugerencia o <strong>Registrar aplicación</strong> para elegir del catálogo o introducir un nombre personalizado.",
|
||||
"Revisa el nombre y el logotipo propuestos por el catálogo.",
|
||||
"Añade los enlaces web necesarios. Los puertos en escucha se ofrecen como accesos rápidos, pero ninguno se guarda automáticamente.",
|
||||
"Deja <strong>Seguir versión disponible</strong> desactivado para un registro de solo enlace o actívalo y revisa el detector instalado y la fuente disponible.",
|
||||
"Deja <strong>Seguir versión disponible</strong> desactivado para registros de solo enlace, o actívalo y revisa el detector de la versión instalada y la fuente de la versión disponible.",
|
||||
"Utiliza <strong>Probar detector</strong> cuando el seguimiento esté activado y guarda el registro.",
|
||||
"Pulsa <strong>Hecho</strong> al terminar la edición. Las pestañas App y Actualizaciones reutilizan el registro actualizado de la caché."
|
||||
]
|
||||
@@ -80,7 +80,7 @@
|
||||
"Cada enlace guarda un esquema, un puerto, una descripción opcional y una URL de logotipo opcional.",
|
||||
"La URL mostrada utiliza la dirección actual ya detectada para el LXC; esa dirección no se duplica en cada registro.",
|
||||
"Un enlace sin logotipo propio utiliza el logotipo general de la app.",
|
||||
"Varios enlaces pueden representar una interfaz de administración, una API, una interfaz secundaria u otro punto final de la misma app.",
|
||||
"Varios enlaces pueden representar una interfaz de administración, una API, una interfaz secundaria u otro endpoint de la misma app.",
|
||||
"Una app guardada solo con enlaces también aparece en Actualizaciones, donde se puede configurar posteriormente un actualizador personalizado."
|
||||
]
|
||||
},
|
||||
@@ -90,24 +90,48 @@
|
||||
"colMethod": "Método de versión instalada",
|
||||
"colUse": "Uso",
|
||||
"detectorRows": [
|
||||
{ "method": "dpkg / apk", "use": "Lee la versión del paquete instalado desde los metadatos de Debian, Ubuntu o Alpine." },
|
||||
{ "method": "binary", "use": "Ejecuta una ruta binaria absoluta o un nombre de comando con sus parámetros de versión." },
|
||||
{ "method": "file + regex", "use": "Lee un archivo real y extrae la versión mediante un grupo de captura." },
|
||||
{ "method": "docker label / docker exec", "use": "Lee una etiqueta de versión OCI o ejecuta un comando de versión dentro de un contenedor Docker." },
|
||||
{ "method": "python distribution", "use": "Usa importlib.metadata mediante el intérprete de Python seleccionado." },
|
||||
{ "method": "command", "use": "Ejecuta un comando avanzado en formato argv, sin shell, y extrae la versión de su salida." },
|
||||
{ "method": "manual", "use": "Guarda una versión introducida manualmente; debe cambiarse después de actualizar la app." },
|
||||
{ "method": "OCI image", "use": "Para contenedores instalados por OCI manager Apps. Lee las versiones de la aplicación y de la imagen del registro de la instalación y compara el digest instalado con el que publica el registro; no necesita configuración." }
|
||||
{
|
||||
"method": "dpkg / apk",
|
||||
"use": "Lee la versión del paquete instalado desde los metadatos de Debian, Ubuntu o Alpine."
|
||||
},
|
||||
{
|
||||
"method": "binary",
|
||||
"use": "Ejecuta una ruta binaria absoluta o un nombre de comando con sus parámetros de versión."
|
||||
},
|
||||
{
|
||||
"method": "file + regex",
|
||||
"use": "Lee un archivo real y extrae la versión mediante un grupo de captura."
|
||||
},
|
||||
{
|
||||
"method": "docker label / docker exec",
|
||||
"use": "Lee una etiqueta de versión OCI o ejecuta un comando de versión dentro de un contenedor Docker."
|
||||
},
|
||||
{
|
||||
"method": "python distribution",
|
||||
"use": "Usa importlib.metadata mediante el intérprete de Python seleccionado."
|
||||
},
|
||||
{
|
||||
"method": "command",
|
||||
"use": "Ejecuta un comando avanzado en formato argv, sin shell, y extrae la versión de su salida."
|
||||
},
|
||||
{
|
||||
"method": "manual",
|
||||
"use": "Guarda una versión introducida manualmente; debe cambiarse después de actualizar la app."
|
||||
},
|
||||
{
|
||||
"method": "OCI image",
|
||||
"use": "Para contenedores instalados por OCI manager Apps. Lee las versiones de app e imagen del registro de instalación y compara el digest instalado con el publicado por el registro de imágenes. No necesita configuración."
|
||||
}
|
||||
],
|
||||
"sourcesHeading": "Fuentes para la versión disponible",
|
||||
"sources": [
|
||||
"<strong>Repositorio de GitHub</strong>: último lanzamiento o etiqueta de un repositorio público <code>propietario/nombre</code>.",
|
||||
"<strong>HTTP JSON</strong>: un punto final público y una ruta como <code>data.version</code> o <code>releases[0].tag_name</code>.",
|
||||
"<strong>Repositorio de GitHub</strong>: último lanzamiento o etiqueta de un repositorio público <code>owner/name</code>.",
|
||||
"<strong>HTTP JSON</strong>: un endpoint público y una ruta con puntos, como <code>data.version</code> o <code>releases[0].tag_name</code>.",
|
||||
"<strong>Docker Hub</strong>: etiquetas versionadas filtradas con una expresión regular. La vista previa muestra etiquetas reales coincidentes antes de guardar.",
|
||||
"Las etiquetas móviles como <code>latest</code>, <code>stable</code> o <code>lts</code> no contienen una versión. Esas imágenes se siguen por digest desde las actualizaciones de imágenes Docker."
|
||||
"Etiquetas móviles como <code>latest</code>, <code>stable</code> o <code>lts</code> no contienen una versión. Sigue esas imágenes por digest en las actualizaciones de imágenes Docker."
|
||||
],
|
||||
"regexHeading": "Expresión de captura",
|
||||
"regexLead": "La expresión regular del detector debe devolver la versión en su <strong>primer grupo de captura</strong>.",
|
||||
"regexLead": "La expresión regular debe devolver la versión en su <strong>primer grupo de captura</strong>.",
|
||||
"regexRules": [
|
||||
"Haz coincidir el texto emitido por el binario, archivo, comando o fuente de etiquetas seleccionada; no supongas una ruta genérica.",
|
||||
"Escapa los puntos literales como <code>\\.</code> para que no coincidan con cualquier carácter.",
|
||||
@@ -135,11 +159,31 @@
|
||||
"colDisplay": "Presentación",
|
||||
"colMeaning": "Significado",
|
||||
"rows": [
|
||||
{ "state": "Actualización disponible", "display": "Versión disponible en morado con un icono de flecha ascendente", "meaning": "Las versiones instalada y disponible son diferentes." },
|
||||
{ "state": "Actualizada", "display": "Versiones instalada y disponible sin la alerta morada", "meaning": "La última comprobación no encontró una versión superior." },
|
||||
{ "state": "Seguimiento pendiente", "display": "Estado de comprobación o pendiente", "meaning": "El registro está configurado, pero aún no ha completado las dos comprobaciones." },
|
||||
{ "state": "Seguimiento desactivado", "display": "Solo enlaces web, sin bloque de comparación", "meaning": "El registro sigue siendo válido y puede tener un actualizador." },
|
||||
{ "state": "Error de comprobación", "display": "Explicación en ámbar dentro de la tarjeta", "meaning": "El estado guardado anterior permanece visible mientras se informa del error del detector o de la fuente." }
|
||||
{
|
||||
"state": "Actualización disponible",
|
||||
"display": "Versión disponible en morado con un icono de flecha ascendente",
|
||||
"meaning": "Las versiones instalada y disponible son diferentes."
|
||||
},
|
||||
{
|
||||
"state": "Actualizada",
|
||||
"display": "Versiones instalada y disponible sin la alerta morada",
|
||||
"meaning": "La última comprobación no encontró una versión superior."
|
||||
},
|
||||
{
|
||||
"state": "Seguimiento pendiente",
|
||||
"display": "Estado de comprobación o pendiente",
|
||||
"meaning": "El registro está configurado, pero aún no ha completado las dos comprobaciones."
|
||||
},
|
||||
{
|
||||
"state": "Seguimiento desactivado",
|
||||
"display": "Solo enlaces web, sin bloque de comparación",
|
||||
"meaning": "El registro sigue siendo válido y puede tener un actualizador."
|
||||
},
|
||||
{
|
||||
"state": "Error de comprobación",
|
||||
"display": "Explicación en ámbar dentro de la tarjeta",
|
||||
"meaning": "El estado guardado anterior permanece visible mientras se informa del error del detector o de la fuente."
|
||||
}
|
||||
]
|
||||
},
|
||||
"management": {
|
||||
@@ -158,11 +202,26 @@
|
||||
"colProblem": "Situación",
|
||||
"colResolution": "Resolución",
|
||||
"rows": [
|
||||
{ "problem": "Se instaló software después de arrancar ProxMenux", "resolution": "Pulsa Buscar aplicaciones. El escaneo explícito actualiza las sugerencias en caché de ese LXC." },
|
||||
{ "problem": "No se detectó la aplicación", "resolution": "Regístrala manualmente. Un nombre y un enlace web son suficientes; el seguimiento puede añadirse después." },
|
||||
{ "problem": "El detector sugerido devuelve una versión incorrecta", "resolution": "Abre Editar campos, selecciona el paquete, binario o archivo real y prueba el detector antes de guardar." },
|
||||
{ "problem": "Una carga Docker no se ofrece como app LXC", "resolution": "Registra Docker y añade la interfaz publicada de la carga como enlace web de Docker. Las actualizaciones de imágenes permanecen en la sección Docker." },
|
||||
{ "problem": "Una app guardada no tiene botón de actualización", "resolution": "Abre Actualizaciones y configura su método. El seguimiento de versiones no define por sí solo cómo se instala una actualización." }
|
||||
{
|
||||
"problem": "Se instaló software después de arrancar ProxMenux",
|
||||
"resolution": "Pulsa Buscar aplicaciones. El escaneo explícito actualiza las sugerencias en caché de ese LXC."
|
||||
},
|
||||
{
|
||||
"problem": "No se detectó la aplicación",
|
||||
"resolution": "Regístrala manualmente. Un nombre y un enlace web son suficientes; el seguimiento puede añadirse después."
|
||||
},
|
||||
{
|
||||
"problem": "El detector sugerido devuelve una versión incorrecta",
|
||||
"resolution": "Abre Editar campos, selecciona el paquete, binario o archivo real y prueba el detector antes de guardar."
|
||||
},
|
||||
{
|
||||
"problem": "Una carga Docker no se ofrece como app LXC",
|
||||
"resolution": "Registra Docker y añade la interfaz publicada de la carga como enlace web de Docker. Las actualizaciones de imágenes permanecen en la sección Docker."
|
||||
},
|
||||
{
|
||||
"problem": "Una app guardada no tiene botón de actualización",
|
||||
"resolution": "Abre Actualizaciones y configura su método. El seguimiento de versiones no define por sí solo cómo se instala una actualización."
|
||||
}
|
||||
]
|
||||
},
|
||||
"figures": {
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
"notes": "Descarga la imagen seleccionada y recrea su grupo de servicios Compose o su contenedor independiente protegido."
|
||||
}
|
||||
],
|
||||
"callout": "El comando personalizado <strong>reemplaza</strong> a Helper-Scripts para esa aplicación. Las ejecuciones manuales, en bloque y programadas respetan la elección guardada. Se conservan los comandos existentes y las selecciones antiguas guardadas en planes o programaciones activadas; una programación antigua nunca activa el actualizador de una app recién registrada."
|
||||
"callout": "Un comando personalizado <strong>reemplaza</strong> Helper-Scripts para esa app. Las ejecuciones manuales, en bloque y programadas respetan la elección. Se conservan los comandos existentes y las selecciones antiguas guardadas expresamente en planes o programaciones activadas; una programación antigua nunca incorpora una app recién registrada."
|
||||
},
|
||||
"docker": {
|
||||
"heading": "Docker Engine e imágenes Docker",
|
||||
@@ -84,13 +84,13 @@
|
||||
"statusColMeaning": "Significado",
|
||||
"statusRows": [
|
||||
{
|
||||
"state": "Actualización verificada",
|
||||
"state": "Actualización verificada disponible",
|
||||
"appearance": "Texto morado, icono de flecha ascendente y acción morada",
|
||||
"meaning": "La versión instalada y la disponible, o los digests de imagen, son diferentes."
|
||||
},
|
||||
{
|
||||
"state": "Actualizado y verificado",
|
||||
"appearance": "Comprobación verde y acción Actualizado en verde",
|
||||
"appearance": "Marca de verificación verde y acción Actualizado en verde",
|
||||
"meaning": "La última comprobación terminada confirma que el objetivo está actualizado."
|
||||
},
|
||||
{
|
||||
@@ -110,8 +110,8 @@
|
||||
"No incluyas <code>pct exec</code>; ProxMenux ya entra en el contenedor y ejecuta el comando como root."
|
||||
],
|
||||
"exampleLead": "Ejemplo de procedimiento completo dentro del contenedor:",
|
||||
"example": "cd /opt/mi-app && ./update.sh",
|
||||
"callout": "Un comando de versión como <code>miapp --version</code> solo lee una versión; no instala nada. Los comandos se ejecutan con privilegios administrativos y deben revisarse con el mismo cuidado que un comando de shell como root."
|
||||
"example": "cd /opt/my-app && ./update.sh",
|
||||
"callout": "Un comando de versión como <code>myapp --version</code> solo lee una versión; no instala nada. Los comandos se ejecutan con privilegios administrativos y deben revisarse con el mismo cuidado que un comando de shell como root."
|
||||
},
|
||||
"bulk": {
|
||||
"heading": "Actualización en bloque",
|
||||
@@ -120,7 +120,7 @@
|
||||
"Los paquetes del SO son obligatorios. Debe seleccionarse al menos una app, Docker Engine o unidad de imagen Docker adicional.",
|
||||
"Las aplicaciones y unidades Docker se seleccionan individualmente. Un servicio principal de Compose muestra las dependencias que se actualizarán con él.",
|
||||
"Los objetivos eliminados o no disponibles se marcan como obsoletos y deben retirarse antes de guardar la configuración.",
|
||||
"El botón <strong>Aplicar actualizaciones</strong> es morado si algún objetivo seleccionado tiene una actualización verificada, verde si todos están verificados como actualizados y neutro cuando el resultado es desconocido.",
|
||||
"<strong>Aplicar actualizaciones</strong> es morado si algún objetivo tiene una actualización verificada, verde si todos están verificados como actualizados y neutro si el resultado es desconocido.",
|
||||
"Eliminar la configuración en bloque no borra los métodos individuales ni la programación."
|
||||
],
|
||||
"callout": "La actualización en bloque no reemplaza los botones individuales. Es un acceso opcional para una selección que debe ejecutarse junta."
|
||||
@@ -140,9 +140,9 @@
|
||||
"items": [
|
||||
"Selecciona una frecuencia o expresión cron y después objetivos exactos: paquetes del SO, apps individuales, Docker Engine, unidades Docker independientes o grupos de servicios Compose.",
|
||||
"La espera tras una versión solo se aplica a las apps seleccionadas con seguimiento. Las apps sin seguimiento ejecutan su actualizador cuando vence la programación.",
|
||||
"El estado de la última ejecución diferencia entre éxito, finalización parcial, error, retención de seguridad y ausencia de elementos pendientes. Después de la primera ejecución programada, <strong>Actualizaciones → Actualizaciones programadas → Ver log</strong> abre la salida completa capturada del actualizador y de los scripts secundarios que haya ejecutado.",
|
||||
"El estado de la última ejecución distingue éxito, finalización parcial, fallo, retención de seguridad y ausencia de actualizaciones pendientes. Tras la primera ejecución programada, <strong>Actualizaciones → Actualizaciones programadas → Ver registro</strong> abre toda la salida del actualizador y de los scripts secundarios invocados.",
|
||||
"Después de cada ejecución, ProxMenux comprueba el marcador estándar de Debian que indica si es necesario reiniciar. Cuando hace falta, la pestaña Actualizaciones y la notificación de finalización lo indican; el aviso se elimina cuando ese LXC se inicia o reinicia.",
|
||||
"En el host Proxmox, los logs de las ejecuciones programadas se guardan en <code>/usr/local/share/proxmenux/logs/lxc-updates/</code> con el nombre <code><VMID>-scheduled-<id-de-ejecución>.log</code>. Se conservan los diez últimos logs de cada LXC y los archivos más antiguos se eliminan automáticamente.",
|
||||
"En el host Proxmox, los logs de las ejecuciones programadas se guardan en <code>/usr/local/share/proxmenux/logs/lxc-updates/</code> con el nombre <code><VMID>-scheduled-<run-id>.log</code>. Se conservan los diez últimos logs de cada LXC y los archivos más antiguos se eliminan automáticamente.",
|
||||
"Este historial corresponde a las actualizaciones programadas. Una actualización manual muestra su salida en tiempo real en la ventana de ejecución del Monitor y no crea un log de ejecución programada en ese directorio.",
|
||||
"Las programaciones externas detectadas de Proxmox VE Helper-Scripts se muestran aparte para hacer visible cualquier automatización coincidente."
|
||||
],
|
||||
@@ -186,7 +186,7 @@
|
||||
},
|
||||
{
|
||||
"problem": "Una actualización programada indica que es necesario reiniciar",
|
||||
"resolution": "Abre <strong>Ver log</strong> para revisar la ejecución completada y reinicia ese LXC. ProxMenux elimina el aviso mediante el evento de ciclo de vida existente cuando el contenedor vuelve a arrancar."
|
||||
"resolution": "Abre Ver registro para revisar la ejecución completada y después reinicia ese LXC. ProxMenux borra el aviso cuando el evento de ciclo de vida detecta el nuevo arranque."
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -1,168 +1,168 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "ProxMenux Monitor — Panel: pestaña VMs y LXCs | ProxMenux Documentation",
|
||||
"description": "La pestaña VMs y LXCs inventaría cada guest del host con uso de CPU / memoria / disco en vivo. La vista en detalle por guest muestra configuración, recursos, backups, logs completos del guest, notas y controles Start / Shutdown / Reboot / Stop."
|
||||
"title": "ProxMenux Monitor — Panel: VMs y LXCs | Documentación de ProxMenux",
|
||||
"description": "Inventario de todos los invitados con CPU, memoria y disco en vivo. Los detalles incluyen configuración, recursos, copias de seguridad, resultados recientes del log Proxmox, notas y controles Iniciar / Apagar / Reiniciar / Forzar parada."
|
||||
},
|
||||
"header": {
|
||||
"title": "Panel: pestaña VMs y LXCs",
|
||||
"description": "El inventario completo de guests del nodo. Cuatro métricas titulares arriba, una lista ordenable con cada VM y LXC abajo y una vista en detalle por guest con config, recursos, backups, logs y los cuatro controles de ciclo de vida (Start / Shutdown / Reboot / Stop).",
|
||||
"title": "Panel: VMs y LXCs",
|
||||
"description": "Inventario completo de invitados del nodo: cuatro métricas arriba, lista ordenable de VM y LXC abajo y detalles por invitado con configuración, recursos, copias, logs y cuatro controles de ciclo de vida (Iniciar / Apagar / Reiniciar / Forzar parada).",
|
||||
"section": "ProxMenux Monitor · Panel"
|
||||
},
|
||||
"intro": {
|
||||
"title": "La superficie de control para guests",
|
||||
"body": "El resto de pestañas son de solo lectura; esta es desde la que actúas. Todo lo que cambia el estado de un guest pasa por <code>POST /api/vms/<vmid>/control</code> con una confirmación explícita y la respuesta se refleja de vuelta en la fila del guest. No hay force-shutdown sin pasar por el botón Stop dedicado."
|
||||
"title": "Controles de los invitados",
|
||||
"body": "Controla el ciclo de vida de los invitados desde esta pestaña. Las acciones pasan por <code>POST /api/vms/<vmid>/control</code> con confirmación explícita y actualizan la fila del invitado. El apagado forzado requiere el botón específico Forzar parada."
|
||||
},
|
||||
"topRow": {
|
||||
"heading": "Fila superior: cuatro tarjetas de estadísticas",
|
||||
"intro": "Al abrir la pestaña VMs y LXCs aterrizas en un resumen de cuatro tarjetas del estado de los guests — totales, utilización de CPU, compromiso de memoria vs capacidad del host y asignación de disco.",
|
||||
"intro": "Al abrir VMs y LXCs aparecen cuatro tarjetas: número de invitados, uso CPU, memoria asignada frente a la capacidad del host y espacio de disco asignado.",
|
||||
"imageAlt": "Pestaña VMs y LXCs — fila superior de cuatro tarjetas de estadísticas: Total VMs & LXCs, Total CPU, Total Memory, Total Disk",
|
||||
"imageCaption": "Fila superior de la pestaña VMs y LXCs — totales + insignias Running / Stopped, utilización actual de CPU, memoria desglosada en used / running-allocated / total-allocated (con una insignia Within Limits) y espacio de disco asignado.",
|
||||
"imageCaption": "Fila superior: totales y estados En ejecución / Detenidos, uso actual de CPU, memoria usada / asignada a invitados activos / asignada total (con Dentro de límites) y espacio de disco asignado.",
|
||||
"headerCard": "Tarjeta",
|
||||
"headerWhat": "Qué muestra",
|
||||
"totalLabel": "Total VMs & LXCs",
|
||||
"totalLabel": "Total de VM y LXC",
|
||||
"totalWhat": "Recuento total con dos insignias — <em>X Running</em> (verde) y <em>Y Stopped</em> (rojo, solo cuando > 0). El número que miras cuando algo no volvió tras un reinicio.",
|
||||
"cpuLabel": "Total CPU",
|
||||
"cpuWhat": "Utilización agregada de CPU en vivo a lo largo de todos los guests como porcentaje de la CPU física del host, con una línea al pie <em>\"Allocated CPU usage\"</em>.",
|
||||
"memoryLabel": "Total Memory",
|
||||
"cpuLabel": "CPU total",
|
||||
"cpuWhat": "Uso CPU total en vivo de todos los invitados como porcentaje de la CPU física del host, con el pie <em>«Uso de CPU asignada»</em>.",
|
||||
"memoryLabel": "Memoria Total",
|
||||
"memoryIntro": "Tres lecturas apiladas verticalmente:",
|
||||
"memoryItems": [
|
||||
"<strong>Currently used</strong> — valor grande (p. ej. <em>15.4 GB</em>) más <em>X.X % de Y GB</em> contra la RAM total del host. Una barra de progreso azul sigue al porcentaje.",
|
||||
"<strong>Running allocated</strong> + <strong>Total allocated</strong> — suma de <code>maxmem</code> a lo largo de los guests que están <em>actualmente up</em> junto a la misma suma a lo largo de <em>todos</em> los guests incluyendo los parados. El primero importa hoy; el segundo importa cuando arrancas todo a la vez.",
|
||||
"<strong>Insignia Within Limits</strong> (verde) — pasa a <em>Over-committed</em> si el total asignado excede la RAM del host. Un over-commit sano de memoria está bien en hosts con KSM, pero la insignia es el aviso temprano cuando ya no es cómodo."
|
||||
"<strong>Usada actualmente</strong>: valor principal, como <em>15.4 GB</em>, y <em>X.X % de Y GB</em> respecto a la RAM del host. La barra azul indica el porcentaje.",
|
||||
"<strong>Asignada a activos</strong> + <strong>Asignada total</strong>: suma de <code>maxmem</code> de los invitados <em>en ejecución</em> y de <em>todos</em>, incluidos los detenidos. La primera refleja la situación actual; la segunda, qué pasaría al arrancarlos todos.",
|
||||
"<strong>Dentro de límites</strong>, en verde, cambia a <em>Sobreasignada</em> si la memoria total asignada supera la RAM del host. Una sobreasignación controlada puede funcionar con KSM; la etiqueta avisa cuando el margen disminuye."
|
||||
],
|
||||
"diskLabel": "Total Disk",
|
||||
"diskWhat": "Suma del espacio de disco asignado a lo largo de todos los guests, en la unidad adecuada (GB / TB), con la línea al pie <em>\"Allocated disk space\"</em>."
|
||||
"diskLabel": "Disco total",
|
||||
"diskWhat": "Suma del espacio de disco asignado a todos los invitados, en GB o TB, con el pie <em>«Espacio de disco asignado»</em>."
|
||||
},
|
||||
"inventory": {
|
||||
"heading": "Lista Virtual Machines & Containers",
|
||||
"heading": "Lista de máquinas virtuales y contenedores",
|
||||
"intro": "Una fila por guest. La lista se nutre de una única fuente, <code>/api/vms</code>, que consolida <code>qm list</code> + <code>pct list</code> + <code>pvesh /cluster/resources</code> en el host.",
|
||||
"imageAlt": "Lista Virtual Machines & Containers — una fila por guest con estado, insignia de tipo, nombre, ID y porcentajes inline de CPU / memoria / disco",
|
||||
"imageCaption": "El layout optimizado para móvil del inventario — los mismos datos que muestra la vista de escritorio, reapilados en una sola columna con los porcentajes e indicadores de estado compactos.",
|
||||
"rowsIntro": "Cada fila muestra:",
|
||||
"rows": [
|
||||
"<strong>Icono de estado</strong> — play verde (running) o cuadrado rojo (stopped). Para guests parados, el resto de la fila se atenúa para que veas al instante qué está offline.",
|
||||
"<strong>Icono de estado</strong>: triángulo verde (en ejecución) o cuadrado rojo (detenido). Las filas de invitados detenidos se atenúan para identificarlos de inmediato.",
|
||||
"<strong>Insignia de tipo</strong> — <em>LXC</em> (cian) para contenedores, <em>VM</em> (morado) para máquinas virtuales.",
|
||||
"<strong>Nombre</strong> — hostname / nombre de display del guest.",
|
||||
"<strong>Nombre</strong>: nombre de host o nombre visible del invitado.",
|
||||
"<strong>VMID</strong> — el ID numérico de Proxmox bajo el nombre.",
|
||||
"<strong>Métricas inline</strong> — tres porcentajes con su icono (CPU %, Memory %, Disk %). Cada icono se pone naranja cuando la métrica cruza un umbral de atención (p. ej. memoria por encima del 90 %), así un vistazo rápido te dice qué guest está bajo presión sin abrirlo."
|
||||
],
|
||||
"clickHint": "Pulsar cualquier fila — running o stopped — abre la modal de vista en detalle descrita abajo.",
|
||||
"mobileTitle": "La lista está construida mobile-first",
|
||||
"mobileBody": "En móviles y ventanas estrechas el inventario reflowea a una única columna con insignia de tipo, nombre, ID y los tres porcentajes de métricas, uno por línea — exactamente la captura de arriba. En viewports más anchos los mismos datos se reparten horizontalmente con más espacio para los porcentajes. De cualquier modo, cada fila es el mismo target completo: pulsa para entrar."
|
||||
"clickHint": "Pulsa una fila, esté el invitado en ejecución o detenido, para abrir sus detalles.",
|
||||
"mobileTitle": "La lista está diseñada para móviles",
|
||||
"mobileBody": "En móviles y ventanas estrechas, tipo, nombre, ID y tres porcentajes se apilan en una columna, como en la captura. En pantallas anchas se reparten horizontalmente con más espacio. Toda la fila es pulsable para abrir los detalles."
|
||||
},
|
||||
"drillIn": {
|
||||
"heading": "Modal de vista en detalle por guest",
|
||||
"heading": "Ventana de detalles del invitado",
|
||||
"intro": "El modal se abre con el nombre, VMID, tipo, estado y tiempo de actividad del sistema. La navegación se adapta al elemento: <strong>Estado</strong>, <strong>App</strong> y <strong>Actualizaciones</strong> para gestionar aplicaciones LXC, <strong>Montajes</strong> cuando existen puntos de montaje, <strong>Logs</strong> en los contenedores instalados por OCI manager Apps, además de <strong>Backups</strong> y <strong>Cortafuegos</strong>. La barra inferior mantiene los controles de ciclo de vida y el terminal LXC disponibles desde cualquier pestaña.",
|
||||
"statusTitle": "Pestaña 1 — Estado",
|
||||
"statusImageAlt": "Modal de vista en detalle por guest — pestaña Status con tarjetas en vivo de CPU / Memoria / Disco, totales de E/S de disco y red, el logo de distro del SO y el bloque Resources / IP Addresses",
|
||||
"statusImageCaption": "Pestaña Status — CPU / Memoria / Disco en vivo con barras de progreso arriba, totales de E/S acumulados (lectura/escritura de disco, descarga/subida de red) abajo, después el bloque estático Resources con expansiones de Notes y + Info y la lista de pastillas IP Addresses.",
|
||||
"statusIntro": "La pestaña por defecto — la vista \"¿este guest se está portando?\". Tres bloques:",
|
||||
"statusImageAlt": "Detalles del invitado: Estado con CPU, memoria y disco en vivo, E/S de disco y red, logotipo del SO y Recursos / Direcciones IP",
|
||||
"statusImageCaption": "Estado: CPU, memoria y disco con barras arriba; totales acumulados de E/S (disco leído/escrito, red recibida/enviada); Recursos con Notas, + Info y lista de direcciones IP.",
|
||||
"statusIntro": "La pestaña inicial permite comprobar el estado del invitado. Tres bloques:",
|
||||
"liveTitle": "1. Fila de métricas en vivo",
|
||||
"liveItems": [
|
||||
"<strong>CPU Usage (X cores)</strong> — porcentaje actual con barra de progreso. La cabecera muestra el recuento de cores configurado para que sepas qué significaría un 100 %.",
|
||||
"<strong>Memory</strong> — <em>used / max</em> en GB con barra de progreso.",
|
||||
"<strong>Disk</strong> — <em>used / max</em> a lo largo de la imagen de disco primaria del guest, misma forma."
|
||||
"<strong>Uso CPU (X núcleos)</strong>: porcentaje con barra. La cabecera muestra los núcleos configurados para interpretar qué significa 100 %.",
|
||||
"<strong>Memoria</strong>: <em>usada / máxima</em> en GB con barra.",
|
||||
"<strong>Disco</strong>: <em>usado / máximo</em> de la imagen principal de disco, con el mismo formato."
|
||||
],
|
||||
"ioTitle": "2. Totales de E/S + logo del SO",
|
||||
"ioItems": [
|
||||
"<strong>Disk I/O</strong> — totales acumulados de lectura (↓) y escritura (↑) desde el arranque. Útil para detectar un guest que se ha vuelto de repente intensivo en E/S comparado con su baseline.",
|
||||
"<strong>Network I/O</strong> — descarga (↓) y subida (↑) acumuladas. Misma idea en el lado de red.",
|
||||
"<strong>Logo de distro del SO</strong> — el icono de Debian / Ubuntu / Alpine / Windows / etc. detectado del tipo de SO del guest. Una pista visual rápida cuando scrolleas varias modales abiertas."
|
||||
"<strong>E/S de disco</strong>: totales de lectura (↓) y escritura (↑) desde el arranque. Ayuda a detectar aumentos de E/S frente a la actividad habitual del invitado.",
|
||||
"<strong>E/S de red</strong>: descarga (↓) y subida (↑) acumuladas; el mismo concepto para la red.",
|
||||
"<strong>Logotipo del SO</strong>: icono Debian / Ubuntu / Alpine / Windows / etc. según el sistema detectado. Ayuda a identificarlo al consultar varias ventanas."
|
||||
],
|
||||
"resourcesTitle": "3. Bloque Resources",
|
||||
"resourcesIntro": "La configuración del guest tal como la ve Proxmox — CPU Cores, Memory (<code>maxmem</code> configurado), Swap. Dos botones colapsables en la cabecera del bloque:",
|
||||
"resourcesTitle": "3. Bloque Recursos",
|
||||
"resourcesIntro": "Configuración del invitado según Proxmox: núcleos CPU, memoria (<code>maxmem</code> configurado) y swap. Dos botones despliegan información adicional:",
|
||||
"resourcesItems": [
|
||||
"<strong>Notes</strong> — el campo de descripción del guest. Editable: escribir aquí y guardar llama <code>PUT /api/vms/<vmid>/config</code> y escribe de vuelta en <code>/etc/pve/qemu-server/<vmid>.conf</code> o <code>/etc/pve/lxc/<vmid>.conf</code>.",
|
||||
"<strong>+ Info</strong> — campos extra que son demasiado verbosos para la vista por defecto: bios mode, machine type, agent state, entradas de hostpci passthrough, mount points (CT), boot order."
|
||||
"<strong>Notas</strong>: descripción editable del invitado. Guardar llama a <code>PUT /api/vms/<vmid>/config</code> y escribe en <code>/etc/pve/qemu-server/<vmid>.conf</code> o <code>/etc/pve/lxc/<vmid>.conf</code>.",
|
||||
"<strong>+ Info</strong>: modo BIOS, tipo de máquina, estado del agente, asignaciones passthrough hostpci, puntos de montaje CT y orden de arranque."
|
||||
],
|
||||
"ipsTitle": "4. IP Addresses",
|
||||
"ipsBody": "Lista de pastillas con cada dirección IPv4 / IPv6 que el guest expone actualmente — pastilla verde por dirección. Vacía cuando el guest está parado o cuando el QEMU agent no está instalado en una VM (los LXCs siempre reportan direcciones directamente).",
|
||||
"ipsTitle": "4. Direcciones IP",
|
||||
"ipsBody": "Cada dirección IPv4 o IPv6 del invitado aparece en una etiqueta verde. La lista queda vacía si está detenido o si una VM carece del agente QEMU; los LXC comunican sus direcciones directamente.",
|
||||
"appTitle": "Pestaña 2 — App (solo LXC)",
|
||||
"appIntro": "Registra las aplicaciones que pertenecen al LXC, guarda enlaces web y, opcionalmente, compara las versiones instalada y disponible. Las sugerencias proceden de la caché de arranque; <strong>Buscar aplicaciones</strong> actualiza expresamente la detección de este LXC después de instalar software nuevo.",
|
||||
"appLinkLead": "Consulta la",
|
||||
"appLinkLabel": "página específica de App",
|
||||
"appLinkTail": "para conocer la detección en caché, el registro asistido por catálogo, los enlaces web de Docker y los detectores de versión.",
|
||||
"updatesTitle": "Pestaña 3 — Actualizaciones (solo LXC)",
|
||||
"updatesIntro": "Mantiene como objetivos separados los <strong>paquetes del SO</strong>, las aplicaciones registradas, <strong>Docker Engine</strong> y las imágenes Docker. Cada objetivo puede ejecutarse por separado; una acción en bloque y una programación opcionales seleccionan los métodos exactos que deben ejecutarse juntos.",
|
||||
"updatesIntro": "Mantiene separados <strong>paquetes del SO</strong>, aplicaciones, <strong>Docker Engine</strong> e imágenes Docker. Cada objetivo se ejecuta por separado o se incluye en una selección exacta para actualización en bloque o programada.",
|
||||
"updatesLinkLead": "Consulta la",
|
||||
"updatesLinkLabel": "página específica de Actualizaciones",
|
||||
"updatesLinkTail": "para conocer los actualizadores integrados y personalizados, la recreación Docker, la selección en bloque, las opciones de seguridad y la programación.",
|
||||
"mountsTitle": "Pestaña 4 — Montajes (solo LXC, cuando existen)",
|
||||
"mountsImageAlt": "Modal de vista en detalle LXC — pestaña Mounts listando cada mount point que está usando el contenedor: volúmenes PVE, host binds, binds desde almacenamiento PVE y montajes ad-hoc NFS/CIFS que el operador montó desde dentro del CT. Cada tarjeta lleva una insignia de tipo, barra de capacidad, bytes used/total, opciones de montaje y un punto de estado por color (verde sano, ámbar readonly/divergente, rojo stale)",
|
||||
"updatesLinkTail": "para actualizadores integrados y personalizados, recreación de contenedores Docker, selección en bloque, opciones de seguridad y programación.",
|
||||
"mountsTitle": "Pestaña 4 — Montajes (solo LXC, si existen)",
|
||||
"mountsImageAlt": "Detalles LXC, Montajes: volúmenes PVE, bind mounts del host o de almacenamiento PVE y NFS/CIFS montados dentro del CT. Cada tarjeta muestra tipo, capacidad, bytes usados/totales, opciones y estado por color: verde correcto, ámbar solo lectura/divergente, rojo inaccesible.",
|
||||
"mountsImageCaption": "Pestaña Mounts — solo se renderiza para contenedores LXC, y solo cuando hay al menos un mount point o un montaje remoto ad-hoc presente. Un CT sin mounts no recibe pestaña.",
|
||||
"mountsIntro": "La propia UI de Proxmox muestra las entradas de mount-point definidas en la config del contenedor (<code>mpX</code>) pero se queda ahí — cualquier cosa que montes desde dentro del CT después (<code>mount.cifs</code>, NFS vía <code>autofs</code>, …) es invisible. Esta pestaña funde <strong>ambas vistas</strong>: los mounts configurados <strong>y</strong> los mounts en runtime que ProxMenux sonda desde dentro del contenedor, con un estado de salud por mount y una barra de capacidad cuando el backend la puede resolver.",
|
||||
"mountTypesTitle": "Tipos de mount detectados",
|
||||
"mountsIntro": "Proxmox muestra los montajes configurados como <code>mpX</code>, pero no los añadidos después desde el CT con <code>mount.cifs</code>, NFS mediante <code>autofs</code>, etc. Esta pestaña une <strong>ambas vistas</strong>: montajes configurados <strong>y</strong> detectados dentro del contenedor, con estado por montaje y capacidad cuando el servidor puede obtenerla.",
|
||||
"mountTypesTitle": "Tipos de montaje detectados",
|
||||
"mountTypesItems": [
|
||||
"<strong>PVE volume</strong> — respaldado por un almacenamiento gestionado por Proxmox (un subvol ZFS, una entrada de directorio, un Ceph RBD, …). La capacidad viene de las stats del almacenamiento PVE para que la barra coincida con lo que el propio Proxmox muestra.",
|
||||
"<strong>Bind from PVE storage</strong> — entrada <code>mpX</code> apuntando a una ruta en un almacenamiento conocido por PVE.",
|
||||
"<strong>Bind from host</strong> — entrada <code>mpX</code> apuntando a una ruta arbitraria del host (<code>/mnt/something</code>). La capacidad es el <code>df</code> de esa ruta del host.",
|
||||
"<strong>Volumen PVE</strong>: almacenamiento gestionado por Proxmox (subvolumen ZFS, entrada de directorio, Ceph RBD, etc.). La capacidad usa las estadísticas PVE para coincidir con Proxmox.",
|
||||
"<strong>Bind de almacenamiento PVE</strong>: entrada <code>mpX</code> que apunta a una ruta de un almacenamiento conocido por PVE.",
|
||||
"<strong>Bind del host</strong>: entrada <code>mpX</code> con una ruta arbitraria del host (<code>/mnt/something</code>). La capacidad se obtiene con <code>df</code> de esa ruta.",
|
||||
"<strong>Ad-hoc inside CT</strong> — mount que <em>solo</em> existe en el namespace de mounts del contenedor (p. ej. un share NFS que el CT monta por su cuenta). La capacidad se lee vía <code>pct exec <vmid> df</code>, que es la única forma de verla — <code>/proc/<pid>/root</code> desde el host no expone las stats reales del mount remoto."
|
||||
],
|
||||
"mountStateTitle": "Punto de estado por tarjeta y avisos",
|
||||
"mountStateItems": [
|
||||
"<green/> <strong>Verde</strong> — mount sano y alcanzable.",
|
||||
"<amber/> <strong>Ámbar</strong> — divergente (configurado pero no montado en realidad), read-only o <em>zombie bind</em> (el origen en el host fue retirado pero el CT sigue viendo el bind como montado — típico cuando se desconectó una unidad USB o hubo un <code>umount</code> manual en el host).",
|
||||
"<red/> <strong>Rojo</strong> — stale: la sonda de runtime no pudo alcanzar el mount (común con exports NFS cuyo servidor está caído)."
|
||||
"<green/> <strong>Verde</strong>: montaje correcto y accesible.",
|
||||
"<amber/> <strong>Ámbar</strong>: configurado pero no montado, solo lectura o <em>bind zombi</em>. En este último caso se retiró el origen del host, pero el CT aún lo ve montado, por ejemplo tras desconectar un USB o ejecutar <code>umount</code> en el host.",
|
||||
"<red/> <strong>Rojo</strong>: inaccesible; la comprobación en ejecución no alcanzó el montaje, por ejemplo un recurso NFS con el servidor caído."
|
||||
],
|
||||
"mountsCalloutTitle": "Lo que esto te da sobre la UI nativa",
|
||||
"mountsCalloutTitle": "Información adicional respecto a Proxmox",
|
||||
"mountsCalloutBody": "Una vista veraz y consciente de la capacidad de cada sitio donde el contenedor lee o escribe. Shares NFS o CIFS montados desde dentro del CT — invisibles para la UI web de Proxmox — aparecen aquí con el mismo aspecto y la misma sonda de salud que cualquier mount point configurado. Mounts remotos stale y zombie binds salen marcados antes de que muerdan durante un backup.",
|
||||
"logsTitle": "Pestaña 5 — Logs (solo contenedores OCI)",
|
||||
"logsBody": "Solo aparece en los contenedores instalados por OCI manager Apps. Muestra la salida de consola del proceso principal de la imagen, guardada en el host en <code>/var/log/proxmenux/oci/VMID.console.log</code>: las últimas 100, 500 o 1000 líneas, seguidas en directo con el contenedor en marcha, con un filtro y una descarga. Lee el archivo cada vez que se abre, así que también funciona con el contenedor detenido. Los detalles están en <ociLink>Contenedores OCI en ProxMenux Monitor</ociLink>.",
|
||||
"backupsTitle": "Pestaña 6 — Backups",
|
||||
"logsBody": "Solo para contenedores de OCI manager Apps. Muestra la consola del proceso principal de la imagen, guardada en <code>/var/log/proxmenux/oci/VMID.console.log</code>: últimas 100, 500 o 1000 líneas, seguimiento en vivo mientras está activo, filtro y descarga. Relee el archivo al abrir y funciona detenido. Más en <ociLink>Contenedores OCI en ProxMenux Monitor</ociLink>.",
|
||||
"backupsTitle": "Pestaña 6 — Copias de seguridad",
|
||||
"backupsImageAlt": "Modal de vista en detalle por guest — pestaña Backups con la lista de backups disponibles, etiqueta de destino, tamaños y el botón Create Backup",
|
||||
"backupsImageCaption": "Pestaña Backups — cada backup almacenado en los almacenamientos Proxmox configurados para este guest, ordenados de más nuevo a más viejo. La cabecera de la pestaña lleva la insignia de recuento.",
|
||||
"backupsIntro": "Lista cada backup almacenado en los almacenamientos Proxmox configurados para este guest, ordenados de más nuevo a más viejo. El título de la pestaña lleva una insignia de recuento para que veas de un vistazo si el guest está backupeado. Por fila:",
|
||||
"backupsImageCaption": "Todas las copias del invitado en almacenamientos Proxmox configurados, de más nueva a más antigua. La cabecera muestra su número.",
|
||||
"backupsIntro": "Lista las copias del invitado en almacenamientos Proxmox, empezando por la más reciente. El contador del título permite comprobar si tiene copias. Cada fila muestra:",
|
||||
"backupsItems": [
|
||||
"<strong>Timestamp</strong> — fecha y hora de la ejecución.",
|
||||
"<strong>Fecha y hora</strong>: momento de la ejecución.",
|
||||
"<strong>Etiqueta de destino</strong> — el almacenamiento donde vive (PBS-Cloud, PBS-Local, NFS-Backup, …) coloreada por estado.",
|
||||
"<strong>Size</strong> — tamaño final en disco del backup."
|
||||
"<strong>Tamaño</strong>: tamaño final en disco de la copia."
|
||||
],
|
||||
"backupsOutro": "El botón <strong>+ Create Backup</strong> arriba a la derecha arranca una nueva ejecución en el almacenamiento marcado como \"Backup target\" en la config de almacenamiento de Proxmox. El restore vive en la UI web de Proxmox — el Monitor expone la vista \"¿este guest tiene backup reciente?\", no el flujo de recuperación.",
|
||||
"backupsOutro": "<strong>+ Crear copia</strong> inicia una copia en el almacenamiento marcado «Backup target» en Proxmox. Para restaurar usa la interfaz web de Proxmox; Monitor muestra las copias recientes del invitado y permite crearlas.",
|
||||
"firewallTitle": "Pestaña 7 — Cortafuegos",
|
||||
"firewallIntro": "Lee el log de firewall de Proxmox por guest directamente del host (sin servicio extra, sin polling). La pestaña siempre está presente en la barra de navegación; el panel decide qué renderizar dependiendo de si el firewall está activo para ese guest y si alguna regla está logueando realmente:",
|
||||
"firewallIntro": "Lee el registro del cortafuegos de cada invitado directamente del host, sin servicio extra ni consultas periódicas. La pestaña siempre aparece; el contenido depende de que el cortafuegos esté activado y de que alguna regla registre paquetes.",
|
||||
"firewallItems": [
|
||||
"<strong>Firewall disabled</strong> — un aviso ámbar explica exactamente dónde activarlo en la UI de Proxmox (<em><Container|VM> → Firewall → Options</em>) y te recuerda que al menos una regla necesita <code>log: info</code> (o superior) antes de que aparezcan paquetes.",
|
||||
"<strong>Firewall enabled, no events yet</strong> — pista de estado vacío con el mismo requisito de logging, útil cuando acabas de activar el firewall.",
|
||||
"<strong>Events present</strong> — un panel monoespaciado scrolleable con las entradas raw coloreadas por acción: <green>ACCEPT</green> (verde), <orange>REJECT</orange> (naranja), <red>DROP</red> (rojo). Una insignia de recuento en la cabecera muestra cuántas entradas hay cargadas en este momento."
|
||||
"<strong>Cortafuegos desactivado</strong>: aviso ámbar que indica dónde activarlo en Proxmox (<em><Container|VM> → Firewall → Options</em>) y que alguna regla requiere <code>log: info</code> o superior para mostrar paquetes.",
|
||||
"<strong>Cortafuegos activo, sin eventos aún</strong>: el panel vacío recuerda el mismo requisito de registro, útil al activarlo por primera vez.",
|
||||
"<strong>Hay eventos</strong>: panel monoespaciado con desplazamiento y entradas originales por acción: <green>ACCEPT</green> verde, <orange>REJECT</orange> naranja y <red>DROP</red> rojo. El contador de la cabecera indica las entradas cargadas."
|
||||
],
|
||||
"firewallRefresh": "Un botón <em>Refresh</em> arriba a la derecha del panel trae las últimas entradas bajo demanda — no hay auto-refresh dentro de la modal, así que la lista es una snapshot del momento en que abriste la pestaña o pulsaste refresh. Los datos vienen del archivo de log por guest que Proxmox escribe bajo <code>/var/log/pve-firewall.log</code> filtrado por VMID, expuesto vía <code>GET /api/vms/<vmid>/firewall/log</code>.",
|
||||
"firewallRefresh": "<em>Actualizar</em> carga las entradas más recientes bajo demanda. No hay actualización automática: se muestra el momento de apertura o de la última pulsación. Los datos proceden de <code>/var/log/pve-firewall.log</code>, filtrados por VMID mediante <code>GET /api/vms/<vmid>/firewall/log</code>.",
|
||||
"firewallCalloutTitle": "¿Por qué tenerlo aquí cuando la UI de Proxmox ya lo muestra?",
|
||||
"firewallCalloutBody": "Dos razones: elimina el viaje de ida y vuelta a la UI web de Proxmox cuando ya estás inspeccionando un guest desde el panel, y mantiene la misma vista acotada por VMID que usa el resto de la modal — arrancar el guest, comprobar sus mounts, mirar los hits recientes del firewall y pararlo otra vez sin salir del panel. El Monitor nunca edita reglas de firewall; la edición de reglas se queda en la interfaz nativa de Proxmox donde corresponde.",
|
||||
"firewallCalloutBody": "Evita cambiar a la interfaz Proxmox y mantiene la vista del mismo VMID: inicia el invitado, comprueba montajes y eventos del cortafuegos y vuelve a detenerlo desde el panel. Las reglas se editan en Proxmox; Monitor no las modifica.",
|
||||
"actionBarTitle": "Barra de acciones del pie",
|
||||
"actionBarIntro": "Siempre visible al pie de la modal independientemente de qué pestaña esté activa:",
|
||||
"consoleItem": "<strong>Console</strong> (solo LXC, running) — abre una modal que ejecuta <code>pct enter <vmid></code> y te deja dentro del contenedor. La misma fontanería xterm.js + WebSocket que la <link>pestaña Terminal</link> independiente, incluyendo la <strong>barra para móvil</strong> con ESC, TAB, flechas, Enter y las combinaciones Ctrl (Ctrl+C / Ctrl+X / Ctrl+R) bajo el terminal — haciendo la modal usable desde el teclado de un móvil o tablet. Las VMs no exponen un botón Console aquí; usa la consola web de Proxmox (noVNC) para acceso al guest.",
|
||||
"lifecycleIntro": "Debajo, cuatro botones de ciclo de vida en una rejilla 2×2. Cada uno dispara <code>POST /api/vms/<vmid>/control</code> con la <code>action</code> correspondiente; el estado de enabled depende de si el guest está actualmente en ejecución:",
|
||||
"consoleItem": "<strong>Consola</strong>, solo para LXC en ejecución, abre <code>pct enter <vmid></code> dentro del contenedor. Usa la misma conexión xterm.js y WebSocket que la <link>pestaña Terminal</link>, incluida la <strong>barra para móviles</strong> con ESC, TAB, flechas, Intro y Ctrl+C / Ctrl+X / Ctrl+R. Permite trabajar con móvil o tablet. Para VM usa la consola Proxmox noVNC.",
|
||||
"lifecycleIntro": "Debajo hay cuatro botones en rejilla 2×2. Cada uno envía <code>POST /api/vms/<vmid>/control</code> con su <code>action</code>. Se habilitan según el estado actual del invitado.",
|
||||
"headerButton": "Botón",
|
||||
"headerEnabled": "Habilitado cuando",
|
||||
"headerAction": "Acción enviada al host",
|
||||
"lifecycleRows": [
|
||||
{
|
||||
"button": "Start",
|
||||
"button": "Iniciar",
|
||||
"color": "green",
|
||||
"enabled": "El guest está parado.",
|
||||
"action": "qm start / pct start"
|
||||
},
|
||||
{
|
||||
"button": "Shutdown",
|
||||
"button": "Apagar",
|
||||
"color": "blue",
|
||||
"enabled": "El guest está en ejecución.",
|
||||
"action": "qm shutdown / pct shutdown — graceful, ACPI"
|
||||
"enabled": "El invitado está en ejecución.",
|
||||
"action": "qm shutdown / pct shutdown — apagado ordenado, ACPI"
|
||||
},
|
||||
{
|
||||
"button": "Reboot",
|
||||
"button": "Reiniciar",
|
||||
"color": "blue",
|
||||
"enabled": "El guest está en ejecución.",
|
||||
"action": "qm reboot / pct reboot — reinicio graceful"
|
||||
"enabled": "El invitado está en ejecución.",
|
||||
"action": "qm reboot / pct reboot — reinicio ordenado"
|
||||
},
|
||||
{
|
||||
"button": "Force Stop",
|
||||
"button": "Forzar parada",
|
||||
"color": "red",
|
||||
"enabled": "El guest está en ejecución.",
|
||||
"action": "qm stop / pct stop — apagado en duro"
|
||||
"enabled": "El invitado está en ejecución.",
|
||||
"action": "qm stop / pct stop — apagado forzado"
|
||||
}
|
||||
],
|
||||
"forceStopTitle": "Force Stop es el kill switch, no la opción educada",
|
||||
"forceStopBody": "<strong>Force Stop</strong> salta la secuencia de apagado del guest — equivalente a tirar del cable de la luz. Usa <strong>Shutdown</strong> cuando el guest responde; recurre a Force Stop solo cuando Shutdown se cuelga y aceptas el riesgo de pérdida de datos de un apagado no coordinado. El botón es rojo y está etiquetado a propósito para que no lo pulses por reflejo."
|
||||
"forceStopTitle": "Forzar parada corta la ejecución inmediatamente",
|
||||
"forceStopBody": "<strong>Forzar parada</strong> omite el apagado del invitado, como cortar la alimentación. Usa <strong>Apagar</strong> mientras responda. Fuerza la parada solo si el apagado se bloquea y aceptas el riesgo de perder datos. El botón rojo y su etiqueta ayudan a evitar pulsaciones accidentales."
|
||||
},
|
||||
"dataCollected": {
|
||||
"heading": "Cómo se recopilan los datos",
|
||||
@@ -186,9 +186,9 @@
|
||||
"source": "Datos RRD de PVE (<code>pvesh get /nodes/<node>/qemu/<id>/rrddata</code>) condensados a una forma amigable para gráficas."
|
||||
},
|
||||
{
|
||||
"section": "Logs recientes de tareas (modal)",
|
||||
"section": "Resultados recientes del log Proxmox",
|
||||
"endpoint": "/api/vms/<vmid>/logs",
|
||||
"source": "Tareas para ese <code>vmid</code> desde <code>/var/log/pve/tasks/index</code>."
|
||||
"source": "<code>pvesh get /nodes/<node>/<qemu|lxc>/<vmid>/log --start 0 --limit 1000</code>. Si el comando falla devuelve una lista vacía; no proporciona todos los logs internos del invitado."
|
||||
},
|
||||
{
|
||||
"section": "Backups disponibles para el guest",
|
||||
@@ -206,8 +206,8 @@
|
||||
"source": "<code>qm start|stop|reboot|shutdown</code> o equivalentes <code>pct</code>."
|
||||
}
|
||||
],
|
||||
"codeComment1": "# Cross-check de lo que ve el panel contra PVE",
|
||||
"codeComment2": "# Inspeccionar la config de un guest concreto tal como la ve la modal",
|
||||
"codeComment1": "# Contrastar los datos del panel con PVE",
|
||||
"codeComment2": "# Inspeccionar la configuración de un invitado tal como la muestra la ventana",
|
||||
"codeComment3": "# VM",
|
||||
"codeComment4": "# CT"
|
||||
},
|
||||
@@ -217,7 +217,7 @@
|
||||
{
|
||||
"label": "Monitor de salud",
|
||||
"href": "/docs/monitor/health-monitor",
|
||||
"tailRich": " — la categoría VMs y Contenedores (boot fallido, timeouts QMP, fallos de shutdown de CT)."
|
||||
"tailRich": " — categoría VMs y Contenedores: fallos de arranque, tiempos de espera QMP y errores de apagado CT."
|
||||
},
|
||||
{
|
||||
"label": "Notificaciones",
|
||||
@@ -227,7 +227,7 @@
|
||||
{
|
||||
"label": "Referencia de la API",
|
||||
"href": "/docs/monitor/api",
|
||||
"tailRich": " — los endpoints de VM y backup."
|
||||
"tailRich": " — endpoints de VM y copias de seguridad."
|
||||
},
|
||||
{
|
||||
"label": "Índice del panel",
|
||||
@@ -235,9 +235,9 @@
|
||||
"tailRich": " — el resto de pestañas."
|
||||
},
|
||||
{
|
||||
"label": "ProxMenux → Create VM",
|
||||
"label": "ProxMenux → Crear VM",
|
||||
"href": "/docs/create-vm",
|
||||
"tailRich": " — la cara de provisión: plantillas de System NAS (Synology y otros), VMs Linux / Windows, valores por defecto pensados para Proxmox."
|
||||
"tailRich": " — creación de sistemas: plantillas NAS (Synology y otros), VM Linux/Windows y valores adaptados a Proxmox."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user