8#ifndef INCLUDED_BALM_METRICS
9#define INCLUDED_BALM_METRICS
545#include <balscm_version.h>
567#define BALM_METRICS_IF_CATEGORY_ENABLED(CATEGORY) \
568 BALM_METRICS_IF_CATEGORY_ENABLED_IMP( \
569 CATEGORY, BALM_METRICS_UNIQUE_NAME(categoryHolder))
577#define BALM_METRICS_UPDATE(CATEGORY, METRIC1, VALUE1) do { \
578 using namespace BloombergLP; \
579 typedef balm::Metrics_Helper Helper; \
580 static balm::CategoryHolder holder = { false, 0, 0 }; \
581 static bsls::AtomicPointer<balm::Collector> collector1; \
582 if (0 == holder.category() && balm::DefaultMetricsManager::instance()) { \
583 static bsls::SpinLock lock = BSLS_SPINLOCK_UNLOCKED; \
584 bsls::SpinLockGuard guard(&lock); \
585 if (0 == holder.category()) { \
586 Helper::logEmptyName(CATEGORY,Helper::e_TYPE_CATEGORY,__FILE__,__LINE__);\
587 Helper::logEmptyName(METRIC1, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
588 collector1 = Helper::getCollector(CATEGORY, METRIC1); \
589 Helper::initializeCategoryHolder(&holder, CATEGORY); \
592 if (holder.enabled()) { \
593 collector1->update(VALUE1); \
597#define BALM_METRICS_UPDATE2(CATEGORY, METRIC1, VALUE1, METRIC2, VALUE2) do { \
598 using namespace BloombergLP; \
599 typedef balm::Metrics_Helper Helper; \
600 static balm::CategoryHolder holder = { false, 0, 0 }; \
601 static bsls::AtomicPointer<balm::Collector> collector1; \
602 static bsls::AtomicPointer<balm::Collector> collector2; \
603 if (0 == holder.category() && balm::DefaultMetricsManager::instance()) { \
604 static bsls::SpinLock lock = BSLS_SPINLOCK_UNLOCKED; \
605 bsls::SpinLockGuard guard(&lock); \
606 if (0 == holder.category()) { \
607 Helper::logEmptyName(CATEGORY,Helper::e_TYPE_CATEGORY,__FILE__,__LINE__);\
608 Helper::logEmptyName(METRIC1, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
609 Helper::logEmptyName(METRIC2, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
610 collector1 = Helper::getCollector(CATEGORY, METRIC1); \
611 collector2 = Helper::getCollector(CATEGORY, METRIC2); \
612 Helper::initializeCategoryHolder(&holder, CATEGORY); \
615 if (holder.enabled()) { \
616 collector1->update(VALUE1); \
617 collector2->update(VALUE2); \
621#define BALM_METRICS_UPDATE3(CATEGORY, \
628 using namespace BloombergLP; \
629 typedef balm::Metrics_Helper Helper; \
630 static balm::CategoryHolder holder = { false, 0, 0 }; \
631 static bsls::AtomicPointer<balm::Collector> collector1; \
632 static bsls::AtomicPointer<balm::Collector> collector2; \
633 static bsls::AtomicPointer<balm::Collector> collector3; \
634 if (0 == holder.category() && balm::DefaultMetricsManager::instance()) { \
635 static bsls::SpinLock lock = BSLS_SPINLOCK_UNLOCKED; \
636 bsls::SpinLockGuard guard(&lock); \
637 if (0 == holder.category()) { \
638 Helper::logEmptyName(CATEGORY,Helper::e_TYPE_CATEGORY,__FILE__,__LINE__);\
639 Helper::logEmptyName(METRIC1, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
640 Helper::logEmptyName(METRIC2, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
641 Helper::logEmptyName(METRIC3, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
642 collector1 = Helper::getCollector(CATEGORY, METRIC1); \
643 collector2 = Helper::getCollector(CATEGORY, METRIC2); \
644 collector3 = Helper::getCollector(CATEGORY, METRIC3); \
645 Helper::initializeCategoryHolder(&holder, CATEGORY); \
648 if (holder.enabled()) { \
649 collector1->update(VALUE1); \
650 collector2->update(VALUE2); \
651 collector3->update(VALUE3); \
655#define BALM_METRICS_UPDATE4(CATEGORY, \
664 using namespace BloombergLP; \
665 typedef balm::Metrics_Helper Helper; \
666 static balm::CategoryHolder holder = { false, 0, 0 }; \
667 static bsls::AtomicPointer<balm::Collector> collector1; \
668 static bsls::AtomicPointer<balm::Collector> collector2; \
669 static bsls::AtomicPointer<balm::Collector> collector3; \
670 static bsls::AtomicPointer<balm::Collector> collector4; \
671 if (0 == holder.category() && balm::DefaultMetricsManager::instance()) { \
672 static bsls::SpinLock lock = BSLS_SPINLOCK_UNLOCKED; \
673 bsls::SpinLockGuard guard(&lock); \
674 if (0 == holder.category()) { \
675 Helper::logEmptyName(CATEGORY,Helper::e_TYPE_CATEGORY,__FILE__,__LINE__);\
676 Helper::logEmptyName(METRIC1, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
677 Helper::logEmptyName(METRIC2, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
678 Helper::logEmptyName(METRIC3, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
679 Helper::logEmptyName(METRIC4, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
680 collector1 = Helper::getCollector(CATEGORY, METRIC1); \
681 collector2 = Helper::getCollector(CATEGORY, METRIC2); \
682 collector3 = Helper::getCollector(CATEGORY, METRIC3); \
683 collector4 = Helper::getCollector(CATEGORY, METRIC4); \
684 Helper::initializeCategoryHolder(&holder, CATEGORY); \
687 if (holder.enabled()) { \
688 collector1->update(VALUE1); \
689 collector2->update(VALUE2); \
690 collector3->update(VALUE3); \
691 collector4->update(VALUE4); \
695#define BALM_METRICS_UPDATE5(CATEGORY, \
706 using namespace BloombergLP; \
707 typedef balm::Metrics_Helper Helper; \
708 static balm::CategoryHolder holder = { false, 0, 0 }; \
709 static bsls::AtomicPointer<balm::Collector> collector1; \
710 static bsls::AtomicPointer<balm::Collector> collector2; \
711 static bsls::AtomicPointer<balm::Collector> collector3; \
712 static bsls::AtomicPointer<balm::Collector> collector4; \
713 static bsls::AtomicPointer<balm::Collector> collector5; \
714 if (0 == holder.category() && balm::DefaultMetricsManager::instance()) { \
715 static bsls::SpinLock lock = BSLS_SPINLOCK_UNLOCKED; \
716 bsls::SpinLockGuard guard(&lock); \
717 if (0 == holder.category()) { \
718 Helper::logEmptyName(CATEGORY,Helper::e_TYPE_CATEGORY,__FILE__,__LINE__);\
719 Helper::logEmptyName(METRIC1, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
720 Helper::logEmptyName(METRIC2, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
721 Helper::logEmptyName(METRIC3, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
722 Helper::logEmptyName(METRIC4, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
723 Helper::logEmptyName(METRIC5, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
724 collector1 = Helper::getCollector(CATEGORY, METRIC1); \
725 collector2 = Helper::getCollector(CATEGORY, METRIC2); \
726 collector3 = Helper::getCollector(CATEGORY, METRIC3); \
727 collector4 = Helper::getCollector(CATEGORY, METRIC4); \
728 collector5 = Helper::getCollector(CATEGORY, METRIC5); \
729 Helper::initializeCategoryHolder(&holder, CATEGORY); \
732 if (holder.enabled()) { \
733 collector1->update(VALUE1); \
734 collector2->update(VALUE2); \
735 collector3->update(VALUE3); \
736 collector4->update(VALUE4); \
737 collector5->update(VALUE5); \
741#define BALM_METRICS_UPDATE6(CATEGORY, \
754 using namespace BloombergLP; \
755 typedef balm::Metrics_Helper Helper; \
756 static balm::CategoryHolder holder = { false, 0, 0 }; \
757 static bsls::AtomicPointer<balm::Collector> collector1; \
758 static bsls::AtomicPointer<balm::Collector> collector2; \
759 static bsls::AtomicPointer<balm::Collector> collector3; \
760 static bsls::AtomicPointer<balm::Collector> collector4; \
761 static bsls::AtomicPointer<balm::Collector> collector5; \
762 static bsls::AtomicPointer<balm::Collector> collector6; \
763 if (0 == holder.category() && balm::DefaultMetricsManager::instance()) { \
764 static bsls::SpinLock lock = BSLS_SPINLOCK_UNLOCKED; \
765 bsls::SpinLockGuard guard(&lock); \
766 if (0 == holder.category()) { \
767 Helper::logEmptyName(CATEGORY, Helper::e_TYPE_CATEGORY, \
768 __FILE__, __LINE__); \
769 Helper::logEmptyName(METRIC1, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
770 Helper::logEmptyName(METRIC2, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
771 Helper::logEmptyName(METRIC3, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
772 Helper::logEmptyName(METRIC4, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
773 Helper::logEmptyName(METRIC5, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
774 Helper::logEmptyName(METRIC6, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
775 collector1 = Helper::getCollector(CATEGORY, METRIC1); \
776 collector2 = Helper::getCollector(CATEGORY, METRIC2); \
777 collector3 = Helper::getCollector(CATEGORY, METRIC3); \
778 collector4 = Helper::getCollector(CATEGORY, METRIC4); \
779 collector5 = Helper::getCollector(CATEGORY, METRIC5); \
780 collector6 = Helper::getCollector(CATEGORY, METRIC6); \
781 Helper::initializeCategoryHolder(&holder, CATEGORY); \
784 if (holder.enabled()) { \
785 collector1->update(VALUE1); \
786 collector2->update(VALUE2); \
787 collector3->update(VALUE3); \
788 collector4->update(VALUE4); \
789 collector5->update(VALUE5); \
790 collector6->update(VALUE6); \
794#define BALM_METRICS_TYPED_UPDATE(CATEGORY, METRIC, VALUE, PREFERRED_TYPE) \
796 using namespace BloombergLP; \
797 typedef balm::Metrics_Helper Helper; \
798 static balm::CategoryHolder holder = { false, 0, 0 }; \
799 static bsls::AtomicPointer<balm::Collector> collector1; \
800 if (0 == holder.category() && balm::DefaultMetricsManager::instance()) { \
801 static bsls::SpinLock lock = BSLS_SPINLOCK_UNLOCKED; \
802 bsls::SpinLockGuard guard(&lock); \
803 if (0 == holder.category()) { \
804 Helper::logEmptyName(CATEGORY,Helper::e_TYPE_CATEGORY,__FILE__,__LINE__);\
805 Helper::logEmptyName(METRIC, Helper::e_TYPE_METRIC, __FILE__, __LINE__); \
806 collector1 = Helper::getCollector(CATEGORY, METRIC); \
807 Helper::setPublicationType(collector1->metricId(), PREFERRED_TYPE); \
808 Helper::initializeCategoryHolder(&holder, CATEGORY); \
811 if (holder.enabled()) { \
812 collector1->update(VALUE); \
816#define BALM_METRICS_DYNAMIC_UPDATE(CATEGORY, METRIC, VALUE) do { \
817 using namespace BloombergLP; \
818 if (balm::DefaultMetricsManager::instance()) { \
819 balm::CollectorRepository& repository = \
820 balm::DefaultMetricsManager::instance()->collectorRepository(); \
821 balm::Collector *collector = repository.getDefaultCollector( \
822 (CATEGORY), (METRIC));\
823 if (collector->metricId().category()->enabled()) { \
824 collector->update((VALUE)); \
833#define BALM_METRICS_INT_UPDATE(CATEGORY, METRIC1, VALUE1) do { \
834 using namespace BloombergLP; \
835 typedef balm::Metrics_Helper Helper; \
836 static balm::CategoryHolder holder = { false, 0, 0 }; \
837 static bsls::AtomicPointer<balm::IntegerCollector> collector1; \
838 if (0 == holder.category() && balm::DefaultMetricsManager::instance()) { \
839 static bsls::SpinLock lock = BSLS_SPINLOCK_UNLOCKED; \
840 bsls::SpinLockGuard guard(&lock); \
841 if (0 == holder.category()) { \
842 Helper::logEmptyName(CATEGORY,Helper::e_TYPE_CATEGORY,__FILE__,__LINE__);\
843 Helper::logEmptyName(METRIC1, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
844 collector1 = Helper::getIntegerCollector(CATEGORY, METRIC1); \
845 Helper::initializeCategoryHolder(&holder, CATEGORY); \
848 if (holder.enabled()) { \
849 collector1->update(VALUE1); \
853#define BALM_METRICS_INT_UPDATE2(CATEGORY, \
858 using namespace BloombergLP; \
859 typedef balm::Metrics_Helper Helper; \
860 static balm::CategoryHolder holder = { false, 0, 0 }; \
861 static bsls::AtomicPointer<balm::IntegerCollector> collector1; \
862 static bsls::AtomicPointer<balm::IntegerCollector> collector2; \
863 if (0 == holder.category() && balm::DefaultMetricsManager::instance()) { \
864 static bsls::SpinLock lock = BSLS_SPINLOCK_UNLOCKED; \
865 bsls::SpinLockGuard guard(&lock); \
866 if (0 == holder.category()) { \
867 Helper::logEmptyName(CATEGORY,Helper::e_TYPE_CATEGORY,__FILE__,__LINE__);\
868 Helper::logEmptyName(METRIC1, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
869 Helper::logEmptyName(METRIC2, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
870 collector1 = Helper::getIntegerCollector(CATEGORY, METRIC1); \
871 collector2 = Helper::getIntegerCollector(CATEGORY, METRIC2); \
872 Helper::initializeCategoryHolder(&holder, CATEGORY); \
875 if (holder.enabled()) { \
876 collector1->update(VALUE1); \
877 collector2->update(VALUE2); \
881#define BALM_METRICS_INT_UPDATE3(CATEGORY, \
888 using namespace BloombergLP; \
889 typedef balm::Metrics_Helper Helper; \
890 static balm::CategoryHolder holder = { false, 0, 0 }; \
891 static bsls::AtomicPointer<balm::IntegerCollector> collector1; \
892 static bsls::AtomicPointer<balm::IntegerCollector> collector2; \
893 static bsls::AtomicPointer<balm::IntegerCollector> collector3; \
894 if (0 == holder.category() && balm::DefaultMetricsManager::instance()) { \
895 static bsls::SpinLock lock = BSLS_SPINLOCK_UNLOCKED; \
896 bsls::SpinLockGuard guard(&lock); \
897 if (0 == holder.category()) { \
898 Helper::logEmptyName(CATEGORY,Helper::e_TYPE_CATEGORY,__FILE__,__LINE__);\
899 Helper::logEmptyName(METRIC1, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
900 Helper::logEmptyName(METRIC2, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
901 Helper::logEmptyName(METRIC3, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
902 collector1 = Helper::getIntegerCollector(CATEGORY, METRIC1); \
903 collector2 = Helper::getIntegerCollector(CATEGORY, METRIC2); \
904 collector3 = Helper::getIntegerCollector(CATEGORY, METRIC3); \
905 Helper::initializeCategoryHolder(&holder, CATEGORY); \
908 if (holder.enabled()) { \
909 collector1->update(VALUE1); \
910 collector2->update(VALUE2); \
911 collector3->update(VALUE3); \
915#define BALM_METRICS_INT_UPDATE4(CATEGORY, \
924 using namespace BloombergLP; \
925 typedef balm::Metrics_Helper Helper; \
926 static balm::CategoryHolder holder = { false, 0, 0 }; \
927 static bsls::AtomicPointer<balm::IntegerCollector> collector1; \
928 static bsls::AtomicPointer<balm::IntegerCollector> collector2; \
929 static bsls::AtomicPointer<balm::IntegerCollector> collector3; \
930 static bsls::AtomicPointer<balm::IntegerCollector> collector4; \
931 if (0 == holder.category() && balm::DefaultMetricsManager::instance()) { \
932 static bsls::SpinLock lock = BSLS_SPINLOCK_UNLOCKED; \
933 bsls::SpinLockGuard guard(&lock); \
934 if (0 == holder.category()) { \
935 Helper::logEmptyName(CATEGORY,Helper::e_TYPE_CATEGORY,__FILE__,__LINE__);\
936 Helper::logEmptyName(METRIC1, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
937 Helper::logEmptyName(METRIC2, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
938 Helper::logEmptyName(METRIC3, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
939 Helper::logEmptyName(METRIC4, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
940 collector1 = Helper::getIntegerCollector(CATEGORY, METRIC1); \
941 collector2 = Helper::getIntegerCollector(CATEGORY, METRIC2); \
942 collector3 = Helper::getIntegerCollector(CATEGORY, METRIC3); \
943 collector4 = Helper::getIntegerCollector(CATEGORY, METRIC4); \
944 Helper::initializeCategoryHolder(&holder, CATEGORY); \
947 if (holder.enabled()) { \
948 collector1->update(VALUE1); \
949 collector2->update(VALUE2); \
950 collector3->update(VALUE3); \
951 collector4->update(VALUE4); \
955#define BALM_METRICS_INT_UPDATE5(CATEGORY, \
966 using namespace BloombergLP; \
967 typedef balm::Metrics_Helper Helper; \
968 static balm::CategoryHolder holder = { false, 0, 0 }; \
969 static bsls::AtomicPointer<balm::IntegerCollector> collector1; \
970 static bsls::AtomicPointer<balm::IntegerCollector> collector2; \
971 static bsls::AtomicPointer<balm::IntegerCollector> collector3; \
972 static bsls::AtomicPointer<balm::IntegerCollector> collector4; \
973 static bsls::AtomicPointer<balm::IntegerCollector> collector5; \
974 if (0 == holder.category() && balm::DefaultMetricsManager::instance()) { \
975 static bsls::SpinLock lock = BSLS_SPINLOCK_UNLOCKED; \
976 bsls::SpinLockGuard guard(&lock); \
977 if (0 == holder.category()) { \
978 Helper::logEmptyName(CATEGORY,Helper::e_TYPE_CATEGORY,__FILE__,__LINE__);\
979 Helper::logEmptyName(METRIC1, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
980 Helper::logEmptyName(METRIC2, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
981 Helper::logEmptyName(METRIC3, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
982 Helper::logEmptyName(METRIC4, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
983 Helper::logEmptyName(METRIC5, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
984 collector1 = Helper::getIntegerCollector(CATEGORY, METRIC1); \
985 collector2 = Helper::getIntegerCollector(CATEGORY, METRIC2); \
986 collector3 = Helper::getIntegerCollector(CATEGORY, METRIC3); \
987 collector4 = Helper::getIntegerCollector(CATEGORY, METRIC4); \
988 collector5 = Helper::getIntegerCollector(CATEGORY, METRIC5); \
989 Helper::initializeCategoryHolder(&holder, CATEGORY); \
992 if (holder.enabled()) { \
993 collector1->update(VALUE1); \
994 collector2->update(VALUE2); \
995 collector3->update(VALUE3); \
996 collector4->update(VALUE4); \
997 collector5->update(VALUE5); \
1001#define BALM_METRICS_INT_UPDATE6(CATEGORY, \
1014 using namespace BloombergLP; \
1015 typedef balm::Metrics_Helper Helper; \
1016 static balm::CategoryHolder holder = { false, 0, 0 }; \
1017 static bsls::AtomicPointer<balm::IntegerCollector> collector1; \
1018 static bsls::AtomicPointer<balm::IntegerCollector> collector2; \
1019 static bsls::AtomicPointer<balm::IntegerCollector> collector3; \
1020 static bsls::AtomicPointer<balm::IntegerCollector> collector4; \
1021 static bsls::AtomicPointer<balm::IntegerCollector> collector5; \
1022 static bsls::AtomicPointer<balm::IntegerCollector> collector6; \
1023 if (0 == holder.category() && balm::DefaultMetricsManager::instance()) { \
1024 static bsls::SpinLock lock = BSLS_SPINLOCK_UNLOCKED; \
1025 bsls::SpinLockGuard guard(&lock); \
1026 if (0 == holder.category()) { \
1027 Helper::logEmptyName(CATEGORY,Helper::e_TYPE_CATEGORY,__FILE__,__LINE__);\
1028 Helper::logEmptyName(METRIC1, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
1029 Helper::logEmptyName(METRIC2, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
1030 Helper::logEmptyName(METRIC3, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
1031 Helper::logEmptyName(METRIC4, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
1032 Helper::logEmptyName(METRIC5, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
1033 Helper::logEmptyName(METRIC6, Helper::e_TYPE_METRIC, __FILE__, __LINE__);\
1034 collector1 = Helper::getIntegerCollector(CATEGORY, METRIC1); \
1035 collector2 = Helper::getIntegerCollector(CATEGORY, METRIC2); \
1036 collector3 = Helper::getIntegerCollector(CATEGORY, METRIC3); \
1037 collector4 = Helper::getIntegerCollector(CATEGORY, METRIC4); \
1038 collector5 = Helper::getIntegerCollector(CATEGORY, METRIC5); \
1039 collector6 = Helper::getIntegerCollector(CATEGORY, METRIC6); \
1040 Helper::initializeCategoryHolder(&holder, CATEGORY); \
1043 if (holder.enabled()) { \
1044 collector1->update(VALUE1); \
1045 collector2->update(VALUE2); \
1046 collector3->update(VALUE3); \
1047 collector4->update(VALUE4); \
1048 collector5->update(VALUE5); \
1049 collector6->update(VALUE6); \
1053#define BALM_METRICS_TYPED_INT_UPDATE(CATEGORY, \
1058 using namespace BloombergLP; \
1059 typedef balm::Metrics_Helper Helper; \
1060 static balm::CategoryHolder holder = { false, 0, 0 }; \
1061 static bsls::AtomicPointer<balm::IntegerCollector> collector1; \
1062 if (0 == holder.category() && balm::DefaultMetricsManager::instance()) { \
1063 static bsls::SpinLock lock = BSLS_SPINLOCK_UNLOCKED; \
1064 bsls::SpinLockGuard guard(&lock); \
1065 if (0 == holder.category()) { \
1066 Helper::logEmptyName(CATEGORY,Helper::e_TYPE_CATEGORY,__FILE__,__LINE__);\
1067 Helper::logEmptyName(METRIC, Helper::e_TYPE_METRIC, __FILE__, __LINE__); \
1068 collector1 = Helper::getIntegerCollector(CATEGORY, METRIC); \
1069 Helper::setPublicationType(collector1->metricId(), PREFERRED_TYPE); \
1070 Helper::initializeCategoryHolder(&holder, CATEGORY); \
1073 if (holder.enabled()) { \
1074 collector1->update(VALUE); \
1078#define BALM_METRICS_DYNAMIC_INT_UPDATE(CATEGORY, METRIC, VALUE) do { \
1079 using namespace BloombergLP; \
1080 if (balm::DefaultMetricsManager::instance()) { \
1081 balm::CollectorRepository& repository = \
1082 balm::DefaultMetricsManager::instance()->collectorRepository(); \
1083 balm::IntegerCollector *collector = \
1084 repository.getDefaultIntegerCollector((CATEGORY), (METRIC)); \
1085 if (collector->metricId().category()->enabled()) { \
1086 collector->update((VALUE)); \
1091#define BALM_METRICS_INCREMENT(CATEGORY, METRIC) \
1092 BALM_METRICS_INT_UPDATE(CATEGORY, METRIC, 1)
1094#define BALM_METRICS_TYPED_INCREMENT(CATEGORY, METRIC, PREFERRED_TYPE) \
1095 BALM_METRICS_TYPED_INT_UPDATE(CATEGORY, METRIC, 1, PREFERRED_TYPE)
1097#define BALM_METRICS_DYNAMIC_INCREMENT(CATEGORY, METRIC) \
1098 BALM_METRICS_DYNAMIC_INT_UPDATE(CATEGORY, METRIC, 1)
1104#define BALM_METRICS_TIME_BLOCK(CATEGORY, METRIC, TIME_UNITS) \
1105 BALM_METRICS_TIME_BLOCK_IMP((CATEGORY), \
1108 BALM_METRICS_UNIQUE_NAME(_bAlM_CoLlEcToR))
1110#define BALM_METRICS_DYNAMIC_TIME_BLOCK(CATEGORY, METRIC, TIME_UNITS) \
1111 BALM_METRICS_DYNAMIC_TIME_BLOCK_IMP( \
1115 BALM_METRICS_UNIQUE_NAME(_bAlM_CoLlEcToR))
1117#define BALM_METRICS_TIME_BLOCK_SECONDS(CATEGORY, METRIC) \
1118 BALM_METRICS_TIME_BLOCK((CATEGORY), \
1120 BloombergLP::balm::StopwatchScopedGuard::k_SECONDS);
1122#define BALM_METRICS_TIME_BLOCK_MILLISECONDS(CATEGORY, METRIC) \
1123 BALM_METRICS_TIME_BLOCK( \
1126 BloombergLP::balm::StopwatchScopedGuard::k_MILLISECONDS);
1128#define BALM_METRICS_TIME_BLOCK_MICROSECONDS(CATEGORY, METRIC) \
1129 BALM_METRICS_TIME_BLOCK( \
1132 BloombergLP::balm::StopwatchScopedGuard::k_MICROSECONDS);
1134#define BALM_METRICS_TIME_BLOCK_NANOSECONDS(CATEGORY, METRIC) \
1135 BALM_METRICS_TIME_BLOCK( \
1138 BloombergLP::balm::StopwatchScopedGuard::k_NANOSECONDS);
1140#define BALM_METRICS_DYNAMIC_TIME_BLOCK_SECONDS(CATEGORY, METRIC) \
1141 BALM_METRICS_DYNAMIC_TIME_BLOCK( \
1144 BloombergLP::balm::StopwatchScopedGuard::k_SECONDS);
1146#define BALM_METRICS_DYNAMIC_TIME_BLOCK_MILLISECONDS(CATEGORY, METRIC) \
1147 BALM_METRICS_DYNAMIC_TIME_BLOCK( \
1150 BloombergLP::balm::StopwatchScopedGuard::k_MILLISECONDS);
1152#define BALM_METRICS_DYNAMIC_TIME_BLOCK_MICROSECONDS(CATEGORY, METRIC) \
1153 BALM_METRICS_DYNAMIC_TIME_BLOCK( \
1156 BloombergLP::balm::StopwatchScopedGuard::k_MICROSECONDS);
1158#define BALM_METRICS_DYNAMIC_TIME_BLOCK_NANOSECONDS(CATEGORY, METRIC) \
1159 BALM_METRICS_DYNAMIC_TIME_BLOCK( \
1162 BloombergLP::balm::StopwatchScopedGuard::k_NANOSECONDS);
1168#define BALM_METRICS_IF_CATEGORY_ENABLED_IMP(CATEGORY, HOLDER_NAME) \
1169 static BloombergLP::balm::CategoryHolder HOLDER_NAME = { false, 0, 0 }; \
1170 if (BSLS_PERFORMANCEHINT_PREDICT_UNLIKELY(!HOLDER_NAME.category()) \
1171 && BSLS_PERFORMANCEHINT_PREDICT_UNLIKELY( \
1172 BloombergLP::balm::DefaultMetricsManager::instance() != 0)) {\
1173 BloombergLP::balm::Metrics_Helper::initializeCategoryHolder( \
1174 &HOLDER_NAME, CATEGORY); \
1176 if (HOLDER_NAME.enabled())
1185#define BALM_METRICS_TIME_BLOCK_IMP(CATEGORY, \
1189 static BloombergLP::balm::Collector *VARIABLE_NAME = 0; \
1190 if (BloombergLP::balm::DefaultMetricsManager::instance()) { \
1191 using namespace BloombergLP; \
1192 typedef balm::Metrics_Helper Helper; \
1193 static balm::CategoryHolder holder = { false, 0, 0 }; \
1194 if (0 == holder.category()) { \
1195 balm::CollectorRepository& repository = \
1196 balm::DefaultMetricsManager::instance()->collectorRepository(); \
1197 VARIABLE_NAME = repository.getDefaultCollector((CATEGORY), \
1199 Helper::initializeCategoryHolder(&holder, CATEGORY); \
1203 VARIABLE_NAME = 0; \
1205 BloombergLP::balm::StopwatchScopedGuard \
1206 BALM_METRICS_UNIQUE_NAME(__bAlM_gUaRd)(VARIABLE_NAME, TIME_UNITS);
1215#define BALM_METRICS_DYNAMIC_TIME_BLOCK_IMP(CATEGORY, \
1219 BloombergLP::balm::Collector *VARIABLE_NAME = 0; \
1220 if (BloombergLP::balm::DefaultMetricsManager::instance()) { \
1221 using namespace BloombergLP; \
1222 balm::CollectorRepository& repository = \
1223 balm::DefaultMetricsManager::instance()->collectorRepository(); \
1224 VARIABLE_NAME = repository.getDefaultCollector((CATEGORY), \
1227 BloombergLP::balm::StopwatchScopedGuard \
1228 BALM_METRICS_UNIQUE_NAME(__bAlM_gUaRd)(VARIABLE_NAME, TIME_UNITS);
1234#if defined(BSLS_PLATFORM_CMP_MSVC)
1237# define BALM_METRICS_UNIQNUM __COUNTER__
1239# define BALM_METRICS_UNIQNUM __LINE__
1248#define BALM_METRICS_CAT(X, Y) BALM_METRICS_CAT_IMP(X, Y)
1249#define BALM_METRICS_CAT_IMP(X, Y) X##Y
1257#define BALM_METRICS_UNIQUE_NAME(X) \
1258 BALM_METRICS_CAT(X, BALM_METRICS_UNIQNUM)
1283#ifndef BDE_OMIT_INTERNAL_DEPRECATED
1297 const char *category);
1305 const char *metric);
1313 const char *metric);
1345 const char *category)
1382#if !defined(BSL_DOUBLE_UNDERSCORE_XLAT) || 1 == BSL_DOUBLE_UNDERSCORE_XLAT
1383#define BALM_METRICS__UNIQUE_NAME(X) BALM_METRICS_UNIQUE_NAME(X)
Definition balm_category.h:263
IntegerCollector * getDefaultIntegerCollector(const char *category, const char *metricName)
Definition balm_collectorrepository.h:457
Collector * getDefaultCollector(const char *category, const char *metricName)
Definition balm_collectorrepository.h:450
Definition balm_collector.h:152
Definition balm_integercollector.h:151
Definition balm_metricid.h:162
Definition balm_metricregistry.h:180
const Category * getCategory(const char *category)
void setPreferredPublicationType(const MetricId &metric, PublicationType::Value type)
void registerCategoryHolder(const Category *category, CategoryHolder *holder)
Definition balm_metricsmanager.h:490
CollectorRepository & collectorRepository()
Definition balm_metricsmanager.h:1032
MetricRegistry & metricRegistry()
Definition balm_metricsmanager.h:1038
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition balm_bdlmmetricsadapter.h:142
static MetricsManager * instance()
Definition balm_defaultmetricsmanager.h:310
Definition balm_metrics.h:1274
static void logEmptyName(const char *name, NameType type, const char *file, int line)
static void setPublicationType(const MetricId &id, PublicationType::Value type)
Definition balm_metrics.h:1371
static Collector * getCollector(const char *category, const char *metric)
Definition balm_metrics.h:1353
NameType
Definition balm_metrics.h:1277
@ e_TYPE_CATEGORY
Definition balm_metrics.h:1281
@ e_TYPE_METRIC
Definition balm_metrics.h:1282
@ TYPE_CATEGORY
Definition balm_metrics.h:1284
@ TYPE_METRIC
Definition balm_metrics.h:1285
static void initializeCategoryHolder(CategoryHolder *holder, const char *category)
Definition balm_metrics.h:1344
static IntegerCollector * getIntegerCollector(const char *category, const char *metric)
Definition balm_metrics.h:1362
Value
Definition balm_publicationtype.h:83