Import External Process and Products - linea-it/dri GitHub Wiki

Descrição da Api para importação de Processos e produtos

Common

name type size Null Description
ticket Char 6 False Esta chave é usada para associar o owner do processo/produto importado a um usuário ver Ticket

Process

name type size Null Description
process_name Char 128 Internal name do processo de origem ou nome do pipeline que o gerou
process_id Char 128 Original process_id
owner_username Char 128 False Display name do proprietário original do processo.
process_start_date DateTime Data de inicio de execução do processo na origem
process_end_date DateTime Data de termino da execução do processo na origem
process_description Char 128 Descrição do processo ou Readme
process_comment Char 128 Comentário utilizado na submissão do processo
releases Lista dos Releases associados ao processo ver: {releases}
products Lista de {product} produtos do processo

Product

name type size Null Description
type Char False Define qual tipo de produto está sendo importado. os tipos atualmente suportados são: {catalog}, {map}, {mask}
class Char 128 False internal name da classe de produto. verificar na API http://localhost:8000/productclass/.
name Char 128 False Internal name do produto na origem.
product_id Char 128 Id do produto na origem.
display_name Char 128 Display name do produto que sera utilizado pelas interfaces.
version Char 128 Versão do produto.
description Char 1024 Descrição do produto
releases Lista dos Releases associados ao produto ver: {releases}
fields Lista dos Fields associados ao produto ver: {fields}
filter Char 3 Banda ex: g, r, i, z, Y ... Todos os valores disponíveis podem ser obtidos na Api projecthost/filters/.

Obs: Caso os produtos não possuam campos field(s) e release(s) estes devem ser do tipo lista vazia. Caso contrário ocorrerá erro no registro do produto.

Catalog

name type size Null Description
schema Char 128 Schema name da tabela no banco de catalogos quando houver.
table Char 128 False Table name no banco de catalogos.

Map

name type size Null Description
schema Char 128 Schema name da tabela no banco de catalogos quando houver.
table Char 128 False Table name no banco de catalogos.
nside PositiveSmallInteger False valores aceitos para nsize: [16, 32, 64, 128, 256, 512, 1024, 2048, 4096].
ordering Char 8 False valores aceitos para ordering: [ring, nest].

Mask

name type size Null Description
schema Char 128 Schema name da tabela no banco de catalogos quando houver.
table Char 128 False Table name no banco de catalogos.
filter Char 3

Releases

Este atributo possui o mesmo comportamento para processo ou produto, usa o internal_name de um release para fazer a ligação entre o processo ou produto com o release. os valores aceitos podem ser obtidos na Api http://localhost:8000/releases/. deve ser sempre uma lista mesmo que só tenha um release o valor deve ser passado como array. ex: "releases": ["y3a1_coadd_test_01"]

Fields

Este atributo permite fazer a ligação entre um produto e um field, deve ser utilizado com produtos que foram gerados a partir de um release com mais de um field exemplo produtos gerados pelo Y1A1 com seus fields SPT, Stripe82, etc. nestes casos o atributo releases pode ser omitindo e no momento da importação sera criada a ligação com os respectivos releases a partir dos seus fields. para releases sem fields ou com um único field (All) esse atributo pode ser ignorado e a ligação pode ser feita usando apenas o campo releases. os fields disponiveis podem ser obtidos pela API na url projecthost/fields/ ex: "fields": ["y1a1_coadd_stripe82", "y1a1_coadd_spt"]

Exemplo:

Este exemplo importa um processo com 3 produtos de tipos diferentes map, catalog e mask. para importar esse processo deve se fazer uma Ajax Request para a API usando os seguintes parametros Request

method: POST

url: http://localhost:8000/importexternalprocess/ Substituir localhost pelo projecthost

Headers:

Content-Type: application/json

Authorization: Token string_token ver Authorization

Body:

{
    "ticket":"XQW8283",
    "process": {
        "owner_username": "carlosadean",
        "process_name": "internal_name_do_processo",
        "process_id": "10022250",
        "process_start_date": "2016-06-27T10:00:00Z",
        "process_end_date": "2016-06-27T08:00:00Z",
        "process_description": "some process description",
        "process_comment": "some comments about my process",
        "releases": ["y3a1_coadd_test_01"],
        "products": [{
            "type": "map",
            "class": "systematic_maps_mag_limit",
            "product_id": "1001",
            "name": "test_maps_ring",           
            "display_name": "My Map 5",
            "version": "1.0",            
            "schema": "",
            "table": "tablename",
            "releases": ["y3a1_coadd_test_01"],
            "nside":4096,
            "ordering":"ring",
            "filter": "g",
            "description": ""
        },{
            "type": "catalog",
            "class": "galaxy_clusters",
            "product_id": "1002",
            "name": "my_galaxy_clusters_catalog",            
            "display_name": "My Catalog",
            "version": "1.0",           
            "schema": "",
            "table": "tablename",
            "releases": ["y3a1_coadd_test_01"],
            "description": ""            
        },{
            "type": "mask",
            "class": "molygon",
            "product_id": "1003",
            "name": "test_mask",
            "display_name": "My Mask 1",
            "version": "1.0",                       
            "schema": "",
            "table": "tablename",
            "releases": ["y3a1_coadd_test_01"],
            "filter": "g",
            "description": "",
        }]
    }
}

Authorization

A autorização para realizar um import é composta por 2 elementos:

Token

O token é utilizado para autenticar a requisição esse atributo não representa um usuário mas a Instância ou aplicação que está realizando a integração. através deste parâmetro que deve ser passado pelo Header da requisição é que o import vai determinar a origem do que está sendo importado, cada aplicação que for ter acesso a esta integração deve ser adicionada a API ver Create Token. Obs: o valor do parametro dever ter a string Token seguida de um espaçao e depois o token. ex: Authorization: Token f114316cea318f3ad8c08156a2fb3bc01518a223

Ticket

O ticket é associado a um usuario e senha e será uma chave composta por letras e números que deve ser obitida pela API, e deve ser adquirida antes da requisição de import.

Request

method: POST

url: http://localhost:8000/importauthorization/ Substituir localhost pelo projecthost

Headers:

Content-Type: application/json

Authorization: Basic string_authorization essa string é gerada com por uma base64(username + ':' + password)

A reposta dessa Requisição vai ser:

{
    "ticket": "TET5560"
}

Exemplo de para gerar a string_authorization no javascript.

var key = window.btoa(username + ':' + password);

Troubleshooting

  1. A interface de produção não possui debug ativado então retornará erro 500 do servidor web. Para debug de problemas utilize a versão de testes.

  2. Para testes de inserção de dados utilizar a extensão RESTer no Mozilla e preencher com os dados abaixo:

Headers:

Method: POST URL: https://example.com/dri/api/importexternalprocess/

Name: Content-Type Value: application/json

Name: Authorization Value: Token

Body

Copiar e colar o conteúdo do .json