summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Log/Log_i.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Log/Log_i.h')
-rw-r--r--TAO/orbsvcs/orbsvcs/Log/Log_i.h509
1 files changed, 509 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Log/Log_i.h b/TAO/orbsvcs/orbsvcs/Log/Log_i.h
new file mode 100644
index 00000000000..38d0ffa0e54
--- /dev/null
+++ b/TAO/orbsvcs/orbsvcs/Log/Log_i.h
@@ -0,0 +1,509 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file Log_i.h
+ *
+ * $Id$
+ *
+ * Implementation of the DsLogAdmin::Log interface.
+ *
+ * @author Matthew Braun <mjb2@cs.wustl.edu>
+ * @author Pradeep Gore <pradeep@cs.wustl.edu>
+ * @author David A. Hanvey <d.hanvey@qub.ac.uk>
+ */
+//=============================================================================
+
+
+#ifndef TAO_TLS_LOG_I_H
+#define TAO_TLS_LOG_I_H
+
+#include /**/ "ace/pre.h"
+
+#include "orbsvcs/Log/LogRecordStore.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "orbsvcs/Log/Log_Compaction_Handler.h"
+#include "orbsvcs/Log/Log_Flush_Handler.h"
+#include "orbsvcs/Log/LogNotification.h"
+#include "orbsvcs/Log/LogRecordStore.h"
+#include "orbsvcs/DsLogAdminS.h"
+#include "ace/Reactor.h"
+#include "orbsvcs/Log/log_serv_export.h"
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+class TAO_LogMgr_i;
+
+/**
+ * @class TAO_Log_i
+ *
+ * @brief Used to log events to a logging server
+ *
+ * This implementation attempts to conform to the telecom
+ * logging specification.
+ */
+class TAO_Log_Serv_Export TAO_Log_i : public virtual POA_DsLogAdmin::Log
+{
+
+public:
+
+ /// Constructor.
+ TAO_Log_i (CORBA::ORB_ptr orb,
+ TAO_LogMgr_i& logmgr_i,
+ DsLogAdmin::LogMgr_ptr factory,
+ DsLogAdmin::LogId id,
+ TAO_LogNotification *log_notifier);
+
+ /// Destructor.
+ ~TAO_Log_i ();
+
+ /// Initlialize the Log.
+ void init (ACE_ENV_SINGLE_ARG_DECL);
+
+ /**
+ * @name DsLogAdmin::Log Methods
+ *
+ * DsLogAdmin::Log methods.
+ */
+ //@{
+ /// Return the factory of the log.
+ DsLogAdmin::LogMgr_ptr my_factory (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return the id of the log.
+ DsLogAdmin::LogId id (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Get the list of the QoS properties supported by the log.
+ DsLogAdmin::QoSList*
+ get_log_qos (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Set the list of the QoS properties supported by the log.
+ void set_log_qos (const DsLogAdmin::QoSList & qos
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ DsLogAdmin::UnsupportedQoS));
+
+ /// Get the record life in seconds (0 infinite).
+ CORBA::ULong
+ get_max_record_life (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Set the record life in seconds (0 infinite).
+ void
+ set_max_record_life (CORBA::ULong life
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Get the maximum size in octets.
+ CORBA::ULongLong
+ get_max_size (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Set the maximum size in octets.
+ void
+ set_max_size (CORBA::ULongLong size
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ DsLogAdmin::InvalidParam));
+
+ /// Get the current size of the log in octets.
+ CORBA::ULongLong
+ get_current_size (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Return the number of records in the log.
+ CORBA::ULongLong
+ get_n_records (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Get the action to be taken when the log reaches its maximum size.
+ DsLogAdmin::LogFullActionType
+ get_log_full_action (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Set the action to be taken when the log reaches its maximum size.
+ void
+ set_log_full_action (DsLogAdmin::LogFullActionType action
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ DsLogAdmin::InvalidLogFullAction));
+
+ /// Get the administrative state of the log.
+ DsLogAdmin::AdministrativeState
+ get_administrative_state (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Set the administrative state of the log.
+ void
+ set_administrative_state (DsLogAdmin::AdministrativeState state
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Get the forwarding state of the log.
+ /// @@ Note: is it ok to make this method virtual?
+ /// @@@ Of course! get_forwarding_state() is virtual in the base
+ /// class dictated by the IDL! -Ossama
+ virtual DsLogAdmin::ForwardingState
+ get_forwarding_state (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Set the forwarding state of the log.
+ /// @@ Note: is it ok to make this method virtual?
+ void
+ set_forwarding_state (DsLogAdmin::ForwardingState state
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Get the operational state of the log.
+ DsLogAdmin::OperationalState
+ get_operational_state (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Get the log duration
+ DsLogAdmin::TimeInterval
+ get_interval (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Set the log duration.
+ void
+ set_interval (const DsLogAdmin::TimeInterval & interval
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ DsLogAdmin::InvalidTime,
+ DsLogAdmin::InvalidTimeInterval));
+
+ /// Get the availability status
+ DsLogAdmin::AvailabilityStatus
+ get_availability_status (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Get the capacity alarm threshold
+ DsLogAdmin::CapacityAlarmThresholdList*
+ get_capacity_alarm_thresholds (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /**
+ * Set the capacity alarm threshold. Threshold values represent
+ * percentage levels at which the log should emit events to signal
+ * that a log full or log wrap condition is approaching. If the log
+ * is set to wrap, the thresholds are relative to the log size
+ * between wraps (after a wrap, the percentage full resets to
+ * 0).
+ */
+ void
+ set_capacity_alarm_thresholds
+ (const DsLogAdmin::CapacityAlarmThresholdList & threshs
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ DsLogAdmin::InvalidThreshold));
+
+ /// Get the weekly scheduling parameters
+ DsLogAdmin::WeekMask*
+ get_week_mask (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Set the weekly scheduling parameters.
+ void
+ set_week_mask (const DsLogAdmin::WeekMask & masks
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ DsLogAdmin::InvalidTime,
+ DsLogAdmin::InvalidTimeInterval,
+ DsLogAdmin::InvalidMask));
+
+ /// Returns all records in the log that match the given constraint
+ /// <c>.
+ DsLogAdmin::RecordList*
+ query (const char * grammar,
+ const char * c,
+ DsLogAdmin::Iterator_out i
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ DsLogAdmin::InvalidGrammar,
+ DsLogAdmin::InvalidConstraint));
+
+ /// Retrieve <how_many> records from time <from_time> using iterator
+ /// <i>.
+ DsLogAdmin::RecordList*
+ retrieve (DsLogAdmin::TimeT from_time,
+ CORBA::Long how_many,
+ DsLogAdmin::Iterator_out i
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Returns the number of records matching constraint <c>.
+ CORBA::ULong
+ match (const char * grammar,
+ const char * c
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ DsLogAdmin::InvalidGrammar,
+ DsLogAdmin::InvalidConstraint));
+
+ /// Delete records matching constraint <c>.
+ CORBA::ULong
+ delete_records (const char * grammar,
+ const char * c
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ DsLogAdmin::InvalidGrammar,
+ DsLogAdmin::InvalidConstraint));
+
+ /// Delete records matching ids in <ids>
+ CORBA::ULong
+ delete_records_by_id (const DsLogAdmin::RecordIdList & ids
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+
+ /// Write records to the log storage.
+ void
+ write_records (const DsLogAdmin::Anys & records
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ DsLogAdmin::LogFull,
+ DsLogAdmin::LogOffDuty,
+ DsLogAdmin::LogLocked,
+ DsLogAdmin::LogDisabled));
+
+ /// Write a list of record ids to storage. Raises DsLogAdmin::LogFull
+ /// and DsLogAdmin::LogLocked
+ void
+ write_recordlist (const DsLogAdmin::RecordList & list
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ DsLogAdmin::LogFull,
+ DsLogAdmin::LogOffDuty,
+ DsLogAdmin::LogLocked,
+ DsLogAdmin::LogDisabled));
+
+ /// Set single record attributes.
+ void
+ set_record_attribute (DsLogAdmin::RecordId id,
+ const DsLogAdmin::NVList & attr_list
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ DsLogAdmin::InvalidRecordId,
+ DsLogAdmin::InvalidAttribute));
+
+ /// Set the attributes of all records that matches the
+ /// constraints with same attr_list.
+ CORBA::ULong
+ set_records_attribute (const char * grammar,
+ const char * c,
+ const DsLogAdmin::NVList & attr_list
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ DsLogAdmin::InvalidGrammar,
+ DsLogAdmin::InvalidConstraint,
+ DsLogAdmin::InvalidAttribute));
+
+ /// Get the attributes of the record with id <id>. Raises
+ /// DsLogAdmin::InvalidRecordId
+ DsLogAdmin::NVList*
+ get_record_attribute (DsLogAdmin::RecordId id
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ DsLogAdmin::InvalidRecordId));
+
+ /// Causes all pending events to be written to storage. Raises
+ /// DsLogAdmin::UnsupportedQos
+ void
+ flush (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException,
+ DsLogAdmin::UnsupportedQoS));
+ //@}
+
+ /// Remove records that have exceeded max_record_life_.
+ void remove_old_records (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+protected:
+ /// Get the availability status
+ /// @note must be called with locks held
+ DsLogAdmin::AvailabilityStatus
+ get_availability_status_i (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Tells if the Log is scheduled to run now.
+ /// @note must be called with locks held
+ CORBA::Boolean scheduled (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Copy the attributes of the log being passed.
+ void copy_attributes (DsLogAdmin::Log_ptr log
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Check if threshold reached.
+ void check_capacity_alarm_threshold (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Reset capacity alarm threshold.
+ void reset_capacity_alarm_threshold (ACE_ENV_SINGLE_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Check that valid threshold values have been given.
+ static CORBA::Boolean validate_capacity_alarm_thresholds (
+ const DsLogAdmin::CapacityAlarmThresholdList & threshs
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// Reset Log QoS
+ void reset_log_qos (const DsLogAdmin::QoSList& qos
+ ACE_ENV_ARG_DECL);
+
+ /// Validate log QoS
+ void validate_log_qos (const DsLogAdmin::QoSList& qos
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((DsLogAdmin::UnsupportedQoS));
+
+ /// Reset Week Mask
+ ///
+ /// Used to initialize internal data structures that represent the
+ /// week mask list when the log service starts, and to reinitialize
+ /// them when they are changed.
+ ///
+ void reset_week_mask (const DsLogAdmin::WeekMask& masks
+ ACE_ENV_ARG_DECL);
+
+ /// Validate Week Mask
+ ///
+ /// Used to check whether week mask is valid. If not, throws an
+ /// InvalidTime, InvalidTimeInterval, or InvalidMask exception.
+ ///
+ void validate_week_mask (const DsLogAdmin::WeekMask& masks
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC ((DsLogAdmin::InvalidTime,
+ DsLogAdmin::InvalidTimeInterval,
+ DsLogAdmin::InvalidMask));
+
+protected:
+ /// Reference to the LogMgr servant
+ TAO_LogMgr_i& logmgr_i_;
+
+ /// The log's object reference
+ DsLogAdmin::Log_var log_;
+
+ /// The log's factory's object reference
+ DsLogAdmin::LogMgr_var factory_;
+
+ /// The log's id
+ DsLogAdmin::LogId logid_;
+
+ /// The log's operational state
+ DsLogAdmin::OperationalState op_state_;
+
+ /// The log's availability status
+ DsLogAdmin::AvailabilityStatus avail_status_;
+
+ /// The list of points at which the log should generate events
+ /// indicating approaching full capacity
+ DsLogAdmin::CapacityAlarmThresholdList thresholds_;
+
+ /// The next capacity alarm threshold.
+ CORBA::ULong current_threshold_;
+
+ /// A Sequence of the weekly intervals when the log is in operation.
+ DsLogAdmin::TimeIntervalSeq weekly_intervals_;
+
+ /// The QoS type of the log
+ DsLogAdmin::QoSType qostype_;
+
+ /// The reactor used for timing (startup and shutdown), etc
+ ACE_Reactor *reactor_;
+
+ /// The storage for all the records
+ TAO_LogRecordStore* recordstore_;
+
+ /// For sending Log Generated events.
+ TAO_LogNotification* notifier_;
+
+ /// Log Compaction Handler
+ TAO_Log_Compaction_Handler log_compaction_handler_;
+
+ /// Log Compaction Interval
+ static const ACE_Time_Value log_compaction_interval_;
+
+ /// Log Flush Handler
+ TAO_Log_Flush_Handler log_flush_handler_;
+
+ /// Log Flush Interval
+ static const ACE_Time_Value log_flush_interval_;
+};
+
+bool TAO_Log_Serv_Export
+operator==(const DsLogAdmin::CapacityAlarmThresholdList& rhs,
+ const DsLogAdmin::CapacityAlarmThresholdList& lhs);
+
+bool TAO_Log_Serv_Export
+operator!=(const DsLogAdmin::CapacityAlarmThresholdList& rhs,
+ const DsLogAdmin::CapacityAlarmThresholdList& lhs);
+
+bool TAO_Log_Serv_Export
+operator==(const DsLogAdmin::IntervalsOfDay& rhs,
+ const DsLogAdmin::IntervalsOfDay& lhs);
+
+bool TAO_Log_Serv_Export
+operator!=(const DsLogAdmin::IntervalsOfDay& rhs,
+ const DsLogAdmin::IntervalsOfDay& lhs);
+
+bool TAO_Log_Serv_Export
+operator==(const DsLogAdmin::QoSList& rhs,
+ const DsLogAdmin::QoSList& lhs);
+
+bool TAO_Log_Serv_Export
+operator!=(const DsLogAdmin::QoSList& rhs,
+ const DsLogAdmin::QoSList& lhs);
+
+bool TAO_Log_Serv_Export
+operator==(const DsLogAdmin::Time24& rhs,
+ const DsLogAdmin::Time24& lhs);
+
+bool TAO_Log_Serv_Export
+operator!=(const DsLogAdmin::Time24& rhs,
+ const DsLogAdmin::Time24& lhs);
+
+bool TAO_Log_Serv_Export
+operator==(const DsLogAdmin::Time24Interval& rhs,
+ const DsLogAdmin::Time24Interval& lhs);
+
+bool TAO_Log_Serv_Export
+operator!=(const DsLogAdmin::Time24Interval& rhs,
+ const DsLogAdmin::Time24Interval& lhs);
+
+bool TAO_Log_Serv_Export
+operator==(const DsLogAdmin::TimeInterval& rhs,
+ const DsLogAdmin::TimeInterval& lhs);
+
+bool TAO_Log_Serv_Export
+operator!=(const DsLogAdmin::TimeInterval& rhs,
+ const DsLogAdmin::TimeInterval& lhs);
+
+bool TAO_Log_Serv_Export
+operator==(const DsLogAdmin::WeekMaskItem& rhs,
+ const DsLogAdmin::WeekMaskItem& lhs);
+
+bool TAO_Log_Serv_Export
+operator!=(const DsLogAdmin::WeekMaskItem& rhs,
+ const DsLogAdmin::WeekMaskItem& lhs);
+
+bool TAO_Log_Serv_Export
+operator==(const DsLogAdmin::WeekMask& rhs,
+ const DsLogAdmin::WeekMask& lhs);
+
+bool TAO_Log_Serv_Export
+operator!=(const DsLogAdmin::WeekMask& rhs,
+ const DsLogAdmin::WeekMask& lhs);
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* TAO_TLS_LOG_I_H */