Aplicación de contabilidad de comunicación de código abierto en la región.

Recientemente, publicamos una aplicación para contabilizar las comunicaciones en la región bajo la licencia gratuita de Apache 2.0. implementado en IONDV. Framework: solución de código abierto basada en node.js para el rápido desarrollo de aplicaciones web. La comunicación en las regiones es una condición importante para el desarrollo del territorio y la vida cómoda. Será un ejemplo basado en el territorio de Khabarovsk. Y aunque nuestro territorio es comparable con España y Portugal combinados, permanecerá en toda la región del Báltico (no bromearemos sobre los osos en las calles de Khabarovsk, usted mismo encontrará videos en Youtube), pero aún no tenemos comunicaciones celulares e Internet. en áreas remotas pobladas de la región, o su calidad deja mucho que desear. La aplicación es aplicable en cualquier lugar y está disponible para su uso sin restricciones.


¿Cómo analizar el estado actual de la comunicación? ¿Cómo entender rápidamente las áreas problemáticas? ¿Cómo planificar el desarrollo posterior de las comunicaciones en la región? Crear una solución de tipo registro para mantener la información de la industria, preparar informes analíticos sobre su base y formular planes de desarrollo.



Aplicación web de comunicación


IONDV. Telecom, o como lo llamamos en equipo, Communication es una solución de software basada en IONDV. Marco , implementado para organizar, registrar, almacenar y mostrar datos sobre la disponibilidad de servicios de comunicación (Internet, comunicaciones móviles, televisión, correo, etc.) en las áreas pobladas de la región, incluida la disponibilidad de comunicaciones en las instalaciones de los sectores de Salud, Educación. La aplicación está disponible públicamente en GitHub . Tradicionalmente, para todos los repositorios en github hay una instrucción en el repositorio README, pero implementamos sistemas de demostración para su revisión, sin registrarse: https://telecom-ru.iondv.com .


También puede ver una breve toma de video solo en esta demostración.


Algunos detalles técnicos

La demostración se implementa en el servidor con 2 núcleos de CPU y 2 GB de memoria en la nube Yandex. Y en esta máquina virtual hay docenas de tales aplicaciones de demostración. Probamos un sistema similar en el mismo recurso en otro artículo: "Experiencia en llevar la implementación de software del proyecto social" Remember Everyone "a código abierto
" Https://habr.com/en/post/451092/ - recibió hasta 400 solicitudes por segundo. El sistema de comunicación tiene más metadatos: hasta 3-4 niveles de profundidad.
Por ejemplo, un objeto de comunicación tiene 10 entidades relacionadas (celular, Internet, correo, televisión, etc.). Cada uno de los cuales es 3-5 más: para la comunicación celular es un estándar, tipo de conexión, operador, establecimiento, etc. Y el operador también tiene anidamiento.


Pero incluso en estos recursos, se comporta de manera bastante receptiva, aunque MongoDb no es muy bueno para obtener datos relacionados. Tomamos las métricas: para obtener 10 objetos en la lista (en la que se mostraban los datos, incluidos los datos relacionados), se realizaron hasta 1000-1500 consultas a la base de datos. Al mismo tiempo, el tiempo estándar para el usuario en el navegador es de alrededor de 600-700 ms.


Sobre el desarrollo de la aplicación de Comunicación en la plataforma IONDV. Marco


La aplicación se basa en la tecnología IONDV. Marco Este es el marco de código abierto de node.js para crear aplicaciones web basadas en metadatos de alto nivel, que no requiere habilidades de programación serias. El núcleo del marco es un modelo de datos independiente, API de kernel, módulos de funciones y plantillas de presentación. MongoDb se utiliza para el DBMS: almacena la configuración de la aplicación, los metadatos y los datos en sí. El marco se ejecuta en Node.js. Todos juntos proporcionan un marco multiplataforma.

Por cierto, esta aplicación es clave para el marco: comenzó la explotación productiva de la nueva versión en node.js usando mongoDB. En total, el desarrollo de los componentes del marco para el proyecto (geomódulo, refinamiento del módulo de informe) y los metadatos de la aplicación tomó 2643 horas.


Un poco sobre el principio de crear una aplicación en el marco. Todo es muy simple: framework + modules + metadata = application. Enfoque de desarrollo rápido de aplicaciones en desarrollo.


