Spaces:
Sleeping
Sleeping
File size: 2,201 Bytes
889f571 d97f2ec 36ca81e 889f571 d97f2ec 9c660b1 889f571 d97f2ec 889f571 d97f2ec 889f571 36ca81e 889f571 36ca81e 889f571 36ca81e 889f571 36ca81e 889f571 36ca81e 889f571 a076bea 889f571 36ca81e b9c6f79 889f571 |
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 |
from flask import Flask, request, jsonify
import os
import subprocess
import tempfile
import json
import multiprocessing
app = Flask(__name__)
# Dictionary to store donated CPU information
donated_cpus = {}
total_donated_cpus = 0
@app.route('/donate_cpu', methods=['POST'])
def donate_cpu():
global total_donated_cpus
data = request.get_json()
host = data['host']
cpu_count = data['cpu_count']
donated_cpus[host] = {"cpu_count": cpu_count, "usage": 0.0}
total_donated_cpus += cpu_count
return jsonify({"status": "success", "message": f"CPU donated by {host}"})
@app.route('/update_cpu_usage', methods=['POST'])
def update_cpu_usage():
data = request.get_json()
host = data['host']
usage = data['usage']
if host in donated_cpus:
donated_cpus[host]['usage'] = usage
return jsonify({"status": "success", "message": f"Updated CPU usage for {host}: {usage}%"})
return jsonify({"status": "error", "message": "Host not found"}), 404
@app.route('/execute_script', methods=['POST'])
def execute_script():
try:
data = request.get_json()
script_content = data['script_content']
# Save the script to a temporary file
script_file = tempfile.NamedTemporaryFile(delete=False, suffix='.py')
script_file.write(script_content.encode())
script_file.close()
# Run the script using the donated CPUs
cpu_count = total_donated_cpus or 1 # Default to 1 if no CPUs are donated
result = subprocess.run(['python', script_file.name], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, timeout=60)
os.remove(script_file.name)
return jsonify({
"stdout": result.stdout,
"stderr": result.stderr,
"returncode": result.returncode
})
except Exception as e:
return jsonify({"error": str(e)}), 500
@app.route('/cpu_info', methods=['GET'])
def cpu_info():
info = [{"host": host, "cpu_count": data['cpu_count'], "usage": data['usage']} for host, data in donated_cpus.items()]
return jsonify({"cpu_info": info})
if __name__ == "__main__":
app.run(host='0.0.0.0', port=7860)
|