Arquitectura
Esta guía describe los componentes de OmniRoam, el flujo de datos de extremo a extremo y los sistemas externos con los que OmniRoam se integra.
Tabla de Contenidos
Descripción del Componente
OmniRoam tiene dos partes. Un conjunto de herramientas de Python ingesta y califica CDRs. Una aplicación de Elixir genera archivos TAP, procesa archivos RAP y sirve la API y métricas.
Ingesta y calificación (Python)
Estas herramientas se ejecutan como trabajos programados. No se ejecutan como servicios de larga duración.
- Importador de OmniCore - Lee archivos CSV de la puerta de enlace de servicio de OmniCore, correlaciona los registros parciales en sesiones de datos completas y escribe las sesiones en Redis.
- Importador ASN.1 - Convierte archivos CDR ASN.1 de 3GPP a XML y los importa.
- Importador de Redis - Drena la cola de Redis, aplica filtros de edad, redondea el uso y envía cada registro al Motor de Cálculo para su calificación.
- Proveedor de Calificación - Carga los planes de tarifas por socio en el Motor de Cálculo desde
config.yaml.
Aplicación OmniRoam (Elixir)
La aplicación OmniRoam se ejecuta como un servicio systemd. Inicia un conjunto supervisado de procesos.
| Proceso | Rol |
|---|---|
| Índice de Archivos | Almacena en caché los metadatos de archivos TAP y RAP analizados para una lista rápida. |
| Cache de Totales | Almacena en caché los totales mensuales y diarios por socio. |
| Recolector de Métricas | Construye la instantánea de métricas de Prometheus en segundo plano. |
| Cola de Trabajo | Ejecuta una exportación TAP a la vez. |
| Programador | Inicia la exportación diaria a la hora configurada. |
| API OmniRoam | Sirve la API HTTP en el puerto 4000. |
| Monitor RAP | Escanea nuevos archivos RAP y envía alertas. |
| Secuencia | Reserva números de secuencia de archivos TAP y escribe counters.yaml. |
| Limpiador de Espacios | Limpia espacios sobrantes de los campos CDR calificados en la base de datos. |
El Generador TAP lee CDRs calificados, mapea cada CDR a un registro TAP, ensambla el lote, codifica el lote como un archivo TAP binario y marca los CDRs como procesados. Consulte Generación de Archivos TAP para más detalles.
Interfaz web
La interfaz web es una aplicación de una sola página de React. Se sirve como contenido estático por nginx. La interfaz web llama a la API OmniRoam en el puerto 4000.
Registrador
El registrador es un conector saliente opcional. El registrador abre un WebSocket a un sistema de gestión y reenvía las solicitudes de ese sistema a la API local de OmniRoam. Utilice el registrador para acceder a la API desde detrás de NAT sin un puerto de entrada.
Paquetes Desplegables
OmniRoam se envía como un conjunto de paquetes Debian. El meta-paquete omniroam depende de los paquetes de componentes y bloquea sus versiones juntas.
| Paquete | Contenidos | Tiempo de Ejecución |
|---|---|---|
omniroam | Meta-paquete. Depende de los paquetes de componentes. | Ninguno. |
omniroam-api | La versión de la aplicación Elixir. | servicio systemd en el puerto 4000, usuario omniroam. |
omniroam-generator | Las herramientas de ingesta y calificación de Python más la configuración. | Sin servicio. Ejecutado por cron o manualmente. |
omniroam-ui | La interfaz web estática y el sitio nginx. | nginx en el puerto 80. |
omniroam-registrar | El conector registrador saliente. | servicio systemd. |
Flujo de Datos
Un CDR viaja a través de cuatro etapas: ingesta y calificación, generación de archivos TAP, transferencia de archivos y devolución de RAP.
Ingesta y calificación
Dos fuentes de CDR alimentan una sola tubería.
- Puertas de servicio de OmniCore envían archivos CDR CSV. Los archivos llegan por rsync o mediante una carga HTTP a la API. OmniRoam escribe los archivos en un directorio local.
- Fuentes de CDR ASN.1 de 3GPP proporcionan archivos CDR ASN.1. OmniRoam extrae los archivos y los convierte a XML.
- El importador correlaciona los registros parciales, escribe sesiones de datos completas en Redis y luego drena Redis hacia el Motor de Cálculo para su calificación.
Los CDRs calificados se almacenan en la base de datos del Motor de Cálculo (la tabla CDR). Cada CDR lleva un marcador hasBeenProcessed. Un valor de False significa que el CDR aún necesita un archivo TAP. Consulte Procesamiento de CDR para más detalles sobre la ingesta y calificación.
Generación de archivos TAP
El programador o una solicitud de API encola un trabajo de exportación. La cola de trabajos ejecuta una exportación a la vez. El generador lee los CDRs no procesados para el socio, comenzando por el más antiguo, y escribe uno o más archivos TAP. Luego, el generador marca los CDRs como procesados y registra el número de secuencia del archivo. Consulte Generación de Archivos TAP.
Transferencia de archivos
Cuando la cola de trabajos se drena, OmniRoam ejecuta el comando de carga. El comando de carga envía los nuevos archivos TAP a la cámara de compensación. Un trabajo de extracción separado recupera archivos TAP y RAP entrantes. Consulte la Guía de Operaciones para los trabajos de transferencia.
Devolución de RAP
El socio valida cada archivo TAP. Si el socio rechaza registros, el socio devuelve un archivo RAP. El trabajo de extracción coloca el archivo RAP en el directorio de entrada. El monitor RAP escanea el directorio, lee cada nuevo archivo RAP y envía una alerta por correo electrónico. Consulte Procesamiento de RAP.
Puntos de Integración
| Sistema | Protocolo | Propósito |
|---|---|---|
| Redis | Redis en localhost | Cola de CDRs parciales y correlacionados antes de la calificación. |
| Motor de Cálculo | JSON-RPC en el puerto 2080 | Califica CDRs y devuelve el costo. |
| Base de datos CDR | Base de datos en el puerto 3306 | Almacena CDRs calificados y los marca como procesados. |
| InfluxDB | API HTTP | Almacena análisis de uso y exportación. |
| Cámara de Compensación | SCP | Envía archivos TAP y extrae archivos TAP y RAP entrantes. |
| Proveedor de correo electrónico | HTTPS | Envía correo electrónico de alerta RAP. |
| Prometheus | HTTP scrape en /api/metrics | Recoge métricas de OmniRoam. |
Consulte la Referencia de API HTTP para los puntos finales, y la Referencia de Configuración para la configuración de conexión.