import redis import os from dotenv import load_dotenv # Load environment variables load_dotenv() # Initialize Redis client REDIS_URL = os.environ.get('REDIS') if REDIS_URL: client = redis.Redis.from_url(REDIS_URL, decode_responses=True) else: # Fallback to local Redis client = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True) def get_rate(account): """Get labor rate for an account from Redis cache.""" try: rate = client.get(f"account:{account}:rate") return rate if rate else None except redis.ConnectionError: return None def get_revenue(account): """Get revenue for an account from Redis cache.""" try: revenue = client.get(f"account:{account}:revenue") return revenue if revenue else None except redis.ConnectionError: return None def refresh_redis(): """Flush all Redis data.""" try: client.flushdb() print('Redis flushed!') except redis.ConnectionError: print('Redis connection failed') def refresh_rates(): """Refresh labor rates from database to Redis.""" from api.models import MonthlyRevenue try: revenues = MonthlyRevenue.objects.all() for account in revenues: short_name = account.short_name.short_name rate = account.labor if rate: client.set(f'account:{short_name}:rate', rate) print(f'Labor rate set for {short_name}') print('Done refreshing rates!') except Exception as e: print(f'Error refreshing rates: {e}') def refresh_revenues(): """Refresh revenue data from database to Redis.""" from api.models import MonthlyRevenue try: revenues = MonthlyRevenue.objects.all() for account in revenues: short_name = account.short_name.short_name revenue = account.revenue if revenue: client.set(f'account:{short_name}:revenue', revenue) print(f'Revenue set for {short_name}') print('Done refreshing revenues!') except Exception as e: print(f'Error refreshing revenues: {e}') def renew_all(): """Refresh all cached data from database.""" refresh_redis() refresh_rates() refresh_revenues() print('Redis data has been refreshed!')