text-guided-image-colorization / show_stored_data.py
LogicGoInfotechSpaces's picture
Add MongoDB test scripts and documentation (no credentials exposed)
96a6d41
"""
Show what data is stored in MongoDB collections
"""
import os
import sys
import json
import logging
from datetime import datetime, timedelta
from pymongo import MongoClient
from pymongo.errors import ConnectionFailure, ServerSelectionTimeoutError
from bson import ObjectId
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
class JSONEncoder(json.JSONEncoder):
"""Custom JSON encoder for MongoDB documents"""
def default(self, obj):
if isinstance(obj, ObjectId):
return str(obj)
if isinstance(obj, datetime):
return obj.isoformat()
return super().default(obj)
def show_stored_data():
"""Show all data stored in MongoDB collections"""
mongodb_uri = os.getenv("MONGODB_URI")
if not mongodb_uri:
logger.error("❌ MONGODB_URI environment variable not set!")
return False
db_name = os.getenv("MONGODB_DB_NAME", "colorization_db")
try:
client = MongoClient(mongodb_uri, serverSelectionTimeoutMS=5000)
client.admin.command('ping')
logger.info("βœ… Connected to MongoDB\n")
db = client[db_name]
# Collection 1: api_calls
logger.info("=" * 80)
logger.info("COLLECTION 1: api_calls")
logger.info("=" * 80)
logger.info("\nπŸ“‹ Data Structure:")
logger.info("""
{
"_id": ObjectId, # MongoDB auto-generated ID
"endpoint": str, # API endpoint path (e.g., "/health", "/colorize")
"method": str, # HTTP method ("GET", "POST", etc.)
"status_code": int, # HTTP status code (200, 400, 500, etc.)
"timestamp": datetime, # UTC timestamp when API was called
"request_data": dict, # Request parameters/data
"response_data": dict, # Response data returned
"error": str or None, # Error message if any
"user_id": str or None, # User ID if authenticated
"ip_address": str or None # Client IP address
}
""")
api_calls = db["api_calls"]
total = api_calls.count_documents({})
logger.info(f"\nπŸ“Š Total documents: {total}")
if total > 0:
logger.info("\nπŸ“„ Sample Documents:")
samples = list(api_calls.find().sort("timestamp", -1).limit(3))
for i, doc in enumerate(samples, 1):
logger.info(f"\n Document {i}:")
logger.info(f" {json.dumps(doc, cls=JSONEncoder, indent=4)}")
# Collection 2: image_uploads
logger.info("\n" + "=" * 80)
logger.info("COLLECTION 2: image_uploads")
logger.info("=" * 80)
logger.info("\nπŸ“‹ Data Structure:")
logger.info("""
{
"_id": ObjectId, # MongoDB auto-generated ID
"image_id": str, # Unique image identifier (UUID)
"filename": str, # Original filename
"file_size": int, # File size in bytes
"content_type": str, # MIME type (e.g., "image/jpeg")
"uploaded_at": datetime, # UTC timestamp when image was uploaded
"user_id": str or None, # User ID if authenticated
"ip_address": str or None # Client IP address
}
""")
image_uploads = db["image_uploads"]
total = image_uploads.count_documents({})
logger.info(f"\nπŸ“Š Total documents: {total}")
if total > 0:
logger.info("\nπŸ“„ Sample Documents:")
samples = list(image_uploads.find().sort("uploaded_at", -1).limit(3))
for i, doc in enumerate(samples, 1):
logger.info(f"\n Document {i}:")
logger.info(f" {json.dumps(doc, cls=JSONEncoder, indent=4)}")
# Collection 3: colorizations
logger.info("\n" + "=" * 80)
logger.info("COLLECTION 3: colorizations")
logger.info("=" * 80)
logger.info("\nπŸ“‹ Data Structure:")
logger.info("""
{
"_id": ObjectId, # MongoDB auto-generated ID
"result_id": str, # Unique result identifier (UUID)
"image_id": str or None, # Original image identifier
"prompt": str or None, # Text prompt used (if any)
"model_type": str or None, # Model type ("fastai", "pytorch", "sdxl", "gan")
"processing_time": float or None, # Time taken to process in seconds
"created_at": datetime, # UTC timestamp when colorization was created
"user_id": str or None, # User ID if authenticated
"ip_address": str or None # Client IP address
}
""")
colorizations = db["colorizations"]
total = colorizations.count_documents({})
logger.info(f"\nπŸ“Š Total documents: {total}")
if total > 0:
logger.info("\nπŸ“„ Sample Documents:")
samples = list(colorizations.find().sort("created_at", -1).limit(3))
for i, doc in enumerate(samples, 1):
logger.info(f"\n Document {i}:")
logger.info(f" {json.dumps(doc, cls=JSONEncoder, indent=4)}")
# Summary
logger.info("\n" + "=" * 80)
logger.info("SUMMARY")
logger.info("=" * 80)
logger.info(f"\nDatabase: {db_name}")
logger.info(f"Total API calls logged: {api_calls.count_documents({})}")
logger.info(f"Total image uploads logged: {image_uploads.count_documents({})}")
logger.info(f"Total colorizations logged: {colorizations.count_documents({})}")
# Recent activity (last 24 hours)
recent_api = api_calls.count_documents({
"timestamp": {"$gte": datetime.utcnow() - timedelta(hours=24)}
})
recent_uploads = image_uploads.count_documents({
"uploaded_at": {"$gte": datetime.utcnow() - timedelta(hours=24)}
})
recent_colorizations = colorizations.count_documents({
"created_at": {"$gte": datetime.utcnow() - timedelta(hours=24)}
})
logger.info(f"\nπŸ“ˆ Activity in last 24 hours:")
logger.info(f" API calls: {recent_api}")
logger.info(f" Image uploads: {recent_uploads}")
logger.info(f" Colorizations: {recent_colorizations}")
client.close()
return True
except (ConnectionFailure, ServerSelectionTimeoutError) as e:
logger.error(f"❌ Failed to connect to MongoDB: {e}")
return False
except Exception as e:
logger.error(f"❌ Error: {e}")
import traceback
traceback.print_exc()
return False
if __name__ == "__main__":
success = show_stored_data()
sys.exit(0 if success else 1)