summaryrefslogtreecommitdiffstats
path: root/src/rocksdb/tools/advisor/advisor/rule_parser_example.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/rocksdb/tools/advisor/advisor/rule_parser_example.py')
-rw-r--r--src/rocksdb/tools/advisor/advisor/rule_parser_example.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/rocksdb/tools/advisor/advisor/rule_parser_example.py b/src/rocksdb/tools/advisor/advisor/rule_parser_example.py
new file mode 100644
index 000000000..d2348e5ae
--- /dev/null
+++ b/src/rocksdb/tools/advisor/advisor/rule_parser_example.py
@@ -0,0 +1,89 @@
+# Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
+# This source code is licensed under both the GPLv2 (found in the
+# COPYING file in the root directory) and Apache 2.0 License
+# (found in the LICENSE.Apache file in the root directory).
+
+from advisor.rule_parser import RulesSpec
+from advisor.db_log_parser import DatabaseLogs, DataSource
+from advisor.db_options_parser import DatabaseOptions
+from advisor.db_stats_fetcher import LogStatsParser, OdsStatsFetcher
+import argparse
+
+
+def main(args):
+ # initialise the RulesSpec parser
+ rule_spec_parser = RulesSpec(args.rules_spec)
+ rule_spec_parser.load_rules_from_spec()
+ rule_spec_parser.perform_section_checks()
+ # initialize the DatabaseOptions object
+ db_options = DatabaseOptions(args.rocksdb_options)
+ # Create DatabaseLogs object
+ db_logs = DatabaseLogs(
+ args.log_files_path_prefix, db_options.get_column_families()
+ )
+ # Create the Log STATS object
+ db_log_stats = LogStatsParser(
+ args.log_files_path_prefix, args.stats_dump_period_sec
+ )
+ data_sources = {
+ DataSource.Type.DB_OPTIONS: [db_options],
+ DataSource.Type.LOG: [db_logs],
+ DataSource.Type.TIME_SERIES: [db_log_stats]
+ }
+ if args.ods_client:
+ data_sources[DataSource.Type.TIME_SERIES].append(OdsStatsFetcher(
+ args.ods_client,
+ args.ods_entity,
+ args.ods_tstart,
+ args.ods_tend,
+ args.ods_key_prefix
+ ))
+ triggered_rules = rule_spec_parser.get_triggered_rules(
+ data_sources, db_options.get_column_families()
+ )
+ rule_spec_parser.print_rules(triggered_rules)
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser(description='Use this script to get\
+ suggestions for improving Rocksdb performance.')
+ parser.add_argument(
+ '--rules_spec', required=True, type=str,
+ help='path of the file containing the expert-specified Rules'
+ )
+ parser.add_argument(
+ '--rocksdb_options', required=True, type=str,
+ help='path of the starting Rocksdb OPTIONS file'
+ )
+ parser.add_argument(
+ '--log_files_path_prefix', required=True, type=str,
+ help='path prefix of the Rocksdb LOG files'
+ )
+ parser.add_argument(
+ '--stats_dump_period_sec', required=True, type=int,
+ help='the frequency (in seconds) at which STATISTICS are printed to ' +
+ 'the Rocksdb LOG file'
+ )
+ # ODS arguments
+ parser.add_argument(
+ '--ods_client', type=str, help='the ODS client binary'
+ )
+ parser.add_argument(
+ '--ods_entity', type=str,
+ help='the servers for which the ODS stats need to be fetched'
+ )
+ parser.add_argument(
+ '--ods_key_prefix', type=str,
+ help='the prefix that needs to be attached to the keys of time ' +
+ 'series to be fetched from ODS'
+ )
+ parser.add_argument(
+ '--ods_tstart', type=int,
+ help='start time of timeseries to be fetched from ODS'
+ )
+ parser.add_argument(
+ '--ods_tend', type=int,
+ help='end time of timeseries to be fetched from ODS'
+ )
+ args = parser.parse_args()
+ main(args)