pub struct DiscoveredSoftware {
pub package_identifier: String,
pub name: String,
pub installed_version: String,
pub targets: Vec<DiscoveryTarget>,
pub extra: Option<Value>,
pub qualifier: Option<String>,
pub plugin_package_identifier: Option<String>,
pub featured: bool,
pub installed_display_version: Option<String>,
}Expand description
A piece of software discovered on the local system by a plugin.
installed_version is required — plugins that cannot determine a version
must omit the item from results entirely.
This type is the canonical shared definition used in both the agent/plugin
layer and the wire protocol. The uptrakit-plugin-core crate re-exports it.
§Discovery targets
The targets field drives plugin-config creation and role assignment on the
controller. When non-empty, the controller processes each target generically
(find-or-create plugin config, create role assignments). When empty, the
controller falls back to the plugin_config_id on the enclosing
DiscoveryPluginResult.
The extra field is purely informational metadata (e.g. Docker’s container
names) — the controller never interprets it for config synthesis.
§Per-row qualifier
The qualifier field selects which host_software_item row to create or
reuse. None = unqualified (default behaviour, one row per software item per
host). Docker uses the container name here so that each container gets its
own tracking row even when multiple containers run the same image.
§Plugin package identifier
plugin_package_identifier, when set, overrides package_identifier as the
value stored in host_software_item_plugin.package_identifier for plugin
operations. None = use package_identifier (existing behaviour).
§Pinning
When featured is true, the controller marks the software item as
featured on first creation so it gets individual MQTT entities and
prominent visibility. Default false — item starts unfeatured
(bulk/aggregate view only). The controller only applies featured: true
when creating a new software_items row. Subsequent discoveries do
not override a user’s manual feature/unfeature choice.
Fields§
§package_identifier: StringPlugin-specific identifier for this software (e.g., package name, app slug).
name: StringHuman-readable display name.
installed_version: StringCurrently installed version (required; plugins omit items with unknown versions).
targets: Vec<DiscoveryTarget>Target plugin configurations for managing this item.
Empty = use the discovering plugin’s own config for all roles.
extra: Option<Value>Optional informational metadata (not used for config synthesis).
Example: Docker’s {"containers": ["web-server"]}.
qualifier: Option<String>Row discriminator within host_software_items.
None = unqualified (default). Docker sets this to the container name
so that each container produces its own host_software_item row even
when multiple containers run the same image.
plugin_package_identifier: Option<String>Override for the package_identifier stored in
host_software_item_plugin.package_identifier.
None = use package_identifier (existing behaviour).
featured: boolWhen true, the controller marks the software item as featured on
first creation. Default false — item starts unfeatured.
installed_display_version: Option<String>Plugin-provided display version for the installed version (e.g. Docker image publish date).
None when the plugin cannot determine a display version during discovery.
Trait Implementations§
Source§impl Clone for DiscoveredSoftware
impl Clone for DiscoveredSoftware
Source§fn clone(&self) -> DiscoveredSoftware
fn clone(&self) -> DiscoveredSoftware
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for DiscoveredSoftware
impl Debug for DiscoveredSoftware
Source§impl<'de> Deserialize<'de> for DiscoveredSoftware
impl<'de> Deserialize<'de> for DiscoveredSoftware
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<DiscoveredSoftware, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<DiscoveredSoftware, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
impl Eq for DiscoveredSoftware
Source§impl PartialEq for DiscoveredSoftware
impl PartialEq for DiscoveredSoftware
Source§impl Serialize for DiscoveredSoftware
impl Serialize for DiscoveredSoftware
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
impl StructuralPartialEq for DiscoveredSoftware
Source§impl WireValidate for DiscoveredSoftware
impl WireValidate for DiscoveredSoftware
Source§fn wire_validate(&self) -> Result<(), WireValidationError>
fn wire_validate(&self) -> Result<(), WireValidationError>
Auto Trait Implementations§
impl Freeze for DiscoveredSoftware
impl RefUnwindSafe for DiscoveredSoftware
impl Send for DiscoveredSoftware
impl Sync for DiscoveredSoftware
impl Unpin for DiscoveredSoftware
impl UnsafeUnpin for DiscoveredSoftware
impl UnwindSafe for DiscoveredSoftware
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.