5 #ifndef BASE_FEATURE_FLAGS_H_
6 #define BASE_FEATURE_FLAGS_H_
10 #include <boost/function.hpp>
11 #include <boost/scoped_ptr.hpp>
14 #include <base/sandesh/process_info_constants.h>
15 #include <base/sandesh/process_info_types.h>
17 #include "rapidjson/document.h"
18 #include "rapidjson/stringbuffer.h"
19 #include "rapidjson/writer.h"
21 #include <tbb/mutex.h>
117 return "Experimental";
126 return "In Progress";
129 return "Pre Retired";
139 if (
type ==
"Experimental") {
142 if (
type ==
"Alpha") {
145 if (
type ==
"Beta") {
148 if (
type ==
"In-Progress") {
151 if (
type ==
"Pre-Retired") {
154 if (
type ==
"Unknown") {
162 FlagContext(
const std::string& description,
const std::string &val)
174 return !(*
this == rhs);
229 return !(*
this == rhs);
341 static void Initialize(
const string &build_info);
347 void Set(
const std::string &name,
const std::string &version_info,
353 void Unset(
const std::string &name);
459 void Set(
const std::string &name,
const std::string &
version,
bool enabled,
465 void Unset(
const std::string &name);
472 bool IsFlagEnabled(
const std::string &name,
bool default_state,
544 typedef std::map<std::string, FlagConfig>
FlagMap;
FlagManager * flag_manager_
DISALLOW_COPY_AND_ASSIGN(FlagConfigManager)
FlagConfigManager(FlagManager *manager)
void Unset(const std::string &name)
static FlagConfigManager * GetInstance()
static std::string version_
static boost::scoped_ptr< FlagConfigManager > instance_
static void Initialize(const string &build_info)
void Set(const std::string &name, const std::string &version_info, bool enabled, FlagState::Type state, ContextVec &context_infos)
void set_version(const std::string &val)
ContextVec context_infos_
void set_name(const std::string &val)
void set_enabled(bool val)
const FlagState::Type & state() const
void set_state(const FlagState::Type &val)
const std::string & name() const
bool operator==(const FlagConfig &rhs) const
const std::string & version() const
const ContextVec & context_infos() const
void set_context_infos(const ContextVec &val)
FlagConfig(const std::string &name, const std::string &version, bool enabled, FlagState::Type state, ContextVec &context_infos)
bool operator!=(const FlagConfig &rhs) const
bool IsRegistered(const Flag *flag) const
size_t GetIntMapCount() const
std::map< std::string, FlagConfig >::iterator flag_map_itr
std::multimap< std::string, Flag * >::iterator int_map_itr
size_t GetFlagMapCount() const
void Register(Flag *flag)
void Set(const std::string &name, const std::string &version, bool enabled, FlagState::Type state, ContextVec &context_infos)
static FlagManager * GetInstance()
FlagConfigVec GetFlagInfosUnlocked() const
std::multimap< std::string, Flag * >::const_iterator int_map_const_itr
void Unregister(const Flag *flag)
bool IsFlagEnabled(const std::string &name, bool default_state, const ContextVec &c_vec) const
void Unset(const std::string &name)
static boost::scoped_ptr< FlagManager > instance_
DISALLOW_COPY_AND_ASSIGN(FlagManager)
FlagConfigVec GetFlagInfos() const
std::map< std::string, FlagConfig >::const_iterator flag_map_citr
std::multimap< std::string, Flag * > InterestMap
std::map< std::string, FlagConfig > FlagMap
FlagConfigVec GetFlagInfos(bool lock) const
boost::function< void(void)> FlagUveCb
static void CreateInstance(FlagManager *mgr, FlagUveCb send_uve_cb)
static boost::scoped_ptr< FlagUveManager > instance_
DISALLOW_COPY_AND_ASSIGN(FlagUveManager)
FlagManager * flag_manager_
FlagUveManager(FlagManager *manager, FlagUveCb send_uve_cb)
static FlagUveManager * GetInstance()
const ContextVec & context_infos() const
bool operator!=(const Flag &rhs) const
void set_context_infos(const ContextVec &val)
bool operator==(const Flag &rhs) const
void set_name(const std::string &val)
DISALLOW_COPY_AND_ASSIGN(Flag)
const std::string & name() const
boost::function< void()> FlagStateCb
void set_description(const std::string &val)
ContextVec context_infos_
void set_enabled(const bool val)
const bool enabled() const
const std::string & description() const
FlagStateCb flag_state_cb_
Flag(FlagManager *manager, const std::string &name, const std::string &description, bool enabled, ContextVec &context_infos)
std::vector< FlagContext >::size_type context_size
std::vector< Flag > FlagVec
std::vector< FlagConfig > FlagConfigVec
std::vector< FlagContext >::const_iterator context_iterator
std::vector< FlagContext > ContextVec
std::vector< FlagConfig >::const_iterator flag_cfg_itr
bool operator!=(const FlagContext &rhs) const
bool operator==(const FlagContext &rhs) const
FlagContext(const std::string &description, const std::string &val)
static Type FromString(const std::string &type)
static std::string ToString(Type state)