Skip to content

Commit

Permalink
Merge pull request #2033 from rina23q/improve/1918/support-configurab…
Browse files Browse the repository at this point in the history
…le-tedge-mapper-mqtt-topics

Support configurable tedge-mapper MQTT topics
  • Loading branch information
rina23q authored Jul 7, 2023
2 parents 87fdbb0 + e56f6e3 commit 119fcaa
Show file tree
Hide file tree
Showing 15 changed files with 443 additions and 140 deletions.
19 changes: 17 additions & 2 deletions crates/common/tedge_config/src/tedge_config_cli/new.rs
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,11 @@ define_tedge_config! {
#[tedge_config(default(from_optional_key = "c8y.url"))]
mqtt: HostPort<MQTT_TLS_PORT>,

/// Set of MQTT topics the Cumulocity mapper should subscribe to
#[tedge_config(example = "tedge/alarms/#,tedge/measurements/+")]
#[tedge_config(default(value = "tedge/measurements,tedge/measurements/+,tedge/alarms/+/+,tedge/alarms/+/+/+,tedge/events/+,tedge/events/+/+,tedge/health/+,tedge/health/+/+"))]
topics: TemplatesSet,

},

#[tedge_config(deprecated_name = "azure")] // for 0.1.0 compatibility
Expand All @@ -371,7 +376,12 @@ define_tedge_config! {
#[tedge_config(example = "true")]
#[tedge_config(default(value = true))]
timestamp: bool,
}
},

/// Set of MQTT topics the Azure IoT mapper should subscribe to
#[tedge_config(example = "tedge/measurements,tedge/measurements/+")]
#[tedge_config(default(value = "tedge/measurements,tedge/measurements/+,tedge/health/+,tedge/health/+/+"))]
topics: TemplatesSet,
},

aws: {
Expand All @@ -390,7 +400,12 @@ define_tedge_config! {
#[tedge_config(example = "true")]
#[tedge_config(default(value = true))]
timestamp: bool,
}
},

/// Set of MQTT topics the AWS IoT mapper should subscribe to
#[tedge_config(example = "tedge/measurements,tedge/measurements/+")]
#[tedge_config(default(value = "tedge/measurements,tedge/measurements/+,tedge/alarms/+/+,tedge/alarms/+/+/+,tedge/events/+,tedge/events/+/+,tedge/health/+,tedge/health/+/+"))]
topics: TemplatesSet,
},

