Skip to content

Commit ffa1b08

Browse files
committed
refactor: replace pulsar module with a trait
1 parent 99ad35c commit ffa1b08

File tree

17 files changed

+446
-354
lines changed

17 files changed

+446
-354
lines changed

crates/modules/desktop-notifier/src/lib.rs

+26-10
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,39 @@ use anyhow::{Context, Result};
88
use pulsar_core::{
99
event::Threat,
1010
pdk::{
11-
CleanExit, ConfigError, Event, ModuleConfig, ModuleContext, ModuleError, PulsarModule,
12-
ShutdownSignal, Version,
11+
CleanExit, ConfigError, Event, ModuleConfig, ModuleContext, ModuleDetails, ModuleError,
12+
ModuleName, PulsarModule, ShutdownSignal, Version,
1313
},
1414
};
1515

1616
const MODULE_NAME: &str = "desktop-notifier";
1717

18-
pub fn module() -> PulsarModule {
19-
PulsarModule::new(
20-
MODULE_NAME,
21-
Version::parse(env!("CARGO_PKG_VERSION")).unwrap(),
22-
false,
23-
desktop_nitifier_task,
24-
)
18+
pub struct DesktopNotifierModule;
19+
20+
impl PulsarModule for DesktopNotifierModule {
21+
const DEFAULT_ENABLED: bool = false;
22+
23+
fn name(&self) -> ModuleName {
24+
MODULE_NAME.into()
25+
}
26+
27+
fn details(&self) -> ModuleDetails {
28+
ModuleDetails {
29+
version: Version::parse(env!("CARGO_PKG_VERSION")).unwrap(),
30+
enabled_by_default: Self::DEFAULT_ENABLED,
31+
}
32+
}
33+
34+
fn start(
35+
&self,
36+
ctx: ModuleContext,
37+
shutdown: ShutdownSignal,
38+
) -> impl std::future::Future<Output = Result<CleanExit, ModuleError>> + Send + 'static {
39+
desktop_notifier_task(ctx, shutdown)
40+
}
2541
}
2642

