24 #include "bblogreplay_plugin.h" 26 #include "logreplay_bt_thread.h" 27 #include "logreplay_thread.h" 30 #include <sys/types.h> 31 #include <utils/time/time.h> 54 std::set<std::string> logs;
56 std::string prefix =
"/fawkes/bblogreplay/";
58 std::string scenario =
"";
62 e.
append(
"No scenario defined, configure %sscenario", prefix.c_str());
66 std::string scenario_prefix = prefix + scenario +
"/";
67 std::string logs_prefix = scenario_prefix +
"logs/";
69 std::string logdir = LOGDIR;
75 int err = stat(logdir.c_str(), &s);
78 Exception se(
"Cannot access logdir %s (%s)", logdir.c_str(), strerror_r(errno, buf, 1024));
79 }
else if (!S_ISDIR(s.st_mode)) {
80 throw Exception(
"Logdir path %s is not a directory", logdir.c_str());
83 bool scenario_loop_replay =
false;
84 bool scenario_non_blocking =
false;
85 float scenario_grace_period = 0.001;
87 scenario_loop_replay =
config->
get_bool((prefix +
"loop").c_str());
91 scenario_loop_replay =
config->
get_bool((scenario_prefix +
"loop").c_str());
95 scenario_non_blocking =
config->
get_bool((prefix +
"non_blocking").c_str());
99 scenario_non_blocking =
config->
get_bool((scenario_prefix +
"non_blocking").c_str());
103 scenario_grace_period =
config->
get_float((prefix +
"grace_period").c_str());
107 scenario_grace_period =
config->
get_float((scenario_prefix +
"grace_period").c_str());
111 #if __cplusplus >= 201103L 112 std::unique_ptr<Configuration::ValueIterator> i(
config->
search(logs_prefix.c_str()));
114 std::auto_ptr<Configuration::ValueIterator> i(
config->
search(logs_prefix.c_str()));
117 std::string log_name = std::string(i->
path()).substr(logs_prefix.length());
118 log_name = log_name.substr(0, log_name.find(
"/"));
120 if (logs.find(log_name) == logs.end()) {
121 std::string log_prefix = logs_prefix + log_name +
"/";
123 printf(
"Log name: %s log_prefix: %s\n", log_name.c_str(), log_prefix.c_str());
125 bool loop_replay = scenario_loop_replay;
126 bool non_blocking = scenario_non_blocking;
127 float grace_period = scenario_grace_period;
128 std::string hook_str;
135 non_blocking =
config->
get_bool((log_prefix +
"non_blocking").c_str());
143 grace_period =
config->
get_float((log_prefix +
"grace_period").c_str());
147 if (hook_str !=
"") {
149 hook = BlockedTimingAspect::WAKEUP_HOOK_PRE_LOOP;
151 if (hook_str ==
"pre_loop") {
152 hook = BlockedTimingAspect::WAKEUP_HOOK_PRE_LOOP;
153 }
else if (hook_str ==
"sensor_acquire") {
154 hook = BlockedTimingAspect::WAKEUP_HOOK_SENSOR_ACQUIRE;
155 }
else if (hook_str ==
"sensor_prepare") {
156 hook = BlockedTimingAspect::WAKEUP_HOOK_SENSOR_PREPARE;
157 }
else if (hook_str ==
"sensor_process") {
158 hook = BlockedTimingAspect::WAKEUP_HOOK_SENSOR_PROCESS;
159 }
else if (hook_str ==
"worldstate") {
160 hook = BlockedTimingAspect::WAKEUP_HOOK_WORLDSTATE;
161 }
else if (hook_str ==
"think") {
162 hook = BlockedTimingAspect::WAKEUP_HOOK_THINK;
163 }
else if (hook_str ==
"skill") {
164 hook = BlockedTimingAspect::WAKEUP_HOOK_SKILL;
165 }
else if (hook_str ==
"act") {
166 hook = BlockedTimingAspect::WAKEUP_HOOK_ACT;
167 }
else if (hook_str ==
"act_exec") {
168 hook = BlockedTimingAspect::WAKEUP_HOOK_ACT_EXEC;
169 }
else if (hook_str ==
"post_loop") {
170 hook = BlockedTimingAspect::WAKEUP_HOOK_POST_LOOP;
186 i->
get_string().c_str(), logdir.c_str(), scenario.c_str(), grace_period, loop_replay);
190 logs.insert(log_name);
195 throw Exception(
"No interfaces configured for log replay, aborting");
199 PLUGIN_DESCRIPTION(
"Replay BlackBoard log files")
BlackBoardLogReplayPlugin(fawkes::Configuration *config)
Constructor.
Fawkes library namespace.
virtual bool get_bool(const char *path)=0
Get value from configuration which is of type bool.
BlackBoard log replay blocked timing thread.
BlackBoard log replay plugin.
virtual ValueIterator * search(const char *path)=0
Iterator with search results.
virtual bool next()=0
Check if there is another element and advance to this if possible.
WakeupHook
Type to define at which hook the thread is woken up.
Base class for exceptions in Fawkes.
ThreadList thread_list
Thread list member.
virtual std::string get_string() const =0
Get string value.
virtual const char * path() const =0
Path of value.
Configuration * config
Fawkes configuration.
void push_back(Thread *thread)
Add thread to the end.
Interface for configuration handling.
virtual float get_float(const char *path)=0
Get value from configuration which is of type float.
void append(const char *format,...)
Append messages to the message list.
virtual std::string get_string(const char *path)=0
Get value from configuration which is of type string.
BlackBoard log Replay thread.