nexus-1/api/redis/client.py
2026-01-26 09:45:31 -05:00

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!')