27-
async fn desktop_nitifier_task(
43+
async fn desktop_notifier_task(
2844
ctx: ModuleContext,
2945
mut shutdown: ShutdownSignal,
3046
) -> Result<CleanExit, ModuleError> {

crates/modules/file-system-monitor/src/lib.rs

+26-9
Original file line numberDiff line numberDiff line change
@@ -83,19 +83,36 @@ pub mod pulsar {
8383
use pulsar_core::{
8484
event::FileFlags,
8585
pdk::{
86-
CleanExit, ConfigError, Event, IntoPayload, ModuleConfig, ModuleContext, ModuleError,
87-
ModuleSender, Payload, PulsarModule, ShutdownSignal, Version,
86+
CleanExit, ConfigError, Event, IntoPayload, ModuleConfig, ModuleContext, ModuleDetails,
87+
ModuleError, ModuleName, ModuleSender, Payload, PulsarModule, ShutdownSignal, Version,
8888
},
8989
};
9090
use tokio::{fs::File, io::AsyncReadExt};
9191

92-
pub fn module() -> PulsarModule {
93-
PulsarModule::new(
94-
MODULE_NAME,
95-
Version::parse(env!("CARGO_PKG_VERSION")).unwrap(),
96-
true,
97-
fs_monitor_task,
98-
)
92+
pub struct FileSystemMonitorModule;
93+
94+
impl PulsarModule for FileSystemMonitorModule {
95+
const DEFAULT_ENABLED: bool = true;
96+
97+
fn name(&self) -> ModuleName {
98+
MODULE_NAME.into()
99+
}
100+
101+
fn details(&self) -> ModuleDetails {
102+
ModuleDetails {
103+
version: Version::parse(env!("CARGO_PKG_VERSION")).unwrap(),
104+
enabled_by_default: Self::DEFAULT_ENABLED,
105+
}
106+
}
107+
108+
fn start(
109+
&self,
110+
ctx: ModuleContext,
111+
shutdown: ShutdownSignal,
112+
) -> impl std::future::Future<Output = Result<CleanExit, ModuleError>> + Send + 'static
113+
{
114+
fs_monitor_task(ctx, shutdown)
115+
}
99116
}
100117

101118
async fn fs_monitor_task(

crates/modules/logger/src/lib.rs

+25-9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use pulsar_core::pdk::{
2-
CleanExit, ConfigError, Event, ModuleConfig, ModuleContext, ModuleError, PulsarModule,
3-
ShutdownSignal, Version,
2+
CleanExit, ConfigError, Event, ModuleConfig, ModuleContext, ModuleDetails, ModuleError,
3+
ModuleName, PulsarModule, ShutdownSignal, Version,
44
};
55
use std::{
66
borrow::Cow,
@@ -19,13 +19,29 @@ use thiserror::Error;
1919
const UNIX_SOCK_PATHS: [&str; 3] = ["/dev/log", "/var/run/syslog", "/var/run/log"];
2020
const MODULE_NAME: &str = "logger";
2121

22-
pub fn module() -> PulsarModule {
23-
PulsarModule::new(
24-
MODULE_NAME,
25-
Version::parse(env!("CARGO_PKG_VERSION")).unwrap(),
26-
true,
27-
logger_task,
28-
)
22+
pub struct LoggerModule;
23+
24+
impl PulsarModule for LoggerModule {
25+
const DEFAULT_ENABLED: bool = true;
26+
27+
fn name(&self) -> ModuleName {
28+
MODULE_NAME.into()
29+
}
30+
31+
fn details(&self) -> ModuleDetails {
32+
ModuleDetails {
33+
version: Version::parse(env!("CARGO_PKG_VERSION")).unwrap(),
34+
enabled_by_default: Self::DEFAULT_ENABLED,
35+
}
36+
}
37+
38+
fn start(
39+
&self,
40+
ctx: ModuleContext,
41+
shutdown: ShutdownSignal,
42+
) -> impl std::future::Future<Output = Result<CleanExit, ModuleError>> + Send + 'static {
43+
logger_task(ctx, shutdown)
44+
}
2945
}
3046

3147
async fn logger_task(

crates/modules/network-monitor/src/lib.rs

+26-9
Original file line numberDiff line numberDiff line change
@@ -178,18 +178,35 @@ pub mod pulsar {
178178
use pulsar_core::{
179179
event::{DnsAnswer, DnsQuestion, Host},
180180
pdk::{
181-
CleanExit, IntoPayload, ModuleContext, ModuleError, Payload, PulsarModule,
182-
ShutdownSignal, Version,
181+
CleanExit, IntoPayload, ModuleContext, ModuleDetails, ModuleError, ModuleName, Payload,
182+
PulsarModule, ShutdownSignal, Version,
183183
},
184184
};
185185

186-
pub fn module() -> PulsarModule {
187-
PulsarModule::new(
188-
MODULE_NAME,
189-
Version::parse(env!("CARGO_PKG_VERSION")).unwrap(),
190-
true,
191-
network_monitor_task,
192-
)
186+
pub struct NetworkMonitorModule;
187+
188+
impl PulsarModule for NetworkMonitorModule {
189+
const DEFAULT_ENABLED: bool = true;
190+
191+
fn name(&self) -> ModuleName {
192+
MODULE_NAME.into()
193+
}
194+
195+
fn details(&self) -> ModuleDetails {
196+
ModuleDetails {
197+
version: Version::parse(env!("CARGO_PKG_VERSION")).unwrap(),
198+
enabled_by_default: Self::DEFAULT_ENABLED,
199+
}
200+
}
201+
202+
fn start(
203+
&self,
204+
ctx: ModuleContext,
205+
shutdown: ShutdownSignal,
206+
) -> impl std::future::Future<Output = Result<CleanExit, ModuleError>> + Send + 'static
207+
{
208+
network_monitor_task(ctx, shutdown)
209+
}
193210
}
194211

195212
async fn network_monitor_task(

crates/modules/process-monitor/src/lib.rs

+26-9
Original file line numberDiff line numberDiff line change
@@ -145,18 +145,35 @@ pub mod pulsar {
145145
use super::*;
146146
use bpf_common::{containers::ContainerId, program::BpfEvent, BpfSenderWrapper};
147147
use pulsar_core::pdk::{
148-
process_tracker::TrackerUpdate, CleanExit, IntoPayload, ModuleContext, ModuleError,
149-
Payload, PulsarModule, ShutdownSignal, Version,
148+
process_tracker::TrackerUpdate, CleanExit, IntoPayload, ModuleContext, ModuleDetails,
149+
ModuleError, ModuleName, Payload, PulsarModule, ShutdownSignal, Version,
150150
};
151151
use tokio::sync::mpsc;
152152

153-
pub fn module() -> PulsarModule {
154-
PulsarModule::new(
155-
MODULE_NAME,
156-
Version::parse(env!("CARGO_PKG_VERSION")).unwrap(),
157-
true,
158-
process_monitor_task,
159-
)
153+
pub struct ProcessMonitorModule;
154+
155+
impl PulsarModule for ProcessMonitorModule {
156+
const DEFAULT_ENABLED: bool = true;
157+
158+
fn name(&self) -> ModuleName {
159+
MODULE_NAME.into()
160+
}
161+
162+
fn details(&self) -> ModuleDetails {
163+
ModuleDetails {
164+
version: Version::parse(env!("CARGO_PKG_VERSION")).unwrap(),
165+
enabled_by_default: Self::DEFAULT_ENABLED,
166+
}
167+
}
168+
169+
fn start(
170+
&self,
171+
ctx: ModuleContext,
172+
shutdown: ShutdownSignal,
173+
) -> impl std::future::Future<Output = Result<CleanExit, ModuleError>> + Send + 'static
174+
{
175+
process_monitor_task(ctx, shutdown)
176+
}
160177
}
161178

162179
async fn process_monitor_task(

crates/modules/rules-engine/src/lib.rs

+25-9
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ use std::path::PathBuf;
22

33
use engine::PulsarEngine;
44
use pulsar_core::pdk::{
5-
CleanExit, ConfigError, ModuleConfig, ModuleContext, ModuleError, PulsarModule, ShutdownSignal,
6-
Version,
5+
CleanExit, ConfigError, ModuleConfig, ModuleContext, ModuleDetails, ModuleError, ModuleName,
6+
PulsarModule, ShutdownSignal, Version,
77
};
88

99
mod dsl;
@@ -15,13 +15,29 @@ pub use engine::RuleEngineData;
1515
const DEFAULT_RULES_PATH: &str = "/var/lib/pulsar/rules";
1616
const MODULE_NAME: &str = "rules-engine";
1717

18-
pub fn module() -> PulsarModule {
19-
PulsarModule::new(
20-
MODULE_NAME,
21-
Version::parse(env!("CARGO_PKG_VERSION")).unwrap(),
22-
true,
23-
rules_engine_task,
24-
)
18+
pub struct RuleEngineModule;
19+
20+
impl PulsarModule for RuleEngineModule {
21+
const DEFAULT_ENABLED: bool = true;
22+
23+
fn name(&self) -> ModuleName {
24+
MODULE_NAME.into()
25+
}
26+
27+
fn details(&self) -> ModuleDetails {
28+
ModuleDetails {
29+
version: Version::parse(env!("CARGO_PKG_VERSION")).unwrap(),
30+
enabled_by_default: Self::DEFAULT_ENABLED,
31+
}
32+
}
33+
34+
fn start(
35+
&self,
36+
ctx: ModuleContext,
37+
shutdown: ShutdownSignal,
38+
) -> impl std::future::Future<Output = Result<CleanExit, ModuleError>> + Send + 'static {
39+
rules_engine_task(ctx, shutdown)
40+
}
2541
}
2642

2743
async fn rules_engine_task(

crates/modules/smtp-notifier/src/lib.rs

+25-9
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,38 @@ use lettre::{
99
use pulsar_core::{
1010
event::Threat,
1111
pdk::{
12-
CleanExit, ConfigError, ModuleConfig, ModuleContext, ModuleError, PulsarModule,
13-
ShutdownSignal, Version,
12+
CleanExit, ConfigError, ModuleConfig, ModuleContext, ModuleDetails, ModuleError,
13+
ModuleName, PulsarModule, ShutdownSignal, Version,
1414
},
1515
};
1616

1717
mod template;
1818

1919
const MODULE_NAME: &str = "smtp-notifier";
2020

21-
pub fn module() -> PulsarModule {
22-
PulsarModule::new(
23-
MODULE_NAME,
24-
Version::parse(env!("CARGO_PKG_VERSION")).unwrap(),
25-
false,
26-
smtp_notifier_task,
27-
)
21+
pub struct SmtpNotifierModule;
22+
23+
impl PulsarModule for SmtpNotifierModule {
24+
const DEFAULT_ENABLED: bool = false;
25+
26+
fn name(&self) -> ModuleName {
27+
MODULE_NAME.into()
28+
}
29+
30+
fn details(&self) -> ModuleDetails {
31+
ModuleDetails {
32+
version: Version::parse(env!("CARGO_PKG_VERSION")).unwrap(),
33+
enabled_by_default: Self::DEFAULT_ENABLED,
34+
}
35+
}
36+
37+
fn start(
38+
&self,
39+
ctx: ModuleContext,
40+
shutdown: ShutdownSignal,
41+
) -> impl std::future::Future<Output = Result<CleanExit, ModuleError>> + Send + 'static {
42+
smtp_notifier_task(ctx, shutdown)
43+
}
2844
}
2945

3046
async fn smtp_notifier_task(

0 commit comments

Comments
 (0)