mqtt: {
Expand Down
14 changes: 13 additions & 1 deletion crates/core/tedge_mapper/src/aws/mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@ use crate::core::mapper::start_basic_actors;
use async_trait::async_trait;
use aws_mapper_ext::converter::AwsConverter;
use clock::WallClock;
use mqtt_channel::TopicFilter;
use std::path::Path;
use tedge_actors::ConvertingActor;
use tedge_actors::MessageSink;
use tedge_actors::MessageSource;
use tedge_actors::NoConfig;
use tedge_config::new::TEdgeConfig;
use tracing::warn;

const AWS_MAPPER_NAME: &str = "tedge-mapper-aws";

Expand All @@ -32,7 +34,7 @@ impl TEdgeComponent for AwsMapper {
let mut aws_converting_actor = ConvertingActor::builder(
"AwsConverter",
aws_converter,
AwsConverter::in_topic_filter(),
get_topic_filter(&tedge_config),
);

aws_converting_actor.add_input(&mut mqtt_actor);
Expand All @@ -44,3 +46,13 @@ impl TEdgeComponent for AwsMapper {
Ok(())
}
}

fn get_topic_filter(tedge_config: &TEdgeConfig) -> TopicFilter {
let mut topics = TopicFilter::empty();
for topic in tedge_config.aws.topics.0.clone() {
if topics.add(&topic).is_err() {
warn!("The configured topic '{topic}' is invalid and ignored.");
}
}
topics
}
19 changes: 14 additions & 5 deletions crates/core/tedge_mapper/src/az/mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@ use crate::core::mapper::start_basic_actors;
use async_trait::async_trait;
use az_mapper_ext::converter::AzureConverter;
use clock::WallClock;
use mqtt_channel::TopicFilter;
use std::path::Path;
use tedge_actors::ConvertingActor;
use tedge_actors::MessageSink;
use tedge_actors::MessageSource;
use tedge_actors::NoConfig;
use tedge_config::new::TEdgeConfig;
use tracing::warn;

const AZURE_MAPPER_NAME: &str = "tedge-mapper-az";

Expand Down Expand Up @@ -36,11 +38,8 @@ impl TEdgeComponent for AzureMapper {

let az_converter =
AzureConverter::new(tedge_config.az.mapper.timestamp, Box::new(WallClock));
let mut az_converting_actor = ConvertingActor::builder(
"AzConverter",
az_converter,
AzureConverter::in_topic_filter(),
);
let mut az_converting_actor =
ConvertingActor::builder("AzConverter", az_converter, get_topic_filter(&tedge_config));
az_converting_actor.add_input(&mut mqtt_actor);

az_converting_actor.register_peer(NoConfig, mqtt_actor.get_sender());
Expand All @@ -51,3 +50,13 @@ impl TEdgeComponent for AzureMapper {
Ok(())
}
}

fn get_topic_filter(tedge_config: &TEdgeConfig) -> TopicFilter {
let mut topics = TopicFilter::empty();
for topic in tedge_config.az.topics.0.clone() {
if topics.add(&topic).is_err() {
warn!("The configured topic '{topic}' is invalid and ignored.");
}
}
topics
}
16 changes: 0 additions & 16 deletions crates/extensions/aws_mapper_ext/src/converter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ use tedge_actors::Converter;
use tedge_api::serialize::ThinEdgeJsonSerializer;
use tedge_mqtt_ext::MqttMessage;
use tedge_mqtt_ext::Topic;
use tedge_mqtt_ext::TopicFilter;

use crate::error::ConversionError;
use crate::size_threshold::SizeThreshold;
Expand Down Expand Up @@ -37,21 +36,6 @@ impl AwsConverter {
}
}

pub fn in_topic_filter() -> TopicFilter {
vec![
"tedge/measurements",
"tedge/measurements/+",
"tedge/health",
"tedge/health/+",
"tedge/events/+",
"tedge/events/+/+",
"tedge/alarms/+/+",
"tedge/alarms/+/+/+",
]
.try_into()
.unwrap()
}

