)]}'
{"docs/Agent.md":[{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"7991061ee92963a0cdacdf99cb2135d4552c8223","unresolved":false,"context_lines":[{"line_number":42,"context_line":"| Monasca Setup | monasca-setup | The monasca-setup script configures the agent.  The Monasca Setup program can also auto-detect and configure certain agent plugins | "},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"# Installing"},{"line_number":45,"context_line":"The Agent (monasca-agent) is available for installation from the Python Package Index (PyPI). To install it, you first need `pip` installed on the node to be monitored. Instructions on installing pip may be found at https://pip.pypa.io/en/latest/installing.html.  The Agent will NOT run under any flavor of Windows or Mac OS at this time but has been tested thoroughly on Ubuntu and should work under most Debian flavors of Linux.  Support may be added for Mac OS and Windows in the future.  Example of an Ubuntu or Debian based install:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"\u003e Installation Dependency Notes"},{"line_number":48,"context_line":"\u003e"}],"source_content_type":"text/x-markdown","patch_set":11,"id":"9a41bdd9_b0a2d4fb","line":45,"updated":"2015-07-14 20:34:40.000000000","message":"Vertica only runs on Linux so support won\u0027t be added.","commit_id":"2ff26c441f7c1aad3b8cdd5ecc92aca16b239fb8"},{"author":{"_account_id":12149,"name":"Dexter Fryar","email":"dexter.fryar@protonmail.com","username":"dlfryar"},"change_message_id":"809a3aa564f135539837b8ce02303d37e07d7a90","unresolved":false,"context_lines":[{"line_number":42,"context_line":"| Monasca Setup | monasca-setup | The monasca-setup script configures the agent.  The Monasca Setup program can also auto-detect and configure certain agent plugins | "},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"# Installing"},{"line_number":45,"context_line":"The Agent (monasca-agent) is available for installation from the Python Package Index (PyPI). To install it, you first need `pip` installed on the node to be monitored. Instructions on installing pip may be found at https://pip.pypa.io/en/latest/installing.html.  The Agent will NOT run under any flavor of Windows or Mac OS at this time but has been tested thoroughly on Ubuntu and should work under most Debian flavors of Linux.  Support may be added for Mac OS and Windows in the future.  Example of an Ubuntu or Debian based install:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"\u003e Installation Dependency Notes"},{"line_number":48,"context_line":"\u003e"}],"source_content_type":"text/x-markdown","patch_set":11,"id":"9a41bdd9_aab9007b","line":45,"in_reply_to":"9a41bdd9_b0a2d4fb","updated":"2015-07-14 21:45:06.000000000","message":"Right that\u0027s why I added Debian to be clear that all the Ansible playbooks are Debian/APT playbooks so RedHat, OpenSuse, etc. Linux is not implemented since they have different package managers..","commit_id":"2ff26c441f7c1aad3b8cdd5ecc92aca16b239fb8"}],"monasca_agent/collector/checks_d/vertica.py":[{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"99dd51bed6182160e103e5a795ed64489d930e3e","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        self.log.error(\"Collecting done, value %s\" % dict[key])"},{"line_number":138,"context_line":"        return the_type(dict[key])"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _collect_dict(self, metric_type, field_metric_map,"},{"line_number":141,"context_line":"                      query, db, dimensions):"},{"line_number":142,"context_line":"        \"\"\"Query status and get a dictionary back."},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_c80f51de","line":140,"updated":"2015-06-25 14:19:54.000000000","message":"This doesn\u0027t seem to be used anywhere","commit_id":"fcfc47020835a38b746e5227eae9d447d297b5e1"},{"author":{"_account_id":12149,"name":"Dexter Fryar","email":"dexter.fryar@protonmail.com","username":"dlfryar"},"change_message_id":"170de71df3b126526d0669fe6d770c525e1f6e9e","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        self.log.error(\"Collecting done, value %s\" % dict[key])"},{"line_number":138,"context_line":"        return the_type(dict[key])"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _collect_dict(self, metric_type, field_metric_map,"},{"line_number":141,"context_line":"                      query, db, dimensions):"},{"line_number":142,"context_line":"        \"\"\"Query status and get a dictionary back."},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_033c3a91","line":140,"in_reply_to":"fa32b979_c80f51de","updated":"2015-06-25 14:35:01.000000000","message":"Good eye.  Yeah that was a holdover from MySQL since this plugin was derived from that.  I\u0027ll clean that up and push an updated patch.","commit_id":"fcfc47020835a38b746e5227eae9d447d297b5e1"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"90db1fd648a50bdc8b0f0d22ba0f6460e6984260","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        return self._collect_type(key, dict, float)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _collect_string(self, key, dict):"},{"line_number":130,"context_line":"        return self._collect_type(key, dict, unicode)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def _collect_type(self, key, dict, the_type):"},{"line_number":133,"context_line":"        self.log.debug(\"Collecting data with %s\" % key)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_a396ae3b","line":130,"updated":"2015-06-25 14:41:50.000000000","message":"We could do away with these and call _collect_type directly.","commit_id":"9584cc3beb049c1b740a04543098d52ed850b8d3"},{"author":{"_account_id":12149,"name":"Dexter Fryar","email":"dexter.fryar@protonmail.com","username":"dlfryar"},"change_message_id":"297c64884da3f394efdc434ed8f58008e6a82a77","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        return self._collect_type(key, dict, float)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _collect_string(self, key, dict):"},{"line_number":130,"context_line":"        return self._collect_type(key, dict, unicode)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def _collect_type(self, key, dict, the_type):"},{"line_number":133,"context_line":"        self.log.debug(\"Collecting data with %s\" % key)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_e364b622","line":130,"in_reply_to":"fa32b979_a396ae3b","updated":"2015-06-25 14:50:47.000000000","message":"I left it in there for future use and it\u0027s consistent with the MySQL plugin code.  This allows us to add other queries in the future without worrying about the type.","commit_id":"9584cc3beb049c1b740a04543098d52ed850b8d3"},{"author":{"_account_id":11094,"name":"Tim Kuhlman","email":"timothy.kuhlman@canonical.com","username":"kuhlmant"},"change_message_id":"75eabc2114148eef96458b7a822cc943dad88798","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _collect_metrics(self, dimensions, cursor\u003dNone):"},{"line_number":83,"context_line":"        query \u003d \"select total_session_count, running_query_count from \" \\"},{"line_number":84,"context_line":"                \"v_monitor.query_metrics;\""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        try:"},{"line_number":87,"context_line":"            import pyodbc"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_961b9c1c","line":84,"updated":"2015-06-25 20:13:52.000000000","message":"The only other metric I found useful when I have run vertica is the request queue depth. Unfortunately it is a separate query, so it may or may not be worth adding \"SELECT nvl(request_queue_depth,0) AS request_queue_depth FROM v_monitor.resource_usage\"","commit_id":"94d0f15a6af3a367f013e0fbe52d50a3329fd44f"},{"author":{"_account_id":12149,"name":"Dexter Fryar","email":"dexter.fryar@protonmail.com","username":"dlfryar"},"change_message_id":"7e90bf50cbba01f8bd1bb214bf56a002f7fa9c67","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _collect_metrics(self, dimensions, cursor\u003dNone):"},{"line_number":83,"context_line":"        query \u003d \"select total_session_count, running_query_count from \" \\"},{"line_number":84,"context_line":"                \"v_monitor.query_metrics;\""},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        try:"},{"line_number":87,"context_line":"            import pyodbc"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_212b3696","line":84,"in_reply_to":"fa32b979_961b9c1c","updated":"2015-06-26 19:57:12.000000000","message":"Good suggestion.  I\u0027ll add an array of queries so we can expand it as needed.","commit_id":"94d0f15a6af3a367f013e0fbe52d50a3329fd44f"},{"author":{"_account_id":11094,"name":"Tim Kuhlman","email":"timothy.kuhlman@canonical.com","username":"kuhlmant"},"change_message_id":"75eabc2114148eef96458b7a822cc943dad88798","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        self.log.error(\"Collecting done, value %s\" % dict[key])"},{"line_number":138,"context_line":"        return the_type(dict[key])"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _collect_system_metrics(self, host, db, dimensions):"},{"line_number":141,"context_line":"        pid \u003d None"},{"line_number":142,"context_line":"        # The server needs to run locally, accessed by TCP or socket"},{"line_number":143,"context_line":"        if host in [\"localhost\", \"127.0.0.1\"] or db.port \u003d\u003d long(0):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_96bf1cfc","line":140,"updated":"2015-06-25 20:13:52.000000000","message":"Why is this type of data in this plugin? If you want to get this info for Vertica it can be collected with the process plugin.","commit_id":"94d0f15a6af3a367f013e0fbe52d50a3329fd44f"},{"author":{"_account_id":11094,"name":"Tim Kuhlman","email":"timothy.kuhlman@canonical.com","username":"kuhlmant"},"change_message_id":"6111206965c9fdeb97d62071f66d95ae34ca246a","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        self.log.error(\"Collecting done, value %s\" % dict[key])"},{"line_number":138,"context_line":"        return the_type(dict[key])"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _collect_system_metrics(self, host, db, dimensions):"},{"line_number":141,"context_line":"        pid \u003d None"},{"line_number":142,"context_line":"        # The server needs to run locally, accessed by TCP or socket"},{"line_number":143,"context_line":"        if host in [\"localhost\", \"127.0.0.1\"] or db.port \u003d\u003d long(0):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_f6d99323","line":140,"in_reply_to":"fa32b979_93d4d9bd","updated":"2015-06-26 20:39:48.000000000","message":"Unfortunately some of the code from the original fork made some poor decisions. Until we fixed it the collection run was taking about 5 seconds because of multiple forks like the one here. It should ideally be removed from the mysql plugin also.\n\nIf you remove it you won\u0027t get the same data automatically but could if you setup the process plugin which is much more efficient and keeps the code to do this in one place.","commit_id":"94d0f15a6af3a367f013e0fbe52d50a3329fd44f"},{"author":{"_account_id":12149,"name":"Dexter Fryar","email":"dexter.fryar@protonmail.com","username":"dlfryar"},"change_message_id":"56126895e7abf1367f052e64d5b11f8f2984b1ef","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        self.log.error(\"Collecting done, value %s\" % dict[key])"},{"line_number":138,"context_line":"        return the_type(dict[key])"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _collect_system_metrics(self, host, db, dimensions):"},{"line_number":141,"context_line":"        pid \u003d None"},{"line_number":142,"context_line":"        # The server needs to run locally, accessed by TCP or socket"},{"line_number":143,"context_line":"        if host in [\"localhost\", \"127.0.0.1\"] or db.port \u003d\u003d long(0):"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_93d4d9bd","line":140,"in_reply_to":"fa32b979_96bf1cfc","updated":"2015-06-26 20:18:20.000000000","message":"This data is a direct copy from the MySQL plugin.  We can also get similar data from Vertica via vsql.\n\nIf we remove this will the process plugin automatically produce the same metrics?","commit_id":"94d0f15a6af3a367f013e0fbe52d50a3329fd44f"},{"author":{"_account_id":11094,"name":"Tim Kuhlman","email":"timothy.kuhlman@canonical.com","username":"kuhlmant"},"change_message_id":"75eabc2114148eef96458b7a822cc943dad88798","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        # Read the Vertica process id from ps"},{"line_number":185,"context_line":"        if pid is None:"},{"line_number":186,"context_line":"            try:"},{"line_number":187,"context_line":"                if sys.platform.startswith(\"linux\"):"},{"line_number":188,"context_line":"                    ps \u003d subprocess.Popen([\u0027ps\u0027,"},{"line_number":189,"context_line":"                                           \u0027-C\u0027,"},{"line_number":190,"context_line":"                                           \u0027vertica\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_76493832","line":187,"updated":"2015-06-25 20:13:52.000000000","message":"I don\u0027t think this should be here at all but it definitely should be done with a subprocess, psutil can do all of this.","commit_id":"94d0f15a6af3a367f013e0fbe52d50a3329fd44f"},{"author":{"_account_id":12149,"name":"Dexter Fryar","email":"dexter.fryar@protonmail.com","username":"dlfryar"},"change_message_id":"60c7fec0c1ad2aff8d03edfa40772ff57a78acad","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        # Read the Vertica process id from ps"},{"line_number":185,"context_line":"        if pid is None:"},{"line_number":186,"context_line":"            try:"},{"line_number":187,"context_line":"                if sys.platform.startswith(\"linux\"):"},{"line_number":188,"context_line":"                    ps \u003d subprocess.Popen([\u0027ps\u0027,"},{"line_number":189,"context_line":"                                           \u0027-C\u0027,"},{"line_number":190,"context_line":"                                           \u0027vertica\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_d3bfc15e","line":187,"in_reply_to":"fa32b979_76493832","updated":"2015-06-26 20:19:26.000000000","message":"Also copied from MySQL plugin.","commit_id":"94d0f15a6af3a367f013e0fbe52d50a3329fd44f"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"4c1719ceb1772a4c716e7942c228262880096c06","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        if key not in dict:"},{"line_number":141,"context_line":"            self.log.error(\"%s returned None\" % key)"},{"line_number":142,"context_line":"            return None"},{"line_number":143,"context_line":"        self.log.error(\"Collecting done, value %s\" % dict[key])"},{"line_number":144,"context_line":"        return the_type(dict[key])"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_16b37a99","line":143,"updated":"2015-07-01 16:35:05.000000000","message":"Should probably be info, not error","commit_id":"aa375f28daa07beac6993b61a369d08d1e6f53ac"},{"author":{"_account_id":12149,"name":"Dexter Fryar","email":"dexter.fryar@protonmail.com","username":"dlfryar"},"change_message_id":"4bbff7188fcfeae850ba186a4131043c35d3d03e","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        if key not in dict:"},{"line_number":141,"context_line":"            self.log.error(\"%s returned None\" % key)"},{"line_number":142,"context_line":"            return None"},{"line_number":143,"context_line":"        self.log.error(\"Collecting done, value %s\" % dict[key])"},{"line_number":144,"context_line":"        return the_type(dict[key])"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_5beb8978","line":143,"in_reply_to":"ba3cc151_16b37a99","updated":"2015-07-07 20:09:17.000000000","message":"Good catch, should have been debug.","commit_id":"aa375f28daa07beac6993b61a369d08d1e6f53ac"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"7991061ee92963a0cdacdf99cb2135d4552c8223","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # the default dimensions"},{"line_number":51,"context_line":"        if not dimensions:"},{"line_number":52,"context_line":"            dimensions \u003d self._set_dimensions("},{"line_number":53,"context_line":"                {\u0027component\u0027: \u0027vertica\u0027, \u0027service\u0027: \u0027database\u0027}, instance)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        if (not db_host or not db_user):"},{"line_number":56,"context_line":"            raise Exception(\"Vertica host and user are needed.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_3596b693","line":53,"updated":"2015-07-14 20:34:40.000000000","message":"I guess I was thinking that the service would be \"vertica\". In the case of the MySQL plugin at, https://github.com/stackforge/monasca-agent/blob/master/monasca_agent/collector/checks_d/mysql.py, the service name is \"mysql\".\n\nThe component would be the process name of the actual vertica component that is being monitored.\n\nThere are actually two processes in Vertica:\n\n1. vertica\n2. spread\n\nThe processes in Vertica are documented at, http://my.vertica.com/docs/6.1.x/HTML/index.htm#4975.htm.","commit_id":"2ff26c441f7c1aad3b8cdd5ecc92aca16b239fb8"},{"author":{"_account_id":12149,"name":"Dexter Fryar","email":"dexter.fryar@protonmail.com","username":"dlfryar"},"change_message_id":"809a3aa564f135539837b8ce02303d37e07d7a90","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # the default dimensions"},{"line_number":51,"context_line":"        if not dimensions:"},{"line_number":52,"context_line":"            dimensions \u003d self._set_dimensions("},{"line_number":53,"context_line":"                {\u0027component\u0027: \u0027vertica\u0027, \u0027service\u0027: \u0027database\u0027}, instance)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        if (not db_host or not db_user):"},{"line_number":56,"context_line":"            raise Exception(\"Vertica host and user are needed.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_2d5e6a12","line":53,"in_reply_to":"9a41bdd9_3596b693","updated":"2015-07-14 21:45:06.000000000","message":"I looked at that too.  My thoughts were that the metric name was self describing and the dimensions were metadata about the specific metric.  In this case if we had generic service names like database, compute, network, storage, etc. you could filter easily by dimension.  If you wanted specifics then you would use the metric name.\n\nYour thoughts?\n\nGood to know on the process.  How should the \u0027spread\u0027 process be handled?","commit_id":"2ff26c441f7c1aad3b8cdd5ecc92aca16b239fb8"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"7991061ee92963a0cdacdf99cb2135d4552c8223","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            db \u003d pyodbc.connect(db_conn_str)"},{"line_number":95,"context_line":"            self.log.debug(\"Connected to Vertica\")"},{"line_number":96,"context_line":"        except (Exception, pyodbc.Error) as e:"},{"line_number":97,"context_line":"            self.log.debug(\"Error connecting to Vertica %s\" % e)"},{"line_number":98,"context_line":"            raise e"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        return db"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_55f1faff","line":97,"updated":"2015-07-14 20:34:40.000000000","message":"Should this be an error or exception log, instead of debug.","commit_id":"2ff26c441f7c1aad3b8cdd5ecc92aca16b239fb8"},{"author":{"_account_id":12149,"name":"Dexter Fryar","email":"dexter.fryar@protonmail.com","username":"dlfryar"},"change_message_id":"809a3aa564f135539837b8ce02303d37e07d7a90","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            db \u003d pyodbc.connect(db_conn_str)"},{"line_number":95,"context_line":"            self.log.debug(\"Connected to Vertica\")"},{"line_number":96,"context_line":"        except (Exception, pyodbc.Error) as e:"},{"line_number":97,"context_line":"            self.log.debug(\"Error connecting to Vertica %s\" % e)"},{"line_number":98,"context_line":"            raise e"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        return db"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_6a2538bf","line":97,"in_reply_to":"9a41bdd9_55f1faff","updated":"2015-07-14 21:45:06.000000000","message":"Probably so I\u0027m sure I carried this over from the detection code since it tries defaults.","commit_id":"2ff26c441f7c1aad3b8cdd5ecc92aca16b239fb8"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"7991061ee92963a0cdacdf99cb2135d4552c8223","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            import os"},{"line_number":170,"context_line":"            if not os.path.exists(\"/etc/odbcinst.ini\") or \\"},{"line_number":171,"context_line":"                os.path.getsize(\"/etc/odbcinst.ini\") \u003d\u003d 0:"},{"line_number":172,"context_line":"                self.log.warn(\"\\t Missing ODBC config: /etc/odbcinst.ini\")"},{"line_number":173,"context_line":"                return False"},{"line_number":174,"context_line":"        except ImportError:"},{"line_number":175,"context_line":"            self.log.warn(\"\\t Missing pyodbc dependency.  \""}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_15d13223","line":172,"updated":"2015-07-14 20:34:40.000000000","message":"Should this be an error log. Without the odbcinst.ini, then it can run.","commit_id":"2ff26c441f7c1aad3b8cdd5ecc92aca16b239fb8"},{"author":{"_account_id":12149,"name":"Dexter Fryar","email":"dexter.fryar@protonmail.com","username":"dlfryar"},"change_message_id":"809a3aa564f135539837b8ce02303d37e07d7a90","unresolved":false,"context_lines":[{"line_number":169,"context_line":"            import os"},{"line_number":170,"context_line":"            if not os.path.exists(\"/etc/odbcinst.ini\") or \\"},{"line_number":171,"context_line":"                os.path.getsize(\"/etc/odbcinst.ini\") \u003d\u003d 0:"},{"line_number":172,"context_line":"                self.log.warn(\"\\t Missing ODBC config: /etc/odbcinst.ini\")"},{"line_number":173,"context_line":"                return False"},{"line_number":174,"context_line":"        except ImportError:"},{"line_number":175,"context_line":"            self.log.warn(\"\\t Missing pyodbc dependency.  \""}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_4deacedc","line":172,"in_reply_to":"9a41bdd9_15d13223","updated":"2015-07-14 21:45:06.000000000","message":"Personal preference I suppose.  I can make that change to error if that\u0027s more desirable.","commit_id":"2ff26c441f7c1aad3b8cdd5ecc92aca16b239fb8"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"7991061ee92963a0cdacdf99cb2135d4552c8223","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                self.log.warn(\"\\t Missing ODBC config: /etc/odbcinst.ini\")"},{"line_number":173,"context_line":"                return False"},{"line_number":174,"context_line":"        except ImportError:"},{"line_number":175,"context_line":"            self.log.warn(\"\\t Missing pyodbc dependency.  \""},{"line_number":176,"context_line":"                     \"Please install via Ansilbe or \""},{"line_number":177,"context_line":"                     \"\u0027(venv) pip install pyodbc.\u0027\")"},{"line_number":178,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_d5742a37","line":175,"updated":"2015-07-14 20:34:40.000000000","message":"Should this be an error? Similar comment to above.","commit_id":"2ff26c441f7c1aad3b8cdd5ecc92aca16b239fb8"},{"author":{"_account_id":12149,"name":"Dexter Fryar","email":"dexter.fryar@protonmail.com","username":"dlfryar"},"change_message_id":"809a3aa564f135539837b8ce02303d37e07d7a90","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                self.log.warn(\"\\t Missing ODBC config: /etc/odbcinst.ini\")"},{"line_number":173,"context_line":"                return False"},{"line_number":174,"context_line":"        except ImportError:"},{"line_number":175,"context_line":"            self.log.warn(\"\\t Missing pyodbc dependency.  \""},{"line_number":176,"context_line":"                     \"Please install via Ansilbe or \""},{"line_number":177,"context_line":"                     \"\u0027(venv) pip install pyodbc.\u0027\")"},{"line_number":178,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_edc16255","line":175,"in_reply_to":"9a41bdd9_d5742a37","updated":"2015-07-14 21:45:06.000000000","message":"Personal preference I suppose.  I can make that change to error if that\u0027s more desirable.","commit_id":"2ff26c441f7c1aad3b8cdd5ecc92aca16b239fb8"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"85a10c90a7ccd21447d9ab754a0a2b9fc4444e34","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    \u0027total_session_count\u0027: (\u0027vertica.db.sess.cnt.tot\u0027, GAUGE),"},{"line_number":14,"context_line":"    \u0027running_query_count\u0027: (\u0027vertica.db.query.cnt.curr\u0027, GAUGE),"},{"line_number":15,"context_line":"    \u0027request_queue_depth\u0027: (\u0027vertica.db.queue.cnt.curr\u0027, GAUGE)"},{"line_number":16,"context_line":"}"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class Vertica(checks.AgentCheck):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a41bdd9_cea699ad","line":16,"updated":"2015-07-15 20:57:03.000000000","message":"Now that I understand the names, I\u0027m just wondering about the \"conventions\" that we\u0027ve been using so far. \n\nI have questions about the following:\n\n1. vertica.db: Why vertica.db and not just vertica. It seems redundant to add the .db and it isn\u0027t providing any grouping information at the moment. Usually, \".\u0027 is used to identify groups of things that you would like to visually group on, as in an explorer like widget. The reason we used \u0027.\u0027 at all was for visually grouping in Graphite or Grafana. But, with so many dots, this actually becomes harder to drill down on.\n\n2. Why so many \u0027.\u0027 in the metric name? Do you really need to group your session and query metrics differently. So far we haven\u0027t been doing that.\n\n3. Why use acronyms such as sess, cnt and tot? We\u0027ve been using the full words in most places, such as \"total\" \n\nI think looking into whatever conventions we\u0027ve established so far you would end-up something looking like:\n\nvertica.session_count_total\nvertica.query_count\nvertica.queue_depth or vertica.queue.size","commit_id":"0655e171485a384e773c060206cd8bf4fcffe122"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"23a942cf4629bf5e2e64b0c41d249dfb55e54209","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    \u0027total_session_count\u0027: (\u0027vertica.db.sess.cnt.tot\u0027, GAUGE),"},{"line_number":14,"context_line":"    \u0027running_query_count\u0027: (\u0027vertica.db.query.cnt.curr\u0027, GAUGE),"},{"line_number":15,"context_line":"    \u0027request_queue_depth\u0027: (\u0027vertica.db.queue.cnt.curr\u0027, GAUGE)"},{"line_number":16,"context_line":"}"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class Vertica(checks.AgentCheck):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a41bdd9_7db9d714","line":16,"in_reply_to":"9a41bdd9_1db3140c","updated":"2015-07-17 15:47:32.000000000","message":"Yes, that is what I meant, vertica.queue_size","commit_id":"0655e171485a384e773c060206cd8bf4fcffe122"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"4383f69776a3ff38cc66533f6aa576b5f3b1d3ac","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    \u0027total_session_count\u0027: (\u0027vertica.db.sess.cnt.tot\u0027, GAUGE),"},{"line_number":14,"context_line":"    \u0027running_query_count\u0027: (\u0027vertica.db.query.cnt.curr\u0027, GAUGE),"},{"line_number":15,"context_line":"    \u0027request_queue_depth\u0027: (\u0027vertica.db.queue.cnt.curr\u0027, GAUGE)"},{"line_number":16,"context_line":"}"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class Vertica(checks.AgentCheck):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a41bdd9_1db3140c","line":16,"in_reply_to":"9a41bdd9_cea699ad","updated":"2015-07-16 23:12:08.000000000","message":"Did you mean vertica.queue_size?\n\nI agree that the .db does not add anything and is inconsistent with the other metrics","commit_id":"0655e171485a384e773c060206cd8bf4fcffe122"}],"monasca_setup/detection/plugins/vertica.py":[{"author":{"_account_id":11094,"name":"Tim Kuhlman","email":"timothy.kuhlman@canonical.com","username":"kuhlmant"},"change_message_id":"0f7d3ef3ba4aa9fc1d491a21018534bff6a977b8","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    \"\"\""},{"line_number":85,"context_line":"    @staticmethod"},{"line_number":86,"context_line":"    def _read_dot_config():"},{"line_number":87,"context_line":"        \"\"\""},{"line_number":88,"context_line":"        :rtype : (dict{string: string})"},{"line_number":89,"context_line":"        db_name, db_user, db_pass, db_host, db_port, db_driver, db_conn_str"},{"line_number":90,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa32b979_2956ff29","line":87,"updated":"2015-07-30 14:16:26.000000000","message":"Since you are making up the config file why not simplify this and just use yaml like most of other config. That would reduce this method quite a bit making it the entire thing basically:\ndefaults \u003d { \u0027db_name\u0027: \u0027dbadmin\u0027, . .. }\nwith open(file, \u0027r\u0027) as dotfile:\n   values \u003d yaml.load(dotfile)\nreturn defaults.update(values)\n\nor actually to skip nones the last line is something like\nreturn defaults.update({k:v for k,v in values.iteritems() if v})","commit_id":"9584cc3beb049c1b740a04543098d52ed850b8d3"},{"author":{"_account_id":11094,"name":"Tim Kuhlman","email":"timothy.kuhlman@canonical.com","username":"kuhlmant"},"change_message_id":"3956ddad207346190a8c97060986f47bb1057cb0","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    \"\"\""},{"line_number":85,"context_line":"    @staticmethod"},{"line_number":86,"context_line":"    def _read_dot_config():"},{"line_number":87,"context_line":"        \"\"\""},{"line_number":88,"context_line":"        :rtype : (dict{string: string})"},{"line_number":89,"context_line":"        db_name, db_user, db_pass, db_host, db_port, db_driver, db_conn_str"},{"line_number":90,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_51c6899a","line":87,"updated":"2015-06-25 16:10:18.000000000","message":"Since you are making up the config file why not simplify this and just use yaml like most of other config. That would reduce this method quite a bit making it the entire thing basically:\ndefaults \u003d { \u0027db_name\u0027: \u0027dbadmin\u0027, . .. }\nwith open(file, \u0027r\u0027) as dotfile:\n   values \u003d yaml.load(dotfile)\nreturn defaults.update(values)\nor actually to skip nones the last line is something like return defaults.update({k:v for k,v in values.iteritems() if v})","commit_id":"94d0f15a6af3a367f013e0fbe52d50a3329fd44f"},{"author":{"_account_id":11094,"name":"Tim Kuhlman","email":"timothy.kuhlman@canonical.com","username":"kuhlmant"},"change_message_id":"e3d74483dc61176577f7c95f77afa07e874e3c98","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    \"\"\""},{"line_number":85,"context_line":"    @staticmethod"},{"line_number":86,"context_line":"    def _read_dot_config():"},{"line_number":87,"context_line":"        \"\"\""},{"line_number":88,"context_line":"        :rtype : (dict{string: string})"},{"line_number":89,"context_line":"        db_name, db_user, db_pass, db_host, db_port, db_driver, db_conn_str"},{"line_number":90,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_f360c5d1","line":87,"in_reply_to":"fa32b979_41af5a2b","updated":"2015-06-26 20:00:19.000000000","message":"I just meant you are making up the format of the config file so you could make a format that is easier to parse, making the code simpler.","commit_id":"94d0f15a6af3a367f013e0fbe52d50a3329fd44f"},{"author":{"_account_id":12149,"name":"Dexter Fryar","email":"dexter.fryar@protonmail.com","username":"dlfryar"},"change_message_id":"7e90bf50cbba01f8bd1bb214bf56a002f7fa9c67","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    \"\"\""},{"line_number":85,"context_line":"    @staticmethod"},{"line_number":86,"context_line":"    def _read_dot_config():"},{"line_number":87,"context_line":"        \"\"\""},{"line_number":88,"context_line":"        :rtype : (dict{string: string})"},{"line_number":89,"context_line":"        db_name, db_user, db_pass, db_host, db_port, db_driver, db_conn_str"},{"line_number":90,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_41af5a2b","line":87,"in_reply_to":"fa32b979_51c6899a","updated":"2015-06-26 19:57:12.000000000","message":"This reads the config from the dot file.  If there is no dot file then a config is returned.","commit_id":"94d0f15a6af3a367f013e0fbe52d50a3329fd44f"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"4c1719ceb1772a4c716e7942c228262880096c06","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                    pyodbc.ProgrammingError, pyodbc.NotSupportedError,"},{"line_number":56,"context_line":"                    pyodbc.DatabaseError, pyodbc.Error) as e:"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"                log.debug(\"\\tCaught and exception configuring \""},{"line_number":59,"context_line":"                          \"plugin {:s}\".format(e))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"                log.warn(\u0027Unable to log into the Vertica database; \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_f6e05698","line":58,"updated":"2015-07-01 16:35:05.000000000","message":"Should be \u0027an\u0027, not \u0027and\u0027","commit_id":"aa375f28daa07beac6993b61a369d08d1e6f53ac"},{"author":{"_account_id":12149,"name":"Dexter Fryar","email":"dexter.fryar@protonmail.com","username":"dlfryar"},"change_message_id":"4bbff7188fcfeae850ba186a4131043c35d3d03e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                    pyodbc.ProgrammingError, pyodbc.NotSupportedError,"},{"line_number":56,"context_line":"                    pyodbc.DatabaseError, pyodbc.Error) as e:"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"                log.debug(\"\\tCaught and exception configuring \""},{"line_number":59,"context_line":"                          \"plugin {:s}\".format(e))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"                log.warn(\u0027Unable to log into the Vertica database; \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_fba37d9c","line":58,"in_reply_to":"ba3cc151_f6e05698","updated":"2015-07-07 20:09:17.000000000","message":"Done","commit_id":"aa375f28daa07beac6993b61a369d08d1e6f53ac"},{"author":{"_account_id":15027,"name":"Michael Hoppal","email":"michael.jam.hoppal@hpe.com","username":"michael-hoppal"},"change_message_id":"245d698bfcdf2856fd0560d71c6119414b9e96b4","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            if not os.path.exists(\"/etc/odbcinst.ini\"):"},{"line_number":152,"context_line":"                log.error(\"\\t Missing ODBC config: /etc/odbcinst.ini\")"},{"line_number":153,"context_line":"                return False"},{"line_number":154,"context_line":"        except ImportError:"},{"line_number":155,"context_line":"            return False"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_91df940c","line":154,"updated":"2015-07-01 16:47:12.000000000","message":"We log an error here, if they don\u0027t have the packages installed the plug in will not succeed but the user will not know that as there was no error given.","commit_id":"aa375f28daa07beac6993b61a369d08d1e6f53ac"},{"author":{"_account_id":12149,"name":"Dexter Fryar","email":"dexter.fryar@protonmail.com","username":"dlfryar"},"change_message_id":"4bbff7188fcfeae850ba186a4131043c35d3d03e","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            if not os.path.exists(\"/etc/odbcinst.ini\"):"},{"line_number":152,"context_line":"                log.error(\"\\t Missing ODBC config: /etc/odbcinst.ini\")"},{"line_number":153,"context_line":"                return False"},{"line_number":154,"context_line":"        except ImportError:"},{"line_number":155,"context_line":"            return False"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba3cc151_1b3bc139","line":154,"in_reply_to":"ba3cc151_91df940c","updated":"2015-07-07 20:09:17.000000000","message":"Not sure what else we can do here.\n\nmonasca-agent/docs/Agent.md\n# Installing\n\nThe assumptions/instructions are listed in the readme to either use ansible or the package manager to install the dependencies.\n\nThe MySQL plugin does the same thing.  Tries to do the import then bails out and logs a warning.\n\nAny additional thoughts on how to solve this problem?","commit_id":"aa375f28daa07beac6993b61a369d08d1e6f53ac"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"7991061ee92963a0cdacdf99cb2135d4552c8223","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"        \"\"\""},{"line_number":31,"context_line":"        if monasca_setup.detection.find_process_name(\u0027vertica\u0027) is not None:"},{"line_number":32,"context_line":"            self.available \u003d True"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def build_config(self):"},{"line_number":35,"context_line":"        \"\"\"Build the config as a Plugins object and return."}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_15de12dd","line":32,"updated":"2015-07-14 20:34:40.000000000","message":"See my previous comments, but might want to consider \"spread\" too.","commit_id":"2ff26c441f7c1aad3b8cdd5ecc92aca16b239fb8"},{"author":{"_account_id":12149,"name":"Dexter Fryar","email":"dexter.fryar@protonmail.com","username":"dlfryar"},"change_message_id":"809a3aa564f135539837b8ce02303d37e07d7a90","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"        \"\"\""},{"line_number":31,"context_line":"        if monasca_setup.detection.find_process_name(\u0027vertica\u0027) is not None:"},{"line_number":32,"context_line":"            self.available \u003d True"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def build_config(self):"},{"line_number":35,"context_line":"        \"\"\"Build the config as a Plugins object and return."}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_8da3f6ff","line":32,"in_reply_to":"9a41bdd9_15de12dd","updated":"2015-07-14 21:45:06.000000000","message":"If \u0027spread\u0027 is down will the database fail connection/vsql requests?","commit_id":"2ff26c441f7c1aad3b8cdd5ecc92aca16b239fb8"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"7991061ee92963a0cdacdf99cb2135d4552c8223","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                          \"plugin {:s}\".format(e))"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"                log.warn(\u0027Unable to log into the Vertica database; \u0027"},{"line_number":76,"context_line":"                         \u0027the Vertica plugin is not configured. {:s}\u0027.format(e))"},{"line_number":77,"context_line":"        return config"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    \"\"\"Read the private dot config file e.g. /root/.vertica.cnf"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_75a2fe4c","line":76,"updated":"2015-07-14 20:34:40.000000000","message":"Should probably be log.error or log.exception statements.","commit_id":"2ff26c441f7c1aad3b8cdd5ecc92aca16b239fb8"},{"author":{"_account_id":12149,"name":"Dexter Fryar","email":"dexter.fryar@protonmail.com","username":"dlfryar"},"change_message_id":"809a3aa564f135539837b8ce02303d37e07d7a90","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                          \"plugin {:s}\".format(e))"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"                log.warn(\u0027Unable to log into the Vertica database; \u0027"},{"line_number":76,"context_line":"                         \u0027the Vertica plugin is not configured. {:s}\u0027.format(e))"},{"line_number":77,"context_line":"        return config"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    \"\"\"Read the private dot config file e.g. /root/.vertica.cnf"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_cd39fea5","line":76,"in_reply_to":"9a41bdd9_75a2fe4c","updated":"2015-07-14 21:45:06.000000000","message":"This is the detection plugin which means the dot file config was bad or the defaults we used (which will likely only work with monasca-vagrant) did not work.  My thoughts were that I\u0027d like to see a warning so the user could fix the config or the database whichever is the problem.","commit_id":"2ff26c441f7c1aad3b8cdd5ecc92aca16b239fb8"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"7991061ee92963a0cdacdf99cb2135d4552c8223","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            # if the file is not there or the section doesn\u0027t exist"},{"line_number":110,"context_line":"            log.debug(\"\\tCaught exception {:s}\".format(e))"},{"line_number":111,"context_line":"            log.warn(\"\\tNo dot file (/root/.vertica.cnf) found.  \""},{"line_number":112,"context_line":"                     \"Configuring with default values.\")"},{"line_number":113,"context_line":"            pass"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"9a41bdd9_9028f087","line":112,"updated":"2015-07-14 20:34:40.000000000","message":"In this case I think the warn is probably good enough, as  you are going to continue on.","commit_id":"2ff26c441f7c1aad3b8cdd5ecc92aca16b239fb8"}],"requirements.txt":[{"author":{"_account_id":11094,"name":"Tim Kuhlman","email":"timothy.kuhlman@canonical.com","username":"kuhlmant"},"change_message_id":"0f7d3ef3ba4aa9fc1d491a21018534bff6a977b8","unresolved":false,"context_lines":[{"line_number":5,"context_line":"pymongo"},{"line_number":6,"context_line":"pylint"},{"line_number":7,"context_line":"psutil\u003e\u003d2.0"},{"line_number":8,"context_line":"pyodbc"},{"line_number":9,"context_line":"python-memcached"},{"line_number":10,"context_line":"PyYAML"},{"line_number":11,"context_line":"redis"}],"source_content_type":"text/plain","patch_set":3,"id":"fa32b979_cee759e1","line":8,"updated":"2015-07-30 14:16:26.000000000","message":"This should be removed. The general policy has been to only add to the requirements packages needed for core functionality not for specific plugins. In some ways this is confusing but without it the requirements list grows really large and includes many packages not used by most people.","commit_id":"9584cc3beb049c1b740a04543098d52ed850b8d3"},{"author":{"_account_id":11094,"name":"Tim Kuhlman","email":"timothy.kuhlman@canonical.com","username":"kuhlmant"},"change_message_id":"3956ddad207346190a8c97060986f47bb1057cb0","unresolved":false,"context_lines":[{"line_number":5,"context_line":"pymongo"},{"line_number":6,"context_line":"pylint"},{"line_number":7,"context_line":"psutil\u003e\u003d2.0"},{"line_number":8,"context_line":"pyodbc"},{"line_number":9,"context_line":"python-memcached"},{"line_number":10,"context_line":"PyYAML"},{"line_number":11,"context_line":"redis"}],"source_content_type":"text/plain","patch_set":4,"id":"fa32b979_f19f9db1","line":8,"updated":"2015-06-25 16:10:18.000000000","message":"This shouldn\u0027t be here. It is specific to a single plugin and if we add all the plugin dependencies this becomes an overwhelming list that isn\u0027t used by most people.","commit_id":"94d0f15a6af3a367f013e0fbe52d50a3329fd44f"},{"author":{"_account_id":12149,"name":"Dexter Fryar","email":"dexter.fryar@protonmail.com","username":"dlfryar"},"change_message_id":"7e90bf50cbba01f8bd1bb214bf56a002f7fa9c67","unresolved":false,"context_lines":[{"line_number":5,"context_line":"pymongo"},{"line_number":6,"context_line":"pylint"},{"line_number":7,"context_line":"psutil\u003e\u003d2.0"},{"line_number":8,"context_line":"pyodbc"},{"line_number":9,"context_line":"python-memcached"},{"line_number":10,"context_line":"PyYAML"},{"line_number":11,"context_line":"redis"}],"source_content_type":"text/plain","patch_set":4,"id":"fa32b979_21e1f69a","line":8,"in_reply_to":"fa32b979_f19f9db1","updated":"2015-06-26 19:57:12.000000000","message":"Done","commit_id":"94d0f15a6af3a367f013e0fbe52d50a3329fd44f"}]}
