最近,我们发布了一个免费的Apache 2.0许可下的该地区通信会计应用程序。 在IONDV上实施。 框架-基于node.js的开源解决方案,用于快速开发Web应用程序。 地区之间的交流是领土发展和舒适生活的重要条件。 这将是一个基于哈巴罗夫斯克地区的例子。 尽管我们的领土可与西班牙和葡萄牙相提并论,但仍将保留在整个波罗的海地区(我们不会在哈巴罗夫斯克的大街上开玩笑,您可以在Youtube上找到视频),但我们仍然没有蜂窝通信和互联网在该地区偏远的人口稠密地区,或者其质量令人不满意。 该应用程序可在任何地方使用,并且可以不受限制地使用。
如何分析当前的通讯状态? 如何快速了解问题领域? 如何规划该地区通信的后续发展? 创建用于维护行业信息的注册表类型的解决方案,在其基础上准备分析报告并制定发展计划。

通讯网络应用
IONDV。 电信,或我们称之为团队的,Communication是基于IONDV的软件解决方案。 框架 ,用于组织,记录,存储和显示有关该地区人口稠密地区通信服务(互联网,移动通信,电视,邮件等)可用性的数据,包括医疗保健,教育部门设施的通信可用性。 该应用程序在GitHub上公开可用。 传统上,对于github上的所有存储库,在README存储库中都有一条说明,但是我们部署了演示系统进行审核,而无需注册: https : //telecom-ru.iondv.com 。
您也可以仅在此演示中观看短片。
一些技术细节该演示部署在Yandex云中具有2个CPU内核和2 GB内存的服务器上。 在此虚拟机上,有数十个此类演示应用程序。 在另一篇文章“将社交项目的软件实现“记住每个人”带入开源的经验”中,我们在相同的资源上测试了类似的系统
“ Https://habr.com/en/post/451092/-每秒最多接收400个请求。 通信系统具有更多的元数据-多达3-4个深度级别。
例如,一个通信对象具有10个相关实体(蜂窝,Internet,邮件,电视等)。 每一种多3-5种-对于蜂窝通信,它是一种标准,连接类型,运营商,结算方式等。运营商还具有嵌套功能。
但是即使在这些资源上,它的响应也很灵敏,尽管MongoDb对于获取相关数据并不是很好。 我们采用了指标-在列表中获取10个对象(其中显示了数据,包括相关数据),最多对数据库进行了1000-1500次查询。 同时,浏览器中用户的标准时间约为600-700毫秒。
该应用程序基于IONDV技术。 构架 这是用于创建基于元数据的高级Web应用程序的开源node.js框架,不需要认真的编程技能。 该框架的核心是独立的数据模型,内核API,功能模块和表示模板。 MongoDb用于DBMS-它存储应用程序设置,元数据和数据本身。 该框架在Node.js中运行。 一起提供了一个跨平台的框架。
顺便说一下,这个应用程序是框架的关键-它使用mongoDB开始在node.js上有效地开发新版本。 总体而言,该项目的框架组件(地理模块,报告模块的改进)和应用程序元数据的开发花费了2643个小时。
关于在框架上创建应用程序的原理。 一切都非常简单-框架+模块+元数据=应用程序。 开发中的快速应用程序开发方法。
大多数IONDV应用程序的核心功能。 框架编译数据注册表-注册模块。 这是一个专门设计用于基于元数据结构处理数据的关键模块。
本质上,应用程序框架是为注册模块启动的那些元数据结构。 这对于应用程序的快速原型制作(基本业务逻辑的实现)也非常有用。
同时,通过HTML模板或使用JavaScript编写新模块,可以扩展所有不适合系统正常行为的内容。 同时,有一个典型的门户模块,其中使用任何方便的前端框架进行专用接口的创建都更加方便。
在此应用程序中也使用:
- 用于报告的分析模块,
- 仪表板模块,用于以小部件形式显示信息,
- 地理数据模块,用于在定居点地图上显示人工监管的行业数据,
- 用于管理用户和访问角色的管理模块。 管理员控制面板。
在应用程序IONDV中。 电信注册模块用于创建和处理系统的关键实体-在元数据中,它们称为类:社区,通信,医疗保健和教育,以及基本和附加信息。
关键实体示例
例如,包含有关该位置的信息的位置,随后被用于链接所有会计实体,例如通信或教育设施。 屏幕截图显示了屏幕表单。

这是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 },
顺便说一下,元数据类可以被继承。 对于他们来说,视图是分别设置的,这些视图在业务流程的各个步骤中有所不同,甚至更多。 properties属性列出了属性列表。 了解有关元数据的更多信息。 您还可以在Studio应用程序中创建元数据,也可以通过从github本地部署来创建元数据-它也可以在免费的Apache 2.0许可下获得。
实体数据易于更新。 例如,对于教育机构,在基本属性中输入数据并创建对象后,将显示“其他信息”选项卡。 我们认为,最有趣的是“地理数据”类型的属性的实现。 在对象卡的屏幕快照中,Education是一张地图。 从表格中替换对象的地址,系统将自动确定坐标。 此属性上的数据存储在GeoJSON中-即 可以是这种格式的任何对象-不仅是点,还可以是多边形或线。

我们将说明最直观的模块-Geomap或geodata模块的操作-它使用Yandex API来显示数据。 您可以在此处测试该演示,我们将告诉您演示内容。

左侧是地图图层,默认情况下在其中选择“定居”图层。 在地图上,您可以点击带有村庄的图标。 结果,卡显示在右侧,其中包含有关信息和电信存在的信息。
您可以转到“通过定居点进行通信”层,在分析模块中计算出的区域区域的摘要数据将显示在右侧。 如果双击地区-仅显示地区数据-过滤器将打开。 如果再次双击该区域,则总图将返回。
有关层的信息以及如何获取数据的信息以JSON中的元数据的形式指定。 一种显示为html模板的方法
有关弹出窗口的片段示例,其中包含来自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>"
一个EJS模板的示例,所有移动数据都显示在右侧窗口中。 在其中,通过使用item对象及其属性来提供对数据的访问:
<% 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>
可以上载来自系统的数据,以在BI系统中进行分析。 例如,我们与QlickView进行了集成。 为了简化分析人员的工作,他们没有使用REST-API系统,而是通过MongoDB连接器将QlickView直接连接到DBMS-SQL仿真对于这些任务而言是非常高质量的。
如何获得?
在Linux下,如果使用iondv-app安装程序在本地安装了git,node.js和mongodb,则可以在一行中安装该应用程序。 该脚本将安装环境依赖项,从GitHub克隆框架,模块和应用程序的所有必要存储库,收集,启动和启动该应用程序:
bash <(curl -sL https://raw.githubusercontent.com/iondv/iondv-app/master/iondv-app) -q -i -m localhost:27017 telecom-ru
您需要指定MongoDb的地址,而不是localhost:27017。
您还可以启动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
启动后,打开链接http://本地主机:8888 ,其中显示了Geolayer上的演示数据。 在http:// localhost:8888 / registry ,后台办公室将提供演示帐户ion-demo密码。
另请参阅应用程序用户指南 。
有什么优点?
IONDV通信注册表的主要优点。 电信是该地区电信行业发展状况的直观表示,它可以计划改进通信基础设施的质量,并在公共领域提供此数据。
会计通信解决方案基于开源IONDV框架。 框架,这是开源JavaScript代码和JSON中的开放元数据结构,这意味着完全可以自由完善。 几乎是Apache 2.0的一部分)。 您绝对可以修复,改进和销售。 尽管引擎对资源的要求不高,但是它对于开发各种大小的可靠业务应用程序来说还是很棒的。