Skip to content

Instantly share code, notes, and snippets.

@fritshoogland-yugabyte
Last active April 13, 2021 13:24
Show Gist options
  • Save fritshoogland-yugabyte/8f1dfee5434e7c3fd5ca2fee7c97e817 to your computer and use it in GitHub Desktop.
Save fritshoogland-yugabyte/8f1dfee5434e7c3fd5ca2fee7c97e817 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
#
# sudo pip3 install requests
#
import requests
import datetime
import re
import sys
import getopt
import time
options, remainder = getopt.getopt(sys.argv[1:], 's:hfd:l:', ['severity=', 'help', 'follow', 'daemon=', 'lastminutes='])
for opt, arg in options:
if opt in ('-s', '--severity'):
show_severities = arg
elif opt in ('-f', '--follow'):
follow=True
elif opt in ('-d', '--daemon'):
daemon=arg
elif opt in ('-l', '--lastminutes'):
lastminutes=arg
elif opt in ('-h', '--help'):
print("Yugabyte server log reader.")
print("-s, --severity = filter on log entry severities I (informal), E (error), W (warning), F (failure). Default IEWF.")
print("-f, --follow = keep on displaying new log lines when they are created.")
print("-d, --daemon = get logs from daemon. default localhost:9000 (local tablet server). Currently only http.")
print("-l, --lastminutes = only gets logs from last number of minutes specified.")
print("-h, --help = help function.")
exit(0)
else:
print("Unknown option. Try -h.")
exit(1)
try:
show_severities
except NameError:
show_severities = "IWF"
try:
follow
except NameError:
follow=False
try:
daemon
except NameError:
daemon = "localhost:9000"
try:
lastminutes
except NameError:
lastminutes="525600"
log_table=[]
while True:
previous_log_table=log_table
try:
http_response = requests.get("http://"+daemon+"/logs")
except:
print("error reading logs")
exit(1)
log_table=[]
first_row_parsed=False
for row in http_response.text.splitlines():
if re.match(r"^[IEWF][0-9]{4}", row):
if first_row_parsed:
log_row.append(message)
log_table.append(log_row)
else:
if first_row_parsed:
message=message+'\n'+row
continue
first_row_parsed=True
log_row=[]
split_row=row.split()
sev_date, fake_timestamp, tid, location, message = split_row[0], split_row[1], split_row[2], split_row[3], split_row[4:]
message=' '.join(message)
severity=sev_date[0]
log_row.append(severity)
date_time_string = str(datetime.datetime.now().year)+'-'+sev_date[1:3]+"-"+sev_date[3:5]+" "+fake_timestamp
#date_time_object = datetime.datetime.strptime(date_time_string, '%Y-%m-%d %H:%M:%S.%f')
log_row.append(date_time_string)
log_row.append(tid)
log_row.append(location[:-1])
for row in log_table:
if row in previous_log_table:
log_table.remove(row)
for row in log_table:
if row[0] in show_severities:
if datetime.datetime.strptime(row[1], '%Y-%m-%d %H:%M:%S.%f') > datetime.datetime.now()-datetime.timedelta(minutes=int(lastminutes)):
print(row[0], row[1], row[2], row[3], row[4])
if follow:
try:
time.sleep(2)
except:
print('Cancelled.')
exit(0)
else:
exit(0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment