File size: 9,937 Bytes
4f2be76
 
4e1c32a
cb65975
 
1223c0d
7b4169a
6705a11
7b4169a
 
6705a11
 
 
 
 
 
 
 
 
 
 
1223c0d
 
db7d3b2
4e1c32a
4f2be76
d870b92
2877b2d
67c9619
 
 
 
 
 
 
 
 
d870b92
 
67c9619
 
5b51aa1
 
 
8f3e12c
5b51aa1
 
 
 
 
 
8f3e12c
d3f4fff
bbceb50
aaf56de
70c6b3e
aaf56de
 
bbceb50
4724fdb
bbceb50
2f1fe17
8f3e12c
 
 
 
871ce58
d3f4fff
01b6321
 
 
 
 
 
 
 
 
 
a8ff727
 
 
5c1debf
 
01b6321
2f1fe17
 
dc16df5
2f1fe17
 
 
 
 
106d741
 
e69f255
 
28b077b
2f1fe17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8f3e12c
67c9619
 
cb65975
db7d3b2
67c9619
b262257
67c9619
b262257
67c9619
db7d3b2
b262257
67c9619
db7d3b2
4e1c32a
67c9619
db7d3b2
b262257
db7d3b2
2877b2d
67c9619
 
 
 
 
46a61fe
cb65975
 
 
405fd36
cb65975
 
 
b262257
63cb7ea
d870b92
db7d3b2
46a61fe
d870b92
67c9619
4f2be76
03fea9e
 
 
 
 
cb65975
 
 
2877b2d
6705a11
b262257
d870b92
6705a11
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
import gradio as gr
import requests
import logging
import threading
import time

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

@app.on_event("startup")
async def startup_event():
    app.state.arbitrary_types_allowed = True


