Saltar al contenido principal

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.

ProcesoRol
Índice de ArchivosAlmacena en caché los metadatos de archivos TAP y RAP analizados para una lista rápida.
Cache de TotalesAlmacena en caché los totales mensuales y diarios por socio.
Recolector de MétricasConstruye la instantánea de métricas de Prometheus en segundo plano.
Cola de TrabajoEjecuta una exportación TAP a la vez.
ProgramadorInicia la exportación diaria a la hora configurada.
API OmniRoamSirve la API HTTP en el puerto 4000.
Monitor RAPEscanea nuevos archivos RAP y envía alertas.
SecuenciaReserva números de secuencia de archivos TAP y escribe counters.yaml.
Limpiador de EspaciosLimpia 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.

PaqueteContenidosTiempo de Ejecución
omniroamMeta-paquete. Depende de los paquetes de componentes.Ninguno.
omniroam-apiLa versión de la aplicación Elixir.servicio systemd en el puerto 4000, usuario omniroam.
omniroam-generatorLas herramientas de ingesta y calificación de Python más la configuración.Sin servicio. Ejecutado por cron o manualmente.
omniroam-uiLa interfaz web estática y el sitio nginx.nginx en el puerto 80.
omniroam-registrarEl 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.

  1. 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.
  2. Fuentes de CDR ASN.1 de 3GPP proporcionan archivos CDR ASN.1. OmniRoam extrae los archivos y los convierte a XML.
  3. 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

SistemaProtocoloPropósito
RedisRedis en localhostCola de CDRs parciales y correlacionados antes de la calificación.
Motor de CálculoJSON-RPC en el puerto 2080Califica CDRs y devuelve el costo.
Base de datos CDRBase de datos en el puerto 3306Almacena CDRs calificados y los marca como procesados.
InfluxDBAPI HTTPAlmacena análisis de uso y exportación.
Cámara de CompensaciónSCPEnvía archivos TAP y extrae archivos TAP y RAP entrantes.
Proveedor de correo electrónicoHTTPSEnvía correo electrónico de alerta RAP.
PrometheusHTTP scrape en /api/metricsRecoge 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.