Spaces:
Running
Running
File size: 5,341 Bytes
4f2be76 4e1c32a cb65975 4e1c32a db7d3b2 4e1c32a 4f2be76 d870b92 2877b2d 67c9619 d870b92 67c9619 d3f4fff 3a30bef d3f4fff 67c9619 cb65975 db7d3b2 67c9619 b262257 67c9619 b262257 67c9619 db7d3b2 b262257 67c9619 db7d3b2 4e1c32a 67c9619 db7d3b2 b262257 db7d3b2 2877b2d 67c9619 46a61fe cb65975 db7d3b2 b262257 4f2be76 d870b92 db7d3b2 46a61fe d870b92 67c9619 4f2be76 03fea9e cb65975 2877b2d b262257 d870b92 b262257 db7d3b2 |
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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
import gradio as gr
import requests
import logging
import threading
import time
# λ‘κΉ
μ€μ
logging.basicConfig(level=logging.INFO)
css = """
footer { visibility: hidden; }
.status-button {
display: inline-block;
padding: 5px 10px;
margin: 5px;
border-radius: 5px;
font-size: 12px;
}
.status-normal { background-color: green; color: white; }
.status-abnormal { background-color: red; color: white; }
"""
# λͺ¨λν°λ§ λμ λͺ©λ‘
TARGETS = [
{"name": "[GINI/DS]ν
μ€νΈ", "url": "http://hugpu.ai:8888"},
{"name": "[OFAI/DS]ν
μ€νΈ", "url": "http://hugpu.ai:8888"},
{"name": "[HF]ν
μ€νΈ", "url": "http://hugpu.ai:8888"},
{"name": "[H100]AI κ°μΈλΉμ JinJAVIS", "url": "http://hugpu.ai:8000"},
{"name": "[HUGPU]FLUX νμ₯ μ΄λ―Έμ§ μμ±", "url": "https://fantaxy-ofai-flx-expl-store.hf.space"},
{"name": "[HUGPU]FLUX GIF μμ±", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
{"name": "[HUGPU] ", "url": "https://.hf.space"},
]
# URL μν νμΈ ν¨μ
def check_url_status(url):
try:
response = requests.get(url, timeout=5)
if response.status_code == 200:
logging.info(f"URL μ μ μ±κ³΅: {url}")
return "μ μ", "normal"
else:
logging.error(f"URL μ μ μ€λ₯: {url}, μν μ½λ {response.status_code}")
return "λΉμ μ", "abnormal"
except requests.exceptions.RequestException as e:
logging.exception(f"μλ²μ μ°κ²°ν μ μμ΅λλ€: {url}")
return "λΉμ μ", "abnormal"
# μν μ
λ°μ΄νΈ ν¨μ
def update_status():
status_html = ""
for target in TARGETS:
status, status_class = check_url_status(target["url"])
status_html += f'<span class="status-button status-{status_class}">{target["name"]}: {status}</span>'
return status_html
# μ£ΌκΈ°μ μ
λ°μ΄νΈλ₯Ό μν ν¨μ
def periodic_update(status_html):
while True:
time.sleep(10) # 10μ΄ λκΈ°
new_status = update_status()
status_html.update(value=new_status)
# Gradio μΈν°νμ΄μ€ μ€μ
def create_dashboard():
with gr.Blocks(css=css) as app:
gr.Image("banner.png", show_label=False)
gr.Markdown("# 24μκ° λͺ¨λν°λ§ μμ€ν
")
gr.Markdown("## \n")
status_html = gr.HTML()
refresh_button = gr.Button("μν μλ‘κ³ μΉ¨")
refresh_button.click(fn=update_status, outputs=status_html)
# μ΄κΈ° μν μ
λ°μ΄νΈ
app.load(fn=update_status, outputs=status_html)
# λ°±κ·ΈλΌμ΄λμμ μ£ΌκΈ°μ μ
λ°μ΄νΈ μμ
threading.Thread(target=periodic_update, args=(status_html,), daemon=True).start()
return app
if __name__ == "__main__":
dashboard = create_dashboard()
dashboard.launch() |