📄 log_i.cpp
字号:
#include "orbsvcs/Log/Log_i.h"
#include "orbsvcs/Log/Iterator_i.h"
#include "orbsvcs/Log/Log_Constraint_Interpreter.h"
#include "orbsvcs/Log/Log_Constraint_Visitors.h"
#include "orbsvcs/Time_Utilities.h"
#include "tao/debug.h"
#include "ace/OS_NS_stdio.h"
#include "ace/OS_NS_sys_time.h"
ACE_RCSID (Log,
Log_i,
"Log_i.cpp,v 1.28 2003/12/13 14:30:53 bala Exp")
#define QUERY_LANG_SUPPORTED_BY_LOG "TCL"
TAO_Log_i::TAO_Log_i (DsLogAdmin::LogMgr_ptr factory,
DsLogAdmin::LogId id,
TAO_LogNotification *log_notifier,
DsLogAdmin::LogFullActionType log_full_action,
CORBA::ULongLong max_size,
ACE_Reactor *reactor)
: factory_ (DsLogAdmin::LogMgr::_duplicate (factory)),
log_full_action_ (log_full_action),
logid_ (id),
admin_state_ (DsLogAdmin::locked),
forward_state_ (DsLogAdmin::off),
op_state_ (DsLogAdmin::disabled),
reactor_ (reactor),
recordstore_ (max_size, id),
max_rec_list_len_ (LOG_DEFAULT_MAX_REC_LIST_LEN)
{
avail_status_.off_duty = 0;
avail_status_.log_full = 0;
interval_.start = 0;
interval_.stop = 0;
this->notifier_ = log_notifier;
this->max_record_life_ = 0;
this->current_threshold_ = 0;
this->thresholds_.length(1);
this->thresholds_[0] = 100;
}
void
TAO_Log_i::init (ACE_ENV_SINGLE_ARG_DECL)
{
if (recordstore_.open () ==-1)
ACE_THROW (CORBA::UNKNOWN ());
// enable the log now.
this->admin_state_ = DsLogAdmin::unlocked;
this->forward_state_ = DsLogAdmin::on;
this->op_state_ = DsLogAdmin::enabled;
}
TAO_Log_i::~TAO_Log_i (void)
{
recordstore_.close ();
}
DsLogAdmin::LogMgr_ptr
TAO_Log_i::my_factory (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
return DsLogAdmin::LogMgr::_duplicate (this->factory_.in ());
}
DsLogAdmin::LogId
TAO_Log_i::id (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
return logid_;
}
DsLogAdmin::QoSList*
TAO_Log_i::get_log_qos (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
DsLogAdmin::QoSList* ret_val;
ACE_NEW_THROW_EX (ret_val,
DsLogAdmin::QoSList (this->qoslist_),
CORBA::NO_MEMORY ());
ACE_CHECK_RETURN (0);
return ret_val;
}
void
TAO_Log_i::set_log_qos (const DsLogAdmin::QoSList &qos
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException,
DsLogAdmin::UnsupportedQoS))
{
// validate supported properties..
// implement after persistence is added.
DsLogAdmin::QoSList_var old_qos;
old_qos = get_log_qos (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
CORBA::Boolean change = false;
for (CORBA::ULong i = 0; i < qos.length (); ++i)
{
DsLogAdmin::QoSType qostype = qos[i];
if (qostype == DsLogAdmin::QoSFlush ||
qostype == DsLogAdmin::QoSReliability)
{
DsLogAdmin::QoSList denied;
denied._allocate_buffer (2);
denied.length (0);
denied[0] = DsLogAdmin::QoSFlush;
denied[1] = DsLogAdmin::QoSReliability;
ACE_THROW (DsLogAdmin::UnsupportedQoS (denied));
}
}
// store this list.
this->qoslist_ = qos;
if (notifier_ && change)
{
DsLogAdmin::Log_var log =
this->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
notifier_->quality_of_service_value_change (log.in (),
logid_,
old_qos.in (),
qos
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
}
CORBA::ULong
TAO_Log_i::get_max_record_life (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
return max_record_life_;
}
void
TAO_Log_i::set_max_record_life (CORBA::ULong life
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
CORBA::ULong old_life;
old_life = this->get_max_record_life (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
if (life == old_life)
return;
this->max_record_life_ = life;
this->remove_old_records (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
if (notifier_)
{
DsLogAdmin::Log_var log =
this->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
notifier_->max_record_life_value_change (log.in (),
logid_,
old_life,
life
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
}
CORBA::ULongLong
TAO_Log_i::get_max_size (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
return recordstore_.get_max_size ();
}
void
TAO_Log_i::set_max_size (CORBA::ULongLong size
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException,
DsLogAdmin::InvalidParam))
{
// size == 0 => infinite size.
CORBA::ULongLong old_size;
old_size = this->get_max_size (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
if ((size != 0) && (size < this->recordstore_.get_current_size ()))
{
ACE_THROW (DsLogAdmin::InvalidParam ());
}
else
{
this->recordstore_.set_max_size (size);
if (notifier_ && old_size != size)
{
DsLogAdmin::Log_var log =
this->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
notifier_->max_log_size_value_change (log.in (),
logid_,
old_size,
size
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
}
}
CORBA::ULongLong
TAO_Log_i::get_current_size (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
this->remove_old_records (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return this->recordstore_.get_current_size ();
}
CORBA::ULongLong
TAO_Log_i::get_n_records (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
this->remove_old_records (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return this->recordstore_.get_n_records ();
}
DsLogAdmin::LogFullActionType
TAO_Log_i::get_log_full_action (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
return log_full_action_;
}
void
TAO_Log_i::set_log_full_action (DsLogAdmin::LogFullActionType action
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
DsLogAdmin::LogFullActionType old_action =
this->get_log_full_action (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
log_full_action_ = action;
if (notifier_ && action != old_action)
{
DsLogAdmin::Log_var log =
this->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
notifier_->log_full_action_value_change (log.in (),
logid_,
old_action,
action
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
}
DsLogAdmin::AdministrativeState
TAO_Log_i::get_administrative_state (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
return admin_state_;
}
void
TAO_Log_i::set_administrative_state (DsLogAdmin::AdministrativeState state
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
if (this->admin_state_ == state)
return;
this->admin_state_ = state;
if (notifier_)
{
DsLogAdmin::Log_var log =
this->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
notifier_->administrative_state_change (log.in (),
logid_,
state
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
}
DsLogAdmin::ForwardingState
TAO_Log_i::get_forwarding_state (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
return this->forward_state_;
}
void
TAO_Log_i::set_forwarding_state (DsLogAdmin::ForwardingState state
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
if (this->forward_state_ == state)
return;
this->forward_state_ = state;
if (notifier_)
{
DsLogAdmin::Log_var log =
this->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
notifier_->forwarding_state_change (log.in (),
logid_,
state
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
}
DsLogAdmin::OperationalState
TAO_Log_i::get_operational_state (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
return this->op_state_;
}
DsLogAdmin::TimeInterval
TAO_Log_i::get_interval (ACE_ENV_SINGLE_ARG_DECL_NOT_USED)
ACE_THROW_SPEC ((CORBA::SystemException))
{
return this->interval_;
}
void
TAO_Log_i::set_interval (const DsLogAdmin::TimeInterval &interval
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException,
DsLogAdmin::InvalidTime,
DsLogAdmin::InvalidTimeInterval))
{
if (interval.start != 0)
{
if (interval.start >= interval.stop)
ACE_THROW (DsLogAdmin::InvalidTimeInterval ());
}
DsLogAdmin::TimeT old_start_time;
DsLogAdmin::TimeT old_stop_time;
old_start_time = interval_.start;
old_stop_time = interval_.stop;
if (interval.start == old_start_time && interval.stop == old_stop_time)
return;
this->interval_ = interval;
if (notifier_)
{
DsLogAdmin::Log_var log =
this->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
if (interval.start != old_start_time)
{
notifier_->start_time_value_change (log.in (),
logid_,
old_start_time,
interval.start
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
if (interval.stop != old_stop_time)
{
notifier_->stop_time_value_change (log.in (),
logid_,
old_stop_time,
interval.stop
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
}
}
DsLogAdmin::AvailabilityStatus
TAO_Log_i::get_availability_status (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
const CORBA::Boolean s = this->scheduled (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (this->avail_status_);
if (this->op_state_ == DsLogAdmin::enabled
&& this->admin_state_ == DsLogAdmin::unlocked
&& s == 1)
{
this->avail_status_.off_duty = 0; // "on duty"
}
else
this->avail_status_.off_duty = 1;
// The log_full flag is set by the write operations.
return this->avail_status_;
}
DsLogAdmin::CapacityAlarmThresholdList*
TAO_Log_i::get_capacity_alarm_thresholds (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
DsLogAdmin::CapacityAlarmThresholdList* ret_val;
ACE_NEW_THROW_EX (ret_val,
DsLogAdmin::CapacityAlarmThresholdList (this->thresholds_),
CORBA::NO_MEMORY ());
ACE_CHECK_RETURN (0);
return ret_val;
}
void
TAO_Log_i::set_capacity_alarm_thresholds (const
DsLogAdmin::CapacityAlarmThresholdList
&threshs
ACE_ENV_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException,
DsLogAdmin::InvalidThreshold))
{
const CORBA::Boolean validated =
TAO_Log_i::validate_capacity_alarm_thresholds (threshs
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (!validated)
ACE_THROW (DsLogAdmin::InvalidThreshold ());
DsLogAdmin::CapacityAlarmThresholdList old_threshs;
old_threshs = thresholds_;
this->thresholds_ = threshs;
if (notifier_)
{
DsLogAdmin::Log_var log =
this->_this (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -