An open API service indexing awesome lists of open source software.

https://github.com/scieloorg/kernel

É o componente central da nova arquitetura de sistemas de informação da Metodologia SciELO, ainda em fase de desenvolvimento.
https://github.com/scieloorg/kernel

scielo-publishing-framework

Last synced: 5 months ago
JSON representation

É o componente central da nova arquitetura de sistemas de informação da Metodologia SciELO, ainda em fase de desenvolvimento.

Awesome Lists containing this project

README

          

# Kernel

Kernel é o componente central da nova arquitetura de sistemas de informação da
Metodologia SciELO, ainda em fase de desenvolvimento. É responsável pela gestão,
preservação e desempenha o papel de fonte autoritativa dos dados de uma coleção
de periódicos científicos.

```
+------------+ +--------------------+
| Public | | OAI-PMH |
| website | | data provider, etc |
+------------+ +--------------------+
^ ^
| |
+-------------------+ +------------------------------+ +--------------+
| Data ingestion | | | | |
| workflow |------>| Kernel |----->| Integrations |
| | | | | |
+-------------------+ +------------------------------+ +--------------+
```

Principais características:

* Opera como um serviço Web, por meio de interface RESTful;
* Suporta a representação de fascículos ou qualquer outro grupo de documentos
por meio de uma abstração chamada *Documents bundle*;
* Preservação das versões dos metadados de Periódicos e *Documents bundle*;
* Preservação dos documentos XML e seus ativos digitais em múltiplas versões;
* Garantia da integridade referencial entre o documento em XML e seus ativos
digitais;
* Replicação por meio de log de mudanças e notificação em barramento de eventos.

Para mais informação sobre a nova arquitetura de sistemas de informação da Metodologia SciELO consulte https://docs.google.com/document/d/14YBl7--4ouaWBQhxzUYWRuhmegwnSYrDgupsED6rhvM/edit?usp=sharing

## Requisitos

* Python 3.7+
* MongoDB

## Implantação local

Configurando a aplicação:

diretiva no arquivo .ini | variável de ambiente | valor padrão
----------------------------------------|-----------------------------------------|--------------------
kernel.app.mongodb.dsn | KERNEL_APP_MONGODB_DSN | mongodb://db:27017
kernel.app.mongodb.dbname | KERNEL_APP_MONGODB_DBNAME | document-store
kernel.app.mongodb.replicaset | KERNEL_APP_MONGODB_REPLICASET |
kernel.app.mongodb.readpreference | KERNEL_APP_MONGODB_READPREFERENCE | secondaryPreferred
kernel.app.mongodb.writeto | KERNEL_APP_MONGODB_WRITETO | 1
kernel.app.mongodb.transactions.enabled | KERNEL_APP_MONGODB_TRANSACTIONS_ENABLED | False
kernel.app.prometheus.enabled | KERNEL_APP_PROMETHEUS_ENABLED | True
kernel.app.prometheus.port | KERNEL_APP_PROMETHEUS_PORT | 8087
kernel.app.sentry.enabled | KERNEL_APP_SENTRY_ENABLED | False
kernel.app.sentry.dsn | KERNEL_APP_SENTRY_DSN |
kernel.app.sentry.environment | KERNEL_APP_SENTRY_ENVIRONMENT |

A configuração padrão assume o uso de uma instância *standalone* do MongoDB. Para
uma instância de produção recomenda-se o uso de *replica sets*. Para mais detalhes
acesse https://docs.mongodb.com/manual/replication/.

Ao conectar-se a um *replica set*, a diretiva `kernel.app.mongodb.replicaset`
deve ser definida com o nome do *replica set*. Além disso, é possível informar os diversos
*seeds* do *replica set* por meio da diretiva `kernel.app.mongodb.dsn`,
separando suas URIs com espaços em branco ou quebra de linha.

