Mercurial > lbo > hg > analyrics
changeset 40:17a1cf5af6f7
Add bot detection
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Mon, 18 Jul 2022 08:03:07 -0700 |
parents | 43cd5bbe858e |
children | 0534f0e4ea7d |
files | schema/log_sqlite.sql src/logsdb.rs src/main.rs |
diffstat | 3 files changed, 9 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/schema/log_sqlite.sql Sat Jul 16 17:38:00 2022 -0700 +++ b/schema/log_sqlite.sql Mon Jul 18 08:03:07 2022 -0700 @@ -8,6 +8,8 @@ origin_country TEXT, origin_city TEXT, + + is_bot integer, ); DROP TABLE IF EXISTS RequestLog;
--- a/src/logsdb.rs Sat Jul 16 17:38:00 2022 -0700 +++ b/src/logsdb.rs Mon Jul 18 08:03:07 2022 -0700 @@ -77,17 +77,19 @@ &mut self, domain: &str, orig: Option<(String, String)>, + is_bot: bool, ) -> Result<u32, Error> { let (country, city) = orig.unwrap_or((Default::default(), Default::default())); Ok(sqlx::query( r#" -INSERT INTO Sessions (start, last, domain, origin_country, origin_city) -VALUES (strftime('%s', 'now'), strftime('%s', 'now'), ?, ?, ?) +INSERT INTO Sessions (start, last, domain, origin_country, origin_city, is_bot) +VALUES (strftime('%s', 'now'), strftime('%s', 'now'), ?, ?, ?, ?) RETURNING id"#, ) .bind(domain) .bind(country) .bind(city) + .bind(is_bot) .fetch_one(&mut *self.0) .await? .get(0))
--- a/src/main.rs Sat Jul 16 17:38:00 2022 -0700 +++ b/src/main.rs Mon Jul 18 08:03:07 2022 -0700 @@ -352,12 +352,14 @@ let sip = ip.to_string(); let sip = headers.0.get_one("x-real-ip").unwrap_or(&sip); + let ua = headers.0.get_one("user-agent").unwrap_or(""); let numip = IpAddr::from_str(sip).unwrap_or(ip); if session_id.is_none() { let orig = geoipdb.as_ref().and_then(|g| g.lookup(numip)); + let is_bot = ua.to_lowercase().contains("bot"); match conn - .start_session(host.as_ref().map(String::as_str).unwrap_or(""), orig) + .start_session(host.as_ref().map(String::as_str).unwrap_or(""), orig, is_bot) .await { Ok(id) => { @@ -372,7 +374,6 @@ } let ntags = tags.len() as u32; - let ua = headers.0.get_one("user-agent").unwrap_or(""); let host: String = host.unwrap_or( headers .0