feat(navigator): add logging to surface reason for mission invalidity (#27254)

This commit is contained in:
Balduin
2026-04-30 10:30:45 +02:00
committed by GitHub
parent 2f60b0f2ba
commit b5fcd649eb
2 changed files with 13 additions and 0 deletions
@@ -64,6 +64,8 @@ MissionFeasibilityChecker::checkMissionFeasible(const mission_s &mission)
// trivial case: A mission with length zero cannot be valid
if ((int)mission.count <= 0) {
mavlink_log_critical(_navigator->get_mavlink_log_pub(), "Mission rejected: empty\t");
events::send(events::ID("navigator_mis_empty"), {events::Log::Error, events::LogInternal::Info}, "Mission rejected: empty");
return false;
}
@@ -85,6 +87,7 @@ MissionFeasibilityChecker::checkMissionFeasible(const mission_s &mission)
if (!success) {
_navigator->get_mission_result()->warning = true;
/* not supposed to happen unless the datamanager can't access the SD card, etc. */
logDatamanReadFailure(i, mission.mission_dataman_id);
return false;
}
@@ -125,6 +128,7 @@ MissionFeasibilityChecker::checkMissionAgainstGeofence(const mission_s &mission,
if (!success) {
/* not supposed to happen unless the datamanager can't access the SD card, etc. */
logDatamanReadFailure(i, mission.mission_dataman_id);
return false;
}
@@ -152,3 +156,11 @@ MissionFeasibilityChecker::checkMissionAgainstGeofence(const mission_s &mission,
return true;
}
void MissionFeasibilityChecker::logDatamanReadFailure(const size_t mission_item, const uint8_t dataman_id)
{
mavlink_log_critical(_navigator->get_mavlink_log_pub(), "Mission rejected: dataman read failed at item %zu (dm_id=%u)\t", mission_item,
static_cast<unsigned>(dataman_id));
events::send<uint16_t, uint8_t>(events::ID("navigator_mis_dm_read_fail"), {events::Log::Error, events::LogInternal::Info},
"Mission rejected: dataman read failed at item {1} (dm_id={2})", static_cast<uint16_t>(mission_item), dataman_id);
}
@@ -57,6 +57,7 @@ private:
FeasibilityChecker _feasibility_checker;
bool checkMissionAgainstGeofence(const mission_s &mission, float home_alt, bool home_valid);
void logDatamanReadFailure(const size_t mission_item, const uint8_t dataman_id);
public:
MissionFeasibilityChecker(Navigator *navigator, DatamanClient &dataman_client) :