)]}'
{"setup.cfg":[{"author":{"_account_id":17898,"name":"Jinquan Ni","email":"ni.jinquan@zte.com.cn","username":"jinquanni"},"change_message_id":"c16c0d7eca145187ee9476a839fdced57acc9d24","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    workload_balancing \u003d watcher.decision_engine.goal.goals:WorkloadBalancing"},{"line_number":56,"context_line":"    airflow_optimization \u003d watcher.decision_engine.goal.goals:AirflowOptimization"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"watcher_scoringengines \u003d"},{"line_number":59,"context_line":"    dummy_scorer \u003d watcher.decision_engine.scoring.dummy_scorer:DummyScorer"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"watcher_scoringengine_containers \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":5,"id":"3ac371cc_5310ab01","line":58,"range":{"start_line":58,"start_character":8,"end_line":58,"end_character":22},"updated":"2016-08-16 07:27:25.000000000","message":"nit: s/scoringengines/scoring_engines will be better?","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"24c592621c13125b9e1c915875c705ad1686396b","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    workload_balancing \u003d watcher.decision_engine.goal.goals:WorkloadBalancing"},{"line_number":56,"context_line":"    airflow_optimization \u003d watcher.decision_engine.goal.goals:AirflowOptimization"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"watcher_scoringengines \u003d"},{"line_number":59,"context_line":"    dummy_scorer \u003d watcher.decision_engine.scoring.dummy_scorer:DummyScorer"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"watcher_scoringengine_containers \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":5,"id":"3ac371cc_0bcc1a69","line":58,"range":{"start_line":58,"start_character":8,"end_line":58,"end_character":22},"in_reply_to":"3ac371cc_5310ab01","updated":"2016-08-16 16:15:55.000000000","message":"Done","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":17898,"name":"Jinquan Ni","email":"ni.jinquan@zte.com.cn","username":"jinquanni"},"change_message_id":"c16c0d7eca145187ee9476a839fdced57acc9d24","unresolved":false,"context_lines":[{"line_number":58,"context_line":"watcher_scoringengines \u003d"},{"line_number":59,"context_line":"    dummy_scorer \u003d watcher.decision_engine.scoring.dummy_scorer:DummyScorer"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"watcher_scoringengine_containers \u003d"},{"line_number":62,"context_line":"    dummy_scoring_container \u003d watcher.decision_engine.scoring.dummy_scoring_container:DummyScoringContainer"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"watcher_strategies \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":5,"id":"3ac371cc_b3163fef","line":61,"range":{"start_line":61,"start_character":8,"end_line":61,"end_character":22},"updated":"2016-08-16 07:27:25.000000000","message":"and here","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"24c592621c13125b9e1c915875c705ad1686396b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"watcher_scoringengines \u003d"},{"line_number":59,"context_line":"    dummy_scorer \u003d watcher.decision_engine.scoring.dummy_scorer:DummyScorer"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"watcher_scoringengine_containers \u003d"},{"line_number":62,"context_line":"    dummy_scoring_container \u003d watcher.decision_engine.scoring.dummy_scoring_container:DummyScoringContainer"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"watcher_strategies \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":5,"id":"3ac371cc_ebc6de47","line":61,"range":{"start_line":61,"start_character":8,"end_line":61,"end_character":22},"in_reply_to":"3ac371cc_b3163fef","updated":"2016-08-16 16:15:55.000000000","message":"Done","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"}],"watcher/decision_engine/loading/default.py":[{"author":{"_account_id":17898,"name":"Jinquan Ni","email":"ni.jinquan@zte.com.cn","username":"jinquanni"},"change_message_id":"c16c0d7eca145187ee9476a839fdced57acc9d24","unresolved":false,"context_lines":[{"line_number":52,"context_line":"class DefaultScoringLoader(default.DefaultLoader):"},{"line_number":53,"context_line":"    def __init__(self):"},{"line_number":54,"context_line":"        super(DefaultScoringLoader, self).__init__("},{"line_number":55,"context_line":"            namespace\u003d\u0027watcher_scoringengines\u0027)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class DefaultScoringContainerLoader(default.DefaultLoader):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_f3a437ba","line":55,"range":{"start_line":55,"start_character":31,"end_line":55,"end_character":45},"updated":"2016-08-16 07:27:25.000000000","message":"s/scoringengines/scoring_engines","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"24c592621c13125b9e1c915875c705ad1686396b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"class DefaultScoringLoader(default.DefaultLoader):"},{"line_number":53,"context_line":"    def __init__(self):"},{"line_number":54,"context_line":"        super(DefaultScoringLoader, self).__init__("},{"line_number":55,"context_line":"            namespace\u003d\u0027watcher_scoringengines\u0027)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class DefaultScoringContainerLoader(default.DefaultLoader):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_cbe842b7","line":55,"range":{"start_line":55,"start_character":31,"end_line":55,"end_character":45},"in_reply_to":"3ac371cc_f3a437ba","updated":"2016-08-16 16:15:55.000000000","message":"Done","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":17898,"name":"Jinquan Ni","email":"ni.jinquan@zte.com.cn","username":"jinquanni"},"change_message_id":"c16c0d7eca145187ee9476a839fdced57acc9d24","unresolved":false,"context_lines":[{"line_number":58,"context_line":"class DefaultScoringContainerLoader(default.DefaultLoader):"},{"line_number":59,"context_line":"    def __init__(self):"},{"line_number":60,"context_line":"        super(DefaultScoringContainerLoader, self).__init__("},{"line_number":61,"context_line":"            namespace\u003d\u0027watcher_scoringengine_containers\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_53ac2ba0","line":61,"range":{"start_line":61,"start_character":31,"end_line":61,"end_character":44},"updated":"2016-08-16 07:27:25.000000000","message":"and here","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"24c592621c13125b9e1c915875c705ad1686396b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"class DefaultScoringContainerLoader(default.DefaultLoader):"},{"line_number":59,"context_line":"    def __init__(self):"},{"line_number":60,"context_line":"        super(DefaultScoringContainerLoader, self).__init__("},{"line_number":61,"context_line":"            namespace\u003d\u0027watcher_scoringengine_containers\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_abeb46af","line":61,"range":{"start_line":61,"start_character":31,"end_line":61,"end_character":44},"in_reply_to":"3ac371cc_53ac2ba0","updated":"2016-08-16 16:15:55.000000000","message":"Done","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"}],"watcher/decision_engine/scoring/dummy_scorer.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_log import log"},{"line_number":21,"context_line":"from oslo_serialization import jsonutils"},{"line_number":22,"context_line":"from watcher.decision_engine.scoring import scoring_engine"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_408a27c0","line":22,"updated":"2016-08-05 10:23:26.000000000","message":"nit: needs one blank space between 3rd party imports and watcher imports","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_log import log"},{"line_number":21,"context_line":"from oslo_serialization import jsonutils"},{"line_number":22,"context_line":"from watcher.decision_engine.scoring import scoring_engine"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_cdbbe80d","line":22,"in_reply_to":"bacf61ea_408a27c0","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    WORKLOAD_MEM \u003d 2"},{"line_number":74,"context_line":"    WORKLOAD_DISK \u003d 3"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    MB \u003d 1024*1024"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def get_name(self):"},{"line_number":79,"context_line":"        return \u0027dummy_scorer\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_c9e1232c","line":76,"updated":"2016-08-05 10:23:26.000000000","message":"for units, you can also use http://docs.openstack.org/developer/oslo.utils/api/units.html","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    WORKLOAD_MEM \u003d 2"},{"line_number":74,"context_line":"    WORKLOAD_DISK \u003d 3"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    MB \u003d 1024*1024"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def get_name(self):"},{"line_number":79,"context_line":"        return \u0027dummy_scorer\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_4da8988c","line":76,"in_reply_to":"bacf61ea_c9e1232c","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        try:"},{"line_number":139,"context_line":"            flist \u003d jsonutils.loads(features)"},{"line_number":140,"context_line":"        except Exception as e:"},{"line_number":141,"context_line":"            raise ValueError(\u0027Unable to parse features: \u0027 + str(e))"},{"line_number":142,"context_line":"        if type(flist) is not list:"},{"line_number":143,"context_line":"            raise ValueError(\u0027JSON list expected in feature argument\u0027)"},{"line_number":144,"context_line":"        if len(flist) !\u003d 9:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_c9fda3b2","line":141,"range":{"start_line":141,"start_character":58,"end_line":141,"end_character":59},"updated":"2016-08-05 10:23:26.000000000","message":"can you use string formatting instead of string concatenation here please? i.e.:\n\nraise ValueError(\u0027Unable to parse features: %s\u0027 % e)\n\n\nAlso can you wrap this exception with _() for i18n please?","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        try:"},{"line_number":139,"context_line":"            flist \u003d jsonutils.loads(features)"},{"line_number":140,"context_line":"        except Exception as e:"},{"line_number":141,"context_line":"            raise ValueError(\u0027Unable to parse features: \u0027 + str(e))"},{"line_number":142,"context_line":"        if type(flist) is not list:"},{"line_number":143,"context_line":"            raise ValueError(\u0027JSON list expected in feature argument\u0027)"},{"line_number":144,"context_line":"        if len(flist) !\u003d 9:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_10899326","line":141,"range":{"start_line":141,"start_character":58,"end_line":141,"end_character":59},"in_reply_to":"bacf61ea_c9fda3b2","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        except Exception as e:"},{"line_number":141,"context_line":"            raise ValueError(\u0027Unable to parse features: \u0027 + str(e))"},{"line_number":142,"context_line":"        if type(flist) is not list:"},{"line_number":143,"context_line":"            raise ValueError(\u0027JSON list expected in feature argument\u0027)"},{"line_number":144,"context_line":"        if len(flist) !\u003d 9:"},{"line_number":145,"context_line":"            raise ValueError(\u0027Invalid number of features, expected 9\u0027)"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_49b6d3f9","line":143,"updated":"2016-08-05 10:23:26.000000000","message":"ditto on i18n","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        except Exception as e:"},{"line_number":141,"context_line":"            raise ValueError(\u0027Unable to parse features: \u0027 + str(e))"},{"line_number":142,"context_line":"        if type(flist) is not list:"},{"line_number":143,"context_line":"            raise ValueError(\u0027JSON list expected in feature argument\u0027)"},{"line_number":144,"context_line":"        if len(flist) !\u003d 9:"},{"line_number":145,"context_line":"            raise ValueError(\u0027Invalid number of features, expected 9\u0027)"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_f08ddf31","line":143,"in_reply_to":"bacf61ea_49b6d3f9","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        if type(flist) is not list:"},{"line_number":143,"context_line":"            raise ValueError(\u0027JSON list expected in feature argument\u0027)"},{"line_number":144,"context_line":"        if len(flist) !\u003d 9:"},{"line_number":145,"context_line":"            raise ValueError(\u0027Invalid number of features, expected 9\u0027)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        # Simple logic for workload classification"},{"line_number":148,"context_line":"        if flist[self.PROCESSOR_TIME_PERC] \u003e\u003d 80:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_89cc4b8a","line":145,"updated":"2016-08-05 10:23:26.000000000","message":"ditto","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        if type(flist) is not list:"},{"line_number":143,"context_line":"            raise ValueError(\u0027JSON list expected in feature argument\u0027)"},{"line_number":144,"context_line":"        if len(flist) !\u003d 9:"},{"line_number":145,"context_line":"            raise ValueError(\u0027Invalid number of features, expected 9\u0027)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        # Simple logic for workload classification"},{"line_number":148,"context_line":"        if flist[self.PROCESSOR_TIME_PERC] \u003e\u003d 80:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_507f8b16","line":145,"in_reply_to":"bacf61ea_89cc4b8a","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"}],"watcher/decision_engine/scoring/dummy_scoring_container.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_log import log"},{"line_number":21,"context_line":"from oslo_serialization import jsonutils"},{"line_number":22,"context_line":"from watcher.decision_engine.scoring import scoring_container"},{"line_number":23,"context_line":"from watcher.decision_engine.scoring import scoring_engine"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_89a1eb96","line":22,"updated":"2016-08-05 10:23:26.000000000","message":"Can you add a blank line before he watcher imports please?","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from oslo_log import log"},{"line_number":21,"context_line":"from oslo_serialization import jsonutils"},{"line_number":22,"context_line":"from watcher.decision_engine.scoring import scoring_container"},{"line_number":23,"context_line":"from watcher.decision_engine.scoring import scoring_engine"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_70a1ef93","line":22,"in_reply_to":"bacf61ea_89a1eb96","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        try:"},{"line_number":85,"context_line":"            flist \u003d jsonutils.loads(features)"},{"line_number":86,"context_line":"        except Exception as e:"},{"line_number":87,"context_line":"            raise ValueError(\u0027Unable to parse features: \u0027 + str(e))"},{"line_number":88,"context_line":"        if type(flist) is not list:"},{"line_number":89,"context_line":"            raise ValueError(\u0027JSON list expected in feature argument\u0027)"},{"line_number":90,"context_line":"        if len(flist) \u003c 1:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_697f5717","line":87,"range":{"start_line":87,"start_character":12,"end_line":87,"end_character":67},"updated":"2016-08-05 10:23:26.000000000","message":"ditto on string formatting and i18n","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        try:"},{"line_number":85,"context_line":"            flist \u003d jsonutils.loads(features)"},{"line_number":86,"context_line":"        except Exception as e:"},{"line_number":87,"context_line":"            raise ValueError(\u0027Unable to parse features: \u0027 + str(e))"},{"line_number":88,"context_line":"        if type(flist) is not list:"},{"line_number":89,"context_line":"            raise ValueError(\u0027JSON list expected in feature argument\u0027)"},{"line_number":90,"context_line":"        if len(flist) \u003c 1:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_10051379","line":87,"range":{"start_line":87,"start_character":12,"end_line":87,"end_character":67},"in_reply_to":"bacf61ea_697f5717","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        except Exception as e:"},{"line_number":87,"context_line":"            raise ValueError(\u0027Unable to parse features: \u0027 + str(e))"},{"line_number":88,"context_line":"        if type(flist) is not list:"},{"line_number":89,"context_line":"            raise ValueError(\u0027JSON list expected in feature argument\u0027)"},{"line_number":90,"context_line":"        if len(flist) \u003c 1:"},{"line_number":91,"context_line":"            raise ValueError(\u0027At least one feature is required\u0027)"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_a97dcf1d","line":89,"range":{"start_line":89,"start_character":12,"end_line":89,"end_character":70},"updated":"2016-08-05 10:23:26.000000000","message":"ditto on i18n","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        except Exception as e:"},{"line_number":87,"context_line":"            raise ValueError(\u0027Unable to parse features: \u0027 + str(e))"},{"line_number":88,"context_line":"        if type(flist) is not list:"},{"line_number":89,"context_line":"            raise ValueError(\u0027JSON list expected in feature argument\u0027)"},{"line_number":90,"context_line":"        if len(flist) \u003c 1:"},{"line_number":91,"context_line":"            raise ValueError(\u0027At least one feature is required\u0027)"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_30001766","line":89,"range":{"start_line":89,"start_character":12,"end_line":89,"end_character":70},"in_reply_to":"bacf61ea_a97dcf1d","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        if type(flist) is not list:"},{"line_number":89,"context_line":"            raise ValueError(\u0027JSON list expected in feature argument\u0027)"},{"line_number":90,"context_line":"        if len(flist) \u003c 1:"},{"line_number":91,"context_line":"            raise ValueError(\u0027At least one feature is required\u0027)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        # Calculate the result"},{"line_number":94,"context_line":"        result \u003d self._aggregate_function(flist)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_2990bf42","line":91,"range":{"start_line":91,"start_character":12,"end_line":91,"end_character":64},"updated":"2016-08-05 10:23:26.000000000","message":"ditto on i18n","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        if type(flist) is not list:"},{"line_number":89,"context_line":"            raise ValueError(\u0027JSON list expected in feature argument\u0027)"},{"line_number":90,"context_line":"        if len(flist) \u003c 1:"},{"line_number":91,"context_line":"            raise ValueError(\u0027At least one feature is required\u0027)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        # Calculate the result"},{"line_number":94,"context_line":"        result \u003d self._aggregate_function(flist)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_90f90383","line":91,"range":{"start_line":91,"start_character":12,"end_line":91,"end_character":64},"in_reply_to":"bacf61ea_2990bf42","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"}],"watcher/decision_engine/scoring/scoring_container.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        :return: A list of Scoring Engine instances"},{"line_number":41,"context_line":"        :rtype: :class:"},{"line_number":42,"context_line":"            `watcher.decision_engine.scoring.scoring_engine.ScoringEngine`"},{"line_number":43,"context_line":"        \"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_465a40f3","line":42,"range":{"start_line":42,"start_character":13,"end_line":42,"end_character":44},"updated":"2016-08-05 10:23:26.000000000","message":"IMHO you can make this shorter by specifying a relative path like :py:class:`~.scoring_engine.ScoringEngine`","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        :return: A list of Scoring Engine instances"},{"line_number":41,"context_line":"        :rtype: :class:"},{"line_number":42,"context_line":"            `watcher.decision_engine.scoring.scoring_engine.ScoringEngine`"},{"line_number":43,"context_line":"        \"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_10bd1368","line":42,"range":{"start_line":42,"start_character":13,"end_line":42,"end_character":44},"in_reply_to":"bacf61ea_465a40f3","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        :rtype: :class:"},{"line_number":42,"context_line":"            `watcher.decision_engine.scoring.scoring_engine.ScoringEngine`"},{"line_number":43,"context_line":"        \"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def get_config_opts(cls):"},{"line_number":47,"context_line":"        \"\"\"Defines the configuration options to be associated to this loadable"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_ecc19530","line":44,"updated":"2016-08-05 10:23:26.000000000","message":"This should raise a NotImplementedError()","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a23103fae6e521b0cf91cf7cb170073be302603f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        :rtype: :class:"},{"line_number":42,"context_line":"            `watcher.decision_engine.scoring.scoring_engine.ScoringEngine`"},{"line_number":43,"context_line":"        \"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def get_config_opts(cls):"},{"line_number":47,"context_line":"        \"\"\"Defines the configuration options to be associated to this loadable"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_03c78896","line":44,"in_reply_to":"bacf61ea_10efd387","updated":"2016-08-05 14:05:14.000000000","message":"If you add the @abc.abstractmethod decorator, it forces you to override the method in your subclasses. This is why I was mentioning the NotImplementedError() thing. BTW, this is what you did in https://review.openstack.org/#/c/351577/1/watcher/decision_engine/scoring/dummy_scoring_container.py@39 .","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        :rtype: :class:"},{"line_number":42,"context_line":"            `watcher.decision_engine.scoring.scoring_engine.ScoringEngine`"},{"line_number":43,"context_line":"        \"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def get_config_opts(cls):"},{"line_number":47,"context_line":"        \"\"\"Defines the configuration options to be associated to this loadable"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_10efd387","line":44,"in_reply_to":"bacf61ea_ecc19530","updated":"2016-08-05 13:51:36.000000000","message":"I think it\u0027s a bad idea, because this is being actually called. I don\u0027t expect this to be ever overridden, so it\u0027s good to have a default implementation.\n\nPlease also note that BaseStrategy does the same thing (returns []).","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"}],"watcher/decision_engine/scoring/scoring_factory.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"_scoring_engine_map \u003d None"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def get_scoring_engine(scoring_engine_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_cfebe3da","line":29,"updated":"2016-08-05 10:23:26.000000000","message":"It feels to me that what you actually want is a mapping of scoring engine singletons?\n\nI\u0027m not to fond globals, so IMHO you should create a manager class which would be a Singleton (see https://github.com/openstack/watcher/blob/master/watcher/common/service.py#L65)\nwith this _scoring_engine_map as an attribute. The other functions in this module would then become methods of this manager similar to what I\u0027ve done here https://github.com/openstack/watcher/blob/master/watcher/decision_engine/model/collector/manager.py : what do you think?","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"_scoring_engine_map \u003d None"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def get_scoring_engine(scoring_engine_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_23845309","line":29,"in_reply_to":"bacf61ea_cfebe3da","updated":"2016-08-05 13:51:36.000000000","message":"My goal was to simplify using of this factory as much as possible. The usage should be as simple as:\n\nfrom watcher... import scoring_factory\nscoring_factory.get_scoring_engine(...)\n\nThis is why I didn\u0027t create any class etc. I\u0027m not a big fan of globals either, but I felt that it\u0027s better to have it here, so all \"clients\" use cases are simplified.\n\nThis variable is really a cache, so we don\u0027t need to reload scoring engines all the time and iterate over them.","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    _reload_scoring_engines()"},{"line_number":48,"context_line":"    scoring_engine \u003d _scoring_engine_map.get(scoring_engine_name)"},{"line_number":49,"context_line":"    if scoring_engine is None:"},{"line_number":50,"context_line":"        raise KeyError(\"Scoring Engine with name\u003d{} not found\".format("},{"line_number":51,"context_line":"            scoring_engine_name))"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    return scoring_engine"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_3aad9b9b","line":51,"range":{"start_line":50,"start_character":23,"end_line":51,"end_character":31},"updated":"2016-08-05 10:23:26.000000000","message":"ditto on i18n","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    _reload_scoring_engines()"},{"line_number":48,"context_line":"    scoring_engine \u003d _scoring_engine_map.get(scoring_engine_name)"},{"line_number":49,"context_line":"    if scoring_engine is None:"},{"line_number":50,"context_line":"        raise KeyError(\"Scoring Engine with name\u003d{} not found\".format("},{"line_number":51,"context_line":"            scoring_engine_name))"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    return scoring_engine"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_123d13dd","line":51,"range":{"start_line":50,"start_character":23,"end_line":51,"end_character":31},"in_reply_to":"bacf61ea_3aad9b9b","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    return _scoring_engine_map.values()"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"def _reload_scoring_engines(refresh\u003dFalse):"},{"line_number":75,"context_line":"    \"\"\"Reloads Scoring Engines from Stevedore plugins to memory."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    Please note that two Stevedore entry points are used:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_ec5fd50c","line":74,"range":{"start_line":74,"start_character":28,"end_line":74,"end_character":41},"updated":"2016-08-05 10:23:26.000000000","message":"why do you need this flag?","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"d35f8a9ec6edbf2614ddff36a03edb0594c8d431","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    return _scoring_engine_map.values()"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"def _reload_scoring_engines(refresh\u003dFalse):"},{"line_number":75,"context_line":"    \"\"\"Reloads Scoring Engines from Stevedore plugins to memory."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    Please note that two Stevedore entry points are used:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_aaf3589d","line":74,"range":{"start_line":74,"start_character":28,"end_line":74,"end_character":41},"in_reply_to":"bacf61ea_ec5fd50c","updated":"2016-08-09 16:13:09.000000000","message":"Because by default I don\u0027t want to reload scoring engines all the time. Scoring factory might be used frequently, but the watcher configuration (and scoring engines) are not changing often, so this would be an overhead.\n\nReloading (cache refresh) is only needed when database sync is being called (this is the only moment when this is important I think).","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        _scoring_engine_map \u003d dict()"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        for name, scoring_cls in engines.items():"},{"line_number":91,"context_line":"            se_impl \u003d scoring_cls(config\u003dNone)"},{"line_number":92,"context_line":"            LOG.debug(\"Found Scoring Engine implementation: \" + name)"},{"line_number":93,"context_line":"            _scoring_engine_map[se_impl.get_name()] \u003d se_impl"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_af55cf50","line":91,"range":{"start_line":91,"start_character":22,"end_line":91,"end_character":46},"updated":"2016-08-05 10:23:26.000000000","message":"Here, you should use the default.DefaultScoringLoader().load(name) method instead. This will allow your scoring engine plugins to load the config you\u0027ve manually set to None from the configuration file base on what they may have defined in their respective get_config_opts() classmethod.","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"d35f8a9ec6edbf2614ddff36a03edb0594c8d431","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        _scoring_engine_map \u003d dict()"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        for name, scoring_cls in engines.items():"},{"line_number":91,"context_line":"            se_impl \u003d scoring_cls(config\u003dNone)"},{"line_number":92,"context_line":"            LOG.debug(\"Found Scoring Engine implementation: \" + name)"},{"line_number":93,"context_line":"            _scoring_engine_map[se_impl.get_name()] \u003d se_impl"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_4a3bbc38","line":91,"range":{"start_line":91,"start_character":22,"end_line":91,"end_character":46},"in_reply_to":"bacf61ea_af55cf50","updated":"2016-08-09 16:13:09.000000000","message":"I didn\u0027t know that there is such method. Of course this is a good idea, done.","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        for name, scoring_cls in engines.items():"},{"line_number":91,"context_line":"            se_impl \u003d scoring_cls(config\u003dNone)"},{"line_number":92,"context_line":"            LOG.debug(\"Found Scoring Engine implementation: \" + name)"},{"line_number":93,"context_line":"            _scoring_engine_map[se_impl.get_name()] \u003d se_impl"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        engine_containers \u003d \\"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_26a2acae","line":92,"range":{"start_line":92,"start_character":62,"end_line":92,"end_character":63},"updated":"2016-08-05 10:23:26.000000000","message":"Can you use string formatting instead of string concatenation?","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"d35f8a9ec6edbf2614ddff36a03edb0594c8d431","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        for name, scoring_cls in engines.items():"},{"line_number":91,"context_line":"            se_impl \u003d scoring_cls(config\u003dNone)"},{"line_number":92,"context_line":"            LOG.debug(\"Found Scoring Engine implementation: \" + name)"},{"line_number":93,"context_line":"            _scoring_engine_map[se_impl.get_name()] \u003d se_impl"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        engine_containers \u003d \\"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_ca15ec9b","line":92,"range":{"start_line":92,"start_character":62,"end_line":92,"end_character":63},"in_reply_to":"bacf61ea_26a2acae","updated":"2016-08-09 16:13:09.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            default.DefaultScoringContainerLoader().list_available()"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        for container_id, container_cls in engine_containers.items():"},{"line_number":99,"context_line":"            LOG.debug(\"Found Scoring Engine container: \" + container_id)"},{"line_number":100,"context_line":"            for se in container_cls.get_scoring_engine_list():"},{"line_number":101,"context_line":"                LOG.debug(\"Found Scoring Engine implementation: \" +"},{"line_number":102,"context_line":"                          se.get_name())"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_e69c146c","line":99,"range":{"start_line":99,"start_character":57,"end_line":99,"end_character":58},"updated":"2016-08-05 10:23:26.000000000","message":"ditto","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"d35f8a9ec6edbf2614ddff36a03edb0594c8d431","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            default.DefaultScoringContainerLoader().list_available()"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        for container_id, container_cls in engine_containers.items():"},{"line_number":99,"context_line":"            LOG.debug(\"Found Scoring Engine container: \" + container_id)"},{"line_number":100,"context_line":"            for se in container_cls.get_scoring_engine_list():"},{"line_number":101,"context_line":"                LOG.debug(\"Found Scoring Engine implementation: \" +"},{"line_number":102,"context_line":"                          se.get_name())"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_0a10a4a7","line":99,"range":{"start_line":99,"start_character":57,"end_line":99,"end_character":58},"in_reply_to":"bacf61ea_e69c146c","updated":"2016-08-09 16:13:09.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        for container_id, container_cls in engine_containers.items():"},{"line_number":99,"context_line":"            LOG.debug(\"Found Scoring Engine container: \" + container_id)"},{"line_number":100,"context_line":"            for se in container_cls.get_scoring_engine_list():"},{"line_number":101,"context_line":"                LOG.debug(\"Found Scoring Engine implementation: \" +"},{"line_number":102,"context_line":"                          se.get_name())"},{"line_number":103,"context_line":"                _scoring_engine_map[se.get_name()] \u003d se"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_46ad209a","line":101,"range":{"start_line":101,"start_character":66,"end_line":101,"end_character":67},"updated":"2016-08-05 10:23:26.000000000","message":"ditto","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"d35f8a9ec6edbf2614ddff36a03edb0594c8d431","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        for container_id, container_cls in engine_containers.items():"},{"line_number":99,"context_line":"            LOG.debug(\"Found Scoring Engine container: \" + container_id)"},{"line_number":100,"context_line":"            for se in container_cls.get_scoring_engine_list():"},{"line_number":101,"context_line":"                LOG.debug(\"Found Scoring Engine implementation: \" +"},{"line_number":102,"context_line":"                          se.get_name())"},{"line_number":103,"context_line":"                _scoring_engine_map[se.get_name()] \u003d se"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_6a27a012","line":101,"range":{"start_line":101,"start_character":66,"end_line":101,"end_character":67},"in_reply_to":"bacf61ea_46ad209a","updated":"2016-08-09 16:13:09.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":17898,"name":"Jinquan Ni","email":"ni.jinquan@zte.com.cn","username":"jinquanni"},"change_message_id":"c16c0d7eca145187ee9476a839fdced57acc9d24","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    \"\"\"Reloads Scoring Engines from Stevedore plugins to memory."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    Please note that two Stevedore entry points are used:"},{"line_number":80,"context_line":"    - watcher_scoringengines: for simple plugin implementations"},{"line_number":81,"context_line":"    - watcher_scoringengine_containers: for container plugins, which enable"},{"line_number":82,"context_line":"      the dynamic scenarios (its get_scoring_engine_list method might return"},{"line_number":83,"context_line":"      different values on each call)"},{"line_number":84,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_a7b0b944","line":81,"range":{"start_line":80,"start_character":5,"end_line":81,"end_character":39},"updated":"2016-08-16 07:27:25.000000000","message":"ditto","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"24c592621c13125b9e1c915875c705ad1686396b","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    \"\"\"Reloads Scoring Engines from Stevedore plugins to memory."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    Please note that two Stevedore entry points are used:"},{"line_number":80,"context_line":"    - watcher_scoringengines: for simple plugin implementations"},{"line_number":81,"context_line":"    - watcher_scoringengine_containers: for container plugins, which enable"},{"line_number":82,"context_line":"      the dynamic scenarios (its get_scoring_engine_list method might return"},{"line_number":83,"context_line":"      different values on each call)"},{"line_number":84,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_0bfa5a75","line":81,"range":{"start_line":80,"start_character":5,"end_line":81,"end_character":39},"in_reply_to":"3ac371cc_a7b0b944","updated":"2016-08-16 16:15:55.000000000","message":"Done","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":17898,"name":"Jinquan Ni","email":"ni.jinquan@zte.com.cn","username":"jinquanni"},"change_message_id":"c16c0d7eca145187ee9476a839fdced57acc9d24","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        engines \u003d default.DefaultScoringLoader().list_available()"},{"line_number":90,"context_line":"        _scoring_engine_map \u003d dict()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        for name, cls in engines.items():"},{"line_number":93,"context_line":"            se_impl \u003d default.DefaultScoringLoader().load(name)"},{"line_number":94,"context_line":"            LOG.debug(\"Found Scoring Engine implementation: \" + name)"},{"line_number":95,"context_line":"            _scoring_engine_map[se_impl.get_name()] \u003d se_impl"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_42ce13b5","line":92,"range":{"start_line":92,"start_character":8,"end_line":92,"end_character":40},"updated":"2016-08-16 07:27:25.000000000","message":"list_available() return a dict type in common/loader/default.py.\n\"for name in engines.keys()\" will be better if you just use the name. avoid a unused \"cls\"","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"24c592621c13125b9e1c915875c705ad1686396b","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        engines \u003d default.DefaultScoringLoader().list_available()"},{"line_number":90,"context_line":"        _scoring_engine_map \u003d dict()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        for name, cls in engines.items():"},{"line_number":93,"context_line":"            se_impl \u003d default.DefaultScoringLoader().load(name)"},{"line_number":94,"context_line":"            LOG.debug(\"Found Scoring Engine implementation: \" + name)"},{"line_number":95,"context_line":"            _scoring_engine_map[se_impl.get_name()] \u003d se_impl"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_2655cb1c","line":92,"range":{"start_line":92,"start_character":8,"end_line":92,"end_character":40},"in_reply_to":"3ac371cc_42ce13b5","updated":"2016-08-16 16:15:55.000000000","message":"Done","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":17898,"name":"Jinquan Ni","email":"ni.jinquan@zte.com.cn","username":"jinquanni"},"change_message_id":"c16c0d7eca145187ee9476a839fdced57acc9d24","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        for name, cls in engines.items():"},{"line_number":93,"context_line":"            se_impl \u003d default.DefaultScoringLoader().load(name)"},{"line_number":94,"context_line":"            LOG.debug(\"Found Scoring Engine implementation: \" + name)"},{"line_number":95,"context_line":"            _scoring_engine_map[se_impl.get_name()] \u003d se_impl"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        engine_containers \u003d \\"},{"line_number":98,"context_line":"            default.DefaultScoringContainerLoader().list_available()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_82476b1c","line":95,"range":{"start_line":95,"start_character":32,"end_line":95,"end_character":51},"updated":"2016-08-16 07:27:25.000000000","message":"why we don\u0027t use the name directly?\ndoes name !\u003d se.get_name()?","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"24c592621c13125b9e1c915875c705ad1686396b","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        for name, cls in engines.items():"},{"line_number":93,"context_line":"            se_impl \u003d default.DefaultScoringLoader().load(name)"},{"line_number":94,"context_line":"            LOG.debug(\"Found Scoring Engine implementation: \" + name)"},{"line_number":95,"context_line":"            _scoring_engine_map[se_impl.get_name()] \u003d se_impl"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        engine_containers \u003d \\"},{"line_number":98,"context_line":"            default.DefaultScoringContainerLoader().list_available()"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_e16efd94","line":95,"range":{"start_line":95,"start_character":32,"end_line":95,"end_character":51},"in_reply_to":"3ac371cc_82476b1c","updated":"2016-08-16 16:15:55.000000000","message":"The contract is that whatever developer puts in the \"get_name\" method, it should serve as a key to access it. Nobody can guarantee that the same name will be used in stevedore (there was already a Watcher bug related to that). So I keep it this way, so it will always be consistent. Of course, the recommendation is to use the same name, but nothing will break if somebody will use a different name for whatever (maybe valid?) reason.","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":17898,"name":"Jinquan Ni","email":"ni.jinquan@zte.com.cn","username":"jinquanni"},"change_message_id":"c16c0d7eca145187ee9476a839fdced57acc9d24","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            default.DefaultScoringContainerLoader().list_available()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        for container_id, container_cls in engine_containers.items():"},{"line_number":101,"context_line":"            LOG.debug(\"Found Scoring Engine container: \" + container_id)"},{"line_number":102,"context_line":"            for se in container_cls.get_scoring_engine_list():"},{"line_number":103,"context_line":"                LOG.debug(\"Found Scoring Engine implementation: \" +"},{"line_number":104,"context_line":"                          se.get_name())"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_62106f02","line":101,"range":{"start_line":101,"start_character":22,"end_line":101,"end_character":72},"updated":"2016-08-16 07:27:25.000000000","message":"Miss modify to string format which vincent advice to do.","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"24c592621c13125b9e1c915875c705ad1686396b","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            default.DefaultScoringContainerLoader().list_available()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        for container_id, container_cls in engine_containers.items():"},{"line_number":101,"context_line":"            LOG.debug(\"Found Scoring Engine container: \" + container_id)"},{"line_number":102,"context_line":"            for se in container_cls.get_scoring_engine_list():"},{"line_number":103,"context_line":"                LOG.debug(\"Found Scoring Engine implementation: \" +"},{"line_number":104,"context_line":"                          se.get_name())"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_4631e704","line":101,"range":{"start_line":101,"start_character":22,"end_line":101,"end_character":72},"in_reply_to":"3ac371cc_62106f02","updated":"2016-08-16 16:15:55.000000000","message":"By bad, fixed now.","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":17898,"name":"Jinquan Ni","email":"ni.jinquan@zte.com.cn","username":"jinquanni"},"change_message_id":"c16c0d7eca145187ee9476a839fdced57acc9d24","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        for container_id, container_cls in engine_containers.items():"},{"line_number":101,"context_line":"            LOG.debug(\"Found Scoring Engine container: \" + container_id)"},{"line_number":102,"context_line":"            for se in container_cls.get_scoring_engine_list():"},{"line_number":103,"context_line":"                LOG.debug(\"Found Scoring Engine implementation: \" +"},{"line_number":104,"context_line":"                          se.get_name())"},{"line_number":105,"context_line":"                _scoring_engine_map[se.get_name()] \u003d se"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_82912b55","line":104,"range":{"start_line":103,"start_character":25,"end_line":104,"end_character":40},"updated":"2016-08-16 07:27:25.000000000","message":"ditto","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"24c592621c13125b9e1c915875c705ad1686396b","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        for container_id, container_cls in engine_containers.items():"},{"line_number":101,"context_line":"            LOG.debug(\"Found Scoring Engine container: \" + container_id)"},{"line_number":102,"context_line":"            for se in container_cls.get_scoring_engine_list():"},{"line_number":103,"context_line":"                LOG.debug(\"Found Scoring Engine implementation: \" +"},{"line_number":104,"context_line":"                          se.get_name())"},{"line_number":105,"context_line":"                _scoring_engine_map[se.get_name()] \u003d se"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_262cabaa","line":104,"range":{"start_line":103,"start_character":25,"end_line":104,"end_character":40},"in_reply_to":"3ac371cc_82912b55","updated":"2016-08-16 16:15:55.000000000","message":"Done","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"}],"watcher/decision_engine/strategy/strategies/dummy_with_scorer.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from oslo_log import log"},{"line_number":23,"context_line":"from oslo_serialization import jsonutils"},{"line_number":24,"context_line":"from watcher._i18n import _"},{"line_number":25,"context_line":"from watcher.decision_engine.scoring import scoring_factory"},{"line_number":26,"context_line":"from watcher.decision_engine.strategy.strategies import base"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_061848d2","line":24,"updated":"2016-08-05 10:23:26.000000000","message":"extra blank line needed before this line","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from oslo_log import log"},{"line_number":23,"context_line":"from oslo_serialization import jsonutils"},{"line_number":24,"context_line":"from watcher._i18n import _"},{"line_number":25,"context_line":"from watcher.decision_engine.scoring import scoring_factory"},{"line_number":26,"context_line":"from watcher.decision_engine.strategy.strategies import base"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_e0106a50","line":24,"in_reply_to":"bacf61ea_061848d2","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        super(DummyWithScorer, self).__init__(config, osc)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        # Setup Scoring Engines"},{"line_number":65,"context_line":"        self._workload_scorer \u003d \\"},{"line_number":66,"context_line":"            scoring_factory.get_scoring_engine(\u0027dummy_scorer\u0027)"},{"line_number":67,"context_line":"        self._avg_scorer \u003d \\"},{"line_number":68,"context_line":"            scoring_factory.get_scoring_engine(\u0027dummy_avg_scorer\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_46ea4075","line":65,"range":{"start_line":65,"start_character":32,"end_line":65,"end_character":33},"updated":"2016-08-05 10:23:26.000000000","message":"Can you wrap your line with () instead of breaking the line with a \u0027\\\u0027 ? i.e.::\n\n        self._workload_scorer \u003d (\n            scoring_factory.get_scoring_engine(\u0027dummy_scorer\u0027))\n\nOR::\n\n         self._workload_scorer \u003d scoring_factory.get_scoring_engine(\n            \u0027dummy_scorer\u0027)","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        super(DummyWithScorer, self).__init__(config, osc)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        # Setup Scoring Engines"},{"line_number":65,"context_line":"        self._workload_scorer \u003d \\"},{"line_number":66,"context_line":"            scoring_factory.get_scoring_engine(\u0027dummy_scorer\u0027)"},{"line_number":67,"context_line":"        self._avg_scorer \u003d \\"},{"line_number":68,"context_line":"            scoring_factory.get_scoring_engine(\u0027dummy_avg_scorer\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_006bfeb7","line":65,"range":{"start_line":65,"start_character":32,"end_line":65,"end_character":33},"in_reply_to":"bacf61ea_46ea4075","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        # Setup Scoring Engines"},{"line_number":65,"context_line":"        self._workload_scorer \u003d \\"},{"line_number":66,"context_line":"            scoring_factory.get_scoring_engine(\u0027dummy_scorer\u0027)"},{"line_number":67,"context_line":"        self._avg_scorer \u003d \\"},{"line_number":68,"context_line":"            scoring_factory.get_scoring_engine(\u0027dummy_avg_scorer\u0027)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # Get metainfo from Workload Scorer for result intepretation"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_a6033c41","line":67,"range":{"start_line":67,"start_character":27,"end_line":67,"end_character":28},"updated":"2016-08-05 10:23:26.000000000","message":"ditto","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        # Setup Scoring Engines"},{"line_number":65,"context_line":"        self._workload_scorer \u003d \\"},{"line_number":66,"context_line":"            scoring_factory.get_scoring_engine(\u0027dummy_scorer\u0027)"},{"line_number":67,"context_line":"        self._avg_scorer \u003d \\"},{"line_number":68,"context_line":"            scoring_factory.get_scoring_engine(\u0027dummy_avg_scorer\u0027)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # Get metainfo from Workload Scorer for result intepretation"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_e0aceaee","line":67,"range":{"start_line":67,"start_character":27,"end_line":67,"end_character":28},"in_reply_to":"bacf61ea_a6033c41","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        # Parse the result using workloads from scorer\u0027s metainfo"},{"line_number":95,"context_line":"        result \u003d self._workloads[jsonutils.loads(result_str)[0]]"},{"line_number":96,"context_line":"        LOG.debug(\u0027Detected Workload: %s\u0027, result)"},{"line_number":97,"context_line":"        parameters \u003d {\u0027message\u0027: \u0027Detected Workload: \u0027 + result}"},{"line_number":98,"context_line":"        self.solution.add_action(action_type\u003dself.NOP,"},{"line_number":99,"context_line":"                                 input_parameters\u003dparameters)"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_e646d4be","line":97,"range":{"start_line":97,"start_character":55,"end_line":97,"end_character":56},"updated":"2016-08-05 10:23:26.000000000","message":"ditto on string formatting","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        # Parse the result using workloads from scorer\u0027s metainfo"},{"line_number":95,"context_line":"        result \u003d self._workloads[jsonutils.loads(result_str)[0]]"},{"line_number":96,"context_line":"        LOG.debug(\u0027Detected Workload: %s\u0027, result)"},{"line_number":97,"context_line":"        parameters \u003d {\u0027message\u0027: \u0027Detected Workload: \u0027 + result}"},{"line_number":98,"context_line":"        self.solution.add_action(action_type\u003dself.NOP,"},{"line_number":99,"context_line":"                                 input_parameters\u003dparameters)"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_20e1e22a","line":97,"range":{"start_line":97,"start_character":55,"end_line":97,"end_character":56},"in_reply_to":"bacf61ea_e646d4be","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        LOG.debug(\u0027AVG Scorer result: %s\u0027, result_str)"},{"line_number":105,"context_line":"        result \u003d jsonutils.loads(result_str)[0]"},{"line_number":106,"context_line":"        LOG.debug(\u0027AVG Scorer result (parsed): %d\u0027, result)"},{"line_number":107,"context_line":"        parameters \u003d {\u0027message\u0027: \u0027AVG Scorer result: \u0027 + str(result)}"},{"line_number":108,"context_line":"        self.solution.add_action(action_type\u003dself.NOP,"},{"line_number":109,"context_line":"                                 input_parameters\u003dparameters)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_2613ccb9","line":107,"range":{"start_line":107,"start_character":55,"end_line":107,"end_character":56},"updated":"2016-08-05 10:23:26.000000000","message":"ditto on string formatting","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        LOG.debug(\u0027AVG Scorer result: %s\u0027, result_str)"},{"line_number":105,"context_line":"        result \u003d jsonutils.loads(result_str)[0]"},{"line_number":106,"context_line":"        LOG.debug(\u0027AVG Scorer result (parsed): %d\u0027, result)"},{"line_number":107,"context_line":"        parameters \u003d {\u0027message\u0027: \u0027AVG Scorer result: \u0027 + str(result)}"},{"line_number":108,"context_line":"        self.solution.add_action(action_type\u003dself.NOP,"},{"line_number":109,"context_line":"                                 input_parameters\u003dparameters)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_20b8c210","line":107,"range":{"start_line":107,"start_character":55,"end_line":107,"end_character":56},"in_reply_to":"bacf61ea_2613ccb9","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        }"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def _generate_random_telemetry(self):"},{"line_number":151,"context_line":"        MB \u003d 1024*1024"},{"line_number":152,"context_line":"        GB \u003d 1024*MB"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        processor_time \u003d random.randint(0, 100)"},{"line_number":155,"context_line":"        mem_total_bytes \u003d 4*GB"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_e6eff4ae","line":152,"range":{"start_line":151,"start_character":8,"end_line":152,"end_character":20},"updated":"2016-08-05 10:23:26.000000000","message":"can you use http://docs.openstack.org/developer/oslo.utils/api/units.html instead?","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        }"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def _generate_random_telemetry(self):"},{"line_number":151,"context_line":"        MB \u003d 1024*1024"},{"line_number":152,"context_line":"        GB \u003d 1024*MB"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        processor_time \u003d random.randint(0, 100)"},{"line_number":155,"context_line":"        mem_total_bytes \u003d 4*GB"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_80d52e1d","line":152,"range":{"start_line":151,"start_character":8,"end_line":152,"end_character":20},"in_reply_to":"bacf61ea_e6eff4ae","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"}],"watcher/decision_engine/sync.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"a0b577b1e3abcfe10e463c7ae745f0888e3d2675","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def available_scoringengines(self):"},{"line_number":83,"context_line":"        \"\"\"Scoring Engines loaded from DB\"\"\""},{"line_number":84,"context_line":"        if self._available_scoringengines is None:"},{"line_number":85,"context_line":"            self._available_scoringengines \u003d \\"},{"line_number":86,"context_line":"                objects.ScoringEngine.list(self.ctx)"},{"line_number":87,"context_line":"        return self._available_scoringengines"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_c652b034","line":85,"range":{"start_line":85,"start_character":45,"end_line":85,"end_character":46},"updated":"2016-08-05 10:23:26.000000000","message":"ditto on line breaks","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"43ca9d42d3c7efa0a26f5e2cf2653475cc123c1f","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def available_scoringengines(self):"},{"line_number":83,"context_line":"        \"\"\"Scoring Engines loaded from DB\"\"\""},{"line_number":84,"context_line":"        if self._available_scoringengines is None:"},{"line_number":85,"context_line":"            self._available_scoringengines \u003d \\"},{"line_number":86,"context_line":"                objects.ScoringEngine.list(self.ctx)"},{"line_number":87,"context_line":"        return self._available_scoringengines"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_80a36eb1","line":85,"range":{"start_line":85,"start_character":45,"end_line":85,"end_character":46},"in_reply_to":"bacf61ea_c652b034","updated":"2016-08-05 13:51:36.000000000","message":"Done","commit_id":"5de3a55387eee78fd2e1a490e2bfb72fca792285"}],"watcher/tests/decision_engine/scoring/test_dummy_scoring_container.py":[{"author":{"_account_id":17898,"name":"Jinquan Ni","email":"ni.jinquan@zte.com.cn","username":"jinquanni"},"change_message_id":"c16c0d7eca145187ee9476a839fdced57acc9d24","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        scorers \u003d (dummy_scoring_container.DummyScoringContainer"},{"line_number":32,"context_line":"                                          .get_scoring_engine_list())"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        self.assertIsNotNone(scorers)"},{"line_number":35,"context_line":"        self.assertEqual(3, len(scorers))"},{"line_number":36,"context_line":"        self.assertEqual(\u0027dummy_min_scorer\u0027, scorers[0].get_name())"},{"line_number":37,"context_line":"        self.assertEqual(\u0027dummy_max_scorer\u0027, scorers[1].get_name())"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_bdba8808","line":34,"range":{"start_line":34,"start_character":8,"end_line":34,"end_character":37},"updated":"2016-08-16 07:27:25.000000000","message":"we don\u0027t need this line","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"24c592621c13125b9e1c915875c705ad1686396b","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        scorers \u003d (dummy_scoring_container.DummyScoringContainer"},{"line_number":32,"context_line":"                                          .get_scoring_engine_list())"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        self.assertIsNotNone(scorers)"},{"line_number":35,"context_line":"        self.assertEqual(3, len(scorers))"},{"line_number":36,"context_line":"        self.assertEqual(\u0027dummy_min_scorer\u0027, scorers[0].get_name())"},{"line_number":37,"context_line":"        self.assertEqual(\u0027dummy_max_scorer\u0027, scorers[1].get_name())"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_21ee55ec","line":34,"range":{"start_line":34,"start_character":8,"end_line":34,"end_character":37},"in_reply_to":"3ac371cc_bdba8808","updated":"2016-08-16 16:15:55.000000000","message":"I like these assertions for clarity, but I\u0027m not going to fight for it. Removed.","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":17898,"name":"Jinquan Ni","email":"ni.jinquan@zte.com.cn","username":"jinquanni"},"change_message_id":"c16c0d7eca145187ee9476a839fdced57acc9d24","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        self._assert_result(scorers[0], 1.1, \u0027[1.1, 2.2, 4, 8]\u0027)"},{"line_number":45,"context_line":"        self._assert_result(scorers[1], 8, \u0027[1.1, 2.2, 4, 8]\u0027)"},{"line_number":46,"context_line":"        # (1 + 2 + 4 + 8) / 4 \u003d 15 / 4 \u003d 3 (rounded)"},{"line_number":47,"context_line":"        self._assert_result(scorers[2], 3.75, \u0027[1, 2, 4, 8]\u0027)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _assert_result(self, scorer, expected, features):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_1dde3c11","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":52},"updated":"2016-08-16 07:27:25.000000000","message":"comment should be #float(1+2+4+8)/4 \u003d 3.75","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"24c592621c13125b9e1c915875c705ad1686396b","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        self._assert_result(scorers[0], 1.1, \u0027[1.1, 2.2, 4, 8]\u0027)"},{"line_number":45,"context_line":"        self._assert_result(scorers[1], 8, \u0027[1.1, 2.2, 4, 8]\u0027)"},{"line_number":46,"context_line":"        # (1 + 2 + 4 + 8) / 4 \u003d 15 / 4 \u003d 3 (rounded)"},{"line_number":47,"context_line":"        self._assert_result(scorers[2], 3.75, \u0027[1, 2, 4, 8]\u0027)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _assert_result(self, scorer, expected, features):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_61be8dd5","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":52},"in_reply_to":"3ac371cc_1dde3c11","updated":"2016-08-16 16:15:55.000000000","message":"Done","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"}],"watcher/tests/decision_engine/scoring/test_scoring_factory.py":[{"author":{"_account_id":17898,"name":"Jinquan Ni","email":"ni.jinquan@zte.com.cn","username":"jinquanni"},"change_message_id":"c16c0d7eca145187ee9476a839fdced57acc9d24","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def test_get_scoring_engine(self):"},{"line_number":29,"context_line":"        scorer \u003d scoring_factory.get_scoring_engine(\u0027dummy_scorer\u0027)"},{"line_number":30,"context_line":"        self.assertIsNotNone(scorer)"},{"line_number":31,"context_line":"        self.assertEqual(\u0027dummy_scorer\u0027, scorer.get_name())"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        scorer \u003d scoring_factory.get_scoring_engine(\u0027dummy_min_scorer\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_e2829f93","line":30,"range":{"start_line":30,"start_character":8,"end_line":30,"end_character":36},"updated":"2016-08-16 07:27:25.000000000","message":"we don\u0027t need this line actually, because we have next line.","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"24c592621c13125b9e1c915875c705ad1686396b","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def test_get_scoring_engine(self):"},{"line_number":29,"context_line":"        scorer \u003d scoring_factory.get_scoring_engine(\u0027dummy_scorer\u0027)"},{"line_number":30,"context_line":"        self.assertIsNotNone(scorer)"},{"line_number":31,"context_line":"        self.assertEqual(\u0027dummy_scorer\u0027, scorer.get_name())"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        scorer \u003d scoring_factory.get_scoring_engine(\u0027dummy_min_scorer\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_01d0791e","line":30,"range":{"start_line":30,"start_character":8,"end_line":30,"end_character":36},"in_reply_to":"3ac371cc_e2829f93","updated":"2016-08-16 16:15:55.000000000","message":"Done","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":17898,"name":"Jinquan Ni","email":"ni.jinquan@zte.com.cn","username":"jinquanni"},"change_message_id":"c16c0d7eca145187ee9476a839fdced57acc9d24","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.assertEqual(\u0027dummy_scorer\u0027, scorer.get_name())"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        scorer \u003d scoring_factory.get_scoring_engine(\u0027dummy_min_scorer\u0027)"},{"line_number":34,"context_line":"        self.assertIsNotNone(scorer)"},{"line_number":35,"context_line":"        self.assertEqual(\u0027dummy_min_scorer\u0027, scorer.get_name())"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        scorer \u003d scoring_factory.get_scoring_engine(\u0027dummy_max_scorer\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_c27de3b2","line":34,"range":{"start_line":34,"start_character":8,"end_line":34,"end_character":36},"updated":"2016-08-16 07:27:25.000000000","message":"ditto","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"24c592621c13125b9e1c915875c705ad1686396b","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.assertEqual(\u0027dummy_scorer\u0027, scorer.get_name())"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        scorer \u003d scoring_factory.get_scoring_engine(\u0027dummy_min_scorer\u0027)"},{"line_number":34,"context_line":"        self.assertIsNotNone(scorer)"},{"line_number":35,"context_line":"        self.assertEqual(\u0027dummy_min_scorer\u0027, scorer.get_name())"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        scorer \u003d scoring_factory.get_scoring_engine(\u0027dummy_max_scorer\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_e1ca7d6d","line":34,"range":{"start_line":34,"start_character":8,"end_line":34,"end_character":36},"in_reply_to":"3ac371cc_c27de3b2","updated":"2016-08-16 16:15:55.000000000","message":"Done","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":17898,"name":"Jinquan Ni","email":"ni.jinquan@zte.com.cn","username":"jinquanni"},"change_message_id":"c16c0d7eca145187ee9476a839fdced57acc9d24","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.assertEqual(\u0027dummy_min_scorer\u0027, scorer.get_name())"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        scorer \u003d scoring_factory.get_scoring_engine(\u0027dummy_max_scorer\u0027)"},{"line_number":38,"context_line":"        self.assertIsNotNone(scorer)"},{"line_number":39,"context_line":"        self.assertEqual(\u0027dummy_max_scorer\u0027, scorer.get_name())"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        scorer \u003d scoring_factory.get_scoring_engine(\u0027dummy_avg_scorer\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_4248d387","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":36},"updated":"2016-08-16 07:27:25.000000000","message":"ditto","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"24c592621c13125b9e1c915875c705ad1686396b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.assertEqual(\u0027dummy_min_scorer\u0027, scorer.get_name())"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        scorer \u003d scoring_factory.get_scoring_engine(\u0027dummy_max_scorer\u0027)"},{"line_number":38,"context_line":"        self.assertIsNotNone(scorer)"},{"line_number":39,"context_line":"        self.assertEqual(\u0027dummy_max_scorer\u0027, scorer.get_name())"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        scorer \u003d scoring_factory.get_scoring_engine(\u0027dummy_avg_scorer\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_21c5b55a","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":36},"in_reply_to":"3ac371cc_4248d387","updated":"2016-08-16 16:15:55.000000000","message":"Done","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":17898,"name":"Jinquan Ni","email":"ni.jinquan@zte.com.cn","username":"jinquanni"},"change_message_id":"c16c0d7eca145187ee9476a839fdced57acc9d24","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        self.assertEqual(\u0027dummy_max_scorer\u0027, scorer.get_name())"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        scorer \u003d scoring_factory.get_scoring_engine(\u0027dummy_avg_scorer\u0027)"},{"line_number":42,"context_line":"        self.assertIsNotNone(scorer)"},{"line_number":43,"context_line":"        self.assertEqual(\u0027dummy_avg_scorer\u0027, scorer.get_name())"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        self.assertRaises("}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_c254c322","line":42,"range":{"start_line":42,"start_character":8,"end_line":42,"end_character":36},"updated":"2016-08-16 07:27:25.000000000","message":"ditto","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"},{"author":{"_account_id":20515,"name":"Tomasz Kaczynski","email":"tomasz.kaczynski@intel.com","username":"tkaczynski"},"change_message_id":"24c592621c13125b9e1c915875c705ad1686396b","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        self.assertEqual(\u0027dummy_max_scorer\u0027, scorer.get_name())"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        scorer \u003d scoring_factory.get_scoring_engine(\u0027dummy_avg_scorer\u0027)"},{"line_number":42,"context_line":"        self.assertIsNotNone(scorer)"},{"line_number":43,"context_line":"        self.assertEqual(\u0027dummy_avg_scorer\u0027, scorer.get_name())"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        self.assertRaises("}],"source_content_type":"text/x-python","patch_set":5,"id":"3ac371cc_81a2a9ac","line":42,"range":{"start_line":42,"start_character":8,"end_line":42,"end_character":36},"in_reply_to":"3ac371cc_c254c322","updated":"2016-08-16 16:15:55.000000000","message":"Done","commit_id":"9480cfbf178f0fb97ee684a40fa8db37b3034dfc"}]}
