25 #include <logging/cache.h>
27 #include <xmlrpc-c/girerr.hpp>
44 : xmlrpc_registry_(registry), logger_(logger), cache_logger_(cache_logger)
53 xmlrpc_registry_->addMethod(
"log.entries", &*log_entries_);
54 xmlrpc_registry_->addMethod(
"log.get_size", &*log_get_size_);
55 xmlrpc_registry_->addMethod(
"log.set_size", &*log_set_size_);
56 xmlrpc_registry_->addMethod(
"log.log_debug", &*log_log_debug_);
57 xmlrpc_registry_->addMethod(
"log.log_info", &*log_log_info_);
58 xmlrpc_registry_->addMethod(
"log.log_warn", &*log_log_warn_);
59 xmlrpc_registry_->addMethod(
"log.log_error", &*log_log_error_);
78 _help =
"Returns array of recent log messages. Each entry is a struct "
79 "consisting of the entries component, time string and message.";
81 cache_logger_ = cache_logger;
95 xmlrpc_c::value *
const result)
98 cache_logger_->
lock();
99 std::list<CacheLogger::CacheEntry> messages = cache_logger_->
get_messages();
101 std::list<CacheLogger::CacheEntry>::iterator i;
103 std::vector<xmlrpc_c::value> array;
105 for (i = messages.begin(); i != messages.end(); ++i) {
106 std::map<std::string, xmlrpc_c::value> elem;
107 elem.insert(std::make_pair(
"component", xmlrpc_c::value_string(i->component)));
108 elem.insert(std::make_pair(
"time", xmlrpc_c::value_datetime(i->time)));
109 elem.insert(std::make_pair(
"message", xmlrpc_c::value_string(i->message)));
110 array.push_back(xmlrpc_c::value_struct(elem));
113 *result = xmlrpc_c::value_array(array);
127 _help =
"Get current maximum size of the cache log.";
129 cache_logger_ = cache_logger;
143 xmlrpc_c::value *
const result)
145 *result = xmlrpc_c::value_int(cache_logger_->
size());
159 _help =
"Set maximum size of cache logger.";
161 cache_logger_ = cache_logger;
175 xmlrpc_c::value *
const result)
177 int new_size = params.getInt(0);
179 throw xmlrpc_c::fault(
"Illegal size value, must be integer > 0",
180 xmlrpc_c::fault::CODE_UNSPECIFIED);
183 *result = xmlrpc_c::value_nil();
198 _help =
"Log message of specified level, arguments are component and message.";
201 log_level_ = log_level;
216 std::string component = params.getString(0);
217 std::string message = params.getString(1);
218 logger_->
log(log_level_, component.c_str(),
"%s", message.c_str());
219 *result = xmlrpc_c::value_nil();
Get most recent log entries via XML-RPC method.
log_entries(fawkes::CacheLogger *logger)
Constructor.
virtual void execute(xmlrpc_c::paramList const ¶ms, xmlrpc_c::value *const result)
Execute method.
virtual ~log_entries()
Virtual empty destructor.
XML-RPC method to get the current cache log size.
virtual void execute(xmlrpc_c::paramList const ¶ms, xmlrpc_c::value *const result)
Execute method.
log_get_size(fawkes::CacheLogger *logger)
Constructor.
virtual ~log_get_size()
Virtual empty destructor.
XML-RPC method to log a message.
virtual void execute(xmlrpc_c::paramList const ¶ms, xmlrpc_c::value *const result)
Execute method.
log_log(fawkes::Logger *logger, fawkes::Logger::LogLevel log_level)
Constructor.
virtual ~log_log()
Virtual empty destructor.
XML-RPC method to set maximum size of cache logger.
virtual void execute(xmlrpc_c::paramList const ¶ms, xmlrpc_c::value *const result)
Execute method.
log_set_size(fawkes::CacheLogger *cache_logger)
Constructor.
virtual ~log_set_size()
Virtual empty destructor.
XmlRpcLogMethods(std::shared_ptr< xmlrpc_c::registry > registry, fawkes::CacheLogger *cache_logger, fawkes::Logger *logger)
Constructor.
~XmlRpcLogMethods()
Destructor.
std::list< CacheEntry > & get_messages()
Get messages.
unsigned int size() const
Get maximum number of log entries in cache.
void lock()
Lock cache logger, no new messages can be added.
void set_size(unsigned int new_size)
Set maximum number of log entries in cache.
void unlock()
Unlock cache logger.
virtual void log(LogLevel level, const char *component, const char *format,...)
Log message of given log level.
@ LL_INFO
informational output about normal procedures
@ LL_WARN
warning, should be investigated but software still functions, an example is that something was reques...
@ LL_ERROR
error, may be recoverable (software still running) or not (software has to terminate).
@ LL_DEBUG
debug output, relevant only when tracking down problems
Fawkes library namespace.