Skip to content

Commit aa7b90e

Browse files
authored
[storyteller] allow storyteller to work on downloaded logs (sonic-net#1388)
- What I did Add log path parameter to allow storyteller to work on logs downloaded from sonic devices. Improve reboot regex to capture more warm reboot related logs. - How to verify it Use storyteller against a sonic dump.
1 parent a6ae218 commit aa7b90e

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

scripts/storyteller

+8-5
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@ regex_dict = {
1414
'crash' : 'what\|unexpected exception\|notify_OA_about_syncd_exception\|SIG\|not expected',
1515
'interface' : 'updatePortOperStatus\|Configure .* to',
1616
'lag' : 'link becomes\|addLag',
17-
'reboot' : 'BOOT\|rc.local\|old_config\|minigraph.xml\|Rebooting\|reboot\|executeOperationsOnAsic\|getAsicView\|dumpVidToAsicOperatioId',
17+
'reboot' : 'BOOT\|rc.local\|old_config\|minigraph.xml\|Rebooting\|reboot\|executeOperationsOnAsic\|getAsicView\|dumpVidToAsicOperatioId\|neighbor_adv\|Pausing\|shutdown\|warm',
1818
'service' : 'Starting\|Stopping\|Started\|Stopped',
1919
}
2020

2121

2222
def exec_cmd(cmd):
23-
out = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True, text=True)
23+
# Use universal_newlines (instead of text) so that this tool can work with any python versions.
24+
out = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True, universal_newlines=True)
2425
stdout, stderr = out.communicate()
2526
return out.returncode, stdout, stderr
2627

@@ -37,9 +38,9 @@ def build_options(after=0, before=0, context=0):
3738
return ' '.join(x for x in options)
3839

3940

40-
def find_log(log, regex, after=0, before=0, context=0):
41+
def find_log(logpath, log, regex, after=0, before=0, context=0):
4142
options = build_options(after, before, context)
42-
cmd = 'ls -rt /var/log/{}* | xargs zgrep -a {} "{}"'.format(log, options, regex)
43+
cmd = 'ls -rt {}/{}* | xargs zgrep -a {} "{}"'.format(logpath, log, options, regex)
4344
_, out, _ = exec_cmd(cmd)
4445
'''
4546
Opportunity to improve:
@@ -66,6 +67,8 @@ def main():
6667
type=str, required=False, default='syslog')
6768
parser.add_argument('-c', '--category', help='Categories: bgp, crash, interface, lag, reboot, service Specify multiple categories as c1,c2,c3; default: reboot',
6869
type=str, required=False, default='reboot')
70+
parser.add_argument('-p', '--logpath', help='log file path, e.g. /var/log; default: /var/log',
71+
type=str, required=False, default='/var/log')
6972
parser.add_argument('-A', '--after', help='Show N lines after match',
7073
type=int, required=False, default=0)
7174
parser.add_argument('-B', '--before', help='Show N lines before match',
@@ -78,7 +81,7 @@ def main():
7881
log = args.log
7982
reg = build_regex(args.category)
8083

81-
find_log(log, reg, args.after, args.before, args.context)
84+
find_log(args.logpath, log, reg, args.after, args.before, args.context)
8285

8386

8487
if __name__ == '__main__':

0 commit comments

Comments
 (0)