Skip to content

NOC 20.2

20.2 release contains 249 bugfixes, optimisations and improvements.


Python3 Compatibility

As it was declared in Python3 Compatibility Statement<release-19.4-py3>, 20.2 is the first Python3-only release. This allows us to clean up and optimize code base in following ways:

  • All Python2 compatibility layers are removed.
  • Key dependencies (Tornado, Django, etc) are upgraded to latest stable versions.
  • async/await are used instead @tornado.gen.coroutine in all the places.
  • Type annotations are heavily used in newly-introduced and in modified code.

Low-level network-handling code, including SNMP, RPC, HTTP-client and all CLI variants are rewritten from Tornado to Python3-native asyncio. It allows to clean up code, fix some old cryptic bugs and introduce gentler error- and timeout- handling.

NOC 20.2 is compatible with Python 3.7 and 3.8.

So we have to admit the Python3 migration Odyssey is over. It tooks over one year, consumes lots of work, sometimes with acrobatic exercises to maintain compatibility and stability. But in addition to code simplicity, stability and instrumentation we gave serious performance benefits. Our investigations on real-world installation shows that NOC 20.2 requires 10-15% less CPU, than previous Python 2 based releases.

Interface Description Topology Discovery

Meet the ifdesc topology discovery method. It is last-resort semi-automatic method of linking based on interface description analysis. ifdesc comes to resque when all other methods failed. Operator has to define a set of regular expressions to extract a neighbor information from descriptions and has to configure network equipment. In contrast to manual linking, ifdesc is configurable as common topology discovery method. Its precedence over other methods can be adjusted, so its results may be refined by more precise automatic methods (i.e. LLDP), and it can be used to refine more error-prone methods (i.e. MAC).

ifdesc is the 14th topology discovery method available out of the box.

MAC Blacklist

Costs cutting and lack of proper Q&A sometimes leads to large parties of network equipment with non-unique MAC addresses. Overall impact may vary: from insignificant, to ARP-cache poisoning, to inpredictable STP topology changes. It-also affects the topology discovery methods based on neighbor identification upon MAC address (LLDP, STP, MAC). So its safer to maintain a list of broken MAC addresses to notify personnel on possible problems.

MAC blacklist is maintained and distributed on deploy, like other collections, and can be adjusted and maintained locally and shared back to the repo.

LLDP discovery method now consults on MAC Blacklist and tries to mitigate problem by using neighbor information from additional TLVs.

Real-world networks often repeats the pattern when aggregation switch (A) is placed on PoP with redundant reserved power and connected to home access switches (B, C, D, E), which are powered from non-redundant city power grid.

graph TD; A --> B; A --> C; A --> D; A --> E;

During the maintenance on power grid, several access switches may expect power loss, while aggregation switch stays on-line as unaffected or switched to reserve power. Current topology-based RCA scheme will register each access switch failure as separate root cause alarms and will propagate them as separate trouble tickets. It may take a time for personnel to detect all those problems are related and inferred by power problems.

NOC 20.2 introduces additional Downlink Merge policy. Downlink Merge is enabled on aggregation switch (A) and allows to tie all direct children alarms together and to process and escalate them as a one failure. Network personnel will take a hint to check alarms as related together and will be notified to check the power.

Multi-Format Datastreams

Datastreams can be configured to separate views, filtering or morphing records. Views, called formats can be used to enrich datastreams with data from external sources, or to restring amount of data to be passed to external systems.

Each format can be configured to additional API Key role, allowing granular access.

Customized SNMP-response parsers

Broken SNMP implementations are in the wild. Sometimes responses are malformed, while still containing meaningful data. So we added Profile.get_snmp_response_parser() method to override default response parser to customized one when necessary.

New features

MR Title
MR3418 Grafana: Add new DOM dash
MR3550 Add Ignore Pattern func
MR3600 #1287: Multi-Format DataStream
MR3632 #1086 IfDesc topology discovery
MR3653 #1301: MAC Blacklist
MR3668 #1222 RCA 'Downlink Merge' policy
MR3746 Profile.snmp_response_parser


