#!/usr/bin/python # -*- coding: utf-8 -*- # Originally based on code from: https://leancrew.com/all-this/2013/07/parsing-my-apache-logs/ import os import re import sys import time from collections import Counter from datetime import date, timedelta from datetime import datetime from os.path import join, isfile # print('version is', sys.version) def main(): script = sys.argv[0] # filename = sys.argv[2] # filenametest = "/home/example.com.access_log" # username = 'server' username = str(sys.argv[1]) # Define the day of interest in the Apache common log format. try: daysago = int(sys.argv[2]) # daysago = 4 except: daysago = 0 the_day = date.today() - timedelta(daysago) apache_day = the_day.strftime('[%d/%b/%Y:') dcpumon_day = the_day.strftime('%Y/%b/%d') # Set variables to empty controlpanel = '' domlogs_path = '' try: if os.path.isfile('/usr/local/cpanel/cpanel') | os.path.isfile(os.getcwd() + '/cpanel'): controlpanel = 'cpanel' datetime_dcpumon = date.today().strftime('%Y/%b/%d') # 2020/Feb/10 # Current Dcpumon file dcpumon_current_log = "/var/log/dcpumon/" + datetime_dcpumon # /var/log/dcpumon/2019/Feb/15 acesslog_sed = "-ssl_log" if username == 'server': domlogs_path = '/usr/local/apache/domlogs/' else: user_homedir = "/home/" + username user_accesslogs = "/home/" + username + "/logs/" domlogs_path = "/usr/local/apache/domlogs/" + username elif os.path.isfile('/usr/bin/cyberpanel') | os.path.isfile(os.getcwd() + '/cyberpanel'): controlpanel = 'cyberpanel' acesslog_sed = ".access_log" if username == 'server': # Needs updated to glob all /home/*/logs/ domlogs_path = '/home/username/Desktop/domlogs' else: # Get users homedir path user_homedir = os.path.expanduser("~" + username) domlogs_path = user_homedir + "/logs/" except: controlpanel = 'Control Panel not found' # Define Output file stats_output = open(os.getcwd() + '/stats.txt', "w") # Define log path directory path = domlogs_path # path = "/home/username/Desktop/domlogs" # Get list of dir contents logs_path_contents = os.listdir(path) # Get list of files only from this directory logs = filter(lambda f: isfile(join(path, f)), logs_path_contents) # Regex for the Apache common log format. parts = [ # host %h :ip/hostname of the client 172.68.142.138 # indent %l (unused) :client identity via client's identd configuration - # user %u :HTTP authenticated user ID - # time %t :timestamp [09/Mar/2019:00:38:03 -0600] # request "%r" :request method of request, resource requested, & protocol "POST /wp-login.php HTTP/1.1" # status %>s :Apache status code 404 # size %b (careful,can be'-'):size of request in bytes, excluding headers 3767 # referrer "%{Referer}i" :Referer "https://www.google.com/" # user agent "%{User-agent}i":User-Agent "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0" r'(?P\S+)', r'\S+', r'(?P\S+)', r'\[(?P