Skip to content

NOC 19.2

In accordance to our Release Policy <releases-policy> we're proudly present release 19.2.

19.2 release contains of 337 bugfixes, optimisations and improvements.



19.2 introduces new configuration processing framework, the ConfDB. ConfDB is the crystallisation of our over decade experience of configuration processing. Set of carefully designed tools, clean API and flexible query language offer the unified way of configuration parsing, validation, processing and converting. Target area covers data extraction (without complex scripts), config validation, querying and inter-vendor configuration conversions.

We built ConfDB around idea of abstract intermediate config representation, somewhat similar with programming languages’ virtual machines, query language with Prolog-like logical programming capabilities, and common pipeline for config parsing.

Key features comparison against existing config processing models:

Area Old Model ConfDB
Configuration fetching Via get_config script get_config script, external storage download
Configuration storing GridVCS GridVCS with compression
Configuration parsing pyparsing parsers 2-stage, tokenization and normalization
Parser complexity High tokenizers are reused between profiles, normalizers - easy
Parser performance Low High
Config model Plain list of predefined facts tree-like structure
Custom facts Almost impossible Easy
Query language syntax CLIPS Python
Query debugging shell Built-in IDE
Discovery integration None Config-driven discovery checks

19.2 contains ConfDB support for EdgeCore.ES, Eltex.MES, Huawei.VRP, Juniper.JUNOS, MikroTik.RouterOS and Qtech.QSW2800 profiles.

Read more

Headless Mode

ConfDB allows the headless mode of operations, where “headless” means no direct access to equipment. Instead, configuration files are downloaded from external storage via FTP, SFTP or S3 API, stored to GridVCS and processed via ConfDB. Discovery can extract capabilities, interfaces and vlans directly from config. IPAM is also integrated with ConfDB, allowing to track vpns, address and prefixes usage.

Headed/Headless mode may be selected on per-device or per-profile basics via appropriate policies.

Headless mode is a valuable tool for due diligencies, security audits and forensics.

Config fetch policy

NOC got additional configuration to select, which configuration to prefer - startup or running. Config fetch policy may be applied on per-profile or per-object level.


IPAM got various improvements, including:

  • separate calculation of address and prefix usage
  • prefix profile’s setting to allow reuse of special addresses (network and broadcast)

Ethernet services

IGetInterfaces got the ES address family, allowing to describe complex vlan tag manipulations, often referred as Ethernet Services, Q-in-Q and so on.

GridVCS improvements

19.2 contains simple Mercurial’s mpatch implementation to read old deltas. So NOC is no longer depends on Mercurial.

New profiles

19.2 brings support for various IP-cams, including video-specific metrics. Hikvision.DSKV8, Dahua.DH, Axis.VAPIX profiles support lots of IP-cams out-of-the-box.

In addition, GWD.GFA profile has been added.


Profile checking engine (discovery’s profile check) has been refactored to separate class available both for discovery and for custom scripting.

DNS Zone expiration checks

19.2 restores DNS Zone expiration check, regressed long ago in microservices branch.

API Improvements

Script http client

Scripts’ http client has been reworked and got middleware support, allowing various wierd authentication schemes. Integration with web-only managed devices became easier.

nbi telemetry API

NBI service got a telemetry API <api-nbi-telemetry> for metrics pushing from remote agents, making the NOC full-blown telemetry collection and processing system for custom IoT applications.

Code quality


Code Quality always has been one of the major priorities. 19.2 contains lots of code cleaning, improving overall code quality and PEP8 compliance.


Testing infrastructure has been improved and we’d reached 100% test suite passing. Tests passing made the requirement for merge request acceptance.

Python3 compatibility

Python 2.7 will reach end-of-life at 2020-01-01, so we started complex porting project. Additional py3 compatibility linter has been added to the testing lint stage. Python3 compatibility became the requirement for merge request acceptance.

Additional py3 infrastructure for test suite running is ready and we’re working on 100% tests passing.

Breaking Changes


IGetConfig interface got additional policy input parameter. get_config scripts should recognize it and behave accordingly.

Possible values:

  • r - prefer running config
  • s - prefer startup config


Migration from 19.2 release is straightforward. Just deploy 19.2 or stable-19.2 tags from Tower.

New features

