Skip to main content

AuditLogObject

Struct AuditLogObject 

Source
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

Source

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

Source

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

Source

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.

Source

pub fn add_record( &mut self, record: BACnetAuditLogRecord, ) -> Result<Option<u64>, Error>

Append one application-supplied record when logging is enabled.

Source

pub fn records(&self) -> &VecDeque<BACnetAuditLogRecordResult>

Get the current buffer contents.

Source

pub fn buffer_size(&self) -> u32

Buffer_Size: the ring’s capacity, as configured or last written.

Source

pub fn log_enable(&self) -> bool

Persisted logging enable policy.

Source

pub fn total_record_count(&self) -> u64

Monotonic record identity counter with BACnet MAX-to-one wrap.

Source

pub fn generation(&self) -> u64

Current durable snapshot generation.

Source

pub fn set_description(&mut self, desc: impl Into<String>)

Set the description string.

Trait Implementations§

Source§

impl AuditLogNotificationSink for AuditLogObject

Source§

fn notification_logging_enabled(&self) -> bool

Whether this sink currently accepts Audit notifications.
Source§

fn store_notifications( &mut self, notifications: &[BACnetAuditNotification], apdu_timeout_ms: u32, ) -> Result<(), Error>

Merge or create every notification in wire order as one durable batch. Read more
Source§

fn store_notifications_with_change( &mut self, notifications: &[BACnetAuditNotification], apdu_timeout_ms: u32, ) -> Result<bool, Error>

Store a batch and report whether retained record content changed. Custom sinks must opt in to change reporting before they can forward.
Source§

fn store_confirmed_notifications_with_change( &mut self, notifications: &[BACnetAuditNotification], apdu_timeout_ms: u32, receipt: CompletedAuditReceipt, ) -> Result<(ConfirmedAuditNotificationOutcome, bool), Error>

Store records and receipt atomically, reporting record changes separately from receipt-only commits. A duplicate must always report false.
Source§

fn has_completed_confirmed_receipt( &self, key: &[u8], now_unix_millis: u64, ) -> Result<bool, Error>

Check the durable completed confirmed receipts without mutating them.
Source§

fn store_confirmed_notifications( &mut self, notifications: &[BACnetAuditNotification], apdu_timeout_ms: u32, receipt: CompletedAuditReceipt, ) -> Result<ConfirmedAuditNotificationOutcome, Error>

Atomically merge one confirmed batch and retain its completed receipt.
Source§

fn stage_notification_batch( &mut self, notifications: &[BACnetAuditNotification], apdu_timeout_ms: u32, receipt: Option<CompletedAuditReceipt>, ) -> Result<AuditBatchStage, Error>

