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),
         }
     }
 }