forward-netbox 2.2.1__tar.gz → 2.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/PKG-INFO +3 -2
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/README.md +2 -1
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/__init__.py +1 -1
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/forwardingestion.html +1 -1
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/partials/ingestion_all.html +1 -1
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_log_export.py +60 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/apply_identity_audit.py +0 -2
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/views.py +21 -7
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/pyproject.toml +1 -1
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/LICENSE +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/api/__init__.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/api/serializers.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/api/urls.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/api/views.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/choices.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/exceptions.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/filtersets.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/forms.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/jobs.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/management/__init__.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/management/commands/__init__.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/management/commands/forward_apic_cimc_readiness_audit.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/management/commands/forward_apply_identity_audit.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/management/commands/forward_blocker_audit.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/management/commands/forward_collection_gap_alert.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/management/commands/forward_device_scope_reconciliation_audit.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/management/commands/forward_link_vsys_parents.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/management/commands/forward_module_readiness.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/management/commands/forward_primary_ip_audit.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/management/commands/forward_pushdown_profile.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/management/commands/forward_query_diff_coverage_audit.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/management/commands/forward_scope_ipam_audit.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/management/commands/forward_seed_ui_harness.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/management/commands/forward_tag_delete_eligible.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/management/commands/forward_validation_org_query_audit.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0001_initial.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0002_add_coalesce_fields.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0003_forwardingestionissue_context_fields.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0004_forwardingestion_baseline_fields.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0005_validation_and_reporting.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0006_alter_forwardnqemap_netbox_model.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0007_forwardingestion_persisted_change_counters.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0008_alter_forwardnqemap_netbox_model.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0009_alter_forwardnqemap_netbox_model.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0010_forwardvalidationrun_override_applied_and_more.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0011_forwardingestion_change_request_id.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0012_forwardnqemap_query_reference.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0013_execution_run_step.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0014_execution_step_fetch_scope.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0015_execution_step_apply_engine.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0016_execution_step_query_metrics.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0017_execution_step_row_counters.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0018_execution_run_reconciliation_events.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0019_forwardexecutionstep_query_parameters.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0020_execution_step_operation.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0021_add_fhrpgroup_nqe_map_choice.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0022_alter_forwardnqemap_netbox_model.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0023_split_ip_address_maps.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0024_forwarddeviceanalysis.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0025_device_analysis_netboxmodel.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0026_forwarddeviceanalysis_collection_result.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0027_alter_forwardexecutionrun_backend.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0028_remove_forwardexecutionstep_run_and_more.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0029_forward_parent_device_cf.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/__init__.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/models.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/navigation.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/__init__.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_apic_cimc_inventory.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_apic_nodes.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_app_profiles.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_bridge_domains.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_command_inventory.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_contracts.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_endpoint_groups.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_fabrics.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_filters.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_l3outs.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_nodes.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_pods.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_static_port_bindings.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_tenants.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_vrfs.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_bgp_address_families.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_bgp_peer_address_families.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_bgp_peers.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_device_analysis.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_device_feature_tags.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_device_feature_tags_with_rules.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_device_models.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_device_models_with_netbox_aliases.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_device_types.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_device_vendors.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_devices.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_devices_with_netbox_aliases.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_hsrp_groups.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_inferred_interface_cables.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_interfaces.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_inventory_items.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_ip_addresses_ipv4.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_ip_addresses_ipv6.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_ip_addresses_unassignable_diagnostics.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_locations.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_mac_addresses.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_modules.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_ospf_areas.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_ospf_instances.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_ospf_interfaces.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_peering_sessions.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_platforms.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_prefixes_ipv4.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_prefixes_ipv6.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_routing_import_diagnostics.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_virtual_chassis.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_vlans.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_vrfs.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/netbox_utilities.nqe +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/signals.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/static/forward_netbox/img/fn-logo.svg +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tables.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/template_content.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/forwarddriftpolicy.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/forwardnqemap.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/forwardsource.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/forwardsync.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/forwardsync_dependency_preview.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/forwardsync_drift_report.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/forwardsync_health.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/forwardsync_module_readiness.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/forwardsync_scope_reconciliation.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/forwardvalidationrun.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/inc/brand_bar.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/inc/device_analysis_panel.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/inc/diff.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/inc/execution_insights.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/inc/logs_pending.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/inc/merge_form.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/inc/validation_force_allow_form.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/partials/change_explainability.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/partials/ingestion_merge_button.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/partials/ingestion_progress.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/partials/ingestion_statistics.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/partials/ingestion_status.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/partials/job_logs.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/partials/object_tabs.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/partials/stage_switcher_buttons.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/partials/validation_force_allow_button.html +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templatetags/__init__.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templatetags/forward_netbox_helpers.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/__init__.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/fixtures/aci_command_inventory_expected.json +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/fixtures/aci_discovery_expected.json +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/scenarios.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_api_usage.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_api_views.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_apic_cimc_readiness_audit_command.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_apply_engine.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_apply_identity_audit.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_branching.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_brand_bar.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_bulk_adapter_parity.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_bulk_merge.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_bulk_merge_scale.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_device_scope_reconciliation_audit_command.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_device_scope_tagging.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_forms.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_forward_api.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_health.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_ingestion_merge.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_interface_naming.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_ip_address_dedup_query.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_ipaddress_dup_global.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_issue_rendering.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_job_compat.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_job_liveness.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_jobs.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_logging.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_models.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_module_readiness.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_module_readiness_rollup.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_plugin_integrations.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_primary_ip.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_primary_ip_audit.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_primary_ip_integration.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_query_binding.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_query_diff_coverage_audit_command.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_query_registry.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_release_readiness_audit.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_runtime_dependency_check.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_scope_ipam_audit.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_scope_matched_tags.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_scope_module_ui.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_sensitive_content.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_stability_hardening.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_sync.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_sync_aci.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_sync_facade.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_sync_orchestration.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_sync_runner_contracts.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_sync_state.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_synthetic_scenarios.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_validation_org_query_audit_command.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/tests/test_vsys_parent.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/urls.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/__init__.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/api_usage.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/apply_engine.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/apply_engine_bulk.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/apply_engine_decision.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/branch_budget.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/branching.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/bulk_merge.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/change_explainability.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/density_learning.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/device_analysis.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/direct_changes.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/drift_report.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/execution_ledger.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/execution_telemetry.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/fast_bootstrap_executor.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/fetch_artifacts.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/forward_api.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/forward_api_impl.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/health.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/health_apply_fetch.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/health_checks.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/health_summary_blocks.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/ingestion_issues.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/ingestion_merge.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/ingestion_presentation.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/interface_naming.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/job_compat.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/job_liveness.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/json_safe.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/logging.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/merge.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/model_contracts.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/model_validation.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/module_readiness.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/multi_branch_lifecycle.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/plugin_integrations/__init__.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/plugin_integrations/registry.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/primary_ip.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/primary_ip_audit.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/query_binding.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/query_binding_resolution.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/query_diagnostics.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/query_fetch.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/query_fetch_execution.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/query_registry.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/runtime_guidance.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/scope_ipam_audit.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/scope_reconciliation.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sensitive_content.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/single_branch_executor.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/snapshot_freshness.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/support_bundle_archive.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_aci.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_cable.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_contracts.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_core_models.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_device.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_events.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_execution.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_facade.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_interface.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_inventory_module.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_ipam.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_orchestration.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_primitives.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_reporting.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_routing.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_routing_impl.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_runner_adapters.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_runner_contracts.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/sync_state.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/validation.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/validation_org_query.py +0 -0
- {forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/vsys_parent.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: forward-netbox
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.2
|
|
4
4
|
Summary: NetBox plugin to sync Forward data into NetBox via built-in NQE queries
|
|
5
5
|
License: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -31,7 +31,8 @@ Forward 26.6 is the baseline for async NQE.
|
|
|
31
31
|
|
|
32
32
|
| Plugin Release | NetBox Version | Status |
|
|
33
33
|
| --- | --- | --- |
|
|
34
|
-
| `v2.2.
|
|
34
|
+
| `v2.2.2` | `4.6.3` required; needs netbox-branching `1.1.0+` | Current release; Fix 504 gateway timeouts on large syncs: stop recomputing change-explainability on every poll during a long merge + back off poll to 15s |
|
|
35
|
+
| `v2.2.1` | `4.6.3` required; needs netbox-branching `1.1.0+` | Superseded by `v2.2.2`; Add read-only forward_apply_identity_audit diagnostic to pinpoint 1-created/1-deleted idempotency churn |
|
|
35
36
|
| `v2.2.0` | `4.6.3` required; needs netbox-branching `1.1.0+` | Superseded by `v2.2.1`; Fix devices mis-assigned the ACI platform; link Palo vsys / Fortinet vdom firewalls to their physical chassis |
|
|
36
37
|
| `v2.1.5` | `4.6.3` required; needs netbox-branching `1.1.0+` | Superseded by `v2.2.0`; Fix Prune orphans erroring on empty sites that still hold a VLAN/VM/prefix (delete only truly-empty sites) |
|
|
37
38
|
| `v2.1.4` | `4.6.3` required; needs netbox-branching `1.1.0+` | Superseded by `v2.1.5`; Tag delete-eligible global IPAM (prefixes/VLANs/VRFs) for manual review |
|
|
@@ -8,7 +8,8 @@ Forward 26.6 is the baseline for async NQE.
|
|
|
8
8
|
|
|
9
9
|
| Plugin Release | NetBox Version | Status |
|
|
10
10
|
| --- | --- | --- |
|
|
11
|
-
| `v2.2.
|
|
11
|
+
| `v2.2.2` | `4.6.3` required; needs netbox-branching `1.1.0+` | Current release; Fix 504 gateway timeouts on large syncs: stop recomputing change-explainability on every poll during a long merge + back off poll to 15s |
|
|
12
|
+
| `v2.2.1` | `4.6.3` required; needs netbox-branching `1.1.0+` | Superseded by `v2.2.2`; Add read-only forward_apply_identity_audit diagnostic to pinpoint 1-created/1-deleted idempotency churn |
|
|
12
13
|
| `v2.2.0` | `4.6.3` required; needs netbox-branching `1.1.0+` | Superseded by `v2.2.1`; Fix devices mis-assigned the ACI platform; link Palo vsys / Fortinet vdom firewalls to their physical chassis |
|
|
13
14
|
| `v2.1.5` | `4.6.3` required; needs netbox-branching `1.1.0+` | Superseded by `v2.2.0`; Fix Prune orphans erroring on empty sites that still hold a VLAN/VM/prefix (delete only truly-empty sites) |
|
|
14
15
|
| `v2.1.4` | `4.6.3` required; needs netbox-branching `1.1.0+` | Superseded by `v2.1.5`; Tag delete-eligible global IPAM (prefixes/VLANs/VRFs) for manual review |
|
|
@@ -8,7 +8,7 @@ class NetboxForwardConfig(PluginConfig):
|
|
|
8
8
|
name = "forward_netbox"
|
|
9
9
|
verbose_name = "Forward Field Integration"
|
|
10
10
|
description = "Sync Forward data into NetBox using built-in NQE queries."
|
|
11
|
-
version = "2.2.
|
|
11
|
+
version = "2.2.2"
|
|
12
12
|
base_url = "forward"
|
|
13
13
|
min_version = "4.6.3"
|
|
14
14
|
|
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
<div id="ingestion_poll"
|
|
168
168
|
class="col col-md-12"
|
|
169
169
|
hx-get="{% url 'plugins:forward_netbox:forwardingestion_logs' pk=object.pk %}?stage={{ active_stage|default:'sync' }}"
|
|
170
|
-
hx-trigger="{% if job_running %}every
|
|
170
|
+
hx-trigger="{% if job_running %}every 15s{% else %}none{% endif %}"
|
|
171
171
|
hx-target="#ingestion_logs"
|
|
172
172
|
hx-select="#ingestion_logs"
|
|
173
173
|
hx-select-oob="#ingestion_status:innerHTML,#ingestion_progress:innerHTML,#ingestion_statistics:innerHTML,#change_explainability:innerHTML,#object_tabs:innerHTML,#ingestion_merge_button:innerHTML"
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
hx-swap-oob="true"
|
|
23
23
|
class="col col-md-12"
|
|
24
24
|
hx-get="{{ logs_url }}?stage={{ active_stage }}"
|
|
25
|
-
hx-trigger="{% if polling_done %}none{% else %}every
|
|
25
|
+
hx-trigger="{% if polling_done %}none{% else %}every 15s{% endif %}"
|
|
26
26
|
hx-target="#ingestion_logs"
|
|
27
27
|
hx-select="#ingestion_logs"
|
|
28
28
|
hx-select-oob="#ingestion_status:innerHTML,#ingestion_progress:innerHTML,#ingestion_statistics:innerHTML,#change_explainability:innerHTML,#object_tabs:innerHTML,#ingestion_merge_button:innerHTML"
|
|
@@ -338,6 +338,66 @@ class ForwardIngestionLogExportViewTest(TestCase):
|
|
|
338
338
|
self.assertContains(response, "ipam.prefix 1")
|
|
339
339
|
self.assertContains(response, "vrf 1")
|
|
340
340
|
|
|
341
|
+
def test_poll_defers_change_explainability_while_running(self):
|
|
342
|
+
# Regression (504 fix): while the job is running, the 5s/15s poll must
|
|
343
|
+
# NOT recompute change_explainability — doing so on every poll piles DB
|
|
344
|
+
# load onto the web workers during a long settling merge, which is what
|
|
345
|
+
# produces the gateway 504s on large platform-reclassification syncs.
|
|
346
|
+
running_sync = ForwardSync.objects.create(
|
|
347
|
+
name="sync-running-poll",
|
|
348
|
+
source=self.source,
|
|
349
|
+
parameters={"snapshot_id": "latestProcessed"},
|
|
350
|
+
)
|
|
351
|
+
running_ing = ForwardIngestion.objects.create(
|
|
352
|
+
sync=running_sync,
|
|
353
|
+
snapshot_selector="latestProcessed",
|
|
354
|
+
snapshot_id="snap-running",
|
|
355
|
+
)
|
|
356
|
+
now = timezone.now()
|
|
357
|
+
running_job = Job.objects.create(
|
|
358
|
+
object_type=ContentType.objects.get_for_model(ForwardIngestion),
|
|
359
|
+
object_id=running_ing.pk,
|
|
360
|
+
name="running-ingestion-job",
|
|
361
|
+
user=None,
|
|
362
|
+
status=JobStatusChoices.STATUS_RUNNING,
|
|
363
|
+
job_id="333e4567-e89b-12d3-a456-426614174002",
|
|
364
|
+
created=now,
|
|
365
|
+
started=now,
|
|
366
|
+
completed=None,
|
|
367
|
+
data={},
|
|
368
|
+
)
|
|
369
|
+
running_ing.job = running_job
|
|
370
|
+
running_ing.save(update_fields=["job"])
|
|
371
|
+
|
|
372
|
+
self.client.force_login(self.user)
|
|
373
|
+
with patch("forward_netbox.views.change_explainability_summary") as mock_ce:
|
|
374
|
+
response = self.client.get(
|
|
375
|
+
reverse(
|
|
376
|
+
"plugins:forward_netbox:forwardingestion_logs",
|
|
377
|
+
kwargs={"pk": running_ing.pk},
|
|
378
|
+
),
|
|
379
|
+
headers={"HX-Request": "true"},
|
|
380
|
+
)
|
|
381
|
+
self.assertEqual(response.status_code, 200)
|
|
382
|
+
mock_ce.assert_not_called()
|
|
383
|
+
|
|
384
|
+
def test_poll_computes_change_explainability_when_done(self):
|
|
385
|
+
# The completed ingestion still computes it (the deferral is only while
|
|
386
|
+
# the job runs), so the operator sees the breakdown once it finishes.
|
|
387
|
+
self.client.force_login(self.user)
|
|
388
|
+
with patch(
|
|
389
|
+
"forward_netbox.views.change_explainability_summary",
|
|
390
|
+
return_value={"available": False},
|
|
391
|
+
) as mock_ce:
|
|
392
|
+
self.client.get(
|
|
393
|
+
reverse(
|
|
394
|
+
"plugins:forward_netbox:forwardingestion_logs",
|
|
395
|
+
kwargs={"pk": self.ingestion.pk},
|
|
396
|
+
),
|
|
397
|
+
headers={"HX-Request": "true"},
|
|
398
|
+
)
|
|
399
|
+
mock_ce.assert_called_once()
|
|
400
|
+
|
|
341
401
|
def test_export_logs_compacts_large_execution_plan_items(self):
|
|
342
402
|
sync = ForwardSync.objects.create(
|
|
343
403
|
name="sync-log-export-plan-items",
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/utilities/apply_identity_audit.py
RENAMED
|
@@ -67,14 +67,12 @@ def audit_model_identity(model_string, rows, *, sample_limit=15):
|
|
|
67
67
|
|
|
68
68
|
# Forward key sets (per lookup_set) from emitted row fields.
|
|
69
69
|
forward_keys = {lookup_set: set() for lookup_set in lookup_sets}
|
|
70
|
-
forward_row_by_key = {}
|
|
71
70
|
for row in rows:
|
|
72
71
|
values = {field: (row.get(field) or None) for field in row_fields}
|
|
73
72
|
for lookup_set in lookup_sets:
|
|
74
73
|
key = lookup_key_from_values(values, lookup_set, model_string=model_string)
|
|
75
74
|
if key is not None:
|
|
76
75
|
forward_keys[lookup_set].add(key)
|
|
77
|
-
forward_row_by_key.setdefault((lookup_set, key), row)
|
|
78
76
|
|
|
79
77
|
netbox_keys = {lookup_set: set() for lookup_set in lookup_sets}
|
|
80
78
|
netbox_count = 0
|
|
@@ -1374,19 +1374,27 @@ class ForwardIngestionLogView(LoginRequiredMixin, View):
|
|
|
1374
1374
|
data["execution_state"] = _compact_execution_state_payload(
|
|
1375
1375
|
json_safe_value(get_execution_display_state(ingestion.sync))
|
|
1376
1376
|
)
|
|
1377
|
-
|
|
1377
|
+
sync_running = ingestion.job and not ingestion.job.completed
|
|
1378
|
+
merge_running = ingestion.merge_job and not ingestion.merge_job.completed
|
|
1379
|
+
job_running = bool(sync_running or merge_running)
|
|
1380
|
+
# Defer the change-explainability recompute while the job is running: it
|
|
1381
|
+
# is only meaningful once staging/merge completes, and recomputing it on
|
|
1382
|
+
# every poll piles DB load onto the web workers during a long settling
|
|
1383
|
+
# merge (a large platform reclassification can run for minutes) — that
|
|
1384
|
+
# contention is what produces the 504 gateway timeouts the customer sees.
|
|
1385
|
+
data["change_explainability"] = (
|
|
1386
|
+
{"available": False, "reason": "deferred_while_running"}
|
|
1387
|
+
if job_running
|
|
1388
|
+
else change_explainability_summary(ingestion)
|
|
1389
|
+
)
|
|
1378
1390
|
data["export_logs_url"] = reverse(
|
|
1379
1391
|
"plugins:forward_netbox:forwardingestion_export_logs",
|
|
1380
1392
|
kwargs={"pk": ingestion.pk},
|
|
1381
1393
|
)
|
|
1382
1394
|
|
|
1383
1395
|
if request.htmx:
|
|
1384
|
-
sync_running = ingestion.job and not ingestion.job.completed
|
|
1385
|
-
merge_running = ingestion.merge_job and not ingestion.merge_job.completed
|
|
1386
1396
|
anything_ever_ran = ingestion.job or ingestion.merge_job
|
|
1387
|
-
data["polling_done"] = (
|
|
1388
|
-
bool(anything_ever_ran) and not sync_running and not merge_running
|
|
1389
|
-
)
|
|
1397
|
+
data["polling_done"] = bool(anything_ever_ran) and not job_running
|
|
1390
1398
|
return render(request, self.template_name, data)
|
|
1391
1399
|
|
|
1392
1400
|
|
|
@@ -1447,7 +1455,13 @@ class ForwardIngestionView(generic.ObjectView):
|
|
|
1447
1455
|
data["execution_state"] = _compact_execution_state_payload(
|
|
1448
1456
|
json_safe_value(get_execution_display_state(instance.sync))
|
|
1449
1457
|
)
|
|
1450
|
-
|
|
1458
|
+
# Defer change-explainability while the job is running (see
|
|
1459
|
+
# ForwardIngestionLogView): avoids recomputing it under merge contention.
|
|
1460
|
+
data["change_explainability"] = (
|
|
1461
|
+
{"available": False, "reason": "deferred_while_running"}
|
|
1462
|
+
if data["job_running"]
|
|
1463
|
+
else change_explainability_summary(instance)
|
|
1464
|
+
)
|
|
1451
1465
|
data["export_logs_url"] = reverse(
|
|
1452
1466
|
"plugins:forward_netbox:forwardingestion_export_logs",
|
|
1453
1467
|
kwargs={"pk": instance.pk},
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/management/commands/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0002_add_coalesce_fields.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/migrations/0013_execution_run_step.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_apic_nodes.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_app_profiles.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_bridge_domains.nqe
RENAMED
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_contracts.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_endpoint_groups.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_fabrics.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_filters.nqe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_aci_tenants.nqe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_device_analysis.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_device_feature_tags.nqe
RENAMED
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_device_models.nqe
RENAMED
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_device_types.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_device_vendors.nqe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_hsrp_groups.nqe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_inventory_items.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_ip_addresses_ipv4.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_ip_addresses_ipv6.nqe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_mac_addresses.nqe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_ospf_instances.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_ospf_interfaces.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_peering_sessions.nqe
RENAMED
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_prefixes_ipv4.nqe
RENAMED
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_prefixes_ipv6.nqe
RENAMED
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/queries/forward_virtual_chassis.nqe
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/static/forward_netbox/img/fn-logo.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templates/forward_netbox/inc/diff.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{forward_netbox-2.2.1 → forward_netbox-2.2.2}/forward_netbox/templatetags/forward_netbox_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|