jerkjs 2.5.8 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +162 -99
- package/README.md +113 -190
- package/RESULTADOS_WAF.md +63 -0
- package/doc-2.5/MANUAL_MODULOS_ADMIN.md +287 -0
- package/doc-2.5/QUEUE_CLI_MODULE_MANUAL.md +289 -0
- package/doc-2.5/QUEUE_SYSTEM_MANUAL.md +320 -0
- package/doc-2.5/ROUTE_CACHE_MODULE_MANUAL.md +205 -0
- package/doc-2.5/WAF_MODULE_MANUAL.md +229 -0
- package/index.js +12 -3
- package/jerk-admin-client/README.md +69 -0
- package/jerk-admin-client/package.json +23 -0
- package/jerk-admin-client.js +257 -0
- package/lib/admin/AdminExtension.js +74 -19
- package/lib/admin/modules/ControllerGeneratorModule.js +414 -0
- package/lib/admin/modules/QueueManagementModule.js +265 -0
- package/lib/admin/modules/RouteCacheModule.js +227 -0
- package/lib/admin/modules/RouteManagerModule.js +468 -0
- package/lib/admin/modules/STATS_MODULE_README.md +15 -0
- package/lib/admin/modules/ViewCacheStatsModule.js +92 -0
- package/lib/admin/modules/WAFModule.js +737 -0
- package/lib/core/server.js +72 -69
- package/lib/middleware/firewall.js +112 -17
- package/lib/mvc/viewEngine.js +69 -10
- package/lib/queue/GlobalQueueStorage.js +38 -0
- package/lib/queue/QueueSystem.js +451 -0
- package/lib/queue/admin_example.js +114 -0
- package/lib/queue/example.js +268 -0
- package/lib/queue/integration.js +109 -0
- package/lib/utils/globalViewCacheInfo.js +16 -0
- package/lib/utils/globalWAFStats.js +54 -0
- package/package.json +2 -2
- package/test-colors.js +46 -0
- package/test-help-alias.js +31 -0
- package/ESTADISTICAS_RENDIMIENTO.md +0 -106
- package/debug_hook.js +0 -11
- package/docs/CACHE_SYSTEM_MAP.md +0 -206
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
# Manual de Uso del Sistema de Colas para el Framework JERK
|
|
2
|
+
|
|
3
|
+
## Tabla de Contenidos
|
|
4
|
+
1. [Introducción](#introducción)
|
|
5
|
+
2. [Características del Sistema de Colas](#características-del-sistema-de-colas)
|
|
6
|
+
3. [Instalación y Configuración](#instalación-y-configuración)
|
|
7
|
+
4. [Conceptos Básicos](#conceptos-básicos)
|
|
8
|
+
5. [Uso Básico](#uso-básico)
|
|
9
|
+
6. [Uso Avanzado](#uso-avanzado)
|
|
10
|
+
7. [Hooks Personalizados](#hooks-personalizados)
|
|
11
|
+
8. [Gestión de Errores y Reintentos](#gestión-de-errores-y-reintentos)
|
|
12
|
+
9. [Ejemplos de Uso](#ejemplos-de-uso)
|
|
13
|
+
|
|
14
|
+
## Introducción
|
|
15
|
+
|
|
16
|
+
El Sistema de Colas es una extensión del Framework JERK que permite la ejecución asíncrona de tareas en múltiples colas concurrentes. Este sistema es ideal para operaciones que consumen tiempo como procesamiento de imágenes, envío de correos electrónicos, procesamiento de pagos, y otras operaciones que no deben bloquear la respuesta inmediata a las solicitudes del usuario.
|
|
17
|
+
|
|
18
|
+
## Características del Sistema de Colas
|
|
19
|
+
|
|
20
|
+
- **Soporte para N colas**: Puedes crear tantas colas como necesites, cada una con su propia configuración.
|
|
21
|
+
- **Concurrencia configurable**: Controla cuántas tareas se ejecutan simultáneamente por cola.
|
|
22
|
+
- **Hooks personalizados**: Personaliza la lógica de procesamiento y fallback para cada cola.
|
|
23
|
+
- **Sistema de reintentos**: Manejo automático de fallos con reintentos configurables.
|
|
24
|
+
- **Gestión de prioridades**: Asigna prioridades a las tareas para determinar su orden de ejecución.
|
|
25
|
+
- **Sistema de fallback**: Manejo de tareas que fallan definitivamente.
|
|
26
|
+
- **Totalmente asíncrono**: No bloquea el hilo principal de ejecución.
|
|
27
|
+
|
|
28
|
+
## Instalación y Configuración
|
|
29
|
+
|
|
30
|
+
El Sistema de Colas ya está incluido en el Framework JERK a partir de la versión 2.6.0. Para usarlo:
|
|
31
|
+
|
|
32
|
+
```javascript
|
|
33
|
+
const { QueueIntegration } = require('jerkjs');
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Conceptos Básicos
|
|
37
|
+
|
|
38
|
+
### Cola
|
|
39
|
+
Una cola es una unidad lógica que agrupa tareas similares. Cada cola puede tener su propia configuración de concurrencia, reintentos y hooks personalizados.
|
|
40
|
+
|
|
41
|
+
### Tarea
|
|
42
|
+
Una tarea es una función que encapsula la lógica que se va a ejecutar en segundo plano. Las tareas pueden ser asíncronas y devolver Promises.
|
|
43
|
+
|
|
44
|
+
### Hook
|
|
45
|
+
Un hook es un punto de extensión que permite personalizar el comportamiento del sistema de colas, como la lógica de procesamiento de tareas o la lógica de fallback.
|
|
46
|
+
|
|
47
|
+
## Uso Básico
|
|
48
|
+
|
|
49
|
+
### 1. Crear una instancia del sistema de colas
|
|
50
|
+
|
|
51
|
+
```javascript
|
|
52
|
+
const { QueueIntegration } = require('jerkjs');
|
|
53
|
+
|
|
54
|
+
// Crear una instancia de la integración de colas
|
|
55
|
+
const queueIntegration = new QueueIntegration();
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 2. Crear una cola simple
|
|
59
|
+
|
|
60
|
+
```javascript
|
|
61
|
+
// Crear una cola con configuración por defecto
|
|
62
|
+
queueIntegration.createQueue('procesamiento-general', {
|
|
63
|
+
concurrency: 2, // Máximo 2 tareas ejecutándose simultáneamente
|
|
64
|
+
retryAttempts: 3, // Reintentar hasta 3 veces si falla
|
|
65
|
+
retryDelay: 1000 // Esperar 1 segundo entre reintentos
|
|
66
|
+
});
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 3. Agregar tareas a la cola
|
|
70
|
+
|
|
71
|
+
```javascript
|
|
72
|
+
// Función que representa una tarea
|
|
73
|
+
function procesarDatos(datos, taskObj) {
|
|
74
|
+
return new Promise((resolve, reject) => {
|
|
75
|
+
// Simular procesamiento
|
|
76
|
+
setTimeout(() => {
|
|
77
|
+
console.log(`Procesando datos:`, datos);
|
|
78
|
+
resolve('Procesamiento completado');
|
|
79
|
+
}, 2000);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Agregar una tarea a la cola
|
|
84
|
+
const taskId = queueIntegration.addTask(
|
|
85
|
+
'procesamiento-general', // Nombre de la cola
|
|
86
|
+
procesarDatos, // Función de la tarea
|
|
87
|
+
{ id: 1, nombre: 'dato1' }, // Datos para la tarea
|
|
88
|
+
0 // Prioridad (0 es la más alta)
|
|
89
|
+
);
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### 4. Iniciar el sistema de colas
|
|
93
|
+
|
|
94
|
+
```javascript
|
|
95
|
+
// Iniciar la ejecución de tareas
|
|
96
|
+
queueIntegration.start();
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Uso Avanzado
|
|
100
|
+
|
|
101
|
+
### Crear colas con hooks personalizados
|
|
102
|
+
|
|
103
|
+
```javascript
|
|
104
|
+
const { HookSystem } = require('jerkjs');
|
|
105
|
+
|
|
106
|
+
// Crear un sistema de hooks específico para esta cola
|
|
107
|
+
const procesamientoImagenesHooks = new HookSystem();
|
|
108
|
+
|
|
109
|
+
// Hook para personalizar la lógica de procesamiento
|
|
110
|
+
procesamientoImagenesHooks.addAction('queue_execute_task', (task, queueName, taskObj) => {
|
|
111
|
+
console.log(`Preparando para procesar imagen: ${taskObj.id}`);
|
|
112
|
+
|
|
113
|
+
// Envolver la tarea original con lógica adicional
|
|
114
|
+
const wrappedTask = async (datos, taskObj) => {
|
|
115
|
+
console.log(`Iniciando procesamiento de imagen: ${taskObj.id}`);
|
|
116
|
+
try {
|
|
117
|
+
const result = await task(datos, taskObj);
|
|
118
|
+
console.log(`Imagen procesada exitosamente: ${taskObj.id}`);
|
|
119
|
+
return result;
|
|
120
|
+
} catch (error) {
|
|
121
|
+
console.log(`Error procesando imagen: ${taskObj.id} - ${error.message}`);
|
|
122
|
+
throw error;
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
return wrappedTask;
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// Hook para manejar la lógica de fallback
|
|
130
|
+
procesamientoImagenesHooks.addAction('queue_task_fallback', (queueName, task, error) => {
|
|
131
|
+
console.log(`Ejecutando fallback para imagen:`, error.message);
|
|
132
|
+
// Lógica personalizada para manejar tareas que fallan definitivamente
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
// Crear la cola con hooks personalizados
|
|
136
|
+
queueIntegration.createQueue('imagenes', {
|
|
137
|
+
concurrency: 3,
|
|
138
|
+
retryAttempts: 2,
|
|
139
|
+
retryDelay: 1000
|
|
140
|
+
}, procesamientoImagenesHooks);
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Prioridades de tareas
|
|
144
|
+
|
|
145
|
+
Las tareas se pueden agregar con diferentes niveles de prioridad. Un valor más bajo indica una prioridad más alta:
|
|
146
|
+
|
|
147
|
+
```javascript
|
|
148
|
+
// Tarea de alta prioridad (prioridad 0)
|
|
149
|
+
queueIntegration.addTask('imagenes', procesarImagen, { archivo: 'importante.jpg' }, 0);
|
|
150
|
+
|
|
151
|
+
// Tarea de prioridad media (prioridad 5)
|
|
152
|
+
queueIntegration.addTask('imagenes', procesarImagen, { archivo: 'normal.jpg' }, 5);
|
|
153
|
+
|
|
154
|
+
// Tarea de baja prioridad (prioridad 10)
|
|
155
|
+
queueIntegration.addTask('imagenes', procesarImagen, { archivo: 'opcional.jpg' }, 10);
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Hooks Personalizados
|
|
159
|
+
|
|
160
|
+
El sistema de colas proporciona varios puntos de extensión a través de hooks:
|
|
161
|
+
|
|
162
|
+
### Hooks Disponibles
|
|
163
|
+
|
|
164
|
+
- `queue_execute_task`: Se ejecuta antes de procesar una tarea. Permite modificar la lógica de la tarea.
|
|
165
|
+
- `queue_task_completed`: Se ejecuta cuando una tarea se completa exitosamente.
|
|
166
|
+
- `queue_task_failed`: Se ejecuta cuando una tarea falla.
|
|
167
|
+
- `queue_task_retry`: Se ejecuta cuando una tarea se reintenta.
|
|
168
|
+
- `queue_task_fallback`: Se ejecuta cuando una tarea falla definitivamente después de todos los reintentos.
|
|
169
|
+
- `queue_task_added`: Se ejecuta cuando se agrega una tarea a la cola.
|
|
170
|
+
- `queue_system_started`: Se ejecuta cuando se inicia el sistema de colas.
|
|
171
|
+
- `queue_system_stopped`: Se ejecuta cuando se detiene el sistema de colas.
|
|
172
|
+
|
|
173
|
+
### Ejemplo de hook personalizado
|
|
174
|
+
|
|
175
|
+
```javascript
|
|
176
|
+
const misHooks = new HookSystem();
|
|
177
|
+
|
|
178
|
+
// Hook para registrar todas las tareas completadas
|
|
179
|
+
misHooks.addAction('queue_task_completed', (queueName, task) => {
|
|
180
|
+
console.log(`Tarea completada en cola ${queueName}:`, task.id);
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
// Hook para registrar errores
|
|
184
|
+
misHooks.addAction('queue_task_failed', (queueName, task, error) => {
|
|
185
|
+
console.log(`Tarea fallida en cola ${queueName}:`, task.id, error.message);
|
|
186
|
+
});
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Gestión de Errores y Reintentos
|
|
190
|
+
|
|
191
|
+
El sistema de colas incluye un mecanismo robusto para manejar errores:
|
|
192
|
+
|
|
193
|
+
### Configuración de reintentos
|
|
194
|
+
|
|
195
|
+
```javascript
|
|
196
|
+
queueIntegration.createQueue('procesamiento-confiable', {
|
|
197
|
+
retryAttempts: 5, // Número máximo de reintentos
|
|
198
|
+
retryDelay: 2000 // Milisegundos de espera entre reintentos
|
|
199
|
+
});
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Lógica de fallback
|
|
203
|
+
|
|
204
|
+
Cuando una tarea falla después de todos los reintentos, se ejecuta la lógica de fallback:
|
|
205
|
+
|
|
206
|
+
```javascript
|
|
207
|
+
const hooks = new HookSystem();
|
|
208
|
+
|
|
209
|
+
hooks.addAction('queue_task_fallback', (queueName, task, error) => {
|
|
210
|
+
// Aquí puedes implementar lógica personalizada para manejar tareas fallidas
|
|
211
|
+
console.log(`Tarea fallida definitivamente:`, task.id);
|
|
212
|
+
console.log(`Error:`, error.message);
|
|
213
|
+
|
|
214
|
+
// Por ejemplo, guardar en una base de datos para procesamiento manual
|
|
215
|
+
// o enviar una alerta al equipo de soporte
|
|
216
|
+
});
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Ejemplos de Uso
|
|
220
|
+
|
|
221
|
+
### Ejemplo completo: Procesamiento de imágenes
|
|
222
|
+
|
|
223
|
+
```javascript
|
|
224
|
+
const { QueueIntegration, HookSystem } = require('jerkjs');
|
|
225
|
+
|
|
226
|
+
// Crear instancia del sistema de colas
|
|
227
|
+
const queueIntegration = new QueueIntegration();
|
|
228
|
+
|
|
229
|
+
// Configurar cola de imágenes con hooks personalizados
|
|
230
|
+
const imagenHooks = new HookSystem();
|
|
231
|
+
|
|
232
|
+
imagenHooks.addAction('queue_execute_task', (task, queueName, taskObj) => {
|
|
233
|
+
console.log(`[IMAGEN] Preparando para procesar: ${taskObj.id}`);
|
|
234
|
+
return task;
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
imagenHooks.addAction('queue_task_fallback', (queueName, task, error) => {
|
|
238
|
+
console.log(`[IMAGEN] Error definitivo:`, error.message);
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
queueIntegration.createQueue('imagenes', {
|
|
242
|
+
concurrency: 3,
|
|
243
|
+
retryAttempts: 2,
|
|
244
|
+
retryDelay: 1000
|
|
245
|
+
}, imagenHooks);
|
|
246
|
+
|
|
247
|
+
// Función de tarea para procesamiento de imágenes
|
|
248
|
+
function procesarImagen(datos, taskObj) {
|
|
249
|
+
return new Promise((resolve, reject) => {
|
|
250
|
+
console.log(`[IMAGEN] Procesando: ${datos.nombreArchivo}`);
|
|
251
|
+
|
|
252
|
+
// Simular procesamiento
|
|
253
|
+
setTimeout(() => {
|
|
254
|
+
if (Math.random() < 0.2) { // 20% de fallos
|
|
255
|
+
reject(new Error(`Error procesando ${datos.nombreArchivo}`));
|
|
256
|
+
} else {
|
|
257
|
+
console.log(`[IMAGEN] Completado: ${datos.nombreArchivo}`);
|
|
258
|
+
resolve(`Imagen ${datos.nombreArchivo} procesada`);
|
|
259
|
+
}
|
|
260
|
+
}, 2000);
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Agregar tareas
|
|
265
|
+
for (let i = 0; i < 5; i++) {
|
|
266
|
+
queueIntegration.addTask('imagenes', procesarImagen, {
|
|
267
|
+
id: i,
|
|
268
|
+
nombreArchivo: `imagen_${i}.jpg`
|
|
269
|
+
}, i);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// Iniciar el sistema
|
|
273
|
+
queueIntegration.start();
|
|
274
|
+
|
|
275
|
+
// Verificar estado periódicamente
|
|
276
|
+
setInterval(() => {
|
|
277
|
+
console.log('Estado:', queueIntegration.getStatus());
|
|
278
|
+
}, 5000);
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Ejemplo: Envío de correos electrónicos
|
|
282
|
+
|
|
283
|
+
```javascript
|
|
284
|
+
// Cola para envío de correos
|
|
285
|
+
queueIntegration.createQueue('correos', {
|
|
286
|
+
concurrency: 2, // Máximo 2 envíos simultáneos
|
|
287
|
+
retryAttempts: 3, // Reintentar hasta 3 veces
|
|
288
|
+
retryDelay: 2000 // Esperar 2 segundos entre reintentos
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
function enviarCorreo(datos, taskObj) {
|
|
292
|
+
return new Promise((resolve, reject) => {
|
|
293
|
+
console.log(`Enviando correo a: ${datos.destinatario}`);
|
|
294
|
+
|
|
295
|
+
// Simular envío de correo
|
|
296
|
+
setTimeout(() => {
|
|
297
|
+
if (Math.random() < 0.15) { // 15% de fallos
|
|
298
|
+
reject(new Error(`Fallo al enviar correo a ${datos.destinatario}`));
|
|
299
|
+
} else {
|
|
300
|
+
console.log(`Correo enviado a: ${datos.destinatario}`);
|
|
301
|
+
resolve(`Correo enviado a ${datos.destinatario}`);
|
|
302
|
+
}
|
|
303
|
+
}, 1500);
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// Agregar tareas de correo
|
|
308
|
+
const destinatarios = ['usuario1@example.com', 'usuario2@example.com', 'usuario3@example.com'];
|
|
309
|
+
destinatarios.forEach((destinatario, index) => {
|
|
310
|
+
queueIntegration.addTask('correos', enviarCorreo, {
|
|
311
|
+
destinatario: destinatario,
|
|
312
|
+
asunto: 'Correo de prueba',
|
|
313
|
+
contenido: 'Contenido del correo'
|
|
314
|
+
}, index);
|
|
315
|
+
});
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
## Conclusión
|
|
319
|
+
|
|
320
|
+
El Sistema de Colas del Framework JERK proporciona una solución robusta y flexible para la ejecución asíncrona de tareas. Con soporte para múltiples colas, configuración de concurrencia, hooks personalizados y manejo de errores, es ideal para aplicaciones que requieren procesamiento en segundo plano sin bloquear la respuesta a las solicitudes del usuario.
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Manual del Módulo de Cache de Rutas para JERK Framework
|
|
2
|
+
|
|
3
|
+
## Tabla de Contenidos
|
|
4
|
+
1. [Introducción](#introducción)
|
|
5
|
+
2. [Comandos Disponibles](#comandos-disponibles)
|
|
6
|
+
3. [Uso Básico](#uso-básico)
|
|
7
|
+
4. [Uso Avanzado](#uso-avanzado)
|
|
8
|
+
5. [Ejemplos de Uso](#ejemplos-de-uso)
|
|
9
|
+
|
|
10
|
+
## Introducción
|
|
11
|
+
|
|
12
|
+
El módulo de Cache de Rutas es una extensión del sistema de administración CLI de JERK Framework que permite monitorear y gestionar el cache de rutas del sistema. Proporciona comandos para ver el estado del cache, visualizar su contenido, y limpiarlo cuando sea necesario.
|
|
13
|
+
|
|
14
|
+
## Comandos Disponibles
|
|
15
|
+
|
|
16
|
+
### Comandos Generales de Cache de Rutas
|
|
17
|
+
- `route-cache` o `cache-stats`: Muestra estadísticas del cache de rutas
|
|
18
|
+
- `cache-view`: Muestra el contenido completo del cache de rutas
|
|
19
|
+
- `cache-dynamic`: Muestra solo el cache de rutas dinámicas (parametrizadas)
|
|
20
|
+
- `cache-static`: Muestra solo el cache de rutas estáticas (exactas)
|
|
21
|
+
- `cache-clear`: Limpia todo el cache de rutas
|
|
22
|
+
|
|
23
|
+
## Uso Básico
|
|
24
|
+
|
|
25
|
+
### Conectar al Sistema de Administración
|
|
26
|
+
|
|
27
|
+
Para acceder al módulo de cache de rutas, primero debes conectarte al sistema de administración:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
telnet localhost 9999
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
O alternativamente:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
nc localhost 9999
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Ver estadísticas del cache de rutas
|
|
40
|
+
|
|
41
|
+
Comando: `route-cache` o `cache-stats`
|
|
42
|
+
|
|
43
|
+
Este comando muestra estadísticas generales del cache de rutas:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
> route-cache
|
|
47
|
+
|
|
48
|
+
=== Estadísticas del Cache de Rutas ===
|
|
49
|
+
Rutas dinámicas (parametrizadas) en cache: 5
|
|
50
|
+
Rutas estáticas exactas en cache: 10
|
|
51
|
+
Tamaño total de índices: 15
|
|
52
|
+
Índices válidos: Sí
|
|
53
|
+
|
|
54
|
+
>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Ver contenido del cache de rutas
|
|
58
|
+
|
|
59
|
+
Comando: `cache-view`
|
|
60
|
+
|
|
61
|
+
Este comando muestra el contenido completo del cache de rutas:
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
> cache-view
|
|
65
|
+
|
|
66
|
+
=== Contenido del Cache de Rutas ===
|
|
67
|
+
|
|
68
|
+
--- Rutas Dinámicas (Parametrizadas) en Cache ---
|
|
69
|
+
1. /users/:id -> /^\/users\/([^\/]+?)$/
|
|
70
|
+
2. /posts/:slug -> /^\/posts\/([^\/]+?)$/
|
|
71
|
+
|
|
72
|
+
--- Rutas Estáticas Exactas en Cache ---
|
|
73
|
+
1. GET /api/users -> anonymous
|
|
74
|
+
2. POST /api/users -> anonymous
|
|
75
|
+
|
|
76
|
+
>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Uso Avanzado
|
|
80
|
+
|
|
81
|
+
### Ver solo cache de rutas dinámicas
|
|
82
|
+
|
|
83
|
+
Comando: `cache-dynamic`
|
|
84
|
+
|
|
85
|
+
Muestra únicamente las rutas dinámicas (parametrizadas) en el cache:
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
> cache-dynamic
|
|
89
|
+
|
|
90
|
+
=== Cache de Rutas Dinámicas (Parametrizadas) ===
|
|
91
|
+
1. Ruta: /users/:id
|
|
92
|
+
Regex: /^\/users\/([^\/]+?)$/
|
|
93
|
+
|
|
94
|
+
2. Ruta: /posts/:slug
|
|
95
|
+
Regex: /^\/posts\/([^\/]+?)$/
|
|
96
|
+
|
|
97
|
+
Total: 2 rutas dinámicas en cache.
|
|
98
|
+
|
|
99
|
+
>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Ver solo cache de rutas estáticas
|
|
103
|
+
|
|
104
|
+
Comando: `cache-static`
|
|
105
|
+
|
|
106
|
+
Muestra únicamente las rutas estáticas (exactas) en el cache:
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
> cache-static
|
|
110
|
+
|
|
111
|
+
=== Cache de Rutas Estáticas (Exactas) ===
|
|
112
|
+
1. GET /api/users
|
|
113
|
+
Handler: anonymous
|
|
114
|
+
Static: true
|
|
115
|
+
|
|
116
|
+
2. POST /api/users
|
|
117
|
+
Handler: anonymous
|
|
118
|
+
Static: true
|
|
119
|
+
|
|
120
|
+
Total: 2 rutas estáticas en cache.
|
|
121
|
+
|
|
122
|
+
>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Limpiar el cache de rutas
|
|
126
|
+
|
|
127
|
+
Comando: `cache-clear`
|
|
128
|
+
|
|
129
|
+
Elimina todas las entradas del cache de rutas:
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
> cache-clear
|
|
133
|
+
|
|
134
|
+
=== Limpieza del Cache de Rutas ===
|
|
135
|
+
Rutas dinámicas eliminadas: 5
|
|
136
|
+
Rutas estáticas eliminadas: 10
|
|
137
|
+
Cache de rutas limpiado exitosamente.
|
|
138
|
+
|
|
139
|
+
>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Ejemplos de Uso
|
|
143
|
+
|
|
144
|
+
### Ejemplo 1: Diagnóstico de rendimiento
|
|
145
|
+
|
|
146
|
+
Para diagnosticar problemas de rendimiento relacionados con el cache de rutas:
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
> route-cache
|
|
150
|
+
Rutas dinámicas (parametrizadas) en cache: 50
|
|
151
|
+
Rutas estáticas exactas en cache: 100
|
|
152
|
+
Tamaño total de índices: 150
|
|
153
|
+
Índices válidos: Sí
|
|
154
|
+
|
|
155
|
+
> cache-dynamic
|
|
156
|
+
[Detalles de las 50 rutas dinámicas en cache]
|
|
157
|
+
>
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Ejemplo 2: Verificación de rutas parametrizadas
|
|
161
|
+
|
|
162
|
+
Para verificar específicamente las rutas parametrizadas en el cache:
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
> cache-dynamic
|
|
166
|
+
=== Cache de Rutas Dinámicas (Parametrizadas) ===
|
|
167
|
+
1. Ruta: /users/:id
|
|
168
|
+
Regex: /^\/users\/([^\/]+?)$/
|
|
169
|
+
|
|
170
|
+
2. Ruta: /products/:category/:id
|
|
171
|
+
Regex: /^\/products\/([^\/]+?)\/([^\/]+?)$/
|
|
172
|
+
|
|
173
|
+
Total: 2 rutas dinámicas en cache.
|
|
174
|
+
|
|
175
|
+
>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Solución de Problemas
|
|
179
|
+
|
|
180
|
+
### Problema: Comando no reconocido
|
|
181
|
+
|
|
182
|
+
**Síntoma**: El sistema responde con "Comando desconocido para el módulo de cache de rutas"
|
|
183
|
+
|
|
184
|
+
**Solución**: Verifica que estás usando uno de los comandos válidos: `route-cache`, `cache-stats`, `cache-view`, `cache-dynamic`, `cache-static`, `cache-clear`
|
|
185
|
+
|
|
186
|
+
### Problema: No se encuentra el componente RouteMatcher
|
|
187
|
+
|
|
188
|
+
**Síntoma**: El sistema responde con "No se encontró el componente RouteMatcher"
|
|
189
|
+
|
|
190
|
+
**Solución**: Asegúrate de que el servidor esté completamente iniciado y que el componente RouteMatcher haya sido correctamente instanciado.
|
|
191
|
+
|
|
192
|
+
## Compatibilidad
|
|
193
|
+
|
|
194
|
+
- **Versión mínima del framework**: JERK 2.5.8
|
|
195
|
+
- **Puerto de administración**: Por defecto 9999 (configurable)
|
|
196
|
+
- **Acceso**: Solo desde localhost por razones de seguridad
|
|
197
|
+
- **Protocolo**: Conexión TCP con interfaz de línea de comandos
|
|
198
|
+
|
|
199
|
+
## Autor
|
|
200
|
+
|
|
201
|
+
JERK Framework Team
|
|
202
|
+
|
|
203
|
+
## Versión
|
|
204
|
+
|
|
205
|
+
v2.6.0
|