SkillManagerComponentPlugin.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <exception>
4 #include <memory>
5 #include <mutex>
6 #include <optional>
7 #include <shared_mutex>
8 #include <string>
9 #include <vector>
10 
11 #include <boost/uuid/uuid.hpp>
12 
13 #include <SimoxUtility/json/json.hpp>
14 
18 
23 #include <RobotAPI/interface/aron/Aron.h>
24 #include <RobotAPI/interface/skills/SkillManagerInterface.h>
39 
41 
42 namespace armarx
43 {
44  class SkillManagerComponentPluginUser; // forward declaration
45 }
46 
47 namespace armarx::plugins
48 {
50  {
51  public:
53 
54  void preOnInitComponent() override;
55 
56  void preOnConnectComponent() override;
57 
58  void postCreatePropertyDefinitions(PropertyDefinitionsPtr& properties) override;
59 
60  void addProvider(const skills::ProviderInfo& info);
61 
62  void removeProvider(const skills::ProviderID& id);
63 
65 
67 
69  const aron::data::DictPtr& data);
70 
71  bool abortSkill(const skills::SkillExecutionID& id);
72 
74 
75  std::optional<skills::SkillDescription> getSkillDescription(const skills::SkillID& id);
76 
77  std::map<skills::SkillID, skills::SkillDescription> getSkillDescriptions();
78 
79  std::optional<skills::SkillStatusUpdate>
81 
82  std::map<skills::SkillExecutionID, skills::SkillStatusUpdate> getSkillExecutionStatuses();
83 
84  protected:
86 
87  //****************************//
88  //** Fluxio related methods **//
89  //****************************//
90 
92 
95  executeFluxioSkill(const std::string& skillId,
96  const std::string& profileId,
97  const std::string& executorName,
98  armarx::aron::data::DictPtr parameters = nullptr);
99 
100  void abortFluxioSkill(const std::string& executionId);
101 
103  getFluxioSkillExecutionStatus(const std::string& executionId);
104 
107  getSkillList();
108 
111  getSkill(const std::string& id);
112 
113  std::optional<std::vector<std::experimental::observer_ptr<const skills::FluxioSkill>>>
114  deleteSkill(const std::string& skillId, const std::string& userId, bool dryRun);
115 
117  getSkillMutex(const std::string& skillId, const std::string& userId);
118 
119  void deleteSkillMutex(const std::string& skillId, const std::string& userId);
120 
123  deleteSkillParameter(const std::string& skillId,
124  const std::string& parameterId,
125  const std::string& userId,
126  bool dryRun);
127 
130  updateSkillParameter(const std::string& skillId,
131  const skills::manager::dto::FluxioParameter& parameter,
132  const std::string& userId,
133  bool dryRun);
134 
137  getProfileList();
138 
140  getProfile(const std::string& id);
141 
143  createProfile(const skills::FluxioProfile& profile);
144 
145  void updateProfile(const skills::FluxioProfile& profile);
146 
149  getProviderList();
150 
152  getProvider(const std::string& id);
153 
156  addFluxioProvider(const std::string& name);
157 
160  getSkillsOfProvider(const std::string& id);
161 
164  addSkillToProvider(const std::string& userId,
165  const std::string& providerId,
166  skills::FluxioSkill&& skill);
167 
168  private:
169  struct FluxioDataCollector
170  {
171  std::map<std::string, skills::FluxioSkill> skills;
172  std::shared_mutex skillsMutex;
173 
174  std::map<std::string, skills::FluxioProfile> profiles;
175  std::shared_mutex profilesMutex;
176 
177  std::map<std::string, skills::FluxioProvider> providers;
178  std::shared_mutex providersMutex;
179 
180  std::map<std::string, std::tuple<std::string, armarx::DateTime>> skillMutexMap;
181  std::shared_mutex skillMutexMapMutex;
182  const std::int64_t mutexTimeout = 30; // minutes
183 
184  std::map<std::string, std::unique_ptr<skills::FluxioExecutor>> fluxioExecutors;
185  std::shared_mutex fluxioExecutorsMutex;
186 
187  std::map<std::string, aron::type::ObjectPtr> types;
188  std::shared_mutex typesMutex;
189  };
190 
191  FluxioDataCollector fluxioDC = {};
192  [[noreturn]] void handleExceptionNonLockingThrow(const char* funcName,
193  const std::exception& e,
194  skills::ProviderID providerId,
195  bool eraseSkillProvider = true);
196 
197  std::optional<std::map<skills::ProviderID,
198  skills::provider::dti::SkillProviderInterfacePrx>::iterator>
199  handleExceptionNonLocking(const char* funcName,
200  const std::exception& e,
201  skills::ProviderID providerId,
202  bool eraseSkillProvider = true);
203 
204  skills::manager::dti::SkillManagerInterfacePrx myPrx;
205 
206  std::mutex skillProviderMapMutex;
207  std::map<skills::ProviderID, skills::provider::dti::SkillProviderInterfacePrx>
208  skillProviderMap;
209 
210  template <typename S, typename T>
211  std::vector<std::experimental::observer_ptr<const T>>
212  convertMapValuesToObserverVector(std::map<S, T>& map);
213 
214  static boost::uuids::uuid
215  createUuidWithString(const std::string& str,
216  std::optional<const boost::uuids::uuid> namespaceUUID = std::nullopt);
217 
218  void
219  convertAronObjectPtrToFluxioParameters(std::map<std::string, skills::FluxioParameter>& ret,
220  const aron::type::ObjectPtr& ptr,
221  bool isInput,
222  const boost::uuids::uuid& skillId);
223 
224  template <typename T>
225  void replaceVectorContent(std::vector<T>& originalVector,
226  const std::vector<T>& replacementVector);
227 
228  bool setEditFluxioSkillMutex(bool aquireMutex,
229  const std::string& userId,
230  const std::string& skillId);
231 
232  void descriptionIdToFluxioSkill(skills::SkillID skillId,
233  skills::SkillDescription skillDescription);
234 
237  updateFluxioParameter(
238  const std::string& skillId,
239  const std::string& parameterId,
240  const std::string& userId,
241  bool dryRun,
242  bool deleteParameter,
243  const std::optional<skills::manager::dto::FluxioParameter>& parameterDT = std::nullopt);
244 
246  };
247 } // namespace armarx::plugins
armarx::skills::FluxioSkill
Definition: FluxioSkill.h:25
armarx::skills::SkillExecutionID
Definition: SkillExecutionID.h:15
ProviderID.h
str
std::string str(const T &t)
Definition: UserAssistedSegmenterGuiWidgetController.cpp:43
armarx::aron::ret
ReaderT::InputType T & ret
Definition: rw.h:13
skills
This file is part of ArmarX.
Exception.h
SkillStatusUpdate.h
FluxioSkill.h
armarx::skills::error::FluxioException
A base class for skill exceptions.
Definition: FluxioException.h:24
armarx::skills::SkillDescription
Definition: SkillDescription.h:17
armarx::plugins::SkillManagerComponentPlugin::deleteSkillMutex
void deleteSkillMutex(const std::string &skillId, const std::string &userId)
Definition: SkillManagerComponentPlugin.cpp:1488
FluxioValue.h
FluxioResult.h
armarx::plugins::SkillManagerComponentPlugin::getSkillDescription
std::optional< skills::SkillDescription > getSkillDescription(const skills::SkillID &id)
Definition: SkillManagerComponentPlugin.cpp:444
SkillManagerComponentPluginUser.h
DateTime.h
FluxioProvider.h
armarx::plugins::SkillManagerComponentPlugin::getFluxioSkillExecutionStatus
skills::Result< std::vector< skills::FluxioSkillStatusUpdate >, skills::error::FluxioException > getFluxioSkillExecutionStatus(const std::string &executionId)
Definition: SkillManagerComponentPlugin.cpp:878
armarx::plugins::SkillManagerComponentPlugin::getSkillMutex
skills::Result< bool, skills::error::FluxioException > getSkillMutex(const std::string &skillId, const std::string &userId)
Definition: SkillManagerComponentPlugin.cpp:1481
armarx::plugins::SkillManagerComponentPlugin::getSkillDescriptions
std::map< skills::SkillID, skills::SkillDescription > getSkillDescriptions()
Definition: SkillManagerComponentPlugin.cpp:499
armarx::plugins::SkillManagerComponentPlugin::getProfileList
skills::Result< std::vector< std::experimental::observer_ptr< const skills::FluxioProfile > >, skills::error::FluxioException > getProfileList()
Definition: SkillManagerComponentPlugin.cpp:1497
FluxioProfile.h
armarx::plugins::SkillManagerComponentPlugin::abortSkill
bool abortSkill(const skills::SkillExecutionID &id)
Definition: SkillManagerComponentPlugin.cpp:356
armarx::plugins::SkillManagerComponentPlugin::executeFluxioSkill
skills::Result< std::experimental::observer_ptr< skills::FluxioExecutor >, skills::error::FluxioException > executeFluxioSkill(const std::string &skillId, const std::string &profileId, const std::string &executorName, armarx::aron::data::DictPtr parameters=nullptr)
Definition: SkillManagerComponentPlugin.cpp:697
armarx::plugins::SkillManagerComponentPlugin::deleteSkill
std::optional< std::vector< std::experimental::observer_ptr< const skills::FluxioSkill > > > deleteSkill(const std::string &skillId, const std::string &userId, bool dryRun)
Definition: SkillManagerComponentPlugin.cpp:1163
Dict.h
armarx::plugins::SkillManagerComponentPlugin::getSkill
skills::Result< std::experimental::observer_ptr< const skills::FluxioSkill >, skills::error::FluxioException > getSkill(const std::string &id)
Definition: SkillManagerComponentPlugin.cpp:1141
armarx::plugins::SkillManagerComponentPlugin::executeSkill
skills::SkillStatusUpdate executeSkill(const skills::SkillExecutionRequest &req)
Definition: SkillManagerComponentPlugin.cpp:175
armarx::skills::SkillExecutionRequest
Definition: SkillExecutionRequest.h:13
Object.h
armarx::plugins::SkillManagerComponentPlugin::removeProvider
void removeProvider(const skills::ProviderID &id)
Definition: SkillManagerComponentPlugin.cpp:159
armarx::skills::SkillStatusUpdate
Definition: SkillStatusUpdate.h:116
armarx::skills::ProviderID
Definition: ProviderID.h:12
ManagedIceObject.h
armarx::plugins
This file is part of ArmarX.
Definition: DebugObserverComponentPlugin.cpp:27
FluxioParameter.h
armarx::ComponentPlugin
Definition: ComponentPlugin.h:37
data
uint8_t data[1]
Definition: EtherCATFrame.h:68
armarx::view_selection::ComponentPlugin
client::plugins::ComponentPlugin ComponentPlugin
Definition: ComponentPlugin.h:66
FluxioException.h
armarx::plugins::SkillManagerComponentPlugin::preOnConnectComponent
void preOnConnectComponent() override
Definition: SkillManagerComponentPlugin.cpp:103
FluxioEdge.h
armarx::plugins::SkillManagerComponentPlugin::updateSkillParameters
bool updateSkillParameters(const skills::SkillExecutionID &id, const aron::data::DictPtr &data)
Definition: SkillManagerComponentPlugin.cpp:309
armarx::SkillManagerComponentPluginUser
Definition: SkillManagerComponentPluginUser.h:21
FluxioSkillStatusUpdate.h
armarx::plugins::SkillManagerComponentPlugin::deleteSkillParameter
skills::Result< std::vector< std::experimental::observer_ptr< const skills::FluxioSkill > >, skills::error::FluxioException > deleteSkillParameter(const std::string &skillId, const std::string &parameterId, const std::string &userId, bool dryRun)
Definition: SkillManagerComponentPlugin.cpp:1295
armarx::plugins::SkillManagerComponentPlugin::addSkillToProvider
skills::Result< std::experimental::observer_ptr< const skills::FluxioSkill >, skills::error::FluxioException > addSkillToProvider(const std::string &userId, const std::string &providerId, skills::FluxioSkill &&skill)
Definition: SkillManagerComponentPlugin.cpp:1738
FluxioExecutor.h
SkillExecutionRequest.h
armarx::plugins::SkillManagerComponentPlugin::getSkillsOfProvider
skills::Result< std::vector< std::experimental::observer_ptr< const skills::FluxioSkill > >, skills::error::FluxioException > getSkillsOfProvider(const std::string &id)
Definition: SkillManagerComponentPlugin.cpp:1697
armarx::plugins::SkillManagerComponentPlugin::updateProfile
void updateProfile(const skills::FluxioProfile &profile)
Definition: SkillManagerComponentPlugin.cpp:1605
armarx::plugins::SkillManagerComponentPlugin
Definition: SkillManagerComponentPlugin.h:49
armarx::plugins::SkillManagerComponentPlugin::getSkillExecutionStatus
std::optional< skills::SkillStatusUpdate > getSkillExecutionStatus(const skills::SkillExecutionID &id)
Definition: SkillManagerComponentPlugin.cpp:547
armarx::aron::data::DictPtr
std::shared_ptr< Dict > DictPtr
Definition: Dict.h:41
armarx::plugins::SkillManagerComponentPlugin::getProviderList
skills::Result< std::vector< std::experimental::observer_ptr< const skills::FluxioProvider > >, skills::error::FluxioException > getProviderList()
Definition: SkillManagerComponentPlugin.cpp:1650
armarx::plugins::SkillManagerComponentPlugin::getProfile
skills::Result< skills::FluxioProfile, skills::error::FluxioException > getProfile(const std::string &id)
Definition: SkillManagerComponentPlugin.cpp:1506
armarx::skills::FluxioProfile
Definition: FluxioProfile.h:14
armarx::plugins::SkillManagerComponentPlugin::createProfile
skills::Result< skills::FluxioProfile, skills::error::FluxioException > createProfile(const skills::FluxioProfile &profile)
Definition: SkillManagerComponentPlugin.cpp:1527
ProviderInfo.h
IceUtil::Handle< class PropertyDefinitionContainer >
armarx::plugins::SkillManagerComponentPlugin::preOnInitComponent
void preOnInitComponent() override
Definition: SkillManagerComponentPlugin.cpp:64
armarx::plugins::SkillManagerComponentPlugin::abortSkillAsync
bool abortSkillAsync(const skills::SkillExecutionID &id)
Definition: SkillManagerComponentPlugin.cpp:401
armarx::plugins::SkillManagerComponentPlugin::getProvider
skills::Result< skills::FluxioProvider, skills::error::FluxioException > getProvider(const std::string &id)
Definition: SkillManagerComponentPlugin.cpp:1673
armarx::plugins::SkillManagerComponentPlugin::getTypes
aron::type::ObjectPtr getTypes()
Definition: SkillManagerComponentPlugin.cpp:1917
armarx::plugins::SkillManagerComponentPlugin::addFluxioProvider
skills::Result< std::experimental::observer_ptr< const skills::FluxioProvider >, skills::error::FluxioException > addFluxioProvider(const std::string &name)
Definition: SkillManagerComponentPlugin.cpp:1625
armarx::plugins::SkillManagerComponentPlugin::postCreatePropertyDefinitions
void postCreatePropertyDefinitions(PropertyDefinitionsPtr &properties) override
Definition: SkillManagerComponentPlugin.cpp:110
ComponentPlugin.h
armarx::aron::type::ObjectPtr
std::shared_ptr< Object > ObjectPtr
Definition: Object.h:36
armarx::plugins::SkillManagerComponentPlugin::addProvider
void addProvider(const skills::ProviderInfo &info)
Definition: SkillManagerComponentPlugin.cpp:133
armarx::skills::ProviderInfo
Definition: ProviderInfo.h:11
armarx::plugins::SkillManagerComponentPlugin::executeSkillAsync
skills::SkillExecutionID executeSkillAsync(const skills::SkillExecutionRequest &req)
Definition: SkillManagerComponentPlugin.cpp:241
armarx::plugins::SkillManagerComponentPlugin::updateSkillParameter
skills::Result< std::vector< std::experimental::observer_ptr< const skills::FluxioSkill > >, skills::error::FluxioException > updateSkillParameter(const std::string &skillId, const skills::manager::dto::FluxioParameter &parameter, const std::string &userId, bool dryRun)
Definition: SkillManagerComponentPlugin.cpp:1305
armarx::plugins::SkillManagerComponentPlugin::getSkillList
skills::Result< std::vector< std::experimental::observer_ptr< const skills::FluxioSkill > >, skills::error::FluxioException > getSkillList()
Definition: SkillManagerComponentPlugin.cpp:1134
armarx::skills::SkillID
Definition: SkillID.h:14
armarx::plugins::SkillManagerComponentPlugin::getFirstProviderNameThatHasSkill
skills::ProviderID getFirstProviderNameThatHasSkill(const skills::SkillID &skillid)
Definition: SkillManagerComponentPlugin.cpp:115
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::skills::Result
Definition: FluxioResult.h:12
FluxioNode.h
armarx::plugins::SkillManagerComponentPlugin::abortFluxioSkill
void abortFluxioSkill(const std::string &executionId)
Definition: SkillManagerComponentPlugin.cpp:854
armarx::plugins::SkillManagerComponentPlugin::getSkillExecutionStatuses
std::map< skills::SkillExecutionID, skills::SkillStatusUpdate > getSkillExecutionStatuses()
Definition: SkillManagerComponentPlugin.cpp:605