# 🎫 Boletos.la — Reporte Ejecutivo de Monitoreo & Trazabilidad
> **Fecha de Auditoria**: `2026-09-07 19:55:24` | **Tiempo de Ejecucion**: `16.11s` | **Estado General**: `🟢 100% OPERATIVO`

## 1. 📊 Metricas de la Flota (9 Microservicios)
* **Total Servidores**: `9`
* **Servicios Operativos [UP]**: `🟢 9`
* **Servicios con Incidencia [ERROR]**: `0`
* **Latencia Promedio SSH/API**: `1112ms`

## 2. 🩺 Estado de Microservicios & Endpoints
| # | Estado | Servicio / Repo | IP Publica | Latencia | Runtime & Memoria | HTTP Status |
| :- | :--- | :--- | :--- | :--- | :--- | :--- |
| 1 | 🟢 UP | **gds** (`boletos-la-backend-gds`) | `34.236.254.39` | `865ms` | PM2 (120.8MB) | `200` |
| 2 | 🟢 UP | **bancard** (`boletos-la-backend-bancard`) | `3.239.196.199` | `1079ms` | PM2 (101.0MB) | `running` |
| 3 | 🟢 UP | **pdf** (`boletos-la-backend-pdf-tickets`) | `32.197.199.197` | `2812ms` | PM2 (111.6MB) | `success` |
| 4 | 🟢 UP | **convenios** (`backend-convenios-py`) | `44.193.77.208` | `1001ms` | PM2 (78.9MB) | `OK` |
| 5 | 🟢 UP | **n8n** (`boletos-la-remarketing-service`) | `44.201.44.213` | `903ms` | running | `ok` |
| 6 | 🟢 UP | **vpn** (`boletos-la-infra-vpn`) | `3.238.141.180` | `919ms` | running | `Up 2 weeks (healthy)` |
| 7 | 🟢 UP | **publicidad** (`boletos-la-backend-publicidad`) | `44.245.217.130` | `1093ms` | PM2 (109.7MB) | `200` |
| 8 | 🟢 UP | **analitica** (`boletos-la-analitica`) | `16.59.46.45` | `675ms` | PM2 (74.4MB) | `200` |
| 9 | 🟢 UP | **itinerarios** (`backend-itinerarios`) | `18.222.89.111` | `659ms` | PM2 (122.7MB) | `200` |

## 3. 🗄️ Trazabilidad de Bases de Datos (Live)
### 🔹 backend-boletos-la (Motor GDS Delta Bus Core)
```text
Colecciones y estadisticas de MongoDB 'backend-boletos-la':
  - Servicios: 0 | Ciudades: 0 | Rutas: 0 | Usuarios: 1
  - Colecciones activas: users, buslayouts, buses, services, cities, seats, routemasters
  (Servicios se sincronizan on-demand via SOAP Delta Bus)
```

### 🔹 server-bancard-wit (Orquestador Bancard vPOS 2.0 & QR)
```text
Ultimas 5 transacciones en RDS MySQL 'bancard' (tabla vpos_audit):
ID     FECHA                ACCION         SHOP_PROCESS_ID    MONTO      ESTADO   AUTH#    CDC SIFEN
-------------------------------------------------------------------------------------------------------------------
1941   2026-09-07 19:49:20  confirmation   169282632344381    N/A        error    —        —
1940   2026-09-07 19:49:18  confirmation   169282632344381    N/A        error    —        —
1939   2026-09-07 19:49:15  confirmation   169282632344381    N/A        error    —        —
1938   2026-09-07 19:49:13  confirmation   169282632344381    N/A        error    —        —
1937   2026-09-07 19:49:11  confirmation   169282632344381    N/A        error    —        —
```

### 🔹 BoletosConveniosServer (Convenios B2B Boletos Paraguay)
```text
Convenios activos y codigos de descuento en MySQL 'convenios' (Total: 7):
ID   ESTADO     CODIGO         DESCUENTO    ALCANCE    EMPRESA                NOMBRE CONVENIO
---------------------------------------------------------------------------------------------------------
1    ACTIVO     BOLETOS        5.00%        Global     Boletos.la/paraguay    5% OFF - Boletos
3    INACTIVO   WIT1995        95.00%       Global     Boletos.la/paraguay    95% OFF - Boletos
4    INACTIVO   —              20.00%       Global     Empresa Test           Convenio beneficiario test adulto mayor
5    INACTIVO   —              25.00%       Global     Empresa Test           Estudiante
6    INACTIVO   —              30.00%       Global     Empresa 2              Convenio 2
7    INACTIVO   TESTDEL123     5.00%        Global     Boletos.la/paraguay    CONVENIO_TEST_BORRADO_TEMPORAL
8    ACTIVO     BOLETOS70      70.00%       Global     Boletos.la/paraguay    70% OFF - Boletos
```

### 🔹 Boletos_N8N_WhatsApp (n8n WhatsApp & Evolution API)
```text
id | name | connectionStatus | createdAt 
----+------+------------------+-----------
(0 rows)
```

## 4. ⚠️ Registros de Error (Logs stderr)
#### 🔴 Error en `gds` (backend-boletos-la):
```text
at async /home/bitnami/backend-boletos-la/node_modules/express-rate-limit/dist/index.cjs:782:5 {
  code: 'ERR_ERL_UNEXPECTED_X_FORWARDED_FOR',
  help: 'https://express-rate-limit.github.io/ERR_ERL_UNEXPECTED_X_FORWARDED_FOR/'
}
SyntaxError: Unterminated string in JSON at position 100
    at JSON.parse (<anonymous>)
    at parse (/home/bitnami/backend-boletos-la/node_modules/body-parser/lib/types/json.js:77:19)
    at /home/bitnami/backend-boletos-la/node_modules/body-parser/lib/read.js:123:18
    at AsyncResource.runInAsyncScope (node:async_hooks:206:9)
    at invokeCallback (/home/bitnami/backend-boletos-la/node_modules/raw-body/index.js:238:16)
    at done (/home/bitnami/backend-boletos-la/node_modules/raw-body/index.js:227:7)
    at IncomingMessage.onEnd (/home/bitnami/backend-boletos-la/node_modules/raw-body/index.js:287:7)
    at IncomingMessage.emit (node:events:524:28)
    at endReadableNT (node:internal/streams/readable:1698:12)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
```

#### 🔴 Error en `bancard` (server-bancard-wit):
```text
at Object.<anonymous> (/home/admin/backend-vpos/node_modules/http-cookie-agent/dist/http/index.js:33:27)
    at Hook._require.Module.require (/usr/local/lib/node_modules/pm2/node_modules/require-in-the-middle/index.js:101:39)
    at Object.<anonymous> (/home/admin/backend-vpos/node_modules/http-cookie-agent/http/index.js:1:18) {
  code: 'ERR_REQUIRE_ESM'
}
Error [ERR_REQUIRE_ESM]: require() of ES Module /home/admin/backend-vpos/node_modules/http-cookie-agent/node_modules/agent-base/dist/index.js from /home/admin/backend-vpos/node_modules/http-cookie-agent/dist/http/mixed_cookie_agent.js not supported.
Instead change the require of index.js in /home/admin/backend-vpos/node_modules/http-cookie-agent/dist/http/mixed_cookie_agent.js to a dynamic import() which is available in all CommonJS modules.
    at Hook._require.Module.require (/usr/local/lib/node_modules/pm2/node_modules/require-in-the-middle/index.js:101:39)
    at Object.<anonymous> (/home/admin/backend-vpos/node_modules/http-cookie-agent/dist/http/mixed_cookie_agent.js:7:18)
    at Hook._require.Module.require (/usr/local/lib/node_modules/pm2/node_modules/require-in-the-middle/index.js:101:39)
    at Object.<anonymous> (/home/admin/backend-vpos/node_modules/http-cookie-agent/dist/http/index.js:33:27)
    at Hook._require.Module.require (/usr/local/lib/node_modules/pm2/node_modules/require-in-the-middle/index.js:101:39)
    at Object.<anonymous> (/home/admin/backend-vpos/node_modules/http-cookie-agent/http/index.js:1:18) {
  code: 'ERR_REQUIRE_ESM'
}
```

#### 🔴 Error en `pdf` (new-backend-pdf-2):
```text
==> /home/admin/.pm2/logs/app-error-0.log <==
    at Socket.emit (node:events:509:28)
    at addChunk (node:internal/streams/readable:563:12)
    at readableAddChunkPushByteMode (node:internal/streams/readable:514:3)
    at Readable.push (node:internal/streams/readable:394:5)
2026-09-05T23:06:02: Error con html-pdf-node: Error: Gotenberg devolvió código de error: 503
    at ClientRequest.<anonymous> (/home/admin/pdf-mail-backend/utils/pdfGenerator.js:50:13)
    at Object.onceWrapper (node:events:631:26)
    at ClientRequest.emit (node:events:509:28)
    at HTTPParser.parserOnIncomingClient (node:_http_client:798:27)
    at HTTPParser.parserOnHeadersComplete (node:_http_common:125:17)
    at Socket.socketOnData (node:_http_client:633:22)
    at Socket.emit (node:events:509:28)
    at addChunk (node:internal/streams/readable:563:12)
    at readableAddChunkPushByteMode (node:internal/streams/readable:514:3)
    at Readable.push (node:internal/streams/readable:394:5)

==> /home/admin/.pm2/logs/app-error-1.log <==
    at Socket.emit (node:events:509:28)
    at addChunk (node:internal/streams/readable:563:12)
    at readableAddChunkPushByteMode (node:internal/streams/readable:514:3)
    at Readable.push (node:internal/streams/readable:394:5)
2026-09-05T23:06:02: Error con html-pdf-node: Error: Gotenberg devolvió código de error: 503
    at ClientRequest.<anonymous> (/home/admin/pdf-mail-backend/utils/pdfGenerator.js:50:13)
    at Object.onceWrapper (node:events:631:26)
    at ClientRequest.emit (node:events:509:28)
    at HTTPParser.parserOnIncomingClient (node:_http_client:798:27)
    at HTTPParser.parserOnHeadersComplete (node:_http_common:125:17)
    at Socket.socketOnData (node:_http_client:633:22)
    at Socket.emit (node:events:509:28)
    at addChunk (node:internal/streams/readable:563:12)
    at readableAddChunkPushByteMode (node:internal/streams/readable:514:3)
    at Readable.push (node:internal/streams/readable:394:5)

==> /home/admin/.pm2/logs/app-error.log <==
    at emitErrorEvent (node:_http_client:109:11)
    at Socket.socketErrorListener (node:_http_client:593:5)
    at Socket.emit (node:events:509:28)
    at emitErrorNT (node:internal/streams/destroy:170:8)
    at emitErrorCloseNT (node:internal/streams/destroy:129:3)
    at process.processTicksAndRejections (node:internal/process/task_queues:90:21)
Error con html-pdf-node: Error: No se pudo conectar con Gotenberg en http://3.235.151.80:3001. ¿Está corriendo Docker? Detalles: connect ETIMEDOUT 3.235.151.80:3001
    at ClientRequest.<anonymous> (/home/admin/pdf-mail-backend/utils/pdfGenerator.js:64:9)
    at ClientRequest.emit (node:events:509:28)
    at emitErrorEvent (node:_http_client:109:11)
    at Socket.socketErrorListener (node:_http_client:593:5)
    at Socket.emit (node:events:509:28)
    at emitErrorNT (node:internal/streams/destroy:170:8)
    at emitErrorCloseNT (node:internal/streams/destroy:129:3)
    at process.processTicksAndRejections (node:internal/process/task_queues:90:21)
```

#### 🔴 Error en `convenios` (BoletosConveniosServer):
```text
at Object.<anonymous> (/home/ubuntu/app/src/server.js:2:1)
    at Module._compile (node:internal/modules/cjs/loader:1521:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1623:10)
    at Module.load (node:internal/modules/cjs/loader:1266:32)
    at Module._load (node:internal/modules/cjs/loader:1091:12)
    at Object.<anonymous> (/usr/lib/node_modules/pm2/lib/ProcessContainerFork.js:32:23) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/home/ubuntu/app/src/server.js' ]
}
[Beneficiario Service] Error al crear en BD: Validation error: El RUT debe tener el formato xxxxxxxx-x (números y guion)
[Beneficiario Controller] Crear - Error: Validation error: El RUT debe tener el formato xxxxxxxx-x (números y guion)
[Beneficiario Service] Error al crear en BD: Validation error: El RUT debe tener el formato xxxxxxxx-x (números y guion)
[Beneficiario Controller] Crear - Error: Validation error: El RUT debe tener el formato xxxxxxxx-x (números y guion)
[Beneficiario Service] Error al crear en BD: Validation error: El RUT debe tener el formato xxxxxxxx-x (números y guion)
[Beneficiario Controller] Crear - Error: Validation error: El RUT debe tener el formato xxxxxxxx-x (números y guion)
```

#### 🔴 Error en `publicidad` (backend-boletos-publicidad):
```text
[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada
[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada
[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada
[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada
[ALERTA CRÍTICA Sockets] Tótem 1006 - Servicios locales caídos
[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada
[ALERTA CRÍTICA Sockets] Tótem 1006 - Servicios locales caídos
[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada
[ALERTA CRÍTICA Sockets] Tótem 1006 - Servicios locales caídos
[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada
[ALERTA CRÍTICA Sockets] Tótem 1006 - Servicios locales caídos
[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada
[ALERTA CRÍTICA Sockets] Tótem 1006 - Servicios locales caídos
[ALERTA CRÍTICA Sockets] Tótem 1006 - Impresora desconectada
[ALERTA CRÍTICA Sockets] Tótem 1006 - Servicios locales caídos
```

#### 🔴 Error en `analitica` (boletos-la-analitica):
```text
at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
Deprecation warning: value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.
Arguments: 
[0] _isAMomentObject: true, _isUTC: false, _useUTC: false, _l: undefined, _i: 18-06-2008, _f: undefined, _strict: undefined, _locale: [object Object]
Error
    at Function.createFromInputFallback (/home/bitnami/backend-boletos-analitica/node_modules/moment/moment.js:324:25)
    at configFromString (/home/bitnami/backend-boletos-analitica/node_modules/moment/moment.js:2613:19)
    at configFromInput (/home/bitnami/backend-boletos-analitica/node_modules/moment/moment.js:3056:13)
    at prepareConfig (/home/bitnami/backend-boletos-analitica/node_modules/moment/moment.js:3039:13)
    at createFromConfig (/home/bitnami/backend-boletos-analitica/node_modules/moment/moment.js:3006:44)
    at createLocalOrUTC (/home/bitnami/backend-boletos-analitica/node_modules/moment/moment.js:3100:16)
    at createLocal (/home/bitnami/backend-boletos-analitica/node_modules/moment/moment.js:3104:16)
    at hooks (/home/bitnami/backend-boletos-analitica/node_modules/moment/moment.js:16:29)
    at model._sanitize (/home/bitnami/backend-boletos-analitica/node_modules/sequelize/lib/data-types.js:356:14)
    at model.set (/home/bitnami/backend-boletos-analitica/node_modules/sequelize/lib/model.js:2286:59)
```

## 5. 📜 Actividad Reciente (Logs stdout)
<details><summary><b>Logs stdout: gds (backend-boletos-la)</b></summary>

