refactor: Standardize error logging by using logger.error in state machine callbacks and capture_and_log in management commands.

This commit is contained in:
pacnpal
2026-01-04 18:45:22 -05:00
parent dd2d09b1c7
commit 30aa887d2a
5 changed files with 43 additions and 53 deletions

View File

@@ -16,6 +16,7 @@ from django.utils import timezone
from apps.parks.models import Park from apps.parks.models import Park
from apps.rides.models import Ride from apps.rides.models import Ride
from apps.core.utils import capture_and_log
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -90,7 +91,7 @@ class Command(BaseCommand):
self.stdout.write(f" {item['name']} ({item['park']}) - opened: {item['date_opened']}") self.stdout.write(f" {item['name']} ({item['park']}) - opened: {item['date_opened']}")
except Exception as e: except Exception as e:
logger.error(f"Error calculating new content: {e}", exc_info=True) capture_and_log(e, 'Calculate new content', source='management', severity='high')
raise CommandError(f"Failed to calculate new content: {e}") from None raise CommandError(f"Failed to calculate new content: {e}") from None
def _get_new_parks(self, cutoff_date: datetime, limit: int) -> list[dict[str, Any]]: def _get_new_parks(self, cutoff_date: datetime, limit: int) -> list[dict[str, Any]]:

View File

