load-balancer / old.LoadBalancer.py
ChandimaPrabath's picture
0.0.2 V Beta
bd51aea
raw
history blame
2.91 kB
import time
import logging
from threading import Thread, Event, Timer
from api import InstancesAPI
class LoadBalancer:
def __init__(self, polling_interval=10, max_retries=3, initial_delay=1):
self.version = "0.0.1 V Beta"
self.instances = []
self.polling_interval = polling_interval
self.max_retries = max_retries
self.initial_delay = initial_delay
self.stop_event = Event()
self.instances_api = InstancesAPI(self.instances)
def register_instance(self, instance_url):
if instance_url not in self.instances:
self.instances.append(instance_url)
logging.info(f"Registered instance {instance_url}")
else:
logging.info(f"Instance {instance_url} is already registered.")
def remove_instance(self, instance_url):
if instance_url in self.instances:
self.instances.remove(instance_url)
logging.info(f"Removed instance {instance_url}")
else:
logging.info(f"Instance {instance_url} not found for removal.")
def get_reports(self):
reports = self.instances_api.fetch_reports()
for instance_url in self.instances[:]: # Copy list to avoid modification during iteration
if instance_url in reports:
report = reports[instance_url]
logging.info(f"Report from {instance_url}: {report}")
self.process_report(instance_url, report)
else:
logging.error(f"Failed to get report from {instance_url}. Removing instance.")
self.remove_instance(instance_url)
def process_report(self, instance_url, report):
# Process the report (film_store, tv_store, cache_size) here
logging.info(f"Processing report from {instance_url}")
# Example: Print the film_store and tv_store
logging.info(f"Film Store: {report.get('film_store')}")
logging.info(f"TV Store: {report.get('tv_store')}")
logging.info(f"Cache Size: {report.get('cache_size')}")
def start_polling(self):
logging.info("Starting polling.")
while not self.stop_event.is_set():
self.get_reports()
time.sleep(self.polling_interval)
logging.info("Polling stopped.")
def stop_polling(self):
logging.info("Stopping polling.")
self.stop_event.set()
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
load_balancer = LoadBalancer()
# Example registration (in real use, handle this via an API endpoint)
load_balancer.register_instance("http://localhost:5000")
# Start polling in a separate thread
polling_thread = Thread(target=load_balancer.start_polling)
polling_thread.start()
# Stop polling after some time for demonstration purposes
Timer(300, load_balancer.stop_polling).start() # Stop after 5 minutes