84 lines
2.3 KiB
Python
84 lines
2.3 KiB
Python
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!')
|