)]}'
{"conf.d/solidfire.yaml.example":[{"author":{"_account_id":16627,"name":"Chris Morrell","email":"gomeler@gmail.com","username":"Chris_Morrell"},"change_message_id":"d72e5195c841509dc320874366f1dcaa37befe33","unresolved":false,"context_lines":[{"line_number":14,"context_line":"      # ListNodeStats, GetDriveStats, GetClusterStats, GetVolumeStats. In"},{"line_number":15,"context_line":"      # particular GetVolumeStats is very expensive with large volume counts"},{"line_number":16,"context_line":"      # and is recommended to be disabled unless tested."},{"line_number":17,"context_line":"      excluded_checks: [\u0027GetVolumeStats\u0027]"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"1a1ced50_4c1d6abc","line":17,"range":{"start_line":17,"start_character":25,"end_line":17,"end_character":39},"updated":"2017-03-20 18:44:39.000000000","message":"By default excluding the volume stats, out of concern of timing out the collector on larger clusters. Have a working prototype that chunks the requests across multiple check calls.","commit_id":"35613668189daa4baea1a2640878c544b17ac2e9"}],"docs/Plugins.md":[{"author":{"_account_id":16627,"name":"Chris Morrell","email":"gomeler@gmail.com","username":"Chris_Morrell"},"change_message_id":"d72e5195c841509dc320874366f1dcaa37befe33","unresolved":false,"context_lines":[{"line_number":1701,"context_line":""},{"line_number":1702,"context_line":"| Metric Name | Dimensions | Semantics |"},{"line_number":1703,"context_line":"| ----------- | ---------- | --------- |"},{"line_number":1704,"context_line":"| solidfire.cluster.utilization            | service\u003dsolidfire, cluster | Overall cluster IOP utilization |"},{"line_number":1705,"context_line":"| solidfire.cluster.read_bytes             | service\u003dsolidfire, cluster | Total bytes read by clients. |"},{"line_number":1706,"context_line":"| solidfire.cluster.write_bytes            | service\u003dsolidfire, cluster | Total bytes written by clients. |"},{"line_number":1707,"context_line":"| solidfire.cluster.read_ops               | service\u003dsolidfire, cluster | Total read operations. |"}],"source_content_type":"text/x-markdown","patch_set":1,"id":"1a1ced50_f1ca6f6d","line":1704,"range":{"start_line":1704,"start_character":0,"end_line":1704,"end_character":107},"updated":"2017-03-20 18:44:39.000000000","message":"I found when testing/using this plugin that while the dimension filtering was sufficient, for human consumption it helped that the various metrics had verbose and clear names. Helped a good bit with various similar metrics between similar objects like drives and volumes. Not sure if there is a style guide around metric names, let me know if this is too far.","commit_id":"35613668189daa4baea1a2640878c544b17ac2e9"},{"author":{"_account_id":16627,"name":"Chris Morrell","email":"gomeler@gmail.com","username":"Chris_Morrell"},"change_message_id":"e22557fc61086ef59e4e22837ae1e6bcad8cb58d","unresolved":false,"context_lines":[{"line_number":1702,"context_line":"| Metric Name | Dimensions | Semantics |"},{"line_number":1703,"context_line":"| ----------- | ---------- | --------- |"},{"line_number":1704,"context_line":"| solidfire.cluster.utilization            | service\u003dsolidfire, cluster | Overall cluster IOP utilization |"},{"line_number":1705,"context_line":"| solidfire.cluster.read_bytes             | service\u003dsolidfire, cluster | Total bytes read by clients. |"},{"line_number":1706,"context_line":"| solidfire.cluster.write_bytes            | service\u003dsolidfire, cluster | Total bytes written by clients. |"},{"line_number":1707,"context_line":"| solidfire.cluster.read_ops               | service\u003dsolidfire, cluster | Total read operations. |"},{"line_number":1708,"context_line":"| solidfire.cluster.write_ops              | service\u003dsolidfire, cluster | Total write operations. |"}],"source_content_type":"text/x-markdown","patch_set":1,"id":"1a1ced50_87be5dd2","line":1705,"range":{"start_line":1705,"start_character":0,"end_line":1705,"end_character":104},"updated":"2017-03-20 18:59:40.000000000","message":"Also, wasn\u0027t sure what to do regarding backwards compatibility with regards to the previous revision of the metric names. I\u0027m not even sure if anyone is using this plugin, hence my willingness to make a rather drastic change.","commit_id":"35613668189daa4baea1a2640878c544b17ac2e9"}],"monasca_agent/collector/checks_d/solidfire.py":[{"author":{"_account_id":16627,"name":"Chris Morrell","email":"gomeler@gmail.com","username":"Chris_Morrell"},"change_message_id":"d72e5195c841509dc320874366f1dcaa37befe33","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            \u0027metric_type\u0027: None}"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    cluster_stat_metrics \u003d ["},{"line_number":39,"context_line":"        {\u0027metric_name\u0027: \u0027solidfire.cluster.utilization\u0027,"},{"line_number":40,"context_line":"         \u0027api_call\u0027: \u0027GetClusterStats\u0027,"},{"line_number":41,"context_line":"         \u0027result_field\u0027: \u0027clusterUtilization\u0027,"},{"line_number":42,"context_line":"         \u0027metric_type\u0027: \u0027gauge\u0027},"},{"line_number":43,"context_line":"        {\u0027metric_name\u0027: \u0027solidfire.cluster.read_bytes\u0027,"},{"line_number":44,"context_line":"         \u0027api_call\u0027: \u0027GetClusterStats\u0027,"},{"line_number":45,"context_line":"         \u0027result_field\u0027: \u0027readBytes\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a1ced50_ec4c5644","line":42,"range":{"start_line":39,"start_character":8,"end_line":42,"end_character":32},"updated":"2017-03-20 18:44:39.000000000","message":"Seemed like a reasonable approach when combined with a relatively generic function to strip the necessary data from the API responses. The downside is ~240 lines of metric definitions. Felt like a decent compromise.","commit_id":"35613668189daa4baea1a2640878c544b17ac2e9"},{"author":{"_account_id":16627,"name":"Chris Morrell","email":"gomeler@gmail.com","username":"Chris_Morrell"},"change_message_id":"d72e5195c841509dc320874366f1dcaa37befe33","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        self.sf \u003d None"},{"line_number":275,"context_line":"        self.instance \u003d None"},{"line_number":276,"context_line":"        self.cluster \u003d None"},{"line_number":277,"context_line":"        self.enabled_metrics \u003d [{\u0027name\u0027: \u0027GetClusterCapacity\u0027,"},{"line_number":278,"context_line":"                                 \u0027method\u0027: \u0027_get_cluster_capacity\u0027,"},{"line_number":279,"context_line":"                                 \u0027metrics\u0027: self.cluster_capacity_metrics},"},{"line_number":280,"context_line":"                                {\u0027name\u0027: \u0027ListNodeStats\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a1ced50_cc2a3a2c","line":277,"range":{"start_line":277,"start_character":8,"end_line":277,"end_character":28},"updated":"2017-03-20 18:44:39.000000000","message":"By default everything is enabled, and then the Volume API calls are filtered in the actual check. enabled_metrics may be a misnomer, perhaps available_metrics would have been better.","commit_id":"35613668189daa4baea1a2640878c544b17ac2e9"},{"author":{"_account_id":16627,"name":"Chris Morrell","email":"gomeler@gmail.com","username":"Chris_Morrell"},"change_message_id":"d72e5195c841509dc320874366f1dcaa37befe33","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        LOG.debug(\"Collected %s metrics\" % (num_metrics))"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def _filter_metrics(self, instance):"},{"line_number":337,"context_line":"        \"\"\"Some metrics, like GetVolumeStats and GetDriveStats are incredibly"},{"line_number":338,"context_line":"        expensive. For now we\u0027re enabling people to simply opt out of"},{"line_number":339,"context_line":"        collecting this data. Next revision will include more intelligent"},{"line_number":340,"context_line":"        metric gathering."},{"line_number":341,"context_line":"        \"\"\""},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        excluded_checks \u003d instance.get(\u0027excluded_checks\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a1ced50_2ccaee6d","line":340,"range":{"start_line":337,"start_character":8,"end_line":340,"end_character":25},"updated":"2017-03-20 18:44:39.000000000","message":"Per the comment, the volume stats, and to a lesser extent the drive stats are time intensive and mildly API server intensive. I was worried about several thousand volume clusters butting up against some of the retry limits in the collector. Need to actually check to see what the failure mode is around lengthy checks.","commit_id":"35613668189daa4baea1a2640878c544b17ac2e9"},{"author":{"_account_id":16627,"name":"Chris Morrell","email":"gomeler@gmail.com","username":"Chris_Morrell"},"change_message_id":"d72e5195c841509dc320874366f1dcaa37befe33","unresolved":false,"context_lines":[{"line_number":374,"context_line":"               [\u0027result\u0027][\u0027clusterStats\u0027])"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"        processed_metrics \u003d []"},{"line_number":377,"context_line":"        #TODO: Is it more sane to simply copy metrics upfront? What is more"},{"line_number":378,"context_line":"        # efficient?"},{"line_number":379,"context_line":"        for metric in metrics:"},{"line_number":380,"context_line":"            cp \u003d copy.copy(metric)"},{"line_number":381,"context_line":"            tmp \u003d res.get(cp.get(\u0027result_field\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a1ced50_6cb786d8","line":378,"range":{"start_line":377,"start_character":8,"end_line":378,"end_character":20},"updated":"2017-03-20 18:44:39.000000000","message":"I comment on this in many places. In the end, saving microseconds when you\u0027re still waiting on hundreds of milliseconds of API responses doesn\u0027t really matter. Should remove the duplicate comments.","commit_id":"35613668189daa4baea1a2640878c544b17ac2e9"},{"author":{"_account_id":16627,"name":"Chris Morrell","email":"gomeler@gmail.com","username":"Chris_Morrell"},"change_message_id":"d72e5195c841509dc320874366f1dcaa37befe33","unresolved":false,"context_lines":[{"line_number":407,"context_line":"        return processed_metrics"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    @timing"},{"line_number":410,"context_line":"    def _get_cluster_capacity_helper(self, data):"},{"line_number":411,"context_line":"        # Calculate capacity utilization factors from cluster capacity data."},{"line_number":412,"context_line":"        nzb \u003d \u0027solidfire.cluster.capacity.non_zero_blocks\u0027"},{"line_number":413,"context_line":"        zb \u003d \u0027solidfire.cluster.capacity.zero_blocks\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a1ced50_6c05c678","line":410,"range":{"start_line":410,"start_character":8,"end_line":410,"end_character":36},"updated":"2017-03-20 18:44:39.000000000","message":"One of the few instances where a direct API response isn\u0027t utilized. Math hasn\u0027t changed since the last check revision, just modified how I go about retrieving the relevant data.","commit_id":"35613668189daa4baea1a2640878c544b17ac2e9"}]}
