Ir para conteúdo
Fórum Script Brasil
  • 0

Criando script para resultado de API


taysa.dantas

Pergunta

Olá pessoal! Eu sou especialista em Datadog e não sou dev, então preciso de uma ajuda em criar um script.

 

Eu estou fazendo um script para pegar uso de licenças do Datadog (https://docs.datadoghq.com/api/latest/usage-metering/#get-hourly-usage-by-product-family)

O resultado da API que peguei desse link acima é esse aqui:

{
    "data": [
        {
            "id": "6685f58b79fde3817a95b8238638ebf3b93092eab931f2e4c27de60276b85543",
            "type": "usage_timeseries",
            "attributes": {
                "product_family": "rum",
                "org_name": "SEB",
                "public_id": "b7b3ca9e-0449-11ed-aa8b-da7ad0900002",
                "region": "us",
                "timestamp": "2023-08-01T00:00:00+00:00",
                "measurements": [
                    {
                        "usage_type": "browser_rum_units",
                        "value": 12
                    },
                    {
                        "usage_type": "mobile_rum_units",
                        "value": null
                    },
                    {
                        "usage_type": "rum_units",
                        "value": 12
                    }
                ]
            }
        },
        {
            "id": "e99e489388121b41b31d1ae85d9e076ae583cdbb09969edf68527477f7175779",
            "type": "usage_timeseries",
            "attributes": {
                "product_family": "rum",
                "org_name": "SEB",
                "public_id": "b7b3ca9e-0449-11ed-aa8b-da7ad0900002",
                "region": "us",
                "timestamp": "2023-08-01T01:00:00+00:00",
                "measurements": [
                    {
                        "usage_type": "browser_rum_units",
                        "value": 9
                    },
                    {
                        "usage_type": "mobile_rum_units",
                        "value": null
                    },
                    {
                        "usage_type": "rum_units",
                        "value": 8
                    }
                ]
            }
        }
    ]
}

Eu consegui montar o seguinte script para correlacionar o nome da licença (usage_type) com o valor (value) usado em cada horário (timestamp).

import pandas as pd
import requests
import json

headers = {
    'Accept': 'application/json;datetime-format=rfc339',
    'DD_API_KEY': 'xxxxxxxxxxx',
    'DD-APPLICATION-KEY': 'xxxxxxxxxx',
}

params = {
    'filter[timestamp][start]': '2023-06-01T00:00:00+00:00',
    'filter[timestamp][end]': '2023-09-01T00:00:00+00:00',
}

resp = requests.get('https://api.datadoghq.com/api/v2/usage/hourly_usage?filter[product_families]=rum',
                    headers=headers, params=params)
data = resp.json()

data_list = []

for item in data["data"]:
    timestamp = item["attributes"]["timestamp"]
    measurements = item["attributes"]["measurements"]
    measurement_dict = {"-Date": pd.to_datetime(timestamp).strftime("%d/%m/%Y %H:%M:%S")}
    for measurement in measurements:
        usage_type = measurement["usage_type"]
        value = measurement["value"]
        measurement_dict[usage_type] = value
    data_list.append(measurement_dict)


df = pd.DataFrame(data_list)

print(df)

Porém, a Datadog tem uma limitação de 700 linhas, então não pega dados maiores de 1 mês (eu preciso do ano inteiro).

Quando o resultado dessa API é maior que 700 linhas, é retornado "next_record_id" no final da página:

{
    "data": [
        {
            "id": "a9e9b3d1688e0ac3e3673e2cc17ee441d85d417b4d851518e59144265b8aadf9",
            "type": "usage_timeseries",
            "attributes": {
                "product_family": "rum",
                "org_name": "SEB",
                "public_id": "b7b3ca9e-0449-11ed-aa8b-da7ad0900002",
                "region": "us",
                "timestamp": "2023-01-01T00:00:00+00:00",
                "measurements": [
                    {
                        "usage_type": "browser_rum_units",
                        "value": 16
                    },
                    {
                        "usage_type": "mobile_rum_units",
                        "value": null
                    },
                    {
                        "usage_type": "rum_units",
                        "value": 10
                    }
                ]
            }
        }
    ],
    "meta": {
        "pagination": {
            "next_record_id": "h16750512006f13bbfc4376c743828aeb52a5dbff51-0"
        }
    }
}

Então eu tenho que rodar a API de novo com esse ID para ter a continuação. (No script que criei teria que adicionar no final do endereço da requests.get da API "https://api.datadoghq.com/api/v2/usage/hourly_usage?filter[product_families]=rum&page[next_record_id]=h169336800005cd546b5f16f2368b47b53a17e9be7b-0").

Como eu preciso dos dados do ano inteiro, podem imaginar quantas vezes eu tenho que rodar isso para pegar todos os dados (e cada vez é uma ID diferente)

Então eu preciso que o script rode esse endereço da request uma vez "pura", detecte se tem o "next_record_id" no final do resultado. Se tiver, ele pega esse ID e roda a API de novo dessa vez com o "next_record_id" no final (que nem mostrei no link acima).
Se o resultado tiver outro ID, ele pega esse ID e roda de novo com esse novo ID e assim por diante, até quando rodar e não tiver mais a opção do "next_record_id" (isso quer dizer que não tem mais dados para mostrar e chegou no final).

 

O script que mandei acima pega os dados e coloca bonitinho numa tabela, porém não sei como fazer pra ele capturar o ID automaticamente, rodar de novo com ess ID e o resultado adicionar nessa tabela.

Como falei, não entendo muito disso, então empaquei nessa parte.

 

Alguém consegue me ajudar?

 

(Desculpa se ficou meio difícil de entender, esta difícil até de explicar porque é meio complicado, mas podem me perguntar se tiverem duvidas)

Editado por taysa.dantas
Correção do texto
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...