)]}'
{"monasca_agent/collector/checks_d/ipmi.py":[{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"358c1bf47b9b3aee0cc3138eeabeed8f4cdcfa92","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":2,"context_line":"# Copyright 2017 Distributed Systems Laboratory (LSD) - UFCG"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_c5ccf7bd","line":1,"updated":"2017-05-09 18:05:09.000000000","message":"That should be removed IMHO.","commit_id":"253a5361c4d6501f9f623486a8144bde2741b946"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"358c1bf47b9b3aee0cc3138eeabeed8f4cdcfa92","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":"# (c) 2017 Flávio Ramalho \u003cflaviosr@lsd.ufcg.edu.br\u003e"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import collections"},{"line_number":19,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_e5d5b344","line":16,"updated":"2017-05-09 18:05:09.000000000","message":"we don\u0027t put that sort of details into CR.","commit_id":"253a5361c4d6501f9f623486a8144bde2741b946"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"358c1bf47b9b3aee0cc3138eeabeed8f4cdcfa92","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import subprocess"},{"line_number":21,"context_line":"import tempfile"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from monasca_agent.collector.checks import AgentCheck"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class IPMICheck(AgentCheck):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_65c1a380","line":23,"range":{"start_line":23,"start_character":12,"end_line":23,"end_character":13},"updated":"2017-05-09 18:05:09.000000000","message":"According to OS guidelines imports should follow up to the module which consists of what you\u0027re interested in.\n\n  from monasca_agent.collector import checks","commit_id":"253a5361c4d6501f9f623486a8144bde2741b946"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"358c1bf47b9b3aee0cc3138eeabeed8f4cdcfa92","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                           device_name\u003ddevice)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def _get_IPMI_measures(self, instance):"},{"line_number":42,"context_line":"        fd, passfile_path \u003d tempfile.mkstemp()"},{"line_number":43,"context_line":"        os.write(fd, instance[\u0027ipmi_password\u0027])"},{"line_number":44,"context_line":"        os.close(fd)"},{"line_number":45,"context_line":"        command \u003d \"ipmitool -I lanplus -H %s -U %s -f %s sdr\" \\"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_a55d6bea","line":42,"updated":"2017-05-09 18:05:09.000000000","message":"As documention (https://docs.python.org/2/library/tempfile.html#tempfile.mkstemp) says, you ought to delete this file when you\u0027re done with it.","commit_id":"253a5361c4d6501f9f623486a8144bde2741b946"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"358c1bf47b9b3aee0cc3138eeabeed8f4cdcfa92","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        fd, passfile_path \u003d tempfile.mkstemp()"},{"line_number":43,"context_line":"        os.write(fd, instance[\u0027ipmi_password\u0027])"},{"line_number":44,"context_line":"        os.close(fd)"},{"line_number":45,"context_line":"        command \u003d \"ipmitool -I lanplus -H %s -U %s -f %s sdr\" \\"},{"line_number":46,"context_line":"                  % (instance[\u0027ipmi_address\u0027],"},{"line_number":47,"context_line":"                     instance[\u0027ipmi_user\u0027],"},{"line_number":48,"context_line":"                     passfile_path)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_05eadf0d","line":45,"updated":"2017-05-09 18:05:09.000000000","message":"Does it require sudo ?\nIs it, by default, shipped with every linux distribution ?\nIf not, I\u0027d put those sort of checks in prepare_run. For example that would be checking accessibility of the impitool and setting some flag in check instance.","commit_id":"253a5361c4d6501f9f623486a8144bde2741b946"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"358c1bf47b9b3aee0cc3138eeabeed8f4cdcfa92","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                  % (instance[\u0027ipmi_address\u0027],"},{"line_number":47,"context_line":"                     instance[\u0027ipmi_user\u0027],"},{"line_number":48,"context_line":"                     passfile_path)"},{"line_number":49,"context_line":"        ipmi_output \u003d subprocess.check_output(command, shell\u003dTrue).split(\u0027\\n\u0027)"},{"line_number":50,"context_line":"        measures \u003d collections.defaultdict(dict)"},{"line_number":51,"context_line":"        for line in ipmi_output[0:-1]:"},{"line_number":52,"context_line":"            metric \u003d line.split(\"|\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_05065fcf","line":49,"updated":"2017-05-09 18:05:09.000000000","message":"I\u0027d return output here and create another method, process_output to extract measurement.","commit_id":"253a5361c4d6501f9f623486a8144bde2741b946"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"358c1bf47b9b3aee0cc3138eeabeed8f4cdcfa92","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                     instance[\u0027ipmi_user\u0027],"},{"line_number":48,"context_line":"                     passfile_path)"},{"line_number":49,"context_line":"        ipmi_output \u003d subprocess.check_output(command, shell\u003dTrue).split(\u0027\\n\u0027)"},{"line_number":50,"context_line":"        measures \u003d collections.defaultdict(dict)"},{"line_number":51,"context_line":"        for line in ipmi_output[0:-1]:"},{"line_number":52,"context_line":"            metric \u003d line.split(\"|\")"},{"line_number":53,"context_line":"            name \u003d metric[0].rstrip().lower().replace(\" \", \"_\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f044301_456ea795","line":50,"updated":"2017-05-09 18:05:09.000000000","message":"nit: measurements.","commit_id":"253a5361c4d6501f9f623486a8144bde2741b946"},{"author":{"_account_id":27040,"name":"Luis Eduardo","email":"leduardo@lsd.ufcg.edu.br","username":"lets00"},"change_message_id":"884447da51b728f3f85252553ec08420a146b65e","unresolved":false,"context_lines":[{"line_number":27,"context_line":"            for device in ipmi_sdr[measure].keys():"},{"line_number":28,"context_line":"                self.gauge(\u0027ipmi.\u0027 + measure, ipmi_sdr[measure][device], dimensions\u003ddimensions, device_name\u003ddevice)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def getIPMIMeasures(self):"},{"line_number":31,"context_line":"        ipmi_output \u003d subprocess.check_output(\"ipmitool sdr\", shell\u003dTrue).split(\u0027\\n\u0027)"},{"line_number":32,"context_line":"        measures \u003d collections.defaultdict(dict)"},{"line_number":33,"context_line":"        for line in ipmi_output[0:-1]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_7bc05b7c","line":30,"range":{"start_line":30,"start_character":4,"end_line":30,"end_character":30},"updated":"2018-04-19 00:39:57.000000000","message":"Here, you can declare using this notation: get_ipmi_measures(self).","commit_id":"cac985e2e8f902daa3e938bd8aeab5ecb96083ee"},{"author":{"_account_id":28008,"name":"Guilherme","display_name":"Guilherme Steinmüller","email":"gsteinmuller@vexxhost.com","username":"guilhermesp"},"change_message_id":"3d4517539a547366e932eeb708058523d073f8ba","unresolved":false,"context_lines":[{"line_number":27,"context_line":"            for device in ipmi_sdr[measure].keys():"},{"line_number":28,"context_line":"                self.gauge(\u0027ipmi.\u0027 + measure, ipmi_sdr[measure][device], dimensions\u003ddimensions, device_name\u003ddevice)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def getIPMIMeasures(self):"},{"line_number":31,"context_line":"        ipmi_output \u003d subprocess.check_output(\"ipmitool sdr\", shell\u003dTrue).split(\u0027\\n\u0027)"},{"line_number":32,"context_line":"        measures \u003d collections.defaultdict(dict)"},{"line_number":33,"context_line":"        for line in ipmi_output[0:-1]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_18eb58b0","line":30,"range":{"start_line":30,"start_character":4,"end_line":30,"end_character":30},"in_reply_to":"9f6a8fd7_7bc05b7c","updated":"2018-04-24 11:52:17.000000000","message":"hi Luis. Indeed, but still missing the leading underscore\nwould be _get_ipmi_measures(self)\nhttps://www.python.org/dev/peps/pep-0008/#method-names-and-instance-variables","commit_id":"cac985e2e8f902daa3e938bd8aeab5ecb96083ee"},{"author":{"_account_id":27040,"name":"Luis Eduardo","email":"leduardo@lsd.ufcg.edu.br","username":"lets00"},"change_message_id":"884447da51b728f3f85252553ec08420a146b65e","unresolved":false,"context_lines":[{"line_number":28,"context_line":"                self.gauge(\u0027ipmi.\u0027 + measure, ipmi_sdr[measure][device], dimensions\u003ddimensions, device_name\u003ddevice)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def getIPMIMeasures(self):"},{"line_number":31,"context_line":"        ipmi_output \u003d subprocess.check_output(\"ipmitool sdr\", shell\u003dTrue).split(\u0027\\n\u0027)"},{"line_number":32,"context_line":"        measures \u003d collections.defaultdict(dict)"},{"line_number":33,"context_line":"        for line in ipmi_output[0:-1]:"},{"line_number":34,"context_line":"            metric \u003d line.split(\"|\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_bbc6f399","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":85},"updated":"2018-04-19 00:39:57.000000000","message":"This line can raise some exceptions (If ipmitool is not installed or user monasca does not have correct permissions). You can manipulate this exception in Detect monasca plugin.","commit_id":"cac985e2e8f902daa3e938bd8aeab5ecb96083ee"},{"author":{"_account_id":27040,"name":"Luis Eduardo","email":"leduardo@lsd.ufcg.edu.br","username":"lets00"},"change_message_id":"884447da51b728f3f85252553ec08420a146b65e","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                        measures[\"fan_rpm\"][name] \u003d int(value)"},{"line_number":54,"context_line":"        return measures"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def getModel(self):"},{"line_number":57,"context_line":"        with open(\u0027/sys/devices/virtual/dmi/id/product_name\u0027, \u0027r\u0027) as dmi:"},{"line_number":58,"context_line":"            return dmi.read().replace(\u0027\\n\u0027,\u0027\u0027).replace(\u0027 \u0027,\u0027_\u0027).lower()"},{"line_number":59,"context_line":"    def _is_float(self, value):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_3b38a39e","line":56,"range":{"start_line":56,"start_character":8,"end_line":56,"end_character":23},"updated":"2018-04-19 00:39:57.000000000","message":"Same as line 30","commit_id":"cac985e2e8f902daa3e938bd8aeab5ecb96083ee"},{"author":{"_account_id":28008,"name":"Guilherme","display_name":"Guilherme Steinmüller","email":"gsteinmuller@vexxhost.com","username":"guilhermesp"},"change_message_id":"3d4517539a547366e932eeb708058523d073f8ba","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                        measures[\"fan_rpm\"][name] \u003d int(value)"},{"line_number":54,"context_line":"        return measures"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def getModel(self):"},{"line_number":57,"context_line":"        with open(\u0027/sys/devices/virtual/dmi/id/product_name\u0027, \u0027r\u0027) as dmi:"},{"line_number":58,"context_line":"            return dmi.read().replace(\u0027\\n\u0027,\u0027\u0027).replace(\u0027 \u0027,\u0027_\u0027).lower()"},{"line_number":59,"context_line":"    def _is_float(self, value):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_1804b87a","line":56,"range":{"start_line":56,"start_character":8,"end_line":56,"end_character":23},"in_reply_to":"9f6a8fd7_3b38a39e","updated":"2018-04-24 11:52:17.000000000","message":"_get_model(self)","commit_id":"cac985e2e8f902daa3e938bd8aeab5ecb96083ee"},{"author":{"_account_id":27040,"name":"Luis Eduardo","email":"leduardo@lsd.ufcg.edu.br","username":"lets00"},"change_message_id":"884447da51b728f3f85252553ec08420a146b65e","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        return measures"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def getModel(self):"},{"line_number":57,"context_line":"        with open(\u0027/sys/devices/virtual/dmi/id/product_name\u0027, \u0027r\u0027) as dmi:"},{"line_number":58,"context_line":"            return dmi.read().replace(\u0027\\n\u0027,\u0027\u0027).replace(\u0027 \u0027,\u0027_\u0027).lower()"},{"line_number":59,"context_line":"    def _is_float(self, value):"},{"line_number":60,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_bb4b5329","line":57,"range":{"start_line":57,"start_character":0,"end_line":57,"end_character":74},"updated":"2018-04-19 00:39:57.000000000","message":"This can raise exception if monasca user does not have correct permissions to read this file","commit_id":"cac985e2e8f902daa3e938bd8aeab5ecb96083ee"},{"author":{"_account_id":27040,"name":"Luis Eduardo","email":"leduardo@lsd.ufcg.edu.br","username":"lets00"},"change_message_id":"884447da51b728f3f85252553ec08420a146b65e","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def getModel(self):"},{"line_number":57,"context_line":"        with open(\u0027/sys/devices/virtual/dmi/id/product_name\u0027, \u0027r\u0027) as dmi:"},{"line_number":58,"context_line":"            return dmi.read().replace(\u0027\\n\u0027,\u0027\u0027).replace(\u0027 \u0027,\u0027_\u0027).lower()"},{"line_number":59,"context_line":"    def _is_float(self, value):"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            float(value)"},{"line_number":62,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_7b55bbc5","line":59,"range":{"start_line":59,"start_character":3,"end_line":59,"end_character":31},"updated":"2018-04-19 00:39:57.000000000","message":"Add a blank line before this method","commit_id":"cac985e2e8f902daa3e938bd8aeab5ecb96083ee"}]}
