)]}'
{"rally/task/processing/charts.py":[{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"2491b75a6faaeb95c924a3f22d63983839a32d39","unresolved":false,"context_lines":[{"line_number":421,"context_line":"            duration \u003d action[\"finished_at\"] - action[\"started_at\"]"},{"line_number":422,"context_line":"            p_atomics[action[\"name\"]][\"duration\"] +\u003d duration"},{"line_number":423,"context_line":"            p_atomics[action[\"name\"]][\"count\"] +\u003d 1"},{"line_number":424,"context_line":"            if action[\"children\"]:"},{"line_number":425,"context_line":"                self._merge_atomic_actions("},{"line_number":426,"context_line":"                    action[\"children\"],"},{"line_number":427,"context_line":"                    root\u003dp_atomics[action[\"name\"]][\"children\"],"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f436f4f_b9342c94","line":424,"updated":"2017-08-15 06:04:15.000000000","message":"I prefer to move line #411 to this line, like\nif action[\"children\"] and depth \u003c\u003d self._DEPTH_TO_PROCESSING:\n\nAlso, we would go deep into 3rd lay ?","commit_id":"dac5c9811786b6f395956838686a5942d3919bf7"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"2491b75a6faaeb95c924a3f22d63983839a32d39","unresolved":false,"context_lines":[{"line_number":452,"context_line":""},{"line_number":453,"context_line":"    def _mark_the_last_as_an_error(self, atomic_actions):"},{"line_number":454,"context_line":"        if atomic_actions:"},{"line_number":455,"context_line":"            the_last \u003d atomic_actions[next(reversed(atomic_actions))]"},{"line_number":456,"context_line":"            the_last[\"error\"] \u003d True"},{"line_number":457,"context_line":"            if the_last[\"children\"]:"},{"line_number":458,"context_line":"                self._mark_the_last_as_an_error(the_last[\"children\"])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f436f4f_59a420a6","line":455,"updated":"2017-08-15 06:04:15.000000000","message":"?  please add some comment for this line. :)","commit_id":"dac5c9811786b6f395956838686a5942d3919bf7"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"83e4348cae3e529281ae0262ac46afa1d07aa267","unresolved":false,"context_lines":[{"line_number":455,"context_line":"            #   uses a doubly linked list for the dictionary items and"},{"line_number":456,"context_line":"            #   implements __reversed__(), what is why such implementation"},{"line_number":457,"context_line":"            #   gives you O(1) access to the desired element."},{"line_number":458,"context_line":"            the_last \u003d atomic_actions[next(reversed(atomic_actions))]"},{"line_number":459,"context_line":"            the_last[\"error\"] \u003d True"},{"line_number":460,"context_line":"            if the_last[\"children\"]:"},{"line_number":461,"context_line":"                # NOTE(andreykurilin): not all of children of the last"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f436f4f_fa0cdd94","line":458,"updated":"2017-08-15 12:08:38.000000000","message":"COOL, smart way.\nAlso, i feel this would be easier understood.\nthe_last \u003d atomic_actions[atomic_actions.keys()[-1]]","commit_id":"6c64182ebb407d10ff48b7273250f0011f0c431a"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"188ea84d6277a25a776bb741a65925e0c155f75b","unresolved":false,"context_lines":[{"line_number":404,"context_line":"            \"children\": collections.OrderedDict()"},{"line_number":405,"context_line":"        }"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"    def _merge_atomic_actions(self, atomic_actions, root\u003dNone, depth\u003d0):"},{"line_number":408,"context_line":"        p_atomics \u003d collections.OrderedDict() if root is None else root"},{"line_number":409,"context_line":"        for action in atomic_actions:"},{"line_number":410,"context_line":"            if action[\"name\"] not in p_atomics:"},{"line_number":411,"context_line":"                p_atomics[action[\"name\"]] \u003d {"},{"line_number":412,"context_line":"                    \"duration\": 0,"},{"line_number":413,"context_line":"                    \"count\": 0,"},{"line_number":414,"context_line":"                    \"children\": collections.OrderedDict()}"},{"line_number":415,"context_line":"            duration \u003d action[\"finished_at\"] - action[\"started_at\"]"},{"line_number":416,"context_line":"            p_atomics[action[\"name\"]][\"duration\"] +\u003d duration"},{"line_number":417,"context_line":"            p_atomics[action[\"name\"]][\"count\"] +\u003d 1"},{"line_number":418,"context_line":"            if action[\"children\"] and depth \u003c self._DEPTH_OF_PROCESSING:"},{"line_number":419,"context_line":"                self._merge_atomic_actions("},{"line_number":420,"context_line":"                    action[\"children\"],"},{"line_number":421,"context_line":"                    root\u003dp_atomics[action[\"name\"]][\"children\"],"},{"line_number":422,"context_line":"                    depth\u003ddepth + 1)"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"        return p_atomics"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    def _process_data(self, raw_data, root\u003dNone):"},{"line_number":427,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f436f4f_b94d113c","line":424,"range":{"start_line":407,"start_character":0,"end_line":424,"end_character":24},"updated":"2017-08-17 02:35:45.000000000","message":"We need to merge atomic at several places in report eg:main table, some charts. I want we should merge atomic in once instead merging them in every classes.","commit_id":"aa19fefa56ad231b87aa3153d5e299f648e6cc99"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"debada69e51864e1b3f41521c811ee4c4258b78a","unresolved":false,"context_lines":[{"line_number":404,"context_line":"            \"children\": collections.OrderedDict()"},{"line_number":405,"context_line":"        }"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"    def _merge_atomic_actions(self, atomic_actions, root\u003dNone, depth\u003d0):"},{"line_number":408,"context_line":"        p_atomics \u003d collections.OrderedDict() if root is None else root"},{"line_number":409,"context_line":"        for action in atomic_actions:"},{"line_number":410,"context_line":"            if action[\"name\"] not in p_atomics:"},{"line_number":411,"context_line":"                p_atomics[action[\"name\"]] \u003d {"},{"line_number":412,"context_line":"                    \"duration\": 0,"},{"line_number":413,"context_line":"                    \"count\": 0,"},{"line_number":414,"context_line":"                    \"children\": collections.OrderedDict()}"},{"line_number":415,"context_line":"            duration \u003d action[\"finished_at\"] - action[\"started_at\"]"},{"line_number":416,"context_line":"            p_atomics[action[\"name\"]][\"duration\"] +\u003d duration"},{"line_number":417,"context_line":"            p_atomics[action[\"name\"]][\"count\"] +\u003d 1"},{"line_number":418,"context_line":"            if action[\"children\"] and depth \u003c self._DEPTH_OF_PROCESSING:"},{"line_number":419,"context_line":"                self._merge_atomic_actions("},{"line_number":420,"context_line":"                    action[\"children\"],"},{"line_number":421,"context_line":"                    root\u003dp_atomics[action[\"name\"]][\"children\"],"},{"line_number":422,"context_line":"                    depth\u003ddepth + 1)"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"        return p_atomics"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    def _process_data(self, raw_data, root\u003dNone):"},{"line_number":427,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f287b81_156cd334","line":424,"range":{"start_line":407,"start_character":0,"end_line":424,"end_character":24},"in_reply_to":"9f436f4f_b94d113c","updated":"2017-08-22 13:34:02.000000000","message":"you are right and it worked like this previously, BUT we had an issue of duplicating data. MainStatsTable depended on an a dict with atomics which has the similar data as MainStatsTable produces itself (min duration).\n\nThis patch is a start of making MainStatsTable as a main source for info about atomics (about merged atomic names too)","commit_id":"aa19fefa56ad231b87aa3153d5e299f648e6cc99"}]}
