diff --git a/src/client/App.tsx b/src/client/App.tsx
index 7d4844c..550698f 100644
--- a/src/client/App.tsx
+++ b/src/client/App.tsx
@@ -22,14 +22,14 @@ import { StatusPage } from './pages/Status';
import { TelemetryPage } from './pages/Telemetry';
export const AppRoutes: React.FC = React.memo(() => {
- const { info } = useUserStore();
+ const { info: userInfo } = useUserStore();
const { allowRegister } = useGlobalConfig();
useInjectWebsiteScript();
return (
- {info ? (
+ {userInfo ? (
}>
} />
} />
@@ -50,7 +50,7 @@ export const AppRoutes: React.FC = React.memo(() => {
+
}
/>
diff --git a/src/client/components/telemetry/TelemetryCounter.tsx b/src/client/components/telemetry/TelemetryCounter.tsx
new file mode 100644
index 0000000..ff3a237
--- /dev/null
+++ b/src/client/components/telemetry/TelemetryCounter.tsx
@@ -0,0 +1,17 @@
+import React from 'react';
+import { trpc } from '../../api/trpc';
+import { useCurrentWorkspaceId } from '../../store/user';
+import { formatNumber } from '../../utils/common';
+
+export const TelemetryCounter: React.FC<{
+ telemetryId: string;
+}> = React.memo((props) => {
+ const workspaceId = useCurrentWorkspaceId();
+ const { data = 0 } = trpc.telemetry.eventCount.useQuery({
+ workspaceId,
+ telemetryId: props.telemetryId,
+ });
+
+ return {formatNumber(data)};
+});
+TelemetryCounter.displayName = 'TelemetryCounter';
diff --git a/src/client/components/telemetry/TelemetryList.tsx b/src/client/components/telemetry/TelemetryList.tsx
index 5aae552..8a3dc2e 100644
--- a/src/client/components/telemetry/TelemetryList.tsx
+++ b/src/client/components/telemetry/TelemetryList.tsx
@@ -12,6 +12,7 @@ import {
import { useNavigate } from 'react-router';
import { PageHeader } from '../PageHeader';
import { useEvent } from '../../hooks/useEvent';
+import { TelemetryCounter } from './TelemetryCounter';
type TelemetryInfo = AppRouterOutput['telemetry']['all'][number];
@@ -108,8 +109,20 @@ const TelemetryListTable: React.FC<{
dataIndex: 'name',
title: t('Name'),
},
+ {
+ dataIndex: 'id',
+ title: t('Count'),
+ align: 'center',
+ width: 130,
+ render: (id) => {
+ return ;
+ },
+ },
{
key: 'action',
+ title: t('Actions'),
+ align: 'right',
+ width: 240,
render: (_, record) => {
return (
diff --git a/src/client/pages/Layout.tsx b/src/client/pages/Layout.tsx
index 22c2c93..ef5fc9a 100644
--- a/src/client/pages/Layout.tsx
+++ b/src/client/pages/Layout.tsx
@@ -157,7 +157,9 @@ export const Layout: React.FC = React.memo(() => {
-
+ {alphaMode && (
+
+ )}
diff --git a/src/server/trpc/routers/telemetry.ts b/src/server/trpc/routers/telemetry.ts
index df66c08..917ab0e 100644
--- a/src/server/trpc/routers/telemetry.ts
+++ b/src/server/trpc/routers/telemetry.ts
@@ -33,6 +33,31 @@ export const telemetryRouter = router({
return res;
}),
+ eventCount: workspaceProcedure
+ .meta(
+ buildTelemetryOpenapi({
+ method: 'GET',
+ path: '/eventCount',
+ })
+ )
+ .input(
+ z.object({
+ telemetryId: z.string(),
+ })
+ )
+ .output(z.number())
+ .query(async ({ input }) => {
+ const { workspaceId, telemetryId } = input;
+
+ const count = await prisma.telemetryEvent.count({
+ where: {
+ workspaceId,
+ telemetryId,
+ },
+ });
+
+ return count;
+ }),
upsert: workspaceOwnerProcedure
.meta(
buildTelemetryOpenapi({