wiki:programmersguide/tcp

Version 27 (modified by jano.simas, 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.

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

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

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

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
  • terrama2_version : STRING
  • shutting_down : BOOL

LOG_SIGNAL

Um LOG_SIGNAL deve ser eviado com um json no formato:

{
  "process_id": 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,
    "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,
      },
      ...
    ]
  },
  ...
]