Skip to content

Commit 887a735

Browse files
authored
Optimisation du temps de génération du fichier daily (#72)
Ajout d'un script python Co-authored-by: guenneuguesy <yann.guenneugues@sib.fr>
1 parent 395f7b9 commit 887a735

File tree

2 files changed

+28
-43
lines changed

2 files changed

+28
-43
lines changed

scripts/get_new_data.sh

Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -26,57 +26,16 @@ diff -u --suppress-common-lines oldMarchesNoDuplicates newMarchesNoDuplicates |
2626

2727
nbNewMarches=`cat todayMarches | wc -l`
2828

29-
# Bizarrement,la différence de nombre de ligne entre oldMarchesNoDuplicates et newMarchesNoDuplicates n'est pas équivalente au nombre de marchés dans todaysMarches
30-
# nbNewMarches=$(( $nbMarchesUniqueNew-$nbMarchesUniqueOld))
31-
3229
echo -e "\
3330
Ancien fichier : $nbMarchesUniqueOld marchés uniques (via uid)\n
3431
Nouveau fichier : $nbMarchesUniqueNew marchés uniques\n
3532
$nbNewMarches nouveaux marchés uniques\n"
3633

37-
# Si le nombre de nouveaux marchés uniques est trop important par rapport au précédent fichier decp.json (previous_decp.json) le temps de traitement devient trop important et le CI peut time out (5h pour extraire 8500 nouveaux marchés https://circleci.com/gh/etalab/decp-rama/234).
38-
# Pour éviter cela, si le nombre de marchés est important, on utilise une méthode jq (différence d'array) qui est un peu longue (30 min ?), mais don't le temps d'exécution ne devrait pas être lié au nombre de nouveaux marchés.
39-
40-
if [[ $nbNewMarches -lt 2000 ]]
41-
42-
# Méthode classique si peu de nouveaux marchés
43-
then
44-
45-
echo '{"marches":[' > temp.json
46-
47-
echo "Pour chaque nouvelle UID, export de l'objet marché correspondant vers un nouveau fichier..."
48-
echo ""
49-
50-
i=1
51-
52-
for uid in `cat todayMarches`
53-
do
54-
uid=`echo $uid | sed 's/xSPACEx/ /g'`
55-
echo "$i $uid"
56-
if [[ $i -lt $nbNewMarches ]]
57-
then
58-
object=`jq --arg uid "$uid" '.marches[] | select(.uid == $uid)' $newFile | sed 's/^\}/},/'`
59-
((i++));
60-
else
61-
object=`jq --arg uid "$uid" '.marches[] | select(.uid == $uid)' $newFile`
62-
fi
63-
echo "${object}" >> temp.json
64-
65-
done
66-
67-
echo ']}' >> temp.json
68-
69-
else
70-
# Méthode si nombreux nouveaux marchés
71-
echo "L'ancien array est soustrait du nouveau, les objets identiques sont supprimés..."
72-
73-
time jq --slurpfile previous $oldFile '{"marches": (.marches - $previous[0].marches)} ' $newFile > temp.json
74-
fi
34+
#generation du fichier du jour dans le fichier temp.json
35+
python3.7 scripts/python/generateDailyDecp.py $newFile
7536

7637
echo "Nombre de marchés dans le fichier des nouveaux marchés :"
7738
jq '.marches | length' temp.json
7839

7940
date=`date "+%F"`
8041
jq . temp.json > results/decp_$date.json
81-
82-
# rm oldMarchesNoDuplicates newMarchesNoDuplicates oldMarchesRaw newMarchesRaw todayMarches temp.json

scripts/python/generateDailyDecp.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import json
2+
import sys
3+
import time
4+
5+
# Nouveau fichier decp.json (du jour)
6+
newFile = sys.argv[1]
7+
print('nouveau decp.json:', newFile)
8+
9+
debut = time.time()
10+
11+
listIdFile = open('todayMarches', encoding='utf8')
12+
content = listIdFile.read().splitlines()
13+
f = open(newFile, encoding='utf8')
14+
marches = json.load(f)
15+
outF = open("temp.json", "w", encoding='utf8')
16+
17+
newMarches = {"marches" :[]}
18+
for marche in marches['marches']:
19+
if str(marche['uid']) in content:
20+
newMarches['marches'].append(marche)
21+
22+
outF.write(json.dumps(newMarches,ensure_ascii=False, indent=4, sort_keys=True))
23+
temps_ecoule = time.time() - debut
24+
print("Temps de traitement en secondes", int(temps_ecoule))
25+
outF.close()
26+
f.close()

0 commit comments

Comments
 (0)