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)