opendatasicilia / tansignari

"T'ansignari e t'appeddiri"
http://tansignari.opendatasicilia.it
Creative Commons Attribution 4.0 International
18 stars 10 forks source link

qualcosa mi sfugge nel ciclo FOR #210

Closed pigreco closed 2 years ago

pigreco commented 2 years ago

Nella mia mente dovrebbe funzionare bene questo script bash, ma alcune volte il file di output non è popolato correttamente, ovvero, il secondo campo è vuoto; altre volte lo popola a metà, boh!

#/bin/bash

for i in 2021-01-31 2021-02-28 2021-03-31 2021-04-30 2021-05-31 2021-06-30 2021-07-31 2021-08-31 2021-09-30 2021-10-31 2021-11-30 2021-12-31 2022-01-31 2022-02-28 2022-03-31 2022-01-31 2022-02-28 2022-03-31
do
total=$(curl 'https://api.github.com/search/issues?q=repo:qgis/QGIS+type:issue+created:<$i+state:open+label:bug&per_page=1' | grep -m 1 total_count | sed 's/,//' | sed 's/  //')

echo "${i},${total}" >>toto.csv
done

io mi aspetterei:

2021-01-31,693
2021-02-28,720
2021-03-31,749
...

lanciandoli singolarmente (come sotto), ottengo i numeri attesi, perché se messo in un ciclo non va?

curl 'https://api.github.com/search/issues?q=repo:qgis/QGIS+type:issue+created:<2021-01-31+state:open+label:bug&per_page=1' | grep -m 1 total_count | sed 's/,//' | sed 's/  //'
pigreco commented 2 years ago

modificando leggermente il ciclo, in particolare sostituendo a $i questo '"$i"' nella terza riga:

#/bin/bash

for i in 2021-01-31 2021-02-28 2021-03-31 2021-04-30 2021-05-31 2021-06-30 2021-07-31 2021-08-31 2021-09-30 2021-10-31 2021-11-30 2021-12-31 2022-01-31 2022-02-28 2022-03-31 2022-01-31 2022-02-28 2022-03-31
do
tot=$(curl 'https://api.github.com/search/issues?q=repo:qgis/QGIS+type:issue+created:<'"$i"'+state:open+label:bug&per_page=1' | grep -m 1 total_count | sed 's/,//' | sed 's/  //')
echo $i,$tot >>toto.csv
done

ottengo:

2021-01-31,"total_count": 693
2021-02-28,"total_count": 720
2021-03-31,"total_count": 749
2021-04-30,"total_count": 775
2021-05-31,"total_count": 795
2021-06-30,"total_count": 826
2021-07-31,"total_count": 864
2021-08-31,"total_count": 900
2021-09-30,"total_count": 935
2021-10-31,"total_count": 975
2021-11-30,
2021-12-31,
2022-01-31,
2022-02-28,
2022-03-31,
2022-01-31,
2022-02-28,
2022-03-31,

perché mancano alcuni valori? i valori in corrispondenza di quelle date ci sono, ma il ciclo non li aggiunge, boh!

forse è dovuto al fatto che curl solleva un errore? image

aborruso commented 2 years ago

Caro @pigreco per usare le API, senza autenticarsi, ci sono dei limiti.

{"message":"API rate limit exceeded for 151.63.233.24. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)","documentation_url":"https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting"}

Penso dipenda da questo. Se hai difficoltà a capire come fare, fischia

pigreco commented 2 years ago

@aborruso

senza autenticarsi, ci sono dei limiti.

vero, sembra funzionare autenticandosi, ma mi chiede enne volte la password, improponibile

aborruso commented 2 years ago

vero, sembra funzionare autenticandosi, ma mi chiede enne volte la password, improponibile

Totò sbaglierai qualcosa nella procedura. È github, non è il sito di mio cugino :)

pigreco commented 2 years ago

@aborruso forse ho capito, occorre creare un token [1], non vale la pena per questo caso, procedo manualmente.

grazie

[1] https://docs.github.com/en/enterprise-server@3.4/rest/guides/getting-started-with-the-rest-api#authentication

aborruso commented 2 years ago

È straordinaria l'utility nativa a riga di comando. Qui l'eseguibile per tutte le versioni https://github.com/cli/cli/releases/tag/v2.8.0

Una volta installata devi attivare l'autenticazione (si fa una volta).

E poi diventa facile facile

#!/bin/bash

if [ -f ./toto.jsonl ]; then
    rm ./toto.jsonl
fi

for i in 2021-01-31 2021-02-28 2021-03-31 2021-04-30 2021-05-31 2021-06-30 2021-07-31 2021-08-31 2021-09-30 2021-10-31 2021-11-30 2021-12-31 2022-01-31 2022-02-28 2022-03-31 2022-01-31 2022-02-28 2022-03-31; do
  gh api -X GET search/issues -f q='repo:qgis/QGIS type:issue created:<'"$i"' state:open label:bug ' | jq -c '{data:"'"$i"'",count:.total_count}' >> ./toto.jsonl
done

E hai questo (si apre con Visidata, Miller, ecc.)

{"data":"2021-01-31","count":693}
{"data":"2021-02-28","count":720}
{"data":"2021-03-31","count":749}
{"data":"2021-04-30","count":775}
{"data":"2021-05-31","count":795}
{"data":"2021-06-30","count":826}
{"data":"2021-07-31","count":864}
{"data":"2021-08-31","count":900}
{"data":"2021-09-30","count":935}
{"data":"2021-10-31","count":975}
{"data":"2021-11-30","count":1022}
{"data":"2021-12-31","count":1055}
{"data":"2022-01-31","count":1095}
{"data":"2022-02-28","count":1151}
{"data":"2022-03-31","count":1249}
{"data":"2022-01-31","count":1095}
{"data":"2022-02-28","count":1151}
{"data":"2022-03-31","count":1249}
pigreco commented 2 years ago

@aborruso per favore, e senza fretta:

potresti descrivere:

  1. come installare l'utility nativa a riga di comando per GNU/Linux Ubuntu;
  2. come attivare l'autentificazione;

io non riesco anche leggendo la documentazione

grazie

pigreco commented 2 years ago

per installare gh sotto Ubuntu

ho utilizzato questa guida:

ovvero:

# scarico la versione attuale v2.8.0
wget https://github.com/cli/cli/releases/download/v2.8.0/gh_2.8.0_linux_amd64.tar.gz
# unzippo
tar xvf gh_2.8.0_linux_amd64.tar.gz
# copio il file binario dentro /usr/local/bin/
sudo cp gh_2.8.0_linux_amd64/bin/gh /usr/local/bin/
# copio il manuale
sudo cp -r gh_2.8.0_linux_amd64/share/man/man1/* /usr/share/man/man1/

autenticazione

digitare nella shell:

  1. gh auth login
  2. selezionare sempre la prima opzione;
  3. copiare il codice che ci suggerisce e incollarlo nel browser:
  4. image

grazie per il supporto @aborruso

pigreco commented 2 years ago

ricetta fatta e pubblicata https://tansignari.opendatasicilia.it/ricette/git/conteggio_issue_bug/