Merge branch 'preview' into realtime

This commit is contained in:
ccbikai 2025-05-11 18:58:02 +08:00
commit 7291beafea
3 changed files with 57 additions and 21 deletions

View file

@ -18,9 +18,9 @@ const route = useRoute()
<TabsTrigger value="/dashboard/analysis">
{{ $t('nav.analysis') }}
</TabsTrigger>
<TabsTrigger value="/dashboard/realtime">
<!-- <TabsTrigger value="/dashboard/realtime">
{{ $t('nav.realtime') }}
</TabsTrigger>
</TabsTrigger> -->
</TabsList>
</Tabs>
<slot name="left" />

View file

@ -3,7 +3,6 @@ import { scaleSequentialSqrt } from 'd3-scale'
import { interpolateYlOrRd } from 'd3-scale-chromatic'
import Globe from 'globe.gl'
import { debounce } from 'lodash-es'
import data from './data.json'
const countries = ref({})
@ -14,14 +13,14 @@ async function getWorldMapJSON() {
const liveSessionLocations = computed(() => {
const map = new Map()
data.forEach((item) => {
if (!item.country)
return
if (!map.has(item.country))
map.set(item.country, { lat: 37.75100, lon: -122.4194, count: 1 })
// data.forEach((item) => {
// if (!item.country)
// return
// if (!map.has(item.country))
// map.set(item.country, { lat: 37.75100, lon: -122.4194, count: 1 })
map.get(item.country).count += 1
})
// map.get(item.country).count += 1
// })
return Array.from(map.values())
})

View file

@ -36,27 +36,59 @@ export const blobsMap = {
blob15: 'deviceType',
} as const
export const doublesMap = {
double1: 'latitude',
double2: 'longitude',
} as const
export type BlobsMap = typeof blobsMap
export type BlobsKey = keyof BlobsMap
export type LogsKey = BlobsMap[BlobsKey]
export type LogsMap = { [key in LogsKey]: string | undefined }
export const logsMap: LogsMap = Object.entries(blobsMap).reduce((acc, [k, v]) => ({ ...acc, [v]: k }), {}) as LogsMap
export type DoublesMap = typeof doublesMap
export type DoublesKey = keyof DoublesMap
export type LogsKey = BlobsMap[BlobsKey] | DoublesMap[DoublesKey]
export type LogsMap = {
[key in BlobsMap[BlobsKey]]: string | undefined
} & {
[key in DoublesMap[DoublesKey]]?: number | undefined
}
export const logsMap = {
...Object.entries(blobsMap).reduce((acc, [k, v]) => ({ ...acc, [v]: k }), {}),
...Object.entries(doublesMap).reduce((acc, [k, v]) => ({ ...acc, [v]: k }), {}),
} as LogsMap
export function logs2blobs(logs: LogsMap) {
// @ts-expect-error todo
return Object.keys(blobsMap).sort((a, b) => toBlobNumber(a) - toBlobNumber(b)).map(key => logs[blobsMap[key]] || '')
return (Object.keys(blobsMap) as BlobsKey[])
.sort((a, b) => toBlobNumber(a) - toBlobNumber(b))
.map(key => String(logs[blobsMap[key] as LogsKey] || ''))
}
export function blobs2logs(blobs: string[]) {
const logsList = Object.keys(blobsMap)
// @ts-expect-error todo
return blobs.reduce((logs: LogsMap, blob, i) => {
// @ts-expect-error todo
logs[blobsMap[logsList[i]]] = blob
return blobs.reduce((logs, blob, i) => {
const key = blobsMap[logsList[i] as BlobsKey]
logs[key] = blob
return logs
}, {}) as LogsMap
}, {} as Partial<LogsMap>)
}
export function logs2doubles(logs: LogsMap) {
return (Object.keys(doublesMap) as DoublesKey[])
.sort((a, b) => toBlobNumber(a) - toBlobNumber(b))
.map(key => Number(logs[doublesMap[key] as LogsKey] || 0))
}
export function doubles2logs(doubles: number[]) {
const logsList = Object.keys(doublesMap)
return doubles.reduce((logs, double, i) => {
const key = doublesMap[logsList[i] as DoublesKey]
logs[key] = double
return logs
}, {} as Partial<LogsMap>)
}
export function useAccessLog(event: H3Event) {
@ -108,16 +140,21 @@ export function useAccessLog(event: H3Event) {
browserType: uaInfo?.browser?.type,
device: uaInfo?.device?.model,
deviceType: uaInfo?.device?.type,
// For RealTime Globe
latitude: Number(cf?.latitude || getHeader(event, 'cf-iplatitude') || 0),
longitude: Number(cf?.longitude || getHeader(event, 'cf-iplongitude') || 0),
}
if (process.env.NODE_ENV === 'production') {
return hubAnalytics().put({
indexes: [link.id], // only one index
blobs: logs2blobs(accessLogs),
doubles: logs2doubles(accessLogs),
})
}
else {
console.log('access logs:', logs2blobs(accessLogs), blobs2logs(logs2blobs(accessLogs)))
console.log('access logs:', accessLogs, logs2blobs(accessLogs), logs2doubles(accessLogs), { ...blobs2logs(logs2blobs(accessLogs)), ...doubles2logs(logs2doubles(accessLogs)) })
return Promise.resolve()
}
}