5 #include "util/stats/varz_node.h" 6 #include "strings/strcat.h" 11 using absl::StrAppend;
13 folly::RWSpinLock VarzListNode::g_varz_lock;
15 VarzListNode::VarzListNode(
const char* name) : name_(name), prev_(nullptr) {
16 folly::RWSpinLock::WriteHolder guard(g_varz_lock);
18 next_ = global_list();
25 VarzListNode::~VarzListNode() {
26 folly::RWSpinLock::WriteHolder guard(g_varz_lock);
27 if (global_list() ==
this) {
28 global_list() = next_;
39 string VarzListNode::Format(
const AnyValue& av) {
43 case VarzValue::STRING:
44 StrAppend(&result,
"\"", av.str,
"\"");
48 StrAppend(&result, av.num);
50 case VarzValue::DOUBLE:
51 StrAppend(&result, av.dbl);
55 for (
const auto& k_v : av.key_value_array) {
56 StrAppend(&result,
"\"", k_v.first,
"\": ", Format(k_v.second),
",");
65 VarzListNode*& VarzListNode::global_list() {
66 static VarzListNode* varz_global_list =
nullptr;
67 return varz_global_list;
70 void VarzListNode::Iterate(std::function<
void(
const char*, AnyValue&&)> f) {
71 folly::RWSpinLock::ReadHolder guard(g_varz_lock);
73 for (VarzListNode* node = global_list(); node !=
nullptr; node = node->next_) {
74 if (node->name_ !=
nullptr) {
75 f(node->name_, node->GetData());