DTIKC
Git
  1. Sistemas
DTIKC
  • Inicio
  • Modelo de Gestión
    • ITIL 4
    • Gestión por Procesos
    • LEAN, BPM & RAD
    • OKR
    • El Nuevo Paradigma de TI
  • Personas
    • Organigrama Funcional
    • Roles y Matriz RACI
      • Matriz RACI - Mesa de Ayuda (N1)
      • Matriz RACI - Soporte Técnico (N2)
      • Matriz RACI - Infraestructura (N3)
      • Matriz RACI Consolidada de la Dirección de Tecnología e Innovación
    • Descriptivos de Puestos
      • Indice
      • Developer RPA & IA con Python
      • Analista de Operaciones y Mesa de Ayuda N1
      • Especialista de Soporte Técnico Nivel 2
      • Senior de Infraestructura
        • Especialista Senior en Infraestructura N3
        • Especialista Junior en Infraestructura N3
    • Medición y Mejora Continua
      • OKRs Generales
      • OKRs Analista de Operaciones y Mesa de Ayuda N1
      • OKR Especialista de Soporte Técnico N2
  • Procesos de Sistemas
    • Indice
    • Proceso de Control de Versiones con Git
    • Proceso de Ejecución de Proyectos para Desarrolladores de Software
    • Procesos de Mesa de Ayuda N1
    • Procesos de Soporte Técnico N2
    • Procesos de Junior de Infraestructura
    • Procesos de Senior de Infraestructura
  • Especificaciones
    • Devs
      • Patrones de Nombrado (Naming Conventions) en Programación
  • Sistemas
    • Indice
    • Prometeo
    • Pegasus
    • Olympus
    • Andromeda
    • FrontBack
    • OServerLogic
    • CServer
    • FbCotizador
    • Oserver
    • MetCotizadores
    • ClassLibrary
    • APIs
      • Chatbase
      • ApiMetPro_Pendientes_Emitir_Get
    • App Services
      • Documento sin título
  • Manuales Usuarios
    • Procedimiento para Recuperar Contraseña de Acceso a Titan
    • Procedimiento de Alta de Agente IP en Keysi
    • Checklist Mantenimiento Soporte N2
    • Manual de Sistema de Gestión
  • Lineamientos y Politicas
    • Acta de Protocolo Home Office
    • Acta de Compromiso: Excelencia Operativa en la Dirección de Tecnologías e Innovación
    • Modelo de Atención Universal de Soporte Técnico Nivel 2
Git
  1. Sistemas

Oserver

DOCUMENTACION TECNICA - OServer#

1. INFORMACION GENERAL DEL PROYECTO#

Nombre del proyecto: OServer
Descripcion y proposito: Servicio de Windows para el procesamiento automatizado de trabajos de generacion de reportes Crystal Reports desde una base de datos SQL Server. El servicio mantiene un pool de threads que lee periodicamente trabajos pendientes de la base de datos y los ejecuta de manera asincrona.
Version del framework .NET utilizado: .NET Framework 4.0
Tipo de aplicacion: Servicio de Windows (Windows Service)
Version actual: 3.0.2 (segun log en codigo), Assembly Version: 1.0.0.1
Fecha de ultima modificacion del proyecto: Enero 31, 2025
Empresa: Grupo KC Agente de Seguros SAPI de CV
Copyright: Copyright Grupo KC 2024

2. MAPA DE SITIO / ESTRUCTURA DEL PROYECTO#

Estructura de la Solucion#

