Jump to content
Fórum Script Brasil
  • 0

Criando script para resultado de API


taysa.dantas

Question

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)

Edited by taysa.dantas
Correção do texto
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.9k
×
×
  • Create New...