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.
- Host: GitHub
- URL: https://github.com/scieloorg/kernel
- Owner: scieloorg
- License: bsd-2-clause
- Created: 2018-07-03T00:34:11.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2025-06-13T10:29:48.000Z (12 months ago)
- Last Synced: 2025-06-13T11:33:02.256Z (12 months ago)
- Topics: scielo-publishing-framework
- Language: Python
- Homepage: https://docs.google.com/document/d/14YBl7--4ouaWBQhxzUYWRuhmegwnSYrDgupsED6rhvM/edit?usp=sharing
- Size: 547 KB
- Stars: 6
- Watchers: 10
- Forks: 11
- Open Issues: 59
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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