Merge pull request #2918 from umami-software/dev

v2.13.2
This commit is contained in:
Mike Cao 2024-08-27 19:30:56 -07:00 committed by GitHub
commit e881735a23
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
19 changed files with 305 additions and 321 deletions

View File

@ -1,6 +1,6 @@
{
"name": "umami",
"version": "2.13.1",
"version": "2.13.2",
"description": "A simple, fast, privacy-focused alternative to Google Analytics.",
"author": "Umami Software, Inc. <hello@umami.is>",
"license": "MIT",

View File

@ -1180,7 +1180,7 @@
"label.team-manager": [
{
"type": 0,
"value": "Responsable d'Equip"
"value": "Responsable d'equip"
}
],
"label.team-member": [

View File

@ -404,19 +404,19 @@
"label.entry": [
{
"type": 0,
"value": "Eintrags-URL"
"value": "Eingangs-URL"
}
],
"label.event": [
{
"type": 0,
"value": "Event"
"value": "Ereigniss"
}
],
"label.event-data": [
{
"type": 0,
"value": "Eventdaten"
"value": "Ereignissdaten"
}
],
"label.events": [
@ -476,19 +476,19 @@
"label.first-seen": [
{
"type": 0,
"value": "First seen"
"value": "Erstmalig gesehen"
}
],
"label.funnel": [
{
"type": 0,
"value": "Funnel"
"value": "Trichter"
}
],
"label.funnel-description": [
{
"type": 0,
"value": "Verstehe die Konversions- und Abbruchrate der Nutzer."
"value": "Verstehen Sie die Konversions- und Absprungrate Ihrer Nutzer."
}
],
"label.goal": [
@ -542,7 +542,7 @@
"label.insights-description": [
{
"type": 0,
"value": "Vertiefen Sie Ihre Daten mit Hilfe von Segmenten und Filtern."
"value": "Vertiefen Sie sich mit Hilfe von Segmenten und Filtern in Ihre Daten."
}
],
"label.is": [
@ -590,7 +590,7 @@
"label.journey-description": [
{
"type": 0,
"value": "Verstehe, wie Nutzer auf der Webseite navigieren"
"value": "Verstehen Sie, wie Nutzer auf Ihrer Website navigieren."
}
],
"label.language": [
@ -656,7 +656,7 @@
"label.last-seen": [
{
"type": 0,
"value": "Last seen"
"value": "Zuletzt gesehen"
}
],
"label.leave": [
@ -752,7 +752,7 @@
"label.my-websites": [
{
"type": 0,
"value": "Meine Webseiten"
"value": "Meine Websites"
}
],
"label.name": [
@ -876,13 +876,13 @@
"label.path": [
{
"type": 0,
"value": "Path"
"value": "Pfad"
}
],
"label.paths": [
{
"type": 0,
"value": "Paths"
"value": "Pfade"
}
],
"label.powered-by": [
@ -898,7 +898,7 @@
"label.previous": [
{
"type": 0,
"value": "Vorheriges"
"value": "Vorherig"
}
],
"label.previous-period": [
@ -922,7 +922,7 @@
"label.properties": [
{
"type": 0,
"value": "Properties"
"value": "Eigenschaften"
}
],
"label.property": [
@ -958,13 +958,13 @@
"label.referrer": [
{
"type": 0,
"value": "Referrer"
"value": "Übermittler"
}
],
"label.referrers": [
{
"type": 0,
"value": "Referrer"
"value": "Übermittler"
}
],
"label.refresh": [
@ -1030,7 +1030,7 @@
"label.retention": [
{
"type": 0,
"value": "Bewahrung"
"value": "Erhalt"
}
],
"label.retention-description": [
@ -1042,19 +1042,19 @@
"label.revenue": [
{
"type": 0,
"value": "Revenue"
"value": "Umsatz"
}
],
"label.revenue-description": [
{
"type": 0,
"value": "Look into your revenue across time."
"value": "Haben Sie einen Blick auf Ihre Umsätze im Laufe der Zeit."
}
],
"label.revenue-property": [
{
"type": 0,
"value": "Revenue Property"
"value": "Umsatzeigenschaften"
}
],
"label.role": [
@ -1108,13 +1108,13 @@
"label.select-website": [
{
"type": 0,
"value": "Webseite auswählen"
"value": "Website auswählen"
}
],
"label.session": [
{
"type": 0,
"value": "Session"
"value": "Sitzung"
}
],
"label.sessions": [
@ -1204,7 +1204,7 @@
"label.team-view-only": [
{
"type": 0,
"value": "Nur für Team sichtbar"
"value": "Nur für Team-Mitglieder sichtbar"
}
],
"label.team-websites": [
@ -1288,7 +1288,7 @@
"label.transactions": [
{
"type": 0,
"value": "Transactions"
"value": "Transaktionen"
}
],
"label.transfer": [
@ -1318,19 +1318,19 @@
"label.unique": [
{
"type": 0,
"value": "Eindeutig"
"value": "Einzigartig"
}
],
"label.unique-visitors": [
{
"type": 0,
"value": "Eindeutige Besucher"
"value": "Einzigartige Besucher"
}
],
"label.uniqueCustomers": [
{
"type": 0,
"value": "Unique Customers"
"value": "Einzigartige Kunden"
}
],
"label.unknown": [
@ -1372,7 +1372,7 @@
"label.user-property": [
{
"type": 0,
"value": "User Property"
"value": "Benutzereigenschaften"
}
],
"label.username": [
@ -1396,7 +1396,7 @@
"label.utm-description": [
{
"type": 0,
"value": "Tracke deine Kampagnen mit UTM parameterns."
"value": "Tracken Sie Ihre Kampagnen mit UTM Parametern."
}
],
"label.value": [
@ -1456,19 +1456,19 @@
"label.website": [
{
"type": 0,
"value": "Webseite"
"value": "Website"
}
],
"label.website-id": [
{
"type": 0,
"value": "Webseiten-ID"
"value": "Website-ID"
}
],
"label.websites": [
{
"type": 0,
"value": "Webseiten"
"value": "Websites"
}
],
"label.window": [
@ -1596,7 +1596,7 @@
"message.delete-team-warning": [
{
"type": 0,
"value": "Ein Team zu löschen, wird auch alle Team-Webseiten löschen."
"value": "Ein Team zu löschen, wird auch alle Team-Websites löschen."
}
],
"message.delete-website-warning": [
@ -1780,25 +1780,25 @@
"message.transfer-team-website-to-user": [
{
"type": 0,
"value": "Diese Webseite zu deinem Account transferieren?"
"value": "Diese Website zu Ihrem Account transferieren?"
}
],
"message.transfer-user-website-to-team": [
{
"type": 0,
"value": "Wähle ein Team aus, zu dem die Webseite transferiert werden soll."
"value": "Wählen Sie ein Team aus, zu dem die Website transferiert werden soll."
}
],
"message.transfer-website": [
{
"type": 0,
"value": "Übertrage die Eigentümerrechte zu deinem Account oder einem anderen Team."
"value": "Übertragen Sie die Eigentümerrechte zu Ihrem Account oder einem anderen Team."
}
],
"message.triggered-event": [
{
"type": 0,
"value": "Ausgelöstes Event"
"value": "Ausgelöstes Ereigniss"
}
],
"message.user-deleted": [
@ -1810,7 +1810,7 @@
"message.viewed-page": [
{
"type": 0,
"value": "Besuchte Seite"
"value": "Seite besucht"
}
],
"message.visitor-log": [

View File

@ -8,13 +8,13 @@
"label.actions": [
{
"type": 0,
"value": "액션"
"value": "동작"
}
],
"label.activity": [
{
"type": 0,
"value": "활동 기록"
"value": "활동"
}
],
"label.add": [
@ -128,7 +128,7 @@
"label.change-password": [
{
"type": 0,
"value": "비밀번호 변경하기"
"value": "비밀번호 변경"
}
],
"label.cities": [
@ -200,25 +200,25 @@
"label.create": [
{
"type": 0,
"value": "생성"
"value": "만들기"
}
],
"label.create-report": [
{
"type": 0,
"value": "리포트 생성"
"value": "보고서 만들기"
}
],
"label.create-team": [
{
"type": 0,
"value": "팀 생성"
"value": "팀 만들기"
}
],
"label.create-user": [
{
"type": 0,
"value": "사용자 생성"
"value": "사용자 만들기"
}
],
"label.created": [
@ -296,7 +296,7 @@
"label.delete-report": [
{
"type": 0,
"value": "리포트 삭제"
"value": "보고서 삭제"
}
],
"label.delete-team": [
@ -326,13 +326,13 @@
"label.desktop": [
{
"type": 0,
"value": "데스크"
"value": "데스크"
}
],
"label.details": [
{
"type": 0,
"value": "세부 사항"
"value": "세부 정보"
}
],
"label.device": [
@ -386,7 +386,7 @@
"label.edit-member": [
{
"type": 0,
"value": "회원 편집"
"value": "멤버 편집"
}
],
"label.enable-share-url": [
@ -398,7 +398,7 @@
"label.end-step": [
{
"type": 0,
"value": "종료 단계"
"value": "마지막 단계"
}
],
"label.entry": [
@ -458,7 +458,7 @@
"label.filter-combined": [
{
"type": 0,
"value": "합쳐 보기"
"value": "합쳐 보기"
}
],
"label.filter-raw": [
@ -476,7 +476,7 @@
"label.first-seen": [
{
"type": 0,
"value": "First seen"
"value": "첫 접속"
}
],
"label.funnel": [
@ -506,7 +506,7 @@
"label.goals-description": [
{
"type": 0,
"value": "페이지 및 이벤트 목표를 추적합니다."
"value": "페이지 조회 및 이벤트 목표를 추적합니다."
}
],
"label.greater-than": [
@ -572,13 +572,13 @@
"label.join": [
{
"type": 0,
"value": "가입"
"value": "가입하기"
}
],
"label.join-team": [
{
"type": 0,
"value": "팀 가입"
"value": "팀 가입하기"
}
],
"label.journey": [
@ -614,7 +614,7 @@
"label.last-days": [
{
"type": 0,
"value": "최근 "
"value": "지난 "
},
{
"type": 1,
@ -622,13 +622,13 @@
},
{
"type": 0,
"value": " 일"
"value": "일"
}
],
"label.last-hours": [
{
"type": 0,
"value": "최근 "
"value": "지난 "
},
{
"type": 1,
@ -636,13 +636,13 @@
},
{
"type": 0,
"value": " 시간"
"value": "시간"
}
],
"label.last-months": [
{
"type": 0,
"value": "최근 "
"value": "지난 "
},
{
"type": 1,
@ -650,13 +650,13 @@
},
{
"type": 0,
"value": " 개월"
"value": "개월"
}
],
"label.last-seen": [
{
"type": 0,
"value": "Last seen"
"value": "마지막 접속"
}
],
"label.leave": [
@ -780,31 +780,7 @@
},
{
"type": 0,
"value": " "
},
{
"offset": 0,
"options": {
"one": {
"value": [
{
"type": 0,
"value": "record"
}
]
},
"other": {
"value": [
{
"type": 0,
"value": "레코드"
}
]
}
},
"pluralType": "cardinal",
"type": 6,
"value": "x"
"value": "개 레코드"
}
],
"label.ok": [
@ -816,7 +792,7 @@
"label.os": [
{
"type": 0,
"value": "운영체제"
"value": "운영 체제"
}
],
"label.overview": [
@ -832,13 +808,9 @@
}
],
"label.page-of": [
{
"type": 1,
"value": "total"
},
{
"type": 0,
"value": " "
"value": "페이지 "
},
{
"type": 1,
@ -846,13 +818,17 @@
},
{
"type": 0,
"value": " 페이지"
"value": "/"
},
{
"type": 1,
"value": "total"
}
],
"label.page-views": [
{
"type": 0,
"value": "페이지 "
"value": "페이지 조회"
}
],
"label.pageTitle": [
@ -876,27 +852,23 @@
"label.path": [
{
"type": 0,
"value": "Path"
"value": "패스"
}
],
"label.paths": [
{
"type": 0,
"value": "Paths"
"value": "패스"
}
],
"label.powered-by": [
{
"type": 0,
"value": "이 시스템은 "
"value": "Powered by "
},
{
"type": 1,
"value": "name"
},
{
"type": 0,
"value": "에서 구동되고 있습니다."
}
],
"label.previous": [
@ -926,7 +898,7 @@
"label.properties": [
{
"type": 0,
"value": "Properties"
"value": "속성"
}
],
"label.property": [
@ -950,7 +922,7 @@
"label.query-parameters": [
{
"type": 0,
"value": "쿼리 매개변수"
"value": "쿼리 매개 변수"
}
],
"label.realtime": [
@ -974,7 +946,7 @@
"label.refresh": [
{
"type": 0,
"value": "새로고침"
"value": "새로 고침"
}
],
"label.regenerate": [
@ -1010,7 +982,7 @@
"label.reports": [
{
"type": 0,
"value": "리포트"
"value": "보고서"
}
],
"label.required": [
@ -1022,7 +994,7 @@
"label.reset": [
{
"type": 0,
"value": "리셋"
"value": "초기화"
}
],
"label.reset-website": [
@ -1046,19 +1018,19 @@
"label.revenue": [
{
"type": 0,
"value": "Revenue"
"value": "수익"
}
],
"label.revenue-description": [
{
"type": 0,
"value": "Look into your revenue across time."
"value": "시간대별 수익을 살펴보세요."
}
],
"label.revenue-property": [
{
"type": 0,
"value": "Revenue Property"
"value": "수익 속성"
}
],
"label.role": [
@ -1082,7 +1054,7 @@
"label.screens": [
{
"type": 0,
"value": "스크린"
"value": "화면"
}
],
"label.search": [
@ -1118,7 +1090,7 @@
"label.session": [
{
"type": 0,
"value": "Session"
"value": "세션"
}
],
"label.sessions": [
@ -1280,7 +1252,7 @@
"label.total-records": [
{
"type": 0,
"value": " 레코드"
"value": "전체 레코드"
}
],
"label.tracking-code": [
@ -1292,7 +1264,7 @@
"label.transactions": [
{
"type": 0,
"value": "Transactions"
"value": "거래"
}
],
"label.transfer": [
@ -1328,13 +1300,13 @@
"label.unique-visitors": [
{
"type": 0,
"value": "순방문자(UV)"
"value": "고유 방문자"
}
],
"label.uniqueCustomers": [
{
"type": 0,
"value": "Unique Customers"
"value": "고유 고객"
}
],
"label.unknown": [
@ -1376,13 +1348,13 @@
"label.user-property": [
{
"type": 0,
"value": "User Property"
"value": "사용자 속성"
}
],
"label.username": [
{
"type": 0,
"value": "사용자"
"value": "사용자 이름"
}
],
"label.users": [
@ -1418,7 +1390,7 @@
"label.view-details": [
{
"type": 0,
"value": "상세보기"
"value": "자세히 보기"
}
],
"label.view-only": [
@ -1430,13 +1402,13 @@
"label.views": [
{
"type": 0,
"value": "조회"
"value": "조회"
}
],
"label.views-per-visit": [
{
"type": 0,
"value": "방문당 조회"
"value": "방문당 조회"
}
],
"label.visit-duration": [
@ -1448,7 +1420,7 @@
"label.visitors": [
{
"type": 0,
"value": "방문"
"value": "방문"
}
],
"label.visits": [
@ -1498,17 +1470,21 @@
},
{
"type": 0,
"value": "을(를) 입력하십시오."
"value": "을(를) 입력하세요."
}
],
"message.active-users": [
{
"type": 0,
"value": "현재 방문자 "
},
{
"type": 1,
"value": "x"
},
{
"type": 0,
"value": "명의 사용자가 보는 중입니다."
"value": "명"
}
],
"message.collected-data": [
@ -1572,7 +1548,7 @@
"message.error": [
{
"type": 0,
"value": "오류가 발생하였습니다."
"value": "오류가 발생습니다."
}
],
"message.event-log": [
@ -1598,19 +1574,19 @@
"message.incorrect-username-password": [
{
"type": 0,
"value": "사용자 이름/비밀번호가 잘못되었습니다."
"value": "사용자 이름 또는 비밀번호를 잘못 입력했습니다."
}
],
"message.invalid-domain": [
{
"type": 0,
"value": "잘못된 도메인"
"value": "잘못된 도메인입니다. http/https를 포함하지 마세요."
}
],
"message.min-password-length": [
{
"type": 0,
"value": "최소 길이는 "
"value": "최소 "
},
{
"type": 1,
@ -1618,35 +1594,39 @@
},
{
"type": 0,
"value": "자니다"
"value": "자여야 합니다"
}
],
"message.new-version-available": [
{
"type": 0,
"value": "새 버전이 사용 가능합니다! - Umami "
"value": "Umami의 새 버전 "
},
{
"type": 1,
"value": "version"
},
{
"type": 0,
"value": "을(를) 사용할 수 있습니다!"
}
],
"message.no-data-available": [
{
"type": 0,
"value": "사용 가능한 데이터가 없습니다."
"value": "사용할 수 있는 데이터가 없습니다."
}
],
"message.no-event-data": [
{
"type": 0,
"value": "사용 가능한 이벤트 데이터가 없습니다."
"value": "사용할 수 있는 이벤트 데이터가 없습니다."
}
],
"message.no-match-password": [
{
"type": 0,
"value": "비밀번호가 일치하지 않"
"value": "비밀번호가 일치하지 않습니다."
}
],
"message.no-results-found": [
@ -1658,13 +1638,13 @@
"message.no-team-websites": [
{
"type": 0,
"value": "팀에 웹사이트가 없습니다."
"value": "팀에 웹사이트가 없습니다."
}
],
"message.no-teams": [
{
"type": 0,
"value": "생성된 팀이 없습니다."
"value": "만든 팀이 없습니다."
}
],
"message.no-users": [
@ -1682,13 +1662,13 @@
"message.page-not-found": [
{
"type": 0,
"value": "페이지를 찾을 수 없습니다."
"value": "페이지를 찾을 수 없"
}
],
"message.reset-website": [
{
"type": 0,
"value": "이 웹사이트를 초기화하려면, 아래 상자에 "
"value": "이 웹사이트를 초기화하려면 아래 상자에 "
},
{
"type": 1,
@ -1696,7 +1676,7 @@
},
{
"type": 0,
"value": "을(를) 입력하십시오."
"value": "을(를) 입력하세요."
}
],
"message.reset-website-warning": [
@ -1708,7 +1688,7 @@
"message.saved": [
{
"type": 0,
"value": "성공적으로 저장되었습니다."
"value": "저장했습니다."
}
],
"message.share-url": [
@ -1720,7 +1700,7 @@
"message.team-already-member": [
{
"type": 0,
"value": "이미 팀의 회원입니다."
"value": "이미 팀 멤버입니다."
}
],
"message.team-not-found": [
@ -1732,13 +1712,13 @@
"message.team-websites-info": [
{
"type": 0,
"value": "웹사이트는 팀 누구나 볼 수 있습니다."
"value": "웹사이트는 팀 멤버 누구나 볼 수 있습니다."
}
],
"message.tracking-code": [
{
"type": 0,
"value": "이 웹사이트의 통계를 추적하려면, 다음 코드를 HTML의 "
"value": "이 웹사이트의 통계를 추적하려면 다음 코드를 HTML의 "
},
{
"children": [
@ -1752,7 +1732,7 @@
},
{
"type": 0,
"value": " 섹션에 추가하십시오."
"value": " 부분에 추가하세요."
}
],
"message.transfer-team-website-to-user": [
@ -1764,7 +1744,7 @@
"message.transfer-user-website-to-team": [
{
"type": 0,
"value": "이 웹사이트를 전송받을 팀을 선택하십시오."
"value": "이 웹사이트를 전송받을 팀을 선택하세요."
}
],
"message.transfer-website": [
@ -1782,32 +1762,16 @@
"message.user-deleted": [
{
"type": 0,
"value": "사용자가 삭제되었습니다."
"value": "사용자를 삭제했습니다."
}
],
"message.viewed-page": [
{
"type": 0,
"value": "페이지 조회"
"value": "조회한 페이지"
}
],
"message.visitor-log": [
{
"type": 1,
"value": "country"
},
{
"type": 0,
"value": "의 "
},
{
"type": 1,
"value": "browser"
},
{
"type": 0,
"value": " 브라우저를 사용하는 "
},
{
"type": 1,
"value": "os"
@ -1822,13 +1786,29 @@
},
{
"type": 0,
"value": " 방문자"
"value": "에서 "
},
{
"type": 1,
"value": "browser"
},
{
"type": 0,
"value": "을(를) 사용하는 "
},
{
"type": 1,
"value": "country"
},
{
"type": 0,
"value": "의 방문자"
}
],
"message.visitors-dropped-off": [
{
"type": 0,
"value": "방문자가 이탈했습니다"
"value": "방문자 이탈함"
}
]
}

View File

@ -58,13 +58,13 @@ export function RetentionTable({ days = DAYS }) {
if (totalDays - rowIndex < day) {
return null;
}
const percentage = records[day]?.percentage;
const percentage = records.filter(a => a.day === day)[0]?.percentage;
return (
<div
key={day}
className={classNames(styles.cell, { [styles.empty]: !percentage })}
>
{percentage ? `${percentage.toFixed(2)}%` : ''}
{percentage ? `${Number(percentage).toFixed(2)}%` : ''}
</div>
);
})}

View File

@ -47,7 +47,7 @@ export default function WebsiteChartList({
</Button>
</Link>
</WebsiteHeader>
<WebsiteMetricsBar websiteId={id} />
<WebsiteMetricsBar websiteId={id} showChange={true} />
{showCharts && <WebsiteChart websiteId={id} />}
</div>
) : null;

View File

@ -13,7 +13,7 @@ export default function EventsDataTable({
const queryResult = useWebsiteEvents(websiteId);
return (
<DataTable queryResult={queryResult} allowSearch={true}>
<DataTable queryResult={queryResult} allowSearch={true} autoFocus={false}>
{({ data }) => <EventsTable data={data} />}
</DataTable>
);

View File

@ -1,9 +1,8 @@
import { useMemo } from 'react';
import { useTheme } from 'components/hooks';
import Chart, { ChartProps } from 'components/charts/Chart';
import { renderNumberLabels } from 'lib/charts';
import { useState } from 'react';
import BarChartTooltip from 'components/charts/BarChartTooltip';
import Chart, { ChartProps } from 'components/charts/Chart';
import { useTheme } from 'components/hooks';
import { renderNumberLabels } from 'lib/charts';
import { useMemo, useState } from 'react';
export interface BarChartProps extends ChartProps {
unit: string;
@ -36,7 +35,7 @@ export function BarChart(props: BarChartProps) {
x: {
type: XAxisType,
stacked: true,
min: minDate,
min: minDate && new Date(minDate).getSeconds() === 0 ? minDate : '',
max: maxDate,
time: {
unit,

View File

@ -15,6 +15,7 @@ export interface DataTableProps {
searchDelay?: number;
allowSearch?: boolean;
allowPaging?: boolean;
autoFocus?: boolean;
renderEmpty?: () => ReactNode;
children: ReactNode | ((data: any) => ReactNode);
}
@ -24,6 +25,7 @@ export function DataTable({
searchDelay = 600,
allowSearch = true,
allowPaging = true,
autoFocus = true,
renderEmpty,
children,
}: DataTableProps) {
@ -57,7 +59,7 @@ export function DataTable({
value={query}
onSearch={handleSearch}
delay={searchDelay || DEFAULT_SEARCH_DELAY}
autoFocus={true}
autoFocus={autoFocus}
placeholder={formatMessage(labels.search)}
/>
)}

View File

@ -47,6 +47,8 @@ export function EventsChart({ websiteId, className }: EventsChartProps) {
return (
<BarChart
minDate={startDate.toISOString()}
maxDate={endDate.toISOString()}
className={className}
data={chartData}
unit={unit}

View File

@ -184,7 +184,7 @@
"label.tablet": "Tauleta",
"label.team": "Equip",
"label.team-id": "ID del equip",
"label.team-manager": "Responsable d'Equip",
"label.team-manager": "Responsable d'equip",
"label.team-member": "Membre de l'equip",
"label.team-name": "Nom de l'equip",
"label.team-owner": "Propietari de l'equip",

View File

@ -66,9 +66,9 @@
"label.edit-member": "Mitglied bearbeiten",
"label.enable-share-url": "Freigabe-URL aktivieren",
"label.end-step": "Schlussschritt",
"label.entry": "Eintrags-URL",
"label.event": "Event",
"label.event-data": "Eventdaten",
"label.entry": "Eingangs-URL",
"label.event": "Ereigniss",
"label.event-data": "Ereignissdaten",
"label.events": "Ereignisse",
"label.exit": "Ausgangs-URL",
"label.false": "Falsch",
@ -78,9 +78,9 @@
"label.filter-combined": "Kombiniert",
"label.filter-raw": "Rohdaten",
"label.filters": "Filter",
"label.first-seen": "First seen",
"label.funnel": "Funnel",
"label.funnel-description": "Verstehe die Konversions- und Abbruchrate der Nutzer.",
"label.first-seen": "Erstmalig gesehen",
"label.funnel": "Trichter",
"label.funnel-description": "Verstehen Sie die Konversions- und Absprungrate Ihrer Nutzer.",
"label.goal": "Ziel",
"label.goals": "Ziele",
"label.goals-description": "Verfolgen Sie Ihre Ziele für Seitenaufrufe und Ereignisse.",
@ -89,7 +89,7 @@
"label.host": "Host",
"label.hosts": "Hosts",
"label.insights": "Einblicke",
"label.insights-description": "Vertiefen Sie Ihre Daten mit Hilfe von Segmenten und Filtern.",
"label.insights-description": "Vertiefen Sie sich mit Hilfe von Segmenten und Filtern in Ihre Daten.",
"label.is": "Ist",
"label.is-not": "Ist nicht",
"label.is-not-set": "Ist nicht gesetzt",
@ -97,14 +97,14 @@
"label.join": "Beitreten",
"label.join-team": "Team beitreten",
"label.journey": "Reise",
"label.journey-description": "Verstehe, wie Nutzer auf der Webseite navigieren",
"label.journey-description": "Verstehen Sie, wie Nutzer auf Ihrer Website navigieren.",
"label.language": "Sprache",
"label.languages": "Sprachen",
"label.laptop": "Laptop",
"label.last-days": "Letzten {x} Tage",
"label.last-hours": "Letzten {x} Stunden",
"label.last-months": "Letzten {x} Monate",
"label.last-seen": "Last seen",
"label.last-seen": "Zuletzt gesehen",
"label.leave": "Verlassen",
"label.leave-team": "Team verlassen",
"label.less-than": "Kleiner als",
@ -120,7 +120,7 @@
"label.mobile": "Handy",
"label.more": "Mehr",
"label.my-account": "Mein Account",
"label.my-websites": "Meine Webseiten",
"label.my-websites": "Meine Websites",
"label.name": "Name",
"label.new-password": "Neues Passwort",
"label.none": "Keine",
@ -134,21 +134,21 @@
"label.pageTitle": "Seitentitel",
"label.pages": "Seiten",
"label.password": "Passwort",
"label.path": "Path",
"label.paths": "Paths",
"label.path": "Pfad",
"label.paths": "Pfade",
"label.powered-by": "Betrieben durch {name}",
"label.previous": "Vorheriges",
"label.previous": "Vorherig",
"label.previous-period": "Vorherige Periode",
"label.previous-year": "Vorheriges Jahr",
"label.profile": "Profil",
"label.properties": "Properties",
"label.properties": "Eigenschaften",
"label.property": "Eigentum",
"label.queries": "Abfragen",
"label.query": "Abfrage",
"label.query-parameters": "Abfrageparameter",
"label.realtime": "Echtzeit",
"label.referrer": "Referrer",
"label.referrers": "Referrer",
"label.referrer": "Übermittler",
"label.referrers": "Übermittler",
"label.refresh": "Aktualisieren",
"label.regenerate": "Erneuern",
"label.region": "Region",
@ -159,11 +159,11 @@
"label.required": "Erforderlich",
"label.reset": "Zurücksetzen",
"label.reset-website": "Statistik zurücksetzen",
"label.retention": "Bewahrung",
"label.retention": "Erhalt",
"label.retention-description": "Messen Sie die Verweildauer auf Ihrer Website, indem Sie verfolgen, wie oft die Nutzer zurückkehren.",
"label.revenue": "Revenue",
"label.revenue-description": "Look into your revenue across time.",
"label.revenue-property": "Revenue Property",
"label.revenue": "Umsatz",
"label.revenue-description": "Haben Sie einen Blick auf Ihre Umsätze im Laufe der Zeit.",
"label.revenue-property": "Umsatzeigenschaften",
"label.role": "Rolle",
"label.run-query": "Abfrage starten",
"label.save": "Speichern",
@ -172,8 +172,8 @@
"label.select": "Auswählen",
"label.select-date": "Datum auswählen",
"label.select-role": "Rolle auswählen",
"label.select-website": "Webseite auswählen",
"label.session": "Session",
"label.select-website": "Website auswählen",
"label.session": "Sitzung",
"label.sessions": "Sitzungen",
"label.settings": "Einstellungen",
"label.share-url": "Freigabe-URL",
@ -188,7 +188,7 @@
"label.team-member": "Team-Mitglied",
"label.team-name": "Name des Teams",
"label.team-owner": "Team-Eigentümer",
"label.team-view-only": "Nur für Team sichtbar",
"label.team-view-only": "Nur für Team-Mitglieder sichtbar",
"label.team-websites": "Team-Websites",
"label.teams": "Teams",
"label.theme": "Thema",
@ -202,25 +202,25 @@
"label.total": "Gesamt",
"label.total-records": "Datensätze insgesamt",
"label.tracking-code": "Tracking Code",
"label.transactions": "Transactions",
"label.transactions": "Transaktionen",
"label.transfer": "Übertragung",
"label.transfer-website": "Website übertragen",
"label.true": "Wahr",
"label.type": "Typ",
"label.unique": "Eindeutig",
"label.unique-visitors": "Eindeutige Besucher",
"label.uniqueCustomers": "Unique Customers",
"label.unique": "Einzigartig",
"label.unique-visitors": "Einzigartige Besucher",
"label.uniqueCustomers": "Einzigartige Kunden",
"label.unknown": "Unbekannt",
"label.untitled": "Unbenannt",
"label.update": "Update",
"label.url": "URL",
"label.urls": "URLs",
"label.user": "Benutzer",
"label.user-property": "User Property",
"label.user-property": "Benutzereigenschaften",
"label.username": "Benutzername",
"label.users": "Benutzer",
"label.utm": "UTM",
"label.utm-description": "Tracke deine Kampagnen mit UTM parameterns.",
"label.utm-description": "Tracken Sie Ihre Kampagnen mit UTM Parametern.",
"label.value": "Wert",
"label.view": "Anzeigen",
"label.view-details": "Details anzeigen",
@ -230,9 +230,9 @@
"label.visit-duration": "Durchschn. Besuchszeit",
"label.visitors": "Besucher",
"label.visits": "Besuche",
"label.website": "Webseite",
"label.website-id": "Webseiten-ID",
"label.websites": "Webseiten",
"label.website": "Website",
"label.website-id": "Website-ID",
"label.websites": "Websites",
"label.window": "Fenster",
"label.yesterday": "Gestern",
"message.action-confirmation": "Schreibe {confirmation} in die Box zur bestätigung.",
@ -242,7 +242,7 @@
"message.confirm-leave": "Sind Sie sicher, dass die {target} verlassen möchten?",
"message.confirm-remove": "Sind Sie sicher, {target} zu entfernen?",
"message.confirm-reset": "Sind Sie sicher, dass Sie die Statistiken von {target} zurücksetzen wollen?",
"message.delete-team-warning": "Ein Team zu löschen, wird auch alle Team-Webseiten löschen.",
"message.delete-team-warning": "Ein Team zu löschen, wird auch alle Team-Websites löschen.",
"message.delete-website-warning": "Alle zugehörigen Daten werden ebenfalls gelöscht.",
"message.error": "Es ist ein Fehler aufgetreten.",
"message.event-log": "{event} auf {url}",
@ -268,12 +268,12 @@
"message.team-not-found": "Team nicht gefunden.",
"message.team-websites-info": "Websites können von jedem im Team eingesehen werden.",
"message.tracking-code": "Tracking Code",
"message.transfer-team-website-to-user": "Diese Webseite zu deinem Account transferieren?",
"message.transfer-user-website-to-team": "Wähle ein Team aus, zu dem die Webseite transferiert werden soll.",
"message.transfer-website": "Übertrage die Eigentümerrechte zu deinem Account oder einem anderen Team.",
"message.triggered-event": "Ausgelöstes Event",
"message.transfer-team-website-to-user": "Diese Website zu Ihrem Account transferieren?",
"message.transfer-user-website-to-team": "Wählen Sie ein Team aus, zu dem die Website transferiert werden soll.",
"message.transfer-website": "Übertragen Sie die Eigentümerrechte zu Ihrem Account oder einem anderen Team.",
"message.triggered-event": "Ausgelöstes Ereigniss",
"message.user-deleted": "Benutzer gelöscht.",
"message.viewed-page": "Besuchte Seite",
"message.viewed-page": "Seite besucht",
"message.visitor-log": "Besucher aus {country} benutzt {browser} auf {os} {device}",
"message.visitors-dropped-off": "Besucherverlust"
}

View File

@ -1,7 +1,7 @@
{
"label.access-code": "액세스 코드",
"label.actions": "액션",
"label.activity": "활동 기록",
"label.actions": "동작",
"label.activity": "활동",
"label.add": "추가",
"label.add-description": "설명 추가",
"label.add-member": "멤버 추가",
@ -20,7 +20,7 @@
"label.browser": "브라우저",
"label.browsers": "브라우저",
"label.cancel": "취소",
"label.change-password": "비밀번호 변경하기",
"label.change-password": "비밀번호 변경",
"label.cities": "도시",
"label.city": "도시",
"label.clear-all": "모두 지우기",
@ -32,10 +32,10 @@
"label.count": "수",
"label.countries": "국가",
"label.country": "국가",
"label.create": "생성",
"label.create-report": "리포트 생성",
"label.create-team": "팀 생성",
"label.create-user": "사용자 생성",
"label.create": "만들기",
"label.create-report": "보고서 만들기",
"label.create-team": "팀 만들기",
"label.create-user": "사용자 만들기",
"label.created": "생성됨",
"label.created-by": "작성자",
"label.current": "현재",
@ -48,13 +48,13 @@
"label.day": "일",
"label.default-date-range": "기본 날짜 범위",
"label.delete": "삭제",
"label.delete-report": "리포트 삭제",
"label.delete-report": "보고서 삭제",
"label.delete-team": "팀 삭제",
"label.delete-user": "사용자 삭제",
"label.delete-website": "웹사이트 삭제",
"label.description": "설명",
"label.desktop": "데스크",
"label.details": "세부 사항",
"label.desktop": "데스크",
"label.details": "세부 정보",
"label.device": "기기",
"label.devices": "기기",
"label.dismiss": "무시하기",
@ -63,9 +63,9 @@
"label.dropoff": "이탈",
"label.edit": "편집",
"label.edit-dashboard": "대시보드 편집",
"label.edit-member": "회원 편집",
"label.edit-member": "멤버 편집",
"label.enable-share-url": "URL 공유 활성화",
"label.end-step": "종료 단계",
"label.end-step": "마지막 단계",
"label.entry": "입장 URL",
"label.event": "이벤트",
"label.event-data": "이벤트 데이터",
@ -75,15 +75,15 @@
"label.field": "필드",
"label.fields": "필드",
"label.filter": "필터",
"label.filter-combined": "합쳐 보기",
"label.filter-combined": "합쳐 보기",
"label.filter-raw": "전체 보기",
"label.filters": "필터",
"label.first-seen": "First seen",
"label.first-seen": "첫 접속",
"label.funnel": "퍼널",
"label.funnel-description": "사용자 전환율 및 이탈률을 살펴보세요.",
"label.goal": "목표",
"label.goals": "목표",
"label.goals-description": "페이지 및 이벤트 목표를 추적합니다.",
"label.goals-description": "페이지 조회 및 이벤트 목표를 추적합니다.",
"label.greater-than": "이상",
"label.greater-than-equals": "이상",
"label.host": "호스트",
@ -94,17 +94,17 @@
"label.is-not": "해당하지 않음",
"label.is-not-set": "설정되지 않음",
"label.is-set": "설정됨",
"label.join": "가입",
"label.join-team": "팀 가입",
"label.join": "가입하기",
"label.join-team": "팀 가입하기",
"label.journey": "여정",
"label.journey-description": "사용자가 웹사이트를 탐색하는 경로를 살펴보세요.",
"label.language": "언어",
"label.languages": "언어",
"label.laptop": "노트북",
"label.last-days": "최근 {x} 일",
"label.last-hours": "최근 {x} 시간",
"label.last-months": "최근 {x} 개월",
"label.last-seen": "Last seen",
"label.last-days": "지난 {x}일",
"label.last-hours": "지난 {x}시간",
"label.last-months": "지난 {x}개월",
"label.last-seen": "마지막 접속",
"label.leave": "떠나기",
"label.leave-team": "팀 떠나기",
"label.less-than": "미만",
@ -124,56 +124,56 @@
"label.name": "이름",
"label.new-password": "새 비밀번호",
"label.none": "없음",
"label.number-of-records": "{x} {x, plural, one {record} other {레코드}}",
"label.number-of-records": "{x}개 레코드",
"label.ok": "확인",
"label.os": "운영체제",
"label.os": "운영 체제",
"label.overview": "개요",
"label.owner": "소유자",
"label.page-of": "{total} 중 {current} 페이지",
"label.page-views": "페이지 ",
"label.page-of": "페이지 {current}/{total}",
"label.page-views": "페이지 조회",
"label.pageTitle": "페이지 제목",
"label.pages": "페이지",
"label.password": "비밀번호",
"label.path": "Path",
"label.paths": "Paths",
"label.powered-by": "이 시스템은 {name}에서 구동되고 있습니다.",
"label.path": "패스",
"label.paths": "패스",
"label.powered-by": "Powered by {name}",
"label.previous": "이전",
"label.previous-period": "이전 기간",
"label.previous-year": "이전 연도",
"label.profile": "프로필",
"label.properties": "Properties",
"label.properties": "속성",
"label.property": "속성",
"label.queries": "쿼리",
"label.query": "쿼리",
"label.query-parameters": "쿼리 매개변수",
"label.query-parameters": "쿼리 매개 변수",
"label.realtime": "실시간",
"label.referrer": "리퍼러",
"label.referrers": "리퍼러",
"label.refresh": "새로고침",
"label.refresh": "새로 고침",
"label.regenerate": "다시 생성",
"label.region": "지역",
"label.regions": "지역",
"label.remove": "제거",
"label.remove-member": "멤버 제거",
"label.reports": "리포트",
"label.reports": "보고서",
"label.required": "필수",
"label.reset": "리셋",
"label.reset": "초기화",
"label.reset-website": "웹사이트 초기화",
"label.retention": "리텐션",
"label.retention-description": "사용자가 얼마나 자주 돌아오는지를 추적하여 웹사이트의 리텐션을 측정하십시오.",
"label.revenue": "Revenue",
"label.revenue-description": "Look into your revenue across time.",
"label.revenue-property": "Revenue Property",
"label.revenue": "수익",
"label.revenue-description": "시간대별 수익을 살펴보세요.",
"label.revenue-property": "수익 속성",
"label.role": "역할",
"label.run-query": "쿼리 실행",
"label.save": "저장",
"label.screens": "스크린",
"label.screens": "화면",
"label.search": "검색",
"label.select": "선택",
"label.select-date": "날짜 선택",
"label.select-role": "역할 선택",
"label.select-website": "웹사이트 선택",
"label.session": "Session",
"label.session": "세션",
"label.sessions": "세션",
"label.settings": "설정",
"label.share-url": "공유 URL",
@ -200,43 +200,43 @@
"label.today": "오늘",
"label.toggle-charts": "차트 전환",
"label.total": "합계",
"label.total-records": " 레코드",
"label.total-records": "전체 레코드",
"label.tracking-code": "추적 코드",
"label.transactions": "Transactions",
"label.transactions": "거래",
"label.transfer": "전송",
"label.transfer-website": "웹사이트 전송",
"label.true": "참",
"label.type": "유형",
"label.unique": "고유",
"label.unique-visitors": "순방문자(UV)",
"label.uniqueCustomers": "Unique Customers",
"label.unique-visitors": "고유 방문자",
"label.uniqueCustomers": "고유 고객",
"label.unknown": "알 수 없음",
"label.untitled": "제목 없음",
"label.update": "업데이트",
"label.url": "URL",
"label.urls": "URL",
"label.user": "사용자",
"label.user-property": "User Property",
"label.username": "사용자",
"label.user-property": "사용자 속성",
"label.username": "사용자 이름",
"label.users": "사용자",
"label.utm": "UTM",
"label.utm-description": "UTM 매개변수를 통해 캠페인을 추적합니다.",
"label.value": "값",
"label.view": "보기",
"label.view-details": "상세보기",
"label.view-details": "자세히 보기",
"label.view-only": "보기 전용",
"label.views": "조회",
"label.views-per-visit": "방문당 조회",
"label.views": "조회",
"label.views-per-visit": "방문당 조회",
"label.visit-duration": "평균 방문 시간",
"label.visitors": "방문",
"label.visitors": "방문",
"label.visits": "방문",
"label.website": "웹사이트",
"label.website-id": "웹사이트 ID",
"label.websites": "웹사이트",
"label.window": "창",
"label.yesterday": "어제",
"message.action-confirmation": "확인을 위해 아래 상자에 {confirmation}을(를) 입력하십시오.",
"message.active-users": "{x}명의 사용자가 보는 중입니다.",
"message.action-confirmation": "확인을 위해 아래 상자에 {confirmation}을(를) 입력하세요.",
"message.active-users": "현재 방문자 {x}명",
"message.collected-data": "수집된 데이터",
"message.confirm-delete": "{target}을(를) 삭제하시겠습니까?",
"message.confirm-leave": "{target}을(를) 떠나시겠습니까?",
@ -244,36 +244,36 @@
"message.confirm-reset": "{target}을(를) 초기화하시겠습니까?",
"message.delete-team-warning": "팀을 삭제하면 팀에 등록된 모든 웹사이트도 삭제됩니다.",
"message.delete-website-warning": "관련된 모든 데이터가 삭제됩니다.",
"message.error": "오류가 발생하였습니다.",
"message.error": "오류가 발생습니다.",
"message.event-log": "{event} - {url}",
"message.go-to-settings": "설정으로 이동",
"message.incorrect-username-password": "사용자 이름/비밀번호가 잘못되었습니다.",
"message.invalid-domain": "잘못된 도메인",
"message.min-password-length": "최소 길이는 {n}자입니다",
"message.new-version-available": "새 버전이 사용 가능합니다! - Umami {version}",
"message.no-data-available": "사용 가능한 데이터가 없습니다.",
"message.no-event-data": "사용 가능한 이벤트 데이터가 없습니다.",
"message.no-match-password": "비밀번호가 일치하지 않",
"message.incorrect-username-password": "사용자 이름 또는 비밀번호를 잘못 입력했습니다.",
"message.invalid-domain": "잘못된 도메인입니다. http/https를 포함하지 마세요.",
"message.min-password-length": "최소 {n}자여야 합니다",
"message.new-version-available": "Umami의 새 버전 {version}을(를) 사용할 수 있습니다!",
"message.no-data-available": "사용할 수 있는 데이터가 없습니다.",
"message.no-event-data": "사용할 수 있는 이벤트 데이터가 없습니다.",
"message.no-match-password": "비밀번호가 일치하지 않습니다.",
"message.no-results-found": "결과를 찾을 수 없습니다.",
"message.no-team-websites": "팀에 웹사이트가 없습니다.",
"message.no-teams": "생성된 팀이 없습니다.",
"message.no-team-websites": "팀에 웹사이트가 없습니다.",
"message.no-teams": "만든 팀이 없습니다.",
"message.no-users": "사용자가 없습니다.",
"message.no-websites-configured": "설정된 웹사이트가 없습니다.",
"message.page-not-found": "페이지를 찾을 수 없습니다.",
"message.reset-website": "이 웹사이트를 초기화하려면, 아래 상자에 {confirmation}을(를) 입력하십시오.",
"message.page-not-found": "페이지를 찾을 수 없",
"message.reset-website": "이 웹사이트를 초기화하려면 아래 상자에 {confirmation}을(를) 입력하세요.",
"message.reset-website-warning": "이 웹사이트의 모든 통계가 삭제되지만 설정은 그대로 유지됩니다.",
"message.saved": "성공적으로 저장되었습니다.",
"message.saved": "저장했습니다.",
"message.share-url": "아래 링크를 통해 웹사이트의 통계를 누구나 볼 수 있습니다.",
"message.team-already-member": "이미 팀의 회원입니다.",
"message.team-already-member": "이미 팀 멤버입니다.",
"message.team-not-found": "팀을 찾을 수 없습니다.",
"message.team-websites-info": "웹사이트는 팀 누구나 볼 수 있습니다.",
"message.tracking-code": "이 웹사이트의 통계를 추적하려면, 다음 코드를 HTML의 <head>...</head> 섹션에 추가하십시오.",
"message.team-websites-info": "웹사이트는 팀 멤버 누구나 볼 수 있습니다.",
"message.tracking-code": "이 웹사이트의 통계를 추적하려면 다음 코드를 HTML의 <head>...</head> 부분에 추가하세요.",
"message.transfer-team-website-to-user": "이 웹사이트를 당신의 계정으로 전송하시겠습니까?",
"message.transfer-user-website-to-team": "이 웹사이트를 전송받을 팀을 선택하십시오.",
"message.transfer-user-website-to-team": "이 웹사이트를 전송받을 팀을 선택하세요.",
"message.transfer-website": "웹사이트 소유권을 계정이나 다른 팀으로 전송합니다.",
"message.triggered-event": "트리거된 이벤트",
"message.user-deleted": "사용자가 삭제되었습니다.",
"message.viewed-page": "페이지 조회",
"message.visitor-log": "{country}의 {browser} 브라우저를 사용하는 {os} {device} 방문자",
"message.visitors-dropped-off": "방문자가 이탈했습니다"
"message.user-deleted": "사용자를 삭제했습니다.",
"message.viewed-page": "조회한 페이지",
"message.visitor-log": "{os} {device}에서 {browser}을(를) 사용하는 {country}의 방문자",
"message.visitors-dropped-off": "방문자 이탈함"
}

View File

@ -63,9 +63,9 @@ function getDateStringSQL(data: any, unit: string = 'utc', timezone?: string) {
function getDateSQL(field: string, unit: string, timezone?: string) {
if (timezone) {
return `date_trunc('${unit}', ${field}, '${timezone}')`;
return `toDateTime(date_trunc('${unit}', ${field}, '${timezone}'), '${timezone}')`;
}
return `date_trunc('${unit}', ${field})`;
return `toDateTime(date_trunc('${unit}', ${field}))`;
}
function mapFilter(column: string, operator: string, name: string, type: string = 'String') {

View File

@ -14,17 +14,17 @@ const log = debug('umami:prisma');
const MYSQL_DATE_FORMATS = {
minute: '%Y-%m-%dT%H:%i:00',
hour: '%Y-%m-%d %H:00:00',
day: '%Y-%m-%d',
month: '%Y-%m-01',
year: '%Y-01-01',
day: '%Y-%m-%d 00:00:00',
month: '%Y-%m-01 00:00:00',
year: '%Y-01-01 00:00:00',
};
const POSTGRESQL_DATE_FORMATS = {
minute: 'YYYY-MM-DD HH24:MI:00',
hour: 'YYYY-MM-DD HH24:00:00',
day: 'YYYY-MM-DD',
month: 'YYYY-MM-01',
year: 'YYYY-01-01',
day: 'YYYY-MM-DD HH24:00:00',
month: 'YYYY-MM-01 HH24:00:00',
year: 'YYYY-01-01 HH24:00:00',
};
function getAddIntervalQuery(field: string, interval: string): string {

View File

@ -41,8 +41,8 @@ async function clickhouseQuery(
websiteId: string,
filters: QueryFilters,
): Promise<{ x: string; y: number }[]> {
const { unit = 'day' } = filters;
const { parseFilters, rawQuery } = clickhouse;
const { timezone = 'utc', unit = 'day' } = filters;
const { parseFilters, rawQuery, getDateSQL } = clickhouse;
const { filterQuery, params } = await parseFilters(websiteId, {
...filters,
eventType: EVENT_TYPE.pageView,
@ -57,7 +57,7 @@ async function clickhouseQuery(
g.y as y
from (
select
date_trunc('${unit}', created_at) as t,
${getDateSQL('website_event.created_at', unit, timezone)} as t,
count(*) as y
from website_event
where website_id = {websiteId:UUID}
@ -75,7 +75,7 @@ async function clickhouseQuery(
g.y as y
from (
select
date_trunc('${unit}', created_at) as t,
${getDateSQL('website_event.created_at', unit, timezone)} as t,
sum(views)as y
from website_event_stats_hourly website_event
where website_id = {websiteId:UUID}

View File

@ -110,7 +110,7 @@ async function clickhouseQuery(
}[]
> {
const { startDate, endDate, timezone = 'UTC' } = filters;
const { getDateSQL, getDateStringSQL, rawQuery } = clickhouse;
const { getDateSQL, rawQuery } = clickhouse;
const unit = 'day';
return rawQuery(
@ -152,7 +152,7 @@ async function clickhouseQuery(
group by 1, 2
)
select
${getDateStringSQL('c.cohort_date', unit)} as date,
c.cohort_date as date,
c.day_number as day,
s.visitors as visitors,
c.visitors returnVisitors,

View File

@ -41,8 +41,8 @@ async function clickhouseQuery(
websiteId: string,
filters: QueryFilters,
): Promise<{ x: string; y: number }[]> {
const { unit = 'day' } = filters;
const { parseFilters, rawQuery } = clickhouse;
const { timezone = 'utc', unit = 'day' } = filters;
const { parseFilters, rawQuery, getDateSQL } = clickhouse;
const { filterQuery, params } = await parseFilters(websiteId, {
...filters,
eventType: EVENT_TYPE.pageView,
@ -57,7 +57,7 @@ async function clickhouseQuery(
g.y as y
from (
select
date_trunc('${unit}', created_at) as t,
${getDateSQL('website_event.created_at', unit, timezone)} as t,
count(distinct session_id) as y
from website_event
where website_id = {websiteId:UUID}
@ -75,7 +75,7 @@ async function clickhouseQuery(
g.y as y
from (
select
date_trunc('${unit}', created_at) as t,
${getDateSQL('website_event.created_at', unit, timezone)} as t,
uniq(session_id) as y
from website_event_stats_hourly website_event
where website_id = {websiteId:UUID}

View File

@ -222,6 +222,16 @@
}
};
const init = () => {
if (!initialized) {
track();
handlePathChanges();
handleTitleChanges();
handleClicks();
initialized = true;
}
};
const track = (obj, data) => {
if (typeof obj === 'string') {
return send({
@ -255,19 +265,10 @@
let initialized;
if (autoTrack && !trackingDisabled()) {
handlePathChanges();
handleTitleChanges();
handleClicks();
const init = () => {
if (document.readyState === 'complete' && !initialized) {
track();
initialized = true;
}
};
document.addEventListener('readystatechange', init, true);
init();
if (document.readyState === 'complete') {
init();
} else {
document.addEventListener('readystatechange', init, true);
}
}
})(window);