@gravito/zenith 1.1.3 → 1.1.6

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.
Files changed (70) hide show
  1. package/README.md +28 -10
  2. package/dist/bin.js +43235 -76691
  3. package/dist/client/index.html +13 -0
  4. package/dist/server/index.js +43235 -76691
  5. package/package.json +16 -7
  6. package/CHANGELOG.md +0 -62
  7. package/Dockerfile +0 -46
  8. package/Dockerfile.demo-worker +0 -29
  9. package/bin/flux-console.ts +0 -2
  10. package/doc/ECOSYSTEM_EXPANSION_RFC.md +0 -130
  11. package/docker-compose.yml +0 -40
  12. package/docs/ALERTING_GUIDE.md +0 -71
  13. package/docs/DEPLOYMENT.md +0 -157
  14. package/docs/DOCS_INTERNAL.md +0 -73
  15. package/docs/LARAVEL_ZENITH_ROADMAP.md +0 -109
  16. package/docs/QUASAR_MASTER_PLAN.md +0 -140
  17. package/docs/QUICK_TEST_GUIDE.md +0 -72
  18. package/docs/ROADMAP.md +0 -85
  19. package/docs/integrations/LARAVEL.md +0 -207
  20. package/postcss.config.js +0 -6
  21. package/scripts/debug_redis_keys.ts +0 -24
  22. package/scripts/flood-logs.ts +0 -21
  23. package/scripts/seed.ts +0 -213
  24. package/scripts/verify-throttle.ts +0 -49
  25. package/scripts/worker.ts +0 -124
  26. package/specs/PULSE_SPEC.md +0 -86
  27. package/src/bin.ts +0 -6
  28. package/src/client/App.tsx +0 -72
  29. package/src/client/Layout.tsx +0 -669
  30. package/src/client/Sidebar.tsx +0 -112
  31. package/src/client/ThroughputChart.tsx +0 -158
  32. package/src/client/WorkerStatus.tsx +0 -202
  33. package/src/client/components/BrandIcons.tsx +0 -168
  34. package/src/client/components/ConfirmDialog.tsx +0 -134
  35. package/src/client/components/JobInspector.tsx +0 -487
  36. package/src/client/components/LogArchiveModal.tsx +0 -432
  37. package/src/client/components/NotificationBell.tsx +0 -212
  38. package/src/client/components/PageHeader.tsx +0 -47
  39. package/src/client/components/Toaster.tsx +0 -90
  40. package/src/client/components/UserProfileDropdown.tsx +0 -186
  41. package/src/client/contexts/AuthContext.tsx +0 -105
  42. package/src/client/contexts/NotificationContext.tsx +0 -128
  43. package/src/client/index.css +0 -172
  44. package/src/client/main.tsx +0 -15
  45. package/src/client/pages/LoginPage.tsx +0 -164
  46. package/src/client/pages/MetricsPage.tsx +0 -445
  47. package/src/client/pages/OverviewPage.tsx +0 -519
  48. package/src/client/pages/PulsePage.tsx +0 -409
  49. package/src/client/pages/QueuesPage.tsx +0 -378
  50. package/src/client/pages/SchedulesPage.tsx +0 -535
  51. package/src/client/pages/SettingsPage.tsx +0 -1001
  52. package/src/client/pages/WorkersPage.tsx +0 -380
  53. package/src/client/pages/index.ts +0 -8
  54. package/src/client/utils.ts +0 -15
  55. package/src/server/config/ServerConfigManager.ts +0 -90
  56. package/src/server/index.ts +0 -860
  57. package/src/server/middleware/auth.ts +0 -127
  58. package/src/server/services/AlertService.ts +0 -321
  59. package/src/server/services/CommandService.ts +0 -136
  60. package/src/server/services/LogStreamProcessor.ts +0 -93
  61. package/src/server/services/MaintenanceScheduler.ts +0 -78
  62. package/src/server/services/PulseService.ts +0 -148
  63. package/src/server/services/QueueMetricsCollector.ts +0 -138
  64. package/src/server/services/QueueService.ts +0 -924
  65. package/src/shared/types.ts +0 -223
  66. package/tailwind.config.js +0 -80
  67. package/tests/placeholder.test.ts +0 -7
  68. package/tsconfig.json +0 -29
  69. package/tsconfig.node.json +0 -10
  70. package/vite.config.ts +0 -27
