2013-04-15 1 views
3

I J'ai reçu une affectation où je dois instrumenter une application donnée et générer un fichier de trace. Un diagramme de séquence doit ensuite être généré à partir du fichier de trace. L'application est écrite en python. L'application a été instrumentée aux endroits où la méthode démarre et se termine.Comment rechercher une séquence de répétition à partir d'un fichier de trace

Mon but principal est de trouver les motifs répétitifs dans le fichier de trace?

Voici un échantillon du fichier de trace

Entering get_instance None [] None 10:25:30:743000 
Entering __init__ ConfigHandler ['config_filepath'] 56663624 10:25:30:743000 
Entering _load_config ConfigHandler ['path'] 56663624 10:25:30:744000 
Exited _load_config ConfigHandler True 56663624 10:25:30:746000 
Exited __init__ ConfigHandler None 56663624 10:25:30:747000 
Exited get_instance None <commons.ConfigHandler.ConfigHandler object at 0x0000000003609E48> None 10:25:30:747000 
Entering __init__ ColumnConverter [] 56963312 10:25:30:769000 
Exited __init__ ColumnConverter None 56963312 10:25:30:769000 
Entering __init__ PredicatesFactory [] 56963424 10:25:30:769000 
Exited __init__ PredicatesFactory None 56963424 10:25:30:769000 
Entering __init__ LogFileConverter [] 56963536 10:25:30:769000 
Exited __init__ LogFileConverter None 56963536 10:25:30:769000 

comment trouver des modèles de répétitions dans un fichier de trace?

Mon but principal est de trouver les motifs répétitifs dans le fichier de trace?

Répondre

0

Pensez à extraire des expressions régulières pour rechercher des modèles.

Par exemple, pour correspondre à des lignes comme ceci:

Exited __init__ LogFileConverter None 56963536 10:25:30:769000 

Vous pouvez utiliser le modèle regex suivant:

>>> import re 
>>> pattern = re.compile('Exited __init__\s+(\w+)\s+(.*?)\s+(\d+)\s+(\d+:\d+:\d+\d+)') 
>>> matches = re.findall(pattern, text) 

Avec un peu de modification, vous devriez être en mesure de trouver les motifs répétitifs .

+0

Je sais que je peux utiliser des expressions régulières pour correspondre à la pattern mais .. ce que je veux, c'est savoir s'il existe une façon générique de faire correspondre tous les motifs répétitifs dans le fichier de trace. – Kaushik

+0

Je pense que vous auriez à écrire au moins quelques expressions régulières qui sont des variantes sur le même thème de base. –

0

Si vous vouliez trouver des répétitions dans les deux premiers champs, vous pourriez les utiliser comme une clé de dictionnaire et les remplir avec une liste de toutes les lignes correspondantes. Lorsque vous avez traité le fichier entier, les entrées de dictionnaire contenant une liste de plusieurs éléments sont des répétitions.

#!/usr/bin/env python 

import fileinput 

def read (line, d=dict()): 
    tokens = line.split() 
    key = ' '.join(tokens[0:2]) 
    try: 
     d[key].append(line) 
    except KeyError: 
     d[key] = [line]in v: 
    return d 

def main(): 
    d = dict() 
    for line in fileinput.input(): 
     read(line, d) 
    for k in d: 
     v = d[k] 
     if len(v) > 1: 
      # print "### %s => %s" % (k, v) for debugging 
      for l in v: 
       print l, 

if __name__ == '__main__': 
    main() 

sortie de l'échantillon (avec les impressions de débogage activées de sorte que vous pouvez voir pourquoi il imprime ces sorties):

### Exited __init__ => ['Exited __init__ ConfigHandler None 56663624 10:25:30:747000\n', 'Exited __init__ ColumnConverter None 56963312 10:25:30:769000\n', 'Exited __init__ PredicatesFactory None 56963424 10:25:30:769000\n', 'Exited __init__ LogFileConverter None 56963536 10:25:30:769000\n'] 
Exited __init__ ConfigHandler None 56663624 10:25:30:747000 
Exited __init__ ColumnConverter None 56963312 10:25:30:769000 
Exited __init__ PredicatesFactory None 56963424 10:25:30:769000 
Exited __init__ LogFileConverter None 56963536 10:25:30:769000 
### Entering __init__ => ["Entering __init__ ConfigHandler ['config_filepath'] 56663624 10:25:30:743000\n", 'Entering __init__ ColumnConverter [] 56963312 10:25:30:769000\n', 'Entering __init__ PredicatesFactory [] 56963424 10:25:30:769000\n', 'Entering __init__ LogFileConverter [] 56963536 10:25:30:769000\n'] 
Entering __init__ ConfigHandler ['config_filepath'] 56663624 10:25:30:743000 
Entering __init__ ColumnConverter [] 56963312 10:25:30:769000 
Entering __init__ PredicatesFactory [] 56963424 10:25:30:769000 
Entering __init__ LogFileConverter [] 56963536 10:25:30:769000 
Questions connexes