@@ -16,6 +16,7 @@ from django.utils import timezone
from apps.core.analytics import PageView from apps.core.analytics import PageView
from apps.parks.models import Park from apps.parks.models import Park
from apps.rides.models import Ride from apps.rides.models import Ride
from apps.core.utils import capture_and_log
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -99,7 +100,7 @@ class Command(BaseCommand):
self.stdout.write(f" {item['name']} (score: {item.get('views_change', 'N/A')})") self.stdout.write(f" {item['name']} (score: {item.get('views_change', 'N/A')})")
except Exception as e: except Exception as e:
logger.error(f"Error calculating trending content: {e}", exc_info=True) capture_and_log(e, 'Calculate trending content', source='management', severity='high')
raise CommandError(f"Failed to calculate trending content: {e}") from None raise CommandError(f"Failed to calculate trending content: {e}") from None
def _calculate_trending_parks( def _calculate_trending_parks(
@@ -199,7 +200,7 @@ class Command(BaseCommand):
return final_score return final_score
except Exception as e: except Exception as e:
logger.error(f"Error calculating score for {content_type} {content_obj.id}: {e}") capture_and_log(e, f'Calculate score for {content_type} {content_obj.id}', source='management', severity='medium')
return 0.0 return 0.0
def _calculate_view_growth_score( def _calculate_view_growth_score(

View File

@@ -75,8 +75,6 @@ from typing import Any, Optional
from django.db import models from django.db import models
from apps.core.utils import capture_and_log
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -499,11 +497,9 @@ class TransitionCallbackRegistry:
overall_success = False overall_success = False
if not callback.continue_on_error: if not callback.continue_on_error:
capture_and_log( logger.error(
RuntimeError(f'Callback {callback.name} returned False'), f"Aborting callback chain - {callback.name} failed "
f'Aborting callback chain - continue_on_error=False', f"and continue_on_error=False"
source='state_machine',
severity='medium',
) )
break break
@@ -513,11 +509,9 @@ class TransitionCallbackRegistry:
overall_success = False overall_success = False
if not callback.continue_on_error: if not callback.continue_on_error:
capture_and_log( logger.error(
e, f"Aborting callback chain - {callback.name} raised exception "
f'Aborting callback chain - {callback.name} raised exception', f"and continue_on_error=False"
source='state_machine',
severity='high',
) )
break break

View File

@@ -20,7 +20,6 @@ from .signals import (
pre_state_transition, pre_state_transition,
state_transition_failed, state_transition_failed,
) )
from apps.core.utils import capture_and_log
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -85,12 +84,8 @@ def with_callbacks(
if not pre_success and pre_failures: if not pre_success and pre_failures:
for callback, exc in pre_failures: for callback, exc in pre_failures:
if not callback.continue_on_error: if not callback.continue_on_error:
capture_and_log( logger.error(f"Pre-transition callback {callback.name} failed, "
exc or RuntimeError(f'Pre-transition callback {callback.name} failed'), f"aborting transition")
f'Aborting transition - pre-callback failed',
source='state_machine',
severity='high',
)
if exc: if exc:
raise exc raise exc
raise RuntimeError(f"Pre-transition callback {callback.name} failed") raise RuntimeError(f"Pre-transition callback {callback.name} failed")

View File

@@ -12,6 +12,7 @@ from apps.rides.models import (
RollerCoasterStats, RollerCoasterStats,
) )
from apps.rides.models.company import Company as RideCompany from apps.rides.models.company import Company as RideCompany
from apps.core.utils import capture_and_log
class Command(BaseCommand): class Command(BaseCommand):
@@ -111,9 +112,11 @@ class Command(BaseCommand):
self.stdout.write(self.style.SUCCESS("Successfully cleaned up existing sample data!")) self.stdout.write(self.style.SUCCESS("Successfully cleaned up existing sample data!"))
except Exception as e: except Exception as e:
self.logger.error( capture_and_log(
f"Error during data cleanup: {str(e)}", e,
exc_info=True, 'Data cleanup error',
source='management',
severity='high',
) )
self.stdout.write(self.style.ERROR(f"Failed to clean up existing data: {str(e)}")) self.stdout.write(self.style.ERROR(f"Failed to clean up existing data: {str(e)}"))
raise raise
@@ -152,7 +155,7 @@ class Command(BaseCommand):
self.stdout.write(self.style.SUCCESS("Successfully created comprehensive sample data!")) self.stdout.write(self.style.SUCCESS("Successfully created comprehensive sample data!"))
except Exception as e: except Exception as e:
self.logger.error(f"Error during sample data creation: {str(e)}", exc_info=True) capture_and_log(e, 'Sample data creation error', source='management', severity='high')
self.stdout.write(self.style.ERROR(f"Failed to create sample data: {str(e)}")) self.stdout.write(self.style.ERROR(f"Failed to create sample data: {str(e)}"))
raise raise
@@ -333,7 +336,7 @@ class Command(BaseCommand):
}" }"
) )
except Exception as e: except Exception as e:
self.logger.error(f"Error creating park company {data['name']}: {str(e)}") capture_and_log(e, f"Create park company {data['name']}", source='management', severity='medium')
raise raise
# Create companies in rides app (for manufacturers and designers) # Create companies in rides app (for manufacturers and designers)
@@ -356,11 +359,11 @@ class Command(BaseCommand):
}" }"
) )
except Exception as e: except Exception as e:
self.logger.error(f"Error creating ride company {data['name']}: {str(e)}") capture_and_log(e, f"Create ride company {data['name']}", source='management', severity='medium')
raise raise
except Exception as e: except Exception as e:
self.logger.error(f"Error in create_companies: {str(e)}") capture_and_log(e, 'Create companies', source='management', severity='high')
raise raise
def create_parks(self): def create_parks(self):
@@ -518,19 +521,18 @@ class Command(BaseCommand):
park_location.set_coordinates(loc_data["latitude"], loc_data["longitude"]) park_location.set_coordinates(loc_data["latitude"], loc_data["longitude"])
park_location.save() park_location.save()
except Exception as e: except Exception as e:
self.logger.error( capture_and_log(
f"Error creating location for park { e, f"Create location for park {park_data['name']}",
park_data['name'] source='management', severity='medium'
}: {str(e)}"
) )
raise raise
except Exception as e: except Exception as e:
self.logger.error(f"Error creating park {park_data['name']}: {str(e)}") capture_and_log(e, f"Create park {park_data['name']}", source='management', severity='medium')
raise raise
except Exception as e: except Exception as e:
self.logger.error(f"Error in create_parks: {str(e)}") capture_and_log(e, 'Create parks', source='management', severity='high')
raise raise
def create_rides(self): def create_rides(self):
@@ -597,7 +599,7 @@ class Command(BaseCommand):
}" }"
) )
except Exception as e: except Exception as e:
self.logger.error(f"Error creating ride model {model_data['name']}: {str(e)}") capture_and_log(e, f"Create ride model {model_data['name']}", source='management', severity='medium')
raise raise
# Create rides # Create rides
@@ -822,19 +824,18 @@ class Command(BaseCommand):
stats_data = ride_data["coaster_stats"] stats_data = ride_data["coaster_stats"]
RollerCoasterStats.objects.create(ride=ride, **stats_data) RollerCoasterStats.objects.create(ride=ride, **stats_data)
except Exception as e: except Exception as e:
self.logger.error( capture_and_log(
f"Error creating stats for ride {ride_data['name']}: { e, f"Create stats for ride {ride_data['name']}",
str(e) source='management', severity='medium'
}"
) )
raise raise
except Exception as e: except Exception as e:
self.logger.error(f"Error creating ride {ride_data['name']}: {str(e)}") capture_and_log(e, f"Create ride {ride_data['name']}", source='management', severity='medium')
raise raise
except Exception as e: except Exception as e:
self.logger.error(f"Error in create_rides: {str(e)}") capture_and_log(e, 'Create rides', source='management', severity='high')
raise raise
def create_park_areas(self): def create_park_areas(self):
@@ -967,11 +968,11 @@ class Command(BaseCommand):
} in {park.name}" } in {park.name}"
) )
except Exception as e: except Exception as e:
self.logger.error(f"Error creating areas for park {area_group['park']}: {str(e)}") capture_and_log(e, f"Create areas for park {area_group['park']}", source='management', severity='medium')
raise raise
except Exception as e: except Exception as e:
self.logger.error(f"Error in create_park_areas: {str(e)}") capture_and_log(e, 'Create park areas', source='management', severity='high')
raise raise
def create_reviews(self): def create_reviews(self):
@@ -1043,10 +1044,9 @@ class Command(BaseCommand):
}" }"
) )
except Exception as e: except Exception as e:
self.logger.error( capture_and_log(
f"Error creating park review for {review_data['park']}: { e, f"Create park review for {review_data['park']}",
str(e) source='management', severity='medium'
}"
) )
raise raise
@@ -1102,15 +1102,14 @@ class Command(BaseCommand):
}" }"
) )
except Exception as e: except Exception as e:
self.logger.error( capture_and_log(
f"Error creating ride review for {review_data['ride']}: { e, f"Create ride review for {review_data['ride']}",
str(e) source='management', severity='medium'
}"
) )
raise raise
self.stdout.write(self.style.SUCCESS("Sample data creation completed!")) self.stdout.write(self.style.SUCCESS("Sample data creation completed!"))
except Exception as e: except Exception as e:
self.logger.error(f"Error in create_reviews: {str(e)}") capture_and_log(e, 'Create reviews', source='management', severity='high')
raise raise