```text
[GDS:CREATE_PASSENGER] status: success
[GDS:BLOCK] serviceId: 259314, seats: 3, channel: web
[GDS:BLOCK] status: success
[GDS:BLOCK] serviceId: 259992, seats: 1, channel: totem
[GDS:BLOCK] status: success
[GDS:CREATE_PASSENGER] name: IVAN ANDRES VALENZUELA RUBIO, doc: 17211508
[GDS:CREATE_PASSENGER] status: success
[GDS:BLOCK] serviceId: 259481, seats: 3, channel: web
[GDS:BLOCK] status: success
[GDS:CREATE_PASSENGER] name: IVAN ANDRES VALENZUELA RUBIO, doc: 17211508
[GDS:CREATE_PASSENGER] status: success
[GDS:BLOCK] serviceId: 259481, seats: 3, channel: web
[GDS:BLOCK] status: success
[GDS:UNBLOCK] connectionId: 3195181
[GDS:UNBLOCK] status: success
```
</details>

<details><summary><b>Logs stdout: bancard (server-bancard-wit)</b></summary>

```text
⚙️  Revisa tu .env para confirmar configuraciones.


🗄️  Verificando conexión a base de datos AWS...
[DB] Conectando a ls-11aeb87f32cb156f3efde4a70aafcbb831f8e255.cs9gyyc0moxd.us-east-1.rds.amazonaws.com:3306...
[DB] Conexión a MySQL establecida correctamente.
[DB] ✅ Tabla unificada vpos_audit verificada/creada.
✅ Tabla `audit_pos` verificada/creada correctamente.
GET / 200 3.242 ms - 161
[2026-09-07T19:52:53.473Z] GET / 200 7ms — IP: ::ffff:127.0.0.1
GET /api/v1/clusters 404 1.557 ms - 71
[2026-09-07T19:55:09.843Z] GET /api/v1/clusters 404 3ms — IP: ::ffff:127.0.0.1
GET / 200 0.681 ms - 161
[2026-09-07T19:55:25.863Z] GET / 200 1ms — IP: ::ffff:127.0.0.1
```
</details>

<details><summary><b>Logs stdout: pdf (new-backend-pdf-2)</b></summary>

