INT 21h

Hi, I am Vladimir Smagin, sysadmin. Telegram Email GPG

Python: красивые таблицы в консольном выводе

№ 8577 В разделах: Администрирование Программирование от December 24th, 2017,

На днях понадобилось красиво вывести статистику по логам nginx и тут пришел на помощь python с его горой всевозможных библиотечек и прочих рюшечек. Я использовал библиотеку terminaltables. Установить ее в отдельное окружение или в систему это на ваше усмотрение, ну а я предпочитаю котлеты отдельно, мухи отдельно.

Просто оставляю вам пример, который вы легко адаптируете под себя.

import csv
from terminaltables import AsciiTable

successCounter = 0
redirectCounter = 0
clientErrorCounter = 0
serverErrorCounter = 0
serverErrorCounter500 = 0
serverErrorCounter502 = 0

pathPrefix = './' #local
# pathPrefix = '/var/log/' #server


with open(pathPrefix+'nginx/http.access.log') as nginxLogFile:
    logStringsIterable = csv.reader(nginxLogFile, delimiter=",", quotechar='"', lineterminator=";")
    for logString in logStringsIterable:
        # custom nginx log file:
        # log_format compression '"$remote_addr","$time_local","$status","$request";';
        # Position  |   Description
        # 0         |   IP address
        # 1         |   Time stamp
        # 2         |   Response code
        # 3         |   Request [type url protocol]
        if '20' in logString[2]: successCounter += 1
        if '30' in logString[2]: redirectCounter += 1
        if '40' in logString[2]: clientErrorCounter += 1
        if '500' in logString[2]: serverErrorCounter500 += 1
        if '502' in logString[2]: serverErrorCounter502 += 1
        if '50' in logString[2]: serverErrorCounter += 1

# summary

tableData = [
    ['HTTP codes', 'Type', 'Count'],
    ['20x', 'Success', "{:,}".format(successCounter)],
    ['30x', 'Redirection', "{:,}".format(redirectCounter)],
    ['40x', 'Client errors', "{:,}".format(clientErrorCounter)],
    ['500', 'Server errors', "{:,}".format(serverErrorCounter500)],
    ['502', 'Server errors', "{:,}".format(serverErrorCounter502)],
    ['50x', 'Server errors', "{:,}".format(serverErrorCounter)]
]

resultTable = AsciiTable(tableData)
resultTable.inner_heading_row_border = True
resultTable.outer_border = False
resultTable.inner_row_border = False

print(resultTable.table)

Нет комментариев »

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Яндекс.Метрика