24 #include "bblogreplay_plugin.h"
25 #include "logreplay_thread.h"
26 #include "logreplay_bt_thread.h"
28 #include <utils/time/time.h>
35 #include <sys/types.h>
55 std::set<std::string> logs;
57 std::string prefix =
"/fawkes/bblogreplay/";
59 std::string scenario =
"";
61 scenario = config->
get_string((prefix +
"scenario").c_str());
63 e.
append(
"No scenario defined, configure %sscenario", prefix.c_str());
67 std::string scenario_prefix = prefix + scenario +
"/";
68 std::string logs_prefix = scenario_prefix +
"logs/";
70 std::string logdir = LOGDIR;
72 logdir = config->
get_string((scenario_prefix +
"logdir").c_str());
75 int err = stat(logdir.c_str(), &s);
78 Exception se (
"Cannot access logdir %s (%s)",
79 logdir.c_str(), strerror_r(errno, buf, 1024));
80 }
else if ( ! S_ISDIR(s.st_mode) ) {
81 throw Exception(
"Logdir path %s is not a directory", logdir.c_str());
84 bool scenario_loop_replay =
false;
85 bool scenario_non_blocking =
false;
86 float scenario_grace_period = 0.001;
88 scenario_loop_replay = config->
get_bool((prefix +
"loop").c_str());
91 scenario_loop_replay = config->
get_bool((scenario_prefix +
"loop").c_str());
94 scenario_non_blocking = config->
get_bool((prefix +
"non_blocking").c_str());
97 scenario_non_blocking = config->
get_bool((scenario_prefix +
"non_blocking").c_str());
100 scenario_grace_period = config->
get_float((prefix +
"grace_period").c_str());
103 scenario_grace_period = config->
get_float((scenario_prefix +
"grace_period").c_str());
106 std::auto_ptr<Configuration::ValueIterator> i(config->
search(logs_prefix.c_str()));
108 std::string log_name = std::string(i->
path()).substr(logs_prefix.length());
109 log_name = log_name.substr(0, log_name.find(
"/"));
111 if ( logs.find(log_name) == logs.end() ) {
112 std::string log_prefix = logs_prefix + log_name +
"/";
114 printf(
"Log name: %s log_prefix: %s\n", log_name.c_str(), log_prefix.c_str());
116 std::string log_file =
"";
117 bool loop_replay = scenario_loop_replay;
118 bool non_blocking = scenario_non_blocking;
119 float grace_period = scenario_grace_period;
120 std::string hook_str =
"";
123 log_file = config->
get_string((log_prefix +
"file").c_str());
129 loop_replay = config->
get_bool((log_prefix +
"loop").c_str());
132 non_blocking = config->
get_bool((log_prefix +
"non_blocking").c_str());
135 hook_str = config->
get_string((log_prefix +
"hook").c_str());
138 grace_period = config->
get_float((log_prefix +
"grace_period").c_str());
142 if (hook_str !=
"") {
144 hook = BlockedTimingAspect::WAKEUP_HOOK_PRE_LOOP;
146 if (hook_str ==
"pre_loop") {
147 hook = BlockedTimingAspect::WAKEUP_HOOK_PRE_LOOP;
148 }
else if (hook_str ==
"sensor_acquire") {
149 hook = BlockedTimingAspect::WAKEUP_HOOK_SENSOR_ACQUIRE;
150 }
else if (hook_str ==
"sensor_prepare") {
151 hook = BlockedTimingAspect::WAKEUP_HOOK_SENSOR_PREPARE;
152 }
else if (hook_str ==
"sensor_process") {
153 hook = BlockedTimingAspect::WAKEUP_HOOK_SENSOR_PROCESS;
154 }
else if (hook_str ==
"worldstate") {
155 hook = BlockedTimingAspect::WAKEUP_HOOK_WORLDSTATE;
156 }
else if (hook_str ==
"think") {
157 hook = BlockedTimingAspect::WAKEUP_HOOK_THINK;
158 }
else if (hook_str ==
"skill") {
159 hook = BlockedTimingAspect::WAKEUP_HOOK_SKILL;
160 }
else if (hook_str ==
"act") {
161 hook = BlockedTimingAspect::WAKEUP_HOOK_ACT;
162 }
else if (hook_str ==
"act_exec") {
163 hook = BlockedTimingAspect::WAKEUP_HOOK_ACT_EXEC;
164 }
else if (hook_str ==
"post_loop") {
165 hook = BlockedTimingAspect::WAKEUP_HOOK_POST_LOOP;
167 throw Exception(
"Invalid hook '%s' for %s",
189 logs.insert(log_name);
194 throw Exception(
"No interfaces configured for log replay, aborting");
198 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 std::string get_string() const =0
Get string value.
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.
virtual const char * path() const =0
Path of value.
WakeupHook
Type to define at which hook the thread is woken up.
Base class for exceptions in Fawkes.
ThreadList thread_list
Thread list member.
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.