Files
CN_Tool_client/scripts/contracts/check-influxdb-startup-contract.mjs
yexb 81f90ce0f2 feat(auth): 优化权限模块菜单数据处理逻辑
- 添加showMenuList、flatMenuList和breadcrumbList状态字段
- 修改getter方法直接返回缓存的状态数据
- 新增refreshDerivedMenus方法统一处理菜单衍生数据计算
- 在重置授权存储时清理新增的菜单相关状态
- 避免每次路由跳转时重复深拷贝整个菜单树结构

feat(checksquare): 完善校验功能组件和业务逻辑

- 新增测量点对话框组件用于显示监测点详细信息
- 添加校验台账工具函数解析测量点详情
- 实现任务表格删除功能包括确认提示和数据刷新
- 更新任务表格将缺失率字段替换为数据完整性字段
- 重构详情面板使用标签页展示不同类型的校验详情
- 优化摘要表格样式包括紧凑布局和危险颜色标识
- 统一详情对话框尺寸样式保持界面一致性
- 实现数据完整性字段的百分比单位去除处理

refactor(influxdb): 简化数据库启动流程移除命令行包装器

- 直接通过influxd.exe启动InfluxDB服务
- 移除对cmd.exe包装器的依赖和进程ID记录
- 保持进程管理和停止功能的完整性
2026-06-12 08:44:07 +08:00

96 lines
4.1 KiB
JavaScript

import fs from 'node:fs'
import path from 'node:path'
import { fileURLToPath } from 'node:url'
const __dirname = path.dirname(fileURLToPath(import.meta.url))
const rootDir = path.resolve(__dirname, '..', '..')
const read = relativePath => fs.readFileSync(path.join(rootDir, relativePath), 'utf-8')
const files = {
manager: 'scripts/influxdb-process-manager.js',
mysqlManager: 'scripts/mysql-process-manager.js',
javaRunner: 'scripts/java-runner.js',
lifecycle: 'electron/preload/lifecycle.js',
configGenerator: 'scripts/config-generator.js',
javaTemplate: 'build/extraResources/java/application.yml.template',
influxdbBat: 'build/extraResources/influxdb-1.7.0/start-influxdb.bat',
startup: 'scripts/startup-manager.js',
builder: 'cmd/builder.json'
}
const failures = []
if (!fs.existsSync(path.join(rootDir, files.manager))) {
failures.push('scripts/influxdb-process-manager.js should exist')
} else {
const source = read(files.manager)
const checks = [
['manager exports InfluxDBProcessManager', /module\.exports\s*=\s*InfluxDBProcessManager/.test(source)],
['manager starts InfluxDB directly through influxd.exe', /spawn\(influxd,\s*\[\s*'-config'/.test(source)],
['manager does not record cmd.exe wrapper pid as InfluxDB owner', !/spawn\('cmd\.exe'/.test(source)],
['manager records process ownership', /\.running-process\.json/.test(source)],
['manager can stop tracked process', /stopInfluxDBProcess/.test(source) && /terminateTrackedProcess/.test(source)]
]
checks.forEach(([message, pass]) => {
if (!pass) failures.push(message)
})
}
const lifecycleSource = read(files.lifecycle)
const configGeneratorSource = read(files.configGenerator)
const runtimePathSources = [
['InfluxDB process manager', read(files.manager)],
['MySQL process manager', read(files.mysqlManager)],
['Java runner', read(files.javaRunner)],
['config generator', configGeneratorSource]
]
const javaTemplateSource = read(files.javaTemplate)
const startupSource = read(files.startup)
const builderSource = read(files.builder)
const influxdbBatSource = read(files.influxdbBat)
const lifecycleChecks = [
['lifecycle loads InfluxDBProcessManager', /InfluxDBProcessManager/.test(lifecycleSource)],
['lifecycle stores influxdbProcessManager', /this\.influxdbProcessManager/.test(lifecycleSource)],
[
'lifecycle starts InfluxDB after MySQL before Java port detection',
/ensureServiceRunning\([\s\S]*?this\.influxdbPort\s*=\s*await\s*this\.influxdbProcessManager\.ensureServiceRunning[\s\S]*?findAvailablePort\(18093/.test(
lifecycleSource
)
],
['lifecycle passes influxdbPort to config generator', /influxdbPort:\s*this\.influxdbPort/.test(lifecycleSource)],
['lifecycle stops InfluxDB during cleanup', /stopInfluxDBProcess/.test(lifecycleSource)]
]
const startupChecks = [
['startup has InfluxDB port step', /check-influxdb-port/.test(startupSource)],
['startup has InfluxDB wait step', /wait-influxdb/.test(startupSource)]
]
const packageChecks = [
['windows package includes InfluxDB resources', /build\/extraResources\/influxdb-1\.7\.0/.test(builderSource)]
]
const configChecks = [
['config generator replaces InfluxDB port placeholder', /INFLUXDB_PORT/.test(configGeneratorSource)],
['java template defines steady InfluxDB url placeholder', /steady:[\s\S]*influxdb:[\s\S]*url:\s*http:\/\/127\.0\.0\.1:\{\{INFLUXDB_PORT\}\}/.test(javaTemplateSource)],
['InfluxDB bat accepts runtime config path argument', /%~1/.test(influxdbBatSource) && /influxd\.exe\s+-config\s+/.test(influxdbBatSource)]
]
const runtimePathChecks = runtimePathSources.map(([name, source]) => [
`${name} should not treat any process.resourcesPath as packaged runtime`,
!/!\s*process\.resourcesPath/.test(source)
])
;[...lifecycleChecks, ...startupChecks, ...configChecks, ...runtimePathChecks, ...packageChecks].forEach(([message, pass]) => {
if (!pass) failures.push(message)
})
if (failures.length > 0) {
console.error(`InfluxDB startup contract failed:\n- ${failures.join('\n- ')}`)
process.exit(1)
}
console.log('InfluxDB startup contract passed')