- 添加showMenuList、flatMenuList和breadcrumbList状态字段 - 修改getter方法直接返回缓存的状态数据 - 新增refreshDerivedMenus方法统一处理菜单衍生数据计算 - 在重置授权存储时清理新增的菜单相关状态 - 避免每次路由跳转时重复深拷贝整个菜单树结构 feat(checksquare): 完善校验功能组件和业务逻辑 - 新增测量点对话框组件用于显示监测点详细信息 - 添加校验台账工具函数解析测量点详情 - 实现任务表格删除功能包括确认提示和数据刷新 - 更新任务表格将缺失率字段替换为数据完整性字段 - 重构详情面板使用标签页展示不同类型的校验详情 - 优化摘要表格样式包括紧凑布局和危险颜色标识 - 统一详情对话框尺寸样式保持界面一致性 - 实现数据完整性字段的百分比单位去除处理 refactor(influxdb): 简化数据库启动流程移除命令行包装器 - 直接通过influxd.exe启动InfluxDB服务 - 移除对cmd.exe包装器的依赖和进程ID记录 - 保持进程管理和停止功能的完整性
96 lines
4.1 KiB
JavaScript
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')
|