MR Title
MR3392 noc/noc#1283 Add allowDiskUse to reportdatasources.
MR3407 Add combo connection type to Huawei Quidway series.
MR3428 Add Combo port to Raisecom models.
MR3442 http-parser 0.9.0
MR3444 yield from
MR3445 pytest 5.0.3
MR3461 Fix some models
MR3470 datastream: ManagedObject.object_profile.tags
MR3476 Fix report max load metrics 2
MR3490 Deduplicate Datastream Changes.
MR3491 Replace imp to importlib on mib service.
MR3494 Add SubscriberProfile to ETL loader
MR3500 ThreadPoolExecutor: Support for context protocol
MR3501 Update verify-models script
MR3512 Register Datastream Changes when Service - Interface binding changes
MR3516 Fix get_interfaces for DES-3200/C1
MR3522 Add errors_in_sum, errors_out_sum column to reportmetrics.
MR3524 fix_objectmodels_comboports_eltex_mes
MR3527 nbi Path API: Specify start by OFM order_id
MR3533 Bump requirements versions
MR3539 Django 3.0.5
MR3542 Add iface_hints to RemoteSystem portmapper.
MR3553 Tornado 6 support
MR3554 NetworkX 2.4
MR3555 Make Service.subscribe a coroutine
MR3557 Cleanup interface service field when remove service.
MR3560 Add pool to reportdiscoverypoison.
MR3561 Impoved logging when use neighbors discovery cache.
MR3571 Python 3.8 tests, pyproj 2.6.0
MR3580 Add quiet params to etl extract command. Supress exception if set.
MR3581 Add retry escalation to Escalation limit exceeded.
MR3587 add_new_model_Nag
MR3588 fix_objectmodels_eltex_LTP-LTE
MR3591 Add rules to test inv.objectmodels
MR3592 Fix some models
MR3615 Native PeriodicCallback and PeriodicOffsetCallback
MR3617 http client: Asynchronous DNS resolver
MR3619 Add cutomized dashboard to PM.
MR3624 MAC Segment discovery. Check object level on same segment for uplink detect.
MR3625 #1298 PrefixDiscovery takes account of MO's VRF
MR3626 #1299 Hide hidden custom fields from ipam view
MR3627 Django 3.0.6, mongoengine 0.20.0, crontab 0.22.6, redus-3.5.2, hiredis=1.0.1, ipython 7.14.0
MR3633 Add ELtex MIB preference.
MR3636 Add Eltex MIBs.
MR3637 Add catch OIDCollision to mib upload command. Add detect some errors when upload mib.
MR3641 IOLoop.add_callback() cleanup
MR3650 Native asyncio SNMP implementation
MR3657 Add Huawei.MA5600T profile check rules
MR3662 Add Eltex MIBs.
MR3674 Add json_unique_fields to ProfileCheckRule.
MR3678 Add 'Discards In' and 'Discards Out' to Report metrics.
MR3682 noc/noc#1295 Add Cisco ASR1001-X model.
MR3685 Remove Service.ioloop
MR3694 Streamlined SNMP Beef implementation
MR3695 asyncio-native NSQ topic implementation
MR3705 asyncio-native CLI
MR3713 Replace resolve_ifindexes to resolve_properties on InterfaceDiscovery.
MR3716 Fix filling Capabilities from ConfDB.
MR3719 Add dump argument to confdb commands.
MR3747 Add BI Dashboard collection.
MR3751 Raise CLI CLILowPrivileges when no up privileges by enable.
MR3752 Send command_exit when close cli stream.
MR3754 Add get_fqdn to profiles.
MR3760 Add 'Exclude on MAC Black List' param to ReportDiscovery Poison.
MR3763 Add raw_result params to script http methods.
MR3765 Add errors="replace" policy to script parse_object_stream.
MR3768 Change docker image's python to 3


MR Title
MR3389 fix report - load metric max
MR3395 Fix save on ModelProtectionProfile.
MR3397 Tgsender: fix py3
MR3400 Fix bi encode error when empty field description.
MR3405 Fix changing objectmodel combo field.
MR3419 Fix AlowDiskUse param on aggregate report
MR3426 Fix DatasourceCache compress encoding.
MR3440 Fix Consul session lost logging
MR3446 Disable smart_text over return http.get json result.
MR3448 Fix comma on mo pm dashboard.
MR3479 py3: Fix DNS RR comparison
MR3483 Add is_managed=False to maintenance escalator handler.
MR3484 Fix detect selected column on ObjectDetail Report.
MR3502 Fix bytes on asset generate_serial.
MR3503 Change enable_link to enable_service on nri service discovery.
MR3507 py3: Fix whois update-cache
MR3513 Add json_unique_fields to mibpreference.
MR3517 Fix scheduler shutdown
MR3518 Fix CH Dictionary split data to chunk.
MR3534 Remove validation policy button from UI.
MR3537 Fix fix-pip on PIP's beta versions
MR3556 Fix SAE return redirect. Was broken on noc/noc!3508.
MR3574 Fix Link.managed_objects on Django3
MR3576 Fix not operand on ConfDB.
MR3612 Catch portmapper exception on NRI discovery.
MR3618 httpclient: Fix EOF handling
MR3620 noc/noc#1283 Fix ReportLinkDetail for py3.
MR3634 Fix trace when export fm.mibpreference collection by command.
MR3640 Fix detect coroutine on Script.on_error_sequence.
MR3646 Fix ReportDiscovery Poison MAC view.
MR3649 Fix script on_unprivileged_prompt when no raise privileges.
MR3651 classifier: Fix bytes processing
MR3664 Fix 'TypeError' on confdb iter_nodes sorted.
MR3666 HTTPClient: Better handling of connection errors
MR3671 chwriter: Fix channel messages calculation
MR3672 Fix race condition during lazy mib loading
MR3673 Lock all RPC deserialization for a better times
MR3676 Fix logger argument on xmac discovery.
MR3692 Fix dictionary keys changed during iteration on extdocapplication.
MR3693 SNMP: Fix GETNEXT raw_varbinds processing
MR3702 Fix confdb protocols applicators for type normalizer.
MR3707 Fix MRT service
MR3708 ETL: Fix parallel extraction for Oracle
MR3710 Fix CLI loop context usage
MR3712 redis: delete_many may be called with empty keys
MR3714 Fix typo in InterfaceDiscovery resolve_properties.
MR3724 httpclient: Fix connection reset handling
MR3729 CLI: Fix keepalive timeout handling
MR3731 py3. Fix get_colors.
MR3749 CLI: Fix connection reset handling
MR3750 Fix typo on MRT service.
MR3753 Fix params on LLDP Discovery logger.
MR3756 snmp: Fix broken error-index
MR3757 Fix Script.on_error_sequence sequence type.
MR3758 Fix typo on MacBlackList js Application.
MR3759 Fix NSQ topic shutdown sequence
MR3762 Fix BER unknown types reporting
MR3769 Fix script.submit debug.
MR3770 Fix catch ConnectionResetError on http_client.
MR3771 Right fix ConnectionResetError on http client.

