Spaces:
Sleeping
Sleeping
File size: 2,697 Bytes
65e40ba 5580f57 61c1719 836f75b 65e40ba 836f75b 15d97c1 a46919c 15d97c1 e02fa6d 836f75b f3aab4f 61c1719 836f75b 62cd5c9 65e40ba fb99609 65e40ba 3d4bf49 65e40ba 61c1719 5ccc24c 61c1719 5ccc24c 65e40ba 5ccc24c 65e40ba 5ccc24c 65e40ba 5ccc24c 65e40ba 5ccc24c 65e40ba 5ccc24c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | from fastapi import FastAPI, HTTPException, Request
from fastapi.responses import JSONResponse
import logging
import os
from typing import List
from LoadBalancer import LoadBalancer
from utils import is_valid_url
CACHE_DIR = os.getenv("CACHE_DIR")
TOKEN = os.getenv("TOKEN")
REPO = os.getenv("REPO")
app = FastAPI()
@app.on_event("startup")
async def startup_event():
global load_balancer
load_balancer = LoadBalancer(cache_dir=CACHE_DIR, token=TOKEN, repo=REPO)
@app.get("/")
def greet_json():
return {"Version": load_balancer.version}
@app.post("/api/post/register")
async def register_instance(request: Request):
try:
data = await request.json()
if not data or "url" not in data:
return JSONResponse(content={"error": "No URL provided"}, status_code=400)
url = data["url"]
if not is_valid_url(url):
return JSONResponse(content={"error": "Invalid URL"}, status_code=400)
# Register the instance
load_balancer.register_instance(url)
logging.info(f"Instance registered: {url}")
return JSONResponse(content={"message": f"Instance {url} registered successfully"}, status_code=200)
except Exception as e:
logging.error(f"Error registering instance: {e}")
return JSONResponse(content={"error": "Failed to register instance"}, status_code=500)
@app.get("/api/get/file_structure")
async def get_file_structure():
return load_balancer.file_structure
@app.get("/api/get/music/store")
async def get_music_store():
return load_balancer.MUSIC_STORE
@app.get("/api/get/music/all")
async def get_all_music_api():
return load_balancer.get_all_music()
@app.get('/api/get/instances')
async def get_instances():
return load_balancer.instances
@app.get('/api/get/instances/health')
async def get_instances_health():
return load_balancer.instances_health
@app.get("/api/get/music/{file_name}")
async def get_music_api(file_name: str):
"""Endpoint to get the music file by title."""
if not file_name:
raise HTTPException(status_code=400, detail="file_name parameter is required")
# Check if the music file is already cached
if file_name in load_balancer.MUSIC_STORE:
url = load_balancer.MUSIC_STORE[file_name]
return JSONResponse(content={"url": url})
music_path = load_balancer.find_music_path(file_name)
if not music_path:
raise HTTPException(status_code=404, detail="Music file not found")
# Start the download in an instance
response = load_balancer.download_music_to_best_instance(file_name=file_name)
if response:
return JSONResponse(content=response)
|