1#!/bin/bash
2
3# shellcheck source=meta-facebook/meta-harma/recipes-phosphor/gpio/phosphor-gpio-monitor/logging-util
4source /usr/libexec/phosphor-gpio-monitor/logging-util
5
6HELP="
7Usage: smc-event-logger <event> <id_gpio-name>
8<event> is the power rail event to log,
9e.g. assert / deassert.
10
11<id_gpio-name> is defined in json file,
12e.g. 5_health-mmc
13"
14
15# get assert or deassert message
16if [ "$1" == "assert" ]; then
17  action="SMCFailed"
18elif [ "$1" == "deassert" ]; then
19  action="SMCRestored"
20fi
21
22# get gpio chip ID
23MESSAGE=$2
24number="${MESSAGE%%_*}"
25
26# remove prefix from 0_xxxxxx to xxxxxx
27GPIO_NAME="${MESSAGE#*_}"
28
29MSG_ID="xyz.openbmc_project.State.SMC.$action"
30DEVICE_PATH="/xyz/openbmc_project/inventory/system/board/Minerva_Aegis/smc0"
31STASH_FILE="/run/$GPIO_NAME.log_entry"
32
33if gpio_logging_valid "$number" "$1" ; then
34    case $1 in
35        "-h")
36            echo "$HELP"
37            ;;
38
39        "assert")
40            if [ ! -s "$STASH_FILE" ]; then
41                 /usr/bin/log-create "$MSG_ID" --json \
42                     "{ \"IDENTIFIER\": \"${DEVICE_PATH}\", \"FAILURE_TYPE\": \"${GPIO_NAME}\"}" \
43                     > "${STASH_FILE}"
44            fi
45            ;;
46
47        "deassert")
48            if [ -s "${STASH_FILE}" ]; then
49                log-resolve -p "$(< "${STASH_FILE}")"
50                rm "${STASH_FILE}"
51            fi
52            /usr/bin/log-create "$MSG_ID" --json \
53                "{ \"IDENTIFIER\": \"${DEVICE_PATH}\"}"
54            ;;
55    esac
56fi
57
58exit 0
59