| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 | 2 |
| 3 """ | 3 """ |
| 4 Copyright 2013 Google Inc. | 4 Copyright 2013 Google Inc. |
| 5 | 5 |
| 6 Use of this source code is governed by a BSD-style license that can be | 6 Use of this source code is governed by a BSD-style license that can be |
| 7 found in the LICENSE file. | 7 found in the LICENSE file. |
| 8 | 8 |
| 9 HTTP server for our HTML rebaseline viewer. | 9 HTTP server for our HTML rebaseline viewer. |
| 10 """ | 10 """ |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 GENERATED_HTML_SUBDIR = 'generated-html' | 81 GENERATED_HTML_SUBDIR = 'generated-html' |
| 82 GENERATED_IMAGES_SUBDIR = 'generated-images' | 82 GENERATED_IMAGES_SUBDIR = 'generated-images' |
| 83 GENERATED_JSON_SUBDIR = 'generated-json' | 83 GENERATED_JSON_SUBDIR = 'generated-json' |
| 84 | 84 |
| 85 # Directives associated with various HTTP GET requests. | 85 # Directives associated with various HTTP GET requests. |
| 86 GET__LIVE_RESULTS = 'live-results' | 86 GET__LIVE_RESULTS = 'live-results' |
| 87 GET__PRECOMPUTED_RESULTS = 'results' | 87 GET__PRECOMPUTED_RESULTS = 'results' |
| 88 GET__PREFETCH_RESULTS = 'prefetch' | 88 GET__PREFETCH_RESULTS = 'prefetch' |
| 89 GET__STATIC_CONTENTS = 'static' | 89 GET__STATIC_CONTENTS = 'static' |
| 90 | 90 |
| 91 # Parameters we use within do_GET_live_results() | 91 # Parameters we use within do_GET_live_results() and do_GET_prefetch_results() |
| 92 LIVE_PARAM__DOWNLOAD_ONLY_DIFFERING = 'downloadOnlyDifferingImages' |
| 92 LIVE_PARAM__SET_A_DIR = 'setADir' | 93 LIVE_PARAM__SET_A_DIR = 'setADir' |
| 94 LIVE_PARAM__SET_A_SECTION = 'setASection' |
| 93 LIVE_PARAM__SET_B_DIR = 'setBDir' | 95 LIVE_PARAM__SET_B_DIR = 'setBDir' |
| 94 | 96 LIVE_PARAM__SET_B_SECTION = 'setBSection' |
| 95 # Parameters we use within do_GET_prefetch_results() | |
| 96 PREFETCH_PARAM__DOWNLOAD_ONLY_DIFFERING = 'downloadOnlyDifferingImages' | |
| 97 | 97 |
| 98 # How often (in seconds) clients should reload while waiting for initial | 98 # How often (in seconds) clients should reload while waiting for initial |
| 99 # results to load. | 99 # results to load. |
| 100 RELOAD_INTERVAL_UNTIL_READY = 10 | 100 RELOAD_INTERVAL_UNTIL_READY = 10 |
| 101 | 101 |
| 102 SUMMARY_TYPES = [ | 102 SUMMARY_TYPES = [ |
| 103 results_mod.KEY__HEADER__RESULTS_FAILURES, | 103 results_mod.KEY__HEADER__RESULTS_FAILURES, |
| 104 results_mod.KEY__HEADER__RESULTS_ALL, | 104 results_mod.KEY__HEADER__RESULTS_ALL, |
| 105 ] | 105 ] |
| 106 # If --compare-configs is specified, compare these configs. | 106 # If --compare-configs is specified, compare these configs. |
| (...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 526 self.send_json_dict(response_dict) | 526 self.send_json_dict(response_dict) |
| 527 | 527 |
| 528 def do_GET_live_results(self, url_remainder): | 528 def do_GET_live_results(self, url_remainder): |
| 529 """ Handle a GET request for live-generated image diff data. | 529 """ Handle a GET request for live-generated image diff data. |
| 530 | 530 |
| 531 Args: | 531 Args: |
| 532 url_remainder: string indicating which image diffs to generate | 532 url_remainder: string indicating which image diffs to generate |
| 533 """ | 533 """ |
| 534 logging.debug('do_GET_live_results: url_remainder="%s"' % url_remainder) | 534 logging.debug('do_GET_live_results: url_remainder="%s"' % url_remainder) |
| 535 param_dict = urlparse.parse_qs(url_remainder) | 535 param_dict = urlparse.parse_qs(url_remainder) |
| 536 results_obj = compare_rendered_pictures.RenderedPicturesComparisons( | 536 results_obj = self._call_compare_rendered_pictures( |
| 537 setA_dirs=param_dict[LIVE_PARAM__SET_A_DIR], | 537 param_dict=param_dict, prefetch_only=False) |
| 538 setB_dirs=param_dict[LIVE_PARAM__SET_B_DIR], | |
| 539 image_diff_db=_SERVER.image_diff_db, | |
| 540 diff_base_url='/static/generated-images', | |
| 541 gs=_SERVER.gs, truncate_results=_SERVER.truncate_results) | |
| 542 self.send_json_dict(results_obj.get_packaged_results_of_type( | 538 self.send_json_dict(results_obj.get_packaged_results_of_type( |
| 543 results_mod.KEY__HEADER__RESULTS_ALL)) | 539 results_mod.KEY__HEADER__RESULTS_ALL)) |
| 544 | 540 |
| 545 def do_GET_prefetch_results(self, url_remainder): | 541 def do_GET_prefetch_results(self, url_remainder): |
| 546 """ Prefetch image diff data for a future do_GET_live_results() call. | 542 """ Prefetch image diff data for a future do_GET_live_results() call. |
| 547 | 543 |
| 548 Args: | 544 Args: |
| 549 url_remainder: string indicating which image diffs to generate | 545 url_remainder: string indicating which image diffs to generate |
| 550 """ | 546 """ |
| 551 logging.debug('do_GET_prefetch_results: url_remainder="%s"' % url_remainder) | 547 logging.debug('do_GET_prefetch_results: url_remainder="%s"' % url_remainder) |
| 552 param_dict = urlparse.parse_qs(url_remainder) | 548 param_dict = urlparse.parse_qs(url_remainder) |
| 553 download_all_images = ( | 549 self._call_compare_rendered_pictures( |
| 554 param_dict.get(PREFETCH_PARAM__DOWNLOAD_ONLY_DIFFERING, [''])[0].lower() | 550 param_dict=param_dict, prefetch_only=True) |
| 555 not in ['1', 'true']) | |
| 556 compare_rendered_pictures.RenderedPicturesComparisons( | |
| 557 setA_dirs=param_dict[LIVE_PARAM__SET_A_DIR], | |
| 558 setB_dirs=param_dict[LIVE_PARAM__SET_B_DIR], | |
| 559 image_diff_db=_SERVER.image_diff_db, | |
| 560 diff_base_url='/static/generated-images', | |
| 561 gs=_SERVER.gs, truncate_results=_SERVER.truncate_results, | |
| 562 prefetch_only=True, download_all_images=download_all_images) | |
| 563 self.send_response(200) | 551 self.send_response(200) |
| 564 | 552 |
| 565 def do_GET_static(self, path): | 553 def do_GET_static(self, path): |
| 566 """ Handle a GET request for a file under STATIC_CONTENTS_SUBDIR . | 554 """ Handle a GET request for a file under STATIC_CONTENTS_SUBDIR . |
| 567 Only allow serving of files within STATIC_CONTENTS_SUBDIR that is a | 555 Only allow serving of files within STATIC_CONTENTS_SUBDIR that is a |
| 568 filesystem sibling of this script. | 556 filesystem sibling of this script. |
| 569 | 557 |
| 570 Args: | 558 Args: |
| 571 path: path to file (within STATIC_CONTENTS_SUBDIR) to retrieve | 559 path: path to file (within STATIC_CONTENTS_SUBDIR) to retrieve |
| 572 """ | 560 """ |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 700 mimetype. | 688 mimetype. |
| 701 | 689 |
| 702 Args: | 690 Args: |
| 703 json_dict: dictionary to send | 691 json_dict: dictionary to send |
| 704 """ | 692 """ |
| 705 self.send_response(200) | 693 self.send_response(200) |
| 706 self.send_header('Content-type', 'application/json') | 694 self.send_header('Content-type', 'application/json') |
| 707 self.end_headers() | 695 self.end_headers() |
| 708 json.dump(json_dict, self.wfile) | 696 json.dump(json_dict, self.wfile) |
| 709 | 697 |
| 698 def _call_compare_rendered_pictures(self, param_dict, prefetch_only): |
| 699 """Instantiates RenderedPicturesComparisons object to serve a GET request. |
| 700 |
| 701 Args: |
| 702 param_dict: dictionary of URL parameters |
| 703 prefetch_only: parameter to pass into RenderedPicturesComparisons |
| 704 constructor |
| 705 |
| 706 Returns: a reference to the new RenderedPicturesComparisons object. |
| 707 """ |
| 708 download_all_images = ( |
| 709 param_dict.get(LIVE_PARAM__DOWNLOAD_ONLY_DIFFERING, [''])[0].lower() |
| 710 not in ['1', 'true']) |
| 711 setA_section = self._validate_summary_section( |
| 712 param_dict.get(LIVE_PARAM__SET_A_SECTION, [None])[0]) |
| 713 setB_section = self._validate_summary_section( |
| 714 param_dict.get(LIVE_PARAM__SET_B_SECTION, [None])[0]) |
| 715 return compare_rendered_pictures.RenderedPicturesComparisons( |
| 716 setA_dirs=param_dict[LIVE_PARAM__SET_A_DIR], |
| 717 setB_dirs=param_dict[LIVE_PARAM__SET_B_DIR], |
| 718 setA_section=setA_section, setB_section=setB_section, |
| 719 image_diff_db=_SERVER.image_diff_db, |
| 720 diff_base_url='/static/generated-images', |
| 721 gs=_SERVER.gs, truncate_results=_SERVER.truncate_results, |
| 722 prefetch_only=prefetch_only, download_all_images=download_all_images) |
| 723 |
| 724 def _validate_summary_section(self, section_name): |
| 725 """Validates the section we have been requested to read within JSON summary. |
| 726 |
| 727 Args: |
| 728 section_name: which section of the JSON summary file has been requested |
| 729 |
| 730 Returns: the validated section name |
| 731 |
| 732 Raises: Exception if an invalid section_name was requested. |
| 733 """ |
| 734 if section_name not in compare_rendered_pictures.ALLOWED_SECTION_NAMES: |
| 735 raise Exception('requested section name "%s" not in allowed list %s' % ( |
| 736 section_name, compare_rendered_pictures.ALLOWED_SECTION_NAMES)) |
| 737 return section_name |
| 738 |
| 710 | 739 |
| 711 def main(): | 740 def main(): |
| 712 logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s', | 741 logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s', |
| 713 datefmt='%m/%d/%Y %H:%M:%S', | 742 datefmt='%m/%d/%Y %H:%M:%S', |
| 714 level=logging.INFO) | 743 level=logging.INFO) |
| 715 parser = argparse.ArgumentParser() | 744 parser = argparse.ArgumentParser() |
| 716 parser.add_argument('--actuals-dir', | 745 parser.add_argument('--actuals-dir', |
| 717 help=('Directory into which we will check out the latest ' | 746 help=('Directory into which we will check out the latest ' |
| 718 'actual GM results. If this directory does not ' | 747 'actual GM results. If this directory does not ' |
| 719 'exist, it will be created. Defaults to %(default)s'), | 748 'exist, it will be created. Defaults to %(default)s'), |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 791 reload_seconds=args.reload, config_pairs=config_pairs, | 820 reload_seconds=args.reload, config_pairs=config_pairs, |
| 792 builder_regex_list=args.builders, boto_file_path=args.boto, | 821 builder_regex_list=args.builders, boto_file_path=args.boto, |
| 793 imagediffdb_threads=args.threads) | 822 imagediffdb_threads=args.threads) |
| 794 if args.truncate: | 823 if args.truncate: |
| 795 _SERVER.truncate_results = True | 824 _SERVER.truncate_results = True |
| 796 _SERVER.run() | 825 _SERVER.run() |
| 797 | 826 |
| 798 | 827 |
| 799 if __name__ == '__main__': | 828 if __name__ == '__main__': |
| 800 main() | 829 main() |
| OLD | NEW |