📁 OServer/
├── 📁 OServer/                          [Proyecto principal - Servicio Windows]
│   ├── 📁 My Project/
│   │   ├── 📄 Application.Designer.vb
│   │   ├── 📄 Application.myapp
│   │   ├── 📄 AssemblyInfo.vb          [Informacion del ensamblado]
│   │   ├── 📄 Resources.Designer.vb
│   │   ├── 📄 Resources.resx
│   │   ├── 📄 Settings.Designer.vb
│   │   ├── 📄 Settings.settings
│   │   └── 📄 app.manifest
│   ├── 📁 Connected Services/
│   ├── 📁 bin/                         [Binarios compilados]
│   │   ├── 📁 Debug/
│   │   ├── 📁 Release/
│   │   ├── 📁 x64/Release/
│   │   └── 📁 x86/Release/
│   ├── 📁 obj/                         [Archivos intermedios de compilacion]
│   ├── 📄 Service1.vb                  [Logica principal del servicio]
│   ├── 📄 Service1.Designer.vb
│   ├── 📄 Service1.resx
│   ├── 📄 ProjectInstaller.vb          [Instalador del servicio]
│   ├── 📄 ProjectInstaller.Designer.vb
│   ├── 📄 ProjectInstaller.resx
│   ├── 📄 Olympus.xsd                  [Esquema de dataset]
│   ├── 📄 Olympus.Designer.vb          [Dataset generado]
│   ├── 📄 Olympus.vb
│   ├── 📄 Olympus.xsc
│   ├── 📄 Olympus.xss
│   ├── 📄 OServer.vbproj              [Archivo de proyecto]
│   ├── 📄 OServer.vbproj.user
│   ├── 📄 app.config                  [Configuracion de la aplicacion]
│   ├── 📄 packages.config             [Paquetes NuGet]
│   └── 📄 OServerKey.pfx              [Certificado de firma]
├── 📁 InstaladorOServer/              [Proyecto instalador]
│   └── 📄 InstaladorOServer.vdproj
├── 📁 packages/                       [Paquetes NuGet]
├── 📄 OServer.sln                     [Archivo de solucion]
└── [Referencia Externa]
    └── 📁 ../../Prod/OServerLogic/    [Proyecto de logica de negocio]
        └── 📄 OServerLogic.vbproj

Organizacion de Namespaces#

OServer: Namespace principal del servicio
Service1: Clase principal del servicio Windows
ProjectInstaller: Instalador del servicio
Olympus: Dataset tipado para acceso a datos
OlympusTableAdapters: Adaptadores de tabla generados
OServerLogic (proyecto externo referenciado)
OServerLogic.Trabajo: Clase para procesamiento de trabajos
OServerLogic.Procesos: Procesos de negocio

Relaciones entre Proyectos#

3. INVENTARIO DE LIBRERIAS Y DEPENDENCIAS#

NuGet Packages#

LibreriaVersion ActualPropositoCategoria
CrystalReports.ReportAppServer.CommLayer13.0.4001Capa de comunicacion del servidor de reportes CrystalReporting
CrystalReports.ReportAppServer.CommonObjectModel13.0.4001Modelo de objetos comunes de Crystal ReportsReporting
CrystalReports.ReportAppServer.Controllers13.0.4001Controladores del servidor de aplicaciones de reportesReporting
CrystalReports.ReportAppServer.CubeDefModel13.0.4001Modelo de definicion de cubos OLAPReporting
CrystalReports.ReportAppServer.DataDefModel13.0.4001Modelo de definicion de datosReporting
CrystalReports.ReportAppServer.ReportDefModel13.0.4001Modelo de definicion de reportesReporting
log4net1.2.10Framework de logging (no utilizado actualmente)Logging

Referencias del Framework .NET#

EnsambladoProposito
SystemFuncionalidad base del framework
System.ConfigurationAcceso a archivos de configuracion
System.Configuration.InstallSoporte para instaladores
System.DataAcceso a datos ADO.NET
System.Data.DataSetExtensionsExtensiones LINQ to DataSet
System.DeploymentSoporte para ClickOnce deployment
System.ServiceProcessImplementacion de servicios Windows
System.Web.ExtensionsSerializacion JSON y servicios
System.Web.ServicesServicios web
System.Windows.FormsInterfaz de usuario (minima)
System.XmlProcesamiento XML

Dependencias de Crystal Reports (Runtime)#

CrystalDecisions.CrystalReports.Engine
CrystalDecisions.ReportAppServer.ClientDoc
CrystalDecisions.ReportAppServer.CommonControls
CrystalDecisions.ReportAppServer.DataSetConversion
CrystalDecisions.ReportAppServer.ObjectFactory
CrystalDecisions.ReportAppServer.Prompting
CrystalDecisions.ReportAppServer.XmlSerialize
CrystalDecisions.ReportSource
CrystalDecisions.Shared

4. ARQUITECTURA DEL PROYECTO#

4.1 Patron Arquitectonico#

El proyecto implementa una arquitectura de servicios en N-Capas combinada con el patron Producer-Consumer:
Capa de Servicio: Service1.vb actua como orquestador principal
Capa de Logica de Negocio: OServerLogic (proyecto separado)
Capa de Acceso a Datos: Dataset tipado (Olympus) con TableAdapters
Capa de Persistencia: SQL Server
Patron Producer-Consumer:
Producer: Timer que lee trabajos de la BD cada segundo
Consumer: ThreadPool con 10 workers que procesan trabajos

4.2 Diagrama de Arquitectura#

4.3 Componentes Principales#

Capa de Servicio (OServer)#

Service1.vb: Clase principal del servicio Windows
Inicializa el ThreadPool (10 threads max)
Configura timer de polling (1 segundo)
Coordina la lectura y encolamiento de trabajos
Ejecuta tarea diaria programada
Implementa sistema de logging thread-safe
ProjectInstaller.vb: Instalador del servicio Windows
Configura el servicio para instalacion en el sistema
Olympus Dataset: Dataset tipado generado desde el esquema XSD
ListarTrabajosTableAdapter: Lee trabajos nuevos pendientes
TrabajosTableAdapter: Opera sobre registros individuales de trabajos

Capa de Logica de Negocio (OServerLogic - Proyecto Externo)#

OServerLogic.Trabajo: Clase que encapsula la logica de procesamiento
Tipos de trabajo soportados (enum Tipo)
Estados de trabajo (enum Status): En_Proceso, Procesado, Falla
Metodo EjecutaEnLinea(): Ejecuta el trabajo segun su tipo
Metodo ParseParameters(): Parsea parametros del trabajo
OServerLogic.Procesos: Procesos de negocio
ActualizaProduccion(): Tarea diaria para actualizar tablas

Servicios Externos#

SQL Server: Base de datos olympus_op_pr en servidor sql.prod
Crystal Reports: Motor de generacion de reportes
Sistema de Archivos: Directorios de salida para PDFs

4.4 Flujo de Datos#

5. ASPECTOS MAS RELEVANTES#

5.1 Funcionalidades Principales#

1.
Procesamiento Asincrono de Trabajos
Pool de 10 threads concurrentes
Polling cada 1 segundo para nuevos trabajos
Procesamiento paralelo de multiples trabajos
2.
Generacion de Reportes Crystal Reports
Soporte para diferentes tipos de reportes
Generacion de archivos PDF
Parametrizacion de reportes
3.
Gestion de Estados de Trabajos
Pendiente (inicial)
En_Proceso (durante ejecucion)
Procesado (exitoso)
Falla (error)
4.
Tarea Programada Diaria
Ejecuta ActualizaProduccion() a hora configurable
Optimizacion de tablas para self-service
5.
Sistema de Logging
Thread-safe mediante SyncLock
Registro con timestamp
Seguimiento de inicio/fin de trabajos
Captura de excepciones
6.
Doble Salida de PDFs
Salida estandar (aplicacion web)
Salida self-service (para agentes)
7.
Manejo Robusto de Errores
Try-Catch en operaciones criticas
Actualizacion de estado a Falla en caso de error
Logging detallado de excepciones

5.2 Configuraciones Criticas#

Connection Strings (app.config:7-11)#

<add name="OServer.My.MySettings.olympusConnectionString"
     connectionString="Data Source=sql.prod;
                      Initial Catalog=olympus_op_pr;
                      Persist Security Info=True;
                      User ID=olympus_oserver;
                      Password=ycQuwJofM3PRGAXzsfGWM-e.Q_h6;
                      Connect Timeout=0"
     providerName="System.Data.SqlClient" />
NOTA DE SEGURIDAD: La cadena de conexion contiene credenciales en texto plano. Se recomienda usar cifrado de configuracion.

App Settings (app.config:33-39)#

ClaveValorProposito
outputF:\Olympus\PDF\Directorio para PDFs generados (aplicacion web)
selfF:\Olympus\PDF\Directorio para PDFs self-service
reportesG:\Prod\OServerLogic\reportes\Ubicacion de archivos .RPT
logc:\oserver.logRuta del archivo de log
hora00:00:00Hora de ejecucion de tarea diaria

Configuracion de Logging (app.config:13-31)#