Stage a batch whose commit the caller awaits without the database guard (#1270): with 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 more
Source§

fn finish_notification_batch( &mut self, staged: StagedAuditBatch, ) -> Result<(ConfirmedAuditNotificationOutcome, bool), Error>

Take a batch 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 more
Source§

impl AuditLogStorage for AuditLogObject

Source§

fn query( &self, parameters: &BACnetAuditLogQueryParameters, start_at_sequence_number: Option<u64>, requested_count: u16, ) -> AuditLogQueryPage

Filter and page the currently retained in-memory records. Read more
Source§

fn retained_records(&self) -> &VecDeque<BACnetAuditLogRecordResult>

The retained records oldest-to-newest, each with its sequence number. Read more
Source§

impl BACnetObject for AuditLogObject

Source§

fn object_identifier(&self) -> ObjectIdentifier

The object’s identifier (type + instance).
Source§

fn object_name(&self) -> &str

The object’s name.
Source§

fn read_property( &self, property: PropertyIdentifier, array_index: Option<u32>, ) -> Result<PropertyValue, Error>

Read a property value.
Source§

fn write_property( &mut self, property: PropertyIdentifier, _array_index: Option<u32>, value: PropertyValue, _priority: Option<u8>, ) -> Result<(), Error>

Write a property value. Read more
Source§

fn property_metadata(&self) -> Cow<'_, [PropertyMetadata]>

Return canonical metadata for this object’s effective property rows. Read more
Source§

fn property_list(&self) -> Cow<'static, [PropertyIdentifier]>

List all properties this object supports in the legacy projection. Read more
Source§

fn audit_log_storage_internal(&self) -> Option<&dyn AuditLogStorage>

Borrow this object’s Audit Log query storage, if it has any. Read more
Source§

fn audit_log_notification_sink_internal( &mut self, ) -> Option<&mut dyn AuditLogNotificationSink>

Mutably borrow this object’s Audit notification receiver capability. Read more
Source§

fn write_property_from( &mut self, property: PropertyIdentifier, array_index: Option<u32>, value: PropertyValue, priority: Option<u8>, _origin: &CommandOrigin, ) -> Result<(), Error>

Write with explicit actual command provenance. Standalone callers assert the origin; server boundaries additionally validate ingress or membership. Decorators must forward this hook without discarding the origin. The default preserves custom/unaffected object behavior. First-party source-tracked commands require this hook and deny context-free writing.
Source§

fn is_writable_property(&self, property: PropertyIdentifier) -> bool

Whether a property write route can accept property for this object. Read more
Source§

fn is_array_property(&self, property: PropertyIdentifier) -> bool

Whether property accepts an array index on this object. Read more
Source§

fn is_list_property(&self, property: PropertyIdentifier) -> bool

Whether property is a BACnetLIST on this object. Read more
Source§

fn is_createable(&self) -> bool

Whether this object type can be created at runtime via CreateObject. Read more
Source§

fn creation_only_properties(&self) -> &'static [PropertyIdentifier]

The properties whose whole value a CreateObject initial value may set on this object although WriteProperty can’t change it afterwards. Read more
Source§

fn initialize_property( &mut self, _property: PropertyIdentifier, _value: PropertyValue, ) -> Result<(), Error>

Apply a CreateObject initial value to one of Self::creation_only_properties, written whole. Read more
Source§

fn is_deleteable(&self) -> bool

Whether this object type can be deleted at runtime via DeleteObject. Read more
Source§

fn required_properties(&self) -> Cow<'static, [PropertyIdentifier]>

List the REQUIRED properties for this object type. Read more
Source§

fn supports_cov(&self) -> bool

Whether this object type supports COV notifications. Read more
Source§

fn supports_subscribe_cov_property(&self) -> bool

Whether SubscribeCOVProperty and SubscribeCOVPropertyMultiple may monitor this object’s properties. Read more
Source§

fn supports_cov_property(&self, property: PropertyIdentifier) -> bool

Whether a readable property supports property-specific COV. Read more
Source§

fn cov_increment(&self) -> Option<f64>

COV increment for this object (objects with a COV_Increment property). Read more
Source§

fn cov_reported_properties(&self) -> &'static [CovReportedProperty]

Properties a whole-object (SubscribeCOV) notification reports after its leading value and Status_Flags, in report order. Read more
Source§

fn set_overridden(&mut self, _overridden: bool)

Set the OVERRIDDEN bit in StatusFlags. Read more
Source§

fn evaluate_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>

Evaluate intrinsic reporting after a present_value change. Read more
Source§

fn tick_intrinsic_reporting(&mut self) -> Option<TransitionOutcome>

Advance the Time_Delay countdown for a pending transition. Read more
Source§

fn tick_schedule( &mut self, _today: SpecificDate, _time: Time, _calendar_active: &dyn Fn(ObjectIdentifier) -> bool, ) -> Option<ScheduleWrite>

Evaluate this object’s schedule at time on today (Clause 12.24.4). Read more
Source§

fn take_owed_schedule_writes(&mut self) -> Vec<ScheduleWrite>

Take the writes this schedule owes its targets apart from its calculation, each once, in order: a NULL to every priority slot a change of List_Of_Object_Property_References or Priority_For_Writing left behind (#1088), then the Present_Value owed out of service, for a client’s write (Clause 12.24.14) or a change of those two properties. Read more
Source§

fn complete_schedule_write( &mut self, _write: &ScheduleWrite, _outcomes: &[ScheduleTargetOutcome], ) -> bool

Report how each target took write, one of this schedule’s writes: outcomes holds one entry per member of write.references, in order. Read more
Source§

fn retry_refusals_naming( &self, _target: ObjectIdentifier, ) -> Option<ScheduleWrite>

The 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>

Acknowledge an alarm transition. Sets the 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>

Apply a LifeSafetyOperation atomically to this object. Read more
Source§

fn set_life_safety_operation_expected_internal( &mut self, _operation: LifeSafetyOperation, ) -> Result<(), Error>

Set the next LifeSafetyOperation expected by trusted local logic. Read more
Source§

fn set_event_state_internal(&mut self, _state: EventState) -> Result<(), Error>

Apply an internally-detected Event_State transition. Read more
Source§

fn enrollment_eval_state_internal(&self) -> Option<EventEnrollmentEvalState>

Snapshot this object’s Event Enrollment evaluation state, if it models one. Read more
Source§

fn set_enrollment_eval_state_internal( &mut self, _state: EventEnrollmentEvalState, ) -> Result<(), Error>

Store this object’s Event Enrollment evaluation state. Read more
Source§

fn enrollment_eval_source_internal( &self, ) -> Option<Option<EventEnrollmentMonitoredSource>>

Snapshot the monitored source that owns Event Enrollment private state. Read more
Source§

fn set_enrollment_eval_source_internal( &mut self, _source: Option<EventEnrollmentMonitoredSource>, ) -> Result<(), Error>

Store or clear the monitored source that owns Event Enrollment state.
Source§

fn set_acked_transitions_internal( &mut self, _transition_bit: EventTransitionBits, _acknowledged: bool, ) -> Result<(), Error>

Set or clear one Acked_Transitions bit on a received event-state transition. Read more
Source§

fn evaluate_reliability_internal( &mut self, ) -> Result<ReliabilityEvaluation, Error>

Evaluate and, when necessary, mutate this object’s Reliability. Read more
Source§

fn set_reliability_internal( &mut self, _reliability: Reliability, ) -> Result<(), Error>

Apply an internally-derived Reliability value. Read more
Source§

fn set_present_value_internal( &mut self, _value: PropertyValue, ) -> Result<(), Error>

Apply the logical Present_Value supplied by the local application. Read more
Source§

fn set_present_value_from_internal( &mut self, value: PropertyValue, _origin: &CommandOrigin, ) -> Result<(), Error>

set_present_value_internal on behalf of origin, the local Device the application runs in. Read more
Source§

fn set_tracking_value_internal( &mut self, _value: PropertyValue, ) -> Result<(), Error>

Apply the Tracking_Value the local application derived. Read more
Source§

fn report_access_input_internal( &mut self, _input: AccessControlInput, ) -> Result<(), Error>

Apply an input the application reports for an access-control object the server holds (#1132): an Access Point’s access event, a Credential Data Input’s read or an Access Door’s hardware state, each a record whose values change together. See AccessControlInput. Read more
Source§

fn set_controlled_variable_value_internal( &mut self, _value: PropertyValue, ) -> Result<(), Error>

Apply the Controlled_Variable_Value measured by the local application. Read more
Source§

fn add_averaging_sample_internal( &mut self, _sample: Option<PropertyValue>, ) -> Result<(), Error>

Record one sample for an Averaging object. Read more
Source§

fn file_storage_internal(&self) -> Option<&dyn FileStorage>

Borrow this object’s File storage, if it has any. Read more
Source§

fn file_storage_internal_mut(&mut self) -> Option<&mut dyn FileStorage>

Mutably borrow this object’s File storage, if it has any. Read more
Source§

fn log_record_identities_internal(&self) -> Option<Vec<LogRecordIdentity>>

Return stable identities aligned with this object’s resident log records. Read more
Source§

fn log_buffer_internal(&self) -> Option<&dyn LogBufferRecords>

Borrow this object’s Log_Buffer records as ReadRange pages them. Read more
Source§

fn add_trend_record(&mut self, _record: BACnetLogRecord) -> Result<(), Error>

Submit a trend record to an object’s log lifecycle. Read more
Source§

fn add_trend_multiple_record( &mut self, _record: BACnetLogMultipleRecord, ) -> Result<(), Error>

Submit a Trend Log Multiple record, one value per monitored member, to an object’s log lifecycle. Read more
Source§

fn add_event_log_record( &mut self, _record: BACnetEventLogRecord, ) -> Result<(), Error>

Submit an Event Log record to an object’s log lifecycle. Read more
Source§

impl Drop for AuditLogObject

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more