Anna Mayzner | 412e056 | 2022-11-25 09:55:51 +0000 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
| 2 | # Copyright (C) 2022 The Android Open Source Project |
| 3 | # |
| 4 | # Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | # you may not use this file except in compliance with the License. |
| 6 | # You may obtain a copy of the License at |
| 7 | # |
| 8 | # http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | # |
| 10 | # Unless required by applicable law or agreed to in writing, software |
| 11 | # distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | # See the License for the specific language governing permissions and |
| 14 | # limitations under the License. |
| 15 | |
Anna Mayzner | a6cdc36 | 2022-12-15 03:08:46 +0000 | [diff] [blame] | 16 | # This tool checks that every SQL object created without prefix |
Anna Mayzner | 412e056 | 2022-11-25 09:55:51 +0000 | [diff] [blame] | 17 | # 'internal_' is documented with proper schema. |
| 18 | |
Rasika Navarange | 1615f9d | 2023-06-15 12:57:40 +0000 | [diff] [blame] | 19 | import argparse |
Alexander Timin | 1948c31 | 2023-07-28 21:41:08 +0100 | [diff] [blame] | 20 | from typing import List, Tuple |
Anna Mayzner | 412e056 | 2022-11-25 09:55:51 +0000 | [diff] [blame] | 21 | import os |
Anna Mayzner | 412e056 | 2022-11-25 09:55:51 +0000 | [diff] [blame] | 22 | import sys |
Alexander Timin | 1948c31 | 2023-07-28 21:41:08 +0100 | [diff] [blame] | 23 | import re |
Anna Mayzner | 412e056 | 2022-11-25 09:55:51 +0000 | [diff] [blame] | 24 | |
| 25 | ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
Anna Mayzner | b215390 | 2023-01-06 16:32:49 +0000 | [diff] [blame] | 26 | sys.path.append(os.path.join(ROOT_DIR)) |
Anna Mayzner | 412e056 | 2022-11-25 09:55:51 +0000 | [diff] [blame] | 27 | |
Anna Mayzner | 1a84bf0 | 2023-08-16 09:56:21 +0000 | [diff] [blame] | 28 | from python.generators.sql_processing.docs_parse import ParsedFile, parse_file |
| 29 | from python.generators.sql_processing.utils import check_banned_words |
Anna Mayzner | 78a41c0 | 2023-08-16 14:30:33 +0000 | [diff] [blame] | 30 | from python.generators.sql_processing.utils import check_banned_create_table_as |
| 31 | |
| 32 | CREATE_TABLE_ALLOWLIST = { |
| 33 | '/src/trace_processor/perfetto_sql/stdlib/android/binder.sql': [ |
| 34 | 'internal_oom_score', 'internal_async_binder_reply', |
| 35 | 'internal_binder_async_txn_raw' |
| 36 | ], |
| 37 | '/src/trace_processor/perfetto_sql/stdlib/android/monitor_contention.sql': [ |
| 38 | 'internal_isolated', 'android_monitor_contention_chain', |
| 39 | 'android_monitor_contention' |
| 40 | ], |
| 41 | '/src/trace_processor/perfetto_sql/stdlib/chrome/tasks.sql': [ |
| 42 | 'internal_chrome_mojo_slices', 'internal_chrome_java_views', |
| 43 | 'internal_chrome_scheduler_tasks', 'internal_chrome_tasks' |
| 44 | ], |
| 45 | ('/src/trace_processor/perfetto_sql/stdlib/experimental/' |
| 46 | 'thread_executing_span.sql'): [ |
Zim | 56f67dc | 2023-08-27 01:50:30 +0100 | [diff] [blame] | 47 | 'internal_wakeup', 'experimental_thread_executing_span_graph', |
| 48 | 'internal_critical_path', 'internal_wakeup_graph', 'experimental_thread_executing_span_graph' |
Anna Mayzner | 78a41c0 | 2023-08-16 14:30:33 +0000 | [diff] [blame] | 49 | ], |
| 50 | '/src/trace_processor/perfetto_sql/stdlib/experimental/flat_slices.sql': [ |
| 51 | 'experimental_slice_flattened' |
| 52 | ] |
| 53 | } |
Anna Mayzner | 896ce6d | 2022-12-12 13:03:43 +0000 | [diff] [blame] | 54 | |
| 55 | |
Anna Mayzner | 412e056 | 2022-11-25 09:55:51 +0000 | [diff] [blame] | 56 | def main(): |
Rasika Navarange | 1615f9d | 2023-06-15 12:57:40 +0000 | [diff] [blame] | 57 | parser = argparse.ArgumentParser() |
| 58 | parser.add_argument( |
| 59 | '--stdlib-sources', |
Alexander Timin | 1948c31 | 2023-07-28 21:41:08 +0100 | [diff] [blame] | 60 | default=os.path.join(ROOT_DIR, "src", "trace_processor", "perfetto_sql", |
| 61 | "stdlib")) |
Rasika Navarange | 1615f9d | 2023-06-15 12:57:40 +0000 | [diff] [blame] | 62 | args = parser.parse_args() |
Anna Mayzner | a6cdc36 | 2022-12-15 03:08:46 +0000 | [diff] [blame] | 63 | errors = [] |
Alexander Timin | 1948c31 | 2023-07-28 21:41:08 +0100 | [diff] [blame] | 64 | modules: List[Tuple[str, str, ParsedFile]] = [] |
Rasika Navarange | 1615f9d | 2023-06-15 12:57:40 +0000 | [diff] [blame] | 65 | for root, _, files in os.walk(args.stdlib_sources, topdown=True): |
Anna Mayzner | 412e056 | 2022-11-25 09:55:51 +0000 | [diff] [blame] | 66 | for f in files: |
| 67 | path = os.path.join(root, f) |
Lalit Maganti | 6b2ac69 | 2023-05-23 01:24:29 +0100 | [diff] [blame] | 68 | if not path.endswith(".sql"): |
| 69 | continue |
| 70 | with open(path, 'r') as f: |
| 71 | sql = f.read() |
| 72 | |
Alexander Timin | 1948c31 | 2023-07-28 21:41:08 +0100 | [diff] [blame] | 73 | parsed = parse_file(path, sql) |
| 74 | modules.append((path, sql, parsed)) |
| 75 | |
Alexander Timin | 1948c31 | 2023-07-28 21:41:08 +0100 | [diff] [blame] | 76 | for path, sql, parsed in modules: |
Anna Mayzner | fdaee3f | 2023-08-23 09:56:28 +0000 | [diff] [blame] | 77 | lines = [l.strip() for l in sql.split('\n')] |
| 78 | for line in lines: |
| 79 | if line.startswith('--'): |
| 80 | continue |
| 81 | if 'RUN_METRIC' in line: |
| 82 | errors.append(f"RUN_METRIC is banned in standard library.\n" |
| 83 | f"Offending file: {path}\n") |
| 84 | |
Alexander Timin | 1948c31 | 2023-07-28 21:41:08 +0100 | [diff] [blame] | 85 | errors += parsed.errors |
Anna Mayzner | 1a84bf0 | 2023-08-16 09:56:21 +0000 | [diff] [blame] | 86 | errors += check_banned_words(sql, path) |
Anna Mayzner | 78a41c0 | 2023-08-16 14:30:33 +0000 | [diff] [blame] | 87 | errors += check_banned_create_table_as(sql, |
| 88 | path.split(ROOT_DIR)[1], |
| 89 | CREATE_TABLE_ALLOWLIST) |
Lalit Maganti | c5b13b3 | 2023-06-30 19:34:30 +0100 | [diff] [blame] | 90 | |
Anna Mayzner | 78a41c0 | 2023-08-16 14:30:33 +0000 | [diff] [blame] | 91 | if errors: |
| 92 | sys.stderr.write("\n".join(errors)) |
| 93 | sys.stderr.write("\n") |
Anna Mayzner | a6cdc36 | 2022-12-15 03:08:46 +0000 | [diff] [blame] | 94 | return 0 if not errors else 1 |
Anna Mayzner | 412e056 | 2022-11-25 09:55:51 +0000 | [diff] [blame] | 95 | |
| 96 | |
Anna Mayzner | a6cdc36 | 2022-12-15 03:08:46 +0000 | [diff] [blame] | 97 | if __name__ == "__main__": |
Anna Mayzner | 412e056 | 2022-11-25 09:55:51 +0000 | [diff] [blame] | 98 | sys.exit(main()) |