Congestion levels

The SDK below demonstrates how to use the Congestion Insights functionality in a network. It allows an application to access current or predicted congestion levels in a specific area of the network.

Congestion levels can be accessed either through polling (below) or a webhook subscription mechanism. Polling involves making a request and receiving an immediate response with the current or predicted congestion level. As for the webhook subscription, an application can receive notifications about changes in the congestion levels.

Since Congestion is also supposed to be able to provide current actual congestion levels, it can also be used as a diagnostic tool to determine why network performance may be poor. So, in addition to allowing proactive measures, it can also be used reactively.

Polling congestion levels

First, you can poll the current congestion level for a given device:

import network_as_code as nac
 
from datetime import datetime, timezone, timedelta
 
from network_as_code.models.device import Device, DeviceIpv4Addr
 
client = nac.NetworkAsCodeClient(
    token="<your-application-key-here>"
)
 
# Create a device object for the mobile device we want to use
my_device = client.devices.get(
    "device@testcsp.net",
    ipv4_address=DeviceIpv4Addr(
        public_address="192.0.2.3",
        private_address="192.0.2.204",
        public_port=80
    ),
    ipv6_address="2001:db8:1234:5678:9abc:def0:fedc:ba98",
    phone_number="36721601234567"
)
 
# Returns a string with the current congestion level,
# e.g.: "low", "high", "medium" or "none"
congestion = my_device.get_congestion()
 
# Access the congestion level object just created like this:
print(congestion.level)

What does this code do?

It calls a method to get the congestion on the device object previously created. As a result, the method return the Congestion object. It then demonstrates how to show the congestion level from the returned Congestion object.

Learn more about the client and device objects that you just created.

Getting predictions or historical data

You can also get congestion predictions or historical data between two timestamps. This allows anticipating congestion during a specified amount of time.

The SDK below calls a method to get congestion levels passing the device information and timestamps that for the time span you wish to consult, as parameters. It iterates over the returned Congestion objects and prints the timestamp and congestion level for each prediction.

# Get historical data between two timestamps
# Set the duration/time difference with the timedelta function
congestion_history = my_device.get_congestion(
    start=datetime.now(timezone.utc),
    end=datetime.now(timezone.utc) + timedelta(hours=3)
)

NOTE: The subscription expire time can be defined with an ISO 8601 formatted date string, for example "2024-03-28T12:40:20.398Z", or simply create a date-time object as shown in the code snippet examples above.

Congestion level parameters

Here is a parameters table describing each parameter used in the code:

ParametersDescription
startStart timestamp for retrieving congestion data. It should be an ISO 8601 formatted date string or a date-time object as shown above.
endEnd timestamp for retrieving congestion data. It should be an ISO 8601 formatted date string or a date-time object as shown above.

Last updated on July 09, 2024