feat(targets): add check_mysql_server_available probe function (#2884)

Signed-off-by: JaySon-Huang <tshent@qq.com>
Co-authored-by: houseme <housemecn@gmail.com>
This commit is contained in:
JaySon
2026-05-10 19:53:45 +08:00
committed by GitHub
parent 53ec1b95d8
commit bafff6d207
12 changed files with 131 additions and 58 deletions
+5 -15
View File
@@ -304,16 +304,6 @@ fn is_valid_identifier_segment(segment: &str) -> bool {
true
}
fn ensure_rustls_provider_installed() {
if rustls::crypto::CryptoProvider::get_default().is_some() {
return;
}
if let Err(err) = rustls::crypto::aws_lc_rs::default_provider().install_default() {
debug!("rustls provider already installed or unavailable for mysql target: {err:?}");
}
}
pub(crate) fn validate_table_name(table: &str) -> Result<(), TargetError> {
let table = table.trim();
@@ -571,7 +561,7 @@ where
.db_name(Some(dsn.database.clone()));
if dsn.tls {
ensure_rustls_provider_installed();
super::ensure_rustls_provider_installed();
let mut ssl_opts = SslOpts::default();
if !self.args.tls_ca.is_empty() {
ssl_opts = ssl_opts.with_root_certs(vec![PathBuf::from(self.args.tls_ca.clone()).into()]);
@@ -666,7 +656,7 @@ where
conn.exec_drop(sql, (event_time.as_str(), event_data))
.await
.map_err(map_mysql_error)?;
.map_err(|err| map_mysql_error(err, "Failed to insert event"))?;
self.delivery_counters.record_success();
debug!(target_id = %self.id, "MySQL event inserted");
@@ -690,16 +680,16 @@ where
/// - `Server(1213|1205|1040)` → `Timeout` (deadlock/lock timeout/too
/// many connections, exponential-backoff retry)
/// - everything else → `Request` (permanent failure)
fn map_mysql_error(err: mysql_async::Error) -> TargetError {
pub(crate) fn map_mysql_error(err: mysql_async::Error, operation: &str) -> TargetError {
match &err {
mysql_async::Error::Io(_) | mysql_async::Error::Driver(_) => TargetError::NotConnected,
mysql_async::Error::Server(server_err) => match server_err.code {
1213 | 1205 | 1040 => {
TargetError::Timeout(format!("MySQL transient server error {}: {}", server_err.code, server_err.message))
}
_ => TargetError::Request(format!("Failed to insert event: {err}")),
_ => TargetError::Request(format!("{operation}: {err}")),
},
_ => TargetError::Request(format!("Failed to insert event: {err}")),
_ => TargetError::Request(format!("{operation}: {err}")),
}
}