Ir para o conteúdo

Logs de Execução

Os logs são uma maneira muito poderosa de rastrear a execução de sua automação e coletar métricas.

Os logs estão disponíveis para visualização e download através do menu Log de Execução.

Logs

Ao selecionar um log para visualizar, você pode filtrar por data e baixar imediatamente um arquivo CSV, JSON ou Excel dos seus dados.

Lista deLogs

Dica

Explore o Gerador de Snippet para obter exemplos de código que facilitam as manipulações de logs, acesse e aprenda como criar uma nova entrada de log, buscar dados de log, baixar como CSV e deletar um log inteiro via código.

Os snippets gerados estão disponíveis nas linguagens Python, Java, JavaScript e TypeScript.

Importante

Para visualizar os exemplos de código, primeiro você precisará criar uma estrutura de log.

Criar log usando o BotCity Maestro

Através da interface do BotCity Maestro, você pode criar e manipular logs personalizados para cada uma de suas necessidades.

Clicar no botão Novo log o levará à tela de criação de log, onde você pode definir o label do log, que é o ID exclusivo a ser usado ao interagir com este log através do SDK ou API do BotCity Maestro, bem como as colunas.

Novo log

Você pode criar quantos logs desejar para melhor organizar seus dados e gerenciar suas automações.

Como criar uma entrada de log usando o Maestro SDK

Você pode facilmente criar uma nova entrada de log usando o Maestro SDK no código da sua automação.

Aviso

Para conseguir criar uma nova entrada de log via código, é necessário que a estrutura do log já esteja criada no Maestro.

Instalação do SDK

Caso você ainda não tenha a dependência instalada, basta seguir essas instruções:

pip install botcity-maestro-sdk

Importante

Além de instalar, lembre-se de incluir a dependência no arquivo requirements.txt do bot.

<repositories>
    <repository>
        <id>nexus-botcity-public</id>
        <url>https://devtools.botcity.dev:8081/repository/botcity-public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

<dependencies>
    <!-- Your other dependencies -->
    <dependency>
        <groupId>dev.botcity</groupId>
        <artifactId>maestro-sdk</artifactId>
        <version>2.0.3</version>
    </dependency>
</dependencies>
npm i @botcity/botcity-maestro-sdk
npm i @botcity/botcity-maestro-sdk

Importando o SDK

Após a instalação, basta importar a dependência e instanciar o Maestro SDK:

# Importando a dependência do Maestro SDK
from botcity.maestro import *

# Desabilitando erros caso não exista conexão com o Maestro
BotMaestroSDK.RAISE_NOT_CONNECTED = False

# Instanciando o Maestro SDK
maestro = BotMaestroSDK.from_sys_args()
# Buscando os detalhes da tarefa atual sendo executada
execution = maestro.get_execution()
// Importando a dependência do Maestro SDK
import dev.botcity.maestro_sdk.*;
...

