jueves, agosto 20, 2020

Extraer informacion de Cisco DNA Center con Python

 Aquí les muestro y explico como extraer información de la API Assurance del Cisco DNA Center como pasos principales los siguientes:

  • definimos el body  y el header de la consulta, lo principal es que consultamos por los últimos 5 minutos.
  • Nos autenticamos con el DNA Center a traves de la función de autenticacion
  • Realizamos el request para obtener la información
  • Y al final la información la transformamos en un dataframe de Pandas.
  
    
#!/usr/bin/python3
import requests
import json
import pandas as pd
from pandas.io.json import json_normalize
from requests.auth import HTTPBasicAuth
import time
from datetime import datetime
headers = {
              'content-type': "application/json",
              'x-auth-token': ""
          }
### definimos rango de tiempo inicio(atras) y fin(ahora)
### en hora unix y en milisegundos
ahora=int(time.time()*1000)
atras= ahora - (5*60*1000)


### Este es el cuerpo de la consulta donde se filtra por fecha 
### y por tipo
body='{"startTime":'+str(atras)+',"endTime":'+str(ahora)+',"limit":1000,"offset":1,"filters":{"kpi":[{"kpiAttr":"LAST_UPDATED","condition":[{"name":"decr","value":[]}]}],"scoreType":[],"devType":["WIRELESS"],"typeIdList":["__global__"]}}'


### Funcion login DNA
def dnac_login(host, username, password):
    url = "https://{}/api/system/v1/auth/token".format(host)
    response = requests.request("POST", url, auth=HTTPBasicAuth(username, password), verify=False)
    return response.json()["Token"]


## Me registro en el DNA y obtengo token
token = dnac_login("Ip_DNA:port", "user", "password")
### Consulta la API /api/assurance/v1/host
### utilizamos el token obtenido y el body creado al principio
url="https://Ip_DNA:port/api/assurance/v1/host"
headers["x-auth-token"] = token


### hacemos la consulta
response = requests.post(url, headers=headers, data=body, verify=False)
 

### Transformo la respuesta en un dataframe
response.json()['response']
df = json_normalize(response.json()['response'])
    
 

No hay comentarios.: