1. import json
  2. import os
  3. import datetime
  4. import shutil
  5. import argparse
  6. def backup_response_headers(log_file, backup_dir, override_file):
  7. """
  8. Backs up response headers from a log file, allowing for manual overrides.
  9. Args:
  10. log_file (str): Path to the log file containing response headers.
  11. backup_dir (str): Directory to store the backup files.
  12. override_file (str): Path to a JSON file containing header overrides.
  13. """
  14. # Create backup directory if it doesn't exist
  15. os.makedirs(backup_dir, exist_ok=True)
  16. try:
  17. with open(log_file, 'r') as f:
  18. lines = f.readlines()
  19. except FileNotFoundError:
  20. print(f"Error: Log file not found: {log_file}")
  21. return
  22. header_data = {}
  23. for line in lines:
  24. try:
  25. header_name, header_value = line.strip().split(': ', 1)
  26. header_data[header_name] = header_value
  27. except ValueError:
  28. # Ignore lines that don't have the expected format
  29. pass
  30. # Load overrides from JSON file
  31. try:
  32. with open(override_file, 'r') as f:
  33. overrides = json.load(f)
  34. except FileNotFoundError:
  35. print(f"Warning: Override file not found: {override_file}. Continuing without overrides.")
  36. overrides = {}
  37. except json.JSONDecodeError:
  38. print(f"Warning: Invalid JSON in override file: {override_file}. Continuing without overrides.")
  39. overrides = {}
  40. # Filter headers based on overrides
  41. backup_headers = {}
  42. for header, value in header_data.items():
  43. if header in overrides:
  44. backup_headers[header] = overrides[header]
  45. else:
  46. backup_headers[header] = value
  47. # Generate backup filename
  48. timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
  49. backup_filename = os.path.join(backup_dir, f"response_headers_{timestamp}.json")
  50. # Save backup to JSON file
  51. try:
  52. with open(backup_filename, 'w') as f:
  53. json.dump(backup_headers, f, indent=4)
  54. print(f"Backup created: {backup_filename}")
  55. except Exception as e:
  56. print(f"Error writing backup file: {e}")
  57. if __name__ == "__main__":
  58. parser = argparse.ArgumentParser(description="Backup response headers from a log file.")
  59. parser.add_argument("log_file", help="Path to the log file.")
  60. parser.add_argument("backup_dir", help="Directory to store the backup files.")
  61. parser.add_argument("override_file", help="Path to the JSON file containing header overrides.")
  62. args = parser.parse_args()
  63. backup_response_headers(args.log_file, args.backup_dir, args.override_file)

Add your comment