Application de comptabilité de communication open source dans la région

Récemment, nous avons publié une application pour la comptabilité des communications dans la région sous la licence gratuite Apache 2.0. implémenté sur IONDV. Framework - solution open source basée sur node.js pour le développement rapide d'applications Web. La communication dans les régions est une condition importante pour le développement du territoire et une vie confortable. Ce sera un exemple basé sur le territoire de Khabarovsk. Et bien que notre territoire soit comparable à l'Espagne et au Portugal réunis, il restera dans toute la région de la Baltique (nous ne plaisanterons pas sur les ours dans les rues de Khabarovsk - vous trouverez des vidéos sur Youtube vous-même), mais nous n'avons toujours pas de communications cellulaires et d'Internet dans les zones reculées et peuplées de la région, ou leur qualité laisse beaucoup à désirer. L'application est applicable partout et est disponible pour une utilisation sans restrictions.


Comment analyser l'état actuel de la communication? Comment comprendre rapidement les zones à problèmes? Comment planifier le développement ultérieur des communications dans la région? Création d'une solution de type registre pour maintenir les informations de l'industrie, préparer des rapports analytiques sur leur base et formuler des plans de développement.



Application web de communication


IONDV. Telecom, ou comme nous l'appelons en équipe, Communication est une solution logicielle basée sur IONDV. Cadre , mis en œuvre pour organiser, enregistrer, stocker et afficher des données sur la disponibilité des services de communication (Internet, communications mobiles, télévision, courrier, etc.) dans les zones peuplées de la région, y compris la disponibilité des communications dans les installations des secteurs de la santé, de l'éducation. L'application est accessible au public sur GitHub . Traditionnellement, pour tous les référentiels sur github, il existe une instruction dans le référentiel README, mais nous avons déployé des systèmes de démonstration pour examen, sans vous inscrire: https://telecom-ru.iondv.com .


Vous pouvez également regarder une courte vidéo tournée uniquement sur cette démo.


Quelques détails techniques

La démo est déployée sur le serveur avec 2 cœurs CPU et 2 Go de mémoire dans le cloud Yandex. Et sur cette machine virtuelle, il existe des dizaines de ces applications de démonstration. Nous avons testé un système similaire sur la même ressource dans un autre article - «Expérience de la mise en œuvre logicielle du projet social« Remember Everyone »en open source
" Https://habr.com/en/post/451092/ - a reçu jusqu'à 400 demandes par seconde. Le système de communication a plus de métadonnées - jusqu'à 3-4 niveaux de profondeur.
Par exemple, un objet de communication a 10 entités liées (cellulaire, Internet, courrier, télévision, etc.). Chacun d'eux est de 3 à 5 de plus - pour la communication cellulaire, il s'agit d'une norme, d'un type de connexion, d'un opérateur, d'un établissement, etc. Et l'opérateur a également une imbrication.


Mais même sur ces ressources, il se comporte de manière assez réactive, bien que MongoDb ne soit pas très bon pour récupérer des données liées. Nous avons pris les mesures - pour obtenir 10 objets dans la liste (dans lesquels les données étaient affichées, y compris les données connexes), jusqu'à 1000 à 1500 requêtes dans la base de données ont été effectuées. Dans le même temps, le temps standard pour l'utilisateur dans le navigateur est d'environ 600 à 700 ms.


A propos du développement de l'application Communication sur la plateforme IONDV. Cadre


L'application est basée sur la technologie IONDV. Cadre Il s'agit du framework open source node.js pour la création d'applications Web de haut niveau basées sur les métadonnées, qui ne nécessite pas de compétences de programmation sérieuses. Le cœur du cadre est un modèle de données indépendant, des API de noyau, des modules de fonction et des modèles de présentation. MongoDb est utilisé pour le SGBD - il stocke les paramètres d'application, les métadonnées et les données elles-mêmes. Le framework s'exécute dans Node.js. Tous ensemble fournit un cadre multiplateforme.

Soit dit en passant, cette application est essentielle pour le cadre - elle a commencé l'exploitation productive de la nouvelle version sur node.js en utilisant mongoDB. Au total, le développement des composants du framework pour le projet (géomodule, affinement du module de rapport) et des métadonnées d'application a pris 2643 heures.


Un peu sur le principe de création d'une application sur le framework. Tout est très simple - framework + modules + métadonnées = application. Approche de développement rapide d'applications en développement.


La fonctionnalité de base de la plupart des applications IONDV. Framework compile un registre de données - le module Register. Il s'agit d'un module clé conçu spécifiquement pour travailler avec des données basées sur des structures de métadonnées.


Un cadre d'application est essentiellement les structures de métadonnées qui sont lancées pour le module d'enregistrement. Il est également idéal pour le prototypage rapide d'une application - la mise en œuvre de la logique métier de base.


Dans le même temps, tout ce qui ne correspond pas au comportement typique du système est développé via des modèles HTML ou l'écriture de nouveaux modules en JavaScript. Dans le même temps, il existe un module de portail typique dans lequel il est plus pratique de créer des interfaces spécialisées à l'aide de n'importe quel cadre frontal pratique.


