From a818199b5aca1aa47a80f5dd75325e33c9e54b27 Mon Sep 17 00:00:00 2001 From: Geometrically <18202329+Geometrically@users.noreply.github.com> Date: Wed, 8 Nov 2023 20:55:08 -0700 Subject: [PATCH] fix download counts for ipv4 ips (#750) --- src/lib.rs | 3 +-- src/queue/analytics.rs | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 69c9e925..d5fc97dc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,8 +4,7 @@ use actix_web::web; use database::redis::RedisPool; use log::{info, warn}; use queue::{ - analytics::AnalyticsQueue, payouts::PayoutsQueue, session::AuthQueue, - socket::ActiveSockets, + analytics::AnalyticsQueue, payouts::PayoutsQueue, session::AuthQueue, socket::ActiveSockets, }; use scheduler::Scheduler; use sqlx::Postgres; diff --git a/src/queue/analytics.rs b/src/queue/analytics.rs index c3c8cfa3..0d0fa869 100644 --- a/src/queue/analytics.rs +++ b/src/queue/analytics.rs @@ -1,10 +1,10 @@ use crate::database::models::DatabaseError; +use crate::database::redis::RedisPool; use crate::models::analytics::{Download, PageView, Playtime}; use crate::routes::ApiError; use dashmap::{DashMap, DashSet}; use redis::cmd; use sqlx::PgPool; -use crate::database::redis::RedisPool; const DOWNLOADS_NAMESPACE: &str = "downloads"; @@ -35,10 +35,13 @@ impl AnalyticsQueue { } pub fn add_download(&self, download: Download) { - let octets = download.ip.octets(); - let ip_stripped = u64::from_be_bytes([ - octets[0], octets[1], octets[2], octets[3], octets[4], octets[5], octets[6], octets[7], - ]); + let ip_stripped = if let Some(ip) = download.ip.to_ipv4_mapped() { + let octets = ip.octets(); + u64::from_be_bytes([0, 0, 0, 0, octets[0], octets[1], octets[2], octets[3]]) + } else { + let octets = download.ip.octets(); + u64::from_be_bytes([0, 0, 0, 0, octets[0], octets[1], octets[2], octets[3]]) + }; self.downloads_queue .insert(format!("{}-{}", ip_stripped, download.project_id), download); } @@ -151,8 +154,8 @@ impl AnalyticsQueue { WHERE id = ANY($1)", &version_ids ) - .execute(&mut *transaction) - .await?; + .execute(&mut *transaction) + .await?; sqlx::query!( "UPDATE mods @@ -160,8 +163,8 @@ impl AnalyticsQueue { WHERE id = ANY($1)", &project_ids ) - .execute(&mut *transaction) - .await?; + .execute(&mut *transaction) + .await?; transaction.commit().await?; downloads.end().await?; @@ -169,4 +172,4 @@ impl AnalyticsQueue { Ok(()) } -} \ No newline at end of file +}