Skip to content

Commit

Permalink
Fix typo and add serde_repr crate
Browse files Browse the repository at this point in the history
  • Loading branch information
naiba committed Dec 28, 2023
1 parent ac57706 commit 812b425
Show file tree
Hide file tree
Showing 13 changed files with 91 additions and 43 deletions.
63 changes: 46 additions & 17 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ r-cache = "0.4.4"
regex = "1.5.4"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
serde_repr = "0.1"
tokio = { version = "1.0", features = ["full"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
Expand Down
2 changes: 2 additions & 0 deletions migrations/2023-12-28-150535_statistics_v4/down.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE
`statistics` RENAME COLUMN latest_referrer_at TO latest_referrered_at;
2 changes: 2 additions & 0 deletions migrations/2023-12-28-150535_statistics_v4/up.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE
`statistics` RENAME COLUMN latest_referrered_at TO latest_referrer_at;
22 changes: 13 additions & 9 deletions src/app_model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ use headers::HeaderMap;
use lazy_static::lazy_static;
use regex::Regex;
use serde::Serialize;
use serde_repr::*;
use tokio::sync::watch::{self, Receiver, Sender};
use tokio::sync::RwLock;
use tracing::info;
Expand All @@ -29,13 +30,15 @@ struct VistEvent {
ip: String,
country: String,
member: Membership,
vt: VisitorType,
}

#[derive(Debug, PartialEq)]
#[derive(Serialize_repr, Debug, PartialEq)]
#[repr(u8)]
pub enum VisitorType {
Referrer,
Badge,
ICON,
Referer = 1,
Badge = 2,
ICON = 3,
}

pub struct Context {
Expand Down Expand Up @@ -77,7 +80,7 @@ impl Context {
domain: &str,
headers: &HeaderMap,
) -> Result<(&str, i64, i64, i64), anyhow::Error> {
if v_type == VisitorType::Referrer && domain.eq(&*SYSTEM_DOMAIN) {
if v_type == VisitorType::Referer && domain.eq(&*SYSTEM_DOMAIN) {
return Err(anyhow!("system domain"));
}
if let Some(id) = self.domain2id.get(domain) {
Expand All @@ -104,10 +107,11 @@ impl Context {

let mut referrer = self.referrer.write().await;
let mut dist_r = referrer.get(id).unwrap_or(&(0, now_shanghai())).to_owned();
if matches!(v_type, VisitorType::Referrer) && visitor_cache.is_none() {
if matches!(v_type, VisitorType::Referer) && visitor_cache.is_none() {
dist_r.0 += 1;
dist_r.1 = now_shanghai();
referrer.insert(*id, dist_r);
notification = true;
}
drop(referrer);

Expand All @@ -126,7 +130,6 @@ impl Context {
let tend = self.get_tend_from_uv_and_rv(dist_uv.0, dist_r.0).await;

if notification {
// 广播访客信息
let mut member = self.id2member.get(id).unwrap().to_owned();
member.description = "".to_string();
member.icon = "".to_string();
Expand All @@ -139,6 +142,7 @@ impl Context {
.to_string(),
country,
member,
vt: v_type,
})
.to_string(),
);
Expand All @@ -162,7 +166,7 @@ impl Context {

statistics.iter().for_each(|s| {
page_view.insert(s.membership_id, (s.unique_visitor, s.updated_at));
referrer.insert(s.membership_id, (s.referrer, s.latest_referrered_at));
referrer.insert(s.membership_id, (s.referrer, s.latest_referrer_at));
});

let mut membership: HashMap<i64, Membership> =
Expand Down Expand Up @@ -257,7 +261,7 @@ impl Context {
unique_visitor: id_uv.0,
updated_at: id_uv.1,
referrer: id_referrer.0,
latest_referrered_at: id_referrer.1,
latest_referrer_at: id_referrer.1,
id: 0,
},
)
Expand Down
4 changes: 2 additions & 2 deletions src/app_router.rs
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ pub async fn home_page(
if domain.is_ok() {
let _ = ctx
.boring_visitor(
crate::app_model::VisitorType::Referrer,
crate::app_model::VisitorType::Referer,
&domain.unwrap(),
&headers,
)
Expand Down Expand Up @@ -252,7 +252,7 @@ pub async fn rank_page(
if domain.is_ok() {
let _ = ctx
.boring_visitor(
crate::app_model::VisitorType::Referrer,
crate::app_model::VisitorType::Referer,
&domain.unwrap(),
&headers,
)
Expand Down
2 changes: 1 addition & 1 deletion src/boring_face.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ static SVG_HEADER: &str = r###"<?xml version="1.0" encoding="utf-8"?>
static SVG_BORDER: &str = r###"
<rect class="fill-white" width="577.762" height="110" style="stroke: rgb(189, 14, 43); stroke-width: 5;" rx="50"/>
<text style="font-size: 38px; white-space: pre; text-anchor: middle;" x="335" y="48.074">#site_name# 🥱</text>
<text style="font-size: 24px; white-space: pre; font-style: italic; text-anchor: middle;" x="335" y="91.615">UV: #site_uv# Referrer: #site_referrer# Level: #site_rank#</text>
<text style="font-size: 24px; white-space: pre; font-style: italic; text-anchor: middle;" x="335" y="91.615">UV: #site_uv# Referer: #site_referrer# Level: #site_rank#</text>
"###;
static SVG_FOOTER: &str = r###"
</g>
Expand Down
2 changes: 1 addition & 1 deletion src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ async fn shutdown_signal(ctx: Arc<Context>) {
unique_visitor: uv.0,
updated_at: uv.1,
referrer: referrer.0,
latest_referrered_at: referrer.1,
latest_referrer_at: referrer.1,
id: 0,
},
)
Expand Down
2 changes: 1 addition & 1 deletion src/schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ diesel::table! {
membership_id -> BigInt,
unique_visitor -> BigInt,
referrer -> BigInt,
latest_referrered_at -> Timestamp,
latest_referrer_at -> Timestamp,
}
}
14 changes: 8 additions & 6 deletions src/statistics_model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ pub struct Statistics {
pub membership_id: i64,
pub unique_visitor: i64,
pub referrer: i64,
pub latest_referrered_at: NaiveDateTime,
pub latest_referrer_at: NaiveDateTime,
}

impl Statistics {
Expand All @@ -34,13 +34,15 @@ impl Statistics {
membership_id.eq(stat.membership_id),
unique_visitor.eq(stat.unique_visitor),
referrer.eq(stat.referrer),
latest_referrer_at.eq(stat.latest_referrer_at),
))
.on_conflict((membership_id, created_at))
.do_update()
.set((
unique_visitor.eq(stat.unique_visitor),
referrer.eq(stat.referrer),
updated_at.eq(stat.updated_at),
latest_referrer_at.eq(stat.latest_referrer_at),
));
println!("sql: {}", debug_query::<Sqlite, _>(&statement));
statement.execute(&mut conn)
Expand Down Expand Up @@ -114,19 +116,19 @@ impl Statistics {
.map(|s| (s.0, s.1))
.collect::<std::collections::HashMap<i64, NaiveDateTime>>();

let latest_referrered_at_list = statistics
let latest_referrer_at_list = statistics
.select((
membership_id,
sql::<diesel::sql_types::Timestamp>(
"MAX(latest_referrered_at) as m_latest_referrered_at",
"MAX(latest_referrer_at) as m_latest_referrer_at",
),
))
.filter(unique_visitor.gt(0).or(referrer.gt(0)))
.group_by(membership_id)
.order(sql::<diesel::sql_types::BigInt>("m_latest_referrered_at"))
.order(sql::<diesel::sql_types::BigInt>("m_latest_referrer_at"))
.load::<(i64, NaiveDateTime)>(&mut conn);

let id_to_latest_referrered_at = latest_referrered_at_list
let id_to_latest_referrer_at = latest_referrer_at_list
.unwrap_or(Vec::new())
.iter()
.map(|s| (s.0, s.1))
Expand All @@ -143,7 +145,7 @@ impl Statistics {
.get(&s.0)
.unwrap_or(&NaiveDateTime::from_timestamp(0, 0))
.to_owned(),
latest_referrered_at: id_to_latest_referrered_at
latest_referrer_at: id_to_latest_referrer_at
.get(&s.0)
.unwrap_or(&NaiveDateTime::from_timestamp(0, 0))
.to_owned(),
Expand Down
Loading

0 comments on commit 812b425

Please sign in to comment.