Aussi dans cette application sont utilisés:


  • module d'analyse pour le reporting,
  • module de tableau de bord pour afficher des informations sous forme de widgets,
  • module de géodonnées pour l'affichage sur la carte des établissements avec des données sur les industries réglementées manuellement,
  • module d'administration pour la gestion des utilisateurs et des rôles d'accès. Panneau de configuration administrateur.

Dans l'application IONDV. Le module de registre Telecom est utilisé pour créer et travailler sur les entités clés du système - dans les métadonnées, elles sont appelées classes: communauté, communication, soins de santé et éducation, ainsi que des informations de base et supplémentaires.


Exemples d'entités clés


Par exemple, une localité qui contient des informations sur la localité et qui est ensuite utilisée pour relier toutes les entités comptables - par exemple, les installations de communication ou d'enseignement. La capture d'écran montre le formulaire d'écran.



Et voici un fragment de métadonnées au format 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 }, 

Soit dit en passant, les classes de métadonnées peuvent être héritées. Pour eux, les vues sont définies séparément et diffèrent dans les différentes étapes des processus métier et bien plus encore. La propriété properties répertorie la liste des attributs. En savoir plus sur les métadonnées. Vous pouvez également créer des métadonnées dans l'application Studio ou en déployant localement à partir d'un github - elles sont également disponibles sous la licence gratuite Apache 2.0.


Les données d'entité sont facilement mises à jour. Par exemple, pour un établissement d'enseignement, après avoir entré des données dans les attributs de base et créé l'objet, l'onglet «Informations supplémentaires» apparaît. À notre avis, le plus intéressant est la mise en œuvre de l'attribut de type "Géodonnées". Dans la capture d'écran de la carte d'objet, l'éducation est une carte. L'adresse de l'objet est substituée à partir du formulaire et le système déterminera automatiquement les coordonnées. Les données sur cet attribut sont stockées dans GeoJSON - c'est-à-dire pourrait être n'importe quel objet dans ce format - non seulement un point, mais aussi un polygone ou une ligne.



Nous allons illustrer le fonctionnement du module le plus intuitif - Geomap ou module de géodonnées - il utilise l'API Yandex pour afficher les données. Vous pouvez tester la démo ici , et nous vous dirons ce qu'elle montre.



À gauche se trouvent les couches de la carte, où la couche «Settlements» est sélectionnée par défaut. Sur la carte, vous pouvez cliquer sur l'icône avec le village. En conséquence, une carte apparaît à droite avec des informations sur la présence d'informations et de télécommunications en elle.


Vous pouvez accéder à la couche «Communiquer par établissements» et les données récapitulatives sur les régions de la région calculées dans le module analytique seront affichées à droite. Si vous double-cliquez sur un district - seules les données du district seront affichées - le filtre s'activera. Si vous double-cliquez à nouveau sur la zone - la carte générale reviendra.


Les informations sur les couches ainsi que la façon d'obtenir des données sont spécifiées sous forme de métadonnées en JSON. Un moyen d'afficher en tant que modèle html
Un exemple de fragment sur une fenêtre pop-up avec une brève information des métadonnées pour une couche 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 exemple de modèle EJS avec toutes les données mobiles affichées dans la fenêtre de droite. Dans celui-ci, l'accès aux données est fourni en travaillant avec l'objet item et ses propriétés:


 <% 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> 

Les données du système peuvent être téléchargées pour analyse dans le système BI. Par exemple, nous avons fait l'intégration avec QlickView. Pour simplifier le travail des analystes, ils n'ont pas utilisé le système REST-API, mais ont directement connecté QlickView au SGBD via le connecteur MongoDB - L'émulation SQL est de très bonne qualité pour ces tâches.


Comment arriver


Sous Linux, vous pouvez installer l'application sur une seule ligne, si git, node.js et mongodb sont installés localement à l'aide du programme d' installation iondv-app . Le script va installer les dépendances d'environnement, cloner tous les référentiels nécessaires du framework, des modules et des applications de GitHub, collecter, lancer et lancer l'application:


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

Où au lieu de localhost: 27017, vous devez spécifier l'adresse de MongoDb.


Vous pouvez également lancer le conteneur 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 

Après le démarrage, ouvrez le lien http: // localhost: 8888 où les données de démonstration sur la géocouche sont affichées. Et sur http: // localhost: 8888 / Registry , le back office sera disponible avec le compte démo, mot de passe ion-demo .


Voir également le guide d'utilisation de l'application .


Quels sont les avantages?


Le principal avantage du registre des communications IONDV. Telecom est une représentation visuelle de l'état de développement du secteur des télécommunications dans la région, ce qui permet de planifier l'amélioration de la qualité de l'infrastructure de communication, ainsi que de fournir ces données dans le domaine public.


La solution pour les communications comptables est basée sur le framework open source IONDV. Framework, et c'est du code JavaScript open source et une structure de métadonnées ouverte en JSON, ce qui implique une totale liberté de raffinement. Presque dans le cadre d'Apache 2.0). Vous pouvez certainement réparer, améliorer et vendre. Malgré le fait que le moteur ne demande pas de ressources, il est idéal pour développer des applications professionnelles fiables de différentes tailles.

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


All Articles