public void action(BotExecution botExecution) {

    try {
        // Instanciando o Maestro SDK
        BotMaestroSDK maestro = new BotMaestroSDK();
        maestro.login(botExecution);
    ...
// Importando a dependência do Maestro SDK
const { BotMaestroSdk } = require('@botcity/botcity-maestro-sdk')

// Obtendo parâmetros passados pelo Runner
const args = process.argv.slice(2)
const [server, taskid, token] = args

// Login com as informações da página Amb. Desenvolvedor
const maestro = new BotMaestroSdk()
maestro.login("YOUR_SERVER_HERE", "YOUR_USER_HERE", "YOUR_KEY_HERE")

// Buscando os detalhes da tarefa atual sendo executada
const executionTask = await maestro.getTask(taskid)
// Importando a dependência do Maestro SDK
import { BotMaestroSdk } from '@botcity/botcity-maestro-sdk'

// Obtendo parâmetros passados pelo Runner
const args = process.argv.slice(2)
const [server, taskid, token] = args

// Login com as informações da página Amb. Desenvolvedor
const maestro: BotMaestroSdk = new BotMaestroSdk()
maestro.login("YOUR_SERVER_HERE", "YOUR_USER_HERE", "YOUR_KEY_HERE")

// Buscando os detalhes da tarefa atual sendo executada
const executionTask: Task = await maestro.getTask(taskid)

Criando uma nova entrada de log

# Importando biblioteca datetime para definir o timestamp da execução
import datetime
# Criando uma nova entrada de log no Maestro.
maestro.new_log_entry(
    activity_label="logLabel",
    values = {
        "timestamp": datetime.datetime.now().strftime("%Y-%m-%d_%H-%M"),
        "records": "10",
        "status": "SUCCESS"
    }
)
// Definindo dia e hora de execução
String timestamp = new SimpleDateFormat("yyyy-MM-dd_HH-mm").format(new java.util.Date());

// Criando uma nova entrada de log no Maestro.
Map<String,Object> values = new HashMap<String,Object>();
values.put("timestamp", timestamp);
values.put("records", "10");
values.put("status", "SUCCESS");

maestro.newLogEntry("logLabel", values);
// Criando uma nova entrada de log no Maestro.
await maestro.logEntry(
    "logLabel",
    {
        timestamp: new Date().toISOString(),
        records: "10",
        status: "SUCCESS"
    }
)
// Criando uma nova entrada de log no Maestro.
await maestro.logEntry(
    "logLabel",
    {
        timestamp: new Date().toISOString(),
        records: "10",
        status: "SUCCESS"
    }
)

Código completo

from botcity.core import DesktopBot
from botcity.maestro import *

# Importando biblioteca datetime para definir timestamp da execução.
import datetime

# Desabilitando erros caso não exista conexão com o Maestro
BotMaestroSDK.RAISE_NOT_CONNECTED = False

def main():
    maestro = BotMaestroSDK.from_sys_args()
    execution = maestro.get_execution()

    # Criando uma nova entrada de log no Maestro.
    maestro.new_log_entry(
        activity_label="ResultsLog",
        values = {
            "timestamp": datetime.datetime.now().strftime("%Y-%m-%d_%H-%M"),
            "records": "10",
            "status": "SUCCESS"
        }
    )

    bot = DesktopBot()
    # Implemente aqui a sua lógica...
    ...

def not_found(label):
    print(f"Element not found: {label}")

if __name__ == '__main__':
    main()
import dev.botcity.framework.bot.DesktopBot;
import dev.botcity.maestro_sdk.BotExecutor;
import dev.botcity.maestro_sdk.BotMaestroSDK;
import dev.botcity.maestro_sdk.model.AlertType;
import dev.botcity.maestro_sdk.runner.BotExecution;
import dev.botcity.maestro_sdk.runner.RunnableAgent;

public class FirstBot extends DesktopBot implements RunnableAgent
{
    public FirstBot() {
        try {
            setResourceClassLoader(this.getClass().getClassLoader());
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void action(BotExecution botExecution) {

        try {
            BotMaestroSDK maestro = new BotMaestroSDK();
            maestro.login(botExecution);

            // Definindo dia e hora de execução
            String timestamp = new SimpleDateFormat("yyyy-MM-dd_HH-mm").format(new java.util.Date());

            // Criando uma nova entrada de log no Maestro.
            Map<String,Object> values = new HashMap<String,Object>();
            values.put("timestamp", timestamp);
            values.put("records", "10");
            values.put("status", "SUCCESS");

            maestro.newLogEntry("ResultsLog", values);

            // Implemente aqui a sua lógica...
            ...

        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    private void notFound(String label) {
        System.out.println("Element not found: "+label);
    }

    public static void main(String[] args) {
        BotExecutor.run(new FirstBot(), args);
    }
}
const main = async () => {
    const { BotMaestroSdk } = require('@botcity/botcity-maestro-sdk')

    const args = process.argv.slice(2)
    const [server, taskid, token] = args

    const maestro = new BotMaestroSdk()
    maestro.login("YOUR_SERVER_HERE", "YOUR_USER_HERE", "YOUR_KEY_HERE")

    const executionTask = await maestro.getTask(taskid)

    // Criando uma nova entrada de log no Maestro.
    await maestro.logEntry(
        "ResultsLog",
        {
            timestamp: new Date().toISOString(),
            records: "10",
            status: "SUCCESS"
        }
    )
}

main()
const main = async () => {
    import { BotMaestroSdk } from '@botcity/botcity-maestro-sdk'

    const args = process.argv.slice(2)
    const [server, taskid, token] = args

    const maestro: BotMaestroSdk = new BotMaestroSdk()
    maestro.login("YOUR_SERVER_HERE", "YOUR_USER_HERE", "YOUR_KEY_HERE")

    const executionTask: Task = await maestro.getTask(taskid)

    // Criando uma nova entrada de log no Maestro.
    await maestro.logEntry(
        "ResultsLog",
        {
            timestamp: new Date().toISOString(),
            records: "10",
            status: "SUCCESS"
        }
    )
}

main()

Dica

Consulte as outras operações que podemos fazer com logs utilizando o BotCity Maestro SDK e BotCity Maestro API.