【已评审】新增发布版本调试命令,用于跟踪Scanner的防抖过程

issue链接

背景

在CSR配置中存在防抖功能的Scanner对象,当前系统无法追踪这些对象在每次计算过程中的具体数值、计算过程和结果。这导致在进行硬件问题定位时,需要手动修改hwproxy代码才能获取调试信息,不利于问题定界和定位。

现状:
当前系统缺少对防抖对象计算过程的可视化跟踪能力,无法实时监控每次防抖过程中参与计算的值、计算过程,给硬件问题诊断带来困难。

解决方案

提供在线调试命令功能,支持实时追踪指定Scanner每次计算防抖时参与计算的值、过程信息和计算结果,并将调试信息输出到在线调试终端,便于快速定界定位问题。

sequenceDiagram
    participant User as mdbctl
    participant hwproxy as hwproxy
    participant hardware as 硬件

    Note over User,hardware: 运行阶段
    User->>hwproxy: 启动防抖数据跟踪
    loop 实时监控循环
        hwproxy->>hardware: Scanner扫描,读取硬件数据
        hardware-->>hwproxy: 返回硬件读取数据
        hwproxy ->> hwproxy: 执行防抖计算,<br>记录计算值、过程信息和结果
        hwproxy-->>User: 输出参与防抖计算的值、<br>过程信息和结果
    end
    User->>hwproxy: 停止防抖数据跟踪

决策点

1、在/bmc/kepler/Scanner/:Id路径下新增接口bmc.kepler.Release.Scanner,并新增方法TraceDebounce。
2、hwproxy组件新增mdbctl自定义命令tracedebounce

详细描述

1、新增资源协作接口bmc.kepler.Release.Scanner及方法

方法名称 变化类型 请求签名 响应签名 读写&权限 持久化 变化通知 接口说明 接口约束
TraceDebounce 新增方法 s NA DiagnoseMgmt NA NA 跟踪Scanner的防抖过程
请求参数:
· Action:trace动作
start:开始跟踪防抖对象每次参与计算的值、过程信息和结果
stop:停止跟踪防抖对象每次参与计算的值、过程信息和结果
NA

2、新增组件调测命令 Usage: tracedebounce <ObjectName> <Action> 追踪指定Scanner对象的防抖数据
参数名称 参数签名 参数说明
ObjectName s Scanner对象名.
Action s 跟踪行为;start表示开始跟踪;stop表示停止跟踪

可以同时跟踪多个Scanner对象,例如:
tracedebounce <Scanner对象1> start
tracedebounce <Scanner对象2> start
tracedebounce <Scanner对象3> start
在调用对应Scanner对象的stop前,这几个Scanner对象的防抖数据都会持续打印

跟踪防抖效果演示:
debounce policy表示使用的防抖策略,该Scanner使用均值防抖
scanner name表示跟踪的Scanner对象名,is signed表示该防抖值是否为有符号数。
new value表示本次Scanner从硬件读取回来的值,debounce value表示防抖计算结果。
history values表示本次防抖时参与计算的值。

自定义命令mds配置

{
    "Scanner": {
        "path": "/bmc/kepler/Scanner/:Id",
        "interfaces": {
            "bmc.kepler.Release.Scanner": {
                "methods": {
                    "TraceDebounce": {
                        "cmdName": "tracedebounce",
                        "req": {
                            "Action": {
                                "baseType": "String",
                                            "enum":[
                                                "start",
                                                "stop"
                                            ],
                                "displayDescription": "debounce trace action.start: start tracing debounce value, the debounce process and result. stop: stop tracing debounce value, the debounce process and result"
                            }
                        },
                        "displayDescription": "trace debounce value, the debounce process and result."
                    }
                }
            }
        }
    }
}

评审结论

1、同意在/bmc/kepler/Scanner/:Id路径下新增接口bmc.kepler.Release.Scanner,并新增方法TraceDebounce,用于追踪指定Scanner的防抖过程,请求签名为s,无响应签名,权限为DiagnoseMgmt;
2、同意hwproxy组件新增mdbctl自定义命令tracedebounce,参数说明见详细描述

遗留问题

1、优化防抖打印结构,改为kv格式,确认下描述history和windows,历史数据更偏向于从Scanner开始扫描到现在的buf,这个buf应该是计算防抖的窗口的值,应该用window value避免歧义
结论:防抖数据打印已优化为kv格式,用window values表示窗口内的值,避免歧义,示例如下:
% tracedebounce Scanner_RTCBatteryMntr_010101 start
============= debounce policy: Midavg =============
scanner: Scanner RTCBatteryMntr_ 010101, signed: false
native value: 2038 debounce result: 2038
window values: {2038 2039 2039 2039 2039 2038}
============= debounce policy: Midavg =============
scanner: Scanner RTCBatteryMntr_ 010101, signed: false
native value: 2039 debounce result: 2039
window values: {2039 2038 2039 2039 2039 2039}
============= debounce policy: Midavg =============
scanner: Scanner_RTCBatteryMntr_010101, signed: false
native value: 2039 debounce result: 2039
window values: {2039 2039 2038 2039 2039 2039}
============= debounce policy: Midavg =============
scanner: Scanner_ RTCBatteryMntr_ 010101, signed: false
native value: 2038 debounce result: 2038
window values: {2038 2039 2039 2038 2039 2039}

1、标题调整为新增发布版本调试命令,用于跟踪Scanner的防抖过程
2、tracedebouncedetails方法名称需要调整,建议简化为TraceDebounce就可以了
3、补充跟踪防抖过程的输出信息,体现出调试命令的作用和价值