From 6117a90372b1067cb25570c430711edafaac3ab9 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Mon, 22 May 2017 09:24:58 -0400 Subject: [PATCH] Provide a script to summarize hangtraces files --- confluent_server/confluentdbgcli.py | 27 +++++++++++++++++++ .../dbgtools/processhangtraces.py | 22 +++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 confluent_server/confluentdbgcli.py create mode 100644 confluent_server/dbgtools/processhangtraces.py diff --git a/confluent_server/confluentdbgcli.py b/confluent_server/confluentdbgcli.py new file mode 100644 index 00000000..4ed804b5 --- /dev/null +++ b/confluent_server/confluentdbgcli.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2014 IBM Corporation +# Copyright 2015-2016 Lenovo +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import readline +import socket + +connection = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) +self.connection.connect('/var/run/confluent/dbg.sock') + +readline.parse_and_bind("tab: complete") +readline.parse_and_bind("set bell-style none") + diff --git a/confluent_server/dbgtools/processhangtraces.py b/confluent_server/dbgtools/processhangtraces.py new file mode 100644 index 00000000..18df9f33 --- /dev/null +++ b/confluent_server/dbgtools/processhangtraces.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python + + +import sys + +threadtraces = {} + +with open(sys.argv[1]) as tracefile: + traces = tracefile.read() + currtrace = None + for line in traces.split("\n"): + if line.startswith("Thread trace:"): + if currtrace is not None: + if currtrace not in threadtraces: + threadtraces[currtrace] = 0 + threadtraces[currtrace] += 1 + currtrace = line + elif currtrace is not None: + currtrace += line + '\n' +for trace in sorted(threadtraces, key=lambda x: threadtraces[x]): + print('Following stack seen {0} times'.format(threadtraces[trace])) + print(trace)