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

Method _evaluate_request

backend/core.py:1482–1613  ·  view source on GitHub ↗

评估请求是否可以被接受 - 基于实时资源利用率和时间段决策

(self, req, satellite)

Source from the content-addressed store, hash-verified

1480 return True, "时间段资源可用"
1481
1482 def _evaluate_request(self, req, satellite):
1483 """评估请求是否可以被接受 - 基于实时资源利用率和时间段决策"""
1484
1485 # ⭐ 实验要求:测试模式下,放宽资源检查
1486 if req.test_mode:
1487 # 测试模式:直接接受,用于快速验证功能
1488 return True, "测试模式:直接接受"
1489
1490 # 特殊处理:指令类型(TASK_CMD)立即接受,无需等待过境
1491 data_config = DATA_TYPES.get(req.data_type, {})
1492 if data_config.get("immediate", False):
1493 # 指令类型直接接受,稍后会自动寻找传输机会
1494 return True, "指令类型立即接受"
1495
1496 # ⭐ QoS 与安全级准入检查(在时间窗口与资源检查之前执行)
1497 qos_ctrl = QosAdmissionController(self)
1498 qos_ok, qos_reason = qos_ctrl.check_admission(req)
1499 if not qos_ok:
1500 # 将拒绝原因码记录到统计中,并直接返回
1501 for code, msg in REJECTION_REASONS.items():
1502 if msg == qos_reason:
1503 self._record_rejection(code)
1504 break
1505 return False, qos_reason
1506
1507 # ⭐ 新增:检查用户指定的时间段
1508 if req.start_time is not None and req.end_time is not None:
1509 # 用户指定了具体时间段,需要检查资源池可用性
1510 time_check_result = self._check_time_window_resources(req, satellite)
1511 if not time_check_result[0]:
1512 self._record_rejection("TIME_WINDOW_CONFLICT")
1513 return False, time_check_result[1]
1514
1515 # 第0步:检查资源利用率阈值
1516 # 如果系统资源紧张,对低优先级请求(特别是背景任务)更严格
1517 resource_util = self.stats["resource_utilization"]
1518 avg_utilization = (resource_util["satellites"] + resource_util["ground_stations"] + resource_util["geo_relays"]) / 3
1519
1520 # ⭐ 实验要求:自定义约束 - 强制中继
1521 force_relay = req.custom_constraints.get("force_relay", False)
1522
1523 # 资源紧张阈值判断
1524 RESOURCE_TIGHT_THRESHOLD = CFG_RESOURCE_TIGHT_THRESHOLD # 资源紧张阈值(见 config)
1525 if avg_utilization > RESOURCE_TIGHT_THRESHOLD:
1526 # 背景任务在资源紧张时更容易被拒绝
1527 if req.source == "background" and req.priority < 5: # 只拒绝低优先级背景任务
1528 return False, f"系统资源紧张(利用率{avg_utilization*100:.1f}%),背景任务暂停"
1529 # 用户低优先级请求也可能被拒绝(但阈值更低)
1530 elif req.source == "user" and req.priority < 2: # 只拒绝优先级<2的用户请求
1531 return False, f"系统资源紧张(利用率{avg_utilization*100:.1f}%),低优先级请求拒绝"
1532
1533 # 第1步:检查卫星资源是否已被占用
1534 if satellite.sat_id in self.resource_usage["satellites"] and len(self.resource_usage["satellites"][satellite.sat_id]) > 0:
1535 return False, f"卫星{satellite.sat_id}资源已被占用"
1536
1537 sat_pos = self.get_satellite_position(satellite)
1538
1539 # ⭐ 实验要求:自定义约束 - 指定地面站

Calls 10

check_admissionMethod · 0.95
_record_rejectionMethod · 0.95
check_visibilityMethod · 0.95
get_geo_positionMethod · 0.95
check_geo_visibilityMethod · 0.95
get_orbital_periodMethod · 0.80
getMethod · 0.45