wiki:programmersguide/tcp

Version 33 (modified by raphael.costa, 10 years ago) (diff)

--

Comunicação TCP

A comunicação da aplicação web e as instâncias dos serviços deve ser feita através do protocolo TCP.

As mensagens devem ser compostas por 3 partes:

  • Tamanho da mensagem + tamanho do sinal (inteiro de 4 bytes)
  • Sinal (inteiro de 4 bytes)
  • Mensagem [opcional]

Sinais disponíveis

0 TERMINATE_SERVICE_SIGNAL Desliga o serviço
1 STATUS_SIGNAL Requisição de informações sobre o serviço
2 ADD_DATA_SIGNAL Envio de dados
3 START_PROCESS_SIGNAL Inicializa um processo (Coleta, análise,...)
4 LOG_SIGNAL Sinal utilizado para que o serviço envie mensagens de erro para a aplicação Web
5 REMOVE_DATA_SIGNAL Sinal utilizado remoção de dados
6 PROCESS_FINISHED_SIGNAL Sinal utilizado notificar que um processo foi finalizado
7 UPDATE_SERVICE_SIGNAL Sinal utilizado para atualizar as informações de um serviço, é obrigatório o envio desse sinal quando um serviço é iniciado.
8 VALIDATE_PROCESS_SIGNAL Sinal utilizado para as validar as informações de um processo.

UPDATE_SERVICE_SIGNAL

A mensagem deve ser um objeto JSon com as tags:

  • instance_id : INT
  • instance_name : STRING
  • listening_port : INT
  • number_of_threads : INT
  • log_database : JSONOBJECT
    • PG_HOST : STRING
    • PG_PORT : STRING
    • PG_USER : STRING
    • PG_PASSWORD : STRING
    • PG_DB_NAME : STRING

ADD_DATA_SIGNAL

Esse sinal contém os metadados que devem ser adicionados ao DataManager do serviço.

Mensagem

O envio de dados deve ser feito através de um objeto JSon composto por arrays de cada tipo de dado.

O JSon deve ser formatado de forma compacta, isso é, não deve ter quebras de linhas, todo ":" separador deve ser seguido por um único espaço.

As tags de tipos de dados aceitos :

  • DataProviders
  • DataSeries
  • Collectors
  • Analysis

Exemplo de mensagem

\x00\x00\x01\x09\x00\x00\x00\x02{"DataProviders": [{"active": true,"class": "DataProvider","data_provider_type": "FILE","description": "Testing provider","id": 1,"intent": 0,"name": "Provider","project_id": 1,"uri": "file:///home/user/MyDevel/terrama2-build/data/PCD_serrmar_INPE"}]}

REMOVE_DATA_SIGNAL

Esse sinal contém os metadados que devem ser removidos do DataManager do serviço.

Mensagem

O envio de dados deve ser feito através de um objeto JSon composto por arrays de ID's de cada tipo de dado.

O JSon deve ser formatado de forma compacta, isso é, não deve ter quebras de linhas, todo ":" separador deve ser seguido por um único espaço.

As tags de tipos de dados aceitos :

  • DataProviders
  • DataSeries
  • Collectors
  • Analysis

START_PROCESS_SIGNAL

Esse sinal contém os ids dos processos que devem ser iniciado imediatamento.

Mensagem

O envio de dados deve ser feito através de um objeto JSon composto por arrays de ID's.

O JSon deve ser formatado de forma compacta, isso é, não deve ter quebras de linhas, todo ":" separador deve ser seguido por um único espaço.

{
  "ids": [ INT ]
}

STATUS_SIGNAL

Quando um serviço receber um STATUS_SIGNAL, ele enviará uma resposta com o mesmo modelo de mensagem com o sinal STATUS_SIGNAL e um json com a mensagem.

As tags da mensagem de resposta são:

  • instance_id : INT
  • instance_name : STRING
  • start_time : STRING
  • terrama2_version : STRING
  • shutting_down : BOOL

VALIDATE_PROCESS_SIGNAL

A mensagem deve ser similar ao envio dos dados (ADD_SIGNAL)

{
  "Analysis": [ANALYSIS_OBJECT],
  "DataSeries": [DATASERIES_OBJECT]
}

A resposta deverá ser um json com os seguintes valores:

{
  "process_id": INT,
  "valid": BOOLEAN,
  "message": STR_OPTIONAL_MESSAGE_WITH_ERROR_OR_WARNING
}

LOG_SIGNAL

Um LOG_SIGNAL deve ser eviado com um json no formato:

{
  "process_ids": [ INT ],
  "begin": INT,
  "end": INT
}

Sendo process_id o id do processo que se quer o log, begin e end o índice do primeiro e último log.

Como respota o serviço enviará um json no formato

[
  "process_id": INT,
  "log": [
    {
      "process_id": INT,
      "status": INT,
      "start_timestamp": STRING:DATE TIME WITH TIME ZONE,
      "data_timestamp": STRING:DATE TIME WITH TIME ZONE,
      "last_process_timestamp": STRING:DATE TIME WITH TIME ZONE,
      "data": STRING,
      "messages": [
        {
          "type": INT,
          "description": STRING,
          "timestamp": STRING:DATE TIME WITH TIME ZONE,
        },
        ...
      ]
    },
    ...
  ]
]