pub struct AuditLogObject { /* private fields */ }Expand description
BACnet AuditLog object with explicit application-owned durable storage.
§Unwind safety
The log is neither UnwindSafe nor RefUnwindSafe, by decision (#1452).
It holds the ClockReader the application supplies, which runs on the
caller’s thread with nothing to catch its panics, so asserting the traits
for it would claim more than the type can promise. It also keeps the
result of each staged batch that settled before its request collected it,
and that result’s Error can wrap a std::io::Error, which has
neither trait. Caller clocks get no unwind-safety bound.
Implementations§
Source§impl AuditLogObject
impl AuditLogObject
Sourcepub fn purge(&mut self) -> Result<u64, Error>
pub fn purge(&mut self) -> Result<u64, Error>
Clear the records and append a BUFFER_PURGED status record. Returns that record’s sequence number.
This is the application’s purge: peers cannot purge an Audit Log, whose Record_Count is read-only (Clause 12.64.11). The record is appended whether or not logging is enabled, flagged LOG_DISABLED too while it is not, and Total_Record_Count keeps counting. Without a valid clock, or when the commit fails, the purge fails with DEVICE / OPERATIONAL_PROBLEM and the log is left as it was.
Called directly, the purge commits in place and waits for the commit
there. The bundled server’s purge_audit_log stages it instead, so
the commit runs with the object database guard dropped.
Source§impl AuditLogObject
impl AuditLogObject
Sourcepub fn set_member_of(&mut self, parent: Option<BACnetDeviceObjectReference>)
pub fn set_member_of(&mut self, parent: Option<BACnetDeviceObjectReference>)
Configure immediate, best-effort confirmed forwarding to one parent.
Only the server’s explicit audit_notification_sink forwards accepted
notification batches. No backlog is replayed, no records are deleted, and
restart can lose forwarding progress. Reapply this local configuration on
restart; it is not part of the persisted snapshot. None removes the
forwarding properties. Invalid/unresolved parents remain visible as
CONFIGURATION_ERROR and cause no forwarding I/O.
Source§impl AuditLogObject
impl AuditLogObject
Sourcepub fn new(
instance: u32,
name: impl Into<String>,
buffer_size: u32,
persistence: Arc<dyn AuditLogPersistence>,
) -> Result<Self, Error>
pub fn new( instance: u32, name: impl Into<String>, buffer_size: u32, persistence: Arc<dyn AuditLogPersistence>, ) -> Result<Self, Error>
Open or initialize one AuditLog using the explicitly supplied storage.
buffer_size sizes a log that storage does not hold yet. A log
reopened from storage keeps the Buffer_Size it stored, which a write
may have changed since (#1238), and logs a warning when that differs
from buffer_size. To give a stored log a new size, turn Log_Enable
off, write Buffer_Size and turn it on again, or start from empty
storage.
Sourcepub fn add_record(
&mut self,
record: BACnetAuditLogRecord,
) -> Result<Option<u64>, Error>
pub fn add_record( &mut self, record: BACnetAuditLogRecord, ) -> Result<Option<u64>, Error>
Append one application-supplied record when logging is enabled.
Sourcepub fn records(&self) -> &VecDeque<BACnetAuditLogRecordResult>
pub fn records(&self) -> &VecDeque<BACnetAuditLogRecordResult>
Get the current buffer contents.
Sourcepub fn buffer_size(&self) -> u32
pub fn buffer_size(&self) -> u32
Buffer_Size: the ring’s capacity, as configured or last written.
Sourcepub fn log_enable(&self) -> bool
pub fn log_enable(&self) -> bool
Persisted logging enable policy.
Sourcepub fn total_record_count(&self) -> u64
pub fn total_record_count(&self) -> u64
Monotonic record identity counter with BACnet MAX-to-one wrap.
Sourcepub fn generation(&self) -> u64
pub fn generation(&self) -> u64
Current durable snapshot generation.
Sourcepub fn set_description(&mut self, desc: impl Into<String>)
pub fn set_description(&mut self, desc: impl Into<String>)
Set the description string.
Trait Implementations§
Source§impl AuditLogNotificationSink for AuditLogObject
impl AuditLogNotificationSink for AuditLogObject
Source§fn notification_logging_enabled(&self) -> bool
fn notification_logging_enabled(&self) -> bool
Source§fn store_notifications(
&mut self,
notifications: &[BACnetAuditNotification],
apdu_timeout_ms: u32,
) -> Result<(), Error>
fn store_notifications( &mut self, notifications: &[BACnetAuditNotification], apdu_timeout_ms: u32, ) -> Result<(), Error>
Source§fn store_notifications_with_change(
&mut self,
notifications: &[BACnetAuditNotification],
apdu_timeout_ms: u32,
) -> Result<bool, Error>
fn store_notifications_with_change( &mut self, notifications: &[BACnetAuditNotification], apdu_timeout_ms: u32, ) -> Result<bool, Error>
Source§fn store_confirmed_notifications_with_change(
&mut self,
notifications: &[BACnetAuditNotification],
apdu_timeout_ms: u32,
receipt: CompletedAuditReceipt,
) -> Result<(ConfirmedAuditNotificationOutcome, bool), Error>
fn store_confirmed_notifications_with_change( &mut self, notifications: &[BACnetAuditNotification], apdu_timeout_ms: u32, receipt: CompletedAuditReceipt, ) -> Result<(ConfirmedAuditNotificationOutcome, bool), Error>
false.Source§fn has_completed_confirmed_receipt(
&self,
key: &[u8],
now_unix_millis: u64,
) -> Result<bool, Error>
fn has_completed_confirmed_receipt( &self, key: &[u8], now_unix_millis: u64, ) -> Result<bool, Error>
Source§fn store_confirmed_notifications(
&mut self,
notifications: &[BACnetAuditNotification],
apdu_timeout_ms: u32,
receipt: CompletedAuditReceipt,
) -> Result<ConfirmedAuditNotificationOutcome, Error>
fn store_confirmed_notifications( &mut self, notifications: &[BACnetAuditNotification], apdu_timeout_ms: u32, receipt: CompletedAuditReceipt, ) -> Result<ConfirmedAuditNotificationOutcome, Error>
Source§fn stage_notification_batch(
&mut self,
notifications: &[BACnetAuditNotification],
apdu_timeout_ms: u32,
receipt: Option<CompletedAuditReceipt>,
) -> Result<AuditBatchStage, Error>
fn stage_notification_batch( &mut self, notifications: &[BACnetAuditNotification], apdu_timeout_ms: u32, receipt: Option<CompletedAuditReceipt>, ) -> Result<AuditBatchStage, Error>
receipt as
store_confirmed_notifications_with_change
stores it, without as
store_notifications_with_change
does. Nothing changes in memory until
finish_notification_batch takes
the committed batch. Read moreSource§fn finish_notification_batch(
&mut self,
staged: StagedAuditBatch,
) -> Result<(ConfirmedAuditNotificationOutcome, bool), Error>
fn finish_notification_batch( &mut self, staged: StagedAuditBatch, ) -> Result<(ConfirmedAuditNotificationOutcome, bool), Error>
stage_notification_batch
staged, once its commit has run: the batch’s outcome and whether its
retained records changed, or the commit’s error with memory unchanged. Read moreSource§impl AuditLogStorage for AuditLogObject
impl AuditLogStorage for AuditLogObject
Source§fn query(
&self,
parameters: &BACnetAuditLogQueryParameters,
start_at_sequence_number: Option<u64>,
requested_count: u16,
) -> AuditLogQueryPage
fn query( &self, parameters: &BACnetAuditLogQueryParameters, start_at_sequence_number: Option<u64>, requested_count: u16, ) -> AuditLogQueryPage
Source§fn retained_records(&self) -> &VecDeque<BACnetAuditLogRecordResult>
fn retained_records(&self) -> &VecDeque<BACnetAuditLogRecordResult>
Source§impl BACnetObject for AuditLogObject
impl BACnetObject for AuditLogObject
Source§fn object_identifier(&self) -> ObjectIdentifier
fn object_identifier(&self) -> ObjectIdentifier
Source§fn object_name(&self) -> &str
fn object_name(&self) -> &str
Source§fn read_property(
&self,
property: PropertyIdentifier,
array_index: Option<u32>,
) -> Result<PropertyValue, Error>
fn read_property( &self, property: PropertyIdentifier, array_index: Option<u32>, ) -> Result<PropertyValue, Error>
Source§fn write_property(
&mut self,
property: PropertyIdentifier,
_array_index: Option<u32>,
value: PropertyValue,
_priority: Option<u8>,
) -> Result<(), Error>
fn write_property( &mut self, property: PropertyIdentifier, _array_index: Option<u32>, value: PropertyValue, _priority: Option<u8>, ) -> Result<(), Error>
Source§fn property_metadata(&self) -> Cow<'_, [PropertyMetadata]>
fn property_metadata(&self) -> Cow<'_, [PropertyMetadata]>
Source§fn property_list(&self) -> Cow<'static, [PropertyIdentifier]>
fn property_list(&self) -> Cow<'static, [PropertyIdentifier]>
Source§fn audit_log_storage_internal(&self) -> Option<&dyn AuditLogStorage>
fn audit_log_storage_internal(&self) -> Option<&dyn AuditLogStorage>
Source§fn audit_log_notification_sink_internal(
&mut self,
) -> Option<&mut dyn AuditLogNotificationSink>
fn audit_log_notification_sink_internal( &mut self, ) -> Option<&mut dyn AuditLogNotificationSink>
Source§fn write_property_from(
&mut self,
property: PropertyIdentifier,
array_index: Option<u32>,
value: PropertyValue,
priority: Option<u8>,
_origin: &CommandOrigin,
) -> Result<(), Error>
fn write_property_from( &mut self, property: PropertyIdentifier, array_index: Option<u32>, value: PropertyValue, priority: Option<u8>, _origin: &CommandOrigin, ) -> Result<(), Error>
Source§fn is_writable_property(&self, property: PropertyIdentifier) -> bool
fn is_writable_property(&self, property: PropertyIdentifier) -> bool
property for this object. Read moreSource§fn is_array_property(&self, property: PropertyIdentifier) -> bool
fn is_array_property(&self, property: PropertyIdentifier) -> bool
property accepts an array index on this object. Read moreSource§fn is_list_property(&self, property: PropertyIdentifier) -> bool
fn is_list_property(&self, property: PropertyIdentifier) -> bool
property is a BACnetLIST on this object. Read moreSource§fn is_createable(&self) -> bool
fn is_createable(&self) -> bool
Source§fn creation_only_properties(&self) -> &'static [PropertyIdentifier]
fn creation_only_properties(&self) -> &'static [PropertyIdentifier]
Source§fn initialize_property(
&mut self,
_property: PropertyIdentifier,
_value: PropertyValue,
) -> Result<(), Error>
fn initialize_property( &mut self, _property: PropertyIdentifier, _value: PropertyValue, ) -> Result<(), Error>
Self::creation_only_properties, written whole. Read moreSource§fn is_deleteable(&self) -> bool
fn is_deleteable(&self) -> bool
Source§fn required_properties(&self) -> Cow<'static, [PropertyIdentifier]>
fn required_properties(&self) -> Cow<'static, [PropertyIdentifier]>
Source§fn supports_cov(&self) -> bool
fn supports_cov(&self) -> bool
Source§fn supports_subscribe_cov_property(&self) -> bool
fn supports_subscribe_cov_property(&self) -> bool
Source§fn supports_cov_property(&self, property: PropertyIdentifier) -> bool
fn supports_cov_property(&self, property: PropertyIdentifier) -> bool
Source§fn cov_increment(&self) -> Option<f64>
fn cov_increment(&self) -> Option<f64>
Source§fn cov_reported_properties(&self) -> &'static [CovReportedProperty]
fn cov_reported_properties(&self) -> &'static [CovReportedProperty]
Source§fn set_overridden(&mut self, _overridden: bool)
fn set_overridden(&mut self, _overridden: bool)
Source§fn evaluate_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>
fn evaluate_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>
Source§fn tick_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>
fn tick_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>
Time_Delay countdown for a pending transition. Read moreSource§fn tick_schedule(
&mut self,
_today: SpecificDate,
_time: Time,
_calendar_active: &dyn Fn(ObjectIdentifier) -> bool,
) -> Option<ScheduleWrite>
fn tick_schedule( &mut self, _today: SpecificDate, _time: Time, _calendar_active: &dyn Fn(ObjectIdentifier) -> bool, ) -> Option<ScheduleWrite>
Source§fn take_owed_schedule_writes(&mut self) -> Vec<ScheduleWrite>
fn take_owed_schedule_writes(&mut self) -> Vec<ScheduleWrite>
Source§fn complete_schedule_write(
&mut self,
_write: &ScheduleWrite,
_outcomes: &[ScheduleTargetOutcome],
) -> bool
fn complete_schedule_write( &mut self, _write: &ScheduleWrite, _outcomes: &[ScheduleTargetOutcome], ) -> bool
write, one of this schedule’s writes:
outcomes holds one entry per member of write.references, in order. Read moreSource§fn retry_refusals_naming(
&self,
_target: ObjectIdentifier,
) -> Option<ScheduleWrite>
fn retry_refusals_naming( &self, _target: ObjectIdentifier, ) -> Option<ScheduleWrite>
retry of the current value to the
references whose last write was refused and that name target, an
object just added to the database (#1440), so the refusal can clear
without waiting for the next pass. None when no such refusal
stands, or when the pass itself would retry nothing: out of service,
outside Effective_Period, or with a NULL Present_Value. Only
meaningful for Schedule objects; default returns None.Source§fn acknowledge_alarm(
&mut self,
_transition_bit: EventTransitionBits,
) -> Result<(), Error>
fn acknowledge_alarm( &mut self, _transition_bit: EventTransitionBits, ) -> Result<(), Error>
transition_bit flags in acked_transitions.
Returns Ok(()) if the object supports event detection, Err otherwise.Source§fn apply_life_safety_operation(
&mut self,
_operation: LifeSafetyOperation,
) -> Result<LifeSafetyOperationOutcome, Error>
fn apply_life_safety_operation( &mut self, _operation: LifeSafetyOperation, ) -> Result<LifeSafetyOperationOutcome, Error>
Source§fn set_life_safety_operation_expected_internal(
&mut self,
_operation: LifeSafetyOperation,
) -> Result<(), Error>
fn set_life_safety_operation_expected_internal( &mut self, _operation: LifeSafetyOperation, ) -> Result<(), Error>
Source§fn set_event_state_internal(&mut self, _state: EventState) -> Result<(), Error>
fn set_event_state_internal(&mut self, _state: EventState) -> Result<(), Error>
Event_State transition. Read moreSource§fn enrollment_eval_state_internal(&self) -> Option<EventEnrollmentEvalState>
fn enrollment_eval_state_internal(&self) -> Option<EventEnrollmentEvalState>
Source§fn set_enrollment_eval_state_internal(
&mut self,
_state: EventEnrollmentEvalState,
) -> Result<(), Error>
fn set_enrollment_eval_state_internal( &mut self, _state: EventEnrollmentEvalState, ) -> Result<(), Error>
Source§fn enrollment_eval_source_internal(
&self,
) -> Option<Option<EventEnrollmentMonitoredSource>>
fn enrollment_eval_source_internal( &self, ) -> Option<Option<EventEnrollmentMonitoredSource>>
Source§fn set_enrollment_eval_source_internal(
&mut self,
_source: Option<EventEnrollmentMonitoredSource>,
) -> Result<(), Error>
fn set_enrollment_eval_source_internal( &mut self, _source: Option<EventEnrollmentMonitoredSource>, ) -> Result<(), Error>
Source§fn set_acked_transitions_internal(
&mut self,
_transition_bit: EventTransitionBits,
_acknowledged: bool,
) -> Result<(), Error>
fn set_acked_transitions_internal( &mut self, _transition_bit: EventTransitionBits, _acknowledged: bool, ) -> Result<(), Error>
Acked_Transitions bit on a received event-state
transition. Read moreSource§fn evaluate_reliability_internal(
&mut self,
) -> Result<ReliabilityEvaluation, Error>
fn evaluate_reliability_internal( &mut self, ) -> Result<ReliabilityEvaluation, Error>
Reliability. Read moreSource§fn set_reliability_internal(
&mut self,
_reliability: Reliability,
) -> Result<(), Error>
fn set_reliability_internal( &mut self, _reliability: Reliability, ) -> Result<(), Error>
Reliability value. Read moreSource§fn set_present_value_internal(
&mut self,
_value: PropertyValue,
) -> Result<(), Error>
fn set_present_value_internal( &mut self, _value: PropertyValue, ) -> Result<(), Error>
Present_Value supplied by the local application. Read moreSource§fn set_present_value_from_internal(
&mut self,
value: PropertyValue,
_origin: &CommandOrigin,
) -> Result<(), Error>
fn set_present_value_from_internal( &mut self, value: PropertyValue, _origin: &CommandOrigin, ) -> Result<(), Error>
Source§fn set_tracking_value_internal(
&mut self,
_value: PropertyValue,
) -> Result<(), Error>
fn set_tracking_value_internal( &mut self, _value: PropertyValue, ) -> Result<(), Error>
Tracking_Value the local application derived. Read moreSource§fn report_access_input_internal(
&mut self,
_input: AccessControlInput,
) -> Result<(), Error>
fn report_access_input_internal( &mut self, _input: AccessControlInput, ) -> Result<(), Error>
AccessControlInput. Read more