summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Metrics/Metrics_LocalCache_T.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Metrics/Metrics_LocalCache_T.h')
-rw-r--r--TAO/orbsvcs/orbsvcs/Metrics/Metrics_LocalCache_T.h329
1 files changed, 329 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Metrics/Metrics_LocalCache_T.h b/TAO/orbsvcs/orbsvcs/Metrics/Metrics_LocalCache_T.h
new file mode 100644
index 00000000000..97d51de3248
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/Metrics/Metrics_LocalCache_T.h
@@ -0,0 +1,329 @@
+// -*- C++ -*-
+
+// $Id$
+
+#ifndef METRICS_LOCAL_CACHE_T_H
+#define METRICS_LOCAL_CACHE_T_H
+
+#include "ace/OS.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "ace/Hash_Map_Manager.h"
+#include "ace/Metrics_Cache.h"
+#include "ace/Metrics_Cache_T.h"
+
+#include "orbsvcs/Time_Utilities.h"
+#include "orbsvcs/Scheduler_Factory.h"
+#include "orbsvcs/MetricsC.h"
+#include "orbsvcs/Metrics/Metrics_Utils.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+#if defined (ACE_HAS_METRICS_BASE_POINTERS)
+ typedef ACE_Based_Pointer<char> ACE_METRICS_STRING_TYPE;
+ typedef ACE_Based_Pointer<Metrics::TimeprobeParameter_Set> ACE_METRICS_PARAMETER_SET_TYPE;
+#else
+ typedef char * ACE_METRICS_STRING_TYPE;
+ typedef Metrics::TimeprobeParameter_Set * ACE_METRICS_PARAMETER_SET_TYPE;
+#endif
+
+//DCL:Commented out to remove Linux compile error
+//#include "orbsvcs/Metrics/Metrics_LocalCache.h"
+
+template <typename ACE_LOCK, typename ALLOCATOR>
+class TAO_Metrics_LocalTimeprobe
+ : public ACE_Metrics_Timeprobe<ACE_LOCK, ALLOCATOR>
+{
+ // = TITLE
+ // Defines a class that implements a local timeprobe.
+ //
+ // = DESCRIPTION
+ // This class makes use of the <ACE_Metrics_Timeprobe> class to
+ // implement a timeprobe for use in a local metrics cache.
+public:
+
+ typedef TAO_Metrics_LocalTimeprobe<ACE_LOCK, ALLOCATOR> TAO_METRICS_TIMEPROBE_TYPE;
+
+ TAO_Metrics_LocalTimeprobe (u_int id = 0,
+ const char *name = 0,
+ u_long size
+ = METRICS_DEFAULT_TIMEPROBE_TABLE_SIZE,
+ ALLOCATOR * alloc = (ALLOCATOR*)ALLOCATOR::instance());
+ // Default constructor.
+
+ void report_intervals (int report_full_interval_times = 0);
+ // Reports valid intervals between start and stop events.
+
+ void install_data_set (Metrics::TimeprobeParameter_Set *data_set = 0);
+ // Installs or unistalls the data set into which probe will report.
+
+ void mark_as_operation (void) {this->is_operation_ = 1;}
+ // Marks the probe as being for an operation.
+
+ void set_hrt (int hrt) {this->is_hrt_ = hrt;}
+ // Marks the probe as being SRT/HRT.
+
+ ACE_Time_Value last_recorded_timestamp (void);
+ // Returns the last timestamp that was recorded in the probe.
+ // If no stamps are recorded, returns zero.
+
+ void flush_TAO_Metrics_LocalTimeprobe ();
+ // Flush the TAO metrics local timeprobe into shared memory.
+
+protected:
+
+ int is_operation_;
+ // Indicates whether or not the probe is for an operation.
+
+ int is_hrt_;
+ // Indicates whether or not the probe is Hard Real-Time.
+
+ ACE_METRICS_PARAMETER_SET_TYPE data_set_;
+ // Points to a probe metrics data set.
+};
+
+template <class ACE_LOCK, class ALLOCATOR>
+class TAO_Metrics_LocalCache
+ : public ACE_Metrics_Cache<ACE_LOCK, ALLOCATOR>
+{
+ // = TITLE
+ // Defines a class that implements a local metrics cache.
+ //
+ // = DESCRIPTION
+ // This class makes use of the <ACE_Metrics_Cache> class to
+ // implement a cache for local use.
+public:
+
+ typedef ACE_Metrics_Timeprobe<ACE_LOCK, ALLOCATOR>
+ ACE_METRICS_TIMEPROBE_TYPE;
+
+#if defined (ACE_HAS_METRICS_BASE_POINTERS)
+ typedef ACE_Based_Pointer<ACE_METRICS_TIMEPROBE_TYPE>
+ ACE_METRICS_TIMEPROBE_BASED_PTR_TYPE;
+#else
+ typedef ACE_METRICS_TIMEPROBE_TYPE * ACE_METRICS_TIMEPROBE_BASED_PTR_TYPE;
+#endif
+
+ typedef TAO_Metrics_LocalTimeprobe<ACE_LOCK, ALLOCATOR> TAO_METRICS_TIMEPROBE_TYPE;
+
+ typedef TAO_Metrics_LocalCache<ACE_LOCK, ALLOCATOR> TAO_METRICS_CACHE_TYPE;
+
+ struct TAO_Metrics_Cache_Data_Base
+ {
+ ACE_METRICS_STRING_TYPE probe_name;
+ TAO_Metrics_LocalTimeprobe<ACE_LOCK, ALLOCATOR> probe;
+ };
+
+ struct TAO_Metrics_Cache_Data : public TAO_Metrics_Cache_Data_Base
+ {
+ int is_hrt;
+ u_long missed_deadlines;
+ u_long made_deadlines;
+ u_long cancellations;
+ };
+
+#if defined (ACE_HAS_METRICS_BASE_POINTERS)
+ typedef ACE_Based_Pointer<TAO_Metrics_Cache_Data_Base> ACE_METRICS_CACHE_DATA_BASE_TYPE;
+ typedef ACE_Based_Pointer<TAO_Metrics_Cache_Data> ACE_METRICS_CACHE_DATA_TYPE;
+#else
+ typedef TAO_Metrics_Cache_Data_Base* ACE_METRICS_CACHE_DATA_BASE_TYPE;
+ typedef TAO_Metrics_Cache_Data* ACE_METRICS_CACHE_DATA_TYPE;
+#endif
+
+ typedef ACE_Hash_Map_Manager_Ex<RtecScheduler::handle_t,
+ ACE_METRICS_CACHE_DATA_BASE_TYPE,
+ ACE_Hash<RtecScheduler::handle_t>,
+ ACE_Equal_To<RtecScheduler::handle_t>,
+ ACE_Null_Mutex> METRICS_BASE_MONITOR_MAP;
+ // Type of map used for O(1) lookup of monitored data for operations.
+
+ typedef ACE_Hash_Map_Entry<RtecScheduler::handle_t,
+ ACE_METRICS_CACHE_DATA_BASE_TYPE >
+ METRICS_BASE_MONITOR_MAP_ENTRY;
+ // Type of entry in monitor map.
+
+ typedef ACE_Hash_Map_Iterator_Ex<RtecScheduler::handle_t,
+ ACE_METRICS_CACHE_DATA_BASE_TYPE,
+ ACE_Hash<RtecScheduler::handle_t>,
+ ACE_Equal_To<RtecScheduler::handle_t>,
+ ACE_Null_Mutex>
+ METRICS_BASE_MONITOR_MAP_ITERATOR;
+ // Type of iterator for monitor map.
+
+ typedef ACE_Hash_Map_Manager_Ex<RtecScheduler::handle_t,
+ ACE_METRICS_CACHE_DATA_TYPE,
+ ACE_Hash<RtecScheduler::handle_t>,
+ ACE_Equal_To<RtecScheduler::handle_t>,
+ ACE_Null_Mutex> METRICS_MONITOR_MAP;
+ // Type of map used for O(1) lookup of monitored data for operations.
+
+ typedef ACE_Hash_Map_Entry<RtecScheduler::handle_t,
+ ACE_METRICS_CACHE_DATA_TYPE >
+ METRICS_MONITOR_MAP_ENTRY;
+ // Type of entry in monitor map.
+
+ typedef ACE_Hash_Map_Iterator_Ex<RtecScheduler::handle_t,
+ ACE_METRICS_CACHE_DATA_TYPE,
+ ACE_Hash<RtecScheduler::handle_t>,
+ ACE_Equal_To<RtecScheduler::handle_t>,
+ ACE_Null_Mutex>
+ METRICS_MONITOR_MAP_ITERATOR;
+ // Type of iterator for monitor map.
+
+ TAO_Metrics_LocalCache (u_long table_size
+ = METRICS_DEFAULT_TIMEPROBE_TABLE_SIZE,
+ u_long number_of_probes
+ = METRICS_DEFAULT_TIMEPROBE_COUNT,
+ ALLOCATOR * alloc = (ALLOCATOR*)ALLOCATOR::instance());
+ // Constructor.
+
+ ~TAO_Metrics_LocalCache () {this->fini ();}
+ // Destructor.
+
+ void reset_statistics ();
+ // Reset the collection of metrics data.
+
+ int init (u_long number_of_probes);
+ // Factory method for constructing probes.
+
+ void fini ();
+ // Method for destroying probes.
+
+ void register_upcall_adapter (RtecScheduler::handle_t handle,
+ const char *name,
+ int is_hrt,
+ unsigned short incr_upcall_id = 1);
+ // Registers an upcall adapter, allocates monitoring data structures
+ // for it in hash maps if not already present.
+
+ RtecScheduler::handle_t register_base_metrics (const char *name,
+ TAO_Metrics_Utils::Base_Metrics_Type bmt,
+ unsigned short incr_base_id = 1);
+ // Registers a base metrics probe, allocates monitoring data structures
+ // for it in hash maps, returns a handle to the metrics segment.
+
+ void report_upcall_start (RtecScheduler::handle_t handle);
+ // Inline: Records start time of an upcall.
+
+ int report_upcall_stop (RtecScheduler::handle_t handle,
+ const ACE_Time_Value & deadline);
+ // Inline: Records end time of an upcall, returns 0 if the deadline
+ // was made, 1 if the deadline was missed, or -1 if an error occurred.
+ // If the passed deadline is equal to ACE_Time_Value::zero, by definition
+ // the deadline is made, and the method returns 0.
+
+ void report_upcall_cancellation (RtecScheduler::handle_t handle);
+ // Inline: Reports a cancelled upcall.
+
+ void report_base_metrics_start (RtecScheduler::handle_t handle);
+ // Inline: Records start time of a base metrics segment.
+
+ void report_base_metrics_stop (RtecScheduler::handle_t handle);
+ // Inline: Records stop time of a base metrics segment.
+
+ void report_base_metrics_suspend (RtecScheduler::handle_t handle);
+ // Inline: Records start time of a base metrics segment.
+
+ void report_base_metrics_resume (RtecScheduler::handle_t handle);
+ // Inline: Records stop time of a base metrics segment.
+
+ void flush_TAO_Metrics_LocalCache ();
+ // Flush the TAO metrics local cache into shared memory.
+
+protected:
+ void increment_base_handle(TAO_Metrics_Utils::Base_Metrics_Type bmt);
+ // Used to increment the probe id counter for a particular metrics type
+
+ void increment_upcall_handle();
+ // Used to increment the probe id counter for a upcall probe type
+
+ METRICS_BASE_MONITOR_MAP base_monitor_maps_ [2];
+ // These map base metrics ids to base monitor data.
+
+ METRICS_MONITOR_MAP monitor_maps_ [2];
+ // These map operation handles to upcall monitor data.
+
+ // Count of the number of registered sched probes.
+ u_long sched_count_;
+
+ // Count of the number of registered quo probes.
+ u_long quo_count_;
+
+ // Count of the number of registered tns probes.
+ u_long tns_count_;
+
+ // Count of the number of registered teec probes.
+ u_long teec_count_;
+
+ // Count of the number of registered rtarm probes.
+ u_long rtarm_count_;
+
+ // Count of the number of registered upcall adapters.
+ u_long upcall_adapter_count_;
+
+ // Holds the next base metrics probe handle to assign
+ RtecScheduler::handle_t next_base_metrics_handle_;
+
+};
+
+
+
+template <class ACE_LOCK, class ALLOCATOR>
+class TAO_Metrics_ReportingLocalCache
+ : public TAO_Metrics_LocalCache<ACE_LOCK, ALLOCATOR>
+{
+ // = TITLE
+ // Defines a class that adds metrics logger reporting to a local cache.
+ //
+ // = DESCRIPTION
+ // This class makes use of the <TAO_Metrics_LocalCache> as its
+ // a cache for local use, and adds reporting to the logger.
+public:
+
+ TAO_Metrics_ReportingLocalCache (u_long table_size
+ = METRICS_DEFAULT_TIMEPROBE_TABLE_SIZE,
+ u_long number_of_probes
+ = METRICS_DEFAULT_TIMEPROBE_COUNT,
+ ALLOCATOR * alloc = (ALLOCATOR*)ALLOCATOR::instance());
+ // Constructor.
+
+ ~TAO_Metrics_ReportingLocalCache () {this->fini ();}
+ // Destructor.
+
+ void output_statistics (Metrics::QoSLogger_ptr logger);
+ // Output the statistics to the remote logger servant.
+
+ void register_upcall_adapter (RtecScheduler::handle_t handle,
+ const char *name,
+ int is_hrt,
+ Metrics::QoSLogger_ptr logger);
+ // Registers an upcall adapter, allocates monitoring data structures
+ // for it in hash maps if not already present.
+
+ RtecScheduler::handle_t register_base_metrics (const char *name,
+ TAO_Metrics_Utils::Base_Metrics_Type bmt,
+ Metrics::QoSLogger_ptr logger);
+ // Registers a base metrics probe, allocates monitoring data structures
+ // for it in hash maps, returns a handle to the metrics segment.
+
+ int register_probes (Metrics::QoSLogger_ptr logger);
+ // Registers probes with the logger.
+
+ void flush_TAO_Metrics_ReportingLocalCache ();
+ // Flush the TAO metrics local cache into shared memory.
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
+#include "orbsvcs/Metrics/Metrics_LocalCache_T.cpp"
+#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
+
+#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
+#pragma implementation ("Metrics_LocalCache_T.cpp")
+#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
+
+#endif /* METRICS_LOCAL_CACHE_T_H */