```text
==> /home/admin/.pm2/logs/app-out-0.log <==
2026-08-27T15:23:22: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  write to custom object with { processEnv: myObject }
2026-08-27T15:23:23: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  write to custom object with { processEnv: myObject }
2026-08-27T15:23:24: Servidor en puerto 3000
2026-08-27T11:29:15: [dotenv@17.2.4] injecting env (7) from .env -- tip: 🛠️  run anywhere with `dotenvx run -- yourcommand`
2026-08-27T11:29:18: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  specify custom .env file path with { path: '/custom/path/.env' }
2026-08-27T11:29:18: [dotenv@17.2.4] injecting env (0) from .env -- tip: 🔄 add secrets lifecycle management: https://dotenvx.com/ops
2026-08-27T11:29:19: Servidor en puerto 3000
2026-09-03T19:07:43: [dotenv@17.2.4] injecting env (7) from .env -- tip: ⚙️  write to custom object with { processEnv: myObject }
2026-09-03T19:07:48: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  enable debug logging with { debug: true }
2026-09-03T19:07:49: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  write to custom object with { processEnv: myObject }
2026-09-03T19:07:50: Servidor en puerto 3000
2026-09-03T20:48:37: [dotenv@17.2.4] injecting env (7) from .env -- tip: ⚙️  override existing env vars with { override: true }
2026-09-03T20:48:40: [dotenv@17.2.4] injecting env (0) from .env -- tip: 🔑 add access controls to secrets: https://dotenvx.com/ops
2026-09-03T20:48:41: [dotenv@17.2.4] injecting env (0) from .env -- tip: 🔄 add secrets lifecycle management: https://dotenvx.com/ops
2026-09-03T20:48:41: Servidor en puerto 3000

==> /home/admin/.pm2/logs/app-out-1.log <==
2026-08-27T15:23:22: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  enable debug logging with { debug: true }
2026-08-27T15:23:23: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  override existing env vars with { override: true }
2026-08-27T15:23:23: Servidor en puerto 3000
2026-08-27T11:29:16: [dotenv@17.2.4] injecting env (7) from .env -- tip: ⚙️  specify custom .env file path with { path: '/custom/path/.env' }
2026-08-27T11:29:19: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  enable debug logging with { debug: true }
2026-08-27T11:29:19: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  enable debug logging with { debug: true }
2026-08-27T11:29:20: Servidor en puerto 3000
2026-09-03T19:07:47: [dotenv@17.2.4] injecting env (7) from .env -- tip: 🗂️ backup and recover secrets: https://dotenvx.com/ops
2026-09-03T19:07:49: [dotenv@17.2.4] injecting env (0) from .env -- tip: 📡 add observability to secrets: https://dotenvx.com/ops
2026-09-03T19:07:49: [dotenv@17.2.4] injecting env (0) from .env -- tip: 🔐 prevent building .env in docker: https://dotenvx.com/prebuild
2026-09-03T19:07:50: Servidor en puerto 3000
2026-09-03T20:48:38: [dotenv@17.2.4] injecting env (7) from .env -- tip: 📡 add observability to secrets: https://dotenvx.com/ops
2026-09-03T20:48:42: [dotenv@17.2.4] injecting env (0) from .env -- tip: 👥 sync secrets across teammates & machines: https://dotenvx.com/ops
2026-09-03T20:48:42: [dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  specify custom .env file path with { path: '/custom/path/.env' }
2026-09-03T20:48:42: Servidor en puerto 3000

==> /home/admin/.pm2/logs/app-out.log <==
[pdfGenerator] Lanzando Chromium...
[pdfGenerator] Forzando uso de Chromium del sistema: /usr/bin/chromium
[pdfGenerator] Lanzando Chromium...
[pdfGenerator] Forzando uso de Chromium del sistema: /usr/bin/chromium
[pdfGenerator] Lanzando Chromium...
[pdfGenerator] Forzando uso de Chromium del sistema: /usr/bin/chromium
[pdfGenerator] Lanzando Chromium...
[dotenv@17.2.4] injecting env (8) from .env -- tip: 🔄 add secrets lifecycle management: https://dotenvx.com/ops
[dotenv@17.2.4] injecting env (0) from .env -- tip: 🔄 add secrets lifecycle management: https://dotenvx.com/ops
[dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  suppress all logs with { quiet: true }
Servidor en puerto 3000
[dotenv@17.2.4] injecting env (8) from .env -- tip: 📡 add observability to secrets: https://dotenvx.com/ops
[dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  override existing env vars with { override: true }
[dotenv@17.2.4] injecting env (0) from .env -- tip: ⚙️  write to custom object with { processEnv: myObject }
Servidor en puerto 3000
```
</details>

<details><summary><b>Logs stdout: convenios (BoletosConveniosServer)</b></summary>

```text
{"level":"info","message":"⏰ Ejecutando limpieza de convenios vencidos..."}
{"level":"info","message":"⏰ Ejecutando limpieza de convenios vencidos..."}
{"level":"info","message":"⏰ Ejecutando limpieza de convenios vencidos..."}
{"level":"info","message":"⏰ Ejecutando limpieza de convenios vencidos..."}
{"level":"info","message":"⏰ Ejecutando limpieza de convenios vencidos..."}
{"level":"info","message":"⏰ Ejecutando limpieza de convenios vencidos..."}
{"level":"info","message":"⏰ Ejecutando limpieza de convenios vencidos..."}
{"level":"info","message":"⏰ Ejecutando limpieza de convenios vencidos..."}
{"level":"info","message":"⏰ Ejecutando limpieza de convenios vencidos..."}
{"level":"info","message":"⏰ Ejecutando limpieza de convenios vencidos..."}
{"level":"info","message":"⏰ Ejecutando limpieza de convenios vencidos..."}
{"level":"info","message":"⏰ Ejecutando limpieza de convenios vencidos..."}
{"level":"info","message":"⏰ Ejecutando limpieza de convenios vencidos..."}
{"level":"info","message":"⏰ Ejecutando limpieza de convenios vencidos..."}
{"level":"info","message":"⏰ Ejecutando limpieza de convenios vencidos..."}
```
</details>

<details><summary><b>Logs stdout: n8n (Boletos_N8N_WhatsApp)</b></summary>

```text
Servidor HTTP y WebSocket corriendo en el puerto 3000
[TotemMonitor] Se detectaron 1 tótems inactivos. Marcando como offline...
[TotemMonitor] Tótem LocalHost (ID: 100) marcado como offline.
[TotemMonitor] Se detectaron 1 tótems inactivos. Marcando como offline...
[TotemMonitor] Tótem LocalHost (ID: 100) marcado como offline.
[TotemMonitor] Se detectaron 1 tótems inactivos. Marcando como offline...
[TotemMonitor] Tótem LocalHost (ID: 100) marcado como offline.
[TotemMonitor] Se detectaron 1 tótems inactivos. Marcando como offline...
[TotemMonitor] Tótem LocalHost (ID: 100) marcado como offline.
[TotemMonitor] Se detectaron 1 tótems inactivos. Marcando como offline...
[TotemMonitor] Tótem LocalHost (ID: 100) marcado como offline.
[TotemMonitor] Se detectaron 1 tótems inactivos. Marcando como offline...
[TotemMonitor] Tótem LocalHost (ID: 100) marcado como offline.
[TotemMonitor] Se detectaron 1 tótems inactivos. Marcando como offline...
[TotemMonitor] Tótem LocalHost (ID: 100) marcado como offline.
```
</details>

<details><summary><b>Logs stdout: vpn (docker-vpn)</b></summary>

```text
2026-08-21T18:57:50.059Z WireGuard Config saved.
2026-08-21T18:57:50.059Z WireGuard Config syncing...
$ wg syncconf wg0 <(wg-quick strip wg0)
2026-08-21T18:57:50.095Z WireGuard Config synced.
2026-08-21T18:59:43.399Z WireGuard Config saving...
$ wg syncconf wg0 <(wg-quick strip wg0)
2026-08-21T18:59:43.400Z WireGuard Config saved.
2026-08-21T18:59:43.400Z WireGuard Config syncing...
2026-08-21T18:59:43.434Z WireGuard Config synced.
2026-09-03T14:22:30.244Z Server New Session: obN_cS8-lEPSY87H_i8A97ao5VAvpJJe
2026-09-03T14:22:42.005Z WireGuard Config saving...
2026-09-03T14:22:42.008Z WireGuard Config saved.
2026-09-03T14:22:42.008Z WireGuard Config syncing...
$ wg syncconf wg0 <(wg-quick strip wg0)
2026-09-03T14:22:42.050Z WireGuard Config synced.
```
</details>

<details><summary><b>Logs stdout: publicidad (backend-boletos-publicidad)</b></summary>

```text
'sec-websocket-key': 'mH7pvPkZjRLCKW3vovJO+g==',
  'cf-ray': 'a378386f9ba43ea7-GIG',
  'cdn-loop': 'cloudflare; loops=1',
  'cf-connecting-ip': '181.42.164.150',
  'cf-ipcountry': 'CL',
  'cf-visitor': '{"scheme":"https"}',
  'x-forwarded-proto': 'https',
  'accept-encoding': 'gzip, br',
  'x-forwarded-host': 'backend-boletos-publicidad.dev-wit.com',
  'x-forwarded-server': 'backend-boletos-publicidad.dev-wit.com',
  connection: 'Upgrade',
  upgrade: 'websocket'
}
GET / 200 0.238 ms - 85
GET / 200 0.236 ms - 85
```
</details>

<details><summary><b>Logs stdout: analitica (boletos-la-analitica)</b></summary>

