@gravito/zenith 1.0.0-beta.1 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/dist/bin.js +436 -43
- package/dist/client/assets/index-C332gZ-J.css +1 -0
- package/dist/client/assets/{index-oXEse8ih.js → index-D4HibwTK.js} +88 -88
- package/dist/client/index.html +2 -2
- package/dist/server/index.js +436 -43
- package/docs/LARAVEL_ZENITH_ROADMAP.md +109 -0
- package/{QUASAR_MASTER_PLAN.md → docs/QUASAR_MASTER_PLAN.md} +6 -3
- package/package.json +1 -1
- package/scripts/debug_redis_keys.ts +24 -0
- package/src/client/App.tsx +1 -1
- package/src/client/Layout.tsx +11 -12
- package/src/client/WorkerStatus.tsx +97 -56
- package/src/client/components/BrandIcons.tsx +119 -44
- package/src/client/components/ConfirmDialog.tsx +0 -1
- package/src/client/components/JobInspector.tsx +18 -6
- package/src/client/components/PageHeader.tsx +32 -28
- package/src/client/pages/OverviewPage.tsx +0 -1
- package/src/client/pages/PulsePage.tsx +422 -340
- package/src/client/pages/SettingsPage.tsx +69 -15
- package/src/client/pages/WorkersPage.tsx +70 -2
- package/src/server/index.ts +171 -11
- package/src/server/services/QueueService.ts +6 -3
- package/src/shared/types.ts +2 -0
- package/ARCHITECTURE.md +0 -88
- package/BATCH_OPERATIONS_IMPLEMENTATION.md +0 -159
- package/EVOLUTION_BLUEPRINT.md +0 -112
- package/JOBINSPECTOR_SCROLL_FIX.md +0 -152
- package/TESTING_BATCH_OPERATIONS.md +0 -252
- package/dist/client/assets/index-BSTyMCFd.css +0 -1
- /package/{ALERTING_GUIDE.md → docs/ALERTING_GUIDE.md} +0 -0
- /package/{DEPLOYMENT.md → docs/DEPLOYMENT.md} +0 -0
- /package/{DOCS_INTERNAL.md → docs/DOCS_INTERNAL.md} +0 -0
- /package/{QUICK_TEST_GUIDE.md → docs/QUICK_TEST_GUIDE.md} +0 -0
- /package/{ROADMAP.md → docs/ROADMAP.md} +0 -0
|
@@ -35,7 +35,6 @@ export function ConfirmDialog({
|
|
|
35
35
|
onClick={(e) => e.stopPropagation()}
|
|
36
36
|
onKeyDown={(e) => e.stopPropagation()}
|
|
37
37
|
>
|
|
38
|
-
{/* biome-ignore lint/a11y/noStaticElementInteractions: Modal content needs to stop propagation */}
|
|
39
38
|
<motion.div
|
|
40
39
|
initial={{ scale: 0.9, opacity: 0 }}
|
|
41
40
|
animate={{ scale: 1, opacity: 1 }}
|
|
@@ -83,14 +83,18 @@ export function JobInspector({ queueName, onClose }: JobInspectorProps) {
|
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
const toggleSelectAll = React.useCallback(() => {
|
|
86
|
-
if (!data?.jobs)
|
|
86
|
+
if (!data?.jobs) {
|
|
87
|
+
return
|
|
88
|
+
}
|
|
87
89
|
const availableCount = data.jobs.filter((j) => j._raw && !j._archived).length
|
|
88
90
|
if (selectedIndices.size === availableCount && availableCount > 0) {
|
|
89
91
|
setSelectedIndices(new Set())
|
|
90
92
|
} else {
|
|
91
93
|
const indices = new Set<number>()
|
|
92
94
|
data.jobs.forEach((j, i) => {
|
|
93
|
-
if (j._raw && !j._archived)
|
|
95
|
+
if (j._raw && !j._archived) {
|
|
96
|
+
indices.add(i)
|
|
97
|
+
}
|
|
94
98
|
})
|
|
95
99
|
setSelectedIndices(indices)
|
|
96
100
|
}
|
|
@@ -134,10 +138,14 @@ export function JobInspector({ queueName, onClose }: JobInspectorProps) {
|
|
|
134
138
|
}, [])
|
|
135
139
|
|
|
136
140
|
const handleAction = async (action: 'delete' | 'retry', job: Job) => {
|
|
137
|
-
if (!job._raw)
|
|
141
|
+
if (!job._raw) {
|
|
142
|
+
return
|
|
143
|
+
}
|
|
138
144
|
const endpoint = action === 'delete' ? 'delete' : 'retry'
|
|
139
145
|
const body: any = { raw: job._raw }
|
|
140
|
-
if (action === 'delete')
|
|
146
|
+
if (action === 'delete') {
|
|
147
|
+
body.type = view
|
|
148
|
+
}
|
|
141
149
|
|
|
142
150
|
await fetch(`/api/queues/${queueName}/jobs/${endpoint}`, {
|
|
143
151
|
method: 'POST',
|
|
@@ -150,7 +158,9 @@ export function JobInspector({ queueName, onClose }: JobInspectorProps) {
|
|
|
150
158
|
}
|
|
151
159
|
|
|
152
160
|
const handleBulkAction = async (action: 'delete' | 'retry') => {
|
|
153
|
-
if (selectedIndices.size === 0 || !data?.jobs)
|
|
161
|
+
if (selectedIndices.size === 0 || !data?.jobs) {
|
|
162
|
+
return
|
|
163
|
+
}
|
|
154
164
|
|
|
155
165
|
const count = selectedIndices.size
|
|
156
166
|
setConfirmDialog({
|
|
@@ -186,7 +196,9 @@ export function JobInspector({ queueName, onClose }: JobInspectorProps) {
|
|
|
186
196
|
}
|
|
187
197
|
|
|
188
198
|
const handleBulkActionAll = async (action: 'delete' | 'retry') => {
|
|
189
|
-
if (view === 'archive')
|
|
199
|
+
if (view === 'archive') {
|
|
200
|
+
return
|
|
201
|
+
}
|
|
190
202
|
|
|
191
203
|
setConfirmDialog({
|
|
192
204
|
open: true,
|
|
@@ -1,34 +1,38 @@
|
|
|
1
|
-
import { LucideIcon } from 'lucide-react'
|
|
2
|
-
import { ReactNode } from 'react'
|
|
1
|
+
import type { LucideIcon } from 'lucide-react'
|
|
2
|
+
import type { ReactNode } from 'react'
|
|
3
3
|
import { cn } from '../utils'
|
|
4
4
|
|
|
5
5
|
interface PageHeaderProps {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
icon: LucideIcon
|
|
7
|
+
title: string
|
|
8
|
+
description?: string
|
|
9
|
+
children?: ReactNode
|
|
10
|
+
className?: string
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
export function PageHeader({
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
13
|
+
export function PageHeader({
|
|
14
|
+
icon: Icon,
|
|
15
|
+
title,
|
|
16
|
+
description,
|
|
17
|
+
children,
|
|
18
|
+
className,
|
|
19
|
+
}: PageHeaderProps) {
|
|
20
|
+
return (
|
|
21
|
+
<div className={cn('flex justify-between items-end', className)}>
|
|
22
|
+
<div>
|
|
23
|
+
<h1 className="text-4xl font-black tracking-tighter flex items-center gap-3">
|
|
24
|
+
<div className="p-2 bg-primary/10 rounded-xl text-primary">
|
|
25
|
+
<Icon size={32} />
|
|
26
|
+
</div>
|
|
27
|
+
{title}
|
|
28
|
+
</h1>
|
|
29
|
+
{description && (
|
|
30
|
+
<p className="text-muted-foreground mt-2 text-sm font-bold opacity-60 uppercase tracking-widest pl-[3.75rem]">
|
|
31
|
+
{description}
|
|
32
|
+
</p>
|
|
33
|
+
)}
|
|
34
|
+
</div>
|
|
35
|
+
<div>{children}</div>
|
|
36
|
+
</div>
|
|
37
|
+
)
|
|
34
38
|
}
|