GithubHelp home page GithubHelp logo

scieloorg / opac_proc Goto Github PK

View Code? Open in Web Editor NEW
4.0 10.0 8.0 4.1 MB

Metadata collection processing for the OPAC SciELO

Python 81.40% Thrift 0.65% Shell 0.12% CSS 0.18% JavaScript 1.83% HTML 14.97% Makefile 0.65% Dockerfile 0.20%
scielo-publishing-framework

opac_proc's Introduction

opac_proc

Processamento que coleta os dados desde o Article Meta e armazena eles no MongoDB para serem expostos pelo OPAC.

Badges:

Code Health Build Status Updates Python 3

Pre-requisitos

  • Docker
  • Acesso a uma instância de MongoDB com permissão de escita.
  • Acesso ao filesystem para escrita de logs

Pull

Caso você queira baixar a imagem pronta para executar:

docker pull scieloorg/opac_proc

docker build

Se você quer contruir a imagem localmente, execute:

docker build -t opac_proc .

docker run

Neste exemplo vamos a executar o processamento sobre a coleção com acorônimo: spa, mepeando o volume /app/logs ao diretorio local: /tmp/opac_proc_logs/. Também indicamos como acessar a instância do MongoDB para escrever os dados (localhost:27017) e que queremos utilzar o banco: opac_test. Finalmente indicamos que queremos ativar os logs no nível DEBUG.

docker run -v /tmp/opac_proc_logs/:/app/logs/ \
    -e OPAC_PROC_COLLECTION="spa" \
    -e OPAC_PROC_MONGODB_HOST="localhost" \
    -e OPAC_PROC_MONGODB_PORT="27017" \
    -e OPAC_PROC_MONGODB_NAME="opac_test" \
    -e OPAC_PROC_LOG_LEVEL="DEBUG" \
    opac_proc

Existem outros parametros de configuração, veja a continuação.

