Skip to content

Commit a330579

Browse files
committed
Use Aho-Corasick instead of regex, add extra data to items, propagate extra configuration
1 parent 066e343 commit a330579

File tree

4 files changed

+46
-59
lines changed

4 files changed

+46
-59
lines changed

jvm_bare_agent/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ crate_type = [ "cdylib" ]
1010
[dependencies]
1111
pretty_env_logger = "0.2.5"
1212
lazy_static = "1.2.0"
13-
regex = "1"
13+
aho-corasick = "0.6.10"
1414
log = "0.4"
1515
toml = "0.4"
1616
rollbar-jvm = { path = "../jvm_core" }

jvm_bare_agent/src/exceptions.rs

Lines changed: 26 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::rollbar::Rollbar;
2+
use aho_corasick::{AcAutomaton, Automaton};
23
use lazy_static::lazy_static;
3-
use regex::RegexSet;
44
use rollbar_jvm::env::JvmTiEnv;
55
use rollbar_jvm::errors::*;
66
use rollbar_jvm::jni::JniEnv;
@@ -44,58 +44,32 @@ pub fn callback(
4444
Ok(())
4545
}
4646

47-
#[allow(clippy::trivial_regex)]
4847
fn should_ignore(class: &str) -> bool {
4948
lazy_static! {
50-
static ref RE: RegexSet = RegexSet::new(&[
51-
r"^com\.sun\.org",
52-
r"^javax\.naming\.",
53-
r"^java\.io\.EOFException",
54-
r"^java\.io\.FileNotFoundException",
55-
r"^java\.io\.IOException",
56-
r"^java\.lang\.ArrayIndexOutOfBoundsException",
57-
r"^java\.lang\.ClassNotFoundException",
58-
r"^java\.lang\.IllegalStateException",
59-
r"^java\.lang\.InterruptedException",
60-
r"^java\.lang\.NoSuchFieldError",
61-
r"^java\.lang\.NoSuchFieldException",
62-
r"^java\.lang\.NoSuchMethodException",
63-
r"^java\.net\.MalformedURLException",
64-
r"^java\.net\.SocketException",
65-
r"^java\.security\.cert\.CertificateParsingException",
66-
r"^java\.security\.PrivilegedActionException",
67-
r"^java\.security\.SignatureException",
68-
r"^java\.util\.zip\.ZipException",
69-
r"^javax\.crypto\.BadPaddingException",
70-
])
71-
.unwrap();
49+
static ref AUT: AcAutomaton<&'static str> = [
50+
"com.sun.org",
51+
"javax.naming.",
52+
"java.io.EOFException",
53+
"java.io.FileNotFoundException",
54+
"java.io.IOException",
55+
"java.lang.ArrayIndexOutOfBoundsException",
56+
"java.lang.ClassNotFoundException",
57+
"java.lang.IllegalStateException",
58+
"java.lang.InterruptedException",
59+
"java.lang.NoSuchFieldError",
60+
"java.lang.NoSuchFieldException",
61+
"java.lang.NoSuchMethodException",
62+
"java.net.MalformedURLException",
63+
"java.net.SocketException",
64+
"java.security.cert.CertificateParsingException",
65+
"java.security.PrivilegedActionException",
66+
"java.security.SignatureException",
67+
"java.util.zip.ZipException",
68+
"javax.crypto.BadPaddingException",
69+
]
70+
.iter()
71+
.cloned()
72+
.collect();
7273
}
73-
RE.is_match(class)
74+
AUT.find(class).next().is_some()
7475
}
75-
/*
76-
if class.starts_with("com.sun.org") || class.starts_with("javax.naming.") {
77-
return true;
78-
}
79-
match class {
80-
"java.io.EOFException"
81-
| "java.io.FileNotFoundException"
82-
| "java.io.IOException"
83-
| "java.lang.ArrayIndexOutOfBoundsException"
84-
| "java.lang.ClassNotFoundException"
85-
| "java.lang.IllegalStateException"
86-
| "java.lang.InterruptedException"
87-
| "java.lang.NoSuchFieldError"
88-
| "java.lang.NoSuchFieldException"
89-
| "java.lang.NoSuchMethodException"
90-
| "java.net.MalformedURLException"
91-
| "java.net.SocketException"
92-
| "java.security.cert.CertificateParsingException"
93-
| "java.security.PrivilegedActionException"
94-
| "java.security.SignatureException"
95-
| "java.util.zip.ZipException"
96-
| "javax.crypto.BadPaddingException" => return true,
97-
_ => {}
98-
}
99-
false
100-
}
101-
*/

jvm_bare_agent/src/lib.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,17 @@ use rollbar_jvm::env::JvmTiEnv;
1414
use rollbar_jvm::jni::JniEnv;
1515
use rollbar_jvm::jvmti::*;
1616
use rollbar_rust::Configuration;
17+
use std::env;
1718
use std::os::raw::{c_char, c_void};
1819
use std::sync::atomic::{AtomicBool, Ordering, ATOMIC_BOOL_INIT};
1920
use std::sync::Once;
20-
use std::env;
2121

2222
static INIT_SUCCESS: AtomicBool = ATOMIC_BOOL_INIT;
2323

2424
static mut CONFIG: Option<Configuration> = None;
2525
static INIT: Once = Once::new();
2626

27-
const ACCESS_TOKEN_KEY: &'static str = "ROLLBAR_TOKEN";
27+
const ACCESS_TOKEN_KEY: &str = "ROLLBAR_TOKEN";
2828

2929
lazy_static! {
3030
static ref ROLLBAR: Rollbar = build_client();
@@ -53,10 +53,10 @@ fn initialize_configuration() -> bool {
5353
let mut conf = Configuration::default();
5454
conf.access_token = Some(token);
5555
CONFIG = Some(conf);
56-
},
56+
}
5757
Err(e) => {
5858
debug!("Error loading {}: {}", ACCESS_TOKEN_KEY, e);
59-
},
59+
}
6060
}
6161
}
6262
}

jvm_bare_agent/src/rollbar.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use rollbar_rust::types::{DataBuilder, Item};
1+
use rollbar_rust::types::{DataBuilder, Item, Notifier, Server};
22
use rollbar_rust::{constants, Configuration, HttpTransport, Transport, Uuid};
33
use std::time::Duration;
44

@@ -25,9 +25,22 @@ impl Rollbar {
2525

2626
pub fn send(&self, builder: DataBuilder) {
2727
let data = builder
28-
.notifier(constants::NOTIFIER.clone())
28+
.notifier(
29+
Notifier::builder()
30+
.name("rollbar-jvm-agent")
31+
.version(constants::VERSION)
32+
.build(),
33+
)
2934
.platform(constants::PLATFORM)
3035
.uuid(Uuid::new())
36+
.maybe_environment(self.conf.environment.clone())
37+
.server(
38+
Server::builder()
39+
.cpu(constants::ARCH)
40+
.maybe_host(self.conf.host.clone())
41+
.maybe_code_version(self.conf.code_version.clone())
42+
.build(),
43+
)
3144
.build();
3245

3346
let item = Item::builder()

0 commit comments

Comments
 (0)