import base64 import snappy from o11ydiagnosis.subtasks.slowlogconverter.proto.explain_pb2 import ExplainData from google.protobuf.json_format import MessageToJson from functools import lru_cache @lru_cache(maxsize=10240) def parse_binary_plan(binary_plan_str): if not binary_plan_str or len(binary_plan_str) == 0: return None try: if binary_plan_str.startswith("tidb_decode_binary_plan('") and binary_plan_str.endswith("')"): base64_str = binary_plan_str[25:-2] else: return None decoded_compressed = base64.b64decode(base64_str) decompressed_data = snappy.decompress(decoded_compressed) explain_data = ExplainData() explain_data.ParseFromString(decompressed_data) decoded_plan = MessageToJson(explain_data) return decoded_plan except (ValueError, TypeError, snappy.UncompressError, Exception): return None def main(): binary_plan = "tidb_decode_binary_plan('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')" print(parse_binary_plan(binary_plan)) if __name__ == "__main__": main()