La funcionalidad principal de la mayoría de las aplicaciones IONDV. Framework compila un registro de datos: el módulo de registro. Este es un módulo clave diseñado específicamente para trabajar con datos basados ​​en estructuras de metadatos.


Esencialmente, un marco de aplicación son aquellas estructuras de metadatos que se inician para el módulo de registro. También es ideal para la creación rápida de prototipos de una aplicación: la implementación de la lógica empresarial básica.


Al mismo tiempo, todo lo que no encaja en el comportamiento típico del sistema se expande a través de plantillas HTML o escribiendo nuevos módulos en JavaScript. Al mismo tiempo, hay un módulo de portal típico en el que es más conveniente hacer interfaces especializadas utilizando cualquier marco front-end conveniente.


También en esta aplicación se utilizan:


  • módulo de análisis para informes,
  • módulo de tablero para mostrar información en forma de widgets,
  • módulo de geodatos para mostrar en el mapa los asentamientos con datos sobre industrias que se regulan manualmente,
  • módulo administrativo para gestionar usuarios y roles de acceso. Panel de control del administrador.

En la aplicación IONDV. El módulo de registro de Telecom se utiliza para crear y trabajar en las entidades clave del sistema; en los metadatos se denominan clases: comunidad, comunicación, atención médica y educación, así como información básica y adicional.


Ejemplos de entidades clave


Por ejemplo, una localidad que contiene información sobre la localidad y que posteriormente se utiliza para vincular todas las entidades contables, por ejemplo, instalaciones de comunicación o educativas. La captura de pantalla muestra el formulario de la pantalla.



Y aquí hay un fragmento de metadatos en formato JSON.


