summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Metrics/Metrics_UpcallMonitor.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Metrics/Metrics_UpcallMonitor.h')
-rw-r--r--TAO/orbsvcs/orbsvcs/Metrics/Metrics_UpcallMonitor.h262
1 files changed, 262 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Metrics/Metrics_UpcallMonitor.h b/TAO/orbsvcs/orbsvcs/Metrics/Metrics_UpcallMonitor.h
new file mode 100644
index 00000000000..538d3d3a3da
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/Metrics/Metrics_UpcallMonitor.h
@@ -0,0 +1,262 @@
+// $Id$
+
+#ifndef METRICS_UPCALL_MONITOR_H
+#define METRICS_UPCALL_MONITOR_H
+
+#if ! defined (VXWORKS)
+
+// Comment out both of these to disable output
+# define METRICS_MONITOR_ERROR_OUTPUT_ENABLED
+# define METRICS_MONITOR_DEBUG_OUTPUT_ENABLED
+
+#endif /* ! VXWORKS */
+
+#include "ace/Singleton.h"
+#include "ace/Hash_Map_Manager.h"
+
+#include "orbsvcs/RtecEventCommS.h"
+#include "orbsvcs/Time_Utilities.h"
+#include "orbsvcs/MetricsS.h"
+
+#include "Metrics_LocalCache.h"
+#include "Metrics_FrameManager.h"
+#include "Metrics_Utils.h"
+
+class TAO_ORBSVCS_Export TAO_Metrics_UpcallMonitor
+ : public POA_Metrics::QoSMonitor
+{
+ // = TITLE
+ // This class implements a Metrics QoS monitor.
+ //
+ // = DESCRIPTION
+ // This class allows clients to monitor QoS, collected
+ // by the rest of the metrics framework.
+public:
+
+ typedef ACE_Hash_Map_Manager_Ex<RtecScheduler::handle_t,
+ CORBA::ULong,
+ ACE_Hash<RtecScheduler::handle_t>,
+ ACE_Equal_To<RtecScheduler::handle_t>,
+ ACE_SYNCH_MUTEX> MONITOR_MAP;
+ // Type of map used for O(1) lookup of missed/made deadline counts
+ // by operation handles.
+
+ typedef ACE_Hash_Map_Entry<RtecScheduler::handle_t, CORBA::ULong>
+ MONITOR_MAP_ENTRY;
+ // Type of map used for O(1) lookup of RT_Infos by their handles.
+
+ typedef ACE_Hash_Map_Iterator_Ex<RtecScheduler::handle_t,
+ CORBA::ULong,
+ ACE_Hash<RtecScheduler::handle_t>,
+ ACE_Equal_To<RtecScheduler::handle_t>,
+ ACE_SYNCH_MUTEX> MONITOR_MAP_ITERATOR;
+ // Type of map used for O(1) lookup of missed/made deadline counts
+ // by operation handles.
+
+
+ TAO_Metrics_UpcallMonitor ();
+ // Default constructor.
+
+ ~TAO_Metrics_UpcallMonitor ();
+ // Destructor.
+
+ virtual void
+ report_made_deadline (RtecScheduler::handle_t handle,
+ CORBA::Environment &ACE_TRY_ENV
+ = CORBA::Environment::default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ Metrics::INTERNAL_0));
+ // Reports a successful upcall.
+
+ virtual void
+ report_missed_deadline (RtecScheduler::handle_t handle,
+ CORBA::Environment &ACE_TRY_ENV
+ = CORBA::Environment::default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ Metrics::INTERNAL_1));
+ // Reports an unsuccessful upcall.
+
+ virtual void
+ get_aggregate_QoS (RtecScheduler::handle_t handle,
+ Metrics::QoSParameter_t_out qos,
+ CORBA::Environment &ACE_TRY_ENV
+ = CORBA::Environment::default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ Metrics::INTERNAL_2,
+ Metrics::INTERNAL_3));
+ // Get the aggregate QoS statistics collected for the passed handle.
+
+ virtual void get_aggregate_QoS_set (
+ const Metrics::Handle_Set_t & handle_set,
+ Metrics::QoSParameter_Set_out qos_set,
+ CORBA::Environment &ACE_TRY_ENV =
+ TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ Metrics::INTERNAL_4,
+ Metrics::INTERNAL_5));
+ // Get the aggregate QoS statistics collected for each handle in the
+ // passed set.
+
+ virtual void
+ reset_statistics (RtecScheduler::handle_t handle,
+ CORBA::Environment &ACE_TRY_ENV
+ = CORBA::Environment::default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ Metrics::INTERNAL_7,
+ Metrics::INTERNAL_8));
+ // Resets the aggregate QoS information for the given operation.
+
+ MONITOR_MAP &missed_map ();
+ // Accessor for map of operation handle to a count of deadlines missed.
+
+ MONITOR_MAP &made_map ();
+ // Accessor for map of operation handle to a count of deadlines made.
+
+private:
+
+ // = Implementation members.
+
+ MONITOR_MAP missed_map_;
+ // Maps operation handle to a count of deadlines missed.
+
+ MONITOR_MAP made_map_;
+ // Maps operation handle to a count of deadlines made.
+
+};
+
+
+class TAO_ORBSVCS_Export TAO_Metrics_ReportingUpcallMonitor
+ : public POA_Metrics::ReportingQoSMonitor
+{
+ // = TITLE
+ // This class implements a reporting extension for a Metrics QoS monitor.
+ //
+ // = DESCRIPTION
+ // This class uses delegation to avoid the ugly consequences of
+ // multiple inheritance from a common IDL base class along two
+ // inheritance paths.
+public:
+
+ typedef ACE_Hash_Map_Manager_Ex<RtecScheduler::handle_t,
+ CORBA::ULong,
+ ACE_Hash<RtecScheduler::handle_t>,
+ ACE_Equal_To<RtecScheduler::handle_t>,
+ ACE_SYNCH_MUTEX> MONITOR_MAP;
+ // Type of map used for O(1) lookup of missed/made deadline counts
+ // by operation handles.
+
+ typedef ACE_Hash_Map_Entry<RtecScheduler::handle_t, CORBA::ULong>
+ MONITOR_MAP_ENTRY;
+ // Type of map used for O(1) lookup of RT_Infos by their handles.
+
+ typedef ACE_Hash_Map_Iterator_Ex<RtecScheduler::handle_t,
+ CORBA::ULong,
+ ACE_Hash<RtecScheduler::handle_t>,
+ ACE_Equal_To<RtecScheduler::handle_t>,
+ ACE_SYNCH_MUTEX> MONITOR_MAP_ITERATOR;
+ // Type of map used for O(1) lookup of missed/made deadline counts
+ // by operation handles.
+
+
+ TAO_Metrics_ReportingUpcallMonitor ();
+ // Default constructor.
+
+ ~TAO_Metrics_ReportingUpcallMonitor ();
+ // Destructor.
+
+ virtual void
+ report_made_deadline (RtecScheduler::handle_t handle,
+ CORBA::Environment &ACE_TRY_ENV
+ = CORBA::Environment::default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ Metrics::INTERNAL_0));
+ // Reports a successful upcall.
+
+ virtual void
+ report_missed_deadline (RtecScheduler::handle_t handle,
+ CORBA::Environment &ACE_TRY_ENV
+ = CORBA::Environment::default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ Metrics::INTERNAL_1));
+ // Reports an unsuccessful upcall.
+
+ virtual void
+ get_aggregate_QoS (RtecScheduler::handle_t handle,
+ Metrics::QoSParameter_t_out qos,
+ CORBA::Environment &ACE_TRY_ENV
+ = CORBA::Environment::default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ Metrics::INTERNAL_2,
+ Metrics::INTERNAL_3));
+ // Get the aggregate QoS statistics collected for the passed handle.
+
+ virtual void get_aggregate_QoS_set (
+ const Metrics::Handle_Set_t & handle_set,
+ Metrics::QoSParameter_Set_out qos_set,
+ CORBA::Environment &ACE_TRY_ENV =
+ TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ Metrics::INTERNAL_4,
+ Metrics::INTERNAL_5));
+ // Get the aggregate QoS statistics collected for each handle in the
+ // passed set.
+
+ virtual void report_aggregate_QoS (
+ Metrics::QoSLogger_ptr logger,
+ Metrics::Time interval,
+ CORBA::Environment &ACE_TRY_ENV =
+ TAO_default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ Metrics::NIL_LOGGER,
+ Metrics::INTERNAL_6));
+ // Report the aggregate QoS statistics to the logger.
+
+ virtual void
+ reset_statistics (RtecScheduler::handle_t handle,
+ CORBA::Environment &ACE_TRY_ENV
+ = CORBA::Environment::default_environment ())
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ Metrics::INTERNAL_7,
+ Metrics::INTERNAL_8));
+ // Resets the aggregate QoS information for the given operation.
+
+private:
+
+ TAO_Metrics_UpcallMonitor monitor_;
+ // The monitor we're wrapping.
+};
+
+
+#if defined (__ACE_INLINE__)
+#include "Metrics_UpcallMonitor.i"
+#endif /* __ACE_INLINE__ */
+
+#include "orbsvcs/Metrics/Metrics_UpcallMonitor_T.h"
+
+typedef TAO_Metrics_UpcallMonitorAdapter<ACE_SYNCH_MUTEX, ACE_New_Allocator>
+TAO_METRICS_MONITOR_ADAPTER_TYPE;
+
+typedef TAO_Metrics_ReportingUpcallMonitorAdapter<ACE_SYNCH_MUTEX, ACE_New_Allocator>
+TAO_METRICS_REPORTING_MONITOR_ADAPTER_TYPE;
+
+typedef ACE_Singleton<TAO_Metrics_UpcallMonitor, ACE_SYNCH_MUTEX>
+TAO_METRICS_MONITOR_SINGLETON_TYPE;
+
+typedef ACE_Singleton<TAO_Metrics_ReportingUpcallMonitor, ACE_SYNCH_MUTEX>
+TAO_METRICS_REPORTING_MONITOR_SINGLETON_TYPE;
+
+#if defined (TAO_USES_REPORTING_METRICS)
+typedef TAO_METRICS_REPORTING_MONITOR_ADAPTER_TYPE TAO_METRICS_MONITOR_ADAPTER;
+typedef TAO_METRICS_REPORTING_MONITOR_SINGLETON_TYPE TAO_METRICS_MONITOR_SINGLETON;
+#else
+typedef TAO_METRICS_MONITOR_ADAPTER_TYPE TAO_METRICS_MONITOR_ADAPTER;
+typedef TAO_METRICS_MONITOR_SINGLETON_TYPE TAO_METRICS_MONITOR_SINGLETON;
+#endif
+
+
+#endif /* METRICS_UPCALL_MONITOR_H */
+
+
+
+
+