Looks Good unlike what i see :-). It must be some problem with the dotty version or something. My graphviz version is 2.26.3, what would be yours? Anyways, ACK from me.
Cheers, Mathi. ----- hans.nordeb...@ericsson.com wrote: > Hi Mathi, > > I attach two pictures from the output of: > > $./trace2dot -t osafamfd -f saClmDispatch -d amfd_trace.dot > $ dotty amfd_trace.dot > > and > > $./trace2dot -t osafamfd -d amfd_trace.dot > $ dotty amfd_trace.dot > > /Thanks HansN > > On 09/10/2015 10:59 AM, Mathivanan Naickan Palanivelu wrote: > > Hi Hans, > > > > I do appreciate the idea of suggesting dotty, good thought! > > I did run dotty as mentioned in the patch. We could place the > trace2dot with 'execute' > > permissions and place it under tools/devel/dot directory. > > > > Also, the output i get after running dotty doesn't looks intuitive > to me. > > So, for comparison sakes,could you send a picture (snapshot) of how > the graph > > looks to you when you run it on osafamfd trace file? > > > > BR, > > Mathi. > > > > ----- hans.nordeb...@ericsson.com wrote: > > > >> tools/devel/trace2dot | 169 > >> ++++++++++++++++++++++++++++++++++++++++++++++++++ > >> 1 files changed, 169 insertions(+), 0 deletions(-) > >> > >> > >> Python script to create a runtime callgraph from OpenSAF trace > files. > >> A dot file is created and can be viewed using e.g. dotty > >> > >> diff --git a/tools/devel/trace2dot b/tools/devel/trace2dot > >> new file mode 100755 > >> --- /dev/null > >> +++ b/tools/devel/trace2dot > >> @@ -0,0 +1,169 @@ > >> +#!/usr/bin/env python > >> +# > >> +# > >> +# (C) Copyright 201t The OpenSAF Foundation > >> +# > >> +# This program is distributed in the hope that it will be useful, > >> but > >> +# WITHOUT ANY WARRANTY; without even the implied warranty of > >> MERCHANTABILITY > >> +# or FITNESS FOR A PARTICULAR PURPOSE. This file and program are > >> licensed > >> +# under the GNU Lesser General Public License Version 2.1, > February > >> 1999. > >> +# The complete license can be accessed from the following > location: > >> +# http://opensource.org/licenses/lgpl-license.php > >> +# See the Copying file included with the OpenSAF distribution for > >> full > >> +# licensing terms. > >> +# > >> +# Author(s): Ericsson > >> +# > >> +# > >> +""" > >> + trace2dot creates a runtime call graph using an opensaf trace > file > >> as input > >> + and produces a dot file. The generated dot file can be viewed > >> graphically using e.g. dotty. > >> + > >> + Example: > >> + Create a dot file, amfd_trace.dot from osafamfd trace file. > Start > >> from function set_oper_state. > >> + $ trace2dot -t osafamfd -f ssaClmDispatch -d amfd_trace.dot > >> + $ dotty amfd_trace.dot > >> + > >> +""" > >> +import sys > >> +import os > >> +import argparse > >> + > >> + > >> +def run(trace_file, from_function, dot_file): > >> + ''' TBD ''' > >> + infile = open(trace_file) > >> + > >> + if dot_file: > >> + outfile = open(dot_file, 'w') > >> + else: > >> + outfile = sys.stdout > >> + > >> + outfile.write('strict digraph test {\n') > >> + outfile.write('node [shape=record, style=filled];\n') > >> + outfile.write('edge [shape=normal];\n') > >> + > >> + process_infile(infile, from_function, outfile) > >> + > >> + outfile.write('}\n') > >> + > >> + > >> +def check_infile(trace_file): > >> + ''' Rudimentary check for missing TRACE_ENTER/TRACE_LEAVE. > Will > >> not > >> + check for e.g. returns before TRACE_LEAVE. > >> + ''' > >> + infile = open(trace_file) > >> + trace_enter = set() > >> + trace_leave = set() > >> + for line in infile: > >> + items = line.split() > >> + if items.__len__() > 6: > >> + if items[5] == '>>': > >> + name = items[6].rstrip(':') > >> + trace_enter.add(name) > >> + > >> + if items[5] == '<<': > >> + name = items[6].rstrip(':') > >> + trace_leave.add(name) > >> + > >> + for name in trace_enter: > >> + if name not in trace_leave: > >> + print '%s %s' % ('TRACE_LEAVE is missing for function: > ', > >> name) > >> + > >> + for name in trace_leave: > >> + if name not in trace_enter: > >> + print '%s %s' % ('TRACE_ENTER is missing for function: > ', > >> name) > >> + > >> + infile.close() > >> + > >> + > >> +def process_infile(infile, from_function, outfile): > >> + ''' TBD ''' > >> + function_names = [] > >> + from_func_found = False > >> + > >> + for line in infile: > >> + items = line.split() > >> + if items.__len__() > 6: > >> + if items[5] == '>>': > >> + func_enter = items[6].rstrip(':') > >> + if from_function and not from_func_found: > >> + if from_function != func_enter: > >> + continue > >> + else: > >> + from_func_found = True > >> + > >> + function_names.append(func_enter) > >> + > >> + if len(function_names) > 1: > >> + outfile.write( > >> + func_enter + ' [color=grey, shape=box, > >> label="' + func_enter + '"];\n') > >> + else: > >> + outfile.write( > >> + func_enter + ' [color=red, shape=box, > >> label="' + func_enter + '"];\n') > >> + > >> + if items[5] == '<<': > >> + func_leave = items[6].rstrip(':') > >> + if from_function: > >> + if from_function == func_leave: > >> + break > >> + > >> + if len(function_names) > 0: > >> + func_enter = function_names.pop() > >> + if func_enter != func_leave: > >> + print '%s %s %s' % (func_enter, ' has no > >> matching TRACE_LEAVE, found ', func_leave) > >> + outfile.write(func_leave + ' -> ' + > >> func_enter + '\n') > >> + > >> + else: > >> + if len(function_names) > 0: > >> + caller = > >> function_names[len(function_names) - 1] > >> + outfile.write(caller + ' -> ' + > >> func_enter + '\n') > >> + > >> + > >> +def file_exists(filename): > >> + '''Check if arg is a valid file that already exists on the > file > >> + system. > >> + ''' > >> + if not os.path.exists(filename): > >> + raise argparse.ArgumentTypeError( > >> + "The file %s does not exist!" % filename) > >> + else: > >> + return filename > >> + > >> + > >> +def main(): > >> + ''' program main ''' > >> + > >> + parser = argparse.ArgumentParser( > >> + description="Create runtime callgraph from OpenSAF trace > >> file") > >> + > >> + parser.add_argument('-t', '--tracefile', nargs='+', > >> + type=file_exists, help='OpenSAF trace > file') > >> + parser.add_argument('-f', '--fromfunction', nargs='+', > >> + help='Show runtime callgraph from > function') > >> + parser.add_argument('-d', '--dotfile', nargs='+', > help='Result > >> file in dot format') > >> + parser.add_argument('-c', '--checkfile', nargs='+', > >> + type=file_exists, help='Check infile for > >> matching trace_enter trace_leave') > >> + > >> + args = parser.parse_args() > >> + > >> + from_function = '' > >> + dot_file = '' > >> + trace_file = '' > >> + > >> + if args.fromfunction: > >> + from_function = args.fromfunction[0] > >> + > >> + if args.dotfile: > >> + dot_file = args.dotfile[0] > >> + > >> + if args.checkfile: > >> + trace_file = args.checkfile[0] > >> + check_infile(trace_file) > >> + > >> + if args.tracefile: > >> + trace_file = args.tracefile[0] > >> + run(trace_file, from_function, dot_file) > >> + > >> +if __name__ == '__main__': > >> + main() ------------------------------------------------------------------------------ Monitor Your Dynamic Infrastructure at Any Scale With Datadog! Get real-time metrics from all of your servers, apps and tools in one place. SourceForge users - Click here to start your Free Trial of Datadog now! http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel