)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5cdc64d301725dbb7123844ed4dce9158e84435c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    different format - with aggregated `info\u0027 data and iterator"},{"line_number":20,"context_line":"    (schema is objects.task.TASK_EXTENDED_RESULT_SCHEMA)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Also, JSON schema of `task results\u0027 output has changed to"},{"line_number":23,"context_line":"format produced by objects.Task.extend_results(), however"},{"line_number":24,"context_line":"backward compatibility with old format is provided."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":67,"id":"ba15a1d1_d91ffd59","line":22,"updated":"2015-09-14 08:20:18.000000000","message":"Please do NOT make everything in single patch. All these ALSO can be splited in separated patches. I really don\u0027t see ANY reason why they are not in separated patch.","commit_id":"e56b245754f6a0808510db7eca35a265c8df9551"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3a590794867427319f58348f7d9a8a7ca16776f9","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    different format - with aggregated `info\u0027 data and iterator"},{"line_number":20,"context_line":"    (schema is objects.task.TASK_EXTENDED_RESULT_SCHEMA)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Also, JSON schema of `task results\u0027 output has changed to"},{"line_number":23,"context_line":"format produced by objects.Task.extend_results(), however"},{"line_number":24,"context_line":"backward compatibility with old format is provided."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":67,"id":"ba15a1d1_31871b11","line":22,"in_reply_to":"ba15a1d1_d91ffd59","updated":"2015-09-14 16:20:28.000000000","message":"Done","commit_id":"e56b245754f6a0808510db7eca35a265c8df9551"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5cdc64d301725dbb7123844ed4dce9158e84435c","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Also, JSON schema of `task results\u0027 output has changed to"},{"line_number":23,"context_line":"format produced by objects.Task.extend_results(), however"},{"line_number":24,"context_line":"backward compatibility with old format is provided."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Also there are small improvements:"},{"line_number":27,"context_line":"  report.mako:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":67,"id":"ba15a1d1_393159a3","line":24,"updated":"2015-09-14 08:20:18.000000000","message":"I really do not understand why this change was done especially in this patch \"That just use new reports charts classes\". \n\nIt is HUGE change in interface and it was not aligned with anybody in team (and especially me). \n\nSuch kind of changes must go as a separated patch and separated discussion. \n\nAs well it is BAD change because we don\u0027t have clear view of how should or NEW task results should look like and changing it 10 times for end users while we are thinking is the really bad idea.","commit_id":"e56b245754f6a0808510db7eca35a265c8df9551"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3a590794867427319f58348f7d9a8a7ca16776f9","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Also, JSON schema of `task results\u0027 output has changed to"},{"line_number":23,"context_line":"format produced by objects.Task.extend_results(), however"},{"line_number":24,"context_line":"backward compatibility with old format is provided."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Also there are small improvements:"},{"line_number":27,"context_line":"  report.mako:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":67,"id":"ba15a1d1_b1732b4d","line":24,"in_reply_to":"ba15a1d1_393159a3","updated":"2015-09-14 16:20:28.000000000","message":"Done","commit_id":"e56b245754f6a0808510db7eca35a265c8df9551"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5cdc64d301725dbb7123844ed4dce9158e84435c","unresolved":false,"context_lines":[{"line_number":24,"context_line":"backward compatibility with old format is provided."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Also there are small improvements:"},{"line_number":27,"context_line":"  report.mako:"},{"line_number":28,"context_line":"    * failed_duration is always colored red"},{"line_number":29,"context_line":"    * code cleanup and refactoring"},{"line_number":30,"context_line":"  task.processing.charts:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":67,"id":"ba15a1d1_9920a54b","line":27,"updated":"2015-09-14 08:20:18.000000000","message":"Is it possible to make this as separated patch?","commit_id":"e56b245754f6a0808510db7eca35a265c8df9551"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3a590794867427319f58348f7d9a8a7ca16776f9","unresolved":false,"context_lines":[{"line_number":24,"context_line":"backward compatibility with old format is provided."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Also there are small improvements:"},{"line_number":27,"context_line":"  report.mako:"},{"line_number":28,"context_line":"    * failed_duration is always colored red"},{"line_number":29,"context_line":"    * code cleanup and refactoring"},{"line_number":30,"context_line":"  task.processing.charts:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":67,"id":"ba15a1d1_1199b76e","line":27,"in_reply_to":"ba15a1d1_9920a54b","updated":"2015-09-14 16:20:28.000000000","message":"Will done","commit_id":"e56b245754f6a0808510db7eca35a265c8df9551"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5cdc64d301725dbb7123844ed4dce9158e84435c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    * failed_duration is always colored red"},{"line_number":29,"context_line":"    * code cleanup and refactoring"},{"line_number":30,"context_line":"  task.processing.charts:"},{"line_number":31,"context_line":"    * do not show failed_duration on stacked area chart"},{"line_number":32,"context_line":"      if there was no errors at all"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Change-Id: I1d735c083154cc8ebae03838cdc16497707a2038"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":67,"id":"ba15a1d1_d9b37d09","line":31,"updated":"2015-09-14 08:20:18.000000000","message":"failed_druation is introduced with this patch. so not sure why it is in section of improvements","commit_id":"e56b245754f6a0808510db7eca35a265c8df9551"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3a590794867427319f58348f7d9a8a7ca16776f9","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    * failed_duration is always colored red"},{"line_number":29,"context_line":"    * code cleanup and refactoring"},{"line_number":30,"context_line":"  task.processing.charts:"},{"line_number":31,"context_line":"    * do not show failed_duration on stacked area chart"},{"line_number":32,"context_line":"      if there was no errors at all"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Change-Id: I1d735c083154cc8ebae03838cdc16497707a2038"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":67,"id":"ba15a1d1_91adc78a","line":31,"in_reply_to":"ba15a1d1_d9b37d09","updated":"2015-09-14 16:20:28.000000000","message":"Will done","commit_id":"e56b245754f6a0808510db7eca35a265c8df9551"}],"rally/benchmark/processing/README.rst":[{"author":{"_account_id":8840,"name":"Carlos L. Torres","email":"carlos.torres@rackspace.com","username":"carl6796"},"change_message_id":"c05c6c322ea7634b9dbfc9bbc044d2ba8fed726d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"-------"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This module is responsible for HTML report."},{"line_number":16,"context_line":"It iterates tasks results, process aech iteration and prepare data"},{"line_number":17,"context_line":"for report file."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Basic usage:"}],"source_content_type":"text/x-rst","patch_set":31,"id":"9a80dd14_4393235c","line":16,"updated":"2015-03-17 18:35:40.000000000","message":"Fix typo \u0027aech\u0027 -\u003e \u0027each\u0027","commit_id":"1f3b046e9785a46b9619f57e2228f32fff377cbd"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"706ff46a8fcead8645fce48b33b9e33b898c5d3f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"-------"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This module is responsible for HTML report."},{"line_number":16,"context_line":"It iterates tasks results, process aech iteration and prepare data"},{"line_number":17,"context_line":"for report file."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Basic usage:"}],"source_content_type":"text/x-rst","patch_set":31,"id":"9a80dd14_8b58b158","line":16,"in_reply_to":"9a80dd14_4393235c","updated":"2015-03-18 10:54:59.000000000","message":"Thanks!","commit_id":"1f3b046e9785a46b9619f57e2228f32fff377cbd"}],"rally/benchmark/processing/charts/histogram.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"a738a254f0989f26fbaa2618a6b8c252bbc97d08","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import math"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class Histogram:"},{"line_number":20,"context_line":"    \"\"\"Represents a Histogram chart.\"\"\""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_0eee998b","line":18,"updated":"2015-02-10 02:15:34.000000000","message":"So why we have seperated module for Histogram chart? \n\nWhat about having just 2 modules: \n\n  processing/charts.py\n  processing/plot.py \n\n\nplot.py should contain only maing function that initializes charts classes and iterates over them putting results. \n\ncharts.py should contain all classes for all charts that we have.","commit_id":"7eab761f29406a9925a3680b030999fd6bde8ab4"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ea4b12d1debc3515c424b1370de7a62bec0065f8","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import math"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class Histogram:"},{"line_number":20,"context_line":"    \"\"\"Represents a Histogram chart.\"\"\""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_81c40e93","line":18,"in_reply_to":"da86d52c_0eee998b","updated":"2015-02-10 09:33:36.000000000","message":"That is exactly what I want to do :)","commit_id":"7eab761f29406a9925a3680b030999fd6bde8ab4"}],"rally/benchmark/processing/plot.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"69f0775bb3b262f6cbc6da1d57dea459a7ebec2e","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self._data \u003d list(args)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def add(self, key, value):"},{"line_number":31,"context_line":"        self._data.append((key, value))"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def values(self):"},{"line_number":34,"context_line":"        return [{\"key\": key, \"values\": value} for key, value in self._data]"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_09458516","line":31,"updated":"2015-01-30 02:19:41.000000000","message":"such methods like \"add\" that is just poor version of something between dictionary and list makes code hard readable. You are adding useless abstractions and hiding logic somewhere deep which requires more resources of my brain to understand your code.","commit_id":"d018eeca3969fbc124f8af2fe142d99c1d606c53"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"69f0775bb3b262f6cbc6da1d57dea459a7ebec2e","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self._data.append((key, value))"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def values(self):"},{"line_number":34,"context_line":"        return [{\"key\": key, \"values\": value} for key, value in self._data]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class ParallelsChart(Chart):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_c9652db6","line":34,"updated":"2015-01-30 02:19:41.000000000","message":"This class is very poor implementation of dictolist \n\nOOP because of OOP is bad pattern.","commit_id":"d018eeca3969fbc124f8af2fe142d99c1d606c53"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"69f0775bb3b262f6cbc6da1d57dea459a7ebec2e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        return [{\"key\": key, \"values\": value} for key, value in self._data]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class ParallelsChart(Chart):"},{"line_number":38,"context_line":"    \"\"\"Compose data about parallel durations.\"\"\""},{"line_number":39,"context_line":"    def __init__(self, name, accuracy\u003d5, ratio\u003d100):"},{"line_number":40,"context_line":"        self._name \u003d name"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_8967b5b6","line":37,"updated":"2015-01-30 02:19:41.000000000","message":"So you are making here inheritance from Chart why? Just because it\u0027s OOP? \n\nOnly values() that is by design wrong (and it is only 1 line of code!) stay same. \n\nYou can\u0027t use even self._data *you are creating property with magic!","commit_id":"d018eeca3969fbc124f8af2fe142d99c1d606c53"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"69f0775bb3b262f6cbc6da1d57dea459a7ebec2e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self._tstamp_end \u003d 0"},{"line_number":45,"context_line":"        self._values \u003d []"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _timeline(self):"},{"line_number":48,"context_line":"        \"\"\"Calculate chart points for time axis."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        :returns: list of float seconds"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_49e69d16","line":47,"updated":"2015-01-30 02:19:41.000000000","message":"If you think that adding OOP makes code cleaner you are wrong. \n\nThe code was poor and spaghetti and it is still poor and spaghetti but with classes and more code now.","commit_id":"d018eeca3969fbc124f8af2fe142d99c1d606c53"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"c326f0de307ec29763be71da84914fd599d59dde","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from rally.ui import utils as ui_utils"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class Chart(list):"},{"line_number":27,"context_line":"    \"\"\"Generic chart.\"\"\""},{"line_number":28,"context_line":"    def chart_values(self):"},{"line_number":29,"context_line":"        return [{\"key\": key, \"values\": value} for key, value in self]"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_de68ae23","line":26,"updated":"2015-02-03 08:11:24.000000000","message":"This file was and still is mess of code macaroni. \n\nPutting code under classes and calling it OOP and saying about patterns doesn\u0027t make any sense.\n\nAnd I can\u0027t say that this code is better then code from left side. It\u0027s mess but with OOP and more lines of code. \n\n\nAs a POC I refactored as well this module. Goals were next:\n\n  1) simplify code \u0026 make good interfaces\n  2) make it simple to add new graphs\n  3) work  in plot() function with iterations_data generator (instad of whole list)\n  4) process all graphs in one iteration over array, with consuming const amount of memory\n\n\nTake a look here:\nhttps://review.openstack.org/#/c/152423/1/rally/benchmark/processing/plot2.py","commit_id":"37656ab7d69431867860c1859d07c14c58434f9e"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"53fb1c9b3b81d7ace6575f54c9108d714a07beed","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        \"\"\"Add duration to result data."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        :param start_timestamp: duration start timestamp, float"},{"line_number":45,"context_line":"        :param duration: duration in seconds, sloat"},{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        if not self._tstamp_start or timestamp \u003c self._tstamp_start:"},{"line_number":48,"context_line":"            self._tstamp_start \u003d timestamp"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_885b5c86","line":45,"updated":"2015-02-03 07:01:52.000000000","message":"s/sloat/int ?","commit_id":"37656ab7d69431867860c1859d07c14c58434f9e"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"75768e00fd3a59c9fc6eab51ceef1634209e9c49","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    meta \u003d scenario[\"meta\"]"},{"line_number":36,"context_line":"    kw \u003d scenario[\"key\"][\"kw\"]"},{"line_number":37,"context_line":"    main_area \u003d charts.Diagram(meta[\"iterations_count\"])"},{"line_number":38,"context_line":"    main_hist \u003d charts.DurationsHistogramChart("},{"line_number":39,"context_line":"        meta[\"iterations_passed\"],"},{"line_number":40,"context_line":"        meta[\"min_duration\"],"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_56fea7af","line":37,"updated":"2015-02-13 18:40:49.000000000","message":"Why not passing whole meta to all diagrams?","commit_id":"ec818faa66c8427bc4c70e19578dd2ea11ad27e6"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"a864bf0f03f01f1f793712eef229af0677e20b7c","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    meta \u003d scenario[\"meta\"]"},{"line_number":36,"context_line":"    kw \u003d scenario[\"key\"][\"kw\"]"},{"line_number":37,"context_line":"    main_area \u003d charts.Diagram(meta[\"iterations_count\"])"},{"line_number":38,"context_line":"    main_hist \u003d charts.DurationsHistogramChart("},{"line_number":39,"context_line":"        meta[\"iterations_passed\"],"},{"line_number":40,"context_line":"        meta[\"min_duration\"],"}],"source_content_type":"text/x-python","patch_set":17,"id":"da86d52c_26763407","line":37,"in_reply_to":"da86d52c_56fea7af","updated":"2015-02-16 12:39:36.000000000","message":"I try to make diagrams classes as universal as possible, not bound to specific data schema","commit_id":"ec818faa66c8427bc4c70e19578dd2ea11ad27e6"},{"author":{"_account_id":8840,"name":"Carlos L. Torres","email":"carlos.torres@rackspace.com","username":"carl6796"},"change_message_id":"c05c6c322ea7634b9dbfc9bbc044d2ba8fed726d","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            errors.append({\"iteration\": itr_idx,"},{"line_number":65,"context_line":"                           \"type\": cls, \"message\": msg, \"traceback\": trace})"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"            # NOTE(amaretskiy): Reset failed durations (no sense to display)"},{"line_number":68,"context_line":"            itr[\"duration\"] \u003d itr[\"idle_duration\"] \u003d 0"},{"line_number":69,"context_line":"        else:"},{"line_number":70,"context_line":"            atomic_stat.add_value(\"total\", itr[\"duration\"])"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_63f3c79f","line":67,"updated":"2015-03-17 18:35:40.000000000","message":"grammar nitpick. \n\nIf I understand correctly you mean something like this\n\nsense -\u003e reason","commit_id":"1f3b046e9785a46b9619f57e2228f32fff377cbd"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"706ff46a8fcead8645fce48b33b9e33b898c5d3f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            errors.append({\"iteration\": itr_idx,"},{"line_number":65,"context_line":"                           \"type\": cls, \"message\": msg, \"traceback\": trace})"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"            # NOTE(amaretskiy): Reset failed durations (no sense to display)"},{"line_number":68,"context_line":"            itr[\"duration\"] \u003d itr[\"idle_duration\"] \u003d 0"},{"line_number":69,"context_line":"        else:"},{"line_number":70,"context_line":"            atomic_stat.add_value(\"total\", itr[\"duration\"])"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_cb7b89bc","line":67,"in_reply_to":"9a80dd14_63f3c79f","updated":"2015-03-18 10:54:59.000000000","message":"Sure, thanks!","commit_id":"1f3b046e9785a46b9619f57e2228f32fff377cbd"},{"author":{"_account_id":8840,"name":"Carlos L. Torres","email":"carlos.torres@rackspace.com","username":"carl6796"},"change_message_id":"c05c6c322ea7634b9dbfc9bbc044d2ba8fed726d","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        main_area.add_value(\"duration\", itr[\"duration\"])"},{"line_number":75,"context_line":"        main_area.add_value(\"idle_duration\", itr[\"idle_duration\"])"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        for name, duration in itr[\"atomic_actions\"].items():"},{"line_number":78,"context_line":"            atomic_pie.add_value(name, duration)"},{"line_number":79,"context_line":"            atomic_stat.add_value(name, duration)"},{"line_number":80,"context_line":"            atomic_area.add_value(name, duration)"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_2f5c5119","line":77,"updated":"2015-03-17 18:35:40.000000000","message":"I believe for Python2to3 compatiblity, it\u0027s preferable to use\n\nsix.viewitems(itr[\"atomic_actions\"]) instead of itr[\"atomic_actions\"].items()\n\nhttp://pythonhosted.org/six/#six.viewitems","commit_id":"1f3b046e9785a46b9619f57e2228f32fff377cbd"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"706ff46a8fcead8645fce48b33b9e33b898c5d3f","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        main_area.add_value(\"duration\", itr[\"duration\"])"},{"line_number":75,"context_line":"        main_area.add_value(\"idle_duration\", itr[\"idle_duration\"])"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        for name, duration in itr[\"atomic_actions\"].items():"},{"line_number":78,"context_line":"            atomic_pie.add_value(name, duration)"},{"line_number":79,"context_line":"            atomic_stat.add_value(name, duration)"},{"line_number":80,"context_line":"            atomic_area.add_value(name, duration)"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_8e0d1f38","line":77,"in_reply_to":"9a80dd14_2f5c5119","updated":"2015-03-18 10:54:59.000000000","message":"I don\u0027t think so, because items() returns iterable in both versions, and we have for..in here, so this is 100% compatible","commit_id":"1f3b046e9785a46b9619f57e2228f32fff377cbd"}],"rally/cli/commands/task.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"afd03bfbdd555abb94b50d6012630be6ecb2fdad","unresolved":false,"context_lines":[{"line_number":523,"context_line":"                                result, objects.task.TASK_RESULT_SCHEMA)"},{"line_number":524,"context_line":"                elif uuidutils.is_uuid_like(task_file_or_uuid):"},{"line_number":525,"context_line":"                    data \u003d objects.Task.get(task_file_or_uuid).get_results()"},{"line_number":526,"context_line":"                    [jsonschema.validate(r, objects.task.TASK_DBRESULT_SCHEMA)"},{"line_number":527,"context_line":"                     for r in data]"},{"line_number":528,"context_line":"                else:"},{"line_number":529,"context_line":"                    print(_(\"ERROR: Invalid UUID or file name passed: %s\""}],"source_content_type":"text/x-python","patch_set":54,"id":"1a4dcd0f_5031ec58","line":526,"updated":"2015-08-12 11:50:47.000000000","message":"Why we need to validate results from database?","commit_id":"f330f07bb478877da10bdd0468af508a9589d400"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"753994024a2ee88ea4edee8fb75d4dbe8b1340cc","unresolved":false,"context_lines":[{"line_number":523,"context_line":"                                result, objects.task.TASK_RESULT_SCHEMA)"},{"line_number":524,"context_line":"                elif uuidutils.is_uuid_like(task_file_or_uuid):"},{"line_number":525,"context_line":"                    data \u003d objects.Task.get(task_file_or_uuid).get_results()"},{"line_number":526,"context_line":"                    [jsonschema.validate(r, objects.task.TASK_DBRESULT_SCHEMA)"},{"line_number":527,"context_line":"                     for r in data]"},{"line_number":528,"context_line":"                else:"},{"line_number":529,"context_line":"                    print(_(\"ERROR: Invalid UUID or file name passed: %s\""}],"source_content_type":"text/x-python","patch_set":54,"id":"fa1b9901_11867e13","line":526,"in_reply_to":"1a4dcd0f_5031ec58","updated":"2015-08-18 14:45:24.000000000","message":"Done","commit_id":"f330f07bb478877da10bdd0468af508a9589d400"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ee3c51bf1161220df8145425c3e9188d5259bddb","unresolved":false,"context_lines":[{"line_number":523,"context_line":"                                result, objects.task.TASK_RESULT_SCHEMA)"},{"line_number":524,"context_line":"                elif uuidutils.is_uuid_like(task_file_or_uuid):"},{"line_number":525,"context_line":"                    data \u003d objects.Task.get(task_file_or_uuid).get_results()"},{"line_number":526,"context_line":"                    [jsonschema.validate(r, objects.task.TASK_DBRESULT_SCHEMA)"},{"line_number":527,"context_line":"                     for r in data]"},{"line_number":528,"context_line":"                else:"},{"line_number":529,"context_line":"                    print(_(\"ERROR: Invalid UUID or file name passed: %s\""}],"source_content_type":"text/x-python","patch_set":54,"id":"fa1b9901_011e37ba","line":526,"in_reply_to":"1a4dcd0f_5031ec58","updated":"2015-08-18 11:23:57.000000000","message":"Need to discuss that. Since we are on a way to refactor database schema, this validation can be reasonable to avoid strange errors when data from database can not be processed. In other point, this validation can be removed - that is a topic to discuss","commit_id":"f330f07bb478877da10bdd0468af508a9589d400"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"afd03bfbdd555abb94b50d6012630be6ecb2fdad","unresolved":false,"context_lines":[{"line_number":529,"context_line":"                    print(_(\"ERROR: Invalid UUID or file name passed: %s\""},{"line_number":530,"context_line":"                            ) % task_file_or_uuid, file\u003dsys.stderr)"},{"line_number":531,"context_line":"                    return 1"},{"line_number":532,"context_line":"                results.append((task_file_or_uuid, data))"},{"line_number":533,"context_line":"            except jsonschema.ValidationError as e:"},{"line_number":534,"context_line":"                print(_(\"ERROR: Invalid data schema in task or file: %s\")"},{"line_number":535,"context_line":"                      % task_file_or_uuid, file\u003dsys.stderr)"}],"source_content_type":"text/x-python","patch_set":54,"id":"1a4dcd0f_7090a8ed","line":532,"updated":"2015-08-12 11:50:47.000000000","message":"Why we need to store task_file_or_uuid? I can\u0027t find a place where it is used.","commit_id":"f330f07bb478877da10bdd0468af508a9589d400"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"159c07574bad5db26dd4bc0ed8eaa57d50fe9542","unresolved":false,"context_lines":[{"line_number":529,"context_line":"                    print(_(\"ERROR: Invalid UUID or file name passed: %s\""},{"line_number":530,"context_line":"                            ) % task_file_or_uuid, file\u003dsys.stderr)"},{"line_number":531,"context_line":"                    return 1"},{"line_number":532,"context_line":"                results.append((task_file_or_uuid, data))"},{"line_number":533,"context_line":"            except jsonschema.ValidationError as e:"},{"line_number":534,"context_line":"                print(_(\"ERROR: Invalid data schema in task or file: %s\")"},{"line_number":535,"context_line":"                      % task_file_or_uuid, file\u003dsys.stderr)"}],"source_content_type":"text/x-python","patch_set":54,"id":"1a4dcd0f_9bb3154d","line":532,"in_reply_to":"1a4dcd0f_7090a8ed","updated":"2015-08-12 11:55:52.000000000","message":"https://review.openstack.org/#/c/146814/54/rally/ui/templates/task/report.mako,cm\n\n{{benchmark.identifier}}\n\nWe need this to see what task is related to specific benchmark","commit_id":"f330f07bb478877da10bdd0468af508a9589d400"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"75a630333b06b667e778bec4bc9f4d5363a992c9","unresolved":false,"context_lines":[{"line_number":523,"context_line":"                                result, objects.task.TASK_RESULT_SCHEMA)"},{"line_number":524,"context_line":"                elif uuidutils.is_uuid_like(task_file_or_uuid):"},{"line_number":525,"context_line":"                    data \u003d objects.Task.get(task_file_or_uuid).get_results()"},{"line_number":526,"context_line":"                    [jsonschema.validate(r, objects.task.TASK_DBRESULT_SCHEMA)"},{"line_number":527,"context_line":"                     for r in data]"},{"line_number":528,"context_line":"                else:"},{"line_number":529,"context_line":"                    print(_(\"ERROR: Invalid UUID or file name passed: %s\""}],"source_content_type":"text/x-python","patch_set":56,"id":"1a4dcd0f_bda3c0ff","line":526,"updated":"2015-08-16 10:20:16.000000000","message":"a question from patch-set #54 :\n\n\u003eWhy we need to validate results from database?","commit_id":"f23dfa4cae367568033d6a6c7369f4c0631e096c"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"599410dc0760ca835d0b5ecc983e584d62611898","unresolved":false,"context_lines":[{"line_number":506,"context_line":"        \"\"\"Generate report file for specified task."},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"        :param task_id: UUID, task identifier"},{"line_number":509,"context_line":"        :param tasks: list, UUIDs od tasks or pathes files with tasks results"},{"line_number":510,"context_line":"        :param out: str, output file name"},{"line_number":511,"context_line":"        :param open_it: bool, whether to open output file in web browser"},{"line_number":512,"context_line":"        :param out_format: output format (junit or html)"}],"source_content_type":"text/x-python","patch_set":65,"id":"da20952f_a9edc48f","line":509,"updated":"2015-09-11 13:24:47.000000000","message":"typo - \u0027od\u0027 -\u003e\u0027of\u0027","commit_id":"81e274591ded6f200b6960224c747fd98246fa04"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"599410dc0760ca835d0b5ecc983e584d62611898","unresolved":false,"context_lines":[{"line_number":511,"context_line":"        :param open_it: bool, whether to open output file in web browser"},{"line_number":512,"context_line":"        :param out_format: output format (junit or html)"},{"line_number":513,"context_line":"        \"\"\""},{"line_number":514,"context_line":"        tasks \u003d tasks if isinstance(tasks, list) else [tasks]"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        results \u003d []"},{"line_number":517,"context_line":"        message \u003d []"}],"source_content_type":"text/x-python","patch_set":65,"id":"da20952f_ccf8194d","line":514,"updated":"2015-09-11 13:24:47.000000000","message":"in params wrote that  :param tasks: list, But else condition confusing me","commit_id":"81e274591ded6f200b6960224c747fd98246fa04"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"282cef6553a1eb2bd95ac076a3544465e56472ed","unresolved":false,"context_lines":[{"line_number":511,"context_line":"        :param open_it: bool, whether to open output file in web browser"},{"line_number":512,"context_line":"        :param out_format: output format (junit or html)"},{"line_number":513,"context_line":"        \"\"\""},{"line_number":514,"context_line":"        tasks \u003d tasks if isinstance(tasks, list) else [tasks]"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        results \u003d []"},{"line_number":517,"context_line":"        message \u003d []"}],"source_content_type":"text/x-python","patch_set":65,"id":"da20952f_8f3c4ee2","line":514,"in_reply_to":"da20952f_34423b3f","updated":"2015-09-11 13:59:05.000000000","message":"Docstring has error: `task_id\u0027 is missed, but `tasks\u0027 can be a single task_id instead","commit_id":"81e274591ded6f200b6960224c747fd98246fa04"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3e977a5b116d82aa03cf0b8c9b4bb905cebcb494","unresolved":false,"context_lines":[{"line_number":511,"context_line":"        :param open_it: bool, whether to open output file in web browser"},{"line_number":512,"context_line":"        :param out_format: output format (junit or html)"},{"line_number":513,"context_line":"        \"\"\""},{"line_number":514,"context_line":"        tasks \u003d tasks if isinstance(tasks, list) else [tasks]"},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        results \u003d []"},{"line_number":517,"context_line":"        message \u003d []"}],"source_content_type":"text/x-python","patch_set":65,"id":"da20952f_34423b3f","line":514,"in_reply_to":"da20952f_ccf8194d","updated":"2015-09-11 13:29:52.000000000","message":"About `else\u0027 - imagine that `tasks\u0027 is empty list - in old code this will cause [[]]","commit_id":"81e274591ded6f200b6960224c747fd98246fa04"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"599410dc0760ca835d0b5ecc983e584d62611898","unresolved":false,"context_lines":[{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        results \u003d []"},{"line_number":517,"context_line":"        message \u003d []"},{"line_number":518,"context_line":"        for task_file_or_uuid in tasks:"},{"line_number":519,"context_line":"            if os.path.exists(os.path.expanduser(task_file_or_uuid)):"},{"line_number":520,"context_line":"                with open(os.path.expanduser(task_file_or_uuid),"},{"line_number":521,"context_line":"                          \"r\") as inp_js:"}],"source_content_type":"text/x-python","patch_set":65,"id":"da20952f_cc8fb9cb","line":518,"updated":"2015-09-11 13:24:47.000000000","message":"task_path_file_or_uuid but as you want. As I understand from doc there could be pathes to fles with tasks but not the file straight.","commit_id":"81e274591ded6f200b6960224c747fd98246fa04"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3314961c414f8b6f9af66c7cc0e310f3106d043d","unresolved":false,"context_lines":[{"line_number":515,"context_line":""},{"line_number":516,"context_line":"        results \u003d []"},{"line_number":517,"context_line":"        message \u003d []"},{"line_number":518,"context_line":"        for task_file_or_uuid in tasks:"},{"line_number":519,"context_line":"            if os.path.exists(os.path.expanduser(task_file_or_uuid)):"},{"line_number":520,"context_line":"                with open(os.path.expanduser(task_file_or_uuid),"},{"line_number":521,"context_line":"                          \"r\") as inp_js:"}],"source_content_type":"text/x-python","patch_set":65,"id":"da20952f_8fa68e0d","line":518,"in_reply_to":"da20952f_cc8fb9cb","updated":"2015-09-11 13:51:07.000000000","message":"Yes, file path or its uuid, however this is legacy name","commit_id":"81e274591ded6f200b6960224c747fd98246fa04"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"599410dc0760ca835d0b5ecc983e584d62611898","unresolved":false,"context_lines":[{"line_number":584,"context_line":"                else:"},{"line_number":585,"context_line":"                    outcome \u003d junit.JUnit.SUCCESS"},{"line_number":586,"context_line":"                test_suite.add_test(result[\"key\"][\"name\"],"},{"line_number":587,"context_line":"                                    result[\"info\"][\"full_duration\"],"},{"line_number":588,"context_line":"                                    outcome, message)"},{"line_number":589,"context_line":"            with open(output_file, \"w+\") as f:"},{"line_number":590,"context_line":"                f.write(test_suite.to_xml())"}],"source_content_type":"text/x-python","patch_set":65,"id":"da20952f_e0ee4121","line":587,"updated":"2015-09-11 13:24:47.000000000","message":"Isn\u0027t this fail in case: line 518 exacuted only once, line 524 gives ValidationError and in line 535 obsolete fill without \"info\"?","commit_id":"81e274591ded6f200b6960224c747fd98246fa04"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3314961c414f8b6f9af66c7cc0e310f3106d043d","unresolved":false,"context_lines":[{"line_number":584,"context_line":"                else:"},{"line_number":585,"context_line":"                    outcome \u003d junit.JUnit.SUCCESS"},{"line_number":586,"context_line":"                test_suite.add_test(result[\"key\"][\"name\"],"},{"line_number":587,"context_line":"                                    result[\"info\"][\"full_duration\"],"},{"line_number":588,"context_line":"                                    outcome, message)"},{"line_number":589,"context_line":"            with open(output_file, \"w+\") as f:"},{"line_number":590,"context_line":"                f.write(test_suite.to_xml())"}],"source_content_type":"text/x-python","patch_set":65,"id":"da20952f_cfd80656","line":587,"in_reply_to":"da20952f_e0ee4121","updated":"2015-09-11 13:51:07.000000000","message":"No, \"info\" will present is any case since result will be extended in L548-549","commit_id":"81e274591ded6f200b6960224c747fd98246fa04"}],"rally/cmd/commands/task.py":[{"author":{"_account_id":8840,"name":"Carlos L. Torres","email":"carlos.torres@rackspace.com","username":"carl6796"},"change_message_id":"c05c6c322ea7634b9dbfc9bbc044d2ba8fed726d","unresolved":false,"context_lines":[{"line_number":338,"context_line":""},{"line_number":339,"context_line":"            atomic_stat \u003d charts.StatsTable(size\u003dlen(raw), cols\u003dtable_cols)"},{"line_number":340,"context_line":"            for itr in raw:"},{"line_number":341,"context_line":"                for action, duration in itr[\"atomic_actions\"].items():"},{"line_number":342,"context_line":"                    atomic_stat.add_value(action, duration)"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"            table \u003d atomic_stat.render()"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_cf701576","line":341,"updated":"2015-03-17 18:35:40.000000000","message":"Again, same suggestion I made earlier.\n\nhttp://pythonhosted.org/six/#six.viewitems","commit_id":"1f3b046e9785a46b9619f57e2228f32fff377cbd"},{"author":{"_account_id":8840,"name":"Carlos L. Torres","email":"carlos.torres@rackspace.com","username":"carl6796"},"change_message_id":"f8cbafb27dce6e31508c41908b4e8fffb1daa330","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from rally import api"},{"line_number":29,"context_line":"from rally.benchmark.processing import charts"},{"line_number":30,"context_line":"from rally.benchmark.processing import plot"},{"line_number":31,"context_line":"from rally.benchmark.processing import utils as proc_utils"},{"line_number":32,"context_line":"from rally.cmd import cliutils"},{"line_number":33,"context_line":"from rally.cmd import envutils"},{"line_number":34,"context_line":"from rally.common import fileutils"}],"source_content_type":"text/x-python","patch_set":36,"id":"fa963961_4927a012","line":31,"updated":"2015-03-27 19:10:04.000000000","message":"This is just a suggestion on the name \u0027proc_utils\u0027.\n\nWhen reading it, first thought that came to mind was \u0027processor utils\u0027, instead of \u0027processing utils\u0027, but this might be just me.\n\nI recommend perhaps renaming it, just to \u0027stats\u0027, as in statistics. Also is shorter.\n\nThe usage then will be,\n\nstats.mean(...)\nstats.percentile(...)\netc...","commit_id":"3a259db23661dc7f5a81a95c54f77b54d887683c"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ec9125aa8d05aec1b7fc86a91f768051640a51fe","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from rally import api"},{"line_number":29,"context_line":"from rally.benchmark.processing import charts"},{"line_number":30,"context_line":"from rally.benchmark.processing import plot"},{"line_number":31,"context_line":"from rally.benchmark.processing import utils as proc_utils"},{"line_number":32,"context_line":"from rally.cmd import cliutils"},{"line_number":33,"context_line":"from rally.cmd import envutils"},{"line_number":34,"context_line":"from rally.common import fileutils"}],"source_content_type":"text/x-python","patch_set":36,"id":"baa041b7_facb091d","line":31,"in_reply_to":"fa963961_4927a012","updated":"2015-04-01 15:51:37.000000000","message":"I don\u0027t think so:\n\n1) this naming approach is common for project.\n\nIf you run grep for project code, you will find many \u0027import as\u0027 with confusing names, like zutils, kutils - this looks normal within module scope\n\n2) this will be confuzing to rename some module/package completely (utils -\u003e stats)\n\n3) there is no `processor\u0027 term in the project. But processing is a well-known part of the project","commit_id":"3a259db23661dc7f5a81a95c54f77b54d887683c"}],"rally/task/processing/plot.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"4a098ed92536f31d089a068846687b37d816bb5a","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"def plot(tasks_results):"},{"line_number":95,"context_line":"    # NOTE(amaretskiy): Transform generic results into extended"},{"line_number":96,"context_line":"    #   results, so they can be processed by charts classes"},{"line_number":97,"context_line":"    extended_results \u003d []"},{"line_number":98,"context_line":"    for result in tasks_results:"},{"line_number":99,"context_line":"        generic \u003d {"}],"source_content_type":"text/x-python","patch_set":68,"id":"ba15a1d1_d26c8b9e","line":96,"updated":"2015-09-15 04:20:59.000000000","message":"Actually this method should get already transformed results. \nBut it\u0027s not a big deal, I will refactor this when I finish new DB schema.","commit_id":"0d44772a942cf39a22ad5dfa35ddd82b451dea7a"}],"rally/ui/templates/task/report.mako":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"c622923a47d5c50726b795e69cc7da9b01c44ad8","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        }"},{"line_number":240,"context_line":"        Charts.stack(\"#atomic-stack\","},{"line_number":241,"context_line":"                     $scope.scenario.atomic.iter,"},{"line_number":242,"context_line":"                     {xLabel: \"Iteration (order number of method\u0027s call)\","},{"line_number":243,"context_line":"                      yFormat: \",.2f\","},{"line_number":244,"context_line":"                      controls: true});"},{"line_number":245,"context_line":"        Charts.pie(\"#atomic-pie\", $scope.scenario.atomic.pie);"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"1a930d6b_fb3e3fd9","line":242,"updated":"2015-01-23 19:10:40.000000000","message":"let\u0027s replace this with: \n\n  Iteration number (order of scenario execution)\n\n\nmake the same message on Overview page","commit_id":"691f712cf5a4fd9eb6e76fe300883755bc882bc1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"cfb3f976bee52b74ae3d7724ecc0918db419a1b0","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        }"},{"line_number":240,"context_line":"        Charts.stack(\"#atomic-stack\","},{"line_number":241,"context_line":"                     $scope.scenario.atomic.iter,"},{"line_number":242,"context_line":"                     {xLabel: \"Iteration (order number of method\u0027s call)\","},{"line_number":243,"context_line":"                      yFormat: \",.2f\","},{"line_number":244,"context_line":"                      controls: true});"},{"line_number":245,"context_line":"        Charts.pie(\"#atomic-pie\", $scope.scenario.atomic.pie);"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"1a930d6b_338b6c69","line":242,"in_reply_to":"1a930d6b_fb3e3fd9","updated":"2015-01-26 10:56:06.000000000","message":"Done","commit_id":"691f712cf5a4fd9eb6e76fe300883755bc882bc1"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"c622923a47d5c50726b795e69cc7da9b01c44ad8","unresolved":false,"context_lines":[{"line_number":574,"context_line":"            \u003csvg id\u003d\"total-stack\"\u003e\u003c/svg\u003e"},{"line_number":575,"context_line":"          \u003c/div\u003e"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"          \u003ch2\u003eParallel iterations\u003c/h2\u003e"},{"line_number":578,"context_line":"          \u003cdiv class\u003d\"chart low\"\u003e"},{"line_number":579,"context_line":"            \u003csvg id\u003d\"parallel-stack\"\u003e\u003c/svg\u003e"},{"line_number":580,"context_line":"          \u003c/div\u003e"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"1a930d6b_9e7609a3","line":577,"updated":"2015-01-23 19:10:40.000000000","message":"I asked to remove this title (cause it is useless and makes it harder to analyze how parallel iterations are related to data)","commit_id":"691f712cf5a4fd9eb6e76fe300883755bc882bc1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"cfb3f976bee52b74ae3d7724ecc0918db419a1b0","unresolved":false,"context_lines":[{"line_number":574,"context_line":"            \u003csvg id\u003d\"total-stack\"\u003e\u003c/svg\u003e"},{"line_number":575,"context_line":"          \u003c/div\u003e"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"          \u003ch2\u003eParallel iterations\u003c/h2\u003e"},{"line_number":578,"context_line":"          \u003cdiv class\u003d\"chart low\"\u003e"},{"line_number":579,"context_line":"            \u003csvg id\u003d\"parallel-stack\"\u003e\u003c/svg\u003e"},{"line_number":580,"context_line":"          \u003c/div\u003e"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"1a930d6b_53eb9812","line":577,"in_reply_to":"1a930d6b_9e7609a3","updated":"2015-01-26 10:56:06.000000000","message":"Done","commit_id":"691f712cf5a4fd9eb6e76fe300883755bc882bc1"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"b3ec5abd77878f78c6f9296f23004473794058c6","unresolved":false,"context_lines":[{"line_number":511,"context_line":""},{"line_number":512,"context_line":"      \u003cdiv ng-show\u003d\"view.is_benchmark\"\u003e"},{"line_number":513,"context_line":"        \u003ch1\u003e{{benchmark.cls}}.\u003cwbr\u003e{{benchmark.name}} ({{benchmark.full_duration | number:3}}s)\u003c/h1\u003e"},{"line_number":514,"context_line":"        \u003cp style\u003d\"position:relative; top:-20px; color:#999\"\u003e{{benchmark.identifier}}\u003c/p\u003e"},{"line_number":515,"context_line":"        \u003cul class\u003d\"tabs\"\u003e"},{"line_number":516,"context_line":"          \u003cli ng-repeat\u003d\"t in tabs\""},{"line_number":517,"context_line":"              ng-show\u003d\"t.isVisible()\""}],"source_content_type":"application/octet-stream","patch_set":54,"id":"1a4dcd0f_82acf79f","line":514,"updated":"2015-08-12 17:54:32.000000000","message":"it would be nice to write that this is task uuid","commit_id":"f330f07bb478877da10bdd0468af508a9589d400"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"00813a695fbb4cfc8f1f3db8db5323d57f387e04","unresolved":false,"context_lines":[{"line_number":511,"context_line":""},{"line_number":512,"context_line":"      \u003cdiv ng-show\u003d\"view.is_benchmark\"\u003e"},{"line_number":513,"context_line":"        \u003ch1\u003e{{benchmark.cls}}.\u003cwbr\u003e{{benchmark.name}} ({{benchmark.full_duration | number:3}}s)\u003c/h1\u003e"},{"line_number":514,"context_line":"        \u003cp style\u003d\"position:relative; top:-20px; color:#999\"\u003e{{benchmark.identifier}}\u003c/p\u003e"},{"line_number":515,"context_line":"        \u003cul class\u003d\"tabs\"\u003e"},{"line_number":516,"context_line":"          \u003cli ng-repeat\u003d\"t in tabs\""},{"line_number":517,"context_line":"              ng-show\u003d\"t.isVisible()\""}],"source_content_type":"application/octet-stream","patch_set":54,"id":"1a4dcd0f_71d865ef","line":514,"in_reply_to":"1a4dcd0f_82acf79f","updated":"2015-08-13 15:28:13.000000000","message":"Mentioned in commit message","commit_id":"f330f07bb478877da10bdd0468af508a9589d400"}],"tests/unit/benchmark/processing/test_charts.py":[{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"29ca13c320b9df87acff0e730c62d6ccb556f38c","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.assertEqual((220, 5.0), chart[\"foo\"])"},{"line_number":76,"context_line":"        self.assertEqual((130, 5.0), chart[\"bar\"])"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def test_render(self):"},{"line_number":79,"context_line":"        chart \u003d charts.AvgChart()"},{"line_number":80,"context_line":"        chart.update({\"foo\": (220, 5.0), \"bar\": (130, 5.0)})"},{"line_number":81,"context_line":"        result \u003d chart.render()"}],"source_content_type":"text/x-python","patch_set":23,"id":"ba7be1f8_2805197a","line":78,"updated":"2015-02-23 13:22:24.000000000","message":"also need to test render empty chart","commit_id":"37a90d876bb6b4bb6d837277ec62c7a1f90f0f00"}],"tests/unit/benchmark/processing/test_utils.py":[{"author":{"_account_id":8840,"name":"Carlos L. Torres","email":"carlos.torres@rackspace.com","username":"carl6796"},"change_message_id":"c05c6c322ea7634b9dbfc9bbc044d2ba8fed726d","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tests.unit import test"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class MathTestCase(test.TestCase):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def test_percentile(self):"},{"line_number":24,"context_line":"        lst \u003d list(range(1, 101))"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_af5cc17e","side":"PARENT","line":21,"updated":"2015-03-17 18:35:40.000000000","message":"If average, and percentiles were copied to the charts.py file, why wasn\u0027t this file updated to test the functions from charts.py?","commit_id":"f28fbca5c0cff696135582a2d9e3cf04661c83bc"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"706ff46a8fcead8645fce48b33b9e33b898c5d3f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tests.unit import test"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class MathTestCase(test.TestCase):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def test_percentile(self):"},{"line_number":24,"context_line":"        lst \u003d list(range(1, 101))"}],"source_content_type":"text/x-python","patch_set":31,"id":"9a80dd14_4ef6c7fa","side":"PARENT","line":21,"in_reply_to":"9a80dd14_af5cc17e","updated":"2015-03-18 10:54:59.000000000","message":"There is a test_charts.py that has all required tests","commit_id":"f28fbca5c0cff696135582a2d9e3cf04661c83bc"}],"tests/unit/task/processing/test_plot.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3a391ad05507414067777506c7dd2507ec07ba53","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":42,"id":"ba3cc151_08773903","updated":"2015-07-06 16:55:34.000000000","message":"These tests are not updated, sorry. Will do this ASAP","commit_id":"56a490d9c131258f9822b8997a69f71d4095ea63"}]}
