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")