Added a script to delete old API logs
This commit is contained in:
parent
71d4ae1820
commit
b67d0e495f
8
mongoDB script/config.json
Normal file
8
mongoDB script/config.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"MONGODB":{
|
||||
"MONGO_CONNECTION_STRING": "mongodb://devuser:DevPass123@147.93.98.152:27017",
|
||||
"DATABASE_NAME": "DotNetLogsDev",
|
||||
"COLLECTION_NAME": "api-logs"
|
||||
},
|
||||
"DAYS_THRESHOLD": 30
|
||||
}
|
||||
103
mongoDB script/delete-old-logs.py
Normal file
103
mongoDB script/delete-old-logs.py
Normal file
@ -0,0 +1,103 @@
|
||||
import json
|
||||
import sys
|
||||
import datetime
|
||||
import logging
|
||||
from pymongo import MongoClient, errors
|
||||
|
||||
# Setup logging configuration
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(levelname)s - %(message)s',
|
||||
handlers=[
|
||||
logging.StreamHandler(sys.stdout),
|
||||
# logging.FileHandler("mongo_cleanup.log") # Uncomment to log to a file
|
||||
]
|
||||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def load_config(config_path):
|
||||
"""Loads configuration from a JSON file."""
|
||||
try:
|
||||
with open(config_path, "r", encoding="utf-8") as f:
|
||||
return json.load(f)
|
||||
except FileNotFoundError:
|
||||
logger.warning(f"'{config_path}' file not found. Using defaults/environment variables if available.")
|
||||
return {}
|
||||
except Exception as e:
|
||||
logger.critical(f"Failed to load config: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
def delete_old_documents(mongo_uri, db_name, collection_name, days_threshold):
|
||||
client = None
|
||||
try:
|
||||
# Validation
|
||||
if days_threshold is None:
|
||||
raise ValueError("DAYS_THRESHOLD configuration is missing or None.")
|
||||
|
||||
# 1. Connect to MongoDB
|
||||
logger.info(f"Connecting to MongoDB at {mongo_uri}...")
|
||||
client = MongoClient(mongo_uri, serverSelectionTimeoutMS=5000)
|
||||
|
||||
# Check connection
|
||||
client.admin.command('ping')
|
||||
logger.info("Connected successfully.")
|
||||
|
||||
db = client[db_name]
|
||||
collection = db[collection_name]
|
||||
|
||||
# 2. Calculate the cutoff date (Using UTC for consistency)
|
||||
# We explicitly cast to int to prevent type errors
|
||||
cutoff_date = datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(days=int(days_threshold))
|
||||
|
||||
logger.info(f"Targeting documents created before: {cutoff_date} (UTC)")
|
||||
|
||||
# 3. Define the query
|
||||
# Using "Timestamp" as requested. Ensure this matches your DB schema.
|
||||
query = {"Timestamp": {"$lt": cutoff_date}}
|
||||
|
||||
# 4. Perform the deletion
|
||||
logger.info(f"Executing delete query on {db_name}.{collection_name}...")
|
||||
result = collection.delete_many(query)
|
||||
|
||||
logger.info(f"Operation complete. Deleted {result.deleted_count} documents.")
|
||||
|
||||
except errors.ServerSelectionTimeoutError:
|
||||
logger.error("Could not connect to MongoDB. Check URI and network status.")
|
||||
except errors.PyMongoError as e:
|
||||
logger.error(f"MongoDB error occurred: {e}")
|
||||
except ValueError as ve:
|
||||
logger.error(f"Configuration error: {ve}")
|
||||
except Exception as e:
|
||||
logger.error(f"An unexpected error occurred: {e}")
|
||||
finally:
|
||||
# Close the connection
|
||||
if client:
|
||||
client.close()
|
||||
logger.debug("MongoDB connection closed.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
GLOBAL_CONFIG_PATH = "config.json"
|
||||
|
||||
# Load Configuration
|
||||
config = load_config(GLOBAL_CONFIG_PATH)
|
||||
|
||||
# --- CONFIGURATION ---
|
||||
MONGODB_CONFIG = config.get("MONGODB", {})
|
||||
|
||||
# Use .get() with defaults for safety
|
||||
MONGO_URI = MONGODB_CONFIG.get("MONGO_CONNECTION_STRING", "mongodb://localhost:27017/")
|
||||
DB_NAME = MONGODB_CONFIG.get("DATABASE_NAME", "DotNetLogsProd")
|
||||
COLLECTION_NAME = MONGODB_CONFIG.get("COLLECTION_NAME", "api-logs")
|
||||
|
||||
# Days to keep (anything older than this gets deleted)
|
||||
# Checking root level as per your snippet
|
||||
DAYS_THRESHOLD = config.get("DAYS_THRESHOLD")
|
||||
|
||||
# Fallback: If DAYS_THRESHOLD is missing in config, prevent the NoneType error
|
||||
if DAYS_THRESHOLD is None:
|
||||
logger.warning("DAYS_THRESHOLD not found in config. Defaulting to 30 days.")
|
||||
DAYS_THRESHOLD = 30
|
||||
# ---------------------
|
||||
|
||||
# Pass configuration as arguments
|
||||
delete_old_documents(MONGO_URI, DB_NAME, COLLECTION_NAME, DAYS_THRESHOLD)
|
||||
Loading…
x
Reference in New Issue
Block a user