Update threshold to entity-manager

Save path&interface when creating thresholds,and then set DBUS value
corresponding to path&interface when setting thresholds;

I have a requirement to set the threshold to restart without losing.  In
addition, I can see that the threshold can be saved in the file in the
entity-manager, which can meet my requirements.

Data flow:
Old version: IPMI set threshold -> virtualsensors (DBUS) What
I want to achieve: IPMI set threshold -> virtualsensors (DBUS) ->
filesystem

I found that it can be implemented as follows: IPMI set
threshold -> virtual-sensors (DBUS) -> entitymanager -> filesystem

Because the threshold setting in dbus-sensors is: IPMI set threshold ->
dbus-sensors (DBUS) -> entitymanager -> filesystem

Tested:

The following print result shows this process:
IPMI set threshold -> virtual sensors (DBUS) -> entitymanager

root@NULL:~# busctl introspect   xyz.openbmc_project.EntityManager /xyz/openbmc_project/inventory/system/nvme/NVMe_MAX/NVMe_MAX_Temp xyz.openbmc_project.Configuration.ModifiedMedian.Thresholds0
NAME                                                         TYPE      SIGNATURE RESULT/VALUE     FLAGS
.Delete                                                      method    -         -                -
.Direction                                                   property  s         "greater than"   emits-change writable
.Name                                                        property  s         "upper critical" emits-change writable
.Severity                                                    property  d         1                emits-change writable
.Value                                                       property  d         116              emits-change writable
root@NULL:~# ipmitool sensor list | grep NVM
NVMe_MAX_Temp    | na         | degrees C  | na    | na        | 1.000     | 6.000     | 111.000   | 116.000   | na
root@NULL:~# ipmitool sensor thresh NVMe_MAX_Temp ucr 119
Locating sensor record 'NVMe_MAX_Temp'...
Setting sensor "NVMe_MAX_Temp" Upper Critical threshold to 119.000
root@NULL:~# ipmitool sensor list | grep NVM
NVMe_MAX_Temp    | na         | degrees C  | na    | na        | 1.000     | 6.000     | 111.000   | 119.000   | na
root@NULL:~# busctl introspect   xyz.openbmc_project.EntityManager /xyz/openbmc_project/inventory/system/nvme/NVMe_MAX/NVMe_MAX_Temp xyz.openbmc_project.Configuration.ModifiedMedian.Thresholds0
NAME                                                         TYPE      SIGNATURE RESULT/VALUE     FLAGS
.Delete                                                      method    -         -                -
.Direction                                                   property  s         "greater than"   emits-change writable
.Name                                                        property  s         "upper critical" emits-change writable
.Severity                                                    property  d         1                emits-change writable
.Value                                                       property  d         119              emits-change writable
root@NULL:~# busctl introspect   xyz.openbmc_project.EntityManager /xyz/openbmc_project/inventory/system/nvme/NVMe_MAX/NVMe_MAX_Temp xyz.openbmc_project.Configuration.ModifiedMedian.Thresholds0
NAME                                                         TYPE      SIGNATURE RESULT/VALUE     FLAGS
.Delete                                                      method    -         -                -
.Direction                                                   property  s         "greater than"   emits-change writable
.Name                                                        property  s         "upper critical" emits-change writable
.Severity                                                    property  d         1                emits-change writable
.Value                                                       property  d         119              emits-change writable
root@NULL:~#

Signed-off-by: Tao Lin <lintao.lc@inspur.com>
Change-Id: I0f5eeb06d0b3aaf4f5806bfa68672dedcb087f26
3 files changed
tree: 6419cb8a4cf5a815dbeaf01365a8ec224194380a
  1. subprojects/
  2. .clang-format
  3. .editorconfig
  4. .gitignore
  5. .markdownlint.yaml
  6. .prettierrc.yaml
  7. dbusSensor.hpp
  8. dbusUtils.hpp
  9. exprtkTools.hpp
  10. LICENSE
  11. meson.build
  12. OWNERS
  13. phosphor-virtual-sensor.service.in
  14. README.md
  15. thresholds.hpp
  16. virtual_sensor_config.json
  17. virtualSensor.cpp
  18. virtualSensor.hpp
README.md

phosphor-virtual-sensor

phosphor-virtual-sensor reads in virtual_sensor_config.json There are two types of data in this file:

virtual sensor configuration information

See virtual_sensor_config.json in this repository for an example. Sensors added this way can use any expression that is accepted by exprtk.

information to get a virtual sensor configuraton from D-Bus

For example:

{
  "Desc": {
    "Config": "D-Bus",
    "Type": "ModifiedMedian"
  }
}

Sensors added this way can only use a set of restricted calculations. At this stage the only type supported is modifiedMedian.

The virtual sensor configuration information needs to be added into the relevant hardware configuration file in entity-manager. This method of adding a virtual sensor allows a recipe that builds for different hardware configurations to have different virtual sensors for each configuration.

The virtual sensor configuration in entity manager follows a different format to the JSON in virtual_sensor_config.json (specified in entity-manager/schemas/VirtualSensor.json).