)]}'
{"ceilometer/compute/pollsters/cpu.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"611d53fda2fc37da4e69449f2d1ef552da74dcf1","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"CONF \u003d cfg.CONF"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class CPUPollster(pollsters.BaseComputePollster):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_ef075a7f","line":28,"updated":"2015-05-13 21:45:14.000000000","message":"you should also add:\n\nCONF.import_opt(\u0027libvirt_type\u0027, \u0027ceilometer.compute.virt.libvirt.inspector\u0027)\n\nso we ensure the option is loaded.","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":14049,"name":"Karolyn Chambers","email":"Karolyn.Chambers@target.com","username":"karolyn-chambers"},"change_message_id":"f5a307908907ea91c8f2aafe99e301f53323433c","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"CONF \u003d cfg.CONF"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class CPUPollster(pollsters.BaseComputePollster):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_c72caa4c","line":28,"in_reply_to":"9a0c5dc1_ef075a7f","updated":"2015-05-15 04:57:22.000000000","message":"Done","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"611d53fda2fc37da4e69449f2d1ef552da74dcf1","unresolved":false,"context_lines":[{"line_number":31,"context_line":"class CPUPollster(pollsters.BaseComputePollster):"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":34,"context_line":"        if CONF.hypervisor_inspector \u003d\u003d \u0027libvirt\u0027 \\"},{"line_number":35,"context_line":"           and CONF.libvirt_type in [\u0027kvm\u0027, \u0027qemu\u0027]:"},{"line_number":36,"context_line":"            return"},{"line_number":37,"context_line":"        for instance in resources:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_8fcfbe7e","line":34,"updated":"2015-05-13 21:45:14.000000000","message":"this should use be wrapped in brackets rather than \\ for multiple lines","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":14049,"name":"Karolyn Chambers","email":"Karolyn.Chambers@target.com","username":"karolyn-chambers"},"change_message_id":"f5a307908907ea91c8f2aafe99e301f53323433c","unresolved":false,"context_lines":[{"line_number":31,"context_line":"class CPUPollster(pollsters.BaseComputePollster):"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":34,"context_line":"        if CONF.hypervisor_inspector \u003d\u003d \u0027libvirt\u0027 \\"},{"line_number":35,"context_line":"           and CONF.libvirt_type in [\u0027kvm\u0027, \u0027qemu\u0027]:"},{"line_number":36,"context_line":"            return"},{"line_number":37,"context_line":"        for instance in resources:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_a731aea4","line":34,"in_reply_to":"9a0c5dc1_8fcfbe7e","updated":"2015-05-15 04:57:22.000000000","message":"Done","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"441ecc7f36b545055dbf083b3171c6791d2dfd5f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"class CPUPollster(pollsters.BaseComputePollster):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":35,"context_line":"        if ((CONF.hypervisor_inspector \u003d\u003d \u0027libvirt\u0027 and"},{"line_number":36,"context_line":"             CONF.libvirt_type in [\u0027kvm\u0027, \u0027qemu\u0027])):"},{"line_number":37,"context_line":"            return"},{"line_number":38,"context_line":"        for instance in resources:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_73da9019","line":35,"updated":"2015-09-20 15:24:59.000000000","message":"I think it reasonable to add a log record about skipping cpu polling with kvm and qemu.","commit_id":"17d5208fa9d3268a9a35de03e62ca5f19588736e"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"d03d8c27a4161f44beffd699f879246e49374bf4","unresolved":false,"context_lines":[{"line_number":32,"context_line":"class CPUPollster(pollsters.BaseComputePollster):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":35,"context_line":"        if ((CONF.hypervisor_inspector \u003d\u003d \u0027libvirt\u0027 and"},{"line_number":36,"context_line":"             CONF.libvirt_type in [\u0027kvm\u0027, \u0027qemu\u0027])):"},{"line_number":37,"context_line":"            return"},{"line_number":38,"context_line":"        for instance in resources:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_682a8f2e","line":35,"in_reply_to":"ba15a1d1_73da9019","updated":"2015-09-21 12:15:54.000000000","message":"Done","commit_id":"17d5208fa9d3268a9a35de03e62ca5f19588736e"}],"ceilometer/compute/pollsters/cpu_demand.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"611d53fda2fc37da4e69449f2d1ef552da74dcf1","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from ceilometer.compute import pollsters"},{"line_number":20,"context_line":"from ceilometer.compute.pollsters import util"},{"line_number":21,"context_line":"from ceilometer.i18n import _"},{"line_number":22,"context_line":"from ceilometer.openstack.common import log"},{"line_number":23,"context_line":"from ceilometer import sample"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_0f2cee00","line":21,"updated":"2015-05-13 21:45:14.000000000","message":"s/_/_LE, _LW/","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":14049,"name":"Karolyn Chambers","email":"Karolyn.Chambers@target.com","username":"karolyn-chambers"},"change_message_id":"f5a307908907ea91c8f2aafe99e301f53323433c","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from ceilometer.compute import pollsters"},{"line_number":20,"context_line":"from ceilometer.compute.pollsters import util"},{"line_number":21,"context_line":"from ceilometer.i18n import _"},{"line_number":22,"context_line":"from ceilometer.openstack.common import log"},{"line_number":23,"context_line":"from ceilometer import sample"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_87991271","line":21,"in_reply_to":"9a0c5dc1_0f2cee00","updated":"2015-05-15 04:57:22.000000000","message":"Done","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"611d53fda2fc37da4e69449f2d1ef552da74dcf1","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    CACHE_KEY_SCHEDSTATS \u003d \u0027schedstats\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self, **kwargs):"},{"line_number":40,"context_line":"        super(_Base, self).__init__(**kwargs)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def setup_environment(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_6f692a25","line":39,"updated":"2015-05-13 21:45:14.000000000","message":"we don\u0027t need this.","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":14049,"name":"Karolyn Chambers","email":"Karolyn.Chambers@target.com","username":"karolyn-chambers"},"change_message_id":"f5a307908907ea91c8f2aafe99e301f53323433c","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    CACHE_KEY_SCHEDSTATS \u003d \u0027schedstats\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self, **kwargs):"},{"line_number":40,"context_line":"        super(_Base, self).__init__(**kwargs)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def setup_environment(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_672bb631","line":39,"in_reply_to":"9a0c5dc1_6f692a25","updated":"2015-05-15 04:57:22.000000000","message":"Done","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"611d53fda2fc37da4e69449f2d1ef552da74dcf1","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":74,"context_line":"        if CONF.hypervisor_inspector !\u003d \u0027libvirt\u0027 or \\"},{"line_number":75,"context_line":"            (CONF.hypervisor_inspector \u003d\u003d \u0027libvirt\u0027 and"},{"line_number":76,"context_line":"             CONF.libvirt_type not in [\u0027kvm\u0027, \u0027qemu\u0027]):"},{"line_number":77,"context_line":"            return"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_0b786129","line":75,"updated":"2015-05-13 21:45:14.000000000","message":"if (CONF.hypervisor_inspector !\u003d \u0027libvirt or\n    CONF.libvirt_type not in [\u0027kvm\u0027, \u0027qemu\u0027]):","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":14049,"name":"Karolyn Chambers","email":"Karolyn.Chambers@target.com","username":"karolyn-chambers"},"change_message_id":"f5a307908907ea91c8f2aafe99e301f53323433c","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":74,"context_line":"        if CONF.hypervisor_inspector !\u003d \u0027libvirt\u0027 or \\"},{"line_number":75,"context_line":"            (CONF.hypervisor_inspector \u003d\u003d \u0027libvirt\u0027 and"},{"line_number":76,"context_line":"             CONF.libvirt_type not in [\u0027kvm\u0027, \u0027qemu\u0027]):"},{"line_number":77,"context_line":"            return"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_07f2c2d2","line":75,"in_reply_to":"9a0c5dc1_0b786129","updated":"2015-05-15 04:57:22.000000000","message":"Done","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"611d53fda2fc37da4e69449f2d1ef552da74dcf1","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                prev \u003d self.cache.get(key)"},{"line_number":89,"context_line":"                timestamp \u003d timeutils.parse_isotime(timeutils.isotime())"},{"line_number":90,"context_line":"                self.cache[key] \u003d (_sum, timestamp)"},{"line_number":91,"context_line":"                if prev:"},{"line_number":92,"context_line":"                    prev_sum \u003d prev[0]"},{"line_number":93,"context_line":"                    prev_timestamp \u003d prev[1]"},{"line_number":94,"context_line":"                    time_delta \u003d timeutils.delta_seconds("}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_4bdd39df","line":91,"updated":"2015-05-13 21:45:14.000000000","message":"per_vcpu_sum_exec_runtime and per_vcpu_wait_sum seem like useful values themselves no? i\u0027m wondering if the % calculation should be done by transformer (same as how we calculate cpu_util)","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"7925adb14195022374e2715d164d2023a5943025","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                prev \u003d self.cache.get(key)"},{"line_number":89,"context_line":"                timestamp \u003d timeutils.parse_isotime(timeutils.isotime())"},{"line_number":90,"context_line":"                self.cache[key] \u003d (_sum, timestamp)"},{"line_number":91,"context_line":"                if prev:"},{"line_number":92,"context_line":"                    prev_sum \u003d prev[0]"},{"line_number":93,"context_line":"                    prev_timestamp \u003d prev[1]"},{"line_number":94,"context_line":"                    time_delta \u003d timeutils.delta_seconds("}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_5d3d6629","line":91,"in_reply_to":"9a0c5dc1_4bdd39df","updated":"2015-09-06 07:51:50.000000000","message":"This will involve in creating two more pollsters called PerVCpuUsedPollster and PerVCpuReadyPollster and  doing refactoring to our _get_samples method so that these two will override the original _get_samples to produce the per-vcpu samples. pipline.yaml will also get changed to collect them and send them to the rate_of_change transformer.\n\nI suggest to mark this as \"good to have\" and consider performing this change as part of a 2nd commit iteration.","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"611d53fda2fc37da4e69449f2d1ef552da74dcf1","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                        _sum - prev_sum"},{"line_number":98,"context_line":"                        if prev_sum \u003c\u003d _sum else 0.0)"},{"line_number":99,"context_line":"                    if vcpus \u003c\u003d 0:"},{"line_number":100,"context_line":"                        LOG.error(_(\u0027no vcpus for instance: %s\u0027),"},{"line_number":101,"context_line":"                                   (instance.id,))"},{"line_number":102,"context_line":"                        continue"},{"line_number":103,"context_line":"                    rate_of_change \u003d float(("}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_cb05a97a","line":100,"updated":"2015-05-13 21:45:14.000000000","message":"_LE()\n\nalso do this check as soon as possible so we don\u0027t have to process stuff for no reason.","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"7925adb14195022374e2715d164d2023a5943025","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                        _sum - prev_sum"},{"line_number":98,"context_line":"                        if prev_sum \u003c\u003d _sum else 0.0)"},{"line_number":99,"context_line":"                    if vcpus \u003c\u003d 0:"},{"line_number":100,"context_line":"                        LOG.error(_(\u0027no vcpus for instance: %s\u0027),"},{"line_number":101,"context_line":"                                   (instance.id,))"},{"line_number":102,"context_line":"                        continue"},{"line_number":103,"context_line":"                    rate_of_change \u003d float(("}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_dd309658","line":100,"in_reply_to":"9a0c5dc1_cb05a97a","updated":"2015-09-06 07:51:50.000000000","message":"_LE() - Done.\n\nIn any case, we issue, at the low level, ps command - to retrieve process/thread information.\n\nif vcpus \u003c\u003d 0  is just a sanity check. I never encountered zero/negative vcpus during the tests I did. Since in theory it should never happen, I suggest to keep it as is.","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"611d53fda2fc37da4e69449f2d1ef552da74dcf1","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                    )"},{"line_number":113,"context_line":"                    yield s"},{"line_number":114,"context_line":"                else:"},{"line_number":115,"context_line":"                    LOG.warn(_(\u0027ignoring sum with no predecessor: %s\u0027),"},{"line_number":116,"context_line":"                             (_sum,))"},{"line_number":117,"context_line":"                    continue"},{"line_number":118,"context_line":"            except Exception as err:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_ef7cfaec","line":115,"updated":"2015-05-13 21:45:14.000000000","message":"use LOG.warning... .and _LW()","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":14049,"name":"Karolyn Chambers","email":"Karolyn.Chambers@target.com","username":"karolyn-chambers"},"change_message_id":"f5a307908907ea91c8f2aafe99e301f53323433c","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                    )"},{"line_number":113,"context_line":"                    yield s"},{"line_number":114,"context_line":"                else:"},{"line_number":115,"context_line":"                    LOG.warn(_(\u0027ignoring sum with no predecessor: %s\u0027),"},{"line_number":116,"context_line":"                             (_sum,))"},{"line_number":117,"context_line":"                    continue"},{"line_number":118,"context_line":"            except Exception as err:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_07ae4285","line":115,"in_reply_to":"9a0c5dc1_ef7cfaec","updated":"2015-05-15 04:57:22.000000000","message":"Done","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"611d53fda2fc37da4e69449f2d1ef552da74dcf1","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                             (_sum,))"},{"line_number":117,"context_line":"                    continue"},{"line_number":118,"context_line":"            except Exception as err:"},{"line_number":119,"context_line":"                LOG.warning(_(\u0027Ignoring instance %(name)s: %(error)s\u0027),"},{"line_number":120,"context_line":"                            {\u0027name\u0027: instance_name, \u0027error\u0027: err})"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_8f27be11","line":119,"updated":"2015-05-13 21:45:14.000000000","message":"_LW()","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":14049,"name":"Karolyn Chambers","email":"Karolyn.Chambers@target.com","username":"karolyn-chambers"},"change_message_id":"f5a307908907ea91c8f2aafe99e301f53323433c","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                             (_sum,))"},{"line_number":117,"context_line":"                    continue"},{"line_number":118,"context_line":"            except Exception as err:"},{"line_number":119,"context_line":"                LOG.warning(_(\u0027Ignoring instance %(name)s: %(error)s\u0027),"},{"line_number":120,"context_line":"                            {\u0027name\u0027: instance_name, \u0027error\u0027: err})"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_c7b6eadb","line":119,"in_reply_to":"9a0c5dc1_8f27be11","updated":"2015-05-15 04:57:22.000000000","message":"Done","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"611d53fda2fc37da4e69449f2d1ef552da74dcf1","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            _sum +\u003d value"},{"line_number":131,"context_line":"            _items +\u003d 1"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        return \u0027cpu_used\u0027, _sum, _items"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class CPUReadyPollster(_Base):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_2b6fa593","line":133,"updated":"2015-05-13 21:45:14.000000000","message":"if you\u0027re just using this to _items as a count you can just put len(c_data.per_vcpu_sum_exec_runtime) rather than incrementing during loop\n\nyou can also use https://docs.python.org/2/library/math.html#math.fsum to figure out sum\n\ni\u0027m not quite sure we need this method to be honest","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":14049,"name":"Karolyn Chambers","email":"Karolyn.Chambers@target.com","username":"karolyn-chambers"},"change_message_id":"f5a307908907ea91c8f2aafe99e301f53323433c","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            _sum +\u003d value"},{"line_number":131,"context_line":"            _items +\u003d 1"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        return \u0027cpu_used\u0027, _sum, _items"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class CPUReadyPollster(_Base):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_079402e0","line":133,"in_reply_to":"9a0c5dc1_2b6fa593","updated":"2015-05-15 04:57:22.000000000","message":"Done","commit_id":"c1abfdf164bfd0125f6d30183abacc39927ebe66"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"b4a272fdcb1d4c4690ada452deb7320be4515f6e","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                    timeutils.isotime())"},{"line_number":93,"context_line":"                self.cache[key] \u003d (_sum, timestamp)"},{"line_number":94,"context_line":"                if prev:"},{"line_number":95,"context_line":"                    prev_sum \u003d prev[0]"},{"line_number":96,"context_line":"                    prev_timestamp \u003d prev[1]"},{"line_number":97,"context_line":"                    time_delta \u003d timeutils.delta_seconds("},{"line_number":98,"context_line":"                        prev_timestamp, timestamp)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_292772cb","line":95,"updated":"2015-10-07 14:26:13.000000000","message":"i don\u0027t quite understand. why are we calculating rate of change here but also in pipeline?","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"ac20eb4e9656d998e577b663a0bd183ae59dd2ba","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                    timeutils.isotime())"},{"line_number":93,"context_line":"                self.cache[key] \u003d (_sum, timestamp)"},{"line_number":94,"context_line":"                if prev:"},{"line_number":95,"context_line":"                    prev_sum \u003d prev[0]"},{"line_number":96,"context_line":"                    prev_timestamp \u003d prev[1]"},{"line_number":97,"context_line":"                    time_delta \u003d timeutils.delta_seconds("},{"line_number":98,"context_line":"                        prev_timestamp, timestamp)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_6558f78a","line":95,"in_reply_to":"7a2fa921_292772cb","updated":"2015-10-08 14:50:53.000000000","message":"We use the arithmetic transformer (in cpu_demand_sink in pipeline) that uses rate of change of cpu_used and cpu_ready (that we calculate by ourselves in our pollster) to produce the correct cpu_util. I could not find a way to use rate_of_change transformer for cpu_used and cpu_ready followed by a call to arithmetic transformer.","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"b4a272fdcb1d4c4690ada452deb7320be4515f6e","unresolved":false,"context_lines":[{"line_number":126,"context_line":"class CPUUsedPollster(_Base):"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @staticmethod"},{"line_number":129,"context_line":"    def _get_samples(instance, c_data):"},{"line_number":130,"context_line":"        _sum \u003d 0.0"},{"line_number":131,"context_line":"        vcpus \u003d len(c_data.per_vcpu_sum_exec_runtime)"},{"line_number":132,"context_line":"        timestamp \u003d None"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_e94f3abb","line":129,"updated":"2015-10-07 14:26:13.000000000","message":"could probably combine this and below into one and pass in attributes per_vcpu_sum_exec_runtime or  per_vcpu_wait_sum","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"ac20eb4e9656d998e577b663a0bd183ae59dd2ba","unresolved":false,"context_lines":[{"line_number":126,"context_line":"class CPUUsedPollster(_Base):"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    @staticmethod"},{"line_number":129,"context_line":"    def _get_samples(instance, c_data):"},{"line_number":130,"context_line":"        _sum \u003d 0.0"},{"line_number":131,"context_line":"        vcpus \u003d len(c_data.per_vcpu_sum_exec_runtime)"},{"line_number":132,"context_line":"        timestamp \u003d None"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_65cf9729","line":129,"in_reply_to":"7a2fa921_e94f3abb","updated":"2015-10-08 14:50:53.000000000","message":"We use a similar approach as other pollsters do (such as pollsters/disk.py). I would suggest leaving it as is to maintain consistency.","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"b4a272fdcb1d4c4690ada452deb7320be4515f6e","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        timestamp \u003d None"},{"line_number":133,"context_line":"        for _t, value in six.iteritems(c_data.per_vcpu_sum_exec_runtime):"},{"line_number":134,"context_line":"            # it must be available here"},{"line_number":135,"context_line":"            timestamp \u003d c_data.per_vcpu_timestamp[_t]"},{"line_number":136,"context_line":"            _sum +\u003d value"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        return \u0027cpu_used\u0027, _sum, vcpus, timestamp"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_c916fea6","line":135,"updated":"2015-10-07 14:26:13.000000000","message":"what\u0027s the point of looping through timestamp if only last one is taken?","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"ac20eb4e9656d998e577b663a0bd183ae59dd2ba","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        timestamp \u003d None"},{"line_number":133,"context_line":"        for _t, value in six.iteritems(c_data.per_vcpu_sum_exec_runtime):"},{"line_number":134,"context_line":"            # it must be available here"},{"line_number":135,"context_line":"            timestamp \u003d c_data.per_vcpu_timestamp[_t]"},{"line_number":136,"context_line":"            _sum +\u003d value"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        return \u0027cpu_used\u0027, _sum, vcpus, timestamp"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_e5e3a7a2","line":135,"in_reply_to":"7a2fa921_c916fea6","updated":"2015-10-08 14:50:53.000000000","message":"You are right. I moved timestamp from _get_samples to the above get_samples method retrieving single timestamp per the whole VM.","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"b4a272fdcb1d4c4690ada452deb7320be4515f6e","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        timestamp \u003d None"},{"line_number":148,"context_line":"        for _t, value in six.iteritems(c_data.per_vcpu_wait_sum):"},{"line_number":149,"context_line":"            # it must be available here"},{"line_number":150,"context_line":"            timestamp \u003d c_data.per_vcpu_timestamp[_t]"},{"line_number":151,"context_line":"            _sum +\u003d value"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        return \u0027cpu_ready\u0027, _sum, vcpus, timestamp"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_8987a6d6","line":150,"updated":"2015-10-07 14:26:13.000000000","message":"same","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"ac20eb4e9656d998e577b663a0bd183ae59dd2ba","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        timestamp \u003d None"},{"line_number":148,"context_line":"        for _t, value in six.iteritems(c_data.per_vcpu_wait_sum):"},{"line_number":149,"context_line":"            # it must be available here"},{"line_number":150,"context_line":"            timestamp \u003d c_data.per_vcpu_timestamp[_t]"},{"line_number":151,"context_line":"            _sum +\u003d value"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        return \u0027cpu_ready\u0027, _sum, vcpus, timestamp"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_258c3fd9","line":150,"in_reply_to":"7a2fa921_8987a6d6","updated":"2015-10-08 14:50:53.000000000","message":"Same as above.","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"96a23dea1f98bb5114be17222947b791d82e2c83","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        for instance in resources:"},{"line_number":160,"context_line":"            LOG.debug(\u0027checking instance %s\u0027, instance.id)"},{"line_number":161,"context_line":"            try:"},{"line_number":162,"context_line":"                cpu_info \u003d self.inspector.inspect_cpus(instance, True)"},{"line_number":163,"context_line":"                LOG.debug(\"CPUTIME USAGE: %(instance)s %(time)d\","},{"line_number":164,"context_line":"                          {\u0027instance\u0027: instance,"},{"line_number":165,"context_line":"                           \u0027time\u0027: cpu_info.time})"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_61cf1457","line":162,"updated":"2015-11-09 13:32:47.000000000","message":"i don\u0027t think this makes sense logically. above, we check if this is libvirt and in kvm,qemu. but if we jump into inspect_cpus, since time\u003dTrue, it will call the inspect_cpus from super... but inspect_cpus in super has check to skip if libvirt and kvm, qemu... so basically this will always skip.","commit_id":"21275d64677659cc49e509ac75475f9eb59eef94"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"f01169bd4d20a4b96675bdd583ad0e2511a12811","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        for instance in resources:"},{"line_number":160,"context_line":"            LOG.debug(\u0027checking instance %s\u0027, instance.id)"},{"line_number":161,"context_line":"            try:"},{"line_number":162,"context_line":"                cpu_info \u003d self.inspector.inspect_cpus(instance, True)"},{"line_number":163,"context_line":"                LOG.debug(\"CPUTIME USAGE: %(instance)s %(time)d\","},{"line_number":164,"context_line":"                          {\u0027instance\u0027: instance,"},{"line_number":165,"context_line":"                           \u0027time\u0027: cpu_info.time})"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_8d93074f","line":162,"in_reply_to":"da85f559_61cf1457","updated":"2015-11-11 12:10:36.000000000","message":"inspect_cpus in super is left untouched; we did not modify it. It does not check whether to skip. This properly works on my local environment; I can see cpu time of instances.","commit_id":"21275d64677659cc49e509ac75475f9eb59eef94"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e895f877a77e8cc73bdb6f6dd5576624cee02964","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        for instance in resources:"},{"line_number":160,"context_line":"            LOG.debug(\u0027checking instance %s\u0027, instance.id)"},{"line_number":161,"context_line":"            try:"},{"line_number":162,"context_line":"                cpu_info \u003d self.inspector.inspect_cpus(instance, True)"},{"line_number":163,"context_line":"                LOG.debug(\"CPUTIME USAGE: %(instance)s %(time)d\","},{"line_number":164,"context_line":"                          {\u0027instance\u0027: instance,"},{"line_number":165,"context_line":"                           \u0027time\u0027: cpu_info.time})"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_9985435b","line":162,"in_reply_to":"da85f559_8d93074f","updated":"2015-11-11 21:08:04.000000000","message":"ok. i misread the super call.","commit_id":"21275d64677659cc49e509ac75475f9eb59eef94"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"96a23dea1f98bb5114be17222947b791d82e2c83","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                           \u0027time\u0027: cpu_info.time})"},{"line_number":166,"context_line":"                yield util.make_sample_from_instance("},{"line_number":167,"context_line":"                    instance,"},{"line_number":168,"context_line":"                    name\u003d\u0027cpu_used_time\u0027,"},{"line_number":169,"context_line":"                    type\u003dsample.TYPE_CUMULATIVE,"},{"line_number":170,"context_line":"                    unit\u003d\u0027ns\u0027,"},{"line_number":171,"context_line":"                    volume\u003dcpu_info.time"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_61c2b487","line":168,"updated":"2015-11-09 13:32:47.000000000","message":"why do we set this as cpu_used_time if we are going to convert it to cpu in pipeline?\n\nto follow up. how is this pollster any different from CPUPollster?","commit_id":"21275d64677659cc49e509ac75475f9eb59eef94"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e895f877a77e8cc73bdb6f6dd5576624cee02964","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                           \u0027time\u0027: cpu_info.time})"},{"line_number":166,"context_line":"                yield util.make_sample_from_instance("},{"line_number":167,"context_line":"                    instance,"},{"line_number":168,"context_line":"                    name\u003d\u0027cpu_used_time\u0027,"},{"line_number":169,"context_line":"                    type\u003dsample.TYPE_CUMULATIVE,"},{"line_number":170,"context_line":"                    unit\u003d\u0027ns\u0027,"},{"line_number":171,"context_line":"                    volume\u003dcpu_info.time"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_597b5b7b","line":168,"in_reply_to":"da85f559_4d10bfa8","updated":"2015-11-11 21:08:04.000000000","message":"got it.","commit_id":"21275d64677659cc49e509ac75475f9eb59eef94"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"f01169bd4d20a4b96675bdd583ad0e2511a12811","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                           \u0027time\u0027: cpu_info.time})"},{"line_number":166,"context_line":"                yield util.make_sample_from_instance("},{"line_number":167,"context_line":"                    instance,"},{"line_number":168,"context_line":"                    name\u003d\u0027cpu_used_time\u0027,"},{"line_number":169,"context_line":"                    type\u003dsample.TYPE_CUMULATIVE,"},{"line_number":170,"context_line":"                    unit\u003d\u0027ns\u0027,"},{"line_number":171,"context_line":"                    volume\u003dcpu_info.time"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_4d10bfa8","line":168,"in_reply_to":"da85f559_61c2b487","updated":"2015-11-11 12:10:36.000000000","message":"We set this as cpu_used_time because we can not set it with cpu, this is the difference between us and CPUPollster. If we used CPUPollster as is (emitting cpu samples) then the pipeline would send these samples into cpu_sink where we do not want this to happen since cpu_sink uses \u0027old\u0027 cpu_util calculations. Thus we use CPUTimePollster emit cpu_used_time for the pipeline to send it to cpu_used_time sink to just rename to cpu and emit these to database.","commit_id":"21275d64677659cc49e509ac75475f9eb59eef94"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bd8a4e7334233cc2b2bdbc54ab075708bdd8cf14","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        \"\"\"Return one or more Sample.\"\"\""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":77,"context_line":"        if ((CONF.hypervisor_inspector !\u003d \u0027libvirt\u0027 or"},{"line_number":78,"context_line":"             CONF.libvirt_type not in [\u0027kvm\u0027, \u0027qemu\u0027])):"},{"line_number":79,"context_line":"            return"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_d9bd0b03","line":77,"updated":"2015-11-11 21:21:27.000000000","message":"we can remove one level of parantheses","commit_id":"65c5da470595b7f76e9b0bfb5fb54c3c36ca9215"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"7a24e774382b31e5a7c44f4a51bbc61f8351d5b1","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        \"\"\"Return one or more Sample.\"\"\""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":77,"context_line":"        if ((CONF.hypervisor_inspector !\u003d \u0027libvirt\u0027 or"},{"line_number":78,"context_line":"             CONF.libvirt_type not in [\u0027kvm\u0027, \u0027qemu\u0027])):"},{"line_number":79,"context_line":"            return"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_c1a41c4c","line":77,"in_reply_to":"da85f559_d9bd0b03","updated":"2015-11-12 10:24:24.000000000","message":"Done","commit_id":"65c5da470595b7f76e9b0bfb5fb54c3c36ca9215"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bd8a4e7334233cc2b2bdbc54ab075708bdd8cf14","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                        if prev_sum \u003c\u003d _sum else 0.0)"},{"line_number":105,"context_line":"                    if vcpus \u003c\u003d 0:"},{"line_number":106,"context_line":"                        LOG.error(_LE("},{"line_number":107,"context_line":"                            \u0027no vcpus for instance: %s\u0027), (instance.id,))"},{"line_number":108,"context_line":"                        continue"},{"line_number":109,"context_line":"                    rate_of_change \u003d float(("},{"line_number":110,"context_line":"                        (sum_delta / vcpus) / (time_delta*1000))"}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_1c9aa1b9","line":107,"updated":"2015-11-11 21:21:27.000000000","message":"this seems quite late to check vcpus, this whole if condition can be skipped... can we skip the cache above if we have no vcpus?","commit_id":"65c5da470595b7f76e9b0bfb5fb54c3c36ca9215"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"7a24e774382b31e5a7c44f4a51bbc61f8351d5b1","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                        if prev_sum \u003c\u003d _sum else 0.0)"},{"line_number":105,"context_line":"                    if vcpus \u003c\u003d 0:"},{"line_number":106,"context_line":"                        LOG.error(_LE("},{"line_number":107,"context_line":"                            \u0027no vcpus for instance: %s\u0027), (instance.id,))"},{"line_number":108,"context_line":"                        continue"},{"line_number":109,"context_line":"                    rate_of_change \u003d float(("},{"line_number":110,"context_line":"                        (sum_delta / vcpus) / (time_delta*1000))"}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_f0148be9","line":107,"in_reply_to":"da85f559_1c9aa1b9","updated":"2015-11-12 10:24:24.000000000","message":"You are right. It belongs to low level inspector path. Next patch is modified by moving this check down to inspector (testing thread_infos and raising virt_inspector.NoDataException if empty).","commit_id":"65c5da470595b7f76e9b0bfb5fb54c3c36ca9215"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bd8a4e7334233cc2b2bdbc54ab075708bdd8cf14","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                    yield s"},{"line_number":120,"context_line":"                else:"},{"line_number":121,"context_line":"                    LOG.warning(_LW("},{"line_number":122,"context_line":"                        \u0027ignoring sum with no predecessor: %s\u0027), (_sum,))"},{"line_number":123,"context_line":"                    continue"},{"line_number":124,"context_line":"            except virt_inspector.InspectorException as err:"},{"line_number":125,"context_line":"                LOG.debug(\u0027Exception while getting samples %s\u0027, err)"}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_3c120558","line":122,"updated":"2015-11-11 21:21:27.000000000","message":"don\u0027t need to wrap as tuple.","commit_id":"65c5da470595b7f76e9b0bfb5fb54c3c36ca9215"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"7a24e774382b31e5a7c44f4a51bbc61f8351d5b1","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                    yield s"},{"line_number":120,"context_line":"                else:"},{"line_number":121,"context_line":"                    LOG.warning(_LW("},{"line_number":122,"context_line":"                        \u0027ignoring sum with no predecessor: %s\u0027), (_sum,))"},{"line_number":123,"context_line":"                    continue"},{"line_number":124,"context_line":"            except virt_inspector.InspectorException as err:"},{"line_number":125,"context_line":"                LOG.debug(\u0027Exception while getting samples %s\u0027, err)"}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_e1b36096","line":122,"in_reply_to":"da85f559_3c120558","updated":"2015-11-12 10:24:24.000000000","message":"Done","commit_id":"65c5da470595b7f76e9b0bfb5fb54c3c36ca9215"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bd8a4e7334233cc2b2bdbc54ab075708bdd8cf14","unresolved":false,"context_lines":[{"line_number":155,"context_line":"class CPUTimePollster(pollsters.BaseComputePollster):"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":158,"context_line":"        if ((CONF.hypervisor_inspector !\u003d \u0027libvirt\u0027 or"},{"line_number":159,"context_line":"             CONF.libvirt_type not in [\u0027kvm\u0027, \u0027qemu\u0027])):"},{"line_number":160,"context_line":"            return"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_f9e1ef2a","line":158,"updated":"2015-11-11 21:21:27.000000000","message":"we can remove one level of parantheses","commit_id":"65c5da470595b7f76e9b0bfb5fb54c3c36ca9215"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"7a24e774382b31e5a7c44f4a51bbc61f8351d5b1","unresolved":false,"context_lines":[{"line_number":155,"context_line":"class CPUTimePollster(pollsters.BaseComputePollster):"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def get_samples(self, manager, cache, resources):"},{"line_number":158,"context_line":"        if ((CONF.hypervisor_inspector !\u003d \u0027libvirt\u0027 or"},{"line_number":159,"context_line":"             CONF.libvirt_type not in [\u0027kvm\u0027, \u0027qemu\u0027])):"},{"line_number":160,"context_line":"            return"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_41b82c75","line":158,"in_reply_to":"da85f559_f9e1ef2a","updated":"2015-11-12 10:24:24.000000000","message":"Done","commit_id":"65c5da470595b7f76e9b0bfb5fb54c3c36ca9215"}],"ceilometer/compute/virt/libvirt/inspector.py":[{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"441ecc7f36b545055dbf083b3171c6791d2dfd5f","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        \"\"\""},{"line_number":253,"context_line":"        instance_name \u003d util.instance_name(instance)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        (out, __) \u003d utils.execute(\u0027ps\u0027, \u0027ax\u0027, \u0027-o\u0027, \u0027pid,cmd\u0027,"},{"line_number":256,"context_line":"                                  \u0027--no-headers\u0027)"},{"line_number":257,"context_line":"        lines \u003d out.split(\"\\n\")"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_5e9e7364","line":255,"updated":"2015-09-20 15:24:59.000000000","message":"Suggestion: could we use \u0027ps -o pid,cmd -C \u003ccmd\u003e\u0027 instead of finding command in list?","commit_id":"17d5208fa9d3268a9a35de03e62ca5f19588736e"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"d03d8c27a4161f44beffd699f879246e49374bf4","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        \"\"\""},{"line_number":253,"context_line":"        instance_name \u003d util.instance_name(instance)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        (out, __) \u003d utils.execute(\u0027ps\u0027, \u0027ax\u0027, \u0027-o\u0027, \u0027pid,cmd\u0027,"},{"line_number":256,"context_line":"                                  \u0027--no-headers\u0027)"},{"line_number":257,"context_line":"        lines \u003d out.split(\"\\n\")"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_e8453fb3","line":255,"in_reply_to":"ba15a1d1_5e9e7364","updated":"2015-09-21 12:15:54.000000000","message":"I suggest to leave the command as is","commit_id":"17d5208fa9d3268a9a35de03e62ca5f19588736e"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"441ecc7f36b545055dbf083b3171c6791d2dfd5f","unresolved":false,"context_lines":[{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        for line in lines:"},{"line_number":260,"context_line":"            line \u003d line.strip()"},{"line_number":261,"context_line":"            if not line or line \u003d\u003d \u0027\u0027:"},{"line_number":262,"context_line":"                continue"},{"line_number":263,"context_line":"            parts \u003d line.split()"},{"line_number":264,"context_line":"            pid \u003d int(parts.pop(0))"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_332ad8e8","line":261,"updated":"2015-09-20 15:24:59.000000000","message":"In this expression `if not line or line \u003d\u003d \u0027\u0027`,\n`line \u003d\u003d \u0027\u0027` is redundant. It is checked via `not line`","commit_id":"17d5208fa9d3268a9a35de03e62ca5f19588736e"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"d03d8c27a4161f44beffd699f879246e49374bf4","unresolved":false,"context_lines":[{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        for line in lines:"},{"line_number":260,"context_line":"            line \u003d line.strip()"},{"line_number":261,"context_line":"            if not line or line \u003d\u003d \u0027\u0027:"},{"line_number":262,"context_line":"                continue"},{"line_number":263,"context_line":"            parts \u003d line.split()"},{"line_number":264,"context_line":"            pid \u003d int(parts.pop(0))"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_e8169ff0","line":261,"in_reply_to":"ba15a1d1_332ad8e8","updated":"2015-09-21 12:15:54.000000000","message":"Done. I have updated other if statements in code below. Thanks.","commit_id":"17d5208fa9d3268a9a35de03e62ca5f19588736e"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"441ecc7f36b545055dbf083b3171c6791d2dfd5f","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        instance_name \u003d proc_info.instance_name"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        thread_infos \u003d []"},{"line_number":297,"context_line":"        (out, __) \u003d utils.execute(\u0027ps\u0027, \u0027-eL\u0027, \u0027-o\u0027, \u0027pid,tid,cmd\u0027,"},{"line_number":298,"context_line":"                                  \u0027--no-headers\u0027)"},{"line_number":299,"context_line":"        lines \u003d out.split(\"\\n\")"},{"line_number":300,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_be91cf54","line":297,"updated":"2015-09-20 15:24:59.000000000","message":"Suggestion: could we use \"ps -p \u003cpid\u003e -o pid,tid,cmd\" instead of finding pid in list?","commit_id":"17d5208fa9d3268a9a35de03e62ca5f19588736e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"b4a272fdcb1d4c4690ada452deb7320be4515f6e","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                                                \u0027timestamp\u0027])"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def get_instance_master(self, instance):"},{"line_number":255,"context_line":"        \"\"\"Retrieve KVM master process for this instance."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        :return: ProcessInfo"},{"line_number":258,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_8b3c81e3","line":255,"updated":"2015-10-07 14:26:13.000000000","message":"maybe add a bit more info in docstrings to exactly how it\u0027s doing this.","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"ac20eb4e9656d998e577b663a0bd183ae59dd2ba","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                                                \u0027timestamp\u0027])"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def get_instance_master(self, instance):"},{"line_number":255,"context_line":"        \"\"\"Retrieve KVM master process for this instance."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        :return: ProcessInfo"},{"line_number":258,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_45b05b8a","line":255,"in_reply_to":"7a2fa921_8b3c81e3","updated":"2015-10-08 14:50:53.000000000","message":"Done","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"b4a272fdcb1d4c4690ada452deb7320be4515f6e","unresolved":false,"context_lines":[{"line_number":262,"context_line":"                                  \u0027--no-headers\u0027)"},{"line_number":263,"context_line":"        lines \u003d out.split(\"\\n\")"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        for line in lines:"},{"line_number":266,"context_line":"            line \u003d line.strip()"},{"line_number":267,"context_line":"            if not line:"},{"line_number":268,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_ab5e1d74","line":265,"updated":"2015-10-07 14:26:13.000000000","message":"this seems like quite a bit of overhead, is there no way to grep out the lines we require?","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"ac20eb4e9656d998e577b663a0bd183ae59dd2ba","unresolved":false,"context_lines":[{"line_number":262,"context_line":"                                  \u0027--no-headers\u0027)"},{"line_number":263,"context_line":"        lines \u003d out.split(\"\\n\")"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        for line in lines:"},{"line_number":266,"context_line":"            line \u003d line.strip()"},{"line_number":267,"context_line":"            if not line:"},{"line_number":268,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_257affbd","line":265,"in_reply_to":"7a2fa921_ab5e1d74","updated":"2015-10-08 14:50:53.000000000","message":"Done. Used similar command to what Ilya suggested before.","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"b4a272fdcb1d4c4690ada452deb7320be4515f6e","unresolved":false,"context_lines":[{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    def get_instance_threads(self, proc_info):"},{"line_number":295,"context_line":"        \"\"\"Retrieve KVM threads for this instance."},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        :return: `list` of ThreadInfo"},{"line_number":298,"context_line":"        \"\"\""},{"line_number":299,"context_line":"        proc_pid \u003d proc_info.pid"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_6b2245bb","line":296,"updated":"2015-10-07 14:26:13.000000000","message":"same.","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"ac20eb4e9656d998e577b663a0bd183ae59dd2ba","unresolved":false,"context_lines":[{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    def get_instance_threads(self, proc_info):"},{"line_number":295,"context_line":"        \"\"\"Retrieve KVM threads for this instance."},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        :return: `list` of ThreadInfo"},{"line_number":298,"context_line":"        \"\"\""},{"line_number":299,"context_line":"        proc_pid \u003d proc_info.pid"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_6542376a","line":296,"in_reply_to":"7a2fa921_6b2245bb","updated":"2015-10-08 14:50:53.000000000","message":"Done","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"b4a272fdcb1d4c4690ada452deb7320be4515f6e","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    def inspect_cpus(self, instance):"},{"line_number":322,"context_line":"        if CONF.libvirt_type not in [\u0027kvm\u0027, \u0027qemu\u0027]:"},{"line_number":323,"context_line":"            return super(LibvirtCPUSchedstatInspector, self).\\"},{"line_number":324,"context_line":"                inspect_cpus(instance)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        def _get_thread_info():"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_6bda457a","line":323,"updated":"2015-10-07 14:26:13.000000000","message":"use brackets instead of \\ to do multiple lines.","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"ac20eb4e9656d998e577b663a0bd183ae59dd2ba","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"    def inspect_cpus(self, instance):"},{"line_number":322,"context_line":"        if CONF.libvirt_type not in [\u0027kvm\u0027, \u0027qemu\u0027]:"},{"line_number":323,"context_line":"            return super(LibvirtCPUSchedstatInspector, self).\\"},{"line_number":324,"context_line":"                inspect_cpus(instance)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        def _get_thread_info():"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_455e1b45","line":323,"in_reply_to":"7a2fa921_6bda457a","updated":"2015-10-08 14:50:53.000000000","message":"Done. I hope its ok.","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"b4a272fdcb1d4c4690ada452deb7320be4515f6e","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            return super(LibvirtCPUSchedstatInspector, self).\\"},{"line_number":324,"context_line":"                inspect_cpus(instance)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        def _get_thread_info():"},{"line_number":327,"context_line":"            proc_info \u003d self.get_instance_master(instance)"},{"line_number":328,"context_line":"            thread_infos \u003d self.get_instance_threads(proc_info)"},{"line_number":329,"context_line":"            # NOTE: order is very important, use the first #vcpu"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_4bc6699b","line":326,"updated":"2015-10-07 14:26:13.000000000","message":"this as a function doesn\u0027t seem that useful to be honest. maybe just keep it inline with rest of code","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"ac20eb4e9656d998e577b663a0bd183ae59dd2ba","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            return super(LibvirtCPUSchedstatInspector, self).\\"},{"line_number":324,"context_line":"                inspect_cpus(instance)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        def _get_thread_info():"},{"line_number":327,"context_line":"            proc_info \u003d self.get_instance_master(instance)"},{"line_number":328,"context_line":"            thread_infos \u003d self.get_instance_threads(proc_info)"},{"line_number":329,"context_line":"            # NOTE: order is very important, use the first #vcpu"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_853e73d8","line":326,"in_reply_to":"7a2fa921_4bc6699b","updated":"2015-10-08 14:50:53.000000000","message":"Done","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"b4a272fdcb1d4c4690ada452deb7320be4515f6e","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            thread_infos \u003d self.get_instance_threads(proc_info)"},{"line_number":329,"context_line":"            # NOTE: order is very important, use the first #vcpu"},{"line_number":330,"context_line":"            # count infos."},{"line_number":331,"context_line":"            return thread_infos[:proc_info.vcpus]"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        cpuStats \u003d []"},{"line_number":334,"context_line":"        for thread_info in _get_thread_info():"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_ab161d53","line":331,"updated":"2015-10-07 14:26:13.000000000","message":"what are all the other entries we\u0027re skipping for? shouldn\u0027t we just have skipped them in get_instance_threads?","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"ac20eb4e9656d998e577b663a0bd183ae59dd2ba","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            thread_infos \u003d self.get_instance_threads(proc_info)"},{"line_number":329,"context_line":"            # NOTE: order is very important, use the first #vcpu"},{"line_number":330,"context_line":"            # count infos."},{"line_number":331,"context_line":"            return thread_infos[:proc_info.vcpus]"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        cpuStats \u003d []"},{"line_number":334,"context_line":"        for thread_info in _get_thread_info():"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a2fa921_4525bbbe","line":331,"in_reply_to":"7a2fa921_ab161d53","updated":"2015-10-08 14:50:53.000000000","message":"VMs in case of KVM hypervisor are treated as regular threads/processes. Each vcpu is seen as a separate thread and the entire VM is seen as a multi-thread process. We are interested in the first #vcpus entries. This was moved into get_instance_threads.","commit_id":"145fbc6953174ff00bfea21f9d89f84f41e98aa0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"96a23dea1f98bb5114be17222947b791d82e2c83","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from ceilometer.compute.pollsters import util"},{"line_number":26,"context_line":"from ceilometer.compute.virt import inspector as virt_inspector"},{"line_number":27,"context_line":"from ceilometer.i18n import _"},{"line_number":28,"context_line":"from ceilometer.i18n import _LW"},{"line_number":29,"context_line":"from ceilometer import utils"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"libvirt \u003d None"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_bed0bb54","line":28,"updated":"2015-11-09 13:32:47.000000000","message":"(nit) we can merge this with line above. ie import _, _LW","commit_id":"21275d64677659cc49e509ac75475f9eb59eef94"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"96a23dea1f98bb5114be17222947b791d82e2c83","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        \"\"\""},{"line_number":263,"context_line":"        instance_name \u003d util.instance_name(instance)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        (out, __) \u003d utils.execute(\u0027ps\u0027, \u0027-o\u0027, \u0027pid,cmd\u0027, \u0027-C\u0027,"},{"line_number":266,"context_line":"                                  self.KVM_PROC_NAME, \u0027--no-headers\u0027)"},{"line_number":267,"context_line":"        lines \u003d out.split(\"\\n\")"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_1efa2743","line":265,"updated":"2015-11-09 13:32:47.000000000","message":"you don\u0027t need to wrap \u0027out, __\u0027","commit_id":"21275d64677659cc49e509ac75475f9eb59eef94"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"f01169bd4d20a4b96675bdd583ad0e2511a12811","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        \"\"\""},{"line_number":263,"context_line":"        instance_name \u003d util.instance_name(instance)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        (out, __) \u003d utils.execute(\u0027ps\u0027, \u0027-o\u0027, \u0027pid,cmd\u0027, \u0027-C\u0027,"},{"line_number":266,"context_line":"                                  self.KVM_PROC_NAME, \u0027--no-headers\u0027)"},{"line_number":267,"context_line":"        lines \u003d out.split(\"\\n\")"},{"line_number":268,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_2dd21bd3","line":265,"in_reply_to":"da85f559_1efa2743","updated":"2015-11-11 12:10:36.000000000","message":"Done","commit_id":"21275d64677659cc49e509ac75475f9eb59eef94"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"96a23dea1f98bb5114be17222947b791d82e2c83","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        instance_name \u003d proc_info.instance_name"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        thread_infos \u003d []"},{"line_number":309,"context_line":"        (out, __) \u003d utils.execute(\u0027ps\u0027, \u0027-L\u0027, \u0027-p\u0027, proc_pid, \u0027-o\u0027, \u0027pid,tid\u0027,"},{"line_number":310,"context_line":"                                  \u0027--no-headers\u0027)"},{"line_number":311,"context_line":"        lines \u003d out.split(\"\\n\")"},{"line_number":312,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_de9a5f14","line":309,"updated":"2015-11-09 13:32:47.000000000","message":"same as above","commit_id":"21275d64677659cc49e509ac75475f9eb59eef94"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"f01169bd4d20a4b96675bdd583ad0e2511a12811","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        instance_name \u003d proc_info.instance_name"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        thread_infos \u003d []"},{"line_number":309,"context_line":"        (out, __) \u003d utils.execute(\u0027ps\u0027, \u0027-L\u0027, \u0027-p\u0027, proc_pid, \u0027-o\u0027, \u0027pid,tid\u0027,"},{"line_number":310,"context_line":"                                  \u0027--no-headers\u0027)"},{"line_number":311,"context_line":"        lines \u003d out.split(\"\\n\")"},{"line_number":312,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_eddc13e6","line":309,"in_reply_to":"da85f559_de9a5f14","updated":"2015-11-11 12:10:36.000000000","message":"Done","commit_id":"21275d64677659cc49e509ac75475f9eb59eef94"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"96a23dea1f98bb5114be17222947b791d82e2c83","unresolved":false,"context_lines":[{"line_number":341,"context_line":"            cpuStats.append((0, self.CPUSchedStatsInfo("},{"line_number":342,"context_line":"                vcpu_sum_exec_runtime\u003d0.0,"},{"line_number":343,"context_line":"                vcpu_wait_sum\u003d0.0,"},{"line_number":344,"context_line":"                timestamp\u003dtimestamp)))"},{"line_number":345,"context_line":"            return cpuStats"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"        thread_infos \u003d self.get_instance_threads(proc_info)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_a1889ce8","line":344,"updated":"2015-11-09 13:32:47.000000000","message":"this is strange that we default to 0 if we fail... this seems like an invaild result if this error is unexpected.","commit_id":"21275d64677659cc49e509ac75475f9eb59eef94"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"f01169bd4d20a4b96675bdd583ad0e2511a12811","unresolved":false,"context_lines":[{"line_number":341,"context_line":"            cpuStats.append((0, self.CPUSchedStatsInfo("},{"line_number":342,"context_line":"                vcpu_sum_exec_runtime\u003d0.0,"},{"line_number":343,"context_line":"                vcpu_wait_sum\u003d0.0,"},{"line_number":344,"context_line":"                timestamp\u003dtimestamp)))"},{"line_number":345,"context_line":"            return cpuStats"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"        thread_infos \u003d self.get_instance_threads(proc_info)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_cd026f0b","line":344,"in_reply_to":"da85f559_a1889ce8","updated":"2015-11-11 12:10:36.000000000","message":"You are right, this is modified in next patch where zeros are set in case instance reported by libvirt as shut-off. Otherwise no sample is generated (in case of an error)","commit_id":"21275d64677659cc49e509ac75475f9eb59eef94"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bd8a4e7334233cc2b2bdbc54ab075708bdd8cf14","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    \"\"\"Inspector for retrieving Linux schedstats counters.\"\"\""},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    # linux kvm process name"},{"line_number":235,"context_line":"    KVM_PROC_NAME \u003d \u0027qemu-system-x86_64\u0027"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    # process info (master thread) per kvm process"},{"line_number":238,"context_line":"    ProcessInfo \u003d collections.namedtuple(\u0027ProcessInfo\u0027, [\u0027pid\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_d9fbcb45","line":235,"updated":"2015-11-11 21:21:27.000000000","message":"curious, but is there no i386?","commit_id":"65c5da470595b7f76e9b0bfb5fb54c3c36ca9215"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"7a24e774382b31e5a7c44f4a51bbc61f8351d5b1","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    \"\"\"Inspector for retrieving Linux schedstats counters.\"\"\""},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    # linux kvm process name"},{"line_number":235,"context_line":"    KVM_PROC_NAME \u003d \u0027qemu-system-x86_64\u0027"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    # process info (master thread) per kvm process"},{"line_number":238,"context_line":"    ProcessInfo \u003d collections.namedtuple(\u0027ProcessInfo\u0027, [\u0027pid\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_dfe1502b","line":235,"in_reply_to":"da85f559_d9fbcb45","updated":"2015-11-12 10:24:24.000000000","message":"It seems that we are fine. Only 64 bit version is supported.\n\nI found the following statement in liberty installation documentations (redhat, ubuntu):\n\nhttp://docs.openstack.org/liberty/install-guide-ubuntu/environment.html\n\nhttp://docs.openstack.org/liberty/install-guide-rdo/environment.html\n\n\"Also, you must install a 64-bit version of your distribution on each node.\"","commit_id":"65c5da470595b7f76e9b0bfb5fb54c3c36ca9215"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"21248445b9abc027d55a5c426ebfed7bc7123b50","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    \"\"\"Inspector for retrieving Linux schedstats counters.\"\"\""},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    # linux kvm process name"},{"line_number":235,"context_line":"    KVM_PROC_NAME \u003d \u0027qemu-system-x86_64\u0027"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    # process info (master thread) per kvm process"},{"line_number":238,"context_line":"    ProcessInfo \u003d collections.namedtuple(\u0027ProcessInfo\u0027, [\u0027pid\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_6fc0a950","line":235,"in_reply_to":"da85f559_dfe1502b","updated":"2015-11-12 12:49:01.000000000","message":"good info","commit_id":"65c5da470595b7f76e9b0bfb5fb54c3c36ca9215"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bd8a4e7334233cc2b2bdbc54ab075708bdd8cf14","unresolved":false,"context_lines":[{"line_number":265,"context_line":"            out, __ \u003d utils.execute(\u0027ps\u0027, \u0027-o\u0027, \u0027pid,cmd\u0027, \u0027-C\u0027,"},{"line_number":266,"context_line":"                                    self.KVM_PROC_NAME, \u0027--no-headers\u0027)"},{"line_number":267,"context_line":"        except Exception:"},{"line_number":268,"context_line":"            msg \u003d _(\u0027Failed to inspect cpu schedstats info of instance: \u0027"},{"line_number":269,"context_line":"                    \u0027\u003cname\u003d%(name)s, id\u003d%(id)s\u003e, \u0027"},{"line_number":270,"context_line":"                    \u0027no kvm processes.\u0027) % {\u0027name\u0027: instance_name,"},{"line_number":271,"context_line":"                                            \u0027id\u0027: instance.id}"}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_d97f4c15","line":268,"updated":"2015-11-11 21:21:27.000000000","message":"s/_/_LE/","commit_id":"65c5da470595b7f76e9b0bfb5fb54c3c36ca9215"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"7a24e774382b31e5a7c44f4a51bbc61f8351d5b1","unresolved":false,"context_lines":[{"line_number":265,"context_line":"            out, __ \u003d utils.execute(\u0027ps\u0027, \u0027-o\u0027, \u0027pid,cmd\u0027, \u0027-C\u0027,"},{"line_number":266,"context_line":"                                    self.KVM_PROC_NAME, \u0027--no-headers\u0027)"},{"line_number":267,"context_line":"        except Exception:"},{"line_number":268,"context_line":"            msg \u003d _(\u0027Failed to inspect cpu schedstats info of instance: \u0027"},{"line_number":269,"context_line":"                    \u0027\u003cname\u003d%(name)s, id\u003d%(id)s\u003e, \u0027"},{"line_number":270,"context_line":"                    \u0027no kvm processes.\u0027) % {\u0027name\u0027: instance_name,"},{"line_number":271,"context_line":"                                            \u0027id\u0027: instance.id}"}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_4114ac4b","line":268,"in_reply_to":"da85f559_d97f4c15","updated":"2015-11-12 10:24:24.000000000","message":"Done","commit_id":"65c5da470595b7f76e9b0bfb5fb54c3c36ca9215"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bd8a4e7334233cc2b2bdbc54ab075708bdd8cf14","unresolved":false,"context_lines":[{"line_number":294,"context_line":"                                        vcpus\u003dint(vcpus),"},{"line_number":295,"context_line":"                                        command\u003dcommand)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        msg \u003d _(\u0027Failed to inspect cpu schedstats info of instance: %s\u0027"},{"line_number":298,"context_line":"                \u0027\u003cname\u003d%(name)s, id\u003d%(id)s\u003e, \u0027"},{"line_number":299,"context_line":"                \u0027master process does not exist.\u0027) % {"},{"line_number":300,"context_line":"                    \u0027name\u0027: instance_name, \u0027id\u0027: instance.id}"}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_99a544a3","line":297,"updated":"2015-11-11 21:21:27.000000000","message":"s/_/_LE/","commit_id":"65c5da470595b7f76e9b0bfb5fb54c3c36ca9215"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"7a24e774382b31e5a7c44f4a51bbc61f8351d5b1","unresolved":false,"context_lines":[{"line_number":294,"context_line":"                                        vcpus\u003dint(vcpus),"},{"line_number":295,"context_line":"                                        command\u003dcommand)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        msg \u003d _(\u0027Failed to inspect cpu schedstats info of instance: %s\u0027"},{"line_number":298,"context_line":"                \u0027\u003cname\u003d%(name)s, id\u003d%(id)s\u003e, \u0027"},{"line_number":299,"context_line":"                \u0027master process does not exist.\u0027) % {"},{"line_number":300,"context_line":"                    \u0027name\u0027: instance_name, \u0027id\u0027: instance.id}"}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_2111685d","line":297,"in_reply_to":"da85f559_99a544a3","updated":"2015-11-12 10:24:24.000000000","message":"Done","commit_id":"65c5da470595b7f76e9b0bfb5fb54c3c36ca9215"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bd8a4e7334233cc2b2bdbc54ab075708bdd8cf14","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            out, __ \u003d utils.execute(\u0027ps\u0027, \u0027-L\u0027, \u0027-p\u0027, proc_pid, \u0027-o\u0027,"},{"line_number":317,"context_line":"                                    \u0027pid,tid\u0027, \u0027--no-headers\u0027)"},{"line_number":318,"context_line":"        except Exception:"},{"line_number":319,"context_line":"            msg \u003d _(\u0027Failed to inspect cpu schedstats info of instance: \u0027"},{"line_number":320,"context_line":"                    \u0027\u003cname\u003d%(name)s, process\u003d%(proc_pid)s\u003e, \u0027"},{"line_number":321,"context_line":"                    \u0027no kvm threads.\u0027) % {\u0027name\u0027: instance_name,"},{"line_number":322,"context_line":"                                          \u0027proc_pid\u0027: proc_pid}"}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_d9ad0c85","line":319,"updated":"2015-11-11 21:21:27.000000000","message":"s/_/_LE/","commit_id":"65c5da470595b7f76e9b0bfb5fb54c3c36ca9215"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"7a24e774382b31e5a7c44f4a51bbc61f8351d5b1","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            out, __ \u003d utils.execute(\u0027ps\u0027, \u0027-L\u0027, \u0027-p\u0027, proc_pid, \u0027-o\u0027,"},{"line_number":317,"context_line":"                                    \u0027pid,tid\u0027, \u0027--no-headers\u0027)"},{"line_number":318,"context_line":"        except Exception:"},{"line_number":319,"context_line":"            msg \u003d _(\u0027Failed to inspect cpu schedstats info of instance: \u0027"},{"line_number":320,"context_line":"                    \u0027\u003cname\u003d%(name)s, process\u003d%(proc_pid)s\u003e, \u0027"},{"line_number":321,"context_line":"                    \u0027no kvm threads.\u0027) % {\u0027name\u0027: instance_name,"},{"line_number":322,"context_line":"                                          \u0027proc_pid\u0027: proc_pid}"}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_811e146e","line":319,"in_reply_to":"da85f559_d9ad0c85","updated":"2015-11-12 10:24:24.000000000","message":"Done","commit_id":"65c5da470595b7f76e9b0bfb5fb54c3c36ca9215"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"d89ef848266531ef6ec83152a3cfe1ed73ef2778","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    \"\"\"Inspector for retrieving Linux schedstats counters.\"\"\""},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    # linux kvm process name"},{"line_number":235,"context_line":"    KVM_PROC_NAME \u003d \u0027qemu-system-x86_64\u0027"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    # process info (master thread) per kvm process"},{"line_number":238,"context_line":"    ProcessInfo \u003d collections.namedtuple(\u0027ProcessInfo\u0027, [\u0027pid\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a8ffd7b_c67b128b","line":235,"updated":"2015-11-26 15:37:14.000000000","message":"So this code is broken on arm, s390, ppc, etc, etc, on on hosts using qemu-kvm\n\nIt will also be broken on hosts using libvirt with Xen, LXC or VZ","commit_id":"1b2388d05c5e09be31119073337a5c91737994f7"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"d89ef848266531ef6ec83152a3cfe1ed73ef2778","unresolved":false,"context_lines":[{"line_number":287,"context_line":"                if s \u003d\u003d \u0027-name\u0027 and i + 2 \u003c\u003d len(parts):"},{"line_number":288,"context_line":"                    name \u003d parts[i + 1]"},{"line_number":289,"context_line":"                if s \u003d\u003d \u0027-smp\u0027 and i + 2 \u003c\u003d len(parts):"},{"line_number":290,"context_line":"                    vcpus \u003d parts[i + 1].split(\u0027,\u0027)[0]"},{"line_number":291,"context_line":"            if name \u003d\u003d instance_name and vcpus:"},{"line_number":292,"context_line":"                return self.ProcessInfo(pid\u003dpid,"},{"line_number":293,"context_line":"                                        instance_name\u003dinstance_name,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a8ffd7b_06c4ba5c","line":290,"updated":"2015-11-26 15:37:14.000000000","message":"What\u0027s wrong with just using a libvirt API call to get the number of vCPUs for a guest","commit_id":"1b2388d05c5e09be31119073337a5c91737994f7"},{"author":{"_account_id":17081,"name":"Chaozhe Chen(ccz)","email":"chaozhe.chen@easystack.cn","username":"Chaozhe.Chen"},"change_message_id":"ae34b9d38a4b9bd3e58ac48c222002c4213b9056","unresolved":false,"context_lines":[{"line_number":356,"context_line":"        state \u003d domain.info()[0]"},{"line_number":357,"context_line":"        if state \u003d\u003d libvirt.VIR_DOMAIN_SHUTOFF:"},{"line_number":358,"context_line":"            # Report cpu 0 just like libvirt core does"},{"line_number":359,"context_line":"            timestamp \u003d timeutils.parse_isotime(timeutils.isotime())"},{"line_number":360,"context_line":"            cpuStats.append((0, self.CPUSchedStatsInfo("},{"line_number":361,"context_line":"                vcpu_sum_exec_runtime\u003d0.0,"},{"line_number":362,"context_line":"                vcpu_wait_sum\u003d0.0,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da6ed579_a1ff6933","line":359,"range":{"start_line":359,"start_character":48,"end_line":359,"end_character":67},"updated":"2016-01-12 06:07:10.000000000","message":"timeutils.isotime() is deprecated. You can use timeutils.utcnow() if you want to get the time now for timestamp.","commit_id":"1b2388d05c5e09be31119073337a5c91737994f7"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"d89ef848266531ef6ec83152a3cfe1ed73ef2778","unresolved":false,"context_lines":[{"line_number":398,"context_line":"                vcpu_sum_exec_runtime\u003dfloat(vcpu_sum_exec_runtime),"},{"line_number":399,"context_line":"                vcpu_wait_sum\u003dfloat(vcpu_wait_sum),"},{"line_number":400,"context_line":"                timestamp\u003dtimestamp)))"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        return cpuStats"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a8ffd7b_c6ceb22d","line":401,"updated":"2015-11-26 15:37:14.000000000","message":"I\u0027d really recommend just using the libvirt APIs to get the per-vCPU usage as that\u0027s portable to any hypervisor backed by libvirt.","commit_id":"1b2388d05c5e09be31119073337a5c91737994f7"}],"etc/ceilometer/pipeline.yaml":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"96a23dea1f98bb5114be17222947b791d82e2c83","unresolved":false,"context_lines":[{"line_number":5,"context_line":"      meters:"},{"line_number":6,"context_line":"          - \"*\""},{"line_number":7,"context_line":"          - \"!cpu_ready\""},{"line_number":8,"context_line":"          - \"!cpu_used\""},{"line_number":9,"context_line":"      sinks:"},{"line_number":10,"context_line":"          - meter_sink"},{"line_number":11,"context_line":"    - name: cpu_source"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"da85f559_deeedf21","line":8,"updated":"2015-11-09 13:32:47.000000000","message":"i assume this should probably skip cpu_used_time if we\u0027re just going to be converting it to cpu","commit_id":"21275d64677659cc49e509ac75475f9eb59eef94"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"f01169bd4d20a4b96675bdd583ad0e2511a12811","unresolved":false,"context_lines":[{"line_number":5,"context_line":"      meters:"},{"line_number":6,"context_line":"          - \"*\""},{"line_number":7,"context_line":"          - \"!cpu_ready\""},{"line_number":8,"context_line":"          - \"!cpu_used\""},{"line_number":9,"context_line":"      sinks:"},{"line_number":10,"context_line":"          - meter_sink"},{"line_number":11,"context_line":"    - name: cpu_source"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"da85f559_0865c5df","line":8,"in_reply_to":"da85f559_deeedf21","updated":"2015-11-11 12:10:36.000000000","message":"Correct. This change is updated in next patch","commit_id":"21275d64677659cc49e509ac75475f9eb59eef94"}],"setup.cfg":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"2ae66c566df52227eeafc977844be28f58418841","unresolved":false,"context_lines":[{"line_number":267,"context_line":"    db2 \u003d ceilometer.storage.impl_db2:Connection"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"ceilometer.compute.virt \u003d"},{"line_number":270,"context_line":"    libvirt \u003d ceilometer.compute.virt.libvirt.inspector:LibvirtCPUSchedstatInspector"},{"line_number":271,"context_line":"    hyperv \u003d ceilometer.compute.virt.hyperv.inspector:HyperVInspector"},{"line_number":272,"context_line":"    vsphere \u003d ceilometer.compute.virt.vmware.inspector:VsphereInspector"},{"line_number":273,"context_line":"    xenapi \u003d ceilometer.compute.virt.xenapi.inspector:XenapiInspector"}],"source_content_type":"text/x-ttcn-cfg","patch_set":6,"id":"3afb71cf_40f10f6a","line":270,"range":{"start_line":270,"start_character":4,"end_line":270,"end_character":11},"updated":"2015-06-11 03:03:18.000000000","message":"i think you still need to original entry as it still is used to capture disk metrics","commit_id":"17d5208fa9d3268a9a35de03e62ca5f19588736e"},{"author":{"_account_id":8604,"name":"Avi Weit","email":"weit@il.ibm.com","username":"weit"},"change_message_id":"7c89cf55284d6de34319356368d97685696f0274","unresolved":false,"context_lines":[{"line_number":267,"context_line":"    db2 \u003d ceilometer.storage.impl_db2:Connection"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"ceilometer.compute.virt \u003d"},{"line_number":270,"context_line":"    libvirt \u003d ceilometer.compute.virt.libvirt.inspector:LibvirtCPUSchedstatInspector"},{"line_number":271,"context_line":"    hyperv \u003d ceilometer.compute.virt.hyperv.inspector:HyperVInspector"},{"line_number":272,"context_line":"    vsphere \u003d ceilometer.compute.virt.vmware.inspector:VsphereInspector"},{"line_number":273,"context_line":"    xenapi \u003d ceilometer.compute.virt.xenapi.inspector:XenapiInspector"}],"source_content_type":"text/x-ttcn-cfg","patch_set":6,"id":"da20952f_5d7566c8","line":270,"in_reply_to":"3afb71cf_40f10f6a","updated":"2015-09-06 08:06:37.000000000","message":"LibvirtCPUSchedstatInspector is a subclass (we created) of the original untouched LibvirtInspector.\nWe only override inspect_cpus method which depending on the criteria (kvm/qemu or not) -- uses our inspect_cpus logic or the original one of the parent LibvirtInspector class. Other metrics such as network and disk are left untouched and properly work.","commit_id":"17d5208fa9d3268a9a35de03e62ca5f19588736e"}]}