{ "isStruct": false, "key": [ "okato" ], "semantic": "name", "name": "naselenniyPunkt", "version": "", "caption": " ", "ancestor": null, "container": "", "creationTracker": "", "changeTracker": "", "history": 0, "journaling": true, "compositeIndexes": null, "properties": [ { "orderNumber": 10, "name": "okato", "caption": "", "type": 0, "size": 11, "decimals": 0, "allowedFileTypes": null, "maxFileCount": 0, "nullable": false, "readonly": true, "indexed": true, "unique": true, "autoassigned": false, "hint": null, "defaultValue": null, "semantic": null, "selConditions": [], "selSorting": [], "selectionProvider": null, "indexSearch": false, "eagerLoading": false, "formula": null }, { "orderNumber": 30, "name": "name", "caption": "", "type": 0, "size": 128, "decimals": 0, "allowedFileTypes": null, "maxFileCount": 0, "nullable": true, "readonly": false, "indexed": true, "unique": false, "autoassigned": false, "hint": null, "defaultValue": null, "semantic": null, "selConditions": [], "selSorting": [], "selectionProvider": null, "indexSearch": false, "eagerLoading": false, "formula": null }, 

Por cierto, las clases de metadatos se pueden heredar. Para ellos, las vistas se configuran por separado y difieren en los distintos pasos de los procesos empresariales y mucho más. La propiedad de propiedades enumera la lista de atributos. Obtenga más información sobre los metadatos. También puede crear metadatos en la aplicación Studio o mediante la implementación local desde un github ; también está disponible bajo la licencia gratuita de Apache 2.0.


Los datos de la entidad se actualizan fácilmente. Por ejemplo, para una institución educativa, después de ingresar datos en los atributos básicos y crear el objeto, aparece la pestaña "Información adicional". En nuestra opinión, lo más interesante es la implementación del atributo del tipo "Geodata". En la captura de pantalla de la tarjeta de objeto, Educación es un mapa. La dirección del objeto se sustituye del formulario y el sistema determinará automáticamente las coordenadas. Los datos de este atributo se almacenan en GeoJSON, es decir podría ser cualquier objeto en este formato, no solo un punto, sino también un polígono o una línea.



Ilustraremos el funcionamiento del módulo más intuitivo, Geomap o módulo de geodatos, que utiliza la API de Yandex para mostrar datos. Puede probar la demostración aquí , y le diremos lo que muestra.



A la izquierda están las capas del mapa, donde la capa "Liquidaciones" está seleccionada de forma predeterminada. En el mapa, puede hacer clic en el icono con el pueblo. Como resultado, aparece una tarjeta a la derecha con información sobre la presencia de información y telecomunicaciones en ella.


Puede ir a la capa "Comunicación por asentamientos" y los datos de resumen sobre las regiones de la región calculados en el módulo analítico se mostrarán a la derecha. Si hace doble clic en un distrito (solo se mostrarán los datos del distrito), el filtro se activará. Si vuelve a hacer doble clic en el área, el mapa general volverá.


La información sobre las capas y sobre cómo obtener datos se especifica en forma de metadatos en JSON. Una forma de mostrar como una plantilla html
Un ejemplo de un fragmento sobre una ventana emergente con una breve información de los metadatos para una capa 2G.


 "balloonContentLayoutClass" : "<div class='map-ajax-balloon' data-url='geomap/render/khv-svyaz-info/2gMobileKray/0/{{ properties.itemId }}?template=geo/balloon/2gMobile'><i class='fa fa-refresh fa-spin'></i></div>" 

Un ejemplo de una plantilla EJS con todos los datos móviles que se muestran en la ventana derecha. En él, el acceso a los datos se proporciona trabajando con el objeto del elemento y sus propiedades:


 <% let result = { title: item.get('name') } if (item.get('chislennost')) { result.title += ' (' + item.property('chislennost').evaluate() + ' .)'; } let itemSvyaz = item.property('svyaz').evaluate(); if (itemSvyaz) { %> <ul class='balloon-attrlist' style='width:225px'> <li><%- result.title %></li> </ul> <ul class='mt10'> <table> <% let coll = itemSvyaz.property('mobile').evaluate(); if (coll && coll.length) { for (let elem of coll) { let collOp = elem.get('mobileOperator'); let collSt = elem.property('mobileStandart').evaluate(); if (collOp) { %> <tr> <td> <li><%- elem.property('mobileOperator').evaluate() %></li> </td> <td><% for (let element of collSt) { %> <%- element %> <% } %> </a></td> </tr> <% } } } } %> </table> </ul> 

Los datos del sistema se pueden cargar para análisis en el sistema de BI. Por ejemplo, hicimos integración con QlickView. Para simplificar el trabajo de los analistas, no utilizaron el sistema REST-API, sino que conectaron directamente QlickView al DBMS a través del conector MongoDB: la emulación SQL es de bastante alta calidad para estas tareas.


¿Cómo llegar?


En Linux, puede instalar la aplicación en una línea, si git, node.js y mongodb se instalan localmente utilizando el instalador de la aplicación iondv . El script instalará las dependencias del entorno, clonará todos los repositorios necesarios del marco, módulos y aplicaciones de GitHub, recopilará, iniciará e iniciará la aplicación:


 bash <(curl -sL https://raw.githubusercontent.com/iondv/iondv-app/master/iondv-app) -q -i -m localhost:27017 telecom-ru 

Donde en lugar de localhost: 27017 debe especificar la dirección de MongoDb.


También puede iniciar el contenedor docker:


 #   mongodb: docker run --name mongodb -v mongodb_data:/data/db -p 27017:27017 -d mongo #  IONDV. Telecom docker run -d -p 80:8888 --link mongodb iondv/telecom-ru 

Después de comenzar, abra el enlace http: // localhost: 8888 donde se muestran los datos de demostración en la geocapa. Y en http: // localhost: 8888 / registro , el back office estará disponible con la cuenta de demostración, contraseña de ion-demo .


Consulte también la guía del usuario de la aplicación .


¿Cuáles son los pros?


La principal ventaja del registro de comunicaciones IONDV. Telecom es una representación visual del estado de desarrollo del sector de telecomunicaciones en la región, lo que permite planificar la mejora de la calidad de la infraestructura de comunicación, así como proporcionar estos datos en el dominio público.


La solución para las comunicaciones contables se basa en el marco de código abierto IONDV. Framework, y este es un código JavaScript de código abierto y una estructura de metadatos abierta en JSON, lo que implica una completa libertad de refinamiento. Casi como parte de Apache 2.0). Definitivamente puedes arreglar, mejorar y vender. A pesar de que el motor no exige recursos, es excelente para desarrollar aplicaciones comerciales confiables de varios tamaños.

Source: https://habr.com/ru/post/458146/


All Articles