did stuff
This commit is contained in:
parent
0765d98c1f
commit
2e8a4d25b4
@ -25,10 +25,13 @@ def parse_site_list(raw_site_list: str) -> List[SiteDescription]:
|
|||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
INTERVAL = int(os.environ.get("INTERVAL", 30))
|
INTERVAL = int(os.environ.get("INTERVAL", 30))
|
||||||
SITE_LIST = parse_site_list(os.environ.get("SITES"))
|
SITE_LIST = parse_site_list(os.environ.get("SITES")) # This is in priority order
|
||||||
|
|
||||||
SENTRY_DSN = os.environ.get("SENTRY_DSN")
|
SENTRY_DSN = os.environ.get("SENTRY_DSN")
|
||||||
|
|
||||||
RELEASE_ID = os.environ.get("RELEASE_ID", "test")
|
RELEASE_ID = os.environ.get("RELEASE_ID", "test")
|
||||||
RELEASEMODE = os.environ.get("RELEASEMODE", "dev")
|
RELEASEMODE = os.environ.get("RELEASEMODE", "dev")
|
||||||
DEBUG = ('--debug' in sys.argv) or bool(os.environ.get("DEBUG", "").upper() in ['YES', 'TRUE', '1'])
|
DEBUG = ('--debug' in sys.argv) or bool(os.environ.get("DEBUG", "").upper() in ['YES', 'TRUE', '1'])
|
||||||
|
|
||||||
|
REDIS_URL = os.environ["REDIS_URL"]
|
||||||
|
COLLECTOR_URL = os.environ["COLLECTOR_URL"] # http://example.com/report/
|
||||||
|
@ -1,14 +1,31 @@
|
|||||||
#!/usr/bin/env pyton3
|
#!/usr/bin/env pyton3
|
||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
|
from typing import Dict
|
||||||
import sentry_sdk
|
import sentry_sdk
|
||||||
from sentry_sdk.integrations.logging import LoggingIntegration
|
from sentry_sdk.integrations.logging import LoggingIntegration
|
||||||
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from apscheduler.schedulers.blocking import BlockingScheduler
|
from apscheduler.schedulers.blocking import BlockingScheduler
|
||||||
|
|
||||||
from run_scheduler import run
|
import redis
|
||||||
|
import json
|
||||||
|
import run_scheduler
|
||||||
|
from functools import cache
|
||||||
|
|
||||||
|
|
||||||
|
@cache
|
||||||
|
def get_site_url_map() -> Dict[str, str]:
|
||||||
|
return {p.name: p.baseurl for p in Config.SITE_LIST}
|
||||||
|
|
||||||
|
|
||||||
|
def put_site_url_map_into_redis(redis_client: redis.Redis):
|
||||||
|
redis_client.set("SITEURLMAP", json.dumps(get_site_url_map()).encode('utf-8'))
|
||||||
|
|
||||||
|
|
||||||
|
def run_wrapper(redis_client: redis.Redis):
|
||||||
|
put_site_url_map_into_redis(redis_client)
|
||||||
|
run_scheduler.run(redis_client, get_site_url_map())
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
@ -34,8 +51,11 @@ def main():
|
|||||||
level=logging.DEBUG if Config.DEBUG else logging.INFO
|
level=logging.DEBUG if Config.DEBUG else logging.INFO
|
||||||
)
|
)
|
||||||
|
|
||||||
|
redis_client = redis.from_url(Config.REDIS_URL)
|
||||||
|
put_site_url_map_into_redis(redis_client)
|
||||||
|
|
||||||
scheduler = BlockingScheduler()
|
scheduler = BlockingScheduler()
|
||||||
scheduler.add_job(run, trigger='interval', seconds=Config.INTERVAL)
|
scheduler.add_job(lambda: run_wrapper(redis_client), trigger='interval', seconds=Config.INTERVAL)
|
||||||
try:
|
try:
|
||||||
scheduler.start()
|
scheduler.start()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
|
@ -1,5 +1,26 @@
|
|||||||
|
from typing import Dict
|
||||||
import logging
|
import logging
|
||||||
|
from redis import Redis
|
||||||
|
import requests
|
||||||
|
from config import Config
|
||||||
|
|
||||||
|
from urllib.parse import urljoin
|
||||||
|
|
||||||
|
|
||||||
def run():
|
def run(redis_client: Redis, site_url_map: Dict[str, str]):
|
||||||
logging.info("Csirip")
|
# Get weather report
|
||||||
|
# get {http://example.com/report/}{site} The first part supplied
|
||||||
|
logging.debug("Getting performance reports...")
|
||||||
|
r = requests.get(urljoin(Config.COLLECTOR_URL, "site"), timeout=10)
|
||||||
|
r.raise_for_status()
|
||||||
|
|
||||||
|
# TODO:
|
||||||
|
# - set the default scheduling site
|
||||||
|
# - Check if scheduling is required: any derivatives are above 0 for an extended period
|
||||||
|
# - if yes, then decide where to schedule
|
||||||
|
# - any sites with 0 derivative?
|
||||||
|
# - Check the k8s api before scheduling to see if the pod is running
|
||||||
|
# - check if there are any pod running where 0 units scheduled for extended time
|
||||||
|
# - delete that pod
|
||||||
|
# - write some log, so we can draw nice graphs
|
||||||
|
# Optional: check if a higher priority pod have free capacity, and move lower ones up
|
||||||
|
Loading…
Reference in New Issue
Block a user