Skip to content
Snippets Groups Projects
Commit 54c953c9 authored by Ramin Yaghoubzadeh Torky's avatar Ramin Yaghoubzadeh Torky
Browse files

C++: logging level; iterator work

parent ec0c1b95
No related branches found
No related tags found
No related merge requests found
......@@ -55,6 +55,14 @@ typedef uint32_t IUEventType;
/// Bit mask for receiving all events
#define IU_ALL_EVENTS 127
/// Ipaaca (console) log levels
#define IPAACA_LOG_LEVEL_NONE 0
#define IPAACA_LOG_LEVEL_CRITICAL 1
#define IPAACA_LOG_LEVEL_ERROR 2
#define IPAACA_LOG_LEVEL_WARNING 3
#define IPAACA_LOG_LEVEL_INFO 4
#define IPAACA_LOG_LEVEL_DEBUG 5
/// Convert an int event type to a human-readable string
IPAACA_HEADER_EXPORT inline std::string iu_event_type_to_str(IUEventType type)
{
......
......@@ -245,6 +245,7 @@ IPAACA_HEADER_EXPORT class PayloadIterator//{{{
IPAACA_HEADER_EXPORT PayloadIterator(const PayloadIterator& iter);
IPAACA_HEADER_EXPORT PayloadIterator& operator++();
IPAACA_HEADER_EXPORT std::pair<std::string, PayloadEntryProxy> operator*();
IPAACA_HEADER_EXPORT std::shared_ptr<std::pair<std::string, PayloadEntryProxy> > operator->();
IPAACA_HEADER_EXPORT bool operator==(const PayloadIterator& ref);
IPAACA_HEADER_EXPORT bool operator!=(const PayloadIterator& ref);
// constructor to create a new top-most parent proxy (from a payload key)
......
......@@ -75,15 +75,19 @@
#endif
#ifdef IPAACA_DEBUG_MESSAGES
#define IPAACA_DEBUG(i) std::cout << __FILE__ << ":" << __LINE__ << ": " << __FUNCTION_NAME__ << "() -- " << i << std::endl;
#define IPAACA_INFO(i) std::cout << __FILE__ << ":" << __LINE__ << ": " << __FUNCTION_NAME__ << "() -- " << i << std::endl;
#define IPAACA_WARNING(i) std::cout << __FILE__ << ":" << __LINE__ << ": " << __FUNCTION_NAME__ << "() -- WARNING: " << i << std::endl;
#define IPAACA_IMPLEMENT_ME std::cout << __FILE__ << ":" << __LINE__ << ": " << __FUNCTION_NAME__ << "() -- IMPLEMENT ME" << std::endl;
#define IPAACA_TODO(i) std::cout << __FILE__ << ":" << __LINE__ << ": " << __FUNCTION_NAME__ << "() -- TODO: " << i << std::endl;
#define IPAACA_DEBUG(i) if (__ipaaca_static_option_log_level>=IPAACA_LOG_LEVEL_DEBUG) { std::cout << __FILE__ << ":" << __LINE__ << ": " << __FUNCTION_NAME__ << "() -- Debug: " << i << std::endl; }
#define IPAACA_INFO(i) if (__ipaaca_static_option_log_level>=IPAACA_LOG_LEVEL_INFO) { std::cout << __FILE__ << ":" << __LINE__ << ": " << __FUNCTION_NAME__ << "() -- Info: " << i << std::endl; }
#define IPAACA_WARNING(i) if (__ipaaca_static_option_log_level>=IPAACA_LOG_LEVEL_WARNING) { std::cout << __FILE__ << ":" << __LINE__ << ": " << __FUNCTION_NAME__ << "() -- WARNING: " << i << std::endl; }
#define IPAACA_ERROR(i) if (__ipaaca_static_option_log_level>=IPAACA_LOG_LEVEL_ERROR) { std::cout << __FILE__ << ":" << __LINE__ << ": " << __FUNCTION_NAME__ << "() -- ERROR: " << i << std::endl; }
#define IPAACA_CRITICAL(i) if (__ipaaca_static_option_log_level>=IPAACA_LOG_LEVEL_CRITICAL) { std::cout << __FILE__ << ":" << __LINE__ << ": " << __FUNCTION_NAME__ << "() -- CRITICAL: " << i << std::endl; }
#define IPAACA_IMPLEMENT_ME if (__ipaaca_static_option_log_level>=IPAACA_LOG_LEVEL_INFO) { std::cout << __FILE__ << ":" << __LINE__ << ": " << __FUNCTION_NAME__ << "() -- IMPLEMENT_ME:" << std::endl; }
#define IPAACA_TODO(i) if (__ipaaca_static_option_log_level>=IPAACA_LOG_LEVEL_INFO) { std::cout << __FILE__ << ":" << __LINE__ << ": " << __FUNCTION_NAME__ << "() -- TODO: " << i << std::endl; }
#else
#define IPAACA_DEBUG(i) ;
#define IPAACA_INFO(i) ;
#define IPAACA_WARNING(i) ;
#define IPAACA_ERROR(i) ;
#define IPAACA_CRITICAL(i) ;
#define IPAACA_IMPLEMENT_ME ;
#define IPAACA_TODO(i) ;
#endif
......@@ -171,6 +175,7 @@ namespace ipaaca {
// Actual initial values are set in ipaaca.cc
IPAACA_MEMBER_VAR_EXPORT extern std::string __ipaaca_static_option_default_payload_type;
IPAACA_MEMBER_VAR_EXPORT extern std::string __ipaaca_static_option_default_channel;
IPAACA_MEMBER_VAR_EXPORT extern unsigned int __ipaaca_static_option_log_level;
IPAACA_MEMBER_VAR_EXPORT Lock& logger_lock();
......
......@@ -96,7 +96,6 @@ void CommandLineParser::initialize_parser_defaults()
bool CommandLineParser::consume_library_option(const std::string& name, bool expect, const char* optarg)
{
IPAACA_DEBUG("Trying to consume " << name)
if (name=="ipaaca-payload-type") {
std::string newtype = optarg;
if (newtype=="MAP") newtype="STR";
......@@ -111,10 +110,31 @@ bool CommandLineParser::consume_library_option(const std::string& name, bool exp
IPAACA_DEBUG("Setting default channel " << newch)
__ipaaca_static_option_default_channel = newch;
} else if (name=="ipaaca-enable-logging") {
IPAACA_DEBUG("TODO: set ipaaca log level to " << optarg)
IPAACA_IMPLEMENT_ME
std::string level(optarg);
if ((level=="NONE") || (level=="SILENT")) {
IPAACA_DEBUG("Will set log level to NONE")
__ipaaca_static_option_log_level = IPAACA_LOG_LEVEL_NONE;
} else if (level=="DEBUG") {
__ipaaca_static_option_log_level = IPAACA_LOG_LEVEL_DEBUG;
IPAACA_DEBUG("Just set log level to DEBUG")
} else if (level=="INFO") {
IPAACA_DEBUG("Set log level to INFO")
__ipaaca_static_option_log_level = IPAACA_LOG_LEVEL_INFO;
} else if (level=="WARNING") {
IPAACA_DEBUG("Set log level to WARNING")
__ipaaca_static_option_log_level = IPAACA_LOG_LEVEL_WARNING;
} else if (level=="ERROR") {
IPAACA_DEBUG("Set log level to ERROR")
__ipaaca_static_option_log_level = IPAACA_LOG_LEVEL_ERROR;
} else if (level=="CRITICAL") {
IPAACA_DEBUG("Set log level to CRITICAL")
__ipaaca_static_option_log_level = IPAACA_LOG_LEVEL_CRITICAL;
} else {
IPAACA_WARNING("Unknown log level " << optarg)
IPAACA_WARNING("Valid levels are: NONE, DEBUG, INFO, WARNING, ERROR, CRITICAL ")
}
} else if (name=="rsb-enable-logging") {
IPAACA_DEBUG("TODO: set rsb log level to " << optarg)
IPAACA_WARNING("Unimplemented option ignored: " << name)
IPAACA_IMPLEMENT_ME
} else {
return false;
......
......@@ -39,7 +39,26 @@
using namespace rapidjson;
using namespace std;
int json_testbed_main(int argc, char** argv)
int iterators_main(int argc, char** argv)//{{{
{
std::string json_source("[\"old\",2,3,{\"key1\":\"value1\", \"key2\":\"value2\"}]");
ipaaca::PayloadDocumentEntry::ptr entry = ipaaca::PayloadDocumentEntry::from_json_string_representation(json_source);
ipaaca::FakeIU::ptr iu = ipaaca::FakeIU::create();
iu->add_fake_payload_item("a", entry);
iu->payload()["b"] = "simpleString";
iu->payload()["c"] = "anotherSimpleString";
std::cout << "Iterate over payload" << std::endl;
for (auto it = iu->payload().begin(); it != iu->payload().end(); ++it) {
std::cout << " " << it->first << " -> " << it->second << std::endl;
}
return 0;
}
//}}}
int json_testbed_main(int argc, char** argv)//{{{
{
std::string json_source("[\"old\",2,3,4]");
ipaaca::PayloadDocumentEntry::ptr entry = ipaaca::PayloadDocumentEntry::from_json_string_representation(json_source);
......@@ -53,7 +72,6 @@ int json_testbed_main(int argc, char** argv)
iu->payload()["c"] = "simpleString";
auto proxy = iu->payload()["a"][3];
std::cout << proxy << std::endl;
std::cout << "IU payload before: " << iu->payload() << std::endl;
std::cout << "Entry before: " << entry << std::endl;
......@@ -74,9 +92,9 @@ int json_testbed_main(int argc, char** argv)
return 0;
}
//}}}
int fakeiu_main(int argc, char** argv)
int fakeiu_main(int argc, char** argv)//{{{
{
//if (argc<2) {
// std::cout << "Please provide json content as the first argument." << std::endl;
......@@ -198,20 +216,11 @@ int fakeiu_main(int argc, char** argv)
for (auto& kv: pl_flat) {
std::cout << " " << std::left << std::setw(15) << (kv.first+": ") << kv.second << std::endl;
}
/*{
StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
entry->document.Accept(writer);
std::string docstring = buffer.GetString();
std::cout << "Final document: " << docstring << std::endl;
}*/
// Done
return 0;
}
//}}}
int legacy_iu_main(int argc, char** argv)
int legacy_iu_main(int argc, char** argv)//{{{
{
// produce and fill a new and a legacy IU with identical contents
......@@ -221,7 +230,7 @@ int legacy_iu_main(int argc, char** argv)
});
std::cout << "--- Create IUs with category jsonTest" << std::endl;
ipaaca::IU::ptr iu1 = ipaaca::IU::create("jsonTest");
ipaaca::IU::ptr iu2 = ipaaca::IU::create("jsonTest", "STR");
ipaaca::IU::ptr iu2 = ipaaca::IU::create("jsonTest", "STR"); // explicity request old payload
std::map<std::string, long> newmap = { {"fifty", 50}, {"ninety-nine", 99} };
std::cout << "--- Set map" << std::endl;
iu1->payload()["map"] = newmap;
......@@ -236,8 +245,9 @@ int legacy_iu_main(int argc, char** argv)
sleep(5);
return 0;
}
//}}}
int iu_main(int argc, char** argv)
int iu_main(int argc, char** argv)//{{{
{
ipaaca::InputBuffer::ptr ib = ipaaca::InputBuffer::create("jsonTestReceiver", "jsonTest");
ib->register_handler([](ipaaca::IUInterface::ptr iu, ipaaca::IUEventType event_type, bool local) {
......@@ -285,13 +295,15 @@ int iu_main(int argc, char** argv)
std::cout << "--- Terminating " << std::endl;
return 0;
}
//}}}
int main(int argc, char** argv)
{
ipaaca::CommandLineParser::ptr parser = ipaaca::CommandLineParser::create();
ipaaca::CommandLineOptions::ptr options = parser->parse(argc, argv);
return json_testbed_main(argc, argv);
return iterators_main(argc, argv);
//return json_testbed_main(argc, argv);
//return legacy_iu_main(argc, argv);
//return fakeiu_main(argc, argv);
//return iu_main(argc, argv);
......
......@@ -728,6 +728,12 @@ IPAACA_EXPORT std::pair<std::string, PayloadEntryProxy> PayloadIterator::operato
if (raw_iterator == _payload->_document_store.end()) throw PayloadIteratorInvalidError();
return std::pair<std::string, PayloadEntryProxy>(raw_iterator->first, PayloadEntryProxy(_payload, raw_iterator->first));
}
IPAACA_EXPORT std::shared_ptr<std::pair<std::string, PayloadEntryProxy> > PayloadIterator::operator->()
{
if (_payload->revision_changed(reference_payload_revision)) throw PayloadIteratorInvalidError();
if (raw_iterator == _payload->_document_store.end()) throw PayloadIteratorInvalidError();
return std::make_shared<std::pair<std::string, PayloadEntryProxy> >(raw_iterator->first, PayloadEntryProxy(_payload, raw_iterator->first));
}
IPAACA_EXPORT bool PayloadIterator::operator==(const PayloadIterator& ref)
{
......
......@@ -74,6 +74,7 @@ IPAACA_EXPORT std::string generate_uuid_string()//{{{
IPAACA_EXPORT std::string __ipaaca_static_option_default_payload_type("JSON");
IPAACA_EXPORT std::string __ipaaca_static_option_default_channel("default");
IPAACA_EXPORT unsigned int __ipaaca_static_option_log_level(IPAACA_LOG_LEVEL_WARNING);
/*
void init_inprocess_too() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment