Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: migração para opensearch. #61

Closed
wants to merge 7 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions .github/release-drafter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
categories:
- title: '🚀 Melhorias'
labels:
- 'melhoria'
- title: '🐛 Bugs'
labels:
- 'bug'
- title: '🧰 Manutenção'
labels:
- 'manutencao'

exclude-labels:
- duplicate
- invalid
- wontfix
- skip-changelog

change-template: '- $TITLE (#$NUMBER)'
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
name-template: 'v$RESOLVED_VERSION'
template: |
$CHANGES

autolabeler:
# Tag any PR with "!" in the subject as major update. In other words, breaking change
- label: 'melhoria'
title: 'feat'
- label: 'bug'
title: 'fix'

version-resolver:
minor:
labels:
- 'melhoria'
patch:
labels:
- 'bug'
default: patch
25 changes: 25 additions & 0 deletions .github/workflows/release-drafter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Release Drafter

on:
workflow_dispatch:
push:
branches:
- main
pull_request:
types: [opened, reopened, synchronize, edited]
pull_request_target:
types: [opened, reopened, synchronize, edited]

permissions:
contents: read

jobs:
update_release_draft:
permissions:
contents: write
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: release-drafter/release-drafter@09c613e259eb8d4e7c81c2cb00618eb5fc4575a7 # v5.25.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
11 changes: 3 additions & 8 deletions .github/workflows/test_pull_request.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Test pull request
name: Teste pull request
on:
pull_request:
branches:
Expand All @@ -7,17 +7,12 @@ on:

jobs:
everything:
name: Build, test and show code coverage
name: Build da imagem do container do pipeline
runs-on: ubuntu-latest
steps:
- name: Checkout source code
uses: actions/checkout@master

- name: Build container image
run: |
make build

- name: Run tests and show code coverage
run: |
make coverage

make build-pipeline-image
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ __pycache__
.coverage
envvars
contrib/data
files/
130 changes: 130 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
## Contribuições

Atualmente, o pipeline é executado em um cluster Kubernetes e é composto por
vários componentes que precisam estar acessíveis ao processo de processamento
dos diários. Esses componentes incluem:

- Elasticsearch: usado para indexar os textos.
- S3/Minio/Digital Ocean Spaces: armazenamento utilizado para guardar os
arquivos dos diários e possíveis arquivos gerados pelo pipeline. Este
armazenamento pode ser qualquer aplicação que se comunique pelo protocolo S3.
- Apache Tika: serviço que transforma os arquivos dos diários oficiais em
arquivos de texto puro.
- PostgreSQL: base de dados utilizada para armazenar os metadados dos diários
obtidos pelos raspadores.

**Importante:** Devido à diversidade de componentes, é necessário destacar que
uma quantidade considerável de recursos computacionais da máquina é necessária
para executar tudo localmente.

Lembrando que, como todos os componentes rodam dentro de um cluster Kubernetes,
ao acessar manualmente algum serviço, será necessário expor o serviço para fora
do cluster ou executar comandos dentro do cluster.

### Executando o Pipeline Localmente

Para executar o pipeline a partir do código disponível no repositório, são
necessários alguns pré-requisitos:

- Um cluster Kubernetes (recomendado o
[Minikube](https://minikube.sigs.k8s.io/docs/)).
- [Podman](https://podman.io/getting-started/installation): utilizado para
criar os containers.
- [s3cmd](https://github.com/s3tools/s3cmd): comando utilizado apenas para preparar o ambiente de teste. Esse é o
comando utilizado para copiar alguns arquivos de diário para o ambiente de
teste

Para criar um cluster no Minikube com todos os componentes necessários
instalados, execute o seguinte comando:

```console
make setup
```

Após o cluster estar em execução, vamos preparar um ambiente com alguns dados
para serem processados pelo pipeline com o seguinte comando:

```console
make prepara-ambiente
```

Esse comando baixará e armazenará 5 diários, criará a base de dados no
PostgreSQL e marcará esses mesmos 5 diários como pendentes para serem
processados.

Antes de instalar o pipeline propriamente dito, crie as imagens dos containers
utilizados e carregue-as no cluster do Minikube. Caso contrário, o pipeline
baixará essas imagens do registro oficial do projeto do Querido Diário:

```console
make build-pipeline-image carrega-images
```

Depois que tudo estiver instalado no cluster, instale o pipeline:

```console
make install-pipeline
```

Em resumo, para executar o pipeline localmente sem alterações, execute:

```console
make setup prepara-ambiente build-pipeline-image carrega-images install-pipeline
```

Em seguida, você pode usar o `kubectl` ou `minikube kubectl` para acessar o
pipeline e seus componentes em execução no Kubernetes.

### Comandos Úteis

Nesta seção, estão descritos alguns comandos úteis para auxiliar no
desenvolvimento.

#### Credenciais dos Serviços Instalados

Tanto o PostgreSQL quanto o Elasticsearch precisam de credenciais para acesso.
Essas credenciais podem ser listadas com:

```console
make credenciais
```

#### Expor Serviços do Cluster para a Máquina Local

Para expor os serviços do MinIO e PostgreSQL e ter acesso fora do cluster, pode
ser utilizado o comando:

```console
make expoe-servicos
```

Esse comando colocará em execução em segundo plano alguns comandos `kubectl
port-forward`, mapeando os serviços do cluster Kubernetes para uma porta local.

Para remover esse mapeamento, execute:

```console
make derruba-servicos
```

#### Acessar a Base de Dados no Cluster

Se for necessário acessar o shell de acesso do PostgreSQL para executar algum
comando SQL, execute o seguinte comando:

```console
make shell-database
```

#### Executar Comandos no Elasticsearch

Como o Elasticsearch está rodando dentro do cluster, para enviar requisições
para o serviço, é necessário executar o comando `curl` de um container dentro
do cluster:

```console
kubectl run curl --rm -ti --restart="Never" --image curlimages/curl:8.4.0 -- -u elastic:<senha> http://querido-diario-elasticsearch-es-http.default.svc.cluster.local:9200/querido-diario
```

Observe que a `<senha>` pode ser obtida com o comando `make credenciais`.

Loading
Loading