# Configuração do SmartSense Server

## Introdução

Esse manual descreve a configuração dos componentes do lado do servidor da aplicação *GBS SmartSense*. O GBS SmartSense é uma aplicação desenvolvida para monitorar Clusters GBDS, permitindo ao usuário visualizar relatórios em tempo real sobre a saúde e o desempenho do ambiente.

O procedimento de configuração deve ser feito somente depois do passo de instalação. Para mais informações, consulte o [Manual de Instalação do GBS Apps](https://docs.griaule.com/componentes-web/gbsappssetup).

## Configuração

Os passos de configuração são:

1. Configure o Tomcat;
2. Configure os Certificados;
3. Gere a senha criptografada;
4. Instale o Elastic Stack (ELK);
5. Finalize as configurações no arquivo config.properties.

Todos os passos são descritos abaixo. Um exemplo do arquivo `config.properties` pode ser encontrado na seção [Exemplo do Arquivo de Configuração](#exemplo-do-arquivo-de-configuracao).

{% hint style="danger" %}
Todas as linhas devem estar presentes no arquivo de configuração. Comentar ou deletar linhas pode causar comportamentos inesperados. Para informações adicionais, contate o Time de Suporte da Griaule.
{% endhint %}

### Configuração do Tomcat

Edite o arquivo de configuração do Tomcat para configurar os certificados e a porta que a aplicação usará.

```sh
vi /var/lib/tomcats/smart-sense/conf/server.xml
```

Para mudar a porta, procure por `Connector port=`. Essa é a porta para operações backend.

### Configuração de Certificados

Para habilitar autenticação SSL, procure por `connector port=` no arquivo `/conf/server.xml`.

Existem duas entradas. A comentada é a configuração para SSL. Remova os delimitadores de comentários `<!--` e `-->`, então ajuste os seguintes parâmetros:

```properties
port="58194"
keystoreFile="/home/griaule/keystore"
keystorePass="password"
keyAlias="1"
clientAuth="true"
truststoreFile="/home/griaule/keystore"
truststorePass="password"
```

O parâmetro `port` deve ser a porta de rede desejada para a aplicação.

Mude o caminho do `keystoreFile` e o `truststoreFile` para os valores apropriados. Faça o mesmo para o `keystorePass` e o `truststorePass`.

O parâmetro `clientAuth="true"` irá requerer autenticação do servidor para o cliente e do cliente para o servidor. Isso significa que o cliente necessitará importar o certificado no navegador para poder acessar a aplicação.

{% hint style="warning" %}
Quando **clientAuth** é definida como *true*, o administrador do sistema deve fornecer o arquivo **certificate.pfx** para os usuários finais.
{% endhint %}

### Criptografia da senha do Banco de Dados

No arquivo `config.properties`, o parâmetro `jdbc.password` é uma senha criptografada. Para gerar a senha criptografada, siga os seguintes passos:

1. Vá para o seguinte diretório:

   ```sh
   cd /var/lib/tomcats/smart-sense/webapps/gbs-smart-sense-server/WEB-INF/lib
   ```
2. Execute o comando:

   ```sh
   java -cp gbs-common-db-<versão>.jar com.griaule.commons.util.EncryptUtil <senhaDesejada>
   ```
3. A senha criptografada aparecerá depois da mensagem: *"Encrypted password is:"*

{% hint style="info" %}
Guarde a senha criptografada. Ela será usada em configurações posteriores.
{% endhint %}

### Arquivo de Configuração da Aplicação

Para configurar o arquivo, abra-o com:

```sh
vi /var/lib/tomcats/smart-sense/conf/config.properties
```

As mudanças mais importantes nesse arquivo são os parâmetros `jdbc.url`, `jdbc.username`, `jdbc.password` e `gbds.url`. Configure-os de acordo com seu ambiente.

O arquivo de configuração completo é mostrado na seção [Exemplo do Arquivo de Configuração](#exemplo-do-arquivo-de-configuracao).

{% hint style="info" %}
Lembre-se de substituir a senha criptografada gerada na seção [Criptografia da senha do Banco de Dados](#criptografia-da-senha-do-banco-de-dados) neste arquivo.
{% endhint %}

#### Configurações do SmartSense

O último passo é configurar o IP e a porta da aplicação que o usuário final irá acessar. Ele deve ser o mesmo IP e porta configurado na seção [Configuração do Tomcat](#configuracao-do-tomcat).

```properties
smart-sense.ip=<ip>
smart-sense.port=<port>
smart-sense.protocol=<protocol>
```

{% hint style="warning" %}
Certifique-se de que os parâmetros de configuração `smart-sense.ip`, `smart-sense.port` e `smart-sense.protocol` estejam corretamente especificados no arquivo `config.properties`. Em diversos casos, o IP será o mesmo para diversas aplicações. Contudo, cada aplicação possuirá uma porta **diferente e única**.
{% endhint %}

#### Nós (opcional)

Opcionalmente, em vez de usar a [interface gráfica do SmartSense](https://docs.griaule.com/aplicacoes/smartsense), você pode configurar os nós que serão monitorados inserindo-os diretamente na tabela `smartsense.hosts` no banco de dados. Para fazer isso, execute o seguinte comando no banco de dados, substituindo os *placeholders* pelos valores corretos:

```sql
INSERT INTO smartsense.hosts (hostname,ip,port,active) VALUES ('<server_hostname>','<ip>','<smartsense agent port>',1);
COMMIT;
```

## Instalando o Elastic Stack (ELK)

Siga para o [Manual de Instalação do ELK](https://docs.griaule.com/ferramentas-auxiliares/elk) para instruções detalhadas de como instalar e configurar o Elastic Stack.

## Finalizando as Configurações

Após completar todos os passos de configuração, volte para o [Manual de Instalação do GBS Apps - Seção de Configuração](https://docs.griaule.com/gbsappssetup#configuracoes).

## Exemplo do Arquivo de Configuração

Essa seção mostra um exemplo do arquivo `config.properties`.

```properties
# *********************************************************************
#
#         /$$$$$$  /$$      /$$  /$$$$$$  /$$$$$$$  /$$$$$$$$
#        /$$__  $$| $$$    /$$$ /$$__  $$| $$__  $$|__  $$__/
#       | $$  \__/| $$$$  /$$$$| $$  \ $$| $$  \ $$   | $$
#       |  $$$$$$ | $$ $$/$$ $$| $$$$$$$$| $$$$$$$/   | $$
#        \____  $$| $$  $$$| $$| $$__  $$| $$__  $$   | $$
#        /$$  \ $$| $$\  $ | $$| $$  | $$| $$  \ $$   | $$
#       |  $$$$$$/| $$ \/  | $$| $$  | $$| $$  | $$   | $$
#        \______/ |__/     |__/|__/  |__/|__/  |__/   |__/
#
#
#
#         /$$$$$$  /$$$$$$$$ /$$   /$$  /$$$$$$  /$$$$$$$$
#        /$$__  $$| $$_____/| $$$ | $$ /$$__  $$| $$_____/
#       | $$  \__/| $$      | $$$$| $$| $$  \__/| $$
#       |  $$$$$$ | $$$$$   | $$ $$ $$|  $$$$$$ | $$$$$
#        \____  $$| $$__/   | $$  $$$$ \____  $$| $$__/
#        /$$  \ $$| $$      | $$\  $$$ /$$  \ $$| $$
#       |  $$$$$$/| $$$$$$$$| $$ \  $$|  $$$$$$/| $$$$$$$$
#        \______/ |________/|__/  \__/ \______/ |________/
#
# *********************************************************************

# DATABASE (RDB)
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://<host-ip>:3306/smartsense?useSSL=false
jdbc.username=griaule
jdbc.password=CDrt8vbewA2YAubPNOLZkw==
jdbc.dialect=org.hibernate.dialect.MySQLDialect
jdbc.showSql=false

# GBDS CONNECTION
gbds.url=http://<host-ip>:8085
gbds.user=gbds.authenticate
gbds.key=Griaule.123
gbds.logLevel=INFO
gbds.timeout=300

# SMARTSENSE - GUI
smart-sense.ip=<host-ip>
smart-sense.port=8126
smart-sense.protocol=http
locale=en_us

# SMARTSENSE - CONFIGURATION

fingerprint.useSDK=true
useLatentExtrator.fingerprint=true
useLatentExtrator.palmprint=false
image.convert.useJnbis=true
server.standalone.port=8085

gbds.smartSenseUser=smart_sense_server
sync.logLevel=INFO
same.user.simultaneous.login=false
notification.delay=5

poolingLoadBalancing.time=60
poolingLoadBalancing.active=true
poolingLoadBalancing.last=

# SMARTSENSE - ELK CONFIGURATION

linkEnroll=
linkIdentify=
linkIdentifyLatent=
linkUpdate=
linkVerify=

consumerQueue.active=true
```
