1{
2    "title": "PEL message registry schema",
3    "$id": "http://github.com/openbmc/phosphor-logging/extensions/openpower-pels/registry/schema/schema.json",
4    "description": "This schema describes JSON used for creating PELs from OpenBMC event logs.",
5    "type": "object",
6
7    "properties":
8    {
9        "PELs":
10        {
11            "title": "This is an array of entries that specify PEL fields for event logs",
12            "$ref": "#/definitions/pels"
13        }
14    },
15
16    "additionalProperties": false,
17    "minItems": 1,
18    "uniqueItems": true,
19
20    "definitions":
21    {
22        "pels":
23        {
24            "description": "Each entry in this array is for converting an event log to a PEL",
25            "type": "array",
26            "items":
27            {
28                "description": "The schema for a single event log registry entry",
29                "type": "object",
30                "properties":
31                {
32                    "Name": {"$ref": "#/definitions/errorName" },
33
34                    "SRC": {"$ref": "#/definitions/src" },
35
36                    "Subsystem": {"$ref": "#/definitions/subsystem" },
37
38                    "Severity": {"$ref": "#/definitions/severity" },
39
40                    "MfgSeverity": {"$ref": "#/definitions/mfgSeverity" },
41
42                    "EventScope": {"$ref": "#/definitions/eventScope" },
43
44                    "EventType": {"$ref": "#/definitions/eventType" },
45
46                    "ActionFlags": {"$ref": "#/definitions/actionFlags" },
47
48                    "MfgActionFlags": {"$ref": "#/definitions/mfgActionFlags" },
49
50                    "Documentation": {"$ref": "#/definitions/documentation" },
51
52                    "ComponentID": {"$ref": "#/definitions/componentID" },
53
54                    "CalloutsUsingAD": {"$ref": "#/definitions/calloutsUsingAD"},
55
56                    "Callouts": {"$ref": "#/definitions/callouts"}
57                },
58
59                "required": ["Name", "SRC", "Subsystem", "Documentation"],
60                "additionalProperties": false,
61
62                "not":
63                {
64                    "required": ["CalloutsUsingAD", "Callouts"]
65                }
66            }
67        },
68
69        "errorName":
70        {
71            "description": "The 'Message' property of an OpenBMC event log",
72            "type": "string"
73        },
74
75        "componentID":
76        {
77            "description": "The component ID of the PEL creator, in the form 0xYY00.  For BD SRCs, this is optional and if not present the component ID will be taken from the upper byte of the reason code.",
78            "type": "string",
79            "pattern": "^0x[0-9a-fA-F]{2}00$"
80        },
81
82        "src":
83        {
84            "description": "Contains fields describing the primary SRC embedded in the PEL",
85            "type": "object",
86
87            "properties":
88            {
89                "Type": {"$ref": "#/definitions/srcType" },
90
91                "ReasonCode": {"$ref": "#/definitions/reasonCode" },
92
93                "SymptomIDFields": {"$ref": "#/definitions/symptomID" },
94
95                "Words6To9": {"$ref": "#/definitions/srcWords6To9" },
96
97                "PowerFault": {"$ref": "#/definitions/powerFault" }
98            },
99
100            "required": ["ReasonCode", "Words6To9"],
101            "additionalProperties": false
102        },
103
104        "documentation":
105        {
106            "description": "This contains event documentation that will be used by tools and parsers.",
107            "type": "object",
108
109            "properties":
110            {
111                "Message": {"$ref": "#/definitions/docMessage" },
112
113                "MessageArgSources": {"$ref": "#/definitions/docMessageArgSources" },
114
115                "Description": {"$ref": "#/definitions/docDescription" },
116
117                "Notes": {"$ref": "#/definitions/docNotes" }
118
119            },
120            "additionalProperties": false,
121            "required": ["Message", "Description"]
122        },
123
124        "srcType":
125        {
126            "description": "The first byte of the SRC ASCII string. Optional and defaults to BD.  The '11' SRC is only to be used for events related to power.",
127            "type": "string",
128            "enum": ["BD", "11"]
129        },
130
131        "docNotes":
132        {
133            "description": "Any notes/comments about the error. An array of strings for manual line wrapping. Optional.",
134            "type": "array",
135            "items":
136            {
137                "description": "Notes",
138                "type": "string"
139            }
140        },
141
142        "reasonCode":
143        {
144            "description": "String representation of the 2 byte reason code, like 0xABCD.  The reason code is the 2nd half of the 8 character SRC ASCII String field, such as B1FFABCD.",
145            "type": "string",
146            "pattern": "^0x[0-9a-fA-F]{4}$",
147
148            "examples": [
149                "0x3355"
150            ]
151        },
152
153        "subsystem":
154        {
155            "description": "PEL subsystem enumeration.  See the PEL spec for more detailed definitions.",
156            "type": "string",
157            "enum": ["processor", "processor_fru", "processor_chip",
158                     "processor_unit", "processor_bus",
159
160                     "memory", "memory_ctlr", "memory_bus", "memory_dimm",
161                     "memory_fru", "external_cache",
162
163                     "io", "io_hub", "io_bridge", "io_bus", "io_processor",
164                     "io_hub_other", "phb",
165
166                     "io_adapter", "io_adapter_comm", "io_device",
167                     "io_device_dasd", "io_external_general",
168                     "io_external_workstation", "io_storage_mezz",
169
170                     "cec_hardware", "cec_sp_a", "cec_sp_b",
171                     "cec_node_controller", "cec_vpd",
172                     "cec_i2c", "cec_chip_iface", "cec_clocks", "cec_op_panel",
173                     "cec_tod", "cec_storage_device", "cec_sp_hyp_iface",
174                     "cec_service_network", "cec_sp_hostboot_iface",
175
176                     "power", "power_supply", "power_control_hw", "power_fans",
177                     "power_sequencer",
178
179                     "others", "other_hmc", "other_test_tool", "other_media",
180                     "other_multiple_subsystems", "other_na", "other_info_src",
181
182                     "surv_hyp_lost_sp", "surv_sp_lost_hyp", "surv_sp_lost_hmc",
183                     "surv_hmc_lost_lpar", "surv_hmc_lost_bpa",
184                     "surv_hmc_lost_hmc",
185
186                     "platform_firmware", "bmc_firmware", "hyp_firmware",
187                     "partition_firmware", "slic_firmware", "spcn_firmware",
188                     "bulk_power_firmware_side_a", "hmc_code_firmware",
189                     "bulk_power_firmware_side_b", "virtual_sp", "hostboot",
190                     "occ",
191
192                     "software", "os_software", "xpf_software", "app_software",
193
194                     "ext_env", "input_power_source", "ambient_temp",
195                     "user_error", "corrosion"]
196        },
197
198        "severity":
199        {
200            "description": "PEL severity enumeration.  Optional.  If not provided, will use the event log severity.  See the PEL spec for more detailed definitions.",
201            "type": "string",
202
203            "enum": ["non_error",
204
205                     "recovered",
206
207                     "predictive", "predictive_degraded_perf",
208                     "predictive_reboot", "predictive_reboot_degraded",
209                     "predictive_redundancy_loss",
210
211                     "unrecoverable", "unrecoverable_degraded_perf",
212                     "unrecoverable_redundancy_loss",
213                     "unrecoverable_redundancy_loss_perf",
214                     "unrecoverable_loss_of_function",
215
216                     "critical", "critical_system_term",
217                     "critical_imminent_failure",
218                     "critical_partition_term",
219                     "critical_partition_imminent_failure",
220
221                     "diagnostic_error", "diagnostic_error_incorrect_results",
222
223                     "symptom_recovered", "symptom_predictive",
224                     "symptom_unrecoverable", "symptom_critical",
225                     "symptom_diag_err"]
226        },
227
228        "mfgSeverity":
229        {
230            "description": "The PEL severity to use in manufacturing reporting mode",
231            "$ref": "#/definitions/severity"
232        },
233
234        "eventScope":
235        {
236            "description": "The event scope PEL field. Optional and defaults to entire_platform",
237            "type": "string",
238            "enum": ["entire_platform", "single_partition", "multiple_partitions",
239                     "possibly_multiple_platforms"]
240        },
241
242        "eventType":
243        {
244            "description": "The event type PEL field. Optional and defaults to na",
245            "type": "string",
246            "enum": ["na", "misc_information_only", "tracing_event",
247                     "dump_notification"]
248        },
249
250        "powerFault":
251        {
252            "description": "The Power Fault SRC field (bit 6 in byte 1 of header). Optional and defaults to false",
253            "type": "boolean"
254        },
255
256        "actionFlags":
257        {
258            "description": "The action flags Private Header PEL field",
259            "type": "array",
260            "items":
261            {
262                "description": "List of action flags",
263                "type": "string",
264                "enum": ["service_action", "hidden", "report", "dont_report",
265                         "call_home", "isolation_incomplete", "termination"]
266            }
267        },
268
269        "mfgActionFlags":
270        {
271            "description": "The PEL action flags to use in manufacturing reporting mode",
272            "$ref": "#/definitions/actionFlags"
273        },
274
275        "docDescription":
276        {
277            "description": "This is a higher level description of the error.  It is required by the Redfish schema to generate a Redfish message entry, but is not used in Redfish or PEL output.",
278            "type": "string"
279        },
280
281        "docMessage":
282        {
283            "description": "The error message.  This will show up in parsed PELs, and in the Redfish event logs.  It can contain placeholders for numeric values using %1, %2, etc, that come from the SRC words 6-9 as defined by the MessageArgSources property.",
284            "type": "string",
285            "examples": [
286                {"Message": "The code update from level %1 to %2 failed" }
287            ]
288        },
289
290        "docMessageArgSources":
291        {
292            "description": "The SRC word 6-9 to use as the source of the numeric arguments that will be substituted into any placeholder in the Message field.  Only required if there are arguments to substitute.",
293            "type": "array",
294            "items":
295            {
296                "type": "string",
297                "enum": ["SRCWord6", "SRCWord7", "SRCWord8", "SRCWord9"]
298            },
299            "additionalItems": false
300        },
301
302        "symptomID":
303        {
304            "description": "Defines a custom Symptom ID, to be appended to the ASCII string word and separated by underscores.  The maximum size of the Symptom ID field is 80 characters.  The default is ASCIISTRING_SRCWord3 (e.g. B1103500_12345678).",
305            "type": "array",
306            "items":
307            {
308                "type": "string",
309                "enum": ["SRCWord3", "SRCWord4", "SRCWord5", "SRCWord6",
310                         "SRCWord7", "SRCWord8", "SRCWord9"]
311            },
312            "minItems": 1,
313            "maxItems": 8,
314            "uniqueItems": true,
315
316            "examples": [
317                ["SRCWord3", "SRCWord6"]
318            ]
319        },
320
321        "srcWords6To9":
322        {
323            "description": "This details what the user defined SRC hex words (6-9) mean, and which AdditionalData properties to get them from.  These will be shown in the PEL parser output.  Must be present, but can be empty.",
324            "type": "object",
325            "patternProperties":
326            {
327                "^[6-9]$":
328                {
329                    "type": "object",
330                    "properties":
331                    {
332                        "Description":
333                        {
334                            "description": "What the value in the field represents.",
335                            "type": "string"
336                        },
337                        "AdditionalDataPropSource":
338                        {
339                            "description": "Which AdditionalData property key to get the data from.",
340                            "type": "string"
341                        }
342                    },
343
344                    "additionalProperties": false
345                },
346
347                "examples":
348                {
349                    "SRCWords6To9":
350                    {
351                        "6":
352                        {
353                            "Description": "Failing PSU number",
354                            "AdditionalDataPropSource": "PSU_NUM"
355                        }
356                    }
357                }
358            },
359            "additionalProperties": false
360        },
361
362        "adName":
363        {
364            "description": "The name of the AdditionalData entry to use to index into the callout tables.",
365            "type": "string"
366        },
367
368        "adValue":
369        {
370            "description": "The value for the AdditionalData entry specified by ADName that indexes into the callout tables.",
371            "type": "string"
372        },
373
374        "locationCode":
375        {
376            "description": "A location code - the segment after the 'UTMS-' prefix. (e.g. P1-C2)",
377            "type": "string"
378        },
379
380        "priority":
381        {
382            "description": "The callout priority.  See the PEL spec for priority definitions.",
383            "type": "string",
384            "enum": ["high", "medium", "low", "medium_group_a",
385                "medium_group_b", "medium_group_c"]
386        },
387
388        "symbolicFRU":
389        {
390            "description": "The 7 character symbolic FRU callout name.",
391            "type": "string",
392            "pattern": "^[A-Z0-9]{7}$"
393        },
394
395        "procedure":
396        {
397            "description": "The 7 character procedure callout name.",
398            "type": "string",
399            "pattern": "^[A-Z0-9]{7}$"
400        },
401
402        "calloutType":
403        {
404            "description": "The failing component type from the FRU identity callout substructure.  If not specified, the values hardware_fru, symbolic_fru, or maint_procedure will be used, depending on the callout type.",
405            "type": "string",
406            "enum": ["hardware_fru", "code_fru", "config_procedure",
407                     "maint_procedure", "external_fru", "external_code_fru",
408                     "tool_fru", "symbolic_fru", "symbolic_fru_trusted_loccode"]
409        },
410
411        "calloutList":
412        {
413            "description": "The list of FRU callouts to add to a PEL.  If just LocCode is specified, it is a normal hardware FRU callout.  Otherwise, Procedure or SymbolicFRU can be used to specify those types of callouts.  With the latter 2 types, LocCode is optional.  CalloutType is also optional, and is only needed if a value other than hardware_fru, maint_procedure, or symbolic_fru is desired.",
414            "type": "array",
415            "items":
416            {
417                "type": "object",
418                "properties":
419                {
420                    "Priority": {"$ref": "#/definitions/priority" },
421                    "LocCode": {"$ref": "#/definitions/locationCode" },
422                    "SymbolicFRU": {"$ref": "#/definitions/symbolicFRU" },
423                    "Procedure": {"$ref": "#/definitions/procedure" },
424                    "CalloutType": {"$ref": "#/definitions/calloutType" }
425                },
426                "additionalProperties": false,
427                "required": ["Priority"],
428
429                "anyOf":
430                [
431                    { "required": ["LocCode"] },
432                    { "required": ["SymbolicFRU"] },
433                    { "required": ["Procedure"] }
434                ],
435
436                "not":
437                {
438                    "description": "A callout is not both a SymbolicFRU and a Procedure",
439                    "required": ["SymbolicFRU", "Procedure"]
440                }
441            },
442            "minItems": 1,
443            "maxItems": 10,
444
445            "examples":
446            [
447                {
448                    "Priority": "high",
449                    "LocCode": "P1"
450                },
451                {
452                    "Priority": "medium",
453                    "LocCode": "P2",
454                    "SymbolicFRU": "PROCFRU"
455                },
456                {
457                    "Priority": "low",
458                    "Procedure": "SVCDOCS"
459                }
460            ]
461        },
462
463        "system":
464        {
465            "description": "The system type string, as specified by entity manger.  It is used to index into different sections of the JSON.",
466            "type": "string"
467        },
468
469        "callouts":
470        {
471            "description": "This contains callouts that can vary based on system type.  Each entry contains an optional System property and a required CalloutList property.  If the System property is left out it indicates that the CalloutList callouts are valid for every system type, unless there is another Callouts entry that has a matching System property, in which case that entry is valid.",
472            "type": "array",
473            "items":
474            {
475                "type": "object",
476
477                "properties":
478                {
479                    "System": {"$ref": "#/definitions/system" },
480                    "CalloutList": {"$ref": "#/definitions/calloutList" }
481                },
482                "required": ["CalloutList"],
483                "additionalProperties": false
484            },
485            "minItems": 1,
486            "maxItems": 10,
487
488            "examples":
489            [
490                [
491                    {
492                        "System": "system1",
493                        "CalloutList": [{"Priority": "high", "LocCode": "P1"}]
494                    },
495                    {
496                        "CalloutList": [{"Priority": "high", "Procedure": "NEXTLVL"}]
497                    }
498                ]
499            ]
500        },
501
502        "calloutsWithTheirADValues":
503        {
504            "description": "This contains callouts along with the AdditionalData value used to select an entry into the callout list.  The AdditionalData entry was specified by ADName in the CalloutsUsingAD parent entry.",
505            "type": "array",
506
507            "items":
508            {
509                "type": "object",
510                "properties":
511                {
512                    "ADValue": {"$ref": "#/definitions/adValue" },
513                    "Callouts": {"$ref": "#/definitions/callouts" }
514                },
515                "additionalProperties": false,
516                "required": ["ADValue", "Callouts"]
517            },
518            "minItems": 1,
519            "maxItems": 10,
520
521            "examples":
522            [
523                [
524                    {
525                        "ADValue": "0",
526                        "Callouts":
527                        [
528                            {
529                                "CalloutList": [{"Priority": "high", "LocCode": "P1"}]
530                            }
531                        ]
532                    },
533                    {
534                        "ADValue": "1",
535                        "Callouts":
536                        [
537                            {
538                                "CalloutList": [{"Priority": "high", "LocCode": "P2"}]
539                            }
540                        ]
541                    }
542                ]
543            ]
544        },
545
546        "calloutsUsingAD":
547        {
548            "description": "This contains the callouts that can be specified based on a value in the AdditionalData property..",
549            "type": "object",
550
551            "properties":
552            {
553                "ADName": {"$ref": "#/definitions/adName" },
554                "CalloutsWithTheirADValues":
555                    {"$ref": "#/definitions/calloutsWithTheirADValues" }
556            },
557            "additionalProperties": false,
558            "required": ["ADName", "CalloutsWithTheirADValues"],
559
560            "examples":
561            [
562                {
563                    "ADName": "PROC_NUM",
564                    "CalloutsWithTheirADValues":
565                    [
566                        {
567                            "ADValue": "0",
568                            "Callouts":
569                            [
570                                {
571                                    "CalloutList": [{"Priority": "high", "LocCode": "P1"}]
572                                }
573                            ]
574                        },
575                        {
576                            "ADValue": "1",
577                            "Callouts":
578                            [
579                                {
580                                    "CalloutList": [{"Priority": "high", "LocCode": "P2"}]
581                                }
582                            ]
583                        }
584                    ]
585                }
586            ]
587        }
588    }
589}
590