Skip to content

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

License

Notifications You must be signed in to change notification settings

scieloorg/kernel

Repository files navigation

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:

$ 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-collectionsmongo-db-dsn dbname | kernelctl create-indexesmongo-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-collectionsmongo-db-dsn dbname | kernelctl create-indexesmongo-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 [email protected]. 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