init
parent
3d03ffa2c4
commit
f4fefa522a
|
|
@ -0,0 +1,5 @@
|
|||
FROM python:3.9
|
||||
WORKDIR /app
|
||||
COPY . .
|
||||
RUN pip install fastapi uvicorn
|
||||
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "6661"]
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
from fastapi import FastAPI, HTTPException
|
||||
from pydantic import BaseModel
|
||||
import sqlite3
|
||||
import datetime
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
# Создаем соединение с базой данных
|
||||
conn = sqlite3.connect("/db/rustdesk.db", check_same_thread=False)
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Создаем таблицу, если её нет
|
||||
cursor.execute("""
|
||||
CREATE TABLE IF NOT EXISTS installs (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
rust_id TEXT,
|
||||
computer_name TEXT,
|
||||
install_time TEXT
|
||||
)
|
||||
""")
|
||||
conn.commit()
|
||||
|
||||
# Модель данных
|
||||
class InstallData(BaseModel):
|
||||
rust_id: str
|
||||
computer_name: str
|
||||
install_time: str
|
||||
|
||||
# Маршрут для получения всех записей
|
||||
@app.get("/api/installs")
|
||||
def get_installs():
|
||||
cursor.execute("SELECT * FROM installs")
|
||||
rows = cursor.fetchall()
|
||||
# Преобразуем результаты в список словарей
|
||||
result = []
|
||||
for row in rows:
|
||||
result.append({
|
||||
"id": row[0],
|
||||
"rust_id": row[1],
|
||||
"computer_name": row[2],
|
||||
"install_time": row[3]
|
||||
})
|
||||
return result
|
||||
|
||||
# Маршрут для добавления новой записи
|
||||
@app.post("/api/install")
|
||||
def add_install(data: InstallData):
|
||||
cursor.execute("INSERT INTO installs (rust_id, computer_name, install_time) VALUES (?, ?, ?)",
|
||||
(data.rust_id, data.computer_name, data.install_time))
|
||||
conn.commit()
|
||||
return {"status": "success"}
|
||||
|
||||
# Добавляем маршрут для удаления записи
|
||||
@app.delete("/api/delete/{install_id}")
|
||||
async def delete_install(install_id: int):
|
||||
try:
|
||||
cursor.execute("DELETE FROM installs WHERE id = ?", (install_id,))
|
||||
conn.commit()
|
||||
if cursor.rowcount == 0:
|
||||
raise HTTPException(status_code=404, detail="Запись не найдена")
|
||||
return {"status": "success"}
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=["http://10.0.0.10:8080", "http://localhost:8080"], # Добавляем localhost
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,16 @@
|
|||
version: '3.8'
|
||||
|
||||
services:
|
||||
backend:
|
||||
build: ./backend
|
||||
ports:
|
||||
- "6661:6661"
|
||||
volumes:
|
||||
- ./db:/db
|
||||
|
||||
frontend:
|
||||
build: ./frontend
|
||||
ports:
|
||||
- "8080:8080"
|
||||
volumes:
|
||||
- ./db:/db
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
FROM python:3.9
|
||||
WORKDIR /app
|
||||
COPY . .
|
||||
RUN pip install flask
|
||||
CMD ["python", "app.py"]
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
from flask import Flask, render_template
|
||||
import sqlite3
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
@app.route("/")
|
||||
def index():
|
||||
conn = sqlite3.connect("/db/rustdesk.db")
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("SELECT * FROM installs")
|
||||
data = cursor.fetchall()
|
||||
conn.close()
|
||||
return render_template("index.html", installs=data)
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(host="0.0.0.0", port=8080, debug=True)
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Установки RustDesk</title>
|
||||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||||
<script src="https://cdn.datatables.net/1.11.5/js/jquery.dataTables.min.js"></script>
|
||||
<link rel="stylesheet" href="https://cdn.datatables.net/1.11.5/css/jquery.dataTables.min.css">
|
||||
<script>
|
||||
const API_URL = "/api";
|
||||
|
||||
$(document).ready(function () {
|
||||
$.getJSON(`${API_URL}/installs`, function (data) {
|
||||
console.log("Полученные данные:", data);
|
||||
|
||||
let table = $('#rustdeskTable').DataTable({
|
||||
"order": [[3, "desc"]],
|
||||
"destroy": true,
|
||||
"data": data,
|
||||
"columns": [
|
||||
{ "data": "id" },
|
||||
{ "data": "rust_id" },
|
||||
{ "data": "computer_name" },
|
||||
{ "data": "install_time" },
|
||||
{
|
||||
"data": "id",
|
||||
"render": function (data) {
|
||||
return `<button onclick="deleteEntry(${data})">Удалить</button>`;
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
}).fail(function(jqXHR, textStatus, errorThrown) {
|
||||
console.error("Ошибка загрузки данных:", textStatus, errorThrown);
|
||||
});
|
||||
|
||||
window.deleteEntry = function(id) {
|
||||
if (confirm("Вы уверены, что хотите удалить запись?")) {
|
||||
$.ajax({
|
||||
url: `${API_URL}/delete/${id}`,
|
||||
type: 'DELETE',
|
||||
success: function () {
|
||||
location.reload();
|
||||
},
|
||||
error: function () {
|
||||
alert("Ошибка при удалении!");
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Установки RustDesk</h1>
|
||||
<table id="rustdeskTable" class="display">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Rust ID</th>
|
||||
<th>Имя компьютера</th>
|
||||
<th>Время установки</th>
|
||||
<th>Действие</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1 @@
|
|||
mTw9iat3pA3TccDTjkWWnxaD+bYS9CCelt/DLdBB0wgVLAAM2LqeF0OOgARmU+LVmiKGQ3c53XbsyPJw4O8gvw==
|
||||
|
|
@ -0,0 +1 @@
|
|||
FSwADNi6nhdDjoAEZlPi1ZoihkN3Od127MjycODvIL8=
|
||||
Loading…
Reference in New Issue