test
This commit is contained in:
parent
f82ff9ff33
commit
a96f8863ec
|
|
@ -0,0 +1,36 @@
|
||||||
|
name: Fetch Torrents and Update Stats
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
fetch_torrents:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: '3.x'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install requests
|
||||||
|
|
||||||
|
- name: Run script
|
||||||
|
env:
|
||||||
|
QB_USERNAME: ${{ secrets.QB_USERNAME }}
|
||||||
|
QB_PASSWORD: ${{ secrets.QB_PASSWORD }}
|
||||||
|
HTTP_USERNAME: ${{ secrets.HTTP_USERNAME }}
|
||||||
|
HTTP_PASSWORD: ${{ secrets.HTTP_PASSWORD }}
|
||||||
|
QB_URL_1: ${{ secrets.QB_URL_1 }}
|
||||||
|
QB_URL_2: ${{ secrets.QB_URL_2 }}
|
||||||
|
run: |
|
||||||
|
python tools/gen-stats.py
|
||||||
|
|
@ -138,6 +138,12 @@ This repository aims to provide macOS ISOs for security researchers, developers,
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
#### Seeding status 🌱
|
||||||
|
|
||||||
|
<!--- STATS_START --->
|
||||||
|
|
||||||
|
<!--- STATS_END --->
|
||||||
|
|
||||||
## FAQ ❓
|
## FAQ ❓
|
||||||
|
|
||||||
### How to download the ISOs?
|
### How to download the ISOs?
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,84 @@
|
||||||
|
import requests
|
||||||
|
from requests.auth import HTTPBasicAuth
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
|
||||||
|
qb_urls = [
|
||||||
|
{"url": os.getenv("QB_URL_1"), "auth_type": "normal"},
|
||||||
|
{"url": os.getenv("QB_URL_2"), "auth_type": "http"},
|
||||||
|
]
|
||||||
|
|
||||||
|
def get_uploaded(qb_url, auth_type):
|
||||||
|
session = requests.Session()
|
||||||
|
active = False
|
||||||
|
total_uploaded = 0
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = session.get(qb_url["url"])
|
||||||
|
if response.status_code != 200:
|
||||||
|
raise Exception("Server not reachable")
|
||||||
|
|
||||||
|
if auth_type == "http":
|
||||||
|
auth = HTTPBasicAuth(os.getenv("HTTP_USERNAME"), os.getenv("HTTP_PASSWORD"))
|
||||||
|
response = session.get(f"{qb_url['url']}/api/v2/torrents/info", auth=auth)
|
||||||
|
else:
|
||||||
|
response = session.post(f"{qb_url['url']}/api/v2/auth/login", data={"username": os.getenv("QB_USERNAME"), "password": os.getenv("QB_PASSWORD")})
|
||||||
|
if response.text != "Ok.":
|
||||||
|
raise Exception("Login failed")
|
||||||
|
response = session.get(f"{qb_url['url']}/api/v2/torrents/info")
|
||||||
|
|
||||||
|
active = True
|
||||||
|
total_uploaded = sum(torrent["uploaded"] for torrent in response.json() if any(keyword.lower() in torrent["name"].lower() for keyword in ["macOS", "OS X"]))
|
||||||
|
except Exception as e:
|
||||||
|
active = False
|
||||||
|
print(f"Error accessing {qb_url['url']}: {e}")
|
||||||
|
|
||||||
|
return active, total_uploaded
|
||||||
|
|
||||||
|
def bytes_to_human_readable(num_bytes):
|
||||||
|
for unit in ["B", "KB", "MB", "GB", "TB"]:
|
||||||
|
if num_bytes < 1024:
|
||||||
|
return f"{num_bytes:.2f} {unit}"
|
||||||
|
num_bytes /= 1024
|
||||||
|
return f"{num_bytes:.2f} TB"
|
||||||
|
|
||||||
|
def update_readme(stats):
|
||||||
|
readme_path = "README.md"
|
||||||
|
with open(readme_path, "r") as file:
|
||||||
|
readme_content = file.read()
|
||||||
|
|
||||||
|
start_marker = "<!--- STATS_START --->"
|
||||||
|
end_marker = "<!--- STATS_END --->"
|
||||||
|
stats_table = f"""
|
||||||
|
| Server | Active | Total Upload |
|
||||||
|
|--------|--------|--------------|
|
||||||
|
| Server1 | {stats['server1']['active']} | {stats['server1']['total_upload']} |
|
||||||
|
| Server2 | {stats['server2']['active']} | {stats['server2']['total_upload']} |
|
||||||
|
| **Combined** | - | {stats['combined_total_upload']} |
|
||||||
|
"""
|
||||||
|
|
||||||
|
new_readme_content = readme_content.split(start_marker)[0] + start_marker + stats_table + end_marker + readme_content.split(end_marker)[1]
|
||||||
|
|
||||||
|
with open(readme_path, "w") as file:
|
||||||
|
file.write(new_readme_content)
|
||||||
|
|
||||||
|
server1_active, server1_total_upload = get_uploaded(qb_urls[0], qb_urls[0]["auth_type"])
|
||||||
|
server2_active, server2_total_upload = get_uploaded(qb_urls[1], qb_urls[1]["auth_type"])
|
||||||
|
|
||||||
|
combined_total_upload = server1_total_upload + server2_total_upload
|
||||||
|
|
||||||
|
stats = {
|
||||||
|
"server1": {
|
||||||
|
"active": "Yes" if server1_active else "No",
|
||||||
|
"total_upload": bytes_to_human_readable(server1_total_upload)
|
||||||
|
},
|
||||||
|
"server2": {
|
||||||
|
"active": "Yes" if server2_active else "No",
|
||||||
|
"total_upload": bytes_to_human_readable(server2_total_upload)
|
||||||
|
},
|
||||||
|
"combined_total_upload": bytes_to_human_readable(combined_total_upload)
|
||||||
|
}
|
||||||
|
|
||||||
|
print(json.dumps(stats, indent=2))
|
||||||
|
|
||||||
|
update_readme(stats)
|
||||||
Loading…
Reference in New Issue