24 #include "logreplay_thread.h"
27 #include <blackboard/blackboard.h>
28 #include <logging/logger.h>
29 #include <core/threading/wait_condition.h>
30 #include <core/exceptions/system.h>
31 #include <utils/misc/autofree.h>
33 #include <blackboard/internal/instance_factory.h>
43 # include <sys/endian.h>
44 #elif defined(__MACH__) && defined(__APPLE__)
45 # include <sys/_endian.h>
49 #include <arpa/inet.h>
52 using namespace fawkes;
81 const char *thread_name,
83 :
Thread(thread_name, th_opmode)
85 set_name(
"BBLogReplayThread(%s)", logfile_name);
88 __logfile_name= strdup(logfile_name);
89 __logdir = strdup(logdir);
90 __scenario = strdup(scenario);
92 __cfg_grace_period = grace_period;
93 __cfg_loop_replay = loop_replay;
95 __cfg_non_blocking = non_blocking;
98 __cfg_non_blocking =
false;
106 free(__logfile_name);
121 if (asprintf(&__filename,
"%s/%s", __logdir, __logfile_name) == -1) {
126 __logfile =
new BBLogFile(__filename,
true);
134 throw Exception(
"Log file %s does not have any entries", __filename);
155 if (__filename) free(__filename);
165 __interface->
write();
169 __offsetdiff = __logfile->
entry_offset() - __last_offset;
182 __loopdiff = __now - __last_loop;
183 if ((__offsetdiff.
in_sec() - __loopdiff.
in_sec()) > __cfg_grace_period) {
184 if (__cfg_non_blocking) {
189 __waittime = __offsetdiff - __loopdiff;
194 __interface->
write();
198 __offsetdiff = __logfile->
entry_offset() - __last_offset;
202 if(__cfg_loop_replay){