장기 방문자 통계 추가 v1.7.7

This commit is contained in:
2026-06-22 17:31:56 +09:00
parent e2ca365fa0
commit c2acecffcd
11 changed files with 84 additions and 12 deletions

View File

@@ -51,6 +51,9 @@ export default defineEventHandler(async () => {
loggedInNow: summary.loggedInNow,
avgEngagedSeconds,
visitorsLast7Days: summary.visitorsLast7Days,
visitorsLast30Days: summary.visitorsLast30Days,
visitorsLast180Days: summary.visitorsLast180Days,
visitorsLast365Days: summary.visitorsLast365Days,
pageViewsLast30Days: summary.pageViewsLast30Days,
totalPosts: statistics.totalPosts,
totalComments: statistics.totalComments,
@@ -68,6 +71,26 @@ export default defineEventHandler(async () => {
label: formatNumberLabel(summary.todayPageViews, '회'),
value: summary.todayPageViews
},
{
name: '최근 7일 방문자',
label: formatNumberLabel(summary.visitorsLast7Days, '명'),
value: summary.visitorsLast7Days
},
{
name: '최근 30일 방문자',
label: formatNumberLabel(summary.visitorsLast30Days, '명'),
value: summary.visitorsLast30Days
},
{
name: '최근 6개월 방문자',
label: formatNumberLabel(summary.visitorsLast180Days, '명'),
value: summary.visitorsLast180Days
},
{
name: '최근 1년 방문자',
label: formatNumberLabel(summary.visitorsLast365Days, '명'),
value: summary.visitorsLast365Days
},
{
name: '현재 접속자',
label: formatNumberLabel(summary.onlineNow, '명'),

View File

@@ -642,6 +642,9 @@ export const getAnalyticsSummary = async (options = {}) => {
todayPageViews: 0,
todayAvgEngagedSeconds: 0,
visitorsLast7Days: 0,
visitorsLast30Days: 0,
visitorsLast180Days: 0,
visitorsLast365Days: 0,
pageViewsLast30Days: 0,
onlineNow: 0,
loggedInNow: 0,
@@ -655,6 +658,8 @@ export const getAnalyticsSummary = async (options = {}) => {
const today = getAnalyticsDayKey()
const last7StartDay = getAnalyticsDayBefore(today, 6)
const last30StartDay = getAnalyticsDayBefore(today, 29)
const last180StartDay = getAnalyticsDayBefore(today, 179)
const last365StartDay = getAnalyticsDayBefore(today, 364)
const rangeStartDay = getAnalyticsDayBefore(today, days - 1)
await purgeStaleActiveSessions(sql)
await purgeAnalyticsRetention(sql)
@@ -666,10 +671,14 @@ export const getAnalyticsSummary = async (options = {}) => {
LIMIT 1
`
const last7Rows = await sql`
SELECT COALESCE(SUM(visitors), 0)::int AS visitors
const visitorPeriodRows = await sql`
SELECT
COALESCE(SUM(visitors) FILTER (WHERE day >= ${last7StartDay}::date), 0)::int AS visitors_last_7_days,
COALESCE(SUM(visitors) FILTER (WHERE day >= ${last30StartDay}::date), 0)::int AS visitors_last_30_days,
COALESCE(SUM(visitors) FILTER (WHERE day >= ${last180StartDay}::date), 0)::int AS visitors_last_180_days,
COALESCE(SUM(visitors) FILTER (WHERE day >= ${last365StartDay}::date), 0)::int AS visitors_last_365_days
FROM site_analytics_daily
WHERE day >= ${last7StartDay}::date
WHERE day >= ${last365StartDay}::date
`
const pageViewRows = await sql`
@@ -738,7 +747,10 @@ export const getAnalyticsSummary = async (options = {}) => {
todayAvgEngagedSeconds: todayEngagedViews > 0
? Math.round(todayTotalEngagedSeconds / todayEngagedViews)
: 0,
visitorsLast7Days: Number(last7Rows[0]?.visitors || 0),
visitorsLast7Days: Number(visitorPeriodRows[0]?.visitors_last_7_days || 0),
visitorsLast30Days: Number(visitorPeriodRows[0]?.visitors_last_30_days || 0),
visitorsLast180Days: Number(visitorPeriodRows[0]?.visitors_last_180_days || 0),
visitorsLast365Days: Number(visitorPeriodRows[0]?.visitors_last_365_days || 0),
pageViewsLast30Days: Number(pageViewRows[0]?.page_views || 0),
onlineNow: Number(onlineRows[0]?.online_now || 0),
loggedInNow: Number(onlineRows[0]?.logged_in_now || 0),