Skip to content
Snippets Groups Projects
Commit 8895ba26 authored by Fabian Tërnava's avatar Fabian Tërnava
Browse files

log client id when requesting a skill execution

parent 262e8b88
No related branches found
No related tags found
1 merge request!286skill provider usability updates
......@@ -50,9 +50,35 @@ namespace armarx
}
}
std::string SkillManagerComponentPluginUser::getFirstProviderNameThatHasSkill(const std::string& skillName)
{
for (const auto& [providerName, providerPrx] : skillProviderMap)
{
auto allSkills = providerPrx->getSkillDescriptions();
for (const auto& [currentSkillName, skillDesc] : allSkills)
{
if (currentSkillName == skillName)
{
return providerName;
}
}
}
return "INVALID PROVIDER NAME";
}
skills::provider::dto::Execution::Status SkillManagerComponentPluginUser::executeSkill(const skills::manager::dto::SkillExecutionRequest& info, const Ice::Current&)
{
if (auto it = skillProviderMap.find(info.providerName); it != skillProviderMap.end())
std::string providerName = "INVALID PROVIDER NAME";
if (info.providerName == "*")
{
providerName = getFirstProviderNameThatHasSkill(info.skillName);
}
else if(not(info.providerName.empty()))
{
providerName = info.providerName;
}
if (auto it = skillProviderMap.find(providerName); it != skillProviderMap.end())
{
skills::callback::dti::SkillProviderCallbackInterfacePrx myPrx;
getProxy(myPrx, -1);
......@@ -66,7 +92,8 @@ namespace armarx
}
else
{
throw LocalException("Could not execute a skill of provider '" + info.providerName + "' because the provider does not exist.");
ARMARX_ERROR << "Could not execute a skill of provider '" + providerName + "' because the provider does not exist.";
throw armarx::LocalException("Skill execution failed. Could not execute a skill of provider '" + providerName + "' because the provider does not exist.");
}
}
......
......@@ -41,6 +41,9 @@ namespace armarx
skills::manager::dto::SkillDescriptionMapMap getSkillDescriptions(const Ice::Current &current) override;
skills::manager::dto::SkillStatusUpdateMapMap getSkillExecutionStatuses(const Ice::Current &current) override;
protected:
std::string getFirstProviderNameThatHasSkill(const std::string& skillName);
private:
armarx::plugins::SkillManagerComponentPlugin* plugin = nullptr;
......
......@@ -37,6 +37,11 @@ namespace armarx
Skill(const SkillDescription&);
virtual ~Skill() = default;
std::string getSkillId() const
{
return providerName + "/" + description.skillName;
}
/// Override this method with the actual implementation.
virtual void init(const aron::data::DictPtr& params);
......@@ -77,7 +82,7 @@ namespace armarx
manager::dti::SkillManagerInterfacePrx manager = nullptr;
/// the provider that owns this skill. Will be set from provider and is const afterwards
std::string providerName = "";
std::string providerName = "INVALID PROVIDER NAME";
protected:
/// Use conditions this way
......
......@@ -73,7 +73,7 @@ namespace armarx
}
std::string skillName = skill->description.skillName;
if (connected)
if (connected) // TODO: fix so that skills can be added anytime!!!
{
ARMARX_WARNING << "The SkillProvider already registered to a manager. The skill '" + skillName + "' therefore cannot be added anymore. Please only add skills in the onInit method.";
return;
......@@ -151,7 +151,7 @@ namespace armarx
{
std::shared_lock l(skillsMutex);
std::string skillName = info.skillName;
ARMARX_CHECK_EXPRESSION(skillImplementations.count(skillName) > 0);
ARMARX_CHECK_EXPRESSION(skillImplementations.count(skillName) > 0) << "\nThe names are: " << VAROUT(skillName) << ", " << VAROUT(getName());
// get reference of the wrapper
auto& wrapper = skillImplementations.at(skillName);
......
......@@ -11,9 +11,10 @@ namespace armarx
{
}
Skill::Status SkillProxy::execute(const aron::data::DictPtr& params, const Skill::CallbackT& callback)
Skill::Status SkillProxy::execute(const std::string& clientId, const aron::data::DictPtr& params)
{
skills::manager::dto::SkillExecutionRequest req;
req.clientId = clientId;
req.params = params->toAronDictDTO();
req.providerName = providerName;
req.skillName = skillName;
......
......@@ -6,12 +6,13 @@ namespace armarx
{
namespace skills
{
/* Manages the remote execution of a skill and converts the return type to the Skill::Status enum class */
class SkillProxy : public armarx::Logging
{
public:
SkillProxy(const manager::dti::SkillManagerInterfacePrx& manager, const std::string& skillProviderName, const std::string& skillName);
Skill::Status execute(const aron::data::DictPtr& params, const Skill::CallbackT& callback = [](const aron::data::DictPtr& returnValue) { (void) returnValue; });
Skill::Status execute(const std::string& clientId, const aron::data::DictPtr& params);
private:
manager::dti::SkillManagerInterfacePrx manager;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment