mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-04-28 03:20:11 +00:00
Windows Host Agent Enhancements: - Implement native Windows service support using golang.org/x/sys/windows/svc - Add Windows Event Log integration for troubleshooting - Create professional PowerShell installation/uninstallation scripts - Add process termination and retry logic to handle Windows file locking - Register uninstall endpoint at /uninstall-host-agent.ps1 Host Agent UI Improvements: - Add expandable drawer to Hosts page (click row to view details) - Display system info, network interfaces, disks, and temperatures in cards - Replace status badges with subtle colored indicators - Remove redundant master-detail sidebar layout - Add search filtering for hosts Technical Details: - service_windows.go: Windows service lifecycle management with graceful shutdown - service_stub.go: Cross-platform compatibility for non-Windows builds - install-host-agent.ps1: Full Windows installation with validation - uninstall-host-agent.ps1: Clean removal with process termination and retries - HostsOverview.tsx: Expandable row pattern matching Docker/Proxmox pages Files Added: - cmd/pulse-host-agent/service_windows.go - cmd/pulse-host-agent/service_stub.go - scripts/install-host-agent.ps1 - scripts/uninstall-host-agent.ps1 - frontend-modern/src/components/Hosts/HostsOverview.tsx - frontend-modern/src/components/Hosts/HostsFilter.tsx The Windows service now starts reliably with automatic restart on failure, and the uninstall script handles file locking gracefully without requiring reboots.
93 lines
2.3 KiB
TypeScript
93 lines
2.3 KiB
TypeScript
import { defineConfig } from 'vite';
|
|
import solid from 'vite-plugin-solid';
|
|
import path from 'path';
|
|
import { URL } from 'node:url';
|
|
|
|
const frontendDevHost = process.env.FRONTEND_DEV_HOST ?? '0.0.0.0';
|
|
const frontendDevPort = Number(
|
|
process.env.FRONTEND_DEV_PORT ?? process.env.VITE_PORT ?? process.env.PORT ?? 5173,
|
|
);
|
|
|
|
const backendProtocol = process.env.PULSE_DEV_API_PROTOCOL ?? 'http';
|
|
const backendHost = process.env.PULSE_DEV_API_HOST ?? '127.0.0.1';
|
|
const backendPort = Number(
|
|
process.env.PULSE_DEV_API_PORT ??
|
|
process.env.FRONTEND_PORT ??
|
|
process.env.PORT ??
|
|
7655,
|
|
);
|
|
|
|
const backendUrl =
|
|
process.env.PULSE_DEV_API_URL ?? `${backendProtocol}://${backendHost}:${backendPort}`;
|
|
|
|
const backendWsUrl =
|
|
process.env.PULSE_DEV_WS_URL ??
|
|
(() => {
|
|
try {
|
|
const parsed = new URL(backendUrl);
|
|
parsed.protocol = parsed.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
return parsed.toString();
|
|
} catch {
|
|
return backendUrl
|
|
.replace(/^http:\/\//i, 'ws://')
|
|
.replace(/^https:\/\//i, 'wss://');
|
|
}
|
|
})();
|
|
|
|
export default defineConfig({
|
|
plugins: [solid()],
|
|
resolve: {
|
|
alias: {
|
|
'@': path.resolve(__dirname, './src'),
|
|
'lucide-solid/icons': path.resolve(__dirname, './node_modules/lucide-solid/dist/esm/icons'),
|
|
},
|
|
conditions: ['import', 'browser', 'default'],
|
|
},
|
|
optimizeDeps: {
|
|
include: ['lucide-solid'],
|
|
force: true,
|
|
},
|
|
ssr: {
|
|
noExternal: ['lucide-solid'],
|
|
},
|
|
server: {
|
|
port: frontendDevPort,
|
|
host: frontendDevHost, // Listen on all interfaces for remote access
|
|
strictPort: true,
|
|
proxy: {
|
|
'/ws': {
|
|
target: backendWsUrl,
|
|
ws: true,
|
|
changeOrigin: true,
|
|
},
|
|
'/api': {
|
|
target: backendUrl,
|
|
changeOrigin: true,
|
|
},
|
|
'/install-docker-agent.sh': {
|
|
target: backendUrl,
|
|
changeOrigin: true,
|
|
},
|
|
'/install-host-agent.sh': {
|
|
target: backendUrl,
|
|
changeOrigin: true,
|
|
},
|
|
'/install-host-agent.ps1': {
|
|
target: backendUrl,
|
|
changeOrigin: true,
|
|
},
|
|
'/download': {
|
|
target: backendUrl,
|
|
changeOrigin: true,
|
|
},
|
|
},
|
|
},
|
|
build: {
|
|
target: 'esnext',
|
|
},
|
|
test: {
|
|
environment: 'jsdom',
|
|
globals: true,
|
|
setupFiles: ['./src/test/setup.ts'],
|
|
},
|
|
});
|