# Custom autoscaling logic
@hy.schedule("*/2 * * * *") # Every 2 minutes
def autoscale_workers():
"""Scale workers based on queue depth"""
queue_depths = {
"critical": hy.get_queue_depth("critical"),
"batch": hy.get_queue_depth("batch"),
"default": hy.get_queue_depth("default")
}
scaling_decisions = []
for queue, depth in queue_depths.items():
if depth > 100:
# Scale up
scaling_decisions.append({
"queue": queue,
"action": "scale_up",
"target_workers": min(10, depth // 20)
})
elif depth < 10:
# Scale down
scaling_decisions.append({
"queue": queue,
"action": "scale_down",
"target_workers": max(1, depth // 5)
})
return {
"timestamp": time.time(),
"queue_depths": queue_depths,
"scaling_decisions": scaling_decisions
}