De maneira a garantir a consistência dos dados em ambiente de produção, recomenda-se que seja
habilitada a diretiva `kernel.app.mongodb.transactions.enabled`. Esta diretiva depende do uso
de *replica sets*. Recomenda-se o uso do MongoDB 4.4+, caso contrário tanto o banco de dados
quanto as coleções terão de ser criadas explicitamente pelo DBA. Para mais detalhes acesse
https://docs.mongodb.com/master/core/transactions/.

Configurações avançadas:

variável de ambiente | valor padrão
--------------------------|-------------
KERNEL_LIB_MAX_RETRIES | 4
KERNEL_LIB_BACKOFF_FACTOR | 1.2

### Executando via código-fonte e Pip:

```bash
$ git clone https://github.com/scieloorg/kernel.git
$ cd kernel
$ pip install -r requirements.txt && python setup.py develop
$ pserve development.ini
```

Esta configuração espera uma instância de MongoDB escutando *localhost* na
porta *27017*.

Na primeira vez será necessário criar a estrutura e os índices do banco de dados. Para tal
execute o comando `kernelctl create-collections`*`mongo-db-dsn dbname`*` | kernelctl create-indexes`*`mongo-db-dsn dbname`*.

### Executando via Docker:

`$ docker-compose up -d`

Na primeira vez será necessário criar a estrutura e os índices do banco de dados:

`$ docker-compose exec webapp kernelctl create-collections`*`mongo-db-dsn dbname`*` | kernelctl create-indexes`*`mongo-db-dsn dbname`*

Testando o registro de um documento de exemplo:

```
curl -X PUT -H 'Accept: application/json' -H 'Content-Type: application/json' http://0.0.0.0:6543/documents/0034-8910-rsp-48-2-0347 -d '{"data": "https://raw.githubusercontent.com/scieloorg/packtools/master/tests/samples/0034-8910-rsp-48-2-0347.xml", "assets": [{"asset_id":"0034-8910-rsp-48-2-0347-gf01", "asset_url":"http://www.scielo.br/img/revistas/rsp/v48n2/0034-8910-rsp-48-2-0347-gf01.jpg"},{"asset_id":"0034-8910-rsp-48-2-0347-gf01-en", "asset_url":"http://www.scielo.br/img/revistas/rsp/v48n2/0034-8910-rsp-48-2-0347-gf01-en.jpg"},{"asset_id":"0034-8910-rsp-48-2-0347-gf02", "asset_url":"http://www.scielo.br/img/revistas/rsp/v48n2/0034-8910-rsp-48-2-0347-gf02.jpg"},{"asset_id":"0034-8910-rsp-48-2-0347-gf02-en","asset_url":"http://www.scielo.br/img/revistas/rsp/v48n2/0034-8910-rsp-48-2-0347-gf02-en.jpg"},{"asset_id":"0034-8910-rsp-48-2-0347-gf03", "asset_url":"http://www.scielo.br/img/revistas/rsp/v48n2/0034-8910-rsp-48-2-0347-gf03.jpg"},{"asset_id":"0034-8910-rsp-48-2-0347-gf03-en","asset_url":"http://www.scielo.br/img/revistas/rsp/v48n2/0034-8910-rsp-48-2-0347-gf03-en.jpg"},{"asset_id":"0034-8910-rsp-48-2-0347-gf04", "asset_url":"http://www.scielo.br/img/revistas/rsp/v48n2/0034-8910-rsp-48-2-0347-gf04.jpg"},{"asset_id":"0034-8910-rsp-48-2-0347-gf04-en","asset_url":"http://www.scielo.br/img/revistas/rsp/v48n2/0034-8910-rsp-48-2-0347-gf04-en.jpg"}]}'
```

e em seguida:

```
curl -X GET -H 'Accept: text/xml' http://0.0.0.0:6543/documents/0034-8910-rsp-48-2-0347
```

## Licença de uso

Copyright 2018 SciELO . Licensed under the terms
of the BSD license. Please see LICENSE in the source code for more
information.

https://github.com/scieloorg/document-store/blob/master/LICENSE