# ๋กœ๊น… ์„ค์ •
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": "[MON]๊ด€๋ฆฌ-HOME", "url": "https://seawolf2357-bnews1.hf.space"},  
    {"name": "[MON]๊ด€๋ฆฌ-H100 LIST", "url": "https://seawolf2357-bnews2.hf.space"},  
    {"name": "[MON]๊ด€๋ฆฌ-MONITOR Origin", "url": "https://seawolf2357-bnews3.hf.space"}, 
    
    {"name": "[MON]ํƒ€์ด๋จธ1-1 ", "url": "https://seawolf2357-timer.hf.space"},     
    {"name": "[MON]ํƒ€์ด๋จธ1-2 ", "url": "https://seawolf2357-timer2.hf.space"},     
    {"name": "[MON]ํƒ€์ด๋จธ1-3 ", "url": "https://seawolf2357-timer3.hf.space"},     
    {"name": "[MON]ํƒ€์ด๋จธ1-4 ", "url": "https://seawolf2357-timer4.hf.space"},     
    {"name": "[MON]ํƒ€์ด๋จธ2-1 ", "url": "https://fantaxy-timer1.hf.space"},       
    {"name": "[MON]ํƒ€์ด๋จธ2-2 ", "url": "https://fantaxy-timer2.hf.space"},      
    
    {"name": "[H100]AI ๊ฐœ์ธ๋น„์„œ JinJAVIS", "url": "http://hugpu.ai:8000"},
    {"name": "[H100]์•„๋ฐ”ํƒ€ ์ŠคํŠœ๋””์˜ค ํ”Œ๋žซํผ ", "url": "http://hugpu.ai:7899"},  
    {"name": "[H100]์ˆํผ ์ŠคํŠœ๋””์˜ค ํ”Œ๋žซ", "url": "http://211.233.58.202:7960"},    
    {"name": "[H100]ํ†ตํ•ฉ Medim ๋ธ”๋กœ๊ทธ ์‹œ์Šคํ…œ ", "url": "http://hugpu.ai:7917"},  
    {"name": "[H100]์ดˆ๊ณ ์†/ํ…์ŠคํŠธ ๋ฐ˜์˜ ๋กœ๊ณ  ์ƒ์„ฑ", "url": "http://hugpu.ai:7897"},
    {"name": "[H100]์‚ฌ์ง„+์Œ์„ฑ to ๋งํ•˜๋Š” ์˜์ƒ", "url": "http://hugpu.ai:7895"},
    {"name": "[H100]I+T2I ์บ๋ฆญํ„ฐ ํ”„๋กœํ•„", "url": "http://hugpu.ai:7889"},
    {"name": "[H100]๋ชจ์…˜ ๋”ฐ๋ผํ•˜๊ธฐ", "url": "http://hugpu.ai:7894"},  
    {"name": "[H100]์•Œ๋ฆฌ๋ฐ”๋ฐ” 'AnyText'", "url": "http://hugpu.ai:7913"},
    
    {"name": "[@ H100]๋ฉ”ํƒ€ ์Šค๋ ˆ๋“œ AUTO", "url": "http://hugpu.ai:7915"},     
    {"name": "[@ H100]ํŒจ์…˜", "url": "http://hugpu.ai:7896"},      
    {"name": "[@ H100]Image + Text to Image(IP-ADAPT)", "url": "http://hugpu.ai:7890"},
    {"name": "[@ H100]FaceFusion", "url": "http://hugpu.ai:7880"}, 

    {"name": "[HUGPU]FLUX ํ™•์žฅ ์ด๋ฏธ์ง€ ์ƒ์„ฑ", "url": "https://fantaxy-ofai-flx-expl-store.hf.space"},
    {"name": "[HUGPU]FLUX GIF ์ƒ์„ฑ", "url": "https://aiqtech-flxgif.hf.space"},     
    {"name": "[HUGPU]LOGO ๋””์ž์ธ ์ƒ์„ฑ ", "url": "https://fantaxy-ofai-flx-logo.hf.space"},     
    {"name": "[HUGPU]FLUX ํ”„๋กฌํ”„ํŠธ ์ƒ์„ฑ ", "url": "https://ginipick-flux-prompt-generator.hf.space"},     
    {"name": "[HUGPU]LoRA: ๊ธฐ๋ธ”๋ฆฌ ์Šคํƒ€์ผ ", "url": "https://aiqtech-flux-ghibli-studio-lora.hf.space"},  
    {"name": "[HUGPU]LoRA: ์นดํˆฐ ์Šคํƒ€์ผ ", "url": "https://aiqtech-flxani.hf.space"},     
    {"name": "[HUGPU]FLUX 8step LoRA ์ด๋ฏธ์ง€ ์ƒ์„ฑ ", "url": "https://fantos-flx8lora.hf.space"},     
    {"name": "[HUGPU]FLUX ํ…์ŠคํŠธ TO ๋น„๋””์˜ค ์ƒ์„ฑ ", "url": "https://fantos-cogvidx.hf.space"},     
    {"name": "[HUGPU]FLUX ํŒจ์…˜๋ชจ๋ธ ์ƒ์„ฑ ", "url": "https://fantos-flxfashmodel.hf.space"},     
    {"name": "[HUGPU]FLUX Controlnet ", "url": "https://fantos-flxcontrol.hf.space"},  
    {"name": "[HUGPU]FLUX NF4 ์ด๋ฏธ์ง€ ์ƒ์„ฑ ", "url": "https://ginipick-ofai-flxnf4.hf.space"},     

    {"name": "[HUGPU]FLUX LoRA ์ŠคํŠœ๋””์˜ค #1๋ฒˆ ์„œ๋ฒ„ ", "url": "https://seawolf2357-flxloraexp.hf.space"},     
    {"name": "[HUGPU]FLUX LoRA ์ŠคํŠœ๋””์˜ค #2๋ฒˆ ์„œ๋ฒ„ ", "url": "https://fantaxy-flxloraexp.hf.space"},     
    {"name": "[HUGPU]FLUX LoRA ์ŠคํŠœ๋””์˜ค #3๋ฒˆ ์„œ๋ฒ„ ", "url": "https://fantos-flxloraexp.hf.space"},                                                   
    {"name": "[HUGPU]FLUX LoRA ์ŠคํŠœ๋””์˜ค #4๋ฒˆ ์„œ๋ฒ„", "url": "https://ginipick-flxloraexp.hf.space"},  
    
    {"name": "[HUGPU]์ด๋ฏธ์ง€์™€ ํ•œ๊ธ€ ํ”„๋กฌํ”„ํŠธ๋กœ ์˜์ƒ ์ƒ์„ฑ I ", "url": "https://fantaxy-ofai-it2v2.hf.space"},     
    {"name": "[HUGPU]์ด๋ฏธ์ง€์™€ ํ•œ๊ธ€ ํ”„๋กฌํ”„ํŠธ๋กœ ์˜์ƒ ์ƒ์„ฑ II ", "url": "https://aiqtech-cinevid.hf.space"},     
    {"name": "[HUGPU]์ด๋ฏธ์ง€์™€ ํ•œ๊ธ€ ํ”„๋กฌํ”„ํŠธ๋กœ ์ด๋ฏธ์ง€ ๋ณ€ํ˜•", "url": "https://fantos-kolcontrl.hf.space"},     
    {"name": "[HUGPU]์ƒํ’ˆ ์‚ฌ์ง„ ์—…๋กœ๋“œ+ํ”„๋กฌํ”„ํŠธ๋กœ ๋ฐฐ๊ฒฝ์„ ํ•ฉ์„ฑ ", "url": "https://aiqtech-producbrmg.hf.space"},     
    {"name": "[HUGPU]ํ…์ŠคํŠธ๋กœ ์ด๋ฏธ์ง€ ์ƒ์„ฑ: Accracy ๋ชจ๋ธ ", "url": "https://ginipick-accdiffusion.hf.space"},      
    {"name": "[HUGPU]ํ…์ŠคํŠธ๋กœ ์ด๋ฏธ์ง€ ์ƒ์„ฑ: Playground ๋ชจ๋ธ ", "url": "https://fantaxy-playground25.hf.space"},     
    {"name": "[HUGPU]ํ…์ŠคํŠธ๋กœ ์ด๋ฏธ์ง€ ์ƒ์„ฑ: AuraFlow ๋ชจ๋ธ ", "url": "https://fantaxy-auroflow-v3.hf.space"},     
    {"name": "[HUGPU]EveryText: ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ์ด๋ฏธ์ง€ ์ƒ์„ฑ์— ๋ฐ˜์˜ ", "url": "https://fantos-EveryText.hf.space"},     
    {"name": "[HUGPU]๋‚ด ์–ผ๊ตด ์‚ฌ์ง„์œผ๋กœ ์ด๋ฏธ์ง€ ์ƒ์„ฑ I", "url": "https://aiqtech-kofaceid.hf.space"},     
    {"name": "[HUGPU]๋‚ด ์–ผ๊ตด ์‚ฌ์ง„์œผ๋กœ ์ด๋ฏธ์ง€ ์ƒ์„ฑ II", "url": "https://aiqtech-sdfacid.hf.space"},     
    {"name": "[HUGPU]๊ณ ํ•ด์ƒ๋„ ์ด๋ฏธ์ง€ ์ƒ์„ฑ REALVISXL V5", "url": "https://seawolf2357-REALVISXL-V5.hf.space"},     
                                                                                               
    {"name": "[HUGPU]ํ…์ŠคํŠธ๋กœ ๊ฐ์ฒด๋งŒ ์ž˜๋ผ๋‚ด๊ณ  ๋ฐฐ๊ฒฝ ํˆฌ๋ช…ํ™”", "url": "https://fantos-textcutobject.hf.space"},  
    {"name": "[HUGPU]๋น„๋””์˜ค ์ธ์‹ QnA ์ฑ—๋ด‡ ", "url": "https://ginipick-vidiqa.hf.space"},  
    {"name": "[HUGPU]์ด๋ฏธ์ง€ ์Šค์ผ€์ผ์—…(ํ™”์งˆ๊ฐœ์„ ) ", "url": "https://ginipick-finegrain-image-enhancer.hf.space"},     
    {"name": "[HUGPU]์ด๋ฏธ์ง€ ๋ฐฐ๊ฒฝ ์ œ๊ฑฐ ", "url": "https://ginipick-background-removal.hf.space"},     
    {"name": "[HUGPU]๋น„๋””์˜ค ๋ฐฐ๊ฒฝ ์ œ๊ฑฐ ", "url": "https://fantaxy-remove-video-background.hf.space"},     
    {"name": "[HUGPU]ํ…์ŠคํŠธ ์ž…๋ ฅ์œผ๋กœ ์Œ์•… ์ƒ์„ฑ ", "url": "https://fantaxy-stable-audio-open-zero.hf.space"},  
    
    {"name": "[HUGPU]MS PHI 3.5 Vision ", "url": "https://aiqtech-phi35-vision.hf.space"},  
    {"name": "[HUGPU]NSFW kAI ", "url": "https://fantaxy-ofai-kai.hf.space"},     
    {"name": "[HUGPU]๋ฉ”ํƒ€ LLAMA 3.1 405B ", "url": "https://seawolf2357-ofai-405.hf.space"},     
    {"name": "[HUGPU]๋ฉ”ํƒ€ LLAMA 3.1 70B ", "url": "https://fantaxy-ofai-70.hf.space"},     
    {"name": "[HUGPU]๋ฉ”ํƒ€ LLAMA 3.1 8B ", "url": "https://seawolf2357-ofai-8.hf.space"},     
    {"name": "[HUGPU]๋ฏธ์ŠคํŠธ๋ž„ 7B Instruct v0.3 ", "url": "https://fantaxy-ofai-mis7b.hf.space"},  
    {"name": "[HUGPU]MS Phi 3 mini 4k-instruct ", "url": "https://fantaxy-ofai-phi.hf.space"},     
    {"name": "[HUGPU]์ค‘๊ตญ Yi 1.5 34B ", "url": "https://fantaxy-ofai-yi.hf.space"},     
    {"name": "[HUGPU]๋ฏธ์ŠคํŠธ๋ž„ Mixtral 8X7B ", "url": "https://fantaxy-ofai-8x7b.hf.space"},     
    {"name": "[HUGPU]๋ฏธ์ŠคํŠธ๋ž„ Nemo Instruct 2407 ", "url": "https://seawolf2357-ofai-mistral-nemo.hf.space"},  
    
    {"name": "[HUGPU]๋ธ”๋กœ๊ทธ ์ž๋™(์ปจํŽŒ/๋‹จ์ˆ˜) ์ƒ์„ฑ ", "url": "https://fantaxy-blogger-send-webhook-confirm-image.hf.space"},  
    {"name": "[HUGPU]๋ธ”๋กœ๊ทธ ์ž๋™(๋ฌด์ธ/๋ณต์ˆ˜) ์ƒ์„ฑ ", "url": "https://fantaxy-blogger-send-webhook-auto-image.hf.space"},    
    
    {"name": "[HUGPU]์ „๋ฌธ ๋ธ”๋กœ๊ทธ ์ƒ์„ฑ ", "url": "https://seawolf2357-ofai-jinjavis-blog.hf.space"},     
    {"name": "[HUGPU]์˜ํ•™ ์ „๋ฌธ ๋ธ”๋กœ๊ทธ ์ƒ์„ฑ ", "url": "https://seawolf2357-ofai-jinjavis-blog-medi.hf.space"},     
    {"name": "[HUGPU]์•ฝ๋ฆฌํ•™ ์ „๋ฌธ ๋ธ”๋กœ๊ทธ ์ƒ์„ฑ ", "url": "https://seawolf2357-ofai-jinjavis-blog-pharm.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(60)  # 10์ดˆ ๋Œ€๊ธฐ
        new_status = update_status()
        status_html.update(value=new_status)

def create_dashboard():
    with gr.Blocks(theme="Nymbo/Nymbo_Theme", 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()
    
        pass
    return app


if __name__ == "__main__":
    dashboard = create_dashboard()
    dashboard.launch()