1 #ifndef _MADARA_KNOWLEDGE_BASE_IMPL_INL_ 2 #define _MADARA_KNOWLEDGE_BASE_IMPL_INL_ 21 : settings_ (), files_ (map_)
70 return map_.
get (t_key, settings);
78 return map_.
get (variable, settings);
214 const unsigned char * value,
size_t size,
217 int result =
map_.
set_file (variable, value, size, settings);
228 const unsigned char * value,
size_t size,
231 int result =
map_.
set_jpeg (variable, value, size, settings);
262 "KnowledgeBaseImpl::activate_transport:" \
263 " transport already activated. If you need" \
264 " a new type, close transport first\n");
333 KnowledgeBaseImpl::print_all_redeployment_results (
334 std::ostream & output)
340 KnowledgeBaseImpl::run_all (
void)
346 KnowledgeBaseImpl::print_my_latencies (
347 std::ostream & output)
353 KnowledgeBaseImpl::print_all_latencies (
354 std::ostream & output)
360 KnowledgeBaseImpl::print_all_summations (
361 std::ostream & output)
367 KnowledgeBaseImpl::start_latency (
void)
370 return transport_->start_latency ();
376 KnowledgeBaseImpl::vote (
void)
379 return transport_->vote ();
394 unsigned int level)
const 410 array_delimiter, record_delimiter, key_val_delimiter);
415 const std::string & statement,
unsigned int level)
const 452 #ifndef _MADARA_NO_KARL_ 480 #ifdef _MADARA_PYTHON_CALLBACKS_ 484 const std::string & name, boost::python::object callable)
516 return wait (compiled, settings);
525 return evaluate (compiled, settings);
528 #endif // _MADARA_NO_KARL_ 597 std::vector <KnowledgeRecord> & target)
614 std::map <std::string, KnowledgeRecord> & target)
624 std::vector <std::string> & next_keys,
625 std::map <std::string, KnowledgeRecord> & result,
629 prefix, delimiter, suffix, next_keys, result, just_keys);
707 bool reset_modifieds)
714 return total_written;
801 #ifndef _MADARA_NO_KARL_ 815 return evaluate (compiled, settings);
818 #endif // _MADARA_NO_KARL_ 823 #endif // _MADARA_KNOWLEDGE_BASE_IMPL_INL_ This class encapsulates an entry in a KnowledgeBase.
int64_t save_context(const std::string &filename) const
Saves the context to a file.
void to_string(std::string &target, const std::string &array_delimiter=",", const std::string &record_delimiter=";\n", const std::string &key_val_delimiter="=") const
Saves all keys and values into a string, using the underlying knowledge::KnowledgeRecord::to_string f...
std::map< std::string, bool > CopySet
Typedef for set of copyable keys.
size_t remove_transport(size_t index)
Removes a transport.
~KnowledgeBaseImpl()
Destructor.
This class provides a distributed knowledge base implementation.
int read_file(const std::string &knowledge_key, const std::string &filename, const EvalSettings &settings=EvalSettings())
Read a file into the knowledge base.
MADARA_Export int read_policy(const std::string &policy_key, const std::string &policy_file)
Read a policy into the knowledge base.
KnowledgeRecord retrieve_index(const std::string &key, size_t index, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
Retrieves a value at a specified index within a knowledge array.
void get_matches(const std::string &prefix, const std::string &suffix, VariableReferences &matches)
Creates an iteration of VariableReferences to all keys matching the prefix and suffix.
void print(unsigned int level) const
Prints all knowledge variables and values in the context.
ssize_t write_file(const std::string &knowledge_key, const std::string &filename)
Write a file from the knowledge base to a specified location.
size_t to_vector(const std::string &subject, unsigned int start, unsigned int end, std::vector< KnowledgeRecord > &target)
Fills a vector with Knowledge Records that begin with a common subject and have a finite range of int...
madara::knowledge::KnowledgeRecord get(const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings()) const
Atomically returns the value of a variable.
knowledge::KnowledgeMap to_map_stripped(const std::string &prefix) const
Creates a map with Knowledge Records that begin with the given prefix.
int64_t save_context(const std::string &filename, const std::string &id="") const
Saves the context to a file.
size_t to_map(const std::string &subject, std::map< std::string, knowledge::KnowledgeRecord > &target)
Fills a variable map with Knowledge Records that match an expression.
int apply_modified(const EvalSettings &settings=EvalSettings())
Applies current time and modified to all global variables and tries to send them. ...
size_t get_num_transports(void)
Gets the number of transports.
int set_file(const std::string &key, const unsigned char *value, size_t size, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings())
Atomically sets the value of a variable to an arbitrary string.
void push_back(T &value)
Pushes a value onto the end of the vector.
madara::knowledge::KnowledgeRecord get(const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
Retrieves a knowledge value.
int set_jpeg(const std::string &key, const unsigned char *value, size_t size, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings())
Atomically sets the value of a variable to a JPEG image.
ACE_SOCK_Dgram unique_bind_
VariableReferences save_modifieds(void) const
Saves the list of modified records to use later for resending.
std::string expand_statement(const std::string &statement) const
Expands a statement using variable expansion.
void copy(const ThreadSafeContext &source, const KnowledgeRequirements &settings)
Copies variables and values from source to this context.
std::string setup_unique_hostport(const std::string &host="")
Binds to an ephemeral port for unique tie breakers in global ordering.
KnowledgeBaseImpl()
Constructor.
void lock(void) const
Locks the mutex on this context.
int set_jpeg(const VariableReference &variable, const unsigned char *value, size_t size, const EvalSettings &settings=EvalSettings())
Atomically sets the value of a variable to a JPEG image.
logger::Logger & get_logger(void) const
Gets the logger used for information printing.
void set_log_level(int level)
Sets the log level.
ssize_t to_file(const std::string &filename) const
writes the value to a file
std::string get_id(void)
Returns the unique host and ephemeral binding for this Knowlede Base.
This class stores variables and their values for use by any entity needing state information in a thr...
int64_t load_context(const std::string &filename, std::string &id, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings(true, true, true, false))
Loads the context from a file.
void lock(void)
Locks the context to prevent updates over the network.
void print(unsigned int level) const
Atomically prints all variables and values in the context.
void wait_for_change(void)
Wait for a change to happen to the context (e.g., from transports)
Holds settings for checkpoints to load or save.
void attach_logger(logger::Logger &logger) const
Attaches a logger to be used for printing.
void copy(const KnowledgeBaseImpl &source, const KnowledgeRequirements &reqs)
Copies variables and values from source to this context.
int64_t save_as_karl(const std::string &filename) const
Saves the context to a file as karl assignments, rather than binary.
void close_transport(void)
Closes the transport mechanism so no dissemination is possible.
Provides knowledge logging services to files and terminals.
VariableReferences save_modifieds(void) const
Saves the list of modified records to use later for resending.
Holds basic transport settings.
int get_log_level(void)
Gets the log level.
Optimized reference to a variable within the knowledge base.
Compiled, optimized KaRL logic.
std::vector< KnowledgeRecord > FunctionArguments
size_t to_vector(const std::string &subject, unsigned int start, unsigned int end, std::vector< KnowledgeRecord > &target)
Fills a vector with Knowledge Records that begin with a common subject and have a finite range of int...
#define madara_logger_log(logger, level,...)
Fast version of the madara::logger::log method.
void define_function(const std::string &name, knowledge::KnowledgeRecord(*func)(FunctionArguments &, Variables &))
Defines a function.
void define_function(const std::string &name, knowledge::KnowledgeRecord(*func)(FunctionArguments &, Variables &), const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
Defines an external function.
size_t attach_transport(madara::transport::Base *transport)
Attaches a transport to the Knowledge Engine.
bool exists(const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings()) const
Atomically checks to see if a variable already exists.
uint32_t type
Type of transport. See madara::transport::Types for options.
std::string debug_modifieds(void) const
Retrieves a stringified list of all modified variables that are ready to send over transport on next ...
A multi-threaded logger for logging to one or more destinations.
std::string originator
the originator id of the checkpoint
void apply_modified(void)
Changes all global variables to modified at current clock.
madara::knowledge::KnowledgeRecord wait(const std::string &expression)
Waits for an expression to be non-zero.
int set_file(const VariableReference &variable, const unsigned char *value, size_t size, const EvalSettings &settings=EvalSettings())
Atomically sets the value of a variable to the contents of a file.
int64_t save_checkpoint(const std::string &filename, const std::string &id="") const
Saves a checkpoint of a list of changes to a file.
void clear_map(void)
Clears the knowledge base.
void get_matches(const std::string &prefix, const std::string &suffix, VariableReferences &matches)
Creates an iteration of VariableReferences to all keys matching the prefix and suffix.
void to_string(std::string &target, const std::string &array_delimiter=",", const std::string &record_delimiter=";\n", const std::string &key_val_delimiter="=") const
Saves all keys and values into a string, using the underlying knowledge::KnowledgeRecord::to_string f...
int64_t save_as_json(const std::string &filename) const
Saves the context to a file as JSON.
Holds settings requirements for knowledge, usually in copying.
std::string write_domain
All class members are accessible to users for easy setup.
void release(void)
Releases a recursive lock on the knowledge base.
void unlock(void) const
Unlocks the mutex on this context.
::std::map< std::string, KnowledgeRecord > KnowledgeMap
size_t size(void) const
returns the current size of the vector
madara::knowledge::KnowledgeRecord retrieve_index(const std::string &key, size_t index, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
Retrieves a value at a specified index within a knowledge array.
bool exists(const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings()) const
Checks if a knowledge location exists in the context.
int get_log_level(void)
Gets the log level.
bool clear(const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
Clears a variable.
void mark_modified(const VariableReference &variable, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings())
Marks the variable reference as updated.
CompiledExpression compile(const std::string &expression)
Compiles a KaRL expression into an expression tree.
size_t to_map(const std::string &subject, std::map< std::string, knowledge::KnowledgeRecord > &target)
Fills a variable map with Knowledge Records that match an expression.
void wait_for_change(bool extra_release=false)
Wait for a change to happen to the context.
size_t erase(size_t index)
Erases an element.
std::vector< VariableReference > VariableReferences
a vector of variable references
void reset_checkpoint(void) const
Resets the local changed map, which tracks checkpointing modifieds.
std::string expand_statement(const std::string &statement) const
Expands a string with variable expansion.
knowledge::KnowledgeMap to_map_stripped(const std::string &prefix) const
Creates a map with Knowledge Records that begin with the given prefix.
KnowledgeRecord * get_record(const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
Retrieves a knowledge record from the key.
Encapsulates settings for an evaluation statement.
void acquire(void)
Acquires the recursive lock on the knowledge base.
madara::transport::TransportSettings & transport_settings(void)
Returns a non-const reference to the Transport Settings.
int64_t load_context(const std::string &filename, bool use_id, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings(true, true, true, false))
Loads the context from a file.
madara::knowledge::KnowledgeRecord evaluate(const std::string &expression)
Evaluates an expression.
Provides functions and classes for the distributed knowledge base.
void activate_transport(void)
Starts the transport mechanism for dissemination if it is closed.
void reset_checkpoint(void) const
Reset all checkpoint variables in the modified lists.
void set_quality(const std::string &key, uint32_t quality, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
Sets the quality of writing to a certain variable from this entity.
int64_t save_as_karl(const std::string &filename) const
Saves the context to a file as karl assignments, rather than binary.
VariableReference get_ref(const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
Atomically returns a reference to the variable.
void add_modifieds(const VariableReferences &modifieds) const
Adds a list of VariableReferences to the current modified list.
bool clear(const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
Clears a variable.
VariableReference get_ref(const std::string &key, const KnowledgeReferenceSettings &settings=KnowledgeReferenceSettings())
Atomically returns a reference to the variable.
Settings for applying knowledge updates.
int read_policy(const std::string &policy_key, const std::string &policy_file)
Read a policy into the knowledge base.
void set_write_quality(const std::string &key, uint32_t quality, const KnowledgeReferenceSettings &settings)
Atomically sets write quality of this process for a variable.
int send_modifieds(const std::string &prefix, const EvalSettings &settings=EvalSettings())
Sends all modified variables through the attached transports.
Copyright (c) 2015 Carnegie Mellon University.
logger::Logger & get_logger(void) const
Gets the logger used for information printing.
std::string debug_modifieds(void) const
Retrieves a stringified list of all modified variables that are ready to send over transport on next ...
Encapsulates settings for a wait statement.
madara::transport::Transports transports_
Settings for applying knowledge updates.
Base class from which all transports must be derived.
void attach_logger(logger::Logger &logger) const
Attaches a logger to be used for printing.
int64_t save_checkpoint(const std::string &filename, bool reset_modifieds=true)
Saves a checkpoint of a list of changes to a file.
ThreadSafeContext & get_context(void)
Returns the ThreadSafeContext associated with this Knowledge Base.
Provides an interface for external functions into the MADARA KaRL variable settings.
transport::QoSTransportSettings settings_
void clear_modifieds(void)
Clear all modifications to the knowledge base.
void unlock(void)
Unlocks the context to allow updates over the network (is only necessary if the context has been expl...
void add_modifieds(const VariableReferences &modifieds) const
Adds a list of VariableReferences to the current modified list.
int read_file(const std::string &key, const std::string &filename, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings())
Atomically reads a file into a variable.
bool delay_launch
delay launching transports
void mark_modified(const VariableReference &variable, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings())
Marks the variable reference as updated for the purposes of sending or checkpointing knowledge (for g...
int64_t save_as_json(const std::string &filename) const
Saves the context to a file as JSON.
void set_log_level(int level)
Sets the log level.
void reset_modified(void)
Reset all variables to be unmodified.