Napalm / device status problem when facts not returned correctly #2848

Closed
opened 2025-12-29 18:22:45 +01:00 by adam · 0 comments
Owner

Originally created by @fknorn on GitHub (Sep 3, 2019).

Environment

  • Python version: 3.6.8
  • NetBox version: 2.6.2

Steps to Reproduce

  1. Set up napalm as per docs
  2. Have a device that for some reason doesn't correctly return the device facts (an older Juniper SRX in my case)
  3. Click device's status tab
  4. Site never finishes loading ...

Expected Behavior

Get more graceful handling of the case where no facts are returned.

Observed Behavior

No error message, the page just never finishes loading (the spinner remains forever)

Diagnosis

What occurs under the hood (and can currently only be seen in the console) is a javascript error:

Uncaught TypeError: Cannot read property 'used_ram' of undefined

The problematic line is

$('#memory').after("<tr><td>Used</td><td>" + json['get_environment']['memory']['used_ram'] + "</td></tr>");

This is what the API actually returns in my case:

HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "get_facts": {
        "error": "Method get_facts failed: RpcError(severity: error, bad_element: None, message: error: usp_ipc_client_open: failed to connect to the server after 1 retries(65)\nerror: usp_ipc_client_open: failed to connect to the server after 1 retries(65)\nerror: 
[... line repeated several times ..]
usp_ipc_client_open: failed to connect to the server after 1 retries(65))"
    },
    "get_environment": {}
}

So the code a little higher up that performs some sanity checks on the returned data

if (!json['get_environment']['error']) {

near that place should probably be extended with something along the lines of

if (json['get_environment'].length || !json['get_environment']['error']) {

Thanks!

Originally created by @fknorn on GitHub (Sep 3, 2019). <!-- NOTE: This form is only for reproducible bugs. If you need assistance with NetBox installation, or if you have a general question, DO NOT open an issue. Instead, post to our mailing list: https://groups.google.com/forum/#!forum/netbox-discuss Please describe the environment in which you are running NetBox. Be sure that you are running an unmodified instance of the latest stable release before submitting a bug report. --> ### Environment * Python version: 3.6.8 * NetBox version: 2.6.2 <!-- Describe in detail the exact steps that someone else can take to reproduce this bug using the current stable release of NetBox (or the current beta release where applicable). Begin with the creation of any necessary database objects and call out every operation being performed explicitly. If reporting a bug in the REST API, be sure to reconstruct the raw HTTP request(s) being made: Don't rely on a wrapper like pynetbox. --> ### Steps to Reproduce 1. Set up napalm as per docs 2. Have a device that for some reason doesn't correctly return the device facts (an older Juniper SRX in my case) 3. Click device's status tab 4. Site never finishes loading ... <!-- What did you expect to happen? --> ### Expected Behavior Get more graceful handling of the case where no facts are returned. <!-- What happened instead? --> ### Observed Behavior No error message, the page just never finishes loading (the spinner remains forever) ### Diagnosis What occurs under the hood (and can currently only be seen in the console) is a javascript error: `Uncaught TypeError: Cannot read property 'used_ram' of undefined` The problematic line is ` $('#memory').after("<tr><td>Used</td><td>" + json['get_environment']['memory']['used_ram'] + "</td></tr>");` This is what the API actually returns in my case: ``` HTTP 200 OK Allow: GET, HEAD, OPTIONS Content-Type: application/json Vary: Accept { "get_facts": { "error": "Method get_facts failed: RpcError(severity: error, bad_element: None, message: error: usp_ipc_client_open: failed to connect to the server after 1 retries(65)\nerror: usp_ipc_client_open: failed to connect to the server after 1 retries(65)\nerror: [... line repeated several times ..] usp_ipc_client_open: failed to connect to the server after 1 retries(65))" }, "get_environment": {} } ``` So the code a little higher up that performs some sanity checks on the returned data ``` if (!json['get_environment']['error']) { ``` near that place should probably be extended with something along the lines of ``` if (json['get_environment'].length || !json['get_environment']['error']) { ``` Thanks!
adam added the type: bugstatus: accepted labels 2025-12-29 18:22:45 +01:00
adam closed this issue 2025-12-29 18:22:45 +01:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/netbox#2848