Mercurial > lbo > hg > analyrics
changeset 77:fd0237049be0
Show paths instead of tags & apply rust fixes
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Mon, 31 Jul 2023 09:31:37 +0200 |
parents | a58e1922e173 |
children | 2c97a02b7bc3 |
files | assets/index_dashboard.html.hbs src/cacheresponder.rs src/configdb.rs src/db.rs src/fromparam.rs src/geoip.rs src/guards.rs src/logsdb.rs src/main.rs src/template_types.rs |
diffstat | 10 files changed, 52 insertions(+), 44 deletions(-) [+] |
line wrap: on
line diff
--- a/assets/index_dashboard.html.hbs Fri Sep 09 07:08:20 2022 +0200 +++ b/assets/index_dashboard.html.hbs Mon Jul 31 09:31:37 2023 +0200 @@ -120,11 +120,11 @@ <div class="plotframe fullwidth">Recent Sessions <table align="center" id="sessionstable"> <tr> - <th>Start</th><th>Duration</th><th>Requests</th><th>Tags</th><th>Referer</th><th>Country/City</th><th>User Agent</th> + <th>Start</th><th>Duration</th><th>Requests</th><th>Paths</th><th>Referer</th><th>Country/City</th><th>User Agent</th> </tr> {{ #each recentSessions }} <tr> - <td>{{ start }}</td><td>{{ duration }}</td><td>{{ count }}</td><td>{{ alltags }}</td><td>{{ refer }}</td><td>{{ origin_country }} {{ origin_city }}</td><td>{{ ua }}</td> + <td>{{ start }}</td><td>{{ duration }}</td><td>{{ count }}</td><td>{{ paths }}</td><td>{{ refer }}</td><td>{{ origin_country }} {{ origin_city }}</td><td>{{ ua }}</td> </tr> {{ /each }} </table>
--- a/src/cacheresponder.rs Fri Sep 09 07:08:20 2022 +0200 +++ b/src/cacheresponder.rs Mon Jul 31 09:31:37 2023 +0200 @@ -1,10 +1,10 @@ -use log::info; + use std::convert::Into; use rocket::data::Data; use rocket::http::Header; -use rocket::http::Method; + use rocket::request::Request; use rocket::response::Responder; use rocket::route::Handler;
--- a/src/configdb.rs Fri Sep 09 07:08:20 2022 +0200 +++ b/src/configdb.rs Mon Jul 31 09:31:37 2023 +0200 @@ -1,12 +1,12 @@ -use crate::db::{DBType, PoolType}; +use crate::db::{PoolType}; use anyhow::Error; -use log::{debug, error, info, warn, Level}; +use log::{warn}; use rand::distributions::{Alphanumeric, DistString}; -use rocket::futures::StreamExt; -use rocket_db_pools::sqlx::{Executor, Row, Sqlite, SqlitePool}; -use rocket_db_pools::{Connection, Database, Pool}; + +use rocket_db_pools::sqlx::{Executor, Row, Sqlite}; +use rocket_db_pools::{Database, Pool}; use sqlx::prelude::FromRow; fn generate_salt() -> String {
--- a/src/db.rs Fri Sep 09 07:08:20 2022 +0200 +++ b/src/db.rs Mon Jul 31 09:31:37 2023 +0200 @@ -1,6 +1,6 @@ -use rocket_db_pools::sqlx::{Executor, Row}; -use rocket_db_pools::{Connection, Database, Pool}; -use sqlx::prelude::FromRow; + + + #[cfg(feature = "sqlite")] use rocket_db_pools::sqlx::{Sqlite, SqlitePool};
--- a/src/fromparam.rs Fri Sep 09 07:08:20 2022 +0200 +++ b/src/fromparam.rs Mon Jul 31 09:31:37 2023 +0200 @@ -1,4 +1,4 @@ -use rocket::request::FromParam; + -use anyhow::Error; -use time::{Duration, OffsetDateTime}; + +
--- a/src/geoip.rs Fri Sep 09 07:08:20 2022 +0200 +++ b/src/geoip.rs Mon Jul 31 09:31:37 2023 +0200 @@ -1,7 +1,7 @@ -use anyhow::{Context, Error}; +use anyhow::{Error}; use log::warn; use maxminddb::{ - geoip2::{City, Country}, + geoip2::{City}, Reader, };
--- a/src/guards.rs Fri Sep 09 07:08:20 2022 +0200 +++ b/src/guards.rs Mon Jul 31 09:31:37 2023 +0200 @@ -1,7 +1,7 @@ -use anyhow::{self, Context, Error}; +use anyhow::{self, Error}; use rocket::http::HeaderMap; -use rocket::request::{self, FlashMessage, FromRequest, Outcome, Request}; +use rocket::request::{FromRequest, Outcome, Request}; pub const USER_ID_COOKIE_KEY: &str = "user_id";
--- a/src/logsdb.rs Fri Sep 09 07:08:20 2022 +0200 +++ b/src/logsdb.rs Mon Jul 31 09:31:37 2023 +0200 @@ -38,6 +38,7 @@ pub origin_city: Option<String>, pub ua: String, pub alltags: String, + pub paths: String, } impl<'p> LogsDBSession<'p, Sqlite> { @@ -215,7 +216,7 @@ ctx: &LogsQueryContext, n: i64, ) -> Result<Vec<(String, i64)>, Error> { - let tz_offset = ctx.tz_offset; + let _tz_offset = ctx.tz_offset; let include_bots = if ctx.include_bots { 1 } else { 0 }; let result = sqlx::query( r#" @@ -308,7 +309,7 @@ &mut self, ctx: &LogsQueryContext, ) -> Result<Vec<(String, i64)>, Error> { - let tz_offset = ctx.tz_offset; + let _tz_offset = ctx.tz_offset; let include_bots = if ctx.include_bots { 1 } else { 0 }; let result = sqlx::query( r#" @@ -370,7 +371,7 @@ ctx: &LogsQueryContext, n: i64, ) -> Result<Vec<RecentSessionsRow>, Error> { - let tz_offset = ctx.tz_offset; + let _tz_offset = ctx.tz_offset; let include_bots = if ctx.include_bots { 1 } else { 0 }; // Check later if this query possibly has bad scaling behavior due to no restrictions on // requesttags query. @@ -383,7 +384,8 @@ Sessions.origin_country AS origin_country, Sessions.origin_city AS origin_city, RequestLog.ua AS ua, - GROUP_CONCAT(tagstring, ",") AS alltags + GROUP_CONCAT(tagstring, ", ") AS alltags + GROUP_CONCAT(RequestLog.Path, ", ") AS paths FROM RequestLog JOIN Sessions ON (RequestLog.session = Sessions.id) LEFT JOIN
--- a/src/main.rs Fri Sep 09 07:08:20 2022 +0200 +++ b/src/main.rs Mon Jul 31 09:31:37 2023 +0200 @@ -12,22 +12,22 @@ use crate::guards::{HeadersGuard, LoggedInGuard, USER_ID_COOKIE_KEY}; use crate::logsdb::{LogsDB, LogsDBSession}; -use anyhow::{self, Context, Error}; + use either::Either; -use log::{debug, error, info, warn, Level}; +use log::{error}; use time::{Date, Duration, OffsetDateTime}; use rocket::form::Form; -use rocket::fs::{relative, FileServer, NamedFile}; +use rocket::fs::{FileServer, NamedFile}; use rocket::futures::StreamExt; -use rocket::http::{Cookie, CookieJar, HeaderMap, RawStr, Status}; -use rocket::request::{self, FlashMessage, FromRequest, Outcome, Request}; -use rocket::response::{self, Flash, Redirect, Responder}; +use rocket::http::{Cookie, CookieJar, Status}; +use rocket::request::{FlashMessage}; +use rocket::response::{Flash, Redirect, Responder}; use rocket::serde::json::{json, Value}; -use rocket::serde::{self, Serialize}; +use rocket::serde::{Serialize}; use rocket::State; -use rocket_db_pools::sqlx::{Executor, Row, Sqlite, SqlitePool}; +use rocket_db_pools::sqlx::{Row}; use rocket_db_pools::{Connection, Database, Pool}; use sqlx::prelude::FromRow; @@ -65,7 +65,7 @@ } else { f = None; } - if let Some(cookie) = cookies.get_private(USER_ID_COOKIE_KEY) { + if let Some(_cookie) = cookies.get_private(USER_ID_COOKIE_KEY) { Ok(LoginResponse::LoggedInAlready { redirect: Redirect::to(format!("{}/", cc.deploy_path.clone())), }) @@ -271,8 +271,8 @@ }; let toppaths = match LogsDBSession(&mut conn).query_top_paths(&ctx, 10).await { Ok(tp) => create_chart( - tp.iter().map(|(p, c)| p).collect(), - vec![("Top Pages".into(), tp.iter().map(|(p, c)| c).collect())], + tp.iter().map(|(p, _c)| p).collect(), + vec![("Top Pages".into(), tp.iter().map(|(_p, c)| c).collect())], &ChartOptions { typ: "bar".into(), index_axis: Some("y".into()), @@ -290,10 +290,10 @@ .await { Ok(rs) => create_chart( - rs.iter().map(|(p, c)| p).collect(), + rs.iter().map(|(p, _c)| p).collect(), vec![( "Requests per Session".into(), - rs.iter().map(|(p, c)| c).collect(), + rs.iter().map(|(_p, c)| c).collect(), )], &ChartOptions { typ: "line".into(), @@ -308,10 +308,10 @@ }; let sesbycountry = match LogsDBSession(&mut conn).query_top_countries(&ctx).await { Ok(rs) => create_chart( - rs.iter().map(|(c, n)| c).collect(), + rs.iter().map(|(c, _n)| c).collect(), vec![( "Sessions by Country".into(), - rs.iter().map(|(c, n)| n).collect(), + rs.iter().map(|(_c, n)| n).collect(), )], &ChartOptions { typ: "pie".into(), @@ -326,10 +326,10 @@ }; let toprefer = match LogsDBSession(&mut conn).query_top_refer_domains(&ctx).await { Ok(rs) => create_chart( - rs.iter().map(|(dom, ct)| dom).collect(), + rs.iter().map(|(dom, _ct)| dom).collect(), vec![( "Top External Referers".into(), - rs.iter().map(|(dom, ct)| ct).collect(), + rs.iter().map(|(_dom, ct)| ct).collect(), )], &ChartOptions { typ: "bar".into(),
--- a/src/template_types.rs Fri Sep 09 07:08:20 2022 +0200 +++ b/src/template_types.rs Mon Jul 31 09:31:37 2023 +0200 @@ -13,6 +13,14 @@ origin_city: Option<String>, ua: String, alltags: String, + paths: String, +} + +fn make_unique_from_csstring<S: AsRef<str>>(s: S) -> String { + BTreeSet::from_iter(s.as_ref().split(", ")) + .into_iter() + .collect::<Vec<&str>>() + .join(", ") } impl RecentSessionsTableRow { @@ -33,10 +41,8 @@ origin_country: r.origin_country, origin_city: r.origin_city, ua: r.ua, - alltags: BTreeSet::from_iter(r.alltags.split(",")) - .into_iter() - .collect::<Vec<&str>>() - .join(", "), + alltags: make_unique_from_csstring(r.alltags), + paths: make_unique_from_csstring(r.paths), } } }