145 行
3.0 KiB
TypeScript
145 行
3.0 KiB
TypeScript
|
|
import client from './client'
|
||
|
|
|
||
|
|
// ---- Types ----
|
||
|
|
|
||
|
|
export interface LogOverview {
|
||
|
|
totalIssues: number
|
||
|
|
todayNew: number
|
||
|
|
affectedUsers: number
|
||
|
|
crashRate: number
|
||
|
|
dailyTrend: Array<{ date: string; crashRate: number }>
|
||
|
|
topIssues: LogIssueSummary[]
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface LogIssueSummary {
|
||
|
|
id: string
|
||
|
|
title: string
|
||
|
|
type: string
|
||
|
|
count: number
|
||
|
|
affectedUsers: number
|
||
|
|
platform: string
|
||
|
|
lastSeenAt: string
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface LogIssuePage {
|
||
|
|
content: LogIssueSummary[]
|
||
|
|
total: number
|
||
|
|
totalPages: number
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface LogIssueDetail {
|
||
|
|
id: string
|
||
|
|
title: string
|
||
|
|
type: string
|
||
|
|
count: number
|
||
|
|
affectedUsers: number
|
||
|
|
platform: string
|
||
|
|
firstSeenAt: string
|
||
|
|
lastSeenAt: string
|
||
|
|
status: string
|
||
|
|
events: LogEvent[]
|
||
|
|
sourceContext?: string
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface LogEvent {
|
||
|
|
id: string
|
||
|
|
issueId: string
|
||
|
|
userId: string
|
||
|
|
platform: string
|
||
|
|
appVersion: string
|
||
|
|
osVersion: string
|
||
|
|
device: string
|
||
|
|
timestamp: string
|
||
|
|
properties: Record<string, unknown>
|
||
|
|
stackTrace?: string
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface LogEventPage {
|
||
|
|
content: LogEvent[]
|
||
|
|
total: number
|
||
|
|
totalPages: number
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface LogFunnelStep {
|
||
|
|
name: string
|
||
|
|
count: number
|
||
|
|
rate: number
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface LogFunnelResult {
|
||
|
|
steps: LogFunnelStep[]
|
||
|
|
totalStart: number
|
||
|
|
totalEnd: number
|
||
|
|
overallRate: number
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface LogRankingItem {
|
||
|
|
id: string
|
||
|
|
title: string
|
||
|
|
type: string
|
||
|
|
count: number
|
||
|
|
affectedUsers: number
|
||
|
|
platform: string
|
||
|
|
rank: number
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface LogWebhook {
|
||
|
|
id: string
|
||
|
|
name: string
|
||
|
|
url: string
|
||
|
|
events: string[]
|
||
|
|
enabled: boolean
|
||
|
|
secret?: string
|
||
|
|
createdAt: string
|
||
|
|
updatedAt: string
|
||
|
|
}
|
||
|
|
|
||
|
|
// ---- API ----
|
||
|
|
|
||
|
|
export const logApi = {
|
||
|
|
getOverview: () =>
|
||
|
|
client.get<{ data: LogOverview }>('/log/v1/overview'),
|
||
|
|
|
||
|
|
listIssues: (params: {
|
||
|
|
type?: string
|
||
|
|
platform?: string
|
||
|
|
startDate?: string
|
||
|
|
endDate?: string
|
||
|
|
page?: number
|
||
|
|
size?: number
|
||
|
|
}) =>
|
||
|
|
client.get<{ data: LogIssuePage }>('/log/v1/issues', { params }),
|
||
|
|
|
||
|
|
getIssueDetail: (id: string) =>
|
||
|
|
client.get<{ data: LogIssueDetail }>(`/log/v1/issues/${id}`),
|
||
|
|
|
||
|
|
getFrequencyRanking: (limit = 10) =>
|
||
|
|
client.get<{ data: LogRankingItem[] }>('/log/v1/issues/rankings/frequency', { params: { limit } }),
|
||
|
|
|
||
|
|
getRiskRanking: (limit = 10) =>
|
||
|
|
client.get<{ data: LogRankingItem[] }>('/log/v1/issues/rankings/risk', { params: { limit } }),
|
||
|
|
|
||
|
|
listEvents: (params: {
|
||
|
|
eventName?: string
|
||
|
|
userId?: string
|
||
|
|
page?: number
|
||
|
|
size?: number
|
||
|
|
}) =>
|
||
|
|
client.get<{ data: LogEventPage }>('/log/v1/events', { params }),
|
||
|
|
|
||
|
|
getFunnel: (steps: string[]) =>
|
||
|
|
client.get<{ data: LogFunnelResult }>('/log/v1/events/funnel', { params: { steps } }),
|
||
|
|
|
||
|
|
listWebhooks: () =>
|
||
|
|
client.get<{ data: LogWebhook[] }>('/log/v1/webhooks'),
|
||
|
|
|
||
|
|
createWebhook: (data: Omit<LogWebhook, 'id' | 'createdAt' | 'updatedAt'>) =>
|
||
|
|
client.post<{ data: LogWebhook }>('/log/v1/webhooks', data),
|
||
|
|
|
||
|
|
updateWebhook: (id: string, data: Partial<LogWebhook>) =>
|
||
|
|
client.put<{ data: LogWebhook }>(`/log/v1/webhooks/${id}`, data),
|
||
|
|
|
||
|
|
deleteWebhook: (id: string) =>
|
||
|
|
client.delete(`/log/v1/webhooks/${id}`),
|
||
|
|
}
|