Skip to content

Commit

Permalink
external/fwts: Add FWTS olog merge script
Browse files Browse the repository at this point in the history
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@codezen.org>
[stewart@linux.vnet.ibm.com: add copyright notice]
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
  • Loading branch information
themoken authored and stewartsmith committed Dec 14, 2016
1 parent 02a7c2c commit 3e6e795
Showing 1 changed file with 115 additions and 0 deletions.
115 changes: 115 additions & 0 deletions external/fwts/merge-fwts-olog
@@ -0,0 +1,115 @@
#!/usr/bin/env python2
#
# Copyright 2016 IBM Corp.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.

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()

0 comments on commit 3e6e795

Please sign in to comment.