arg parse

This commit is contained in:
Alfredo Oliviero 2024-07-11 14:24:32 +02:00
parent ad728c1f8f
commit 4a24a47175
1 changed files with 45 additions and 24 deletions

View File

@ -4,18 +4,7 @@ import re
import os
from datetime import datetime
import json
# Optional variable to define the directory of logs
logs_dir = None # Example: "./logs"
# Explicit list of files and labels
files_and_labels = [
# ("./logs/startup_lr62-pre-02.log", "lr62-pre-02"),
# ("./logs/startup_lr62-pre-01.log", "lr62-pre-01"),
# ("./logs/startup_lr62-dev.log", "lr62-dev"),
("./logs/startup_lr62-prod-02.log", "lr62-prod-02"),
("./logs/startup_lr62-prod-01.log", "lr62-prod-01"),
]
import argparse
# Function to load data from files
def load_data(file_path):
@ -43,9 +32,45 @@ def find_files_and_labels(logs_dir):
files_and_labels.append((file_path, label))
return files_and_labels
# If logs_dir is defined, populate files_and_labels from the directory
if logs_dir:
files_and_labels = find_files_and_labels(logs_dir)
# Parsing command-line arguments
parser = argparse.ArgumentParser(
description='Process server startup logs.',
epilog='''
Examples of usage:
1. Use log directory and results directory with a specific date range:
python analyze_startup.py --log-dir ./logs --results-dir ./results --min-date 2023-07-01 --max-date 2023-12-31
2. Use specific log files with automatic labels:
python analyze_startup.py -f ./logs/startup_lr62-prod-01.log -f ./logs/startup_lr62-prod-02.log
3. Use specific log files with custom labels:
python analyze_startup.py -f ./logs/startup_lr62-prod-01.log -l prod01 -f ./logs/startup_lr62-prod-02.log -l prod02
4. Combine log directory and specific files:
python analyze_startup.py --log-dir ./logs -f ./logs/startup_lr62-dev.log -l dev --results-dir ./results --min-date 2023-07-01
''',
formatter_class=argparse.RawTextHelpFormatter
)
parser.add_argument('--log-dir', type=str, default=None, help='Directory containing log files')
parser.add_argument('--results-dir', type=str, default='./results', help='Directory to save results')
parser.add_argument('--max-date', type=str, default=None, help='Maximum date for filtering logs (YYYY-MM-DD)')
parser.add_argument('--min-date', type=str, default='2023-07-01', help='Minimum date for filtering logs (YYYY-MM-DD)')
parser.add_argument('-f', '--file', type=str, action='append', help='Explicit log file')
parser.add_argument('-l', '--label', type=str, action='append', help='Label for explicit log file')
args = parser.parse_args()
# Handling explicit files and labels
files_and_labels = []
if args.file:
for i, file in enumerate(args.file):
label = args.label[i] if args.label and len(args.label) > i else re.search(r'startup_(.+)\.log', file).group(1)
files_and_labels.append((file, label))
# If log_dir is defined, populate files_and_labels from the directory
if args.log_dir:
files_and_labels += find_files_and_labels(args.log_dir)
# Print the list of calculated files and labels in a readable format
print("files_and_labels = [")
@ -53,20 +78,16 @@ for file_path, label in files_and_labels:
print(f' ("{file_path}", "{label}"),')
print("]")
min_date_str = "2023-07-01" # Default start date
max_date_str = None # Default end date
# Convert date strings to datetime objects
min_date = pd.to_datetime(min_date_str) if min_date_str else None
max_date = pd.to_datetime(max_date_str) if max_date_str else None
min_date = pd.to_datetime(args.min_date) if args.min_date else None
max_date = pd.to_datetime(args.max_date) if args.max_date else None
# Use the current date if max_date_str is None
current_date_str = datetime.now().strftime("%Y-%m-%d")
date_range_str = f"{min_date_str}_to_{max_date_str if max_date_str else current_date_str}"
date_range_str = f"{args.min_date}_to_{args.max_date if args.max_date else current_date_str}"
# Ensure the results directory exists
results_dir = "./results"
os.makedirs(results_dir, exist_ok=True)
os.makedirs(args.results_dir, exist_ok=True)
# Plot setup
plt.figure(figsize=(14, 7))
@ -94,7 +115,7 @@ for file_path, label in files_and_labels:
# Create the filename base using the date range and labels
labels_str = "_".join([label for _, label in files_and_labels])
filename_base = f"{results_dir}/server_startup_{labels_str}_{date_range_str}"
filename_base = f"{args.results_dir}/server_startup_{labels_str}_{date_range_str}"
png_filename = f"{filename_base}.png"
json_filename = f"{filename_base}.json"