Ryanus commited on
Commit
bb3f371
·
verified ·
1 Parent(s): ffdd59e

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +170 -0
app.py ADDED
@@ -0,0 +1,170 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import subprocess
3
+ import threading
4
+ import time
5
+ import os
6
+ import signal
7
+
8
+ class TrafficGenerator:
9
+ def __init__(self):
10
+ self.process = None
11
+ self.is_running = False
12
+ self.is_paused = False
13
+
14
+ def start_traffic(self, target_url, requests_per_second, duration):
15
+ if self.is_running:
16
+ return "流量生成已在运行中!"
17
+
18
+ try:
19
+ # 构建命令行参数
20
+ cmd = [
21
+ "python", "web_traffic_generator.py",
22
+ "--url", target_url,
23
+ "--rps", str(requests_per_second),
24
+ "--duration", str(duration)
25
+ ]
26
+
27
+ self.process = subprocess.Popen(
28
+ cmd,
29
+ stdout=subprocess.PIPE,
30
+ stderr=subprocess.PIPE,
31
+ preexec_fn=os.setsid
32
+ )
33
+ self.is_running = True
34
+ self.is_paused = False
35
+ return f"开始生成流量到: {target_url}"
36
+ except Exception as e:
37
+ return f"启动失败: {str(e)}"
38
+
39
+ def pause_traffic(self):
40
+ if not self.is_running:
41
+ return "没有运行的流量生成进程"
42
+
43
+ if self.is_paused:
44
+ return "流量生成已经暂停"
45
+
46
+ try:
47
+ if self.process and self.process.poll() is None:
48
+ os.killpg(os.getpgid(self.process.pid), signal.SIGSTOP)
49
+ self.is_paused = True
50
+ return "流量生成已暂停"
51
+ except Exception as e:
52
+ return f"暂停失败: {str(e)}"
53
+ return "暂停操作失败"
54
+
55
+ def resume_traffic(self):
56
+ if not self.is_running:
57
+ return "没有运行的流量生成进程"
58
+
59
+ if not self.is_paused:
60
+ return "流量生成已经在运行中"
61
+
62
+ try:
63
+ if self.process and self.process.poll() is None:
64
+ os.killpg(os.getpgid(self.process.pid), signal.SIGCONT)
65
+ self.is_paused = False
66
+ return "流量生成已恢复"
67
+ except Exception as e:
68
+ return f"恢复失败: {str(e)}"
69
+ return "恢复操作失败"
70
+
71
+ def stop_traffic(self):
72
+ if not self.is_running:
73
+ return "没有运行的流量生成进程"
74
+
75
+ try:
76
+ if self.process:
77
+ os.killpg(os.getpgid(self.process.pid), signal.SIGTERM)
78
+ self.process.wait(timeout=5)
79
+ except:
80
+ try:
81
+ self.process.kill()
82
+ except:
83
+ pass
84
+
85
+ self.is_running = False
86
+ self.is_paused = False
87
+ return "流量生成已停止"
88
+
89
+ # 创建流量生成器实例
90
+ traffic_gen = TrafficGenerator()
91
+
92
+ def control_traffic(action, target_url, requests_per_second, duration):
93
+ if action == "开始":
94
+ return traffic_gen.start_traffic(target_url, requests_per_second, duration)
95
+ elif action == "暂停":
96
+ return traffic_gen.pause_traffic()
97
+ elif action == "继续":
98
+ return traffic_gen.resume_traffic()
99
+ elif action == "停止":
100
+ return traffic_gen.stop_traffic()
101
+ else:
102
+ return "未知操作"
103
+
104
+ # 创建Gradio界面
105
+ with gr.Blocks(title="网络流量生成器") as demo:
106
+ gr.Markdown("# 🌐 网络流量生成器控制面板")
107
+ gr.Markdown("使用此界面控制网络流量生成器的启动、暂停、继续和停止操作")
108
+
109
+ with gr.Row():
110
+ with gr.Column():
111
+ target_url = gr.Textbox(
112
+ label="目标URL",
113
+ value="https://example.com",
114
+ placeholder="请输入目标URL"
115
+ )
116
+ requests_per_second = gr.Number(
117
+ label="每秒请求数 (RPS)",
118
+ value=10,
119
+ minimum=1,
120
+ maximum=1000
121
+ )
122
+ duration = gr.Number(
123
+ label="持续时间 (秒)",
124
+ value=60,
125
+ minimum=10,
126
+ maximum=3600
127
+ )
128
+
129
+ with gr.Column():
130
+ action = gr.Radio(
131
+ choices=["开始", "暂停", "继续", "停止"],
132
+ label="控制操作",
133
+ value="开始"
134
+ )
135
+ control_button = gr.Button("执行操作", variant="primary")
136
+
137
+ output = gr.Textbox(
138
+ label="操作结果",
139
+ interactive=False,
140
+ lines=3
141
+ )
142
+
143
+ # 状态显示
144
+ status_display = gr.Textbox(
145
+ label="当前状态",
146
+ value="就绪",
147
+ interactive=False
148
+ )
149
+
150
+ def update_status():
151
+ if traffic_gen.is_running:
152
+ if traffic_gen.is_paused:
153
+ return "🟡 已暂停"
154
+ else:
155
+ return "🟢 运行中"
156
+ else:
157
+ return "⚪ 就绪"
158
+
159
+ # 绑定事件
160
+ control_button.click(
161
+ fn=control_traffic,
162
+ inputs=[action, target_url, requests_per_second, duration],
163
+ outputs=output
164
+ ).then(
165
+ fn=update_status,
166
+ outputs=status_display
167
+ )
168
+
169
+ if __name__ == "__main__":
170
+ demo.launch(server_name="0.0.0.0", server_port=7860)