summaryrefslogtreecommitdiffstats
path: root/tedge/src/main.rs
blob: 776f83be505755b9d99aab1c57f76cc46476de4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
use clap::Parser;
use tracing::debug;
use tracing::info;

use tedge_cli::Registry;
use tedge_lib::measurement::Measurement;
use tedge_lib::notification::Notification;

#[tokio::main]
#[tracing::instrument]
async fn main() -> miette::Result<()> {
    let args = tedge_cli::cli::Cli::parse();
    let _guard = tedge_cli::logging::setup_logging(
        args.logging,
        args.chrome_logging.as_ref(),
        args.tracy_logging,
        args.tree_logging,
    )?;
    info!("Tedge booting...");
    debug!(?args, "Tedge CLI");

    let registry = tedge_cli::Registry::default();
    info!("Building application");

    let registry = {
        cfg_table::cfg_table! {
            [not(feature = "mqtt")] => {
                tedge_cli::register_plugin!(
                    if feature "builtin_plugin_log" is enabled then
                    register on registry
                    builder of type plugin_log::LogPluginBuilder<(Measurement, Notification)>,
                    with instance {
                        plugin_log::LogPluginBuilder::<(Measurement, Notification)>::default()
                    }
                )
            },

            [feature = "mqtt"] => {
                tedge_cli::register_plugin!(
                    if feature "builtin_plugin_log" is enabled then
                    register on registry
                    builder of type plugin_log::LogPluginBuilder<(Measurement, Notification, plugin_mqtt::IncomingMessage)>,
                    with instance {
                        plugin_log::LogPluginBuilder::<(Measurement, Notification, plugin_mqtt::IncomingMessage)>::default()
                    }
                )
            },
        }
    };

    let registry = tedge_cli::register_plugin!(
        if feature "builtin_plugin_avg" is enabled then
        register on registry
        builder of type plugin_avg::AvgPluginBuilder,
        with instance {
            plugin_avg::AvgPluginBuilder
        }
    );
    let registry = tedge_cli::register_plugin!(
        if feature "builtin_plugin_sysstat" is enabled then
        register on registry
        builder of type plugin_sysstat::SysStatPluginBuilder,
        with instance {
            plugin_sysstat::SysStatPluginBuilder
        }
    );
    let registry = tedge_cli::register_plugin!(
        if feature "builtin_plugin_inotify" is enabled then
        register on registry
        builder of type plugin_inotify::InotifyPluginBuilder,
        with instance {
            plugin_inotify::InotifyPluginBuilder
        }
    );
    let registry = tedge_cli::register_plugin!(
        if feature "builtin_plugin_httpstop" is enabled then
        register on registry
        builder of type plugin_httpstop::HttpStopPluginBuilder,
        with instance {
            plugin_httpstop::HttpStopPluginBuilder
        }
    );
    let registry = tedge_cli::register_plugin!(
        if feature "builtin_plugin_measurement_filter" is enabled then
        register on registry
        builder of type plugin_measurement_filter::MeasurementFilterPluginBuilder,
        with instance {
            plugin_measurement_filter::MeasurementFilterPluginBuilder
        }
    );
    let registry = tedge_cli::register_plugin!(
        if feature "mqtt" is enabled then
        register on registry
        builder of type plugin_mqtt::MqttPluginBuilder,
        with instance {
            plugin_mqtt::MqttPluginBuilder::default()
        }
    );
    let registry = tedge_cli::register_plugin!(
        if feature "mqtt" is enabled then
        register on registry
        builder of type plugin_mqtt_measurement_bridge::MqttMeasurementBridgePluginBuilder,
        with instance {
            plugin_mqtt_measurement_bridge::MqttMeasurementBridgePluginBuilder::default()
        }
    );
    let registry = tedge_cli::register_plugin!(
        if feature "builtin_plugin_notification" is enabled then
        register on registry
        builder of type plugin_notification::NotificationPluginBuilder,
        with instance {
            plugin_notification::NotificationPluginBuilder
        }
    );

    tedge_cli::run_app(args, registry).await
}