[Skiboot] [PATCH 1/2] external/fwts: Add FWTS olog merge script

Jack Miller jack at codezen.org
Wed Nov 9 06:52:54 AEDT 2016


A script to merge olog error definitions from multiple skiboot versions
into a single olog JSON file. Will prompt when conflicting patterns are
found to update the pattern, or add both.

Signed-off-by: Jack Miller <jack at codezen.org>
---
 external/fwts/merge-fwts-olog | 100 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 100 insertions(+)
 create mode 100755 external/fwts/merge-fwts-olog

diff --git a/external/fwts/merge-fwts-olog b/external/fwts/merge-fwts-olog
new file mode 100755
index 0000000..ac1f847
--- /dev/null
+++ b/external/fwts/merge-fwts-olog
@@ -0,0 +1,100 @@
+#!/usr/bin/python2
+
+import json
+import sys
+
+json_params = {
+    'indent': 1,
+    'sort_keys': True,
+    'separators': (',', ': '),
+}
+
+def get_input():
+    while True:
+        resp = raw_input("Update pattern to match both? (y/n): ")
+        if resp in [ "y", "Y" ]:
+            break
+        elif resp in [ "n", "N" ]:
+            print "New entry will be added."
+            return False
+        else:
+            print "???"
+            continue
+
+    return raw_input("New pattern: ")
+
+def main():
+    if len(sys.argv) != 4:
+        print("USAGE: merge.py old_olog new_olog output")
+        sys.exit(-1)
+
+    old_olog = sys.argv[1]
+    cur_olog = sys.argv[2]
+    out_olog = sys.argv[3]
+
+    try:
+        old_file = open(old_olog, "r")
+        old_json = json.load(old_file)
+        old_file.close()
+    except Exception as e:
+        print("Failed to parse old olog: %s" % e)
+        sys.exit(-1)
+
+    try:
+        cur_file = open(cur_olog, "r")
+        cur_json = json.load(cur_file)
+        cur_file.close()
+    except Exception as e:
+        print("Failed to parse new olog: %s" % e)
+        sys.exit(-1)
+
+    try:
+        out_file = open(out_olog, "w")
+    except Exception as e:
+        print("Failed to open output file: %s" % e)
+        sys.exit(-1)
+
+    cur_patterns = cur_json["olog_error_warning_patterns"]
+    old_patterns = old_json["olog_error_warning_patterns"]
+
+    # Match current patterns to old definitions, detect when pattern is
+    # different.
+
+    for cp in cur_patterns:
+        for op in old_patterns:
+            if cp["label"] != op["label"]:
+                continue
+
+            if cp["pattern"] != op["pattern"]:
+                print "Pattern update detected."
+                print "Label: %s" % cp["label"]
+                print ""
+                print "Cur Pattern: %s" % cp["pattern"]
+                print "New Pattern: %s" % op["pattern"]
+                print ""
+
+                user_pattern = get_input()
+
+                if user_pattern == False:
+                    continue
+
+                cp["pattern"] = user_pattern
+
+            op["found"] = True
+            break
+
+    # Take any old patterns that are no longer current and move them over
+
+    for op in old_patterns:
+        if "found" in op:
+            continue
+
+        cur_patterns.append(op)
+
+    json.dump(cur_json, out_file, **json_params)
+    out_file.close()
+
+    print("OK")
+
+if __name__ == "__main__":
+    main()
-- 
2.10.2



More information about the Skiboot mailing list