Uh oh!
There was an error while loading. Please reload this page.
Cria mapa de acessos por país de origem e tabelas de acessos gerais e por idioma - #263
Conversation
…ocale/analytics.pot -D analytics -d analytics/locale
pitangainnovare
commented
Jun 14, 2024
@robertatakenaka, não tenho permissão para marcar pessoas para revisar o PR. |
| data = [] | ||
| for i in json_results.get('Report_Items', [{},]): | ||
| if i.get('Title', '') == '': |
There was a problem hiding this comment.
@pitangainnovare talvez o que vc quer é i.get('Title') or '' no lugar de i.get('Title', '')
There was a problem hiding this comment.
No caso `x.get('chave', 'valor default'), só é usado o valor default na ausência da chave.
No caso sugerido, para valores considerados ausentes por padrão se usa o valor fornecido.
x.get('chave') or5O resultado é 5 se o resultado de x.get('chave') é [] ou None ou '' ou {} ou set()
| i_res = { | ||
| 'title': i['Title'], | ||
| 'article_language': choices.ISO_639_1.get(i.get('Article_Language', '').upper(), 'Undefined'), |
There was a problem hiding this comment.
@pitangainnovare verificar o comentário anterior... aqui não sei dizer se está correto ou não
There was a problem hiding this comment.
Sim, o mais correto seria algo como isso aqui:
# x pode ser algo comox= {'dado': None}
# Então, temos que isso falhax.get('dado', '').upper()
# E isso não
(x.get('dado') or'').upper()Farei a atualização. Obrigado.
| @@ -1078,7 +1078,7 @@ def get_usage_report(self, issn, collection, begin_date, end_date, granularity=' | |||
| self._clean_url_params(params, report_code) | |||
| response = requests.get( | |||
There was a problem hiding this comment.
@pitangainnovare procure no core / upload o módulo que estamos usando fetch_data e post_data como a funcionalidade de retry
| return chart_data | ||
| def _title_report_to_table_data(self, json_results): |
There was a problem hiding this comment.
@pitangainnovare seria bom colocar testes automáticos. Também me parece que seria uma função no repo do sushi. Será que já não existe uma biblioteca / função pronta para isso?
There was a problem hiding this comment.
O SUSHI entrega JSON. Aqui estamos convertendo esse JSON para um formato que o Highcharts entende/exige, que é a lib de gráficos usada no Analytics. Existe alguma compatibilidade entre essas libs js de gráfico (c3, d3, charts, highcharts, etc), mas não saberia dizer se é perfeita.
Caso seja algo implementado no repo SUSHI, provavelmente seria algo como:
_to_c3()
_to_d3()
to...
E isso também dependeria do gráfico a ser povoado em si. Às vezes é uma lista de pontos, às vezes é uma lista de listas, um dict, enfim.
No meu entendimento, mudando highcharts para outra versão ou outra lib, o JSON entregue permanece inalterado, bastando atualizar esse conversor de dados.
Mas podemos verificar se há um padrão. No fim, é só um pequeno processamento.
Quanto aos testes, sim. Vou avaliar aqui o que é possível e interessante.
| @@ -983,22 +983,78 @@ class UsageStats(): | |||
| def __init__(self, usage_api_base_url=None): | |||
| self.base_url = usage_api_base_url or 'http://usage.apis.scielo.org/' | |||
There was a problem hiding this comment.
É http mesmo. Https retorna ``default backend - 404'', ou seja, não está configurado no nginx.
| for p in i.get('Performance', {}): | ||
| p_metric_label = p.get('Instance', {}).get('Metric_Type', '') | ||
| for i in json_results.get('Report_Items') or []: | ||
| for p in i.get('Performance') or {}: |
There was a problem hiding this comment.
@pitangainnovare acho que isso está estranho
There was a problem hiding this comment.
@pitangainnovare talvez, se entendi bem a estrutura e a lógica, serial:
foriinjson_results.get('Report_Items') or [{}]:
forpini.get('Performance'):There was a problem hiding this comment.
Report_Items é uma lista de dicionários, exatamente. Dentro de cada dicionário, espera-se haver um campo "Performance". Isso é a estrutura do JSON sugerido do COUNTER:
Para mais informações, vide aqui há uma maneira de visualizar o JSON completo para todas as rotas: https://app.swaggerhub.com/apis/COUNTER/counter-sushi_5_0_api/5.0.3#/default/getReportsTRJ1
| for i in json_results.get('Report_Items', [{},]): | ||
| if i.get('Title') or '' == '': | ||
| for i in json_results.get('Report_Items') or []: | ||
| if (i.get('Title') or '') == '': |
There was a problem hiding this comment.
@pitangainnovare não seria fazer simplesmente: if no i.get('Title'):?
| PAGE_SIZE = 20 | ||
| FETCH_DATA_TIMEOUT = 100 |
There was a problem hiding this comment.
@pitangainnovare muito alto... geralmente 2 é padrão. A lógica do fetch_data, se não me engano vai aumentando exponencialmente o timeout
There was a problem hiding this comment.
Sim, verdade, lá no retry tá configurado o wait_exponential.
| {'title': 'Psicologia & Sociedade', 'article_language': 'Portuguese', 'unique_item_requests': 1000, 'total_item_requests': 1250}, | ||
| {'title': 'Psicologia & Sociedade', 'article_language': 'Spanish', 'unique_item_requests': 500, 'total_item_requests': 650}, | ||
| {'title': 'Revista do Departamento de Psicologia. UFF', 'article_language': 'Portuguese', 'unique_item_requests': 341, 'total_item_requests': 409}, | ||
| {'title': 'Revista do Departamento de Psicologia. UFF', 'article_language': 'English', 'unique_item_requests': 200, 'total_item_requests': 233}, |
There was a problem hiding this comment.
@pitangainnovare não se usa o valor de código iso?
There was a problem hiding this comment.
Aqui não, pois é daqui para a tabela HTML. O código ISO é anterior a esse passo.
@robertatakenaka, Fiz algumas simplificações e corrigi os timeouts, como indicado. |
pitangainnovare
commented
Oct 10, 2024
@robertatakenaka Fiz as modificações necessárias para termos dados por documento. Posso fazer merge e pedir a atualização da app? Esta nova seria a versão 2.2.0. Caso necessário, temos a versão 2.1.0 funcional. |


O que esse PR faz?
Este PR cria telas para exibir mapa de acessos por país de origem e tabelas de acessos gerais e por idioma de documento acessado. É uma substituição a algumas rotas frequentemente usadas para visualizar acessos das coleções.
Também faz algumas correções em traduções.
E remove tudo que se refere ao termo "Issues".
Onde a revisão poderia começar?
Por commits.
Como este poderia ser testado manualmente?
Instalar a app localmente e acessar o menus
Algum cenário de contexto que queira dar?
Este é um primeiro PR que visa atualizar o SciELO Analytics com os dados SciELO SUSHI API. O próximo PR incluirá novos dados como as tabelas Top100.
Falta preencher um pouco mais os arquivos *.PO e gerar novos arquivos *.MO.
Percebi uma falta de padrão ao marcar alguns textos para tradução (às vezes foram marcados em Inglês, às vezes em Português, que parece ser o padrão nesta app).
Screenshots
Tela com mapa de acessos por país de origem (para um periódico selecionado)

Tela com tabela de acessos por idioma de documento (para um periódico selecionado)

Tela com tabela de acessos por idioma de documento para uma coleção

Tela com tabela de acessos para uma coleção

Tela com tabela de acessos para um periódico

Quais são tickets relevantes?
N/A
Referências
N/A