FluxioCompositeExecutor.h
Go to the documentation of this file.
1#pragma once
2
3#include <atomic>
4#include <experimental/memory>
5#include <optional>
6#include <shared_mutex>
7#include <string>
8
12
14#include "../FluxioParameter.h"
16#include "../FluxioSkill.h"
19#include "../SkillExecutionID.h"
21#include "FluxioExecutor.h"
22
23namespace armarx::skills
24{
26 {
27 public:
29 const std::string& id,
30 const skills::FluxioSkill& skill,
33 const std::string& skillId,
34 const std::string& profileId,
35 const std::string& executorName,
36 armarx::aron::data::DictPtr parameters)>&& executeFluxioSkillFunc,
38 const std::vector<std::string>& parameterIds)>&& addMergerExecutorToDCFunc,
40 const std::string& id,
41 const skills::FluxioSkill& skill,
42 bool isRetry)>&& addLoopExecutorToDCFunc);
43
44 void run(std::string executorName,
47 void abort() override;
48 std::optional<std::vector<skills::FluxioSkillStatusUpdate>> getStatusUpdate() override;
49 bool validateSkill(skills::FluxioEdge& ret) const;
50
51 private:
52 void startSubRoutine(
55 std::atomic_bool& running,
56 const std::string& executorName,
58
59 void handleParameterRoutine(
61 std::atomic_bool& running,
62 const std::string& executorName);
63
64 void handleSubSkillRoutine(
66 std::atomic_bool& running,
67 const std::string& executorName,
69
70 void handleControlRoutine(
73 std::atomic_bool& running,
74 const std::string& executorName,
76
77 void abortSubExecutions();
78
79 void setStatus(skills::SkillStatus status, const std::string& nodeId = "noId") override;
80
81 void pollSubStatuses();
82
83 const std::function<void(const std::string& executionId)> abortFluxioSkill;
84
85 const std::function<skills::Result<std::experimental::observer_ptr<FluxioExecutor>,
87 const std::string& skillId,
88 const std::string& profileId,
89 const std::string& executorName,
91 executeFluxioSkill;
92
93 const std::function<std::experimental::observer_ptr<FluxioExecutor>(
94 const std::vector<std::string>& parameterIds)>
95 addMergerExecutorToDC;
96
97 const std::function<std::experimental::observer_ptr<
98 FluxioExecutor>(const std::string& id, const skills::FluxioSkill& skill, bool isRetry)>
99 addLoopExecutorToDC;
100
101 std::optional<skills::SkillExecutionID> executionId = std::nullopt;
102 const skills::FluxioSkill& skill;
103 std::map<std::string, std::experimental::observer_ptr<FluxioExecutor>>
104 subExecutionsMap; // key is node id
105 std::shared_mutex subExecutionsMapMutex;
106
107 const armarx::Duration pollingFrequency = armarx::Duration::MilliSeconds(250);
108 };
109} // namespace armarx::skills
static Duration MilliSeconds(std::int64_t milliSeconds)
Constructs a duration in milliseconds.
Definition Duration.cpp:48
Represents a duration.
Definition Duration.h:17
void run(std::string executorName, armarx::aron::data::DictPtr parameters, std::experimental::observer_ptr< const FluxioProfile > profilePtr) override
FluxioCompositeExecutor(const std::string &id, const skills::FluxioSkill &skill, const std::function< skills::Result< std::experimental::observer_ptr< FluxioExecutor >, skills::error::FluxioException >(const std::string &skillId, const std::string &profileId, const std::string &executorName, armarx::aron::data::DictPtr parameters)> &&executeFluxioSkillFunc, const std::function< std::experimental::observer_ptr< FluxioExecutor >(const std::vector< std::string > &parameterIds)> &&addMergerExecutorToDCFunc, const std::function< std::experimental::observer_ptr< FluxioExecutor >(const std::string &id, const skills::FluxioSkill &skill, bool isRetry)> &&addLoopExecutorToDCFunc)
bool validateSkill(skills::FluxioEdge &ret) const
std::optional< std::vector< skills::FluxioSkillStatusUpdate > > getStatusUpdate() override
FluxioExecutor(const FluxioExecutor &)=delete
std::optional< skills::FluxioSkillStatusUpdate > status
std::optional< std::string > executorName
A base class for skill exceptions.
std::shared_ptr< Dict > DictPtr
Definition Dict.h:42
This file is part of ArmarX.