v1.12.30 긴 접속 시간 표시와 중단 후 새 방문 처리 개선

This commit is contained in:
2026-10-21 18:45:44 +09:00
parent 51d5de148f
commit 7b6fc45bf3
19 changed files with 310 additions and 68 deletions

View File

@@ -72,15 +72,21 @@ export const normalizePostSlugForAnalytics = (slug) => (slug || '').trim()
*/
export const normalizePageSlugForAnalytics = (slug) => (slug || '').trim()
/** @type {number} heartbeat 체류시간 상한(초) */
/** @type {number} 평균 체류 통계에 반영할 콘텐츠별 시간 상한(초) */
export const ANALYTICS_MAX_DURATION_SECONDS = 1800
/** @type {number} 실시간 접속 시간의 PostgreSQL 정수 저장 상한(초) */
export const ANALYTICS_MAX_REALTIME_DURATION_SECONDS = 2147483647
/** @type {number} engaged_views 집계 최소 체류(초) */
export const ANALYTICS_ENGAGED_MIN_SECONDS = 10
/** @type {number} 현재 접속자 판정 TTL(초) */
export const ANALYTICS_ACTIVE_SESSION_TTL_SECONDS = 90
/** @type {number} 실행 중단 후 새 콘텐츠 방문으로 시작하는 기준(초) */
export const ANALYTICS_NEW_VISIT_IDLE_SECONDS = 1800
/** @type {number} 관리자 차트 최대 조회 기간(일) */
export const ANALYTICS_CHART_MAX_DAYS = 365
@@ -122,6 +128,17 @@ export const clampAnalyticsDurationSeconds = (seconds) => {
return Math.min(Math.floor(value), ANALYTICS_MAX_DURATION_SECONDS)
}
/**
* 실시간 접속 시간을 데이터베이스 정수 범위로 보정한다.
* @param {number} seconds - 접속 시간
* @returns {number} 보정된 초
*/
export const clampAnalyticsRealtimeDurationSeconds = (seconds) => {
const value = Number(seconds)
if (!Number.isFinite(value) || value < 0) return 0
return Math.min(Math.floor(value), ANALYTICS_MAX_REALTIME_DURATION_SECONDS)
}
/**
* 스크롤 비율을 0~1로 보정한다.
* @param {number} ratio - 스크롤 비율