Bonsoir,
Je reviens sur le petit tool de Comax concernant la visite de fichiers log en version PHP.
J'ai fais le même en un petit peu plus performant, et avec une version HTML (il a fallu que je m'y mette )
desktop.jpg
Il indique :
- Le nombre d'occurences des mots recherchés
- Les fichiers concernés par ces mots recherchés
- Les lignes où se trouvent les mots concernés
Il vous faut :
- Linux ou Windows (mais pas testé)
- le module cherrypy (google + cherrypy + python version 2.7)
Il y a 2 fichiers :
- 1 fichier pour le server web
- 1 fichier pour le chercheur de mots
Le code du 1er fichier : (page_web.py)
Exécution du code :
sudo ou mode administrateur pour pouvoir lire tous les fichiers log protégés en lecture
Puis allez dans votre navigateur et entrer l'adresse suivante : http://localhost:8080
Le code du 2ème fichier :(ajout.py)
Voilà
Je reviens sur le petit tool de Comax concernant la visite de fichiers log en version PHP.
J'ai fais le même en un petit peu plus performant, et avec une version HTML (il a fallu que je m'y mette )
desktop.jpg
Il indique :
- Le nombre d'occurences des mots recherchés
- Les fichiers concernés par ces mots recherchés
- Les lignes où se trouvent les mots concernés
Il vous faut :
- Linux ou Windows (mais pas testé)
- le module cherrypy (google + cherrypy + python version 2.7)
Il y a 2 fichiers :
- 1 fichier pour le server web
- 1 fichier pour le chercheur de mots
Le code du 1er fichier : (page_web.py)
Exécution du code :
sudo python page_web.py
Puis allez dans votre navigateur et entrer l'adresse suivante : http://localhost:8080
Code:
import cherrypy, os from ajout import Searching class Affiche_search(object): def index(self): return """ <html><body> <h2>Rechercher des mots dans vos fichiers log</h2> <form action="retour" method="POST"> mots a chercher: <input type="text" name="mot" /></BR> <input type="submit" value="Envoyer"/> </form> </body></html> """ index.exposed = True def retour(self, mot): s = Searching(mot) out = """<html> <body> {0}<BR> {1}<BR> {2}<BR> </body> </html>""".format(s.affiche_stat(), s.affiche_files(), s.affiche_lines()) return out retour.exposed = True cherrypy.quickstart(Affiche_search())
Code:
#!/usr/bin/env python2.7 # -*- coding:utf8 -*- import os, fnmatch, sys from collections import defaultdict class Searching(object): def __init__(self, mot): self.dico = defaultdict(int) self.lines, self.files = [], [] self.mot = mot.split() self.liste = self.gen() self.search() def gen(self): """Génère la liste des fichiers du type log dans une liste""" liste_files = [] for root, dirs, files in os.walk("/"): for file in fnmatch.filter(files, '*.log'): try: liste_files.append(os.path.join(root, file)) except: pass return liste_files def affiche_stat(self): """Affiche la statistique des mots trouvés""" ch = "" for i, j in self.dico.items(): ch += "le mot {0} a ete trouve {1} fois".format(i, j) + "<BR>" return ch def affiche_lines(self): """Affiche les lignes où se trouvent les mots recherchés""" ch = "" for num, ligne in enumerate(self.lines): ch += "ligne {0} --> {1}".format(num+1, ' '.join(ligne))+"<BR>" return ch def affiche_files(self): """Affiche les fichiers où les mots ont été trouvés""" ch = "" for file in self.files: ch += file + "<BR>" return ch def search(self): """Retourne le dictionnaire incluant les mots et les stats""" for files in self.liste: with open(files, 'r') as f: lines = [line.strip() for line in f.readlines(1024)] if lines: for line in lines: line = line.split() for word in self.mot: self.dico[word] += line.count(word) if word in line: self.files.append(files) self.lines.append(line) return self.dico def __str__(self): return repr(self.dico)
Commentaire