Code Cleanup

MR Title
MR3347 py3. Change rogue_chars on profiles to bin.
MR3387 Remove py2 tests
MR3388 Set black target to python 3.6
MR3390 Fix DDash sensorstatus
MR3390 Fix DDash sensorstatus
MR3394 Remove CLIPS config validation
MR3401 py3. Fix compile-bytecode.
MR3417 py3: Remove six.PY2/six.PY3 usage
MR3421 py3: Remove six type aliases usage
MR3439 py3: Remove six.iter* wrappers
MR3447 Remove @six.python_2_unicode_compatible and six.with_metaclass
MR3457 Move to py3-style type annotations
MR3458 Clean up .docker directory
MR3463 Remove six
MR3464 Cleanup noc.core.comp bord/bchr/make_bytes functions
MR3465 Use dict comprehensions
MR3466 Use py3 to build docs
MR3467 Fix docs builder
MR3469 py3: Fix
MR3473 Remove CLIPS-based validation models
MR3474 mypy: Remove --py2 flag
MR3508 py3: Remote raise tornado.gen.Return() usage
MR3509 Fix type annotations
MR3519 Source coding specification cleanup
MR3523 py3.8 compatibility fixes
MR3525 Use native time.perf_counter()
MR3526 Remove from builtins import
MR3528 Remove pypy support
MR3529 Ping: Remove io_loop parameter
MR3531 httpclient: Remove io_loop parameter
MR3535 DCS: Remove io_loop parameter
MR3536 Remove coding directive
MR3538 Remove deprecated get_absolute_url method
MR3540 Remove io_loop parameter from UDPServer
MR3541 Remove io_loop parameter from CLI
MR3543 Remove PeriodicOffsetCallback and NSQ TopicQueue io_loop parameter
MR3544 Remove snmp io_loop parameter
MR3545 Remove deprecated TracebackFuture alias
MR3546 Remove scheduler IOLoop parameter
MR3593 Cleanup super() call
MR3606 Cleanup tornado.gen usage
MR3614 Fix DOM ddash
MR3628 Remove deprecated get_future_loop() compatibility call
MR3631 Fix import deprecation warning
MR3639 Fix id ddash for Grafana 6
MR3643 Add/new ddash stp delta
MR3659 Fix Radio Ddash
MR3665 Replace socket.error with OSError
MR3726 20.2 deprecations

Profile Changes


MR Title
MR3594 Alcatel.7302. Add SNMP to profile.


MR Title
MR3437 noc/noc#1181 Alstec.24xx. Add platform name normalizer.


MR Title
MR3767 Cisco.IOS.get_interfaces. Use dict structure instead list.


MR Title
MR3596 DLink.DxS_Cisco_CLI.get_interfaces. Fix description decode.
MR3727 DLink.DxS_Smart.get_interfaces. Fix typo.
MR3737 DLink.DxS.get_lldp_neighbors. py3. Fix remote_port format to string.


