From bdb347cb2409583160a657d9f7bda9ccbcd190e3 Mon Sep 17 00:00:00 2001 From: Akino Date: Thu, 10 Apr 2025 13:53:39 +0000 Subject: [PATCH] feat: add field of nginx worker processes mode --- app/src/api/ngx.ts | 5 +++++ app/src/composables/useNginxPerformance.ts | 3 +-- app/src/views/dashboard/NginxDashBoard.vue | 15 ++++++--------- .../components/PerformanceTablesCard.vue | 6 +++++- internal/nginx/config_info.go | 8 ++++++-- internal/nginx/performance.go | 13 ++++++++----- internal/nginx/process_info.go | 2 ++ internal/nginx/stub_status.go | 4 +++- 8 files changed, 36 insertions(+), 20 deletions(-) diff --git a/app/src/api/ngx.ts b/app/src/api/ngx.ts index 76fcc869..6f90d9d6 100644 --- a/app/src/api/ngx.ts +++ b/app/src/api/ngx.ts @@ -51,6 +51,7 @@ export interface NginxPerformanceInfo { memory_usage: number // 内存使用率(MB) worker_processes: number // worker_processes 配置 worker_connections: number // worker_connections 配置 + process_mode: string // worker进程配置模式:'auto'或'manual' } const ngx = { @@ -74,6 +75,10 @@ const ngx = { return http.get('/nginx/detail_status') }, + toggle_stub_status(enable: boolean): Promise<{ stub_status_enabled: boolean, error: string }> { + return http.post('/nginx/stub_status', { enable }) + }, + reload() { return http.post('/nginx/reload') }, diff --git a/app/src/composables/useNginxPerformance.ts b/app/src/composables/useNginxPerformance.ts index dc55bc09..5f003b65 100644 --- a/app/src/composables/useNginxPerformance.ts +++ b/app/src/composables/useNginxPerformance.ts @@ -1,6 +1,5 @@ import type { NginxPerformanceInfo } from '@/api/ngx' import ngx from '@/api/ngx' -import { fromNow } from '@/lib/helper' export function useNginxPerformance() { const loading = ref(false) @@ -17,7 +16,7 @@ export function useNginxPerformance() { const formattedUpdateTime = computed(() => { if (!lastUpdateTime.value) return $gettext('Unknown') - return fromNow(lastUpdateTime.value.toLocaleString()) + return lastUpdateTime.value.toLocaleString() }) // Update the last update time diff --git a/app/src/views/dashboard/NginxDashBoard.vue b/app/src/views/dashboard/NginxDashBoard.vue index 4ec64a8c..e53bfb1b 100644 --- a/app/src/views/dashboard/NginxDashBoard.vue +++ b/app/src/views/dashboard/NginxDashBoard.vue @@ -5,13 +5,12 @@ import { NginxStatus } from '@/constants' import { useUserStore } from '@/pinia' import { useGlobalStore } from '@/pinia/moudule/global' import { ClockCircleOutlined, ReloadOutlined } from '@ant-design/icons-vue' -import axios from 'axios' -import { storeToRefs } from 'pinia' import ConnectionMetricsCard from './components/ConnectionMetricsCard.vue' import PerformanceStatisticsCard from './components/PerformanceStatisticsCard.vue' import PerformanceTablesCard from './components/PerformanceTablesCard.vue' import ProcessDistributionCard from './components/ProcessDistributionCard.vue' import ResourceUsageCard from './components/ResourceUsageCard.vue' +import ngx from '@/api/ngx' // Global state const global = useGlobalStore() @@ -39,16 +38,14 @@ async function toggleStubStatus() { try { stubStatusLoading.value = true stubStatusError.value = '' - const response = await axios.post('/api/nginx/stub_status', { - enable: !stubStatusEnabled.value, - }) + const response = await ngx.toggle_stub_status(!stubStatusEnabled.value) - if (response.data.stub_status_enabled !== undefined) { - stubStatusEnabled.value = response.data.stub_status_enabled + if (response.stub_status_enabled !== undefined) { + stubStatusEnabled.value = response.stub_status_enabled } - if (response.data.error) { - stubStatusError.value = response.data.error + if (response.error) { + stubStatusError.value = response.error } else { fetchInitialData().then(connectSSE) diff --git a/app/src/views/dashboard/components/PerformanceTablesCard.vue b/app/src/views/dashboard/components/PerformanceTablesCard.vue index 7c94e8f4..808834b2 100644 --- a/app/src/views/dashboard/components/PerformanceTablesCard.vue +++ b/app/src/views/dashboard/components/PerformanceTablesCard.vue @@ -196,7 +196,11 @@ const maxRPS = computed(() => { {{ $gettext('Maximum worker process number:') }} {{ nginxInfo.worker_processes }} - {{ nginxInfo.worker_processes === nginxInfo.workers ? $gettext('auto = CPU cores') : $gettext('manually set') }} + {{ + nginxInfo.process_mode === 'auto' + ? $gettext('auto = CPU cores') + : $gettext('manually set') + }}

diff --git a/internal/nginx/config_info.go b/internal/nginx/config_info.go index c331582d..acac1e08 100644 --- a/internal/nginx/config_info.go +++ b/internal/nginx/config_info.go @@ -10,8 +10,9 @@ import ( ) type NginxConfigInfo struct { - WorkerProcesses int `json:"worker_processes"` - WorkerConnections int `json:"worker_connections"` + WorkerProcesses int `json:"worker_processes"` + WorkerConnections int `json:"worker_connections"` + ProcessMode string `json:"process_mode"` } // GetNginxWorkerConfigInfo Get Nginx config info of worker_processes and worker_connections @@ -19,6 +20,7 @@ func GetNginxWorkerConfigInfo() (*NginxConfigInfo, error) { result := &NginxConfigInfo{ WorkerProcesses: 1, WorkerConnections: 1024, + ProcessMode: "manual", } // Get worker_processes config @@ -33,8 +35,10 @@ func GetNginxWorkerConfigInfo() (*NginxConfigInfo, error) { if matches := wpRe.FindStringSubmatch(string(output)); len(matches) > 1 { if matches[1] == "auto" { result.WorkerProcesses = runtime.NumCPU() + result.ProcessMode = "auto" } else { result.WorkerProcesses, _ = strconv.Atoi(matches[1]) + result.ProcessMode = "manual" } } diff --git a/internal/nginx/performance.go b/internal/nginx/performance.go index ebec965d..22ca50a9 100644 --- a/internal/nginx/performance.go +++ b/internal/nginx/performance.go @@ -43,13 +43,16 @@ func GetPerformanceData() NginxPerformanceResponse { logger.Warn("Failed to get Nginx config info:", err) } + // 确保ProcessMode字段能够正确传递 + perfInfo := NginxPerformanceInfo{ + StubStatusData: *statusInfo, + NginxProcessInfo: *processInfo, + NginxConfigInfo: *configInfo, + } + return NginxPerformanceResponse{ StubStatusEnabled: stubStatusEnabled, Running: running, - Info: NginxPerformanceInfo{ - StubStatusData: *statusInfo, - NginxProcessInfo: *processInfo, - NginxConfigInfo: *configInfo, - }, + Info: perfInfo, } } diff --git a/internal/nginx/process_info.go b/internal/nginx/process_info.go index 04aff025..35c5f419 100644 --- a/internal/nginx/process_info.go +++ b/internal/nginx/process_info.go @@ -8,6 +8,7 @@ import ( "time" "github.com/shirou/gopsutil/v4/process" + "github.com/uozi-tech/cosy/logger" ) type NginxProcessInfo struct { @@ -120,6 +121,7 @@ func GetNginxProcessInfo() (*NginxProcessInfo, error) { // Distinguish between worker processes, cache processes, and other processes if ppid == masterPID || strings.Contains(cmdline, "worker process") { + logger.Debug(cmdline) workerCount++ } else if strings.Contains(cmdline, "cache") { cacheCount++ diff --git a/internal/nginx/stub_status.go b/internal/nginx/stub_status.go index a7787c42..1c818964 100644 --- a/internal/nginx/stub_status.go +++ b/internal/nginx/stub_status.go @@ -11,6 +11,7 @@ import ( "time" "github.com/pkg/errors" + "github.com/uozi-tech/cosy/logger" ) // StubStatusInfo Store the stub_status module status @@ -32,7 +33,7 @@ type StubStatusData struct { const ( StubStatusPort = 51828 StubStatusPath = "/stub_status" - StubStatusHost = "localhost" + StubStatusHost = "127.0.0.1" StubStatusProtocol = "http" StubStatusAllow = "127.0.0.1" StubStatusDeny = "all" @@ -53,6 +54,7 @@ func GetStubStatusData() (bool, *StubStatusData, error) { // Get the stub_status status information enabled, statusURL := IsStubStatusEnabled() + logger.Info("GetStubStatusData", "enabled", enabled, "statusURL", statusURL) if !enabled { return false, result, fmt.Errorf("stub_status is not enabled") }