mirror of
https://github.com/umami-software/umami.git
synced 2026-02-25 06:55:35 +01:00
Add dashboard filter controls and improve Redis reconnect handling
This commit is contained in:
parent
3d2f7f5a4b
commit
6a2692b521
3 changed files with 37 additions and 0 deletions
|
|
@ -1,6 +1,7 @@
|
|||
'use client';
|
||||
import { Column } from '@umami/react-zen';
|
||||
import { useEffect } from 'react';
|
||||
import { BoardControls } from '@/app/(main)/boards/[boardId]/BoardControls';
|
||||
import { BoardEditBody } from '@/app/(main)/boards/[boardId]/BoardEditBody';
|
||||
import { PageBody } from '@/components/common/PageBody';
|
||||
import { useNavigation } from '@/components/hooks';
|
||||
|
|
@ -25,6 +26,7 @@ export function DashboardEditPage() {
|
|||
<PageBody>
|
||||
<Column>
|
||||
<DashboardEditHeader />
|
||||
<BoardControls />
|
||||
<BoardEditBody requiresBoardWebsite={false} />
|
||||
</Column>
|
||||
</PageBody>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
'use client';
|
||||
import { Column } from '@umami/react-zen';
|
||||
import { useEffect } from 'react';
|
||||
import { BoardControls } from '@/app/(main)/boards/[boardId]/BoardControls';
|
||||
import { BoardViewBody } from '@/app/(main)/boards/[boardId]/BoardViewBody';
|
||||
import { Empty } from '@/components/common/Empty';
|
||||
import { PageBody } from '@/components/common/PageBody';
|
||||
|
|
@ -39,6 +40,7 @@ export function DashboardViewPage() {
|
|||
<PageBody>
|
||||
<Column>
|
||||
<DashboardViewHeader />
|
||||
<BoardControls />
|
||||
<DashboardContent />
|
||||
</Column>
|
||||
</PageBody>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,39 @@ const enabled = !!process.env.REDIS_URL;
|
|||
|
||||
function getClient() {
|
||||
const redis = new UmamiRedisClient({ url: process.env.REDIS_URL });
|
||||
const originalConnect = redis.connect.bind(redis);
|
||||
let connectPromise: Promise<void> | null = null;
|
||||
|
||||
const resetConnectionState = () => {
|
||||
redis.isConnected = false;
|
||||
};
|
||||
|
||||
redis.client.on('end', resetConnectionState);
|
||||
redis.client.on('reconnecting', resetConnectionState);
|
||||
|
||||
redis.connect = async () => {
|
||||
if (redis.client.isReady || redis.client.isOpen) {
|
||||
redis.isConnected = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (connectPromise) {
|
||||
return connectPromise;
|
||||
}
|
||||
|
||||
connectPromise = (async () => {
|
||||
try {
|
||||
await originalConnect();
|
||||
} catch (error) {
|
||||
redis.isConnected = false;
|
||||
throw error;
|
||||
} finally {
|
||||
connectPromise = null;
|
||||
}
|
||||
})();
|
||||
|
||||
return connectPromise;
|
||||
};
|
||||
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
globalThis[REDIS] = redis;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue