Skip to content

Commit 6487a85

Browse files
committed
Add new analyzers
1 parent 26f650c commit 6487a85

3 files changed

Lines changed: 69 additions & 2 deletions

File tree

src/analyze/game_mode.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
use crate::analyze::{Analyzer, StatusPayload};
2+
use crate::mode::QueryMode::BEDROCK;
3+
use async_trait::async_trait;
4+
5+
pub struct GameMode;
6+
7+
#[async_trait]
8+
impl Analyzer for GameMode {
9+
fn enabled(&self, payload: &StatusPayload) -> bool {
10+
payload.mode == BEDROCK
11+
}
12+
13+
async fn analyze(&self, payload: &StatusPayload) {
14+
if let Some(mode) = payload
15+
.full_extra
16+
.as_ref()
17+
.map(|x| x["game_mode"].as_str())
18+
.flatten()
19+
{
20+
log::info!("Game Mode: {}", mode);
21+
}
22+
}
23+
}

src/analyze/mod.rs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
mod favicon;
22
#[cfg(feature = "analyze-forge-info")]
33
mod forge_info;
4+
mod game_mode;
45
mod motd;
56
mod ping;
67
mod player;
8+
mod server_guid;
79
mod version;
810

911
use crate::analyze::favicon::FaviconArgs;
@@ -74,8 +76,12 @@ impl AnalyzerTools<'_> {
7476

7577
#[derive(Debug, Clone, Eq, PartialEq, ValueEnum)]
7678
pub enum AvailableAnalyzers {
79+
#[value(name = "+")]
80+
AllDefaults,
7781
Ping,
7882
Version,
83+
ServerGuid,
84+
GameMode,
7985
Motd,
8086
Player,
8187
Favicon,
@@ -85,7 +91,7 @@ pub enum AvailableAnalyzers {
8591

8692
#[derive(Args, Debug)]
8793
pub struct AnalyzerArgs {
88-
/// Set analyzers can be enabled
94+
/// Set analyzers can be enabled, '+' for enabling all default analyzers
8995
#[arg(short='e', long, value_parser, value_delimiter = ',', default_values = ["ping", "version", "motd", "player", "favicon"])]
9096
analyzers: Vec<AvailableAnalyzers>,
9197

@@ -101,7 +107,14 @@ pub struct AnalyzerArgs {
101107
}
102108

103109
pub fn sanitize_analyzer_args(args: &mut crate::BaseArgs) {
104-
let analyzers = &args.analyzer_args.analyzers;
110+
let analyzers = &mut args.analyzer_args.analyzers;
111+
if analyzers.contains(&AvailableAnalyzers::AllDefaults) {
112+
analyzers.push(AvailableAnalyzers::Ping);
113+
analyzers.push(AvailableAnalyzers::Version);
114+
analyzers.push(AvailableAnalyzers::Motd);
115+
analyzers.push(AvailableAnalyzers::Player);
116+
analyzers.push(AvailableAnalyzers::Favicon);
117+
}
105118
if analyzers.contains(&AvailableAnalyzers::Motd) {
106119
sanitize_motd_args(args);
107120
}
@@ -118,6 +131,14 @@ pub fn init_analyzer_tools(args: &'_ AnalyzerArgs) -> AnalyzerTools<'_> {
118131
analyzers.push(Box::new(version::Version {}));
119132
}
120133

134+
if args.analyzers.contains(&AvailableAnalyzers::ServerGuid) {
135+
analyzers.push(Box::new(server_guid::ServerGuid {}));
136+
}
137+
138+
if args.analyzers.contains(&AvailableAnalyzers::GameMode) {
139+
analyzers.push(Box::new(game_mode::GameMode {}));
140+
}
141+
121142
if args.analyzers.contains(&AvailableAnalyzers::Motd) {
122143
analyzers.push(Box::new(motd::Motd::new(&args.motd_args)));
123144
}

src/analyze/server_guid.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
use crate::analyze::{Analyzer, StatusPayload};
2+
use crate::mode::QueryMode::BEDROCK;
3+
use async_trait::async_trait;
4+
5+
pub struct ServerGuid;
6+
7+
#[async_trait]
8+
impl Analyzer for ServerGuid {
9+
fn enabled(&self, payload: &StatusPayload) -> bool {
10+
payload.mode == BEDROCK
11+
}
12+
13+
async fn analyze(&self, payload: &StatusPayload) {
14+
if let Some(guid) = payload
15+
.full_extra
16+
.as_ref()
17+
.map(|x| x["server_guid"].as_u64())
18+
.flatten()
19+
{
20+
log::info!("Server guid: {}", guid);
21+
}
22+
}
23+
}

0 commit comments

Comments
 (0)