Configuração com variáveis de ambiente no container:

  • OPAC_PROC_LOG_LEVEL: nivel de log (opções: ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"]). Default: "INFO"
  • OPAC_PROC_LOG_FILE_PATH: caminho absoluto do arquivo de log. Default: "/app/log/.log"
  • OPAC_PROC_ARTICLE_META_THRIFT_DOMAIN: Dominio do article meta para conectar na API Thrift. Default: "articlemeta.scielo.org"
  • OPAC_PROC_ARTICLE_META_THRIFT_PORT: Porta do article meta para conectar na API Thrift. Default: "11720"
  • OPAC_PROC_COLLECTION: Acrônimo da coleção a ser processada. Default: "spa"
  • OPAC_PROC_MONGODB_NAME: Nome do banco mongodb, que armazenara os dados. Default: "opac"
  • OPAC_PROC_MONGODB_HOST: Host/IP do banco mongodb. Default: "localhost"
  • OPAC_PROC_MONGODB_PORT: Porta do banco mongodb. Default: 27017
  • OPAC_PROC_MONGODB_USER: [OPCIONAL] Usuário com acesso ao banco mongodb.
  • OPAC_PROC_MONGODB_PASS: [OPCIONAL] Senha do usuário com acesso ao banco mongodb.

Logs:

O arquivo de log fica armazendo na pasta /app/logs/. O nome do arquivo é a data de execução com formato: YYYY-MM-DD.log.

O diretorio de armazenamento do logs, esta disponível como volume (ver exemplo de docker run acima).

rodar com docker-compose:

Editar/ajustar os parâmetros no arquivo docker-compose.yml e executar.

docker-compose up

OBS: sempre vai recuparar a imagem de: scieloorg/opac_proc, para rodar com a instância local, troque: image: scieloorg/opac_proc por: build: .

opac_proc's People

Contributors

brunousml avatar cesarbruschetta avatar gustavofonseca avatar jamilatta avatar jfunez avatar patymori avatar pyup-bot avatar robertatakenaka avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

opac_proc's Issues

Como saber que a revista publica em Rolling Pass

A revista de Saúde Pública (SPA), tem atualmente um volume nesse formato.

No manager esse tipo de fascículo é identificado com o label: "volume issue" no valor do campo number

Precisamos estudar como isso é identificado no article meta para que possamos montar a grade de fascículos de forma correta.

Problemas rodando am2opac em novo ambiente

Problema:

  • A porta padrão do AM na configuração do am2opac não foi alterada;
  • Realizando um instalação nova num ambiente de produção, encontramos que ao rodar o am2opac esta dando erro pela falta de uma depenência (opac_ssm_api), o que aponta ao fato de precisar um stack SSM (em produção);
  • Também o processamento do am2opac não esta rodando em background, o que dificulta a execução no shell do container.

Objetivo:

  • Ajustar porta padrão do AM nas configurações do am2opac;
  • Resolver a instalação da dependência que falta (opac_ssm_api);
  • Montar um ambiente SSM, e acrescentar as configurações mínimas (host e porta) dessa nova instância na configuração do am2opac;
  • Testar o am2opac num ambiente de produção';
  • Realizar os ajustes no stack para as novas configurações;
  • mudar o am2opac para rodar em background (se for possível, caso contrario podemos testar com & no final do comando.

Test:

  • após o setup no ambiente de produção rodar o am2opac no shell do contanier;
  • verificar que os estáticos estão cadastrados normalmente na instância de SSM;
  • verficar que o processamento finalizou sem erros e os dados foram importados;

Garantir que todos os periódicos tenha o último fascículo.

Garantir que todos os periódicos tenha o último fascículo cadastrado.

No OPAC_SCHEMA definimos um embedded document que representa o último fascículo.

Considerando que todo periódico tem pelo menos 1 fascículo devemos ter sempre nesse embedded document o issue cadastrado e disponível.

Processamento SM (SciELO Manager)

Problema:

Não temos uma implementação do processamento para o SciELO Manager.

Objetivo:

Desenvolver um processamento para a carga completa e parcial dos dados armazenado no SciELO Manager.

Adicionar no opac_ssm_api no opac_proc

Para adicionar o opac_ssm_api no opac_proc é necessário alguns ajustes:

  • Necessário as variáveis que o opac_ssm_api espera para construir as classes *pb

  • Garantir que no compose_build não seja necessário um endpoint para coletar o .proto

Adicionar a capacidade de processar somente um subconjunto de artigos

Conversando com a equipe verificamos que é necessário podermos reprocessar somente um subconjunto.

Casos:

  1. Quando desejamos reprocessar somente artigos da versão XML (Caso bastante comum)

  2. Quando desejamos reprocessar somente um fascículo

  3. Quando desejamos reprocessar somente as imagens, pois, implementamos uma otimização de tamanho

etc...

[processamento] acrescentar processos para coleta de Press Release

Atualmente estamos efetuando a importação de Press Releases no admin do próprio opac. Sendo necessário portar este código para o opac_proc para centralizar os processamentos na ferramenta correta.

Caso de teste

opac_proc

1 . Processar a coleta de press releases
2 . Processar transformação de press releases
3 . Processar o carregamento de press releases para o opac

opac

  1. Garantir que os dados estão sendo exibidos na interface do opac

Processamento Parcial AM (Article Meta)

Problema:

Hoje contamos com um processamento que coleta todas os dados, isso não é o ideal.

Objetivo:

Precisamos melhorar o processamento para permitir a coleta parcial dos dados.

Observação:

Verificar no article meta a melhor formar de coletarmos dados parciais.

[Processamento] Verficar/Corrigir extração, transformação e cargar de Metricas (analytics) da Coleção

Problema:

Precisamos validar que a importação de dados "métricas da coleção" esteja sendo importado pelo processamento, nas diferentes fases: extração, transformação e carga e que estaja salvo de forma correta no modelo correspondente no banco do OPAC.

Objetivo:

Validar que a execução das diferentes fases do processamento da coleção esta importando as "métricas da coleção"

Validação (manual):
  1. verificar qual coleção esta configurada para ser processada (nas configurações das apps);
  2. coleta dos dados: consultar os totais mostrados ("Collection composition") no analytics de Journals, Issues, Documents/Articles e Citations;
  3. Iniciar o processo (importação) de extração da coleção;
    2.1 Após finalizado, verificar no modelo de Coleção extraída (e_collection no banco) o campo "metrics", que tem os totais coletados no paso 0;
  4. Iniciar o processo (importação) de transformação da coleção;
    3.1 Após finalizado, verificar no modelo da Coleção transformada (t_collection no banco) o campo "metrics", que tem os totais coletados no paso 0;
  5. Iniciar o processo (importação) de carga da coleção;
    4.1 Após finalizado, verificar no modelo da Coleção carregada (l_collection no banco) o campo "metrics", que tem os totais coletados no paso 0;
  6. Verficar na interface web do OPAC, na homepage, que tem os totais coletados no paso 0.

Criação de um "maço" de artigos Ahead of print.

Para que possamos ter a informação dos periódicos que estão em ahead of print é necessário no processamento varrer quais são os artigos que estão em ahead e adicionar ao fascículo do tipo ahead.

Pensei no processamento em não cadastrar fascículos do tipo ahead(consideramos isso um erro no legado), e varremos procurando por artigos em ahead of print e criamos um único "maço".

Acredito que isso pode ser um pós-processamento de identificar itens em ahead.

[BUG] Erro durante o processamento do am2opac para coleção scl

Ao executar o processamento recebo o erro:

Traceback (most recent call last):
  File "am2opac.py", line 742, in <module>
    main(sys.argv)
  File "am2opac.py", line 731, in main
    return run(options, pool)
  File "am2opac.py", line 647, in run
    bulk(options, pool)
  File "am2opac.py", line 597, in bulk
    pool.map(process_article, pissns)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 251, in map
    return self.map_async(func, iterable, chunksize).get()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 567, in get
    raise self._value
pymongo.errors.CursorNotFound: Cursor not found, cursor id: 149418961290

Consistência entre o processamento e as bases de dados

Após o processamento de transformação dos artigo vimos muitas inconsistências, ver e-mail enviado em 06/05/2017:


Coleção processada: Saúde Pública

Quantidades de periódicos: 19
Quantidade de fascículos: 1.995
Quantidade de artigos: 35.813

Números pós processamento:

Quantidade de ativos(todos os ativos cadastrados no SSM): 50.666 (IMG, PDF, HTML, XML)
Quantidade de buckets(Buckets no SSM representa fascículos): 1.858
Quantidade de artigos na versão HTML: 5.228 (São artigos que foram obtidos através do texto completo no Article Meta)
Quantidade de artigos na versão XML: 9.219 (São artigos que estão utilizando XML e que foram obtidos no sistema de arquivo do servidor de homologação)
Quantidade de imagens cadastradas: 3.635
Quantidade de pdfs cadastrados: 37.806

Reparem que a quantidade de artigos cadastrado é bastante inferior a quantidade total de artigo: 

35.813 - (5.228 + 9.219) = 35.813 - 14.447 = 21.366 artigos faltantes.

Isso significa que todos os ativos desses ~22M artigos não foram cadastrados no SSM ainda!, portanto a quantidade de ativos cadastrados deve crescer assim que descobrirmos o motivo dessa diferença.

A quantidade de pdfs é aceitável temos 35.813 considerando que temos as traduções... em princípio devemos ter um total de mais pdfs do que artigos, porém não sabemos o valor exato :-().

Para que possamos rastrear é necessário termos esses números da fonte (Isis ou Article Meta), acredito que realizando uma introspeção na base de dados do SciELO Saúde Pública seria uma boa idéia, Roberta poderia, por gentileza, nos ajudar a tirar alguns números da base de dados do SciELO Saúde Pública?, segue as perguntas que podemos fazer para a base de dados: 

Quantidade de artigos na versão XML? 
Quantidade de artigos na versão HTML?
Quantidade total de pdfs indicados na base?

Creio que isso pode nos ajudar!

Em paralelo acredito que o Fabio possa nos ajudar a verificar se o article meta esta entregando todos os HTML, para isso separei alguns PID que são indicados pelo processamento que não contém o conteúdo do artigo, segue: 

S0102-311X2008000300020
S1135-57272008000400005
S0042-96862011001000016
S0042-96862012000500010
S0042-96862010000800011
S0042-96862010000300011
S0042-96862011000300008
S0042-96862012001200011
S0042-96862002000300011
S0042-96862009000500011
S1413-81232005000400015
S1413-81232005000400021
S1413-81232005000400024
S1413-81232005000400026
S1135-57272004000500006
S0102-311X2012001000015
S1413-81232005000500028
S1413-81232005000500016
S1413-81232005000500007
S1413-81232005000500030
S1413-81232005000400027
S1413-81232005000500029
S1413-81232006000100011
S1413-81232009000200028
S1413-81232005000500015
S1413-81232005000500014
S1413-81232011001200022
S1413-81232011001300016
S1413-81232011001200026
S1413-81232011001300012
S1413-81232011001300015
S1413-81232011001200025
S1413-81232011001300023
S1413-81232011001300024
S1413-81232011001300019
S1413-81232011001300026
S1413-81232011001300018
S1413-81232011001300030
S1413-81232011001300027
S1413-81232011001300036
S1413-81232011001300031
S1413-81232011001300028
S1413-81232011001300035
S1413-81232012000100008
S1413-81232012000100005
S1413-81232012000100007
S1413-81232012000100009
S1413-81232012000100012
S1413-81232012000100011
S1413-81232012000100016

OBS.: Esse processamento é o processamento completo, ou seja foi realizado todas as fases do ETL para todos os artigos da coleção Saúde Pública. 

Devemos fazer um script simples para analizar os retornos e as inconsistências apresentadas pelas fontes ou pelo próprio processamento.

Atualizar para py3

Atualmente o processamento utilizar python2.7 para que possamos está com a versão do python mais recente, deve atualizar para o python3.5

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.