fn try_convert(&mut self, input: &MqttMessage) -> Result<Vec<MqttMessage>, ConversionError> {
let default_timestamp = self.add_timestamp.then(|| self.clock.now());

Expand Down
9 changes: 0 additions & 9 deletions crates/extensions/az_mapper_ext/src/converter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,11 @@ use tedge_actors::Converter;
use tedge_api::serialize::ThinEdgeJsonSerializer;
use tedge_mqtt_ext::MqttMessage;
use tedge_mqtt_ext::Topic;
use tedge_mqtt_ext::TopicFilter;

const AZ_MQTT_THRESHOLD: usize = 1024 * 128;

#[derive(Debug)]
pub struct MapperConfig {
pub in_topic_filter: TopicFilter,
pub out_topic: Topic,
pub errors_topic: Topic,
}
Expand All @@ -28,7 +26,6 @@ pub struct AzureConverter {
impl AzureConverter {
pub fn new(add_timestamp: bool, clock: Box<dyn Clock>) -> Self {
let mapper_config = MapperConfig {
in_topic_filter: Self::in_topic_filter(),
out_topic: Topic::new_unchecked("az/messages/events/"),
errors_topic: Topic::new_unchecked("tedge/errors"),
};
Expand All @@ -49,12 +46,6 @@ impl AzureConverter {
}
}

pub fn in_topic_filter() -> TopicFilter {
vec!["tedge/measurements", "tedge/measurements/+"]
.try_into()
.unwrap()
}

fn try_convert(&mut self, input: &MqttMessage) -> Result<Vec<MqttMessage>, ConversionError> {
self.size_threshold.validate(input)?;
let default_timestamp = self.add_timestamp.then(|| self.clock.now());
Expand Down
6 changes: 2 additions & 4 deletions crates/extensions/c8y_mapper_ext/src/actor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -180,10 +180,8 @@ impl C8yMapperBuilder {

let box_builder = SimpleMessageBoxBuilder::new("CumulocityMapper", 16);

let mqtt_publisher = mqtt.connect_consumer(
C8yMapperConfig::subscriptions(&config.config_dir).unwrap(),
adapt(&box_builder.get_sender()),
);
let mqtt_publisher =
mqtt.connect_consumer(config.topics.clone(), adapt(&box_builder.get_sender()));
let http_proxy = C8YHttpProxy::new("C8yMapper => C8YHttpProxy", http);
let timer_sender = timer.connect_consumer(NoConfig, adapt(&box_builder.get_sender()));
fs_watcher.register_peer(config.ops_dir.clone(), adapt(&box_builder.get_sender()));
Expand Down
49 changes: 37 additions & 12 deletions crates/extensions/c8y_mapper_ext/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use tedge_config::new::ConfigNotSet;
use tedge_config::new::ReadError;
use tedge_config::new::TEdgeConfig;
use tedge_mqtt_ext::TopicFilter;
use tracing::log::warn;

pub const MQTT_MESSAGE_SIZE_THRESHOLD: usize = 16184;

Expand All @@ -20,6 +21,7 @@ pub struct C8yMapperConfig {
pub service_type: String,
pub ops_dir: PathBuf,
pub c8y_host: String,
pub topics: TopicFilter,
}

impl C8yMapperConfig {
Expand All @@ -30,6 +32,7 @@ impl C8yMapperConfig {
device_type: String,
service_type: String,
c8y_host: String,
topics: TopicFilter,
) -> Self {
let ops_dir = config_dir.join("operations").join("c8y");

Expand All @@ -41,6 +44,7 @@ impl C8yMapperConfig {
service_type,
ops_dir,
c8y_host,
topics,
}
}

Expand All @@ -56,29 +60,29 @@ impl C8yMapperConfig {
let service_type = tedge_config.service.ty.clone();
let c8y_host = tedge_config.c8y_url().or_config_not_set()?.to_string();

// The topics to subscribe = default internal topics + user configurable external topics
let mut topics = Self::internal_topic_filter(&config_dir)?;
for topic in tedge_config.c8y.topics.0.clone() {
if topics.add(&topic).is_err() {
warn!("The configured topic '{topic}' is invalid and ignored.");
}
}

Ok(C8yMapperConfig::new(
config_dir,
logs_path,
device_id,
device_type,
service_type,
c8y_host,
topics,
))
}

pub fn subscriptions(config_dir: &Path) -> Result<TopicFilter, C8yMapperConfigError> {
let operations = Operations::try_new(config_dir.join("operations/c8y"))?;
pub fn internal_topic_filter(config_dir: &Path) -> Result<TopicFilter, C8yMapperConfigError> {
let mut topic_filter: TopicFilter = vec![
"tedge/measurements",
"tedge/measurements/+",
"tedge/alarms/+/+",
"tedge/alarms/+/+/+",
"c8y-internal/alarms/+/+",
"c8y-internal/alarms/+/+/+",
"tedge/events/+",
"tedge/events/+/+",
"tedge/health/+",
"tedge/health/+/+",
C8yTopic::SmartRestRequest.to_string().as_str(),
ResponseTopic::SoftwareListResponse.as_str(),
ResponseTopic::SoftwareUpdateResponse.as_str(),
Expand All @@ -87,12 +91,30 @@ impl C8yMapperConfig {
.try_into()
.expect("topics that mapper should subscribe to");

for topic in operations.topics_for_operations() {
topic_filter.add(&topic)?;
if let Ok(operations) = Operations::try_new(config_dir.join("operations").join("c8y")) {
for topic in operations.topics_for_operations() {
topic_filter.add(&topic)?;
}
}

Ok(topic_filter)
}

/// List of all possible external topics that Cumulocity mapper addresses. For testing purpose.
pub fn default_external_topic_filter() -> TopicFilter {
vec![
"tedge/measurements",
"tedge/measurements/+",
"tedge/alarms/+/+",
"tedge/alarms/+/+/+",
"tedge/events/+",
"tedge/events/+/+",
"tedge/health/+",
"tedge/health/+/+",
]
.try_into()
.unwrap()
}
}

#[derive(Debug, thiserror::Error)]
Expand All @@ -102,6 +124,9 @@ pub enum C8yMapperConfigBuildError {

#[error(transparent)]
FromConfigNotSet(#[from] ConfigNotSet),

#[error(transparent)]
FromC8yMapperConfigError(#[from] C8yMapperConfigError),
}

#[derive(thiserror::Error, Debug)]
Expand Down
9 changes: 6 additions & 3 deletions crates/extensions/c8y_mapper_ext/src/converter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1707,13 +1707,15 @@ mod tests {
CumulocityConverter,
SimpleMessageBox<C8YRestRequest, C8YRestResult>,
) {
tmp_dir.dir("operations").dir("c8y");
tmp_dir.dir("tedge").dir("agent");

let device_id = "test-device".into();
let device_type = "test-device-type".into();
let service_type = "service".into();
let c8y_host = "test.c8y.io".into();

tmp_dir.dir("operations").dir("c8y");
tmp_dir.dir("tedge").dir("agent");
let mut topics = C8yMapperConfig::internal_topic_filter(&tmp_dir.to_path_buf()).unwrap();
topics.add_all(C8yMapperConfig::default_external_topic_filter());

let config = C8yMapperConfig::new(
tmp_dir.to_path_buf(),
Expand All @@ -1722,6 +1724,7 @@ mod tests {
device_type,
service_type,
c8y_host,
topics,
);

let mqtt_builder: SimpleMessageBoxBuilder<MqttMessage, MqttMessage> =
Expand Down
13 changes: 7 additions & 6 deletions crates/extensions/c8y_mapper_ext/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1013,7 +1013,6 @@ EOF
}

#[tokio::test]

async fn custom_operation_timeout_sigterm() {
// The test assures SM Mapper correctly receives custom operation on `c8y/s/ds`
// and executes the custom operation, it will timeout because it will not complete before given timeout
Expand Down Expand Up @@ -1086,7 +1085,6 @@ operation failed due to timeout: duration=1sEOF";
}

#[tokio::test]

async fn custom_operation_timeout_sigkill() {
// The test assures SM Mapper correctly receives custom operation on `c8y/s/ds`
// and executes the custom operation, it will timeout because it will not complete before given timeout
Expand Down Expand Up @@ -1243,14 +1241,16 @@ async fn spawn_c8y_mapper_actor(
SimpleMessageBox<NoMessage, FsWatchEvent>,
SimpleMessageBox<SyncStart, SyncComplete>,
) {
if init {
config_dir.dir("operations").dir("c8y");
}

let device_name = "test-device".into();
let device_type = "test-device-type".into();
let service_type = "service".into();
let c8y_host = "test.c8y.io".into();

if init {
config_dir.dir("operations").dir("c8y");
}
let mut topics = C8yMapperConfig::internal_topic_filter(config_dir.path()).unwrap();
topics.add_all(C8yMapperConfig::default_external_topic_filter());

let config = C8yMapperConfig::new(
config_dir.to_path_buf(),
Expand All @@ -1259,6 +1259,7 @@ async fn spawn_c8y_mapper_actor(
device_type,
service_type,
c8y_host,
topics,
);

let mut mqtt_builder: SimpleMessageBoxBuilder<MqttMessage, MqttMessage> =
Expand Down
Loading

1 comment on commit 119fcaa

@github-actions
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Robot Results

✅ Passed ❌ Failed ⏭️ Skipped Total Pass %
238 0 5 238 100

Passed Tests

Name ⏱️ Duration Suite
Define Child device 1 ID 0.004 s C8Y Child Alarms Rpi
Normal case when the child device does not exist on c8y cloud 4.36 s C8Y Child Alarms Rpi
Normal case when the child device already exists 1.017 s C8Y Child Alarms Rpi
Reconciliation when the new alarm message arrives, restart the mapper 1.3780000000000001 s C8Y Child Alarms Rpi
Reconciliation when the alarm that is cleared 65.524 s C8Y Child Alarms Rpi
Prerequisite Parent 14.137 s Child Conf Mgmt Plugin
Prerequisite Child 0.21 s Child Conf Mgmt Plugin
Child device bootstrapping 12.782 s Child Conf Mgmt Plugin
Snapshot from device 62.189 s Child Conf Mgmt Plugin
Child device config update 62.37 s Child Conf Mgmt Plugin
Configuration types should be detected on file change (without restarting service) 44.995 s Inotify Crate
Check lock file existence in default folder 1.38 s Lock File
Check PID number in lock file 1.6099999999999999 s Lock File
Check PID number in lock file after restarting the services 1.726 s Lock File
Check starting same service twice 0.822 s Lock File
Switch off lock file creation 1.5819999999999999 s Lock File
Set configuration when file exists 6.586 s Configuration Operation
Set configuration when file does not exist 5.425 s Configuration Operation
Set configuration with broken url 5.404 s Configuration Operation
Get configuration 5.215 s Configuration Operation
Get non existent configuration file 4.779 s Configuration Operation
Get non existent configuration type 4.498 s Configuration Operation
Update configuration plugin config via cloud 4.8629999999999995 s Configuration Operation
Modify configuration plugin config via local filesystem modify inplace 2.799 s Configuration Operation
Modify configuration plugin config via local filesystem overwrite 3.279 s Configuration Operation
Update configuration plugin config via local filesystem copy 5.721 s Configuration Operation
Update configuration plugin config via local filesystem move (different directory) 3.291 s Configuration Operation
Update configuration plugin config via local filesystem move (same directory) 2.64 s Configuration Operation
Update the custom operation dynamically 50.163 s Dynamically Reload Operation
Custom operation successful 59.129 s Custom Operation
Custom operation fails 61.72 s Custom Operation
Successful firmware operation 63.135 s Firmware Operation
Install with empty firmware name 44.112 s Firmware Operation
Prerequisite Parent 15.192 s Firmware Operation Child Device
Prerequisite Child 8.178 s Firmware Operation Child Device
Child device firmware update 6.321 s Firmware Operation Child Device
Child device firmware update with cache 6.023 s Firmware Operation Child Device
Firmware plugin supports restart via service manager #1932 5.035 s Firmware Operation Child Device Retry
Update Inventory data via inventory.json 1.307 s Inventory Update
Inventory includes the agent fragment with version information 1.355 s Inventory Update
Retrieve a JWT tokens 37.277 s Jwt Request
Mapper recovers and processes output of ongoing software update request 15.475 s Recover And Publish Software Update Message
Check running collectd 1.024 s Monitor Device Collectd
Is collectd publishing MQTT messages? 3.033 s Monitor Device Collectd
Check thin-edge monitoring 3.944 s Monitor Device Collectd
Check grouping of measurements 8.856 s Monitor Device Collectd
Main device registration 1.835 s Device Registration
Child device registration 2.188 s Device Registration
Supports restarting the device 45.097 s Restart Device
Update tedge version from previous using Cumulocity 71.4 s Tedge Self Update
Test if all c8y services are up 34.52 s Service Monitoring
Test if all c8y services are down 112.127 s Service Monitoring
Test if all c8y services are using configured service type 46.205 s Service Monitoring
Test if all c8y services using default service type when service type configured as empty 228.653 s Service Monitoring
Check health status of tedge-mapper-c8y service on broker stop start 22.038 s Service Monitoring
Check health status of tedge-mapper-c8y service on broker restart 22.937 s Service Monitoring
Check health status of child device service 19.773 s Service Monitoring
Successful shell command with output 3.713 s Shell Operation
Check Successful shell command with literal double quotes output 3.502 s Shell Operation
Execute multiline shell command 3.465 s Shell Operation
Failed shell command 3.404 s Shell Operation
Software list should be populated during startup 28.482 s Software
Install software via Cumulocity 47.17 s Software
Software list should only show currently installed software and not candidates 30.311 s Software
Create and publish the tedge agent supported operations on mapper restart 54.106 s Mapper-Publishing-Agent-Supported-Ops
Agent gets the software list request once it comes up 25.479 s Mapper-Publishing-Agent-Supported-Ops
Child devices support sending simple measurements 1.5979999999999999 s Child Device Telemetry
Child devices support sending custom measurements 1.1179999999999999 s Child Device Telemetry
Child devices support sending custom events 1.06 s Child Device Telemetry
Child devices support sending custom events overriding the type 3.304 s Child Device Telemetry
Child devices support sending custom alarms #1699 1.123 s Child Device Telemetry
Child devices support sending inventory data via c8y topic 1.062 s Child Device Telemetry
Child device supports sending custom child device measurements directly to c8y 1.441 s Child Device Telemetry
Check retained alarms 118.067 s Raise Alarms
Thin-edge devices support sending simple measurements 1.608 s Thin-Edge Device Telemetry
Thin-edge devices support sending simple measurements with custom type 3.26 s Thin-Edge Device Telemetry
Thin-edge devices support sending custom measurements 1.109 s Thin-Edge Device Telemetry
Thin-edge devices support sending custom events 1.1280000000000001 s Thin-Edge Device Telemetry
Thin-edge devices support sending custom events overriding the type 1.117 s Thin-Edge Device Telemetry
Thin-edge devices support sending custom alarms #1699 3.318 s Thin-Edge Device Telemetry
Thin-edge device supports sending custom Thin-edge device measurements directly to c8y 1.447 s Thin-Edge Device Telemetry
Thin-edge device support sending inventory data via c8y topic 1.254 s Thin-Edge Device Telemetry
thin-edge components support a custom config-dir location via flags 26.318 s Config Dir
Validate updated data path used by tedge-agent 0.168 s Data Path Config
Validate updated data path used by c8y-firmware-plugin 10.156 s Data Path Config
Validate updated data path used by tedge-agent 0.8 s Log Path Config
Check existence of init directories 0.72 s Tedge Init
Tedge init and check creation of folders 1.201 s Tedge Init
Check ownership of the folders 1.366 s Tedge Init
Change user/group and check the change 1.001 s Tedge Init
Tedge init and check if default values are restored 0.698 s Tedge Init
Install thin-edge via apt 43.02 s Install Apt
Install latest via script (from current branch) 28.456 s Install Tedge
Install specific version via script (from current branch) 19.494 s Install Tedge
Install latest tedge via script (from main branch) 28.25 s Install Tedge
Install then uninstall latest tedge via script (from main branch) 64.478 s Install Tedge
Support starting and stopping services 33.152 s Service-Control
Supports a reconnect 49.563 s Test-Commands
Supports disconnect then connect 40.412 s Test-Commands
Update unknown setting 40.379 s Test-Commands
Update known setting 31.844 s Test-Commands
It checks MQTT messages using a pattern 67.487 s Test-Mqtt
Stop c8y-configuration-plugin 0.169 s Health C8Y-Configuration-Plugin
Update the service file 0.22 s Health C8Y-Configuration-Plugin
Reload systemd files 0.515 s Health C8Y-Configuration-Plugin
Start c8y-configuration-plugin 0.124 s Health C8Y-Configuration-Plugin
Start watchdog service 10.213 s Health C8Y-Configuration-Plugin
Check PID of c8y-configuration-plugin 0.083 s Health C8Y-Configuration-Plugin
Kill the PID 0.135 s Health C8Y-Configuration-Plugin
Recheck PID of c8y-configuration-plugin 6.48 s Health C8Y-Configuration-Plugin
Compare PID change 0.001 s Health C8Y-Configuration-Plugin
Stop watchdog service 0.153 s Health C8Y-Configuration-Plugin
Remove entry from service file 0.135 s Health C8Y-Configuration-Plugin
Stop c8y-log-plugin 0.126 s Health C8Y-Log-Plugin
Update the service file 0.129 s Health C8Y-Log-Plugin
Reload systemd files 0.458 s Health C8Y-Log-Plugin
Start c8y-log-plugin 0.135 s Health C8Y-Log-Plugin
Start watchdog service 10.192 s Health C8Y-Log-Plugin
Check PID of c8y-log-plugin 0.167 s Health C8Y-Log-Plugin
Kill the PID 0.152 s Health C8Y-Log-Plugin
Recheck PID of c8y-log-plugin 6.427 s Health C8Y-Log-Plugin
Compare PID change 0.001 s Health C8Y-Log-Plugin
Stop watchdog service 0.222 s Health C8Y-Log-Plugin
Remove entry from service file 0.249 s Health C8Y-Log-Plugin
Stop tedge-mapper 0.159 s Health Tedge Mapper C8Y
Update the service file 0.257 s Health Tedge Mapper C8Y
Reload systemd files 0.514 s Health Tedge Mapper C8Y
Start tedge-mapper 0.196 s Health Tedge Mapper C8Y
Start watchdog service 10.367 s Health Tedge Mapper C8Y
Check PID of tedge-mapper 0.212 s Health Tedge Mapper C8Y
Kill the PID 0.495 s Health Tedge Mapper C8Y
Recheck PID of tedge-mapper 6.553 s Health Tedge Mapper C8Y
Compare PID change 0.003 s Health Tedge Mapper C8Y
Stop watchdog service 0.117 s Health Tedge Mapper C8Y
Remove entry from service file 0.108 s Health Tedge Mapper C8Y
Stop tedge-agent 0.071 s Health Tedge-Agent
Update the service file 0.062 s Health Tedge-Agent
Reload systemd files 0.43 s Health Tedge-Agent
Start tedge-agent 0.183 s Health Tedge-Agent
Start watchdog service 10.126 s Health Tedge-Agent
Check PID of tedge-mapper 0.171 s Health Tedge-Agent
Kill the PID 0.323 s Health Tedge-Agent
Recheck PID of tedge-agent 6.572 s Health Tedge-Agent
Compare PID change 0.001 s Health Tedge-Agent
Stop watchdog service 0.071 s Health Tedge-Agent
Remove entry from service file 0.094 s Health Tedge-Agent
Stop tedge-mapper-az 0.122 s Health Tedge-Mapper-Az
Update the service file 0.156 s Health Tedge-Mapper-Az
Reload systemd files 0.433 s Health Tedge-Mapper-Az
Start tedge-mapper-az 0.116 s Health Tedge-Mapper-Az
Start watchdog service 10.171 s Health Tedge-Mapper-Az
Check PID of tedge-mapper-az 0.251 s Health Tedge-Mapper-Az
Kill the PID 0.448 s Health Tedge-Mapper-Az
Recheck PID of tedge-agent 6.579 s Health Tedge-Mapper-Az
Compare PID change 0.001 s Health Tedge-Mapper-Az
Stop watchdog service 0.319 s Health Tedge-Mapper-Az
Remove entry from service file 0.252 s Health Tedge-Mapper-Az
Stop tedge-mapper-collectd 0.2 s Health Tedge-Mapper-Collectd
Update the service file 0.143 s Health Tedge-Mapper-Collectd
Reload systemd files 0.624 s Health Tedge-Mapper-Collectd
Start tedge-mapper-collectd 0.148 s Health Tedge-Mapper-Collectd
Start watchdog service 10.182 s Health Tedge-Mapper-Collectd
Check PID of tedge-mapper-collectd 0.07 s Health Tedge-Mapper-Collectd
Kill the PID 0.346 s Health Tedge-Mapper-Collectd
Recheck PID of tedge-mapper-collectd 6.822 s Health Tedge-Mapper-Collectd
Compare PID change 0.005 s Health Tedge-Mapper-Collectd
Stop watchdog service 0.458 s Health Tedge-Mapper-Collectd
Remove entry from service file 0.155 s Health Tedge-Mapper-Collectd
tedge-collectd-mapper health status 6.096 s Health Tedge-Mapper-Collectd
c8y-log-plugin health status 5.814 s MQTT health endpoints
c8y-configuration-plugin health status 5.88 s MQTT health endpoints
Publish on a local insecure broker 0.567 s Basic Pub Sub
Publish on a local secure broker 3.479 s Basic Pub Sub
Publish on a local secure broker with client authentication 4.185 s Basic Pub Sub
Publish events to subscribed topic 0.272 s Custom Sub Topics Tedge-Mapper-Aws
Publish measurements to unsubscribed topic 5.274 s Custom Sub Topics Tedge-Mapper-Aws
Publish measurements to subscribed topic 0.347 s Custom Sub Topics Tedge-Mapper-Az
Publish measurements to unsubscribed topic 5.297 s Custom Sub Topics Tedge-Mapper-Az
Publish events to subscribed topic 0.513 s Custom Sub Topics Tedge-Mapper-C8Y
Publish measurements to unsubscribed topic 5.362 s Custom Sub Topics Tedge-Mapper-C8Y
Check remote mqtt broker #1773 2.998 s Remote Mqtt Broker
Apply name filter 0.229 s Filter Packages List Output
Apply maintainer filter 0.154 s Filter Packages List Output
Apply both filters 0.243 s Filter Packages List Output
No filters 0.202 s Filter Packages List Output
Both filters but name filter as empty string 0.179 s Filter Packages List Output
Both filters but maintainer filter as empty string 0.169 s Filter Packages List Output
Both filters as empty string 0.213 s Filter Packages List Output
Wrong package name 0.192 s Improve Tedge Apt Plugin Error Messages
Wrong version 0.18 s Improve Tedge Apt Plugin Error Messages
Wrong type 0.431 s Improve Tedge Apt Plugin Error Messages
tedge_connect_test_positive 0.317 s Tedge Connect Test
tedge_connect_test_negative 1.142 s Tedge Connect Test
tedge_connect_test_sm_services 8.412 s Tedge Connect Test
tedge_disconnect_test_sm_services 0.667 s Tedge Connect Test
Install thin-edge.io 19.166 s Call Tedge
call tedge -V 0.08 s Call Tedge
call tedge -h 0.113 s Call Tedge
call tedge -h -V 0.091 s Call Tedge
call tedge help 0.051 s Call Tedge
tedge config list 0.108 s Call Tedge Config List
tedge config list --all 0.079 s Call Tedge Config List
set/unset device.type 0.492 s Call Tedge Config List
set/unset device.key_path 0.575 s Call Tedge Config List
set/unset device.cert_path 0.299 s Call Tedge Config List
set/unset c8y.root_cert_path 0.33 s Call Tedge Config List
set/unset c8y.smartrest.templates 0.355 s Call Tedge Config List
set/unset c8y.topics 0.218 s Call Tedge Config List
set/unset az.root_cert_path 0.217 s Call Tedge Config List
set/unset az.topics 0.281 s Call Tedge Config List
set/unset aws.topics 0.283 s Call Tedge Config List
set/unset aws.url 0.276 s Call Tedge Config List
set/unset aws.root_cert_path 0.295 s Call Tedge Config List
set/unset aws.mapper.timestamp 0.264 s Call Tedge Config List
set/unset az.mapper.timestamp 0.269 s Call Tedge Config List
set/unset mqtt.bind.address 0.335 s Call Tedge Config List
set/unset mqtt.bind.port 0.226 s Call Tedge Config List
set/unset http.bind.port 0.235 s Call Tedge Config List
set/unset tmp.path 0.195 s Call Tedge Config List
set/unset logs.path 0.203 s Call Tedge Config List
set/unset run.path 0.212 s Call Tedge Config List
set/unset firmware.child.update.timeout 0.213 s Call Tedge Config List
set/unset c8y.url 0.242 s Call Tedge Config List
set/unset az.url 0.233 s Call Tedge Config List
set/unset mqtt.external.bind.port 0.23 s Call Tedge Config List
mqtt.external.bind.address 0.221 s Call Tedge Config List
mqtt.external.bind.interface 0.228 s Call Tedge Config List
set/unset mqtt.external.ca_path 0.201 s Call Tedge Config List
set/unset mqtt.external.cert_file 0.186 s Call Tedge Config List
set/unset mqtt.external.key_file 0.254 s Call Tedge Config List
set/unset software.plugin.default 0.208 s Call Tedge Config List
Get Put Delete 1.195 s Http File Transfer Api
Set keys should return value on stdout 0.175 s Tedge Config Get
Unset keys should not return anything on stdout and warnings on stderr 0.205 s Tedge Config Get
Invalid keys should not return anything on stdout and warnings on stderr 0.171 s Tedge Config Get
Set configuration via environment variables 0.587 s Tedge Config Get
Set configuration via environment variables for topics 0.261 s Tedge Config Get
Set unknown configuration via environment variables 0.117 s Tedge Config Get

Please sign in to comment.