)]}'
{"monagent/collector/checks/collector.py":[{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"80942243363d7a63ea819ddc851d18ea606e1108","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    def collector_stats(self, num_metrics, num_events, collection_time, emit_time):"},{"line_number":109,"context_line":"        metrics \u003d {}"},{"line_number":110,"context_line":"        thread_count \u003d threading.active_count()"},{"line_number":111,"context_line":"        metrics[\u0027collector.threads.count\u0027] \u003d thread_count"},{"line_number":112,"context_line":"        if thread_count \u003e MAX_THREADS_COUNT:"},{"line_number":113,"context_line":"            log.warn(\"Collector thread count is high: %d\" % thread_count)"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_efd8931f","line":111,"updated":"2014-08-18 21:05:39.000000000","message":"Is \"threads\", \"collection\" and \"emit\" really meant to group things. Seems like they aren\u0027t meant to be groups, just names as in active_count or collection_time.","commit_id":"6765925324dba293864d0b1603443aab808a1dad"},{"author":{"_account_id":12108,"name":"Gary Hessler","email":"gary.hessler@hp.com","username":"garyh"},"change_message_id":"a556073310a121d433da24195fe45470c6e46f54","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    def collector_stats(self, num_metrics, num_events, collection_time, emit_time):"},{"line_number":109,"context_line":"        metrics \u003d {}"},{"line_number":110,"context_line":"        thread_count \u003d threading.active_count()"},{"line_number":111,"context_line":"        metrics[\u0027collector.threads.count\u0027] \u003d thread_count"},{"line_number":112,"context_line":"        if thread_count \u003e MAX_THREADS_COUNT:"},{"line_number":113,"context_line":"            log.warn(\"Collector thread count is high: %d\" % thread_count)"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_3264b0b8","line":111,"in_reply_to":"1abeadc6_efd8931f","updated":"2014-08-18 21:36:03.000000000","message":"Sure, that makes sense.","commit_id":"6765925324dba293864d0b1603443aab808a1dad"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"80942243363d7a63ea819ddc851d18ea606e1108","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            log.info(\"Collection time (s) is high: %.1f, metrics count: %d, events count: %d\" %"},{"line_number":118,"context_line":"                     (collection_time, num_metrics, num_events))"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        metrics[\u0027collector.emit.time\u0027] \u003d emit_time"},{"line_number":121,"context_line":"        if emit_time is not None and emit_time \u003e MAX_EMIT_TIME:"},{"line_number":122,"context_line":"            log.info(\"Emit time (s) is high: %.1f, metrics count: %d, events count: %d\" %"},{"line_number":123,"context_line":"                     (emit_time, num_metrics, num_events))"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_6f3ba33a","line":120,"updated":"2014-08-18 21:05:39.000000000","message":"So, now that the monagent prefix removed from this, is there a way, such as service\u003dmonasca, component\u003dcollector, to identify this. \n\nIf that is the case, should collector even be removes from the metrics name so you would have a metric called \"collection_time\" with a service\u003dmonasca and component\u003dcollector?","commit_id":"6765925324dba293864d0b1603443aab808a1dad"},{"author":{"_account_id":12108,"name":"Gary Hessler","email":"gary.hessler@hp.com","username":"garyh"},"change_message_id":"a556073310a121d433da24195fe45470c6e46f54","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            log.info(\"Collection time (s) is high: %.1f, metrics count: %d, events count: %d\" %"},{"line_number":118,"context_line":"                     (collection_time, num_metrics, num_events))"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        metrics[\u0027collector.emit.time\u0027] \u003d emit_time"},{"line_number":121,"context_line":"        if emit_time is not None and emit_time \u003e MAX_EMIT_TIME:"},{"line_number":122,"context_line":"            log.info(\"Emit time (s) is high: %.1f, metrics count: %d, events count: %d\" %"},{"line_number":123,"context_line":"                     (emit_time, num_metrics, num_events))"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_b26fe091","line":120,"in_reply_to":"1abeadc6_6f3ba33a","updated":"2014-08-18 21:36:03.000000000","message":"Yes, I like that approach.","commit_id":"6765925324dba293864d0b1603443aab808a1dad"}],"monagent/collector/checks/system/unix.py":[{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"80942243363d7a63ea819ddc851d18ea606e1108","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            else:"},{"line_number":120,"context_line":"                usage_data[\u0027%s.disk.total_kbytes\u0027 % parts[0]] \u003d parts[1]"},{"line_number":121,"context_line":"                usage_data[\u0027%s.disk.used_kbytes\u0027 % parts[0]] \u003d parts[2]"},{"line_number":122,"context_line":"                usage_data[\u0027%s.disk.free_kbytes\u0027 % parts[0]] \u003d parts[3]"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        return usage_data"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_8fdb9fec","line":122,"updated":"2014-08-18 21:05:39.000000000","message":"From an alarming stand-point it is much user to alarm something that is expressed as a percentage. So, does sp,e like the metric \"disk_inode_utilization\" make sense.","commit_id":"6765925324dba293864d0b1603443aab808a1dad"},{"author":{"_account_id":12108,"name":"Gary Hessler","email":"gary.hessler@hp.com","username":"garyh"},"change_message_id":"a556073310a121d433da24195fe45470c6e46f54","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            else:"},{"line_number":120,"context_line":"                usage_data[\u0027%s.disk.total_kbytes\u0027 % parts[0]] \u003d parts[1]"},{"line_number":121,"context_line":"                usage_data[\u0027%s.disk.used_kbytes\u0027 % parts[0]] \u003d parts[2]"},{"line_number":122,"context_line":"                usage_data[\u0027%s.disk.free_kbytes\u0027 % parts[0]] \u003d parts[3]"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        return usage_data"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_328e702f","line":122,"in_reply_to":"1abeadc6_8fdb9fec","updated":"2014-08-18 21:36:03.000000000","message":"Sure, we can calculate the percentage and collapse these into one metric.","commit_id":"6765925324dba293864d0b1603443aab808a1dad"},{"author":{"_account_id":12443,"name":"David Schroeder","email":"openstack@a7n.net","username":"dschroeder"},"change_message_id":"a35c4e865b4226875227ee1627a14f72c2e9eaac","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        load \u003d [res.replace(\u0027,\u0027, \u0027.\u0027) for res in re.findall(r\u0027([0-9]+[\\.,]\\d+)\u0027, uptime)]"},{"line_number":438,"context_line":"        return {\u0027cpu.load.avg_1_min\u0027: float(load[0]),"},{"line_number":439,"context_line":"                \u0027cpu.load.avg_5_min\u0027: float(load[1]),"},{"line_number":440,"context_line":"                \u0027cpu.load.avg_15_min\u0027: float(load[2]),"},{"line_number":441,"context_line":"                }"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_72b628db","line":440,"updated":"2014-08-18 22:17:41.000000000","message":"The \"load average\" is a single entity, so I don\u0027t think \"load\" should be in a separate hearchy.  We could either do \"cpu.load_avg_XX_min\" or \"cpu.loadaverage_XX_min\" with the latter better differentiating between words and significant separators.","commit_id":"6765925324dba293864d0b1603443aab808a1dad"},{"author":{"_account_id":12108,"name":"Gary Hessler","email":"gary.hessler@hp.com","username":"garyh"},"change_message_id":"56f97de4620d16acd77ed36f4986f7f71a99883b","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        load \u003d [res.replace(\u0027,\u0027, \u0027.\u0027) for res in re.findall(r\u0027([0-9]+[\\.,]\\d+)\u0027, uptime)]"},{"line_number":438,"context_line":"        return {\u0027cpu.load.avg_1_min\u0027: float(load[0]),"},{"line_number":439,"context_line":"                \u0027cpu.load.avg_5_min\u0027: float(load[1]),"},{"line_number":440,"context_line":"                \u0027cpu.load.avg_15_min\u0027: float(load[2]),"},{"line_number":441,"context_line":"                }"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_d2e4573d","line":440,"in_reply_to":"1abeadc6_72b628db","updated":"2014-08-19 00:10:39.000000000","message":"Ok, will change to cpu.load_xxx_min","commit_id":"6765925324dba293864d0b1603443aab808a1dad"},{"author":{"_account_id":1976,"name":"Jonathan Halterman","email":"jhalterman@hp.com","username":"jhalterman"},"change_message_id":"77005dd464411a8c9cbf20cd3630637e8c465495","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                self.logger.exception(\"Cannot parse %s\" % (parts,))"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"            if inodes:"},{"line_number":116,"context_line":"                usage_data[\u0027%s.disk_inode_utilization_perc\u0027 % parts[0]] \u003d float(parts[2]) / parts[1] * 100"},{"line_number":117,"context_line":"            else:"},{"line_number":118,"context_line":"                usage_data[\u0027%s.disk_space_utilization_perc\u0027 % parts[0]] \u003d float(parts[2]) / parts[1] * 100"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_8a3249f0","line":116,"updated":"2014-08-20 23:11:08.000000000","message":"_perc is redundant, IMO, since utilization is always a percentage.","commit_id":"b65128c818256b8e87e6e5e7bb0dfa3784601911"},{"author":{"_account_id":1976,"name":"Jonathan Halterman","email":"jhalterman@hp.com","username":"jhalterman"},"change_message_id":"77005dd464411a8c9cbf20cd3630637e8c465495","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            names \u003d {\"rkB/s\": \"io.read_kbytes_sec\","},{"line_number":271,"context_line":"                     \"r/s\": \"io.read_req_sec\","},{"line_number":272,"context_line":"                     \"wkB/s\": \"io.write_kbytes_sec\","},{"line_number":273,"context_line":"                     \"w/s\": \"io.write_req_sec\"}"},{"line_number":274,"context_line":"        # translate if possible"},{"line_number":275,"context_line":"        return names.get(metric_name, metric_name)"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_0ab3990a","line":273,"updated":"2014-08-20 23:11:08.000000000","message":"Can we measure read bytes and write bytes since that\u0027s what we measure elsewhere (as opposed to kilobytes)?","commit_id":"b65128c818256b8e87e6e5e7bb0dfa3784601911"}],"monagent/collector/checks_d/mysql.py":[{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"80942243363d7a63ea819ddc851d18ea606e1108","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            instance)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        if \u0027service\u0027 not in dimensions:"},{"line_number":71,"context_line":"            dimensions.update({\u0027service\u0027: \u0027mysql\u0027})"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        if (not host or not user) and not defaults_file:"},{"line_number":74,"context_line":"            raise Exception(\"Mysql host and user are needed.\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_0fbdcf68","line":71,"updated":"2014-08-18 21:05:39.000000000","message":"Is this correct for OpenStack. In some cases MySQL will be a shared service used by many service, such as Nova, Swift, ... In other cases, MySQL will be part of an existing service. In the former I can see service\u003dmysql and component\u003dmysqld. In the latter case I could see service\u003dcompute and component\u003dmysqld.\n\nDoes the change above address this?","commit_id":"6765925324dba293864d0b1603443aab808a1dad"},{"author":{"_account_id":12108,"name":"Gary Hessler","email":"gary.hessler@hp.com","username":"garyh"},"change_message_id":"a556073310a121d433da24195fe45470c6e46f54","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            instance)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        if \u0027service\u0027 not in dimensions:"},{"line_number":71,"context_line":"            dimensions.update({\u0027service\u0027: \u0027mysql\u0027})"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        if (not host or not user) and not defaults_file:"},{"line_number":74,"context_line":"            raise Exception(\"Mysql host and user are needed.\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_d249bcd1","line":71,"in_reply_to":"1abeadc6_0fbdcf68","updated":"2014-08-18 21:36:03.000000000","message":"Currently we only send one set of metrics for each mySQL server.  In that case, what OpenStack service would the agent pick and how would it know what services are using a particular mySQL server?\n\nOr are you proposing sending a set of mySQL metrics for each service?  This seems redundant and not very useful as the metrics would be identical for every service.\n\nFrom an OpenStack perspective, it seems like since the mySQL server is used by multiple services, it merits a service name of it\u0027s own and should be monitored separately.","commit_id":"6765925324dba293864d0b1603443aab808a1dad"},{"author":{"_account_id":12108,"name":"Gary Hessler","email":"gary.hessler@hp.com","username":"garyh"},"change_message_id":"632a4a579d787226786fb787c6b8fdf6f17f0015","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            instance)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        if \u0027service\u0027 not in dimensions:"},{"line_number":71,"context_line":"            dimensions.update({\u0027service\u0027: \u0027mysql\u0027})"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        if (not host or not user) and not defaults_file:"},{"line_number":74,"context_line":"            raise Exception(\"Mysql host and user are needed.\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_a01041a9","line":71,"in_reply_to":"1abeadc6_817194e2","updated":"2014-08-19 18:23:16.000000000","message":"This can be accomplished by specifying the service as a dimension in the plugin config.  Any dimensions in the plugin config instance will override the defaults.  The issue here is there is currently no way to configure this automatically and the \u0027service\u003dnova\u0027 dimension for instance would need to be added manually.  So if no service dimension is specified in the instance of the plugin config file, the default of \u0027service \u003d mySQL\u0027 would be used.  Is that sufficient for now?","commit_id":"6765925324dba293864d0b1603443aab808a1dad"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"119406707fb82cc80fa4611f12083e7d67b3238f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            instance)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        if \u0027service\u0027 not in dimensions:"},{"line_number":71,"context_line":"            dimensions.update({\u0027service\u0027: \u0027mysql\u0027})"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        if (not host or not user) and not defaults_file:"},{"line_number":74,"context_line":"            raise Exception(\"Mysql host and user are needed.\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_817194e2","line":71,"in_reply_to":"1abeadc6_d249bcd1","updated":"2014-08-19 15:20:25.000000000","message":"What I was thinking is that in the case where MySQL is shared across multiple services, then it is the MySQL service and component \u003d mysqld. But if it is the case the MySQL is \"owned\" or part of a service similar to what we do in public cloud, then service \u003d compute and component \u003d mysqld. \n\nThe difference being that in one case MySQL spans multiple service and can be viewed as a service of it\u0027s own. In the other case, MySQL is continaed within or owned by a service, like compute, so service \u003d compute makes more sense in that case.\n\nI\u0027m not suggesting that we send the same set of metrics for multiple services.\n\nIf that is hard to do right now, we should mark it down and list it as a feature add in the future. For Helion, I think we are covered. When we move Monasca into public cloud, what we have would work, but it isn\u0027t as descriptive.\n\nThis same argument/logic would apply to all services, such as RabbitMQ.","commit_id":"6765925324dba293864d0b1603443aab808a1dad"}],"monagent/collector/checks_d/process.py":[{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"119406707fb82cc80fa4611f12083e7d67b3238f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"                     \u0027process.mem.rss\u0027,"},{"line_number":11,"context_line":"                     \u0027process.mem.vms\u0027,"},{"line_number":12,"context_line":"                     \u0027process.mem.real\u0027,"},{"line_number":13,"context_line":"                     \u0027process.open_file_decorators\u0027,"},{"line_number":14,"context_line":"                     \u0027process.io.read_count\u0027,"},{"line_number":15,"context_line":"                     \u0027process.io.write_count\u0027,"},{"line_number":16,"context_line":"                     \u0027process.io.read_bytes\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_bc3a3332","line":13,"updated":"2014-08-19 15:20:25.000000000","message":"Should this be called a file_descriptor. Is this some new terminology that I have never heard before?\n\nI think we should open a hgh-level ticket somewhere that would cover supplying percentages. For example, in the case of file descriptiors it is nice knowing the number of open file descriptors. But, it is a lot harder to alarm on something like this unless it is expressed as a percentage the max number of file descriptors which I believe is a system parameter.","commit_id":"6765925324dba293864d0b1603443aab808a1dad"},{"author":{"_account_id":12108,"name":"Gary Hessler","email":"gary.hessler@hp.com","username":"garyh"},"change_message_id":"632a4a579d787226786fb787c6b8fdf6f17f0015","unresolved":false,"context_lines":[{"line_number":10,"context_line":"                     \u0027process.mem.rss\u0027,"},{"line_number":11,"context_line":"                     \u0027process.mem.vms\u0027,"},{"line_number":12,"context_line":"                     \u0027process.mem.real\u0027,"},{"line_number":13,"context_line":"                     \u0027process.open_file_decorators\u0027,"},{"line_number":14,"context_line":"                     \u0027process.io.read_count\u0027,"},{"line_number":15,"context_line":"                     \u0027process.io.write_count\u0027,"},{"line_number":16,"context_line":"                     \u0027process.io.read_bytes\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_dbe28c00","line":13,"in_reply_to":"1abeadc6_bc3a3332","updated":"2014-08-19 18:23:16.000000000","message":"Opened a bug report in LaunchPad to take a look at the agent metrics where it would make sense to send as percentages:\nhttps://bugs.launchpad.net/monasca/+bug/1358869","commit_id":"6765925324dba293864d0b1603443aab808a1dad"},{"author":{"_account_id":1976,"name":"Jonathan Halterman","email":"jhalterman@hp.com","username":"jhalterman"},"change_message_id":"77005dd464411a8c9cbf20cd3630637e8c465495","unresolved":false,"context_lines":[{"line_number":6,"context_line":"class ProcessCheck(AgentCheck):"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    PROCESS_GAUGE \u003d (\u0027process.threads\u0027,"},{"line_number":9,"context_line":"                     \u0027process.cpu_pct\u0027,"},{"line_number":10,"context_line":"                     \u0027process.mem.rss\u0027,"},{"line_number":11,"context_line":"                     \u0027process.mem.vms\u0027,"},{"line_number":12,"context_line":"                     \u0027process.mem.real\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_8aefa9e8","line":9,"updated":"2014-08-20 23:11:08.000000000","message":"Here we use \"pct\" whereas elsewhere it\u0027s \"perc\". Perhaps \"cpu_utilization\" ?","commit_id":"b65128c818256b8e87e6e5e7bb0dfa3784601911"},{"author":{"_account_id":1976,"name":"Jonathan Halterman","email":"jhalterman@hp.com","username":"jhalterman"},"change_message_id":"77005dd464411a8c9cbf20cd3630637e8c465495","unresolved":false,"context_lines":[{"line_number":11,"context_line":"                     \u0027process.mem.vms\u0027,"},{"line_number":12,"context_line":"                     \u0027process.mem.real\u0027,"},{"line_number":13,"context_line":"                     \u0027process.open_file_descriptors\u0027,"},{"line_number":14,"context_line":"                     \u0027process.io.read_count\u0027,"},{"line_number":15,"context_line":"                     \u0027process.io.write_count\u0027,"},{"line_number":16,"context_line":"                     \u0027process.io.read_bytes\u0027,"},{"line_number":17,"context_line":"                     \u0027process.io.write_bytes\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_4a22f152","line":14,"updated":"2014-08-20 23:11:08.000000000","message":"The separate \".io.\" level might be a bit much here. Also write_count and read_count should refer to what is being done like \"write_ops\" or \"read_ops\" since operations are always counts.","commit_id":"b65128c818256b8e87e6e5e7bb0dfa3784601911"}],"monagent/collector/checks_d/zk.py":[{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"80942243363d7a63ea819ddc851d18ea606e1108","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        dimensions \u003d instance.get(\u0027dimensions\u0027, {})"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        if \u0027service\u0027 not in dimensions:"},{"line_number":45,"context_line":"            dimensions.update({\u0027service\u0027: \u0027zookeeper\u0027})"},{"line_number":46,"context_line":"        sock \u003d socket.socket()"},{"line_number":47,"context_line":"        sock.settimeout(timeout)"},{"line_number":48,"context_line":"        buf \u003d StringIO()"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_ef7ed3ad","line":45,"updated":"2014-08-18 21:05:39.000000000","message":"See my comments about MySQL earlier.","commit_id":"6765925324dba293864d0b1603443aab808a1dad"},{"author":{"_account_id":2419,"name":"Roland Hochmuth","email":"roland.hochmuth@hpe.com","username":"roland-hochmuth-s"},"change_message_id":"119406707fb82cc80fa4611f12083e7d67b3238f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        dimensions \u003d instance.get(\u0027dimensions\u0027, {})"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        if \u0027service\u0027 not in dimensions:"},{"line_number":45,"context_line":"            dimensions.update({\u0027service\u0027: \u0027zookeeper\u0027})"},{"line_number":46,"context_line":"        sock \u003d socket.socket()"},{"line_number":47,"context_line":"        sock.settimeout(timeout)"},{"line_number":48,"context_line":"        buf \u003d StringIO()"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_e79338f8","line":45,"in_reply_to":"1abeadc6_7289c8ea","updated":"2014-08-19 15:20:25.000000000","message":"Yes, so this is another service that could span multiple services or be wholly contained within a service.","commit_id":"6765925324dba293864d0b1603443aab808a1dad"},{"author":{"_account_id":12108,"name":"Gary Hessler","email":"gary.hessler@hp.com","username":"garyh"},"change_message_id":"a556073310a121d433da24195fe45470c6e46f54","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        dimensions \u003d instance.get(\u0027dimensions\u0027, {})"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        if \u0027service\u0027 not in dimensions:"},{"line_number":45,"context_line":"            dimensions.update({\u0027service\u0027: \u0027zookeeper\u0027})"},{"line_number":46,"context_line":"        sock \u003d socket.socket()"},{"line_number":47,"context_line":"        sock.settimeout(timeout)"},{"line_number":48,"context_line":"        buf \u003d StringIO()"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_7289c8ea","line":45,"in_reply_to":"1abeadc6_ef7ed3ad","updated":"2014-08-18 21:36:03.000000000","message":"See my reply to the mySQL comments.  Same applies here.","commit_id":"6765925324dba293864d0b1603443aab808a1dad"}],"monsetup/detection/service_plugin.py":[{"author":{"_account_id":1976,"name":"Jonathan Halterman","email":"jhalterman@hp.com","username":"jhalterman"},"change_message_id":"1af69c4bd546ae06a7eee1b108b806d908e488d0","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            # Setup an active http_status check on the API"},{"line_number":46,"context_line":"            log.info(\"\\tConfiguring an http_check for the {0} API.\".format(self.service_name))"},{"line_number":47,"context_line":"            config.merge(service_api_check(self.service_name + \u0027-api\u0027, self.service_api_url,"},{"line_number":48,"context_line":"                                           self.search_pattern, self.service_name + \u0027-api\u0027))"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        return config"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_1dcd0532","line":48,"updated":"2014-08-18 22:13:41.000000000","message":"With our naming strategy of using underscores for compound words, shouldn\u0027t it be foo_api?","commit_id":"6765925324dba293864d0b1603443aab808a1dad"},{"author":{"_account_id":12108,"name":"Gary Hessler","email":"gary.hessler@hp.com","username":"garyh"},"change_message_id":"56f97de4620d16acd77ed36f4986f7f71a99883b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            # Setup an active http_status check on the API"},{"line_number":46,"context_line":"            log.info(\"\\tConfiguring an http_check for the {0} API.\".format(self.service_name))"},{"line_number":47,"context_line":"            config.merge(service_api_check(self.service_name + \u0027-api\u0027, self.service_api_url,"},{"line_number":48,"context_line":"                                           self.search_pattern, self.service_name + \u0027-api\u0027))"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        return config"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_123def8f","line":48,"in_reply_to":"1abeadc6_1dcd0532","updated":"2014-08-19 00:10:39.000000000","message":"Good catch.  Yes, it should be _api.","commit_id":"6765925324dba293864d0b1603443aab808a1dad"}]}
