From f2c6609457893183153810528e505d9470fc9624 Mon Sep 17 00:00:00 2001 From: rewby Date: Sun, 27 Aug 2023 20:34:06 +0200 Subject: [PATCH] Add weighting support. --- main.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/main.py b/main.py index f1416ab..b467c03 100644 --- a/main.py +++ b/main.py @@ -17,22 +17,22 @@ def hello_world(): return "Target offload dispatcher" +prom = get_prom_client() + + @app.route("/offload_target") def offload_target(): expected_size = int(request.args.get("SIZE_HINT", 20*1024*1024*1024)) - targets = copy.deepcopy(app.config["TARGETS"]) - random.shuffle(targets) - prom = get_prom_client() - for target in targets: - app.logger.info(f"Considering target {target['url']}...") - result = prom.custom_query(query=target["free_space"]["query"]) - if len(result) != 1: - continue - result = result[0] - target_free_space = int(result['value'][1]) - expected_free_space = target_free_space - expected_size - app.logger.info(f"Available space: {target_free_space} Expected size: {expected_size}") - if expected_free_space < target["free_space"].get("minimum", 1024 * 1024 * 1024 * 500): - continue - return {"url": target["url"]} - return "Unable to allocate target", 500 + weights = [x.get("weight", 100) for x in app.config["TARGETS"]] + target = random.choices(app.config["TARGETS"], weights=weights)[0] + app.logger.info(f"Considering target {target['url']}...") + result = prom.custom_query(query=target["free_space"]["query"]) + if len(result) != 1: + return "Unable to allocate target. Can't get space info.", 500 + result = result[0] + target_free_space = int(result['value'][1]) + expected_free_space = target_free_space - expected_size + app.logger.info(f"Available space: {target_free_space} Expected size: {expected_size}") + if expected_free_space < target["free_space"].get("minimum", 1024 * 1024 * 1024 * 500): + return "Unable to allocate target. Not enough space on selected machine.", 507 + return {"url": target["url"]}