@@ -1,223 +0,0 @@
1
- /**
2
- * Metrics representing CPU usage for a specific node/process.
3
- *
4
- * Used to visualize load distribution and identify CPU-bound workers.
5
- *
6
- * @public
7
- * @since 3.0.0
8
- */
9
- export interface PulseCpu {
10
- /** System-wide CPU usage percentage (0-100). */
11
- system: number
12
- /** Process-specific CPU usage percentage (0-100). */
13
- process: number
14
- /** Number of CPU cores available on the host. */
15
- cores: number
16
- }
17
-
18
- /**
19
- * Metrics representing memory usage for a specific node/process.
20
- *
21
- * Critical for detecting memory leaks and capacity planning.
22
- *
23
- * @public
24
- * @since 3.0.0
25
- */
26
- export interface PulseMemory {
27
- /** System-wide memory statistics. */
28
- system: {
29
- /** Total system memory in bytes. */
30
- total: number
31
- /** Free system memory in bytes. */
32
- free: number
33
- /** Used system memory in bytes. */
34
- used: number
35
- }
36
- /** Process-specific memory statistics. */
37
- process: {
38
- /** Resident Set Size (RSS) in bytes. */
39
- rss: number
40
- /** Total allocated heap size in bytes. */
41
- heapTotal: number
42
- /** Used heap size in bytes. */
43
- heapUsed: number
44
- }
45
- }
46
-
47
- /**
48
- * Runtime metadata for a monitored process.
49
- *
50
- * Provides context about the environment (Node.js version, platform)
51
- * and current health status.
52
- *
53
- * @public
54
- * @since 3.0.0
55
- */
56
- export interface PulseRuntime {
57
- /** Uptime in seconds. */
58
- uptime: number
59
- /** Framework or runtime identification (e.g., "Node 21.4"). */
60
- framework: string
61
- /** Current process status (e.g., 'online', 'maintenance'). */
62
- status?: string
63
- /** Last few error messages captured from the process stderr/logs. */
64
- errors?: string[]
65
- }
66
-
67
- /**
68
- * Statistics snapshot for a specific queue.
69
- *
70
- * Represents the state of a queue at a specific point in time, including
71
- * job counts and throughput metrics. Used for dashboard graphs.
72
- *
73
- * @public
74
- * @since 3.0.0
75
- */
76
- export interface QueueSnapshot {
77
- /** The name of the queue. */
78
- name: string
79
- /** The driver used (redis, sqs, etc.). */
80
- driver: 'redis' | 'sqs' | 'rabbitmq'
81
- /** Current counts of jobs in different states. */
82
- size: {
83
- waiting: number
84
- active: number
85
- failed: number
86
- delayed: number
87
- }
88
- /** Historical throughput data (jobs processed per minute). */
89
- throughput?: {
90
- in: number
91
- out: number
92
- }
93
- }
94
-
95
- /**
96
- * Represents a single application instance (node) monitored by Zenith.
97
- *
98
- * A PulseNode corresponds to a running process (e.g., a worker, API server)
99
- * that emits heartbeats. These nodes form the cluster topology.
100
- *
101
- * @public
102
- * @since 3.0.0
103
- */
104
- export interface PulseNode {
105
- /** Unique execution ID for the node (usually UUID). */
106
- id: string
107
- /** Service group name (e.g., "payment-worker", "api-gateway"). */
108
- service: string
109
- /** Programming language or runtime type. */
110
- language: 'node' | 'bun' | 'deno' | 'php' | 'go' | 'python' | 'other'
111
- /** Application version (from package.json). */
112
- version: string
113
- /** Process identifier (PID). */
114
- pid: number
115
- /** Hostname of the machine. */
116
- hostname: string
117
- /** Operating system platform (darwin, linux, win32). */
118
- platform: string
119
- /** CPU metrics. */
120
- cpu: PulseCpu
121
- /** Memory metrics. */
122
- memory: PulseMemory
123
- /** Optional list of queues managed by this node. */
124
- queues?: QueueSnapshot[]
125
- /** Runtime details. */
126
- runtime: PulseRuntime
127
- /** Unstructured metadata (e.g., framework-specific details). */
128
- meta?: any
129
- /** Epoch timestamp of the last heartbeat received. */
130
- timestamp: number
131
- }
132
-
133
- /**
134
- * Definition of an alert rule for monitoring health.
135
- *
136
- * Alert rules define conditions that trigger notifications, such as
137
- * high queue backlogs or worker failures.
138
- *
139
- * @public
140
- * @since 3.0.0
141
- */
142
- export interface AlertRule {
143
- /** Unique rule ID. */
144
- id: string
145
- /** Human-readable name. */
146
- name: string
147
- /** The metric type to monitor. */
148
- type: 'backlog' | 'failure' | 'worker_lost' | 'node_cpu' | 'node_ram'
149
- /** The value that triggers the alert (e.g., > 100 jobs). */
150
- threshold: number
151
- /** Optional queue name to scope the rule to. */
152
- queue?: string
153
- /** Minutes to wait before re-triggering the alert (debounce). */
154
- cooldownMinutes: number
155
- }
156
-
157
- /**
158
- * Configuration for alert notification channels.
159
- *
160
- * Defines where alerts should be sent when triggered.
161
- *
162
- * @public
163
- * @since 3.0.0
164
- */
165
- export interface AlertConfig {
166
- /** Map of enabled notification channels. */
167
- channels: {
168
- slack?: {
169
- enabled: boolean
170
- webhookUrl: string
171
- }
172
- discord?: {
173
- enabled: boolean
174
- webhookUrl: string
175
- }
176
- email?: {
177
- enabled: boolean
178
- smtpHost: string
179
- smtpPort: number
180
- smtpUser: string
181
- smtpPass: string
182
- from: string
183
- to: string
184
- }
185
- }
186
- }
187
-
188
- /**
189
- * Configuration for automated system maintenance.
190
- *
191
- * Controls data retention policies and auto-cleanup tasks.
192
- *
193
- * @public
194
- * @since 3.0.0
195
- */
196
- export interface MaintenanceConfig {
197
- /** Whether to automatically delete old data. */
198
- autoCleanup: boolean
199
- /** Number of days to retain records (logs, metrics). */
200
- retentionDays: number
201
- /** Timestamp of the last maintenance run. */
202
- lastRun?: number
203
- }
204
-
205
- /**
206
- * Represents a historical alert event.
207
- *
208
- * Stored in the database/log to track system health history.
209
- *
210
- * @public
211
- * @since 3.0.0
212
- */
213
- export interface AlertEvent {
214
- id?: string
215
- ruleId: string
216
- ruleName?: string
217
- type?: string
218
- severity: 'critical' | 'warning' | 'info'
219
- message: string
220
- timestamp: number
221
- resolved?: boolean
222
- resolvedAt?: number
223
- }
@@ -1,80 +0,0 @@
1
- /** @type {import('tailwindcss').Config} */
2
- export default {
3
- content: ['./src/client/index.html', './src/client/**/*.{js,ts,jsx,tsx}'],
4
- theme: {
5
- extend: {
6
- colors: {
7
- background: 'hsl(var(--background))',
8
- foreground: 'hsl(var(--foreground))',
9
- oled: '#000000',
10
- cyan: {
11
- 500: '#00F0FF',
12
- accent: '#00F0FF',
13
- },
14
- card: {
15
- DEFAULT: 'hsl(var(--card))',
16
- foreground: 'hsl(var(--card-foreground))',
17
- },
18
- popover: {
19
- DEFAULT: 'hsl(var(--popover))',
20
- foreground: 'hsl(var(--popover-foreground))',
21
- },
22
- primary: {
23
- DEFAULT: 'hsl(var(--primary))',
24
- foreground: 'hsl(var(--primary-foreground))',
25
- },
26
- secondary: {
27
- DEFAULT: 'hsl(var(--secondary))',
28
- foreground: 'hsl(var(--secondary-foreground))',
29
- },
30
- muted: {
31
- DEFAULT: 'hsl(var(--muted))',
32
- foreground: 'hsl(var(--muted-foreground))',
33
- },
34
- accent: {
35
- DEFAULT: 'hsl(var(--accent))',
36
- foreground: 'hsl(var(--accent-foreground))',
37
- },
38
- destructive: {
39
- DEFAULT: 'hsl(var(--destructive))',
40
- foreground: 'hsl(var(--destructive-foreground))',
41
- },
42
- border: 'hsl(var(--border))',
43
- input: 'hsl(var(--input))',
44
- ring: 'hsl(var(--ring))',
45
- chart: {
46
- 1: 'hsl(var(--chart-1))',
47
- 2: 'hsl(var(--chart-2))',
48
- 3: 'hsl(var(--chart-3))',
49
- 4: 'hsl(var(--chart-4))',
50
- 5: 'hsl(var(--chart-5))',
51
- },
52
- },
53
- borderRadius: {
54
- lg: 'var(--radius)',
55
- md: 'calc(var(--radius) - 2px)',
56
- sm: 'calc(var(--radius) - 4px)',
57
- },
58
- keyframes: {
59
- 'accordion-down': {
60
- from: { height: '0' },
61
- to: { height: 'var(--radix-accordion-content-height)' },
62
- },
63
- 'accordion-up': {
64
- from: { height: 'var(--radix-accordion-content-height)' },
65
- to: { height: '0' },
66
- },
67
- },
68
- animation: {
69
- 'accordion-down': 'accordion-down 0.2s ease-out',
70
- 'accordion-up': 'accordion-up 0.2s ease-out',
71
- },
72
- fontFamily: {
73
- sans: ['Poppins', 'ui-sans-serif', 'system-ui', 'sans-serif'],
74
- mono: ['Fira Code', 'ui-monospace', 'SFMono-Regular', 'monospace'],
75
- heading: ['Poppins', 'sans-serif'],
76
- },
77
- },
78
- },
79
- plugins: [],
80
- }
@@ -1,7 +0,0 @@
1
- import { describe, expect, it } from 'bun:test'
2
-
3
- describe('zenith', () => {
4
- it('should have a test', () => {
5
- expect(true).toBe(true)
6
- })
7
- })
package/tsconfig.json DELETED
@@ -1,29 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "compilerOptions": {
4
- "target": "ESNext",
5
- "useDefineForClassFields": true,
6
- "lib": ["ESNext", "DOM", "DOM.Iterable"],
7
- "module": "ESNext",
8
- "skipLibCheck": true,
9
- /* Bundler mode */
10
- "moduleResolution": "bundler",
11
- "allowImportingTsExtensions": true,
12
- "resolveJsonModule": true,
13
- "isolatedModules": true,
14
- "noEmit": true,
15
- "jsx": "react-jsx",
16
- /* Linting */
17
- "strict": true,
18
- "noUnusedLocals": true,
19
- "noUnusedParameters": true,
20
- "noFallthroughCasesInSwitch": true,
21
- "types": ["bun-types", "vite/client"]
22
- },
23
- "include": ["src"],
24
- "references": [
25
- {
26
- "path": "./tsconfig.node.json"
27
- }
28
- ]
29
- }
@@ -1,10 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "composite": true,
4
- "skipLibCheck": true,
5
- "module": "ESNext",
6
- "moduleResolution": "bundler",
7
- "allowSyntheticDefaultImports": true
8
- },
9
- "include": ["vite.config.ts"]
10
- }
package/vite.config.ts DELETED
@@ -1,27 +0,0 @@
1
- import { resolve } from 'node:path'
2
- import react from '@vitejs/plugin-react'
3
- import { defineConfig } from 'vite'
4
-
5
- // https://vitejs.dev/config/
6
- export default defineConfig({
7
- plugins: [react()],
8
- root: 'src/client',
9
- publicDir: '../../public',
10
- build: {
11
- outDir: '../../dist/client',
12
- emptyOutDir: true,
13
- },
14
- resolve: {
15
- alias: {
16
- '@': resolve(__dirname, './src/client'),
17
- },
18
- },
19
- server: {
20
- proxy: {
21
- '/api': {
22
- target: 'http://localhost:3000',
23
- changeOrigin: true,
24
- },
25
- },
26
- },
27
- })