MR Title
MR3391 Eltex.MES Update metrics
MR3434 Eltex.MES: Fix get_mac_address_table
MR3441 Eltex.MES: Update profile for 3124/3124F
MR3487 Eltex.MES. Add detected platform to profile.
MR3547 add_new_model_eltex_mes-3116F
MR3679 Eltex.MES.get_capabilities. Add SNMP methods.
MR3680 Eltex.MES.get_interfaces. Use Generic SNMP method.
MR3700 Eltex.MES.get_interfaces. Add Vlan and Lo filter on SNMP.
MR3722 Eltex.MES. Add always_prefer S for 3324/3348 models.


MR Title
MR3697 Eltex.MES24xx. Add config prompt to profile.
MR3738 Eltex.MES24xx.get_lldp_neighbors. Add 'Interface Alias' to port subtype.


MR Title
MR3559 Generic.get_chassis_id. Add 00:01:02:03:04:05 to IGNORED_MACS.
MR3565 Generic.get_mac_address_table. Filter vlan 0 number.
MR3573 Generic.get_interfaces. Refactor script for get_interface_properties use.
MR3648 Add Generic.get_fqdn script.
MR3681 Eltex.MES.get_spanning_tree. Add SNMP method.
MR3687 Generic.get_beef. Fix encode method.
MR3688 Generic.get_spanning_tree. Add detect port role.
MR3696 Generic.get_intefaces. Filter equal values on getting portchannel.
MR3706 Add get_interface_properties to get_ifindexes profiles
MR3733 Generic.get_vlans. Fix py3.
MR3734 Generic.get_mac_address_table. Skip unknown interfaces.


MR Title
MR3412 Huawei.MA5600T.get_cpe. Use codecs.encode instead .encode.
MR3582 Huawei.MA5600T.get_interfaces. Add interface hints field.
MR3595 Huawei.MA5600T. Add get_lldp_neighbors script.
MR3654 Huawei.MA5600T.get_portchannel. Add allow_empty_response to 'display lacp' command.
MR3656 Huawei.MA5600T.get_portchannel. Use allow_empty_response on 'display lacp' command.


MR Title
MR3669 Fix tagged vlan parsing on switch with 40G interfaces
MR3699 Huawei.VRP.get_interfaces. Use show vlan command for switchport info.
MR3718 Huawei.VRP. Fixes ConfDB normalizer.


MR Title
MR3755 noc/noc#1232 Iskrate.MSAN. Change detect version to 'Steer Version'.


MR Title
MR3386 Fix Juniper.JUNOS.get_interfaces script
MR3413 Juniper.JUNOS.get_interfaces. Use codecs.decode insterad .decode.


MR Title
MR3468 fix get_version - space removed in platform
MR3492 noc/noc#1230 Orion.NOS. Add convert_interface_name method.
MR3590 Fix Orion.NOS.get_lldp_neighbors script


MR Title
MR3599 noc/noc#1231 Qtech.QSW.get_version. Fix version regex.


MR Title
MR3711 noc/noc#1190 Qtech.QSW2800.get_version. Fix 3.0.1-R1-BETA3 firmware.
MR3721 Qtech.QSW2800. Fix patter_error for QSW-3470-10T with 3.0.1-R1-BETA3.
MR3766 noc/noc#1190 Qtech.QSW2800.get_lldp_neighbors. Add port description and sysname


MR Title
MR3399 Raisecom.ROS.get_version. Add detect Qtech vendor.
MR3566 Raisecom.ROS. Add fastethernet1/0/1 to management for ISCOM26(?:24|08)G.
MR3735 Raisecom.ROS. Add SNMP to scripts.
MR3736 Raisecom.ROS.get_capabilities. Fix STP detect.


MR Title
MR3601 noc/noc#1180 SKS.SKS.get_interfaces. Fix tagged vlan none on command.


MR Title
MR3610 Siklu.EH.get_mac_address_table. Fix mac type detected if quota column end.


MR Title
MR3689 noc/noc#1290 Zyxel.ZyNOS. py3, Convert pattern_zynos prompt to binary.
MR3720 Zyxel.ZynOS.get_inventory. Disable keep_cli_session after script.


MR Title
MR3393 Eltex.MES5448 update profile
MR3410 py3. Cleanup OID iface MAC to IF-MIB::ifPhysAddress name.
MR3420 Generic.get_mac_address_table. Fix getting mac address tables by SNMP.
MR3450 DCN.DCWL.get_metrics. Fix empty mac address.
MR3453 Convert command_submit on self.cli to bytes.
MR3454 Qtech.QSW.get_chassis_id. Add render_mac to SNMP method.
MR3459 py3. Fix convert hex values on profiles.
MR3495 noc/noc#1175 Huawei.MA5300.get_version. Add MA5303 to detecting profile.
MR3725 HP.ProCurve. Cleanup py3.
MR3739 DCN.DCWL.get_metrics. Fix rtt check.
MR3748 Qtech.BFC_PBIC_S. Use strict snmp response parser.
MR3764 Vitesse.VSC. Fix profile pattern_more.