Spaces:
Running
Running
admin
commited on
Commit
·
b50dddd
1
Parent(s):
f2e0a8c
refine ui
Browse files- app.py +29 -38
- modules/activate.py +9 -6
- modules/restart.py +6 -5
- modules/smtp.py +4 -1
- utils.py +5 -5
app.py
CHANGED
@@ -26,9 +26,12 @@ def monitor(period=PERIOD):
|
|
26 |
threading.Thread(target=run_schedule, daemon=True).start()
|
27 |
|
28 |
|
|
|
29 |
def tasklst():
|
|
|
|
|
30 |
try:
|
31 |
-
|
32 |
jobs = schedule.get_jobs()
|
33 |
for job in jobs:
|
34 |
last_run = fix_datetime(job.last_run)
|
@@ -36,53 +39,41 @@ def tasklst():
|
|
36 |
last_run = "never"
|
37 |
|
38 |
next_run = fix_datetime(job.next_run)
|
39 |
-
|
40 |
-
|
41 |
-
return outputs
|
42 |
|
43 |
except Exception as e:
|
44 |
-
|
|
|
|
|
45 |
|
46 |
|
47 |
if __name__ == "__main__":
|
48 |
monitor()
|
49 |
with gr.Blocks() as demo:
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
|
|
60 |
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
outputs=gr.TextArea(label="Activation logs", show_copy_button=True),
|
66 |
-
flagging_mode="never",
|
67 |
-
)
|
68 |
|
69 |
-
|
70 |
-
|
|
|
|
|
71 |
fn=test_restart,
|
72 |
-
inputs=
|
73 |
-
outputs=[
|
74 |
-
gr.Textbox(label="Status", show_copy_button=True),
|
75 |
-
gr.Markdown(),
|
76 |
-
],
|
77 |
-
flagging_mode="never",
|
78 |
-
)
|
79 |
-
|
80 |
-
with gr.Tab("SMTP test"):
|
81 |
-
gr.Interface(
|
82 |
-
fn=send_email,
|
83 |
-
inputs=None,
|
84 |
-
outputs=gr.Textbox(label="Status", show_copy_button=True),
|
85 |
-
flagging_mode="never",
|
86 |
)
|
87 |
|
88 |
demo.launch()
|
|
|
26 |
threading.Thread(target=run_schedule, daemon=True).start()
|
27 |
|
28 |
|
29 |
+
# UI func
|
30 |
def tasklst():
|
31 |
+
status = "Success"
|
32 |
+
logs = None
|
33 |
try:
|
34 |
+
logs = f"\nHas been running for {time_diff(START_TIME, datetime.now())}\n"
|
35 |
jobs = schedule.get_jobs()
|
36 |
for job in jobs:
|
37 |
last_run = fix_datetime(job.last_run)
|
|
|
39 |
last_run = "never"
|
40 |
|
41 |
next_run = fix_datetime(job.next_run)
|
42 |
+
logs += f"\nEvery {job.interval}h do {job.job_func.__name__} (last run: {last_run}, next run: {next_run})\n"
|
|
|
|
|
43 |
|
44 |
except Exception as e:
|
45 |
+
status = f"{e}"
|
46 |
+
|
47 |
+
return status, logs
|
48 |
|
49 |
|
50 |
if __name__ == "__main__":
|
51 |
monitor()
|
52 |
with gr.Blocks() as demo:
|
53 |
+
gr.Markdown("# Keep Spaces Alive")
|
54 |
+
with gr.Row():
|
55 |
+
with gr.Column():
|
56 |
+
task_btn = gr.Button("See current task status")
|
57 |
+
once_btn = gr.Button("Trigger once manually")
|
58 |
+
smtp_btn = gr.Button("SMTP test")
|
59 |
+
re_txt = gr.Textbox(
|
60 |
+
label="Restart a gradio space with permissions",
|
61 |
+
placeholder="username/repo",
|
62 |
+
)
|
63 |
+
re_btn = gr.Button("Restart")
|
64 |
|
65 |
+
with gr.Column():
|
66 |
+
status_bar = gr.Textbox(label="Status", show_copy_button=True)
|
67 |
+
gr.Markdown("Logs")
|
68 |
+
logs_bar = gr.Markdown(container=True, show_copy_button=True)
|
|
|
|
|
|
|
69 |
|
70 |
+
task_btn.click(fn=tasklst, outputs=[status_bar, logs_bar])
|
71 |
+
once_btn.click(fn=trigger, outputs=[status_bar, logs_bar])
|
72 |
+
smtp_btn.click(fn=send_email, outputs=[status_bar, logs_bar])
|
73 |
+
re_btn.click(
|
74 |
fn=test_restart,
|
75 |
+
inputs=[re_txt],
|
76 |
+
outputs=[status_bar, logs_bar],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
)
|
78 |
|
79 |
demo.launch()
|
modules/activate.py
CHANGED
@@ -123,7 +123,10 @@ def activate_studio(repo: str, holding_delay=5):
|
|
123 |
print(e)
|
124 |
|
125 |
|
|
|
126 |
def trigger(users=USERS):
|
|
|
|
|
127 |
try:
|
128 |
spaces, studios, failures = [], [], []
|
129 |
usernames = users.split(";")
|
@@ -153,11 +156,11 @@ def trigger(users=USERS):
|
|
153 |
).start()
|
154 |
time.sleep(DELAY)
|
155 |
|
156 |
-
|
157 |
"\n".join(spaces + studios)
|
158 |
-
+ f"\n[{fix_datetime(datetime.now())}] Activation complete
|
159 |
)
|
160 |
-
print(
|
161 |
content = ""
|
162 |
for failure in failures:
|
163 |
errepo: str = failure
|
@@ -167,7 +170,7 @@ def trigger(users=USERS):
|
|
167 |
if content:
|
168 |
send_email(content)
|
169 |
|
170 |
-
return log
|
171 |
-
|
172 |
except Exception as e:
|
173 |
-
|
|
|
|
|
|
123 |
print(e)
|
124 |
|
125 |
|
126 |
+
# UI func
|
127 |
def trigger(users=USERS):
|
128 |
+
status = "Success"
|
129 |
+
logs = None
|
130 |
try:
|
131 |
spaces, studios, failures = [], [], []
|
132 |
usernames = users.split(";")
|
|
|
156 |
).start()
|
157 |
time.sleep(DELAY)
|
158 |
|
159 |
+
logs = (
|
160 |
"\n".join(spaces + studios)
|
161 |
+
+ f"\n[{fix_datetime(datetime.now())}] Activation complete!\n"
|
162 |
)
|
163 |
+
print(logs)
|
164 |
content = ""
|
165 |
for failure in failures:
|
166 |
errepo: str = failure
|
|
|
170 |
if content:
|
171 |
send_email(content)
|
172 |
|
|
|
|
|
173 |
except Exception as e:
|
174 |
+
status = f"{e}"
|
175 |
+
|
176 |
+
return status, logs
|
modules/restart.py
CHANGED
@@ -13,24 +13,25 @@ def restart_private_space(repo: str):
|
|
13 |
timeout=TIMEOUT,
|
14 |
)
|
15 |
response.raise_for_status()
|
|
|
16 |
|
17 |
|
18 |
def self_restart():
|
19 |
try:
|
20 |
restart_private_space("kakamond/keep_spaces_alive")
|
21 |
-
|
22 |
except Exception as e:
|
23 |
send_email(f"Failed to self-restart: {e}")
|
24 |
|
25 |
|
|
|
26 |
def test_restart(repo):
|
27 |
status = "Success"
|
28 |
-
|
29 |
try:
|
30 |
-
restart_private_space(repo)
|
31 |
-
|
32 |
|
33 |
except Exception as e:
|
34 |
status = f"{e}"
|
35 |
|
36 |
-
return status,
|
|
|
13 |
timeout=TIMEOUT,
|
14 |
)
|
15 |
response.raise_for_status()
|
16 |
+
return f"\n{response.text}\n"
|
17 |
|
18 |
|
19 |
def self_restart():
|
20 |
try:
|
21 |
restart_private_space("kakamond/keep_spaces_alive")
|
|
|
22 |
except Exception as e:
|
23 |
send_email(f"Failed to self-restart: {e}")
|
24 |
|
25 |
|
26 |
+
# UI func
|
27 |
def test_restart(repo):
|
28 |
status = "Success"
|
29 |
+
logs = None
|
30 |
try:
|
31 |
+
logs = restart_private_space(repo)
|
32 |
+
logs += f"\nSuccessfully restart {HF_DOMAIN}/spaces/{repo}\n"
|
33 |
|
34 |
except Exception as e:
|
35 |
status = f"{e}"
|
36 |
|
37 |
+
return status, logs
|
modules/smtp.py
CHANGED
@@ -46,12 +46,15 @@ def email_api(
|
|
46 |
)
|
47 |
|
48 |
|
|
|
49 |
def send_email(content="Test SMTP"):
|
50 |
status = "Success"
|
|
|
51 |
try:
|
52 |
status = email_api(content)
|
|
|
53 |
|
54 |
except Exception as e:
|
55 |
status = f"{e}"
|
56 |
|
57 |
-
return status
|
|
|
46 |
)
|
47 |
|
48 |
|
49 |
+
# UI func
|
50 |
def send_email(content="Test SMTP"):
|
51 |
status = "Success"
|
52 |
+
logs = None
|
53 |
try:
|
54 |
status = email_api(content)
|
55 |
+
logs = f"\nEmail content: {content}\n"
|
56 |
|
57 |
except Exception as e:
|
58 |
status = f"{e}"
|
59 |
|
60 |
+
return status, logs
|
utils.py
CHANGED
@@ -6,11 +6,11 @@ API = os.getenv("api")
|
|
6 |
EMAIL = os.getenv("email")
|
7 |
SMTP = os.getenv("smtp")
|
8 |
COOKIE = os.getenv("cookie")
|
9 |
-
if not (PERIOD and USERS and API and EMAIL and SMTP and COOKIE):
|
10 |
-
|
11 |
-
|
12 |
-
else:
|
13 |
-
|
14 |
|
15 |
TAG = os.getenv("target")
|
16 |
if not TAG:
|
|
|
6 |
EMAIL = os.getenv("email")
|
7 |
SMTP = os.getenv("smtp")
|
8 |
COOKIE = os.getenv("cookie")
|
9 |
+
# if not (PERIOD and USERS and API and EMAIL and SMTP and COOKIE):
|
10 |
+
# print("Please check the environment variables!")
|
11 |
+
# exit()
|
12 |
+
# else:
|
13 |
+
# PERIOD = int(PERIOD)
|
14 |
|
15 |
TAG = os.getenv("target")
|
16 |
if not TAG:
|