Skip to main content

InventoryManager

Struct InventoryManager 

Source
pub struct InventoryManager { /* private fields */ }
Expand description

In-memory manager of inventory configs and last-run timestamps.

Implementations§

Source§

impl InventoryManager

Source

pub fn new() -> Self

Source

pub fn put(&self, config: InventoryConfig)

Insert / overwrite a configuration. Resets the matching last_run (so the next due() call returns true, matching AWS behaviour where a freshly-PUT inventory config triggers an inventory at the next scheduler tick).

Source

pub fn get(&self, bucket: &str, id: &str) -> Option<InventoryConfig>

Fetch a clone of the configuration. None when not present.

Source

pub fn list_for_bucket(&self, bucket: &str) -> Vec<InventoryConfig>

All configurations attached to bucket (any id). The returned vector is sorted by id for stable list responses.

Source

pub fn list_all(&self) -> Vec<InventoryConfig>

Every (bucket, id, config) triple known to this manager, sorted by (bucket, id) so the v0.7 #46 scanner walks them in deterministic order across runs (= test reproducibility, plus stable log lines). Used by run_scan_once; the existing Self::list_for_bucket helper stays for the per-bucket ListBucketInventoryConfigurations handler.

Source

pub fn delete(&self, bucket: &str, id: &str)

Drop a config + its last_run (idempotent — missing keys are OK).

Source

pub fn due(&self, bucket: &str, id: &str, now: DateTime<Utc>) -> bool

true when the configuration exists and either has never run, or its last_run + frequency_hours has elapsed by now. false when the configuration is missing (no config = nothing to do).

Source

pub fn mark_run(&self, bucket: &str, id: &str, when: DateTime<Utc>)

Stamp (bucket, id) -> when so due will say “false” until the next interval boundary.

Source

pub fn to_json(&self) -> Result<String, Error>

Snapshot to JSON (operators can persist via --inventory-state-file).

Source

pub fn from_json(s: &str) -> Result<Self, Error>

Restore from JSON snapshot. Unknown keys (= without the separator) are silently dropped so a malformed entry can’t poison startup.

Source

pub fn run_once_for_test<I, F>( &self, bucket: &str, id: &str, rows: I, now: DateTime<Utc>, write_object: F, ) -> Result<Vec<String>, RunError>
where I: IntoIterator<Item = InventoryRow>, F: FnMut(&str, &str, Vec<u8>) -> Result<(), RunError>,

Run a single inventory cycle for (bucket, id) against rows, invoking write_object(dst_bucket, dst_key, body) once for the CSV and once for the manifest. Stamps last_run on success. Returns the destination keys of the artefacts written ([csv_key, manifest_key]).

This is the synchronous path the unit tests + the E2E test use, and it is what the future background scheduler in main.rs will call after walking the source bucket. Keeping the row source as an iterator means the inventory module never needs a back-reference to S4Service, which sidesteps the circular dependency between the service handler and a scheduler that lives outside S4Service.

Trait Implementations§

Source§

impl Debug for InventoryManager

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for InventoryManager

Source§

fn default() -> InventoryManager

Returns the “default value” for a type. 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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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> FromExt for T

Source§

fn from_<T>(t: T) -> Self
where Self: From<T>,

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> IntoExt for T

Source§

fn into_<T>(self) -> T
where Self: Into<T>,

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T> TryFromExt for T

Source§

fn try_from_<T>(t: T) -> Result<Self, Self::Error>
where Self: TryFrom<T>,

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> TryIntoExt for T

Source§

fn try_into_<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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