Nivel: Information
Tipo: FileLogTraceListener
Ubicacion: Definida en appSettings["log"]

5.3 Patrones de Diseno Implementados#

1.
Service Pattern
Implementacion como servicio Windows de larga duracion
2.
Producer-Consumer Pattern
Timer como productor de trabajos
ThreadPool como consumidor
3.
Repository Pattern (via TableAdapters)
Abstraccion del acceso a datos
Operaciones CRUD sobre trabajos
4.
Factory Pattern (implicito)
Creacion de objetos Trabajo segun tipo
5.
Singleton Pattern (implicito en Service)
Una instancia del servicio por sistema
6.
Template Method Pattern
Flujo de trabajo definido, tipo especifico ejecuta logica
7.
Locking Pattern
SyncLock para escritura thread-safe en log (Service1.vb:189)

5.4 Seguridad#

Autenticacion#

Base de Datos: Autenticacion SQL Server con usuario/contraseña
Usuario: olympus_oserver
VULNERABILIDAD: Credenciales en texto plano en app.config

Autorizacion#

No implementada: El servicio corre con la cuenta configurada en Windows
Recomendacion: Usar cuenta de servicio con minimos privilegios

Protecciones Implementadas#

Firma de Ensamblado: Configurado con OServerKey.pfx (delayed signing)
SignAssembly=false (OServer.vbproj:105)
DelaySign=true (OServer.vbproj:111)

Vulnerabilidades Identificadas#

1.
Credenciales en texto plano en app.config
2.
Sin validacion de entrada en parametros de trabajos (posible SQL injection si OServerLogic no valida)
3.
Sin cifrado de comunicacion con BD
4.
Timeout de conexion en 0 (sin limite) puede causar problemas de rendimiento
5.
Sin autenticacion/autorizacion en creacion de trabajos en BD

6. ANALISIS DE VERSIONES Y COMPATIBILIDAD#

Framework .NET#

Version actual: .NET Framework 4.0
Fecha de lanzamiento: Abril 12, 2010
Fecha de fin de soporte: Enero 12, 2016
Estado: ❌ OBSOLETO - Fuera de soporte desde hace 9 años

Compatibilidad C##

Version del lenguaje: Visual Basic 10.0 (correspondiente a .NET 4.0)
Caracteristicas utilizadas:
Imports
Generics
Delegates y AddressOf
Lambda expressions (AddressOf)
LINQ (System.Data.DataSetExtensions)
Nullable types (IsNull checks)

Compatibilidad de Sistema Operativo#

Plataformas soportadas para .NET 4.0:
Windows 7 / Server 2008 R2 y anteriores
NO soportado en Windows 11 de forma nativa
NO soportado en Windows Server 2022

Compatibilidad de SQL Server#

Version minima: SQL Server 2000
Compatibilidad: Todas las versiones hasta SQL Server 2025

7. RECOMENDACIONES DE ACTUALIZACION#

7.1 Prioridad Alta (Critica) 🔴#

ComponenteVersion ActualVersion RecomendadaMotivoEsfuerzo
.NET Framework4.0.NET 8.0 (LTS) o .NET 9.0Framework obsoleto sin soporte, vulnerabilidades de seguridad, incompatibilidad con Windows modernosAlto
log4net1.2.102.0.17Version muy antigua (2010), multiples vulnerabilidades CVEBajo
CrystalReports13.0.4001 (2015)Migrar a alternativa modernaProducto descontinuado, sin soporte, problemas de licenciamientoMuy Alto
Visual BasicVB.NET (Framework)Migrar a C# .NETVB.NET no soportado en .NET Core/.NET 5+Muy Alto

7.2 Prioridad Media 🟡#

AspectoSituacion ActualRecomendacionBeneficioEsfuerzo
ArquitecturaServicio WindowsMigrar a Worker Service (.NET) o Azure FunctionsModernizacion, cloud-ready, mejor observabilidadAlto
LoggingLogging custom a archivoImplementar Serilog o NLog con sinks estructuradosLogging estructurado, mejor observabilidadMedio
Configuracionapp.config XMLappsettings.json + Azure Key Vault/Variables de entornoSeguridad (credenciales), flexibilidadMedio
Base de DatosDataSet tipadoEntity Framework Core + Repository patternMejor mantenibilidad, LINQ, migracionesAlto
ConcurrenciaThreadPool manualBackgroundService + Channels o TPL DataflowMejor control, cancelacion, backpressureMedio

