MCPcopy Index your code
hub / github.com/Tong89/smartNode / submit_request

Method submit_request

backend/core.py:1240–1375  ·  view source on GitHub ↗

提交用户传输请求 - 基于实时资源占用决策

(self, request_data)

Source from the content-addressed store, hash-verified

1238 self.decision_trace_buffer.add(_interrupt_trace)
1239
1240 def submit_request(self, request_data):
1241 """提交用户传输请求 - 基于实时资源占用决策"""
1242 with self.lock:
1243 # 智能选择LEO卫星 - 避免同类型请求集中在一颗卫星
1244 # 统计各卫星当前负载(相同数据类型的请求数)
1245 data_type = request_data.get("data_type")
1246 # ⭐ 支持指定卫星ID
1247 satellite_id = request_data.get("satellite_id")
1248 if satellite_id:
1249 # 查找指定的卫星
1250 satellite = None
1251 for sat in self.leo_satellites:
1252 if sat.sat_id == satellite_id:
1253 satellite = sat
1254 break
1255 if not satellite:
1256 # 标准化拒绝结果(结构与正常返回对齐),并补充日志与统计计数
1257 reason = f"未找到指定的卫星: {satellite_id}"
1258 self.stats["total_requests"] += 1
1259 self.stats["user_requests"] += 1
1260 self.stats["rejected_requests"] += 1
1261 self._record_rejection("SATELLITE_NOT_FOUND")
1262 self._log(f"请求被拒绝 - {reason}", level="normal")
1263 return {
1264 "status": "error",
1265 "reject_reason": reason,
1266 "error": reason,
1267 "available_satellites": [s.sat_id for s in self.leo_satellites],
1268 }
1269 else:
1270 # 如果没有指定卫星,使用负载均衡选择
1271 satellite_loads = {}
1272 for sat in self.leo_satellites:
1273 # 统计该卫星上相同类型的活跃请求
1274 load = sum(1 for r in self.transmission_requests
1275 if r.satellite_id == sat.sat_id
1276 and r.data_type == data_type
1277 and r.status in ["accepted", "transmitting"])
1278 satellite_loads[sat.sat_id] = load
1279
1280 # 选择负载最低的卫星(如果有多个则随机选一个)
1281 min_load = min(satellite_loads.values())
1282 candidates = [sat for sat in self.leo_satellites if satellite_loads[sat.sat_id] == min_load]
1283 satellite = self.rng.choice(candidates)
1284
1285 # ⭐ 处理选中的地面站列表(保存到请求对象,供后续调度使用)
1286 selected_ground_stations = request_data.get("selected_ground_stations", [])
1287
1288 # ⭐ 处理时间段参数
1289 start_time = request_data.get("start_time")
1290 end_time = request_data.get("end_time")
1291
1292 # 如果前端传递的是偏移量,则计算实际时间
1293 start_time_offset = request_data.get("start_time_offset")
1294 time_window_duration = request_data.get("time_window_duration")
1295
1296 if start_time_offset is not None and time_window_duration is not None:
1297 # 基于当前仿真时间计算实际时间段

Calls 8

_record_rejectionMethod · 0.95
_logMethod · 0.95
_evaluate_requestMethod · 0.95
_start_transmissionMethod · 0.95
to_dictMethod · 0.95
appendMethod · 0.80
TransmissionRequestClass · 0.70
getMethod · 0.45