)]}'
{"watcher/decision_engine/strategy/loading/base.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"cab8c9a756405f00f6f6ae777300fc725d067974","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    def load_available_strategies(self):"},{"line_number":30,"context_line":"        raise NotImplementedError()  # pragma:no cover"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def load(self, strategy_to_load):"},{"line_number":33,"context_line":"        strategy \u003d None"},{"line_number":34,"context_line":"        try:"},{"line_number":35,"context_line":"            available_strategies \u003d self.load_available_strategies()"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_6ddf630d","line":32,"updated":"2015-12-14 10:19:03.000000000","message":"IMHO we should add None as default value for strategy_to_load","commit_id":"6eded08d649be38fe7805cb2ab7c8cc7e467c690"}],"watcher/decision_engine/strategy/strategies/basic_consolidation.py":[{"author":{"_account_id":19539,"name":"Mehdi Sheikhalishahi","email":"mehdi.sheikhalishahi@create-net.org"},"change_message_id":"00fc5716040f5c80275ab1621de6c1c5195bd42a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    The workloads of the VMs are changing over the time"},{"line_number":53,"context_line":"    and often tend to migrate from one physical machine to another."},{"line_number":54,"context_line":"    Hence, the traditional and offline heuristics such as bin packing"},{"line_number":55,"context_line":"    are not applicable for the placement VM in cloud computing."},{"line_number":56,"context_line":"    So, the decision Engine optimizer provide placement strategy considering"},{"line_number":57,"context_line":"    not only the performance effects but also the workload characteristics of"},{"line_number":58,"context_line":"    VMs and others metrics like the power consumption and"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_dcef401b","line":55,"updated":"2015-12-13 16:32:56.000000000","message":"provides","commit_id":"c21a9b478dfd5aa9d6060cdd93d04578fd21a2c0"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"95ee25637571699d86f659415be6975a05f75174","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    The workloads of the VMs are changing over the time"},{"line_number":53,"context_line":"    and often tend to migrate from one physical machine to another."},{"line_number":54,"context_line":"    Hence, the traditional and offline heuristics such as bin packing"},{"line_number":55,"context_line":"    are not applicable for the placement VM in cloud computing."},{"line_number":56,"context_line":"    So, the decision Engine optimizer provide placement strategy considering"},{"line_number":57,"context_line":"    not only the performance effects but also the workload characteristics of"},{"line_number":58,"context_line":"    VMs and others metrics like the power consumption and"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_c37e5818","line":55,"in_reply_to":"7a740942_dcef401b","updated":"2015-12-14 15:12:43.000000000","message":"Done","commit_id":"c21a9b478dfd5aa9d6060cdd93d04578fd21a2c0"},{"author":{"_account_id":19539,"name":"Mehdi Sheikhalishahi","email":"mehdi.sheikhalishahi@create-net.org"},"change_message_id":"00fc5716040f5c80275ab1621de6c1c5195bd42a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    not only the performance effects but also the workload characteristics of"},{"line_number":58,"context_line":"    VMs and others metrics like the power consumption and"},{"line_number":59,"context_line":"    the tenants constraints (SLAs)."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    The watcher optimizer use an online VM placement technique"},{"line_number":62,"context_line":"    based on machine learning and meta-heuristics that must handle :"},{"line_number":63,"context_line":"    - multi-objectives"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_fcf47cf1","line":60,"updated":"2015-12-13 16:32:56.000000000","message":"uses","commit_id":"c21a9b478dfd5aa9d6060cdd93d04578fd21a2c0"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"95ee25637571699d86f659415be6975a05f75174","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    not only the performance effects but also the workload characteristics of"},{"line_number":58,"context_line":"    VMs and others metrics like the power consumption and"},{"line_number":59,"context_line":"    the tenants constraints (SLAs)."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    The watcher optimizer use an online VM placement technique"},{"line_number":62,"context_line":"    based on machine learning and meta-heuristics that must handle :"},{"line_number":63,"context_line":"    - multi-objectives"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_e3791430","line":60,"in_reply_to":"7a740942_fcf47cf1","updated":"2015-12-14 15:12:43.000000000","message":"Done","commit_id":"c21a9b478dfd5aa9d6060cdd93d04578fd21a2c0"},{"author":{"_account_id":19539,"name":"Mehdi Sheikhalishahi","email":"mehdi.sheikhalishahi@create-net.org"},"change_message_id":"00fc5716040f5c80275ab1621de6c1c5195bd42a","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                        vm_to_mig):"},{"line_number":122,"context_line":"        \u0027\u0027\u0027check if the migration is possible"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        :param model: current state of the cluster"},{"line_number":125,"context_line":"        :param src_hypervisor: the current of the virtual machine"},{"line_number":126,"context_line":"        :param dest_hypervisor:the destination of the virtual machine"},{"line_number":127,"context_line":"        :param vm_to_mig: the virtual machine"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_5ce4b03a","line":124,"updated":"2015-12-13 16:32:56.000000000","message":"the current node of the ..","commit_id":"c21a9b478dfd5aa9d6060cdd93d04578fd21a2c0"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"95ee25637571699d86f659415be6975a05f75174","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                        vm_to_mig):"},{"line_number":122,"context_line":"        \u0027\u0027\u0027check if the migration is possible"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        :param model: current state of the cluster"},{"line_number":125,"context_line":"        :param src_hypervisor: the current of the virtual machine"},{"line_number":126,"context_line":"        :param dest_hypervisor:the destination of the virtual machine"},{"line_number":127,"context_line":"        :param vm_to_mig: the virtual machine"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_0397803a","line":124,"in_reply_to":"7a740942_5ce4b03a","updated":"2015-12-14 15:12:43.000000000","message":"Done","commit_id":"c21a9b478dfd5aa9d6060cdd93d04578fd21a2c0"},{"author":{"_account_id":19539,"name":"Mehdi Sheikhalishahi","email":"mehdi.sheikhalishahi@create-net.org"},"change_message_id":"00fc5716040f5c80275ab1621de6c1c5195bd42a","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                        total_mem):"},{"line_number":167,"context_line":"        \"\"\"Check threshold"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        check the threshold value defined by the ratio of"},{"line_number":170,"context_line":"        aggregated CPU capacity of VMS on one node to CPU capacity"},{"line_number":171,"context_line":"        of this node must not exceed the threshold value."},{"line_number":172,"context_line":"        :param dest_hypervisor:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_5cbb500f","line":169,"updated":"2015-12-13 16:32:56.000000000","message":"VMs","commit_id":"c21a9b478dfd5aa9d6060cdd93d04578fd21a2c0"},{"author":{"_account_id":19539,"name":"Mehdi Sheikhalishahi","email":"mehdi.sheikhalishahi@create-net.org"},"change_message_id":"00fc5716040f5c80275ab1621de6c1c5195bd42a","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        return self.number_of_migrations"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def calculate_weight(self, model, element, total_cores_used,"},{"line_number":215,"context_line":"                         total_disk_used, total_memory_used):"},{"line_number":216,"context_line":"        \"\"\"Calculate weight of every"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        :param model:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_5c5270df","line":215,"updated":"2015-12-13 16:32:56.000000000","message":"of every resource","commit_id":"c21a9b478dfd5aa9d6060cdd93d04578fd21a2c0"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"95ee25637571699d86f659415be6975a05f75174","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        return self.number_of_migrations"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def calculate_weight(self, model, element, total_cores_used,"},{"line_number":215,"context_line":"                         total_disk_used, total_memory_used):"},{"line_number":216,"context_line":"        \"\"\"Calculate weight of every"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        :param model:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_a3bd4cb2","line":215,"in_reply_to":"7a740942_5c5270df","updated":"2015-12-14 15:12:43.000000000","message":"Done","commit_id":"c21a9b478dfd5aa9d6060cdd93d04578fd21a2c0"},{"author":{"_account_id":19539,"name":"Mehdi Sheikhalishahi","email":"mehdi.sheikhalishahi@create-net.org"},"change_message_id":"00fc5716040f5c80275ab1621de6c1c5195bd42a","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        # todo(jed) take in account weight"},{"line_number":248,"context_line":"        return (score_cores + score_disk + score_memory) / 3"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def calculate_score_node(self, hypervisor, model):"},{"line_number":251,"context_line":"        \"\"\"calculate the score that reprensent the utilization level"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"            :param hypervisor:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_3c6444b7","line":250,"updated":"2015-12-13 16:32:56.000000000","message":".. represent...","commit_id":"c21a9b478dfd5aa9d6060cdd93d04578fd21a2c0"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"95ee25637571699d86f659415be6975a05f75174","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        # todo(jed) take in account weight"},{"line_number":248,"context_line":"        return (score_cores + score_disk + score_memory) / 3"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def calculate_score_node(self, hypervisor, model):"},{"line_number":251,"context_line":"        \"\"\"calculate the score that reprensent the utilization level"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"            :param hypervisor:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_43dfc80c","line":250,"in_reply_to":"7a740942_3c6444b7","updated":"2015-12-14 15:12:43.000000000","message":"Done","commit_id":"c21a9b478dfd5aa9d6060cdd93d04578fd21a2c0"},{"author":{"_account_id":19539,"name":"Mehdi Sheikhalishahi","email":"mehdi.sheikhalishahi@create-net.org"},"change_message_id":"00fc5716040f5c80275ab1621de6c1c5195bd42a","unresolved":false,"context_lines":[{"line_number":330,"context_line":"                                     node_id),"},{"line_number":331,"context_line":"                                 model)))"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    def execute(self, orign_model):"},{"line_number":334,"context_line":"        LOG.debug(\"initialize Sercon Consolidation\")"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        if orign_model is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_9c73f87f","line":333,"updated":"2015-12-13 16:32:56.000000000","message":"Initialize ..","commit_id":"c21a9b478dfd5aa9d6060cdd93d04578fd21a2c0"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"95ee25637571699d86f659415be6975a05f75174","unresolved":false,"context_lines":[{"line_number":330,"context_line":"                                     node_id),"},{"line_number":331,"context_line":"                                 model)))"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    def execute(self, orign_model):"},{"line_number":334,"context_line":"        LOG.debug(\"initialize Sercon Consolidation\")"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        if orign_model is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_83d93024","line":333,"in_reply_to":"7a740942_9c73f87f","updated":"2015-12-14 15:12:43.000000000","message":"Done","commit_id":"c21a9b478dfd5aa9d6060cdd93d04578fd21a2c0"},{"author":{"_account_id":19539,"name":"Mehdi Sheikhalishahi","email":"mehdi.sheikhalishahi@create-net.org"},"change_message_id":"00fc5716040f5c80275ab1621de6c1c5195bd42a","unresolved":false,"context_lines":[{"line_number":410,"context_line":"                if vm.state \u003d\u003d VMState.ACTIVE.value:"},{"line_number":411,"context_line":"                    vm_score.append("},{"line_number":412,"context_line":"                        (vm_id, self.calculate_score_vm(vm, current_model)))"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"            \u0027\u0027\u0027 sort VM\u0027s by Score \u0027\u0027\u0027"},{"line_number":415,"context_line":"            v \u003d sorted(vm_score, reverse\u003dTrue, key\u003dlambda x: (x[1]))"},{"line_number":416,"context_line":"            LOG.debug(\"VM(s) BFD {0}\".format(v))"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_7c664cbc","line":413,"updated":"2015-12-13 16:32:56.000000000","message":"VMs","commit_id":"c21a9b478dfd5aa9d6060cdd93d04578fd21a2c0"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"95ee25637571699d86f659415be6975a05f75174","unresolved":false,"context_lines":[{"line_number":410,"context_line":"                if vm.state \u003d\u003d VMState.ACTIVE.value:"},{"line_number":411,"context_line":"                    vm_score.append("},{"line_number":412,"context_line":"                        (vm_id, self.calculate_score_vm(vm, current_model)))"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"            \u0027\u0027\u0027 sort VM\u0027s by Score \u0027\u0027\u0027"},{"line_number":415,"context_line":"            v \u003d sorted(vm_score, reverse\u003dTrue, key\u003dlambda x: (x[1]))"},{"line_number":416,"context_line":"            LOG.debug(\"VM(s) BFD {0}\".format(v))"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_6309a494","line":413,"in_reply_to":"7a740942_7c664cbc","updated":"2015-12-14 15:12:43.000000000","message":"Done","commit_id":"c21a9b478dfd5aa9d6060cdd93d04578fd21a2c0"}],"watcher/tests/decision_engine/strategy/loading/test_default_strategy_loader.py":[{"author":{"_account_id":19539,"name":"Mehdi Sheikhalishahi","email":"mehdi.sheikhalishahi@create-net.org"},"change_message_id":"00fc5716040f5c80275ab1621de6c1c5195bd42a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def test_load_strategy_with_empty_model(self):"},{"line_number":33,"context_line":"        selected_strategy \u003d self.strategy_loader.load(None)"},{"line_number":34,"context_line":"        self.assertIsNotNone(selected_strategy,"},{"line_number":35,"context_line":"                             \u0027The default strategy be must not none\u0027)"},{"line_number":36,"context_line":"        self.assertIsInstance(selected_strategy, BaseStrategy)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def test_load_strategy_is_basic(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_dc22e053","line":35,"updated":"2015-12-13 16:32:56.000000000","message":"must not be. ..","commit_id":"c21a9b478dfd5aa9d6060cdd93d04578fd21a2c0"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"cab8c9a756405f00f6f6ae777300fc725d067974","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# implied."},{"line_number":14,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":15,"context_line":"# limitations under the License."},{"line_number":16,"context_line":"from __future__ import unicode_literals"},{"line_number":17,"context_line":"from mock import patch"},{"line_number":18,"context_line":"from stevedore.extension import Extension"},{"line_number":19,"context_line":"from stevedore.extension import ExtensionManager"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_ede913e7","line":16,"updated":"2015-12-14 10:19:03.000000000","message":"nit: can you split your imports into 3 sections (built-in, 3rd party and watcher)?","commit_id":"6eded08d649be38fe7805cb2ab7c8cc7e467c690"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"b8113786e89dc50077fb18d173d49e9553fdd129","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# implied."},{"line_number":14,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":15,"context_line":"# limitations under the License."},{"line_number":16,"context_line":"from __future__ import unicode_literals"},{"line_number":17,"context_line":"from mock import patch"},{"line_number":18,"context_line":"from stevedore.extension import Extension"},{"line_number":19,"context_line":"from stevedore.extension import ExtensionManager"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_330a1c21","line":16,"in_reply_to":"7a740942_ede913e7","updated":"2015-12-14 10:37:32.000000000","message":"if we want to do that we need to have pep8 to check it.","commit_id":"6eded08d649be38fe7805cb2ab7c8cc7e467c690"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"cab8c9a756405f00f6f6ae777300fc725d067974","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from watcher.tests.base import TestCase"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class TestStrategySelector(TestCase):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    strategy_loader \u003d DefaultStrategyLoader()"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_adfa2b41","line":28,"updated":"2015-12-14 10:19:03.000000000","message":"nit: This testcase does not match the filename","commit_id":"6eded08d649be38fe7805cb2ab7c8cc7e467c690"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"b8113786e89dc50077fb18d173d49e9553fdd129","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from watcher.tests.base import TestCase"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class TestStrategySelector(TestCase):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    strategy_loader \u003d DefaultStrategyLoader()"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_d8ddf7e0","line":28,"in_reply_to":"7a740942_adfa2b41","updated":"2015-12-14 10:37:32.000000000","message":"Done","commit_id":"6eded08d649be38fe7805cb2ab7c8cc7e467c690"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"cab8c9a756405f00f6f6ae777300fc725d067974","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    strategy_loader \u003d DefaultStrategyLoader()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_load_strategy_with_empty_model(self):"},{"line_number":33,"context_line":"        selected_strategy \u003d self.strategy_loader.load(None)"},{"line_number":34,"context_line":"        self.assertIsNotNone(selected_strategy,"},{"line_number":35,"context_line":"                             \u0027The default strategy not be must none\u0027)"},{"line_number":36,"context_line":"        self.assertIsInstance(selected_strategy, BaseStrategy)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_4dace79e","line":33,"updated":"2015-12-14 10:19:03.000000000","message":"IMHO, the None as parameter looks wrong. The None should be the default value of strategy_to_load to avoid having to write something like this.","commit_id":"6eded08d649be38fe7805cb2ab7c8cc7e467c690"},{"author":{"_account_id":16495,"name":"Jean-Emile DARTOIS","email":"jean-emile.dartois@b-com.com","username":"JeD"},"change_message_id":"b8113786e89dc50077fb18d173d49e9553fdd129","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    strategy_loader \u003d DefaultStrategyLoader()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_load_strategy_with_empty_model(self):"},{"line_number":33,"context_line":"        selected_strategy \u003d self.strategy_loader.load(None)"},{"line_number":34,"context_line":"        self.assertIsNotNone(selected_strategy,"},{"line_number":35,"context_line":"                             \u0027The default strategy not be must none\u0027)"},{"line_number":36,"context_line":"        self.assertIsInstance(selected_strategy, BaseStrategy)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_784f2392","line":33,"in_reply_to":"7a740942_4dace79e","updated":"2015-12-14 10:37:32.000000000","message":"It is more clear to explicitly set the strategy to load as None because this the aim of this test.","commit_id":"6eded08d649be38fe7805cb2ab7c8cc7e467c690"}]}
