# Trabalho com filas, tarefas, recursos e logs

> A partir da versão 1.27, todos os componentes da plataforma suportam o acesso a filas, tarefas, recursos e logs não apenas por meio de GUID, mas também por meio de seus nomes (Name).

Abaixo estão exemplos de chamadas para recursos, tarefas e logs do Orquestrador. Essas solicitações podem ser executadas conforme necessário a partir do código do robô Python.

```
import base64
import json
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
host = 'http://192.168.1.111:4500' #host do orquestrador
robot_guid = 'da8bc2f0-8065-4385-b867-405e66b8e151' #GUID do robô
headers = {
    'Authorization': 'Basic ' + base64.b64encode(robot_guid.encode('utf-8')).decode('utf-8')
}

#Adicionando uma nova tarefa na fila de tarefas '0cff3e77-78fc-405e-98c9-ef5076c0c883'
new_task = {
            'queue_guid': '0cff3e77-78fc-405e-98c9-ef5076c0c883',
            'name': 'Nova tarefa',
            'parameters': json.dumps({'query_id': '123', 'query_link': 'D:\CommonFolder\Packet123.zip', 'query_status': 'new', 'doc_type': 'PCT', 'doc_status': 'new'})
}
r = requests.post(host + '/api/task/create', data=new_task, headers=headers, verify=False)

#Para controle, exibimos o resultado da solicitação - GUID da tarefa criada
added_task = json.loads(r.text)
print('GUID da tarefa adicionada: ', added_task ['guid'])

#Obtendo a última tarefa na fila (sem filtros)
r = requests.get(host + '/api/queue/lastTask/0cff3e77-78fc-405e-98c9-ef5076c0c883', headers=headers, verify=False)
print('resultado de api/queue/lastTask', r)
print('    ', r.text)
new_task = json.loads(r.text)

#Dicionário de status das tarefas
STATUS_NEW   = 0;    #Nova tarefa
STATUS_IN_PROGRESS  = 1;   #Tarefa em andamento
STATUS_SUCCESS  = 2;    #Tarefa concluída com sucesso
STATUS_FAILED  = 3; #Tarefa falhou com Exceção de Aplicação
STATUS_FAILED_BUSINESS  = 4; #Tarefa falhou com Exceção de Negócio
STATUS_POSTPONED   = 5;   #Tarefa adiada até o horário especificado
STATUS_ABANDONED   = 6;  #Tarefa abandonada (não processada a tempo)

#Atualizando o status da tarefa obtida anteriormente
task_update = {
    'guid': new_task['guid'],
    'status': 1
}
r = requests.put(host + '/api/task/update', data=task_update, headers=headers, verify=False)
print('resultado de /api/task/update', r.text)

#Obtendo recurso (asset)
r = requests.get(host + '/api/asset/read/533daa45-8c3e-42ff-a5ae-b5023715d929', headers=headers, verify=False)
print('resultado de /api/asset/read/', r.text)
asset = json.loads(r.text)

#Atualizando recurso
asset_update = {
    'guid': asset['guid'],
    'name': 'novo nome',  #Nome do recurso
    'text': 'novo texto',  #Texto, login (para o tipo Credenciais) ou calendário serializado
    'password': 'nova senha'  #Nova senha
}
r = requests.put(host + '/api/asset/update', data=asset_update, headers=headers, verify=False)
print('resultado de /api/asset/update/', r.text)

#Adicionando uma nova entrada no log
new_log = {
    'robot_guid': '9be0687d-4e00-4742-a53f-c9b622d076db',
    'process_version_guid': '4443fc75-4b55-41a2-bb61-9132b6e55d6b',
    'job_guid': '55056968-cb1b-4919-ad7b-9370c6e81e55',
    'level': 'Info',   #Valores permitidos 'Info', 'Critical', 'Error', 'Warning', 'Debug'
    'message': 'Nova mensagem'
}
r = requests.post(host + '/api/log/create', data=new_log, headers=headers, verify=False)
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sherparpa.ru/pt/sherpa-rpa/sherpa-orchestrator/python-sherpa-framework/rabota-s-ocheredyami-zadachami-resursami-i-logami.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