```text
◇ injected env (8) from .env // tip: ⌘ multiple files { path: ['.env.local', '.env'] }
Tablas sincronizadas y conectado a MySQL
Servidor en http://localhost:3000
◇ injected env (8) from .env // tip: ◈ secrets for agents [www.dotenvx.com]
Tablas sincronizadas y conectado a MySQL
Servidor en http://localhost:3000
◇ injected env (8) from .env // tip: ⌘ multiple files { path: ['.env.local', '.env'] }
Tablas sincronizadas y conectado a MySQL
Servidor en http://localhost:3000
◇ injected env (8) from .env // tip: ⌘ multiple files { path: ['.env.local', '.env'] }
Tablas sincronizadas y conectado a MySQL
Servidor en http://localhost:3000
◇ injected env (8) from .env // tip: ◈ encrypted .env [www.dotenvx.com]
Tablas sincronizadas y conectado a MySQL
Servidor en http://localhost:3000
```
</details>

<details><summary><b>Logs stdout: itinerarios (backend-itinerarios)</b></summary>

```text
Executing (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2058' ORDER BY `Image`.`id` DESC LIMIT 3;
Executing (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '1646' ORDER BY `Image`.`id` DESC LIMIT 3;
Executing (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '1652' ORDER BY `Image`.`id` DESC LIMIT 3;
Executing (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2070' ORDER BY `Image`.`id` DESC LIMIT 3;
Executing (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '1646' ORDER BY `Image`.`id` DESC LIMIT 3;
Executing (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2058' ORDER BY `Image`.`id` DESC LIMIT 3;
Executing (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2013' ORDER BY `Image`.`id` DESC LIMIT 3;
Executing (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2058' ORDER BY `Image`.`id` DESC LIMIT 3;
Executing (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '1646' ORDER BY `Image`.`id` DESC LIMIT 3;
Executing (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '1652' ORDER BY `Image`.`id` DESC LIMIT 3;
Executing (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2070' ORDER BY `Image`.`id` DESC LIMIT 3;
Executing (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '1646' ORDER BY `Image`.`id` DESC LIMIT 3;
Executing (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2058' ORDER BY `Image`.`id` DESC LIMIT 3;
Executing (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2013' ORDER BY `Image`.`id` DESC LIMIT 3;
Executing (default): SELECT `id`, `url`, `cityId`, `title`, `comments`, `createdAt`, `updatedAt` FROM `Images` AS `Image` WHERE `Image`.`cityId` = '2058' ORDER BY `Image`.`id` DESC LIMIT 3;
```
</details>

## 6. 💻 Diagnostico de Recursos de Hardware
| Servicio | IP | Memoria RAM | Espacio en Disco | Carga CPU (Load) |
| :--- | :--- | :--- | :--- | :--- |
| **gds** | `34.236.254.39` | 842/3867MB (21.8%) | 3.5G/79G (5%) | `0.00, 0.00, 0.00` |
| **bancard** | `3.239.196.199` | 666/1941MB (34.3%) | 3.3G/59G (6%) | `0.03, 0.09, 0.04` |
| **pdf** | `32.197.199.197` | 987/1941MB (50.9%) | 24G/59G (42%) | `2.38, 2.62, 2.55` |
| **convenios** | `44.193.77.208` | 495/911MB (54.3%) | 3.2G/38G (9%) | `0.00, 0.03, 0.00` |
| **n8n** | `44.201.44.213` | 1198/1907MB (62.8%) | 11G/58G (19%) | `0.00, 0.00, 0.00` |
| **vpn** | `3.238.141.180` | 579/911MB (63.6%) | 3.5G/38G (10%) | `0.00, 0.00, 0.00` |
| **publicidad** | `44.245.217.130` | 450/945MB (47.6%) | 5.9G/40G (16%) | `0.00, 0.02, 0.00` |
| **analitica** | `16.59.46.45` | 677/1941MB (34.9%) | 4.0G/59G (7%) | `0.22, 0.06, 0.02` |
| **itinerarios** | `18.222.89.111` | 561/1941MB (28.9%) | 2.8G/59G (5%) | `0.13, 0.03, 0.01` |

---
*Generado automaticamente por `boletos-la-monitoreo` — Todos los derechos reservados © 2026 Boletos.la*