7.3 Prioridad Baja 🟢#

AspectoSituacion ActualRecomendacionBeneficioEsfuerzo
DeploymentClickOnce + InstaladorDocker + Kubernetes o Azure App ServicePortabilidad, escalabilidadAlto
MonitoreoSolo logs en archivoApplication Insights o PrometheusMetricas, alertas, trazabilidadMedio
TestingSin testsImplementar unit tests + integration testsCalidad, regresionesAlto
CI/CDManualGitHub Actions / Azure DevOpsAutomatizacion, calidadMedio

7.4 Roadmap de Actualizacion Recomendado#

7.5 Plan de Migracion Detallado#

Fase 1: Estabilizacion (1-2 meses)#

1.
Actualizar a .NET Framework 4.8 (ultima version con soporte)
Cambiar TargetFramework en .vbproj
Probar exhaustivamente
Beneficio: Soporte hasta 2028, mejoras de rendimiento
2.
Actualizar log4net a 2.0.17
Actualizar paquete NuGet
Verificar configuracion
Beneficio: Parches de seguridad
3.
Implementar cifrado de cadenas de conexion

Fase 2: Modernizacion Core (3-6 meses)#

1.
Migrar a .NET 8.0 Worker Service
Crear nuevo proyecto .NET 8.0
Migrar logica de negocio
Reescribir Service1 como BackgroundService
Usar IHostedService
2.
Alternativas a Crystal Reports
FastReport.NET: Moderno, compatible con .NET Core
Telerik Reporting: Excelente soporte
SSRS (SQL Server Reporting Services): Si ya tienen SQL Server
QuestPDF: Open source, programatico
3.
Migrar de VB.NET a C#
Usar herramientas automaticas (Telerik Code Converter, SharpDevelop)
Revision y refactoring manual
Adoptar convenciones C# modernas

Fase 3: Arquitectura Moderna (6-9 meses)#

1.
Reemplazar DataSet con EF Core
2.
Implementar Channels para Producer-Consumer
3.
Implementar Serilog

Fase 4: Cloud-Native (9-12 meses)#

1.
Containerizacion
2.
Deployment Options
Azure Container Apps: Serverless, auto-scaling
Azure App Service: Managed, facil
Azure Kubernetes Service: Control total, escalabilidad
3.
Configuracion Cloud-Native
Azure Key Vault para secretos
Azure App Configuration para settings
Application Insights para observabilidad

8. METRICAS DEL PROYECTO#

Estadisticas de Codigo#

Estado de Dependencias#

Cobertura de Testing#

Nota: El proyecto actualmente no tiene tests unitarios ni de integracion.

Complejidad de Migracion#

9. DEUDA TECNICA IDENTIFICADA#

Issues Criticos 🔴#

Framework .NET obsoleto: .NET Framework 4.0 sin soporte desde 2016
Credenciales en texto plano: Connection string con password visible en app.config
Sin manejo de secretos: No usa Azure Key Vault, variables de entorno, o cifrado
Dependencia Crystal Reports: Producto descontinuado, problemas de licenciamiento
Sin tests: 0% cobertura de tests unitarios e integracion
Sin validacion de entrada: Parametros de trabajos no validados (riesgo de inyeccion)
Timeout de BD en 0: Puede causar bloqueos indefinidos

Issues Importantes 🟡#

Logging primitivo: Sistema de logging custom en lugar de framework moderno
Sin observabilidad: No hay metricas, trazas distribuidas, o health checks
Polling cada 1 segundo: Ineficiente, considerar SignalR o Service Broker
ThreadPool manual: Usar BackgroundService + Channels seria mas moderno
DataSet tipado: Tecnologia legacy, dificil de mantener
Sin manejo de reintentos: Trabajos fallidos no se reintentan automaticamente
Sin circuit breaker: Fallos en BD pueden colapsar el sistema
Deployment manual: Sin CI/CD automatizado

Mejoras Recomendadas 🟢#

Implementar health checks: Para monitoreo proactivo
Agregar metricas: Prometheus/Application Insights
Implementar cancellation tokens: Para shutdown graceful
Structured logging: JSON logs con contexto
Configuracion por ambiente: Dev/QA/Prod
Rate limiting: Evitar sobrecarga del sistema
Dead letter queue: Para trabajos fallidos persistentes
Telemetria: Rastreo de rendimiento de trabajos
Documentacion: Swagger/OpenAPI si se expone API

Refactorings Sugeridos#

1.
Separar responsabilidades: Service1 hace demasiado (polling, logging, orquestacion)
Crear ITrabajoRepository
Crear IReporteService
Crear INotificationService
2.
Inyeccion de dependencias: Usar DI container
3.
Configuracion tipada: En lugar de ConfigurationManager.AppSettings
4.
Async/Await: Todo el procesamiento deberia ser asincrono

10. GLOSARIO TECNICO#

TerminoDefinicion
OServerServicio de Windows que procesa trabajos de generacion de reportes
OlympusNombre de la base de datos SQL Server utilizada por el sistema
TrabajoUnidad de procesamiento que representa una solicitud de generacion de reporte
id_trabajoIdentificador unico de un trabajo en la base de datos
ThreadPoolPool de threads del framework .NET usado para procesamiento paralelo
TableAdapterComponente de ADO.NET que encapsula operaciones de base de datos
Dataset TipadoRepresentacion en memoria de datos con fuerte tipado generada desde esquema XSD
Self-ServicePortal de agentes que genera reportes de forma automatica
RPTExtension de archivos de Crystal Reports (Report Template)
StatusEstado de un trabajo: Pendiente, En_Proceso, Procesado, Falla
PollingTecnica de consulta periodica a la BD en busca de nuevos trabajos
Producer-ConsumerPatron de diseño donde un componente produce trabajos y otros los consumen

NOTAS ADICIONALES#

Consideraciones de Produccion#

1.
Monitoreo Actual
El unico monitoreo es el archivo de log c:\oserver.log
No hay alertas automaticas en caso de falla
Recomendacion: Implementar Application Insights o ELK stack
2.
Escalabilidad
Limitado a 10 threads concurrentes (hardcoded)
No escala horizontalmente (single instance)
Recomendacion: Parametrizar threads, considerar multiples instancias con coordinator
3.
Disponibilidad
Sin mecanismo de health check
Sin auto-recuperacion si el servicio cae
Recomendacion: Windows Service Recovery settings + external monitoring
4.
Rendimiento
Polling cada 1 segundo puede ser ineficiente con pocas cargas
Connect Timeout=0 puede causar esperas infinitas
Recomendacion: Implementar backoff exponencial o notificaciones push

Riesgos Identificados#

RiesgoImpactoProbabilidadMitigacion
Framework sin soporteAltoAltaMigrar a .NET 8.0
Credenciales expuestasCriticoMediaCifrar config / usar Key Vault
Crystal Reports EOLAltoAltaMigrar a alternativa moderna
Sin testsAltoAltaImplementar suite de tests
Single point of failureMedioMediaAlta disponibilidad / replicas
Sin versionado semanticoBajoBajaImplementar GitFlow + SemVer

Mejores Practicas Recomendadas#

1.
Seguridad
Implementar principio de minimos privilegios para cuenta de servicio
Usar Azure Key Vault o equivalente para secretos
Cifrar comunicacion con BD (SSL/TLS)
Implementar auditing de operaciones criticas
2.
Operaciones
Structured logging con correlation IDs
Metricas de negocio (trabajos/minuto, tiempo promedio, tasa de falla)
Alertas proactivas (trabajo atascado >5 min, pool saturado)
Runbooks para escenarios comunes de fallo
3.
Desarrollo
Implementar Git con feature branches
Code reviews obligatorios
CI/CD con gates de calidad (tests, code coverage, security scan)
Versionado semantico

Documentacion generada: 2025-12-13
Analizado por: Claude AI (Sonnet 4.5)
Version del documento: 1.0
Proyecto analizado: OServer v3.0.2
Framework: .NET Framework 4.0
Lenguaje: Visual Basic .NET
Modificado en 2025-12-14 00:03:40
Anterior
FbCotizador
Siguiente
MetCotizadores
Built with