Commit 30518bfa91f3e70b9aefbe22f3d5ff6f1221b626

Authored by ronan
1 parent edd879ef1e
Exists in master

gestion des erreurs

Showing 1 changed file with 47 additions and 14 deletions

logrotate.py View file @ 30518bf
... ... @@ -30,6 +30,18 @@
30 30 :rtype: datetime.datetime
31 31 """
32 32 return dt.datetime.now().isoformat()
  33 +
  34 +def cleanList(LIST = [], LISTERR = []):
  35 + """
  36 + Supprime de la liste ``LIST`` tous les fichiers
  37 + correspondant à ceux en erreur présent dans la liste ``LISTERR``
  38 +
  39 + :return: Une nouvelle liste de fichiers nettoyées
  40 + :rtype: list
  41 + """
  42 + for ERR in LISTERR:
  43 + LIST = list(filter(lambda f: not f.startswith(ERR), LIST))
  44 + return LIST
33 45  
34 46 def log(FLOG, TXT, FILE, MSG):
35 47 """
36 48  
37 49  
... ... @@ -71,16 +83,20 @@
71 83 delFile(os.path.join(F, FILE), FLOG)
72 84 return list(set(LIST) - set(LISTDEL))
73 85  
74   -def incrementZipFile(LIST, FLOG):
  86 +def incrementZipFile(LIST, FLOG, LISTERR = []):
75 87 """
76 88 Incrémente les archives ZIP jusqu'à ``NBARCHIVE``
77 89 Suppression de l'archive ZIP dont son index est supérieur
78 90 ou égal à ``NBARCHIVE``
  91 +
  92 + :return: Une liste de fichiers en erreur
  93 + :rtype: list
79 94 """
80 95 LISTLOG = listLog(LIST, '.log')
81 96 LISTZIP = listLog(LIST, '.zip')
82 97 for f in LISTLOG:
83 98 WLIST = sorted(list(filter(lambda x: x.startswith(f), LISTZIP)), key=lambda y: int(y.split('.')[2]), reverse=True)
  99 + ERR = False
84 100 for FILE in WLIST:
85 101 TF = FILE.split('.')
86 102 IDX = int(TF[2])
87 103  
88 104  
89 105  
90 106  
91 107  
92 108  
93 109  
... ... @@ -91,25 +107,39 @@
91 107 TF[2] = str(IDX + 1)
92 108 NEWFILE = os.path.join(F, '.'.join(TF))
93 109 try: os.rename(OLDFILE, NEWFILE)
94   - except: log(FLOG, TXT, OLDFILE, '{NEWFILE} ***KO***'.format(NEWFILE=NEWFILE))
  110 + except:
  111 + ERR = True
  112 + LISTERR.append(f)
  113 + log(FLOG, TXT, OLDFILE, '{NEWFILE} ***KO***'.format(NEWFILE=NEWFILE))
95 114 else: log(FLOG, TXT, OLDFILE, '{NEWFILE}'.format(NEWFILE=NEWFILE))
  115 + finally:
  116 + if ERR: break
  117 + return LISTERR
96 118  
97   -def log_0ToZip(LIST, FLOG):
  119 +def log_0ToZip(LIST, FLOG, LISTERR = []):
98 120 """
99 121 On écrit tout le contenu des fichiers LOG *.log.0
100 122 dans de nouveaux fichiers ZIP *.log.1.zip
101 123 On supprime ensuite tous les fichiers *.log.0
  124 +
  125 + :return: Une liste de fichiers en erreur
  126 + :rtype: list
102 127 """
103 128 LISTLOG0 = listLog(LIST, '.log.0')
104 129 for FILE in LISTLOG0:
  130 + ERR = False
105 131 with open(os.path.join(F, FILE), mode='r', encoding='UTF-8') as f1:
106   - BASE = '.'.join(FILE.split('.')[:-1]) + '.1'
  132 + BASE = FILE[:-1] + '1'
107 133 ZIP = os.path.join(F, BASE + '.zip')
108 134 with zipfile.ZipFile(ZIP, 'w', compression=zipfile.ZIP_DEFLATED) as f2:
109 135 try: f2.writestr(BASE, f1.read().encode('UTF-8'))
110   - except: log(FLOG, TXT3, os.path.join(F, FILE), '{NEWFILE} ***KO***'.format(NEWFILE=ZIP))
  136 + except:
  137 + ERR = True
  138 + LISTERR.append(FILE[:-2])
  139 + log(FLOG, TXT3, os.path.join(F, FILE), '{NEWFILE} ***KO***'.format(NEWFILE=ZIP))
111 140 else: log(FLOG, TXT3, os.path.join(F, FILE), '{NEWFILE}'.format(NEWFILE=ZIP))
112   - delFile(os.path.join(F, FILE), FLOG)
  141 + if not ERR: delFile(os.path.join(F, FILE), FLOG)
  142 + return LISTERR
113 143  
114 144 def logTo0(LIST, FLOG):
115 145 """
... ... @@ -126,12 +156,13 @@
126 156 with open(NEWFILE, mode='w', encoding='UTF-8') as f2:
127 157 f2.write(f1.read())
128 158 except: log(FLOG, TXT, OLDFILE, '{NEWFILE} ***KO***'.format(NEWFILE=NEWFILE))
129   - else: log(FLOG, TXT, OLDFILE, '{NEWFILE}'.format(NEWFILE=NEWFILE))
130   - try:
131   - with open(OLDFILE, mode='w', encoding='UTF-8') as f1:
132   - f1.write('')
133   - except: log(FLOG, TXT2, OLDFILE, 'KO')
134   - else: log(FLOG, TXT2, OLDFILE, 'OK')
  159 + else:
  160 + log(FLOG, TXT, OLDFILE, '{NEWFILE}'.format(NEWFILE=NEWFILE))
  161 + try:
  162 + with open(OLDFILE, mode='w', encoding='UTF-8') as f1:
  163 + f1.write('')
  164 + except: log(FLOG, TXT2, OLDFILE, 'KO')
  165 + else: log(FLOG, TXT2, OLDFILE, 'OK')
135 166  
136 167 def main():
137 168 """
... ... @@ -144,8 +175,10 @@
144 175 with open(os.path.join(F, LOG), mode='a', encoding='UTF-8') as FLOG:
145 176 LIST = removeUnusedFiles(FLOG)
146 177 LIST.remove(LOG) # On supprime de la liste le fichier de LOG du script
147   - incrementZipFile(LIST, FLOG)
148   - log_0ToZip(LIST, FLOG)
  178 + LISTERR = incrementZipFile(LIST, FLOG)
  179 + LIST = cleanList(LIST, LISTERR)
  180 + LISTERR = log_0ToZip(LIST, FLOG, LISTERR)
  181 + LIST = cleanList(LIST, LISTERR)
149 182 logTo0(LIST, FLOG)
150 183  
151 184 if __name__ == '__main__':