MR Title
MR1568 IGetInterfaces: ethernet services
MR1582 Config tokenizers
MR1608 #980 Config normalizers
MR1647 ConfDB: Database and logic inference engine
MR1661 Juniper.JUNOS: ConfDB tokenizer
MR1696 Discovery: Headless config check
MR1706 nbi: telemetry API
MR1776 discovery: ConfDB methods
MR1783 ConfDB: Applicators
MR1800 Config Fetch Policy
MR1811 ConfDB: query frontend
MR1837 discovery: Running policy
MR1855 Domain expiration check handlers
MR1872 Bye-bye HG
MR1894 #38 Add prefix_special_address_policy to Prefix Profile.
MR1926 ProfileChecker class


MR Title
MR1505 fm.alarm: Check alarm is not already acknowledged/unacknowledged
MR1506 Update AuditTrail funcional
MR1520 Optimize IPv4 to integer conversion
MR1521 Header panel: add last update button
MR1542 Add support for ISCOM2608G
MR1545 Report control initial commit
MR1550 Patch uncol fm alarm sort
MR1551 Update Managed Object profile form
MR1553 Add 40G interfaces support to Cisco.IOS profile
MR1554 ManagedObjectProfile: Refer to default caps profile by default
MR1558 Update HP.ProCurve profile
MR1559 fm-alarm i18n
MR1562 Add hasAny and hasAll function to BI query language.
MR1564 Add basic authentication to script.http methods.
MR1570 Add initial support for GWD.GFA profile
MR1574 Add pattern_unprivileged_prompt to Iskratel.MSAN.
MR1575 Add http/https proto to script command.
MR1583 Set enable datasource default settings to False.
MR1587 pytest 4.1.1
MR1588 HTTP Client auto JSON requests
MR1585 Update GWD.GFA profile
MR1592 Move FM reportalarmdetail application to ControlReport.
MR1594 Add Interface Errors BIP metric to Huawei.MA5600T.
MR1596 Script: http sessions, headers and cookies control
MR1609 Add interval to PM scale function.
MR1611 Add Hikvision.DSKV8 profile
MR1612 Move isInMaintenance field on fm.alarm to bulk.
MR1613 fm.alarm: alarm_class multi-select
MR1630 combotree: reset pageSize limit
MR1634 #980 noc.core.confdb package
MR1645 Digest middleware
MR1655 Update SKS.SKS profile
MR1648 Huawei ma5600t
MR1660 parse_table: Mixed tabs/space processing
MR1662 NetworkSegment.get_nested_ids: Rewrite to fix out-of-memory condition
MR1663 Update BDCOM.xPON profile
MR1664 Add more d-link switches support
MR1666 i18n: inv.reportifacestatus
MR1667 Add more models to Eltex.MES profile
MR1669 Add Dahua.DH profile for IP cam.
MR1671 Add “port id subtype” to Huawei.VRP.get_lldp_neighbors.
MR1680 header panel: hide last update, when don’t use
MR1681 Add initial support for ZTE.ZXA10 profile
MR1684 BEREncoder/BERDecoder singleton
MR1687 BER: Opaque/float/double type decoders
MR1691 Add patch attribute to Huawei.VRP.get_version.
MR1692 Add CFP TransEth40G in for Finistar FTLQ8181EBLM
MR1693 remote sync date
MR1694 Add base implementation TCP RTSP client.
MR1695 Catch RPC Error on STP discovery.
MR1698 Add capabilities to script matchers.
MR1705 Add BRAS capabilities to Juniper.JUNOS profile
MR1711 ClickHouse client: Allow empty passwords
MR1716 Add group by slot to `Memory
MR1721 MikroTik.RouterOS: Match multi-line prompts
MR1733 Add matchers to Alstec.24xx.get_metrics.
MR1737 Update ZTE.ZXA10 profile
MR1738 discovery: Split config fetching and config validation stages
MR1742 Add state decorator to ip.vrf API.
MR1743 Add ack_ts, ack_user field to Alarms BI model
MR1750 Add serials number field to managed_object BI models and extractor.
MR1753 Check handler permission before call.
MR1758 Add ManagedObjectAttribute to card template.
MR1761 Add initial support for Axis.VAPIX profile
MR1762 Add Dahua.DH.get_local_version script.
MR1763 Add Beward.BD.get_local_users script.
MR1767 ConfDB: Customized syntax
MR1774 Profile’s confdb package
MR1775 Update Ericsson SEOS profile
MR1779 Migrate NBI loader to BaseLoader.
MR1781 Normalizer: defer() and RouterOS normalizer skeleton
MR1784 Add datastream meta field to ensure-indexes command.
MR1791 Update Juniper.JUNOS.get_interfaces script to support tunnels
MR1794 Add operation error in Huawei.MA5600T profile
MR1796 Do not expand tabs in parse_table() on some rotten devices
MR1814 ConfDB: VRF configuration
MR1820 Eltex.MES: MES-2324B/MES-2348B platforms
MR1822 ConfDB: RebaseApplicator
MR1833 Update
MR1835 Show service’s startup time
MR1836 discovery: Load ConfDB on demand even if config check is disabled
MR1858 Nocmc integration
MR1859 add lldp zyxel interface
MR1860 External Storage: Check directory is not exists before creation
MR1865 Add Jiniper.JunOS confdb normalizer.
MR1868 ConfDB tests
MR1877 Split docker-compose projects
MR1878 Profile: Show DeprecationWarning when profile is not in
MR1879 Optimize custom field loading
MR1881 pymongo 3.8, mongoengine 0.17.0
MR1883 Add mongodb rs init info. Pretty hacky
MR1884 Add future 2 stage. Make it mandatory
MR1887 Add Address Usage column to IPAM.
MR1896 VC.VLAN: add Description column, add interface name to L3 interfaces list
MR1907 Add future to docker requirements.
MR1910 test: Report empty module’s docstrings
MR1911 #996 Add project field to Subscriber and Supplier.
MR1913 Exclude self when AddressRange overlaps check when save.
MR1914 Getting vrf_id when confdb interface discovery.
MR1916 ConfDB: vpn-id
MR1919 Add type field to Qtech.QSW2800 memory_usage metric.
MR1921 Deny move cpestatus to anothet managed_object when it inactive
MR1922 Clean etl mapping key when load.
MR1923 Qtech.QSW2800 more more patterns
MR1924 Replace generic profile getting method in report_objectstat.
MR1925 Reorganize model tests
MR1927 Add support for SWA-2200-16P-AC device
MR1935 Add Patch Version column and autowidth option to Object Detail Repport.
MR1936 Remove volumes also when down tests
MR1949 Add export_beef parameter to script.
MR1955 Add Eltex.MES confdb normalizer.
MR1959 Move MongoCache index creation into ensure-indexes
MR1960 Replace ensure_index with create_index
MR1964 .to_json() and .get_json_path() tests
MR1978 ipam: Policy defaults in “New Prefix” form
MR1992 Add SNMP method to Huawei.MA5600T.get_metrics.
MR1995 #1030 Add DataSourceCache to ensure-index.


MR Title
MR1495 Fix Rotek.RTBSv1 cli errors
MR1496 Fix Rotek.RTBS cli errors
MR1504 Fix interfaceattributes datasource filter.
MR1509 Fix Qtech.QSW.get_switchport script
MR1511 Fix match trace on SKS.SKS profile.
MR1513 Fix MACDB circular references.
MR1517 Fix is_builtin field
MR1519 Fix threshold profile label in managed object profile metrics view.
MR1524 Fix Eltex.MES Lldp by snmp
MR1526 #998 Send bi_id field to frontend as string.
MR1528 Fix noc script command. Clean update-spec collect command.
MR1530 Fix TFortis.get_version script.
MR1531 Revert DLink.DxS.get_spanning_tree changes.
MR1533 Fix Alcatel.TIMOS.get_interfaces empty mac.
MR1536 Fix translation command BI model path
MR1540 Fm alarm fix
MR1541 localization fix (min)
MR1543 Fix Extreme.XOS.get_lldp_neighbors script
MR1544 Fix Detail Alarm report
MR1546 Fix convert interface name for Qtech.QSW
MR1547 Fix Juniper.JUNOS.get_mac_address_table script
MR1548 Fix clean thresholdprofile migration
MR1549 Fix get_lldp_neighbors script for Juniper.Junos
MR1552 Fix Cisco.ASA parse config
MR1555 Fix Time Pattern
MR1557 Cisco.SMB
MR1566 Fix DCN.DCWL.get_interfaces typo.
MR1569 fm-alarm save filters in local store
MR1571 Fix Qtech.QSW profile for lldp
MR1576 Fix Control translation.
MR1577 Fix Siklu.EH.get_lldp_neighbors.
MR1586 Fix Alcatel.AOS.get_switchport script
MR1597 #1006 Fix wipe user
MR1598 Fix detect snmp v1 for profile check rule.
MR1601 Fix error in reporting ifSpeed on some D-Link devices
MR1603 Fix syslog CH Model message field description.
MR1610 #1009 Fix Add/Insert object in inventory tree.
MR1614 fm.alarm: view recent alarms fixed
MR1615 Fix Raisecom.ROS.get_interfaces trace.
MR1617 Add metrics to selfmon fm collector.
MR1619 Fix Huawei.MA5600T.get_interfaces get vlans.
MR1623 Fix Raisecom.ROS.get_interfaces script
MR1624 Fix DLink.DxS_Smart.get_lldp_neighbors script
MR1625 Fix Eltex.MES5448.get_version script
MR1626 Fix Interfaces status ex for physical interfaces
MR1627 use ExtJS .endsWith for IE compatibility
MR1632 Some fixes for Huawei.MA5600T profile.
MR1636 Fix import
MR1637 beward_profile
MR1638 Fix Eltex.MES.get_spanning_tree script
MR1639 Fix for Oob and Stack-port interfaces
MR1641 #990 grid.column, override formatter to ‘htmlEncode’
MR1642 Fix Eltex.MES.get_interfaces script
MR1643 Fix Cisco.IOSXR.get_inventory script
MR1644 Fix discovery cpe
MR1649 Change replace character for Grafana PM Dashboard
MR1652 Add fix_cpe_header function to Huawei.MA5600T profile.
MR1654 grid.column, override formatter fix
MR1656 Fix DLink.DxS_Industrial_CLI interface naming
MR1657 Fix DLink.DxS.get_mac_address_table script
MR1658 sova/rtk#671
MR1659 #1018
MR1670 Fix snmp_metrics_get_chunk on Rotek.BT profile.
MR1677 Fix stupid copy/paste error
MR1683 Config MUST NOT match re validation policy
MR1689 Fix DCN.DCWL.get_metrics scale and type Interface metrics.
MR1697 fix juniper.junos metric Subscribers (for version >16) and Temperature
MR1700 Fix Raisecom.ROS.get_inventory trace when Unknown SFP.
MR1702 Fix Siklu.EH.get_lldp_neighbors empty section trace.
MR1712 Fix Rotek RTBSv1 profile
MR1718 Fix CPU, Memory, Temperature metrics for Huawei.VRP
MR1722 Some fixes on IP Cam profiles Dahua.DH, Beward.BD, Hikvision.DSKV8
MR1723 juniper.junos metric Subscribers without caps
MR1726 Huawei.MA5600T move profile settings to
MR1728 juniper.junos metric Subscribers without caps
MR1731 Alstec.24xx.get_metrics fix trace when no controller module.
MR1734 Fix matchers when check string in iter.
MR1735 Fix clickhouse backend IPv4 displayed field.
MR1741 #977 Fix collect SLA metrics in Cisco.IOS.get_metrics.
MR1745 Fix Huawei.MA5600T.get_interfaces script
MR1747 #939 Fix Huawei.VPR profile system patter_prompt
MR1749 Fix chwriter channels_active metric trace.
MR1751 #973 Fix managed_object two in card path exception.
MR1752 Fix CursorTimeout when execute datastream rebuild command on large collection.
MR1754 Fix previous commit
MR1755 Fix Cisco.IOS.get_interfaces script
MR1756 Fix Orion.NOS profile
MR1757 Fix Juniper.JUNOS.get_version script
MR1760 Fix fm models. add json_unique_fields
MR1780 Fix exception in DLink.DxS_Smart profile
MR1788 Fix metrics in card
MR1789 Fix MikroTik.RouterOS.get_interfaces script
MR1793 Fix low privelegies error in DLink.DxS profile
MR1799 fix
MR1802 Fix box.job typo.
MR1805 Fix Cisco.NXOS.get_inventory script
MR1817 Fix DLink.DxS clean_lldp_neighbor() function
MR1838 Fix Eltex.MES.get_lldp_neighbors script
MR1839 Fix MikroTik.RouterOS.get_lldp_neighbors script
MR1840 Fix Eltex.RG.get_version script
MR1841 Fix Eltex.DSLAM profile
MR1842 Fix Hiawei.MA5300. Disable session use.
MR1844 Fix Qtech.QSW2500 script
MR1852 Fix ManagedObject card not shows interfaces without metrics.
MR1857 #1014 Fix ‘Config MUST NOT match string’ validator
MR1861 Fix row_limit in web app.
MR1864 Fix ch-policy dot name on command.
MR1867 Fix ManagedObject vendor migration.
MR1869 Fix wrong scripts name
MR1871 Fix tests
MR1874 py3: Fix threadpool
MR1875 fix get_config tplink t2600 confdb
MR1876 Fix tests
MR1889 Fix MikroTik.RouterOS profile
MR1890 Fix SKS.SKS.get_spanning_tree script
MR1897 fix get_inv for X650
MR1899 Fix to_python method for Clickhouse nested field.
MR1901 Fix SKS.SKS convert_interface_name() function
MR1902 Fix SKS.SKS.get_spanning_tree script
MR1903 Fix Iskratel.ESCOM.get_spanning_tree script
MR1904 fix_metric_memory
MR1905 Fix Nateks.FlexGain.get_interfaces script
MR1908 Fix limit check on extapplication.
MR1928 Fix DLink.DxS.get_interface_status_ex script
MR1929 Revert “Merge branch ‘qsw2800-more-patterns’ into ‘master’”
MR1930 Fix Alstec.24xx.get_interfaces script
MR1931 Catch SNMP Error when Huawei.VRP SNMP worked.
MR1938 Fix classifier rule cleanup code.
MR1939 Some fixes for Hikvision.DSKV8 profile.
MR1940 Fix get_handler error message typo.
MR1942 Fix CPEStatus discovery when calculate diff for new cpe.
MR1943 Fix Huawei.MA5600T pattern more for Honet.
MR1946 Fix multiple jobs on master branch conflict. Prettify a little bit.
MR1950 Fix Huawei.VRP.get_capabilities snmp check when get.
MR1954 Some fixes in Generic snmp scripts.
MR1961 Fix choices attribute in StringList interface parameter.
MR1966 Fix Juniper.JunOS confdb normalizer.
MR1967 Fix job_handler validator in Workflow editor backend.
MR1979 Fix Cisco.IOS.get_version script
MR1986 LineTokenizer: Fix string_quote processing
MR1987 Fix Qtech.QSW2800.get_inventory datetime import.
MR1989 Fix help command execute on custom.
MR1991 Fix get_config script on profiles for policy.
MR1993 #1041 Fix segment update_summary fix.
MR1994 #1039 Make IPAM VRF search ungrouped VRF.
MR1996 Fix calculate address and prefix usage.
MR2001 Fix reportdatasource backend.
MR2003 #1044 Fix import error on reportoverlappedoids.
MR2004 #981 Fix Cisco.ASA pattern_username match to Last login message.

Code cleanup

MR Title
MR1591 Remove wildcard imports
MR1604 DocInline code cleanup
MR1605 Remove inv and fm monitor deprecated API
MR1606 Remove cocomo report
MR1771 fix_YAMLLoad_safe_load
MR1792 Set yapf column limit to 120
MR1797 flake8: Disable W605
MR1808 cm_migrations. code refactoring
MR1809 crm_migrations. code refactoring
MR1810 dns_migrations. code refactoring
MR1812 fm_migrations. code refactoring
MR1813 gis_migrations. code refactoring
MR1815 inv_migrations. code refactoring.
MR1818 ip_migrations. code refactoring
MR1819 kb_migrations. code refactoring
MR1821 main_migrations. code refactoring
MR1823 peer_migrations. code refactoring
MR1824 phone_migrations. code refactoring
MR1825 pm_migrations. code refactoring
MR1826 project_migrations. code refactoring
MR1828 sa_migrations. code refactoring
MR1829 sla_migrations. code refactoring
MR1830 vc_migrations. code refactoring
MR1831 wf_migrations. code refactoring.
MR1832 Update
MR1850 flake8: Fix tests/
MR1851 Remove lib/
MR1856 Remove obsolete periodics
MR1870 Cleanup noc.settings import.
MR1880 py3: Rename izip_longest
MR1882 Cleanup
MR1891 flake8_E2_E3_ver2 without sa_profiles, services, tests
MR1892 fix_migrations. DeprecationWarning pymongo
MR1898 flake8_E2_E3_ver2. services
MR1909 flake8_E2_E3_ver2. sa_profiles
MR1915 Fix @on_delete_check decorators
MR1918 Code cleanup
MR1958 Cleanup DeprecationWarnings
MR1962 Remove socketKeepAlive option
MR1968 flake8_f401_webapp_cm
MR1969 flake8_f401_webapp_crm
MR1970 flake8_f401_webapp_dns
MR1971 flake8_f401_webapp_fm
MR1972 flake8_f401_webapp_gis
MR1973 flake8_f401_webapp_inv
MR1974 flake8_f401_webapp_main
MR1975 flake8_f401_webapp_maintenance
MR1976 cleanup
MR1980 2to3 idioms
MR1981 del_with_statement
MR1982 2to3 basestring
MR1983 2to3 set literal
MR1984 Port legacy tests
MR1985 2to3 metaclass