dg:Workflow: mudanças entre as edições
(Conteúdo trazido de https://github.com/digital-guard/preserv-BR/issues/54.) |
|||
(22 revisões intermediárias por 3 usuários não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
{{Dg info}} | |||
<pre> | |||
Carlos, Luiz e Igor favor refazer ou revisar esta seção. | |||
</pre> | |||
Fluxo de trabalho do Igor e do Carlos | |||
== Resumo geral e opções == | == Resumo geral e opções == | ||
[[Arquivo:DG-workflow2023-Limpo-v1.png|thumb|420px]] | [[Arquivo:DG-workflow2023-Limpo-v1.png|thumb|420px]] | ||
O fluxo de trabalho (''workflow'') completo envolve diversas etapas, que no futuro poderão vir automatizadas pelo [[Airflow]], mas por hora precisam ser realizadas por uma pessoa previamente treinada no uso do console Linux. | |||
No dia-a-dia da Digita-guard são 3 três serviços relativamente independentes, que não precisam ser realizados simultaneamente: | No dia-a-dia da Digita-guard são 3 três serviços relativamente independentes, que não precisam ser realizados simultaneamente: | ||
Linha 20: | Linha 23: | ||
=== Atualização do optim === | === Atualização do optim === | ||
'''Se''' | '''Se''' [[dg:Guia de preenchimento da Planilha de Doadores|donor.csv]] (em qualquer jurisdição) ou [[dg:Guia de preenchimento da Planilha de Pacotes|donatedPack.csv]] '''forem alterados''' ou um '''novo''' ''make_conf.yaml'' for criado, é necessário atualizar as tabelas do [https://git.digital-guard.org/preserv/blob/main/src/optim-step1-ini.sql schema optim]: | ||
<syntaxhighlight lang="sh">cd /var/gits/_dg/preserv/src | <syntaxhighlight lang="sh">cd /var/gits/_dg/preserv/src | ||
Linha 45: | Linha 48: | ||
=== Estrutura do make_conf === | === Estrutura do make_conf === | ||
Exemplo fictício de make_conf. Reparar nas chaves: <code>comments, comment, test_evidence, standardized_fields, other_fields, other_files e to-do</code> utilizadas na geração automatizada de README.md. Informações extras ou que não se encaixam nas referidas chaves podem ser incluidas no arquivo ''attachment.md'', anexado ao final do README.md na seção ''Anexo''. | Exemplo fictício de make_conf. Reparar nas chaves: <code>comments, comment, test_evidence, standardized_fields, other_fields, other_files e to-do</code> utilizadas na geração automatizada de README.md. Informações extras ou que não se encaixam nas referidas chaves podem ser incluidas no arquivo ''attachment.md'', anexado ao final do README.md na seção ''Anexo''. Templates em [https://git.digital-guard.org/preserv/blob/main/src/maketemplates/readme_ptbr.mustache ptbr] e [https://git.digital-guard.org/preserv/blob/main/src/maketemplates/readme_es.mustache es]. | ||
<syntaxhighlight lang="yaml">pack_id: 81.1 | <syntaxhighlight lang="yaml">pack_id: 81.1 | ||
Linha 101: | Linha 104: | ||
to-do: | to-do: | ||
- Tarefa 1.</syntaxhighlight> | - Tarefa 1.</syntaxhighlight> | ||
=== Arquivos não compactados === | |||
Em casos que o arquivo original doado não for compactado<ref>https://github.com/digital-guard/preserv-BR/issues/149#issuecomment-1810758833</ref>: | |||
* compactar (em zip, preferencialmente), informar o hash do arquivo compactado ao doador (respondendo email); | |||
* preservar o arquivo compactado; | |||
* usar ''hash'' do arquivo compactado no make_conf. | |||
== Ingestão == | == Ingestão == | ||
Linha 232: | Linha 242: | ||
<syntaxhighlight lang="sh"># obter a variavel id | <syntaxhighlight lang="sh"># obter a variavel id | ||
psql postgres://postgres@localhost/dl05s_main <<< "SELECT * FROM optim.donated_PackComponent_not_approved;" | psql postgres://postgres@localhost/dl05s_main <<< "SELECT * FROM optim.donated_PackComponent_not_approved;" | ||
cd /var/gits/_dg/preserv/src | cd /var/gits/_dg/preserv/src | ||
make approved_donated_packcomponent id=ZZ pg_datalake=dl05s_main</syntaxhighlight> | make approved_donated_packcomponent id=ZZ pg_datalake=dl05s_main</syntaxhighlight> | ||
Linha 237: | Linha 248: | ||
Comando para gerar uma lista de comandos, escolher os que precisar por meio do id: | Comando para gerar uma lista de comandos, escolher os que precisar por meio do id: | ||
<syntaxhighlight lang="sh">psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT packvers_id, 'make approved_donated_packcomponent pg_datalake=dl05s_main id=' || id FROM optim.donated_packcomponent_not_approved;"</syntaxhighlight> | <syntaxhighlight lang="sh">psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT packvers_id, 'make approved_donated_packcomponent pg_datalake=dl05s_main id=' || id FROM optim.donated_packcomponent_not_approved ORDER BY 1;"</syntaxhighlight> | ||
Escolhido o que será aprovado executar, por exemplo: | Escolhido o que será aprovado executar, por exemplo: | ||
Linha 247: | Linha 258: | ||
== Reprodutibilidade == | == Reprodutibilidade == | ||
=== Como gerar === | |||
<syntaxhighlight lang="sh">cd /var/gits/_dg/preserv-<caminho_do_pacote_de_dados> | <syntaxhighlight lang="sh">cd /var/gits/_dg/preserv-<caminho_do_pacote_de_dados> | ||
make me_reproducibility # gerar/atualizar script reproducibility.sh</syntaxhighlight> | make me_reproducibility # gerar/atualizar script reproducibility.sh</syntaxhighlight> | ||
== Filtrados == | == Filtrados == | ||
São os arquivos utilizados para publicação no provedor de visualizaçao de dados. | |||
=== Como gerar === | |||
Para gerar Shapefile ou CSV dos dados ingeridos: | Para gerar Shapefile ou CSV dos dados ingeridos: | ||
Linha 281: | Linha 296: | ||
End.</syntaxhighlight> | End.</syntaxhighlight> | ||
=== | === Visualização === | ||
Ver a seção [[dg:Workflow#Visualização_de_filtrados]]. | |||
== Gerar README == | == Gerar README == | ||
=== Como gerar === | |||
Para gerar README.md: | Para gerar README.md: | ||
Linha 307: | Linha 321: | ||
=== Downloads por jurisdição === | === Downloads por jurisdição === | ||
<syntaxhighlight lang="sh">psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT optim.generate_list('/tmp/pg_io/ | ==== MediaWiki ==== | ||
Para atualizar a página [[dg:Listagem_dos_downloads_por_jurisdi%C3%A7%C3%A3o]] gerar a lista em formato mediawiki com o comando | |||
<syntaxhighlight lang="sh">psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT optim.generate_list('/tmp/pg_io/list_jurisd_without_filtered_mediawiki.txt','/var/gits/_dg/preserv/src/list_jurisd_without_filtered_mediawiki.mustache');"</syntaxhighlight> | |||
e copiar e colar o conteúdo do arquivo '''/tmp/pg_io/list_jurisd_without_filtered_mediawiki.txt''' na referida página. | |||
Notar que '''não é exibido''' os arquivos filtrados na lista. | |||
Caso seja necessário '''exibir''' os filtrados usar o comando | |||
<syntaxhighlight lang="sh">psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT optim.generate_list('/tmp/pg_io/list_jurisd_mediawiki.txt','/var/gits/_dg/preserv/src/list_jurisd_mediawiki.mustache');"</syntaxhighlight> | |||
e então utilizar o conteúdo do arquivo '''/tmp/pg_io/list_jurisd_mediawiki.txt'''. | |||
Consulte [https://github.com/AddressForAll/site-v2/blob/main/README.md README.md] para entender como gerar o site. | |||
==== Markdown ==== | |||
Para atualizar a seção http://addressforall.org/en/downloads atualizar o arquivo https://github.com/AddressForAll/site-v2/blob/main/content/list_downloads.md com o conteúdo do arquivo gerado pelo comando a seguir no formato markdown | |||
<syntaxhighlight lang="sh">psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT optim.generate_list('/tmp/pg_io/list_jurisd_with_filtered_markdown.txt','/var/gits/_dg/preserv/src/list_jurisd.mustache');"</syntaxhighlight> | |||
Notar que '''são exibidos''' os arquivos filtrados na lista. | |||
Caso seja necessário '''não exibir''' os filtrados usar o comando | |||
<syntaxhighlight lang="sh">psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT optim.generate_list('/tmp/pg_io/list_jurisd_with_filtered_markdown.txt','/var/gits/_dg/preserv/src/list_jurisd_without_filtered.mustache');"</syntaxhighlight> | |||
=== Downloads por hash === | === Downloads por hash === | ||
=== | ==== MediaWiki ==== | ||
Para atualizar a página [[dg:Listagem_dos_downloads_por_hash]] gerar a lista em formato mediawiki com o comando | |||
<syntaxhighlight lang="sh">psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT optim. | |||
<syntaxhighlight lang="sh">psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT optim.generate_list_hash('/tmp/pg_io/list_hash_mediawiki.txt','/var/gits/_dg/preserv/src/list_hash_wiki.mustache');"</syntaxhighlight> | |||
e copiar e colocar o conteúdo na referida página. | |||
==== Markdown ==== | |||
Se for necessário gerar a lista em formato Markdown, usar o comando | |||
<syntaxhighlight lang="sh">psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT optim.generate_list_hash('/tmp/pg_io/list_hash_markdown.txt');"</syntaxhighlight> | |||
=== Páginas | === Páginas viz === | ||
Para atualizar o conteúdo de http://addressforall.org/viz selecionar o comando referente ao pacote de dados desejado da lista de comandos gerada por | |||
<syntaxhighlight lang="sh">psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT 'make generate_pages pg_datalake=dl05s_main folder=/tmp/pg_io/genpages isolabel=' || isolabel_ext || ' pk=' || pack_number FROM optim.vw03publication ;"</syntaxhighlight> | |||
<syntaxhighlight lang="sh">psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT | |||
Por exemplo, para gerar em ''/tmp/pg_io/genpages'' as páginas referentes ao ''pk=_pk0063.01'' do ''isolabel=BR-RS-NovoHamburgo'' utilizando os dados presentes em <code>optim.donated_PackComponent</code> do ''pg_datalake=dl05s_main'' executar: | |||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
Linha 335: | Linha 379: | ||
make generate_pages pg_datalake=dl05s_main folder=/tmp/pg_io/genpages isolabel=BR-RS-NovoHamburgo pk=_pk0063.01</syntaxhighlight> | make generate_pages pg_datalake=dl05s_main folder=/tmp/pg_io/genpages isolabel=BR-RS-NovoHamburgo pk=_pk0063.01</syntaxhighlight> | ||
Depois | Notar que é gerado um ''index.html'' atualizado, contendo lista não ordenada com os hiperlinks para todos pacotes publicados. | ||
<syntaxhighlight lang="sh">mv /tmp/pg_io/genpages/*.html /var/www/addressforall.org/ | |||
Depois de gerar as páginas, movê-las para ''/var/www/addressforall.org/teste2'': | |||
<syntaxhighlight lang="sh">mv /tmp/pg_io/genpages/*.html /var/www/addressforall.org/viz | |||
rm -rf /tmp/pg_io/genpages</syntaxhighlight> | rm -rf /tmp/pg_io/genpages</syntaxhighlight> | ||
Por fim, para atualizar a seção http://addressforall.org/en/visualization atualizar o arquivo https://github.com/AddressForAll/site-v2/blob/main/content/list_visualization.md com o conteúdo do arquivo ''/tmp/pg_io/index_teste2.md'' gerado pelo comando a seguir, já no formato markdown (conteúdo equivalente ao ''index.html'' gerado anteriormente) | |||
<syntaxhighlight lang="sh">psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT optim.publicating_index_pagemd('/tmp/pg_io/index_teste2.md','/var/gits/_dg/preservDataViz/src/preservCutGeo/index_page_markdown.mustache');"</syntaxhighlight> | |||
Consulte [https://github.com/AddressForAll/site-v2/blob/main/README.md README.md] para entender como gerar o site. | |||
== Clean sandbox == | == Clean sandbox == | ||
Linha 346: | Linha 397: | ||
<syntaxhighlight lang="sh">cd /var/gits/_dg/preserv-<caminho_do_pacote_de_dados> | <syntaxhighlight lang="sh">cd /var/gits/_dg/preserv-<caminho_do_pacote_de_dados> | ||
make clean_sandbox</syntaxhighlight> | make clean_sandbox</syntaxhighlight> | ||
== Visualização de filtrados == | |||
Os dados gerados em [[dg:Workflow#Filtrados]] são publicados no [[ArcGIS Online]] usando [https://developers.arcgis.com/python/ ArcGIS API for Python] conforme o [[Guia do desenvolvedor ArcGIS]]. | |||
As credenciais utilizadas estão em: <pre>/var/gits/_dg/.env</pre> | |||
=== Publicar layers === | |||
Obtenha o identificador do arquivo filtrado: | |||
<pre> | |||
SELECT * FROM optim.donated_packcomponent_cloudcontrol | |||
ORDER BY id ASC | |||
</pre> | |||
Carregue as funções necessárias: | |||
<pre> | |||
cd /var/gits/_dg/preserv/src | |||
source generateFiles.sh | |||
</pre> | |||
Envie o arquivo shapefile dos dados filtrados: | |||
<pre> | |||
shp2arcgis <id> | |||
</pre> | |||
O arquivo enviado não estará disponível publicamente. | |||
Crie um feature layer a partir do shapefile: | |||
<pre> | |||
publish_esri_files <id> | |||
</pre> | |||
O feature layer não estará disponível para o público, pois, ainda não foi feito a troca dos nomes dos campos para o padrão do OpenStreetMap. | |||
Traduzir os nomes dos campos para o padrão do OpenStreetMap: | |||
<pre> | |||
tr_esri_files <id> | |||
</pre> | |||
Com isso, o feature layer está disponível para o público. | |||
Exemplo de output: | |||
<pre> | |||
shp2arcgis 304 | |||
Upload shapefile to Arcgis... | |||
Set shp_id=c3cf65c9dd8847539dc77c90df8912bd in donated_PackComponent_cloudControl... | |||
update_shp_id_cloudcontrol | |||
-------------------------------------------------------------- | |||
Ok, update info of optim.donated_PackComponent_cloudControl. | |||
(1 row) | |||
End. Loaded. | |||
publish_esri_files 304 | |||
Publish shapefile "c3cf65c9dd8847539dc77c90df8912bd"... | |||
Set pub_id=3f0485280203414e9cfd1125692c412b in donated_PackComponent_cloudControl... | |||
update_pub_id_cloudcontrol | |||
-------------------------------------------------------------- | |||
Ok, update info of optim.donated_PackComponent_cloudControl. | |||
(1 row) | |||
End. Published. | |||
tr_esri_files 304 | |||
Translate fields names from A4A to OpenStreetMap... "3f0485280203414e9cfd1125692c412b" | |||
Update fields Feature layer hosted: 3f0485280203414e9cfd1125692c412b via | |||
Delete fields: [{'name': 'gid'}, {'name': 'error'}] | |||
Update alias: via -> name | |||
Update metadata hosted Feature layer: 3f0485280203414e9cfd1125692c412b | |||
Update metadata hosted Feature layer sublayer | |||
Update categories. | |||
Update completed. See https://addressforall.maps.arcgis.com/home/item.html?id=3f0485280203414e9cfd1125692c412b | |||
Not added building=yes. | |||
Update completed. | |||
</pre> | |||
== Diagrama == | == Diagrama == | ||
Linha 447: | Linha 574: | ||
PS2: o google/spreadsheets também oferece opção de sql_query na API, o que permite descartar os campos de cache da planilha donatedPack... [https://developers.google.com/chart/interactive/docs/dev/implementing_data_source#request-format ver aqui]. | PS2: o google/spreadsheets também oferece opção de sql_query na API, o que permite descartar os campos de cache da planilha donatedPack... [https://developers.google.com/chart/interactive/docs/dev/implementing_data_source#request-format ver aqui]. | ||
== Referências == | |||
[[Categoria:Digital-guard]] | [[Categoria:Digital-guard]] |
Edição atual tal como às 20h39min de 9 de setembro de 2024
Documentação integrante do projeto Digital-guard |
Países: AR, BR, CO, CM, CL, PE, SR, VE, UY. |
Carlos, Luiz e Igor favor refazer ou revisar esta seção.
Fluxo de trabalho do Igor e do Carlos
Resumo geral e opções
O fluxo de trabalho (workflow) completo envolve diversas etapas, que no futuro poderão vir automatizadas pelo Airflow, mas por hora precisam ser realizadas por uma pessoa previamente treinada no uso do console Linux.
No dia-a-dia da Digita-guard são 3 três serviços relativamente independentes, que não precisam ser realizados simultaneamente:
- Pré-Ingestão: são tarefas de preparo dos metadados e dos arquivos de download, durante ou logo após o recebimento. Seu principal resultado é o arquivo
make_conf.yaml
. - Ingestão: filtra e leva os dados brutos (externos da doação) para dentro do banco SQL, viabilizando todas as demais ações. Seu principal resultado são os dados filtrados, no banco.
- Publicação: é a ação mais importante, entrega o produto. Os dados filtrados são preservados no git "preservCutGeo" do país (podendo ser reusados posteriormente pelo banco de dados).
Demais ações são auxiliares, para manutenção da base, do sandbox ou integração com outros recursos, como o site ESRI de publicação amigável.
Pré-Ingestão
Atualização do optim
Se donor.csv (em qualquer jurisdição) ou donatedPack.csv forem alterados ou um novo make_conf.yaml for criado, é necessário atualizar as tabelas do schema optim:
cd /var/gits/_dg/preserv/src
make load_optim_csv pg_datalake=dl05s_main
Atualização de sha256
Se o sha256 de arquivos for alterado em um make_conf existente:
- incrementar
pkversion
; - inserir nova entrada no arquivo donatePack.csv;
- Atualizar tabelas de optim.
Gerar sha256
Ver dg:Guia_do_sha256.
Preservação digital
Ver dg:Convenções/Armazenamento_de_dados.
Estrutura do make_conf
Exemplo fictício de make_conf. Reparar nas chaves: comments, comment, test_evidence, standardized_fields, other_fields, other_files e to-do
utilizadas na geração automatizada de README.md. Informações extras ou que não se encaixam nas referidas chaves podem ser incluidas no arquivo attachment.md, anexado ao final do README.md na seção Anexo. Templates em ptbr e es.
pack_id: 81.1
pkversion: 001
schemaId_input:
schemaId_template:
codec:descr_encode: srid=31983
files:
-
p: 1
file: d9cddc63f7782d250fc80f0572b9fb884ee7ec1911e19deea4381a4ad5d0a172.zip
name: Bairros
comments: Comentários sobre o arquivo, se houver.
size: 1234
layers:
geoaddress:
subtype: ext
method: shp2sql
file: 1
sql_select: ['gid', 'numnovo as hnum', 'cod_log', 'geom']
orig_filename: pg_renumeracoes
comments: Comentários referente ao layer, se houver.
test_evidence: endereço da imagem de evidencia do layer.
# dados relevantes, padronizados
standardized_fields:
-
name: nome do campo ou combinação de campos
standard: 'nome padronizado, por exemplo: hnum'
comment: comentários sobre o campo, se houver.
# dados relevantes, NÃO padronizados, se houver
other_fields:
-
name: nome do campo ou combinação de campos
comment: comentários sobre o campo, se houver.
comments: Comentários gerais sobre os dados, sobre o pacote, etc, se houver.
test_evidence: endereço da imagem de evidencia de todos os dados.
# outros arquivos que podem ser úteis
other_files:
-
p: 2
file: pg_div_municipio.zip
name: pg_div_municipio
format: shp
comment: Arquivo com a divisa territorial de guarulhos e vizinhos.
# Lista de tarefas
to-do:
- Tarefa 1.
Arquivos não compactados
Em casos que o arquivo original doado não for compactado[1]:
- compactar (em zip, preferencialmente), informar o hash do arquivo compactado ao doador (respondendo email);
- preservar o arquivo compactado;
- usar hash do arquivo compactado no make_conf.
Ingestão
- Devido à hardcoding, qualquer base
ingest
depende dadl05s_main
. - Vamos usar apenas a base
ingest1
, e não adulterar mais nada no servidor. - É possível trocar
ingest1
por outra com os devidos cuidados e parametrizações.
Preparo do ambiente e da base
cd /var/gits/_a4a/pg_pubLib-v1
git pull
cd /var/gits/_dg/preserv/src
git pull
make fix_permissions # vai solicitar sudor
make # vai listar as opções
make ini_ingest pg_db=ingest1 # cria base ingest1
Preparo do processo de ingestão
make fix_permissions # vai solicitar sudor
cd /var/gits/_dg/preserv-BR/src
git pull
make # vai listar as opções
make all # copia makefile inicial em todos pacotes de dados
cd /var/gits/_dg/preserv-BR/data/
ls # vamos seguir a ordem alfabética
Exemplo do pk42.01
Verificando a situação no filesystem:
make fix_permissions # vai solicitar sudor
cd /var/gits/_dg/preserv-BR/data/
ls AC/RioBranco/_pk0042.01/
grep "^42" donor.csv
grep ",42,1" donatedPack.csv
cd AC/RioBranco/_pk0042.01/
more sha256sum.txt
grep file make_conf.yaml
# ... até aqui foi só conferir se batem IDs, hashes e títulos
more make_conf.yaml # detectamos problemas por ser antigo: falta licença, faltam file sizes, etc.
make me # responder senhas ENTERs etc. use pg_db=ingestXX para uma ingest diferente de commomFirst.yaml. Idem para qualquer target em preserv-BR
make insert_size # inserir tamanho dos arquivos se necessário
#make insert_license # inserir licença. Cuidado, experimental!
make all_layers # para ingerir todos os layers ou make <nome_do_layer> para ingerir um layer especifico.
make all_joins # para executar todos os joins ou se existir a necessidade.
Exemplo do pk0004.01 (OpenStreetMap)
make fix_permissions # vai solicitar sudor
cd /var/gits/_dg/preserv-BR/data/_pk0004.01
ls _pk0004.01/
grep "^4," donor.csv
grep ",4,1" donatedPack.csv
cd _pk0004.01/
more sha256sum.txt
grep file make_conf.yaml
# ... até aqui foi só conferir se batem IDs, hashes e títulos
more make_conf.yaml # detectamos problemas por ser antigo: falta licença, faltam file sizes, etc.
make me # para a ingest indicada em commomFirst.yaml ou make me pg_db=ingestXX para uma ingest diferente.
# caso falte file sizes:
make wget_files orig=/tmp/pg_io/tmpfolder
make insert_size orig=/tmp/pg_io/tmpfolder
rm -rf /tmp/pg_io/tmpfolder
make openstreetmap # executar antes da ingestão, apenas uma vez.
# .. responder senhas ENTERs etc.
make all_layers
Publicação
Gerar os arquivos
Para gerar os arquivos que serão publicados no respectivo preservCutGeo do país:
cd /var/gits/_dg/preserv-<caminho_do_pacote_de_dados>
make publicating_geojsons_<nome_do_layer>
# exemplo: make publicating_geojsons_via` gera os arquivos em `/var/gits/_dg/preservCutGeo-BR2021/data/AC/RioBranco/_pk0042.01/via/`
ou, para gerar todos os arquivos (verificar se todos foram gerados):
cd /var/gits/_dg/preserv-<caminho_do_pacote_de_dados>
make all_publications
make target audit-geojsons_<nome do layer>
# exibe informações sobre os arquivos gerados.
Atualmente, apenas em casos excepcionais é necessário recorrer a busca de parâmetros de distribuição.
Subir para o repositório
Concluída a geração dos arquivos publicáveis, fazer o pull
dos arquivos gerados na branch main do no respectivo preservCutGeo do país:
cd /var/gits/_dg/<repositorio CutGeo>
git pull
Copiar para datalake
Para copiar o conteúdo da tabela ingest.donated_packcomponent
para optim.donated_PackComponent_not_approved
em DL05s_main
:
cd /var/gits/_dg/preserv/src
make to_donated_packcomponent pg_db=<nome_base_ingest> pg_datalake=dl05s_main
Aprovação
A aprovação se dá pela avaliação dos arquivos e movendo os dados de optim.donated_PackComponent_not_approved
para optim.donated_PackComponent
em DL05s_main
:
# obter a variavel id
psql postgres://postgres@localhost/dl05s_main <<< "SELECT * FROM optim.donated_PackComponent_not_approved;"
cd /var/gits/_dg/preserv/src
make approved_donated_packcomponent id=ZZ pg_datalake=dl05s_main
Comando para gerar uma lista de comandos, escolher os que precisar por meio do id:
psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT packvers_id, 'make approved_donated_packcomponent pg_datalake=dl05s_main id=' || id FROM optim.donated_packcomponent_not_approved ORDER BY 1;"
Escolhido o que será aprovado executar, por exemplo:
cd /var/gits/_dg/preserv/src
make approved_donated_packcomponent pg_datalake=dl05s_main id=2
Nesse momento, os novos dados fazem parte das estatísticas disponibilizadas em API. Também, listas disponibilizadas no site addressforall e em documentações podem ser atualizadas.
Reprodutibilidade
Como gerar
cd /var/gits/_dg/preserv-<caminho_do_pacote_de_dados>
make me_reproducibility # gerar/atualizar script reproducibility.sh
Filtrados
São os arquivos utilizados para publicação no provedor de visualizaçao de dados.
Como gerar
Para gerar Shapefile ou CSV dos dados ingeridos:
cd /var/gits/_dg/preserv-<caminho_do_pacote_de_dados>
make all_filtered
# exemplo de output:
/var/gits/_dg/preserv-BR/data/RS/NovoHamburgo/_pk0063.01
/tmp /var/gits/_dg/preserv-BR/data/RS/NovoHamburgo/_pk0063.01
Generating ziped shapefile...
Initializing...
Done (postgis major version: 3).
Output shape: Polygon
Dumping: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
...
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX [130936 rows].
adding: a4a_br_rs_novohamburgo_building_7600006301101/ (stored 0%)
adding: a4a_br_rs_novohamburgo_building_7600006301101/a4a_br_rs_novohamburgo_building_7600006301101.shx (deflated 58%)
adding: a4a_br_rs_novohamburgo_building_7600006301101/a4a_br_rs_novohamburgo_building_7600006301101.dbf (deflated 87%)
adding: a4a_br_rs_novohamburgo_building_7600006301101/a4a_br_rs_novohamburgo_building_7600006301101.prj (deflated 40%)
adding: a4a_br_rs_novohamburgo_building_7600006301101/a4a_br_rs_novohamburgo_building_7600006301101.cpg (stored 0%)
adding: a4a_br_rs_novohamburgo_building_7600006301101/a4a_br_rs_novohamburgo_building_7600006301101.shp (deflated 59%)
Upload and get uri cloud...
Insert infos in optim.donated_PackComponent_cloudControl...
File available at: http://dl.digital-guard.org/out/a4a_br_rs_novohamburgo_building_7600006301101.zip
File available at: https://addressforall-my.sharepoint.com/personal/operacao_addressforall_org/_layouts/15/download.aspx?share=EaJb5nvzNblLthafTgulxToBYNG-bvSbv3Q7oPNiUGwYnw
File available at: /tmp/a4a_br_rs_novohamburgo_building_7600006301101.zip
End.
Visualização
Ver a seção dg:Workflow#Visualização_de_filtrados.
Gerar README
Como gerar
Para gerar README.md:
cd /var/gits/_dg/preserv-BR/src
make all
cd /var/gits/_dg/preserv-BR/data/AC/RioBranco/_pk0042.01
make readme pg_db=ingest99
Exemplos
- https://github.com/digital-guard/preserv-BR/tree/main/data/SP/SaoPaulo/_pk0033.01
- https://github.com/digital-guard/preserv-BR/tree/main/data/AC/RioBranco/_pk0042.01
- https://github.com/digital-guard/preserv-BR/tree/main/data/SP/Atibaia/_pk0021.01
- https://github.com/digital-guard/preserv-BR/tree/main/data/ES/CachoeiroItapemirim/_pk0091.01
Atualizar Listas e site
Downloads por jurisdição
MediaWiki
Para atualizar a página dg:Listagem_dos_downloads_por_jurisdição gerar a lista em formato mediawiki com o comando
psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT optim.generate_list('/tmp/pg_io/list_jurisd_without_filtered_mediawiki.txt','/var/gits/_dg/preserv/src/list_jurisd_without_filtered_mediawiki.mustache');"
e copiar e colar o conteúdo do arquivo /tmp/pg_io/list_jurisd_without_filtered_mediawiki.txt na referida página.
Notar que não é exibido os arquivos filtrados na lista.
Caso seja necessário exibir os filtrados usar o comando
psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT optim.generate_list('/tmp/pg_io/list_jurisd_mediawiki.txt','/var/gits/_dg/preserv/src/list_jurisd_mediawiki.mustache');"
e então utilizar o conteúdo do arquivo /tmp/pg_io/list_jurisd_mediawiki.txt.
Consulte README.md para entender como gerar o site.
Markdown
Para atualizar a seção http://addressforall.org/en/downloads atualizar o arquivo https://github.com/AddressForAll/site-v2/blob/main/content/list_downloads.md com o conteúdo do arquivo gerado pelo comando a seguir no formato markdown
psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT optim.generate_list('/tmp/pg_io/list_jurisd_with_filtered_markdown.txt','/var/gits/_dg/preserv/src/list_jurisd.mustache');"
Notar que são exibidos os arquivos filtrados na lista.
Caso seja necessário não exibir os filtrados usar o comando
psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT optim.generate_list('/tmp/pg_io/list_jurisd_with_filtered_markdown.txt','/var/gits/_dg/preserv/src/list_jurisd_without_filtered.mustache');"
Downloads por hash
MediaWiki
Para atualizar a página dg:Listagem_dos_downloads_por_hash gerar a lista em formato mediawiki com o comando
psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT optim.generate_list_hash('/tmp/pg_io/list_hash_mediawiki.txt','/var/gits/_dg/preserv/src/list_hash_wiki.mustache');"
e copiar e colocar o conteúdo na referida página.
Markdown
Se for necessário gerar a lista em formato Markdown, usar o comando
psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT optim.generate_list_hash('/tmp/pg_io/list_hash_markdown.txt');"
Páginas viz
Para atualizar o conteúdo de http://addressforall.org/viz selecionar o comando referente ao pacote de dados desejado da lista de comandos gerada por
psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT 'make generate_pages pg_datalake=dl05s_main folder=/tmp/pg_io/genpages isolabel=' || isolabel_ext || ' pk=' || pack_number FROM optim.vw03publication ;"
Por exemplo, para gerar em /tmp/pg_io/genpages as páginas referentes ao pk=_pk0063.01 do isolabel=BR-RS-NovoHamburgo utilizando os dados presentes em optim.donated_PackComponent
do pg_datalake=dl05s_main executar:
cd /var/gits/_dg/preserv/src
make generate_pages pg_datalake=dl05s_main folder=/tmp/pg_io/genpages isolabel=BR-RS-NovoHamburgo pk=_pk0063.01
Notar que é gerado um index.html atualizado, contendo lista não ordenada com os hiperlinks para todos pacotes publicados.
Depois de gerar as páginas, movê-las para /var/www/addressforall.org/teste2:
mv /tmp/pg_io/genpages/*.html /var/www/addressforall.org/viz
rm -rf /tmp/pg_io/genpages
Por fim, para atualizar a seção http://addressforall.org/en/visualization atualizar o arquivo https://github.com/AddressForAll/site-v2/blob/main/content/list_visualization.md com o conteúdo do arquivo /tmp/pg_io/index_teste2.md gerado pelo comando a seguir, já no formato markdown (conteúdo equivalente ao index.html gerado anteriormente)
psql postgres://postgres@localhost/dl05s_main -qtAX -c "SELECT optim.publicating_index_pagemd('/tmp/pg_io/index_teste2.md','/var/gits/_dg/preservDataViz/src/preservCutGeo/index_page_markdown.mustache');"
Consulte README.md para entender como gerar o site.
Clean sandbox
O processo de ingestão utiliza subpastas no caminho informado em sandbox
, cujo valor default é informado no commomFirst.yaml. Antes na execução da ingestão de cada layer, o target makedirs
cria ou limpa a subpasta utilizada pelo layer. Após a execução, o target clean-sandbox
remove a subpasta, evitando que arquivos não mais necessários permanecem no sistema de arquivos.
cd /var/gits/_dg/preserv-<caminho_do_pacote_de_dados>
make clean_sandbox
Visualização de filtrados
Os dados gerados em dg:Workflow#Filtrados são publicados no ArcGIS Online usando ArcGIS API for Python conforme o Guia do desenvolvedor ArcGIS.
As credenciais utilizadas estão em:
/var/gits/_dg/.env
Publicar layers
Obtenha o identificador do arquivo filtrado:
SELECT * FROM optim.donated_packcomponent_cloudcontrol ORDER BY id ASC
Carregue as funções necessárias:
cd /var/gits/_dg/preserv/src source generateFiles.sh
Envie o arquivo shapefile dos dados filtrados:
shp2arcgis <id>
O arquivo enviado não estará disponível publicamente.
Crie um feature layer a partir do shapefile:
publish_esri_files <id>
O feature layer não estará disponível para o público, pois, ainda não foi feito a troca dos nomes dos campos para o padrão do OpenStreetMap.
Traduzir os nomes dos campos para o padrão do OpenStreetMap:
tr_esri_files <id>
Com isso, o feature layer está disponível para o público.
Exemplo de output:
shp2arcgis 304 Upload shapefile to Arcgis... Set shp_id=c3cf65c9dd8847539dc77c90df8912bd in donated_PackComponent_cloudControl... update_shp_id_cloudcontrol -------------------------------------------------------------- Ok, update info of optim.donated_PackComponent_cloudControl. (1 row) End. Loaded. publish_esri_files 304 Publish shapefile "c3cf65c9dd8847539dc77c90df8912bd"... Set pub_id=3f0485280203414e9cfd1125692c412b in donated_PackComponent_cloudControl... update_pub_id_cloudcontrol -------------------------------------------------------------- Ok, update info of optim.donated_PackComponent_cloudControl. (1 row) End. Published. tr_esri_files 304 Translate fields names from A4A to OpenStreetMap... "3f0485280203414e9cfd1125692c412b" Update fields Feature layer hosted: 3f0485280203414e9cfd1125692c412b via Delete fields: [{'name': 'gid'}, {'name': 'error'}] Update alias: via -> name Update metadata hosted Feature layer: 3f0485280203414e9cfd1125692c412b Update metadata hosted Feature layer sublayer Update categories. Update completed. See https://addressforall.maps.arcgis.com/home/item.html?id=3f0485280203414e9cfd1125692c412b Not added building=yes. Update completed.
Diagrama
Outros
Inserir size no make_conf
Para inserir size
em files
de um make_conf a qualquer tempo:
cd /var/gits/_dg/preserv-BR/src
make all
cd /var/gits/_dg/preserv-BR/data/AC/RioBranco/_pk0042.01
make me
make wget_files orig=/tmp/pg_io/tmpfolder
make insert_size orig=/tmp/pg_io/tmpfolder
rm -rf /tmp/pg_io/tmpfolder
Inserir Licenças no make_conf
Executar o target make insert_license
utiliza os dados de digital-guard/licenses para gerar no respectivo make_conf.yaml o seguinte, por exemplo:
license_evidences: definition: [ODbL-1.0, odbl, http://www.opendefinition.org/licenses/odc-odbl]
onde definition:
equivale a [name, family, url]
conforme discutido em https://github.com/digital-guard/preserv/issues/32
Manualmente, inserir file
e uri_evidency
, conforme discutido em https://github.com/digital-guard/preserv/issues/19:
file: f0cbf591bda09880dc27cdbfcf4ee45189eb1e2c3742800c066f0b5576d81744.zip uri_evidency: http://web.archive.org/web/20211012105347/https://www.openstreetmap.org/copyright
onde file
indica o sha256 do arquivo compactado contendo as evidencias e uri_evidency
indica o sha256.eml ou archive.org/url como discutido aqui https://github.com/digital-guard/preserv/issues/32#issuecomment-998347112.
Resultando em:
license_evidences: definition: [ODbL-1.0, odbl, http://www.opendefinition.org/licenses/odc-odbl] file: f0cbf591bda09880dc27cdbfcf4ee45189eb1e2c3742800c066f0b5576d81744.zip uri_evidency: http://web.archive.org/web/20211012105347/https://www.openstreetmap.org/copyright
Exemplo utilizado em https://github.com/digital-guard/preserv-CO/blob/main/data/_pk0004.01/make_conf.yaml
No rule to make target
Ao executar make layer
ou make all_layers
, caso encontre um erro do tipo
make: *** No rule to make target '/var/www/dl.digital-guard.org/bae2054448855305db0fc855d2852cd5a7b369481cc03aeb809a0c3c162a2c04.zip', needed by 'parcel'. Stop.
o arquivo especificado não está no diretório default /var/www/dl.digital-guard.org
, informado na chave orig
de uma jurisdição, por exemplo, em commomFirst.yaml. Significando que o arquivo está armazenado em outro lugar. Isso está indicado na tabela de-para.
Nesse caso usar:
wget -P /diretorio/para/arquivo/baixado http://dl.digital-guard.org/bae2054448855305db0fc855d2852cd5a7b369481cc03aeb809a0c3c162a2c04.zip make me pg_db=ingestXX make parcel orig=/diretorio/para/arquivo/baixado pg_db=ingestXX
Se o download for realizado em /var/www/dl.digital-guard.org utilizar apenas
make parcel pg_db=ingestXX
uma vez que o valor default de orig é /var/www/dl.digital-guard.org.
Observação: atualmente, common002_layerHeader.mustache interage com o usuário solicitando a confirmação de download de dl.digital-guard.org ou o fornecimento do valor correto de orig. Caso o download seja realizado, o arquivo estará localizado na respectiva sandbox do layer. Notar que se nointeraction=y
não haverá interação com o usuário e o download será feito.
make com nointeraction
Para rodar um target sem serem solicitadas confirmações do usuário, utilizar nointeraction=y
.
Por exemplo, make block nointeraction=y
faz a ingestão dos dados sem solicitar confirmações do usuário.[2]
Essa variável só produz efeito em target layer
, publicating_geojsons_layer
ou me
. Para os demais, não.
Workflow da edição de planilhas
Os arquivos CSV do Github infelizmente não são amigavelmente editáveis. Algumas planilhas todavia são ainda dependentes da interface humana nas primeiras etapas do workflow do trabalho, ao dar entrada em um novo donor ou donatedPack. Este é o passo-a-passo a ser seguido:
- Editar a planilha colaborativa amigável;
- Baixar e normalizar com
make getEdits
ou os comandoscurl
do target (ver exemplo) - fazer
git diff -wb
para conferir. - se tudo ok fazer
git pull
,git add
, commit e push.
Exemplo
cd preserv-BR/data/
curl "https://docs.google.com/spreadsheets/d/1-FQjjhHjJnAOxSWYEdFU_RePxAJDsJCnLviOyDo3QMM/gviz/tq?tqx=out:csv&gid=815577163" \
| csvformat > donor.csv
git diff -wb donor.csv
curl "https://docs.google.com/spreadsheets/d/1-FQjjhHjJnAOxSWYEdFU_RePxAJDsJCnLviOyDo3QMM/gviz/tq?tqx=out:csv&gid=42455849" \
| csvformat > donatedPack.csv
git diff -wb donatedPack.csv
A solução CSVkit requer instalar, sudo pip install csvkit
, que instala também o comando csvformat
.
PS1: conforme discutido API do Gogle está baixando com um monte de aspas, diferente do download direto da interface. Uma solução seria baixar manualmente... O melhor é normalizar. No futuro o comando frictionless
talvez incorpore a normalização. Sugiro incluir normalização UTF8 que usamos no PostgreSQL.
PS2: o google/spreadsheets também oferece opção de sql_query na API, o que permite descartar os campos de cache da planilha donatedPack... ver aqui.
Referências
- ↑ https://github.com/digital-guard/preserv-BR/issues/149#issuecomment-1810758833
- ↑ Layer com
method
que utiliza o ogr2ogr via docker, ou targetme
, podem solicitar a senha do usuário.