)]}'
{"docs/monasca-api-spec.md":[{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"60e886d8c7e32a9333ea3ebf0993a3a3a00be4f1","unresolved":false,"context_lines":[{"line_number":660,"context_line":""},{"line_number":661,"context_line":"offset\u003d01ce0acc66131296c8a17294f39aee44ea8963ec"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"``` "},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"A timestamp offset would look like this:"},{"line_number":666,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_b27083dd","line":663,"updated":"2015-11-18 17:52:18.000000000","message":"Need to remove that pesky space.","commit_id":"33304a3cd10b8d8ec75ecc7c89571c0770ffe5df"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"60e886d8c7e32a9333ea3ebf0993a3a3a00be4f1","unresolved":false,"context_lines":[{"line_number":824,"context_line":"{  "},{"line_number":825,"context_line":"   \"id\":\"v2.0\","},{"line_number":826,"context_line":"   \"links\":[  "},{"line_number":827,"context_line":"      {  "},{"line_number":828,"context_line":"         \"rel\":\"self\","},{"line_number":829,"context_line":"         \"href\":\"http://192.168.10.4:8080/v2.0/\""},{"line_number":830,"context_line":"      }"}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_92421f67","line":827,"updated":"2015-11-18 17:52:18.000000000","message":"And these spaces.","commit_id":"33304a3cd10b8d8ec75ecc7c89571c0770ffe5df"},{"author":{"_account_id":8126,"name":"Bradley Klein","email":"bradley.klein@charter.com","username":"bklei"},"change_message_id":"909ca4784ead651144a884cc625d6e3c42af25c5","unresolved":false,"context_lines":[{"line_number":824,"context_line":"{  "},{"line_number":825,"context_line":"   \"id\":\"v2.0\","},{"line_number":826,"context_line":"   \"links\":[  "},{"line_number":827,"context_line":"      {  "},{"line_number":828,"context_line":"         \"rel\":\"self\","},{"line_number":829,"context_line":"         \"href\":\"http://192.168.10.4:8080/v2.0/\""},{"line_number":830,"context_line":"      }"}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_4cec9b8f","line":827,"in_reply_to":"ba8a016a_92421f67","updated":"2015-11-20 20:48:14.000000000","message":"good catch -- PS13 should have these cleaned up for the whole file","commit_id":"33304a3cd10b8d8ec75ecc7c89571c0770ffe5df"},{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"60e886d8c7e32a9333ea3ebf0993a3a3a00be4f1","unresolved":false,"context_lines":[{"line_number":934,"context_line":"   },"},{"line_number":935,"context_line":"   {  "},{"line_number":936,"context_line":"      \"name\":\"name2\","},{"line_number":937,"context_line":"      \"dimensions\":{  "},{"line_number":938,"context_line":"         \"key1\":\"value1\","},{"line_number":939,"context_line":"         \"key2\":\"value2\""},{"line_number":940,"context_line":"      },"}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_725e9b45","line":937,"updated":"2015-11-18 17:52:18.000000000","message":"And these spaces.","commit_id":"33304a3cd10b8d8ec75ecc7c89571c0770ffe5df"},{"author":{"_account_id":8126,"name":"Bradley Klein","email":"bradley.klein@charter.com","username":"bklei"},"change_message_id":"909ca4784ead651144a884cc625d6e3c42af25c5","unresolved":false,"context_lines":[{"line_number":934,"context_line":"   },"},{"line_number":935,"context_line":"   {  "},{"line_number":936,"context_line":"      \"name\":\"name2\","},{"line_number":937,"context_line":"      \"dimensions\":{  "},{"line_number":938,"context_line":"         \"key1\":\"value1\","},{"line_number":939,"context_line":"         \"key2\":\"value2\""},{"line_number":940,"context_line":"      },"}],"source_content_type":"text/x-markdown","patch_set":11,"id":"ba8a016a_0cff7335","line":937,"in_reply_to":"ba8a016a_725e9b45","updated":"2015-11-20 20:48:14.000000000","message":"ditto","commit_id":"33304a3cd10b8d8ec75ecc7c89571c0770ffe5df"}],"java/src/main/java/monasca/api/infrastructure/persistence/influxdb/InfluxV9MetricDefinitionRepo.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"6de162b6f796c131f57d224d1a1d83bd46d79393","unresolved":false,"context_lines":[{"line_number":271,"context_line":"  {"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    String q \u003d String.format(\"select value, value_meta %1$s \""},{"line_number":274,"context_line":"                        + \"where %2$s %3$s %4$s %5$s %6$s %7$s slimit 1\","},{"line_number":275,"context_line":"                        this.influxV9Utils.namePart(name, true),"},{"line_number":276,"context_line":"                        this.influxV9Utils.privateTenantIdPart(tenantId),"},{"line_number":277,"context_line":"                        this.influxV9Utils.privateRegionPart(this.region),"}],"source_content_type":"text/x-java","patch_set":20,"id":"da6ed579_c8eba2af","line":274,"range":{"start_line":274,"start_character":63,"end_line":274,"end_character":69},"updated":"2016-01-12 04:55:48.000000000","message":"This should be limit, not slimit. See https://github.com/influxdata/influxdb/issues/4232. You are only interested in whether there is at least one result and there is no point in getting all of the possible points. Also, you might as well not retrieve value_meta. You don\u0027t need it and it just adds influxdb processing time if it exists.","commit_id":"bc629f612f7bd04a72f9394078a53dd1fc53c2b4"}],"java/src/main/java/monasca/api/infrastructure/persistence/vertica/MetricDefinitionVerticaRepoImpl.java":[{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"60e886d8c7e32a9333ea3ebf0993a3a3a00be4f1","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        query.bind(\"start_time\", startTime)"},{"line_number":291,"context_line":"             .bind(\"end_time\", endTime);"},{"line_number":292,"context_line":"      } else if (startTime !\u003d null) {"},{"line_number":293,"context_line":"        query.bind(\"start_time\", startTime);"},{"line_number":294,"context_line":"      }"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"      if (offset !\u003d null \u0026\u0026 !offset.isEmpty()) {"}],"source_content_type":"text/x-java","patch_set":11,"id":"ba8a016a_4d4e5c3c","line":293,"updated":"2015-11-18 17:52:18.000000000","message":"Could this be simplified to \n\nif (startTime !\u003d null) {\n\n  bind...\n}\n\nif (enTime !\u003d null) {\n\n  bind...\n}","commit_id":"33304a3cd10b8d8ec75ecc7c89571c0770ffe5df"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"6de162b6f796c131f57d224d1a1d83bd46d79393","unresolved":false,"context_lines":[{"line_number":352,"context_line":"    String defDimSql \u003d String.format(DEFDIM_IDS_SELECT, namePart,"},{"line_number":353,"context_line":"    MetricQueries.buildDimensionAndClause(dimensions, \"defDims\"));"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    Query\u003cMap\u003cString, Object\u003e\u003e query \u003d dbHandle.createQuery(defDimSql).bind(\"tenantId\", tenantId);"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    DimensionQueries.bindDimensionsToQuery(query, dimensions);"},{"line_number":358,"context_line":""}],"source_content_type":"text/x-java","patch_set":20,"id":"da6ed579_48e252a1","line":355,"range":{"start_line":355,"start_character":48,"end_line":355,"end_character":59},"updated":"2016-01-12 04:55:48.000000000","message":"Did you try to do this all as one query instead of two? It seems like it would be possible but I haven\u0027t tried","commit_id":"bc629f612f7bd04a72f9394078a53dd1fc53c2b4"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"6de162b6f796c131f57d224d1a1d83bd46d79393","unresolved":false,"context_lines":[{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    for (Map\u003cString, Object\u003e row : rows) {"},{"line_number":366,"context_line":"      byte[] defDimId \u003d (byte[]) row.get(\"id\");"},{"line_number":367,"context_line":"      defDimIdSet.add(defDimId);"},{"line_number":368,"context_line":"    }"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    //"}],"source_content_type":"text/x-java","patch_set":20,"id":"da6ed579_e89466e9","line":367,"range":{"start_line":367,"start_character":18,"end_line":367,"end_character":21},"updated":"2016-01-12 04:55:48.000000000","message":"Have you tried this with tens of thousands of metrics? Seems like this might cause problems if there were that many metrics.\n\nNote that the previous use of createInClause.createInClause() was limited by always having a metric name so it couldn\u0027t have as large a defDimIdSet.","commit_id":"bc629f612f7bd04a72f9394078a53dd1fc53c2b4"}],"java/src/main/java/monasca/api/resource/MetricResource.java":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"6de162b6f796c131f57d224d1a1d83bd46d79393","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    DateTime startTime \u003d Validation.parseAndValidateDate(startTimeStr, \"start_time\", false);"},{"line_number":137,"context_line":"    DateTime endTime \u003d Validation.parseAndValidateDate(endTimeStr, \"end_time\", false);"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    if ((startTime !\u003d null) \u0026\u0026 (endTime !\u003d null)) {"},{"line_number":140,"context_line":"      //"},{"line_number":141,"context_line":"      // If both times are specified, make sure start is before end"},{"line_number":142,"context_line":"      //"}],"source_content_type":"text/x-java","patch_set":20,"id":"da6ed579_cb24fcb0","line":139,"range":{"start_line":139,"start_character":4,"end_line":139,"end_character":51},"updated":"2016-01-12 04:55:48.000000000","message":"The query code ignores endTime if startTime is null. But, your validation and API doc allow endTime to be set with a null startTime","commit_id":"bc629f612f7bd04a72f9394078a53dd1fc53c2b4"}],"monasca_api/common/repositories/influxdb/metrics_repository.py":[{"author":{"_account_id":15799,"name":"Ben Motz","email":"ben.launchpad@ouat.co.uk","username":"bmotz"},"change_message_id":"5c66409b04e9cb3ecb2e67700fad39fa752831bd","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                                             end_timestamp,"},{"line_number":466,"context_line":"                                             0,"},{"line_number":467,"context_line":"                                             1,"},{"line_number":468,"context_line":"                                             False)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        if len(measurements) \u003d\u003d 0:"},{"line_number":471,"context_line":"            has_measurements \u003d False"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba8a016a_e8299b38","line":468,"updated":"2015-11-17 10:30:57.000000000","message":"This is going to result in a lot of work for the DB and the python code, as self.measurement_list does a full select of all the data, parses and reformats the data etc. - all of which is discarded.\n\nWouldt it be possible to do a SELECT COUNT(value) (or equivalent) instead? (Having just tried it, it\u0027s a lot faster to just do the SELECT COUNT() and not transfer and parse what could be many MB of JSON)","commit_id":"c1f683554caf6e0af0d514436ac8a1a78f33ddbe"},{"author":{"_account_id":8126,"name":"Bradley Klein","email":"bradley.klein@charter.com","username":"bklei"},"change_message_id":"bc20f0d01e0dd507ad09b3c73a3e299accce1058","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                                             end_timestamp,"},{"line_number":466,"context_line":"                                             0,"},{"line_number":467,"context_line":"                                             1,"},{"line_number":468,"context_line":"                                             False)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        if len(measurements) \u003d\u003d 0:"},{"line_number":471,"context_line":"            has_measurements \u003d False"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba8a016a_1410a9a7","line":468,"in_reply_to":"ba8a016a_e8299b38","updated":"2015-11-17 14:27:09.000000000","message":"Ben,\n\nThanks for the comment.  I thought about this -- and set limit to one so we\u0027ll only retrieve one measurement back from the db, and that allowed me to reuse the measurement_list method.  I\u0027ll add a comment to this effect -- are you OK with that?\n\nThe fact is, if a caller chooses to pass time parms to metric list, it\u0027s gonna take a bit longer than not, with the benefit of saving much more time later not getting full measurement/statistics calls for metric definitions that are stale.\n\nThanks!\nBrad","commit_id":"c1f683554caf6e0af0d514436ac8a1a78f33ddbe"},{"author":{"_account_id":15799,"name":"Ben Motz","email":"ben.launchpad@ouat.co.uk","username":"bmotz"},"change_message_id":"160443c72fd4e3b2ed6df808569125899f7fdd4a","unresolved":false,"context_lines":[{"line_number":461,"context_line":"        # We set limit to 1 for the measurement_list call, as we are only"},{"line_number":462,"context_line":"        # interested in knowing if there is at least one measurement, and"},{"line_number":463,"context_line":"        # not ask too much of influxdb."},{"line_number":464,"context_line":"        #"},{"line_number":465,"context_line":"        measurements \u003d self.measurement_list(tenant_id,"},{"line_number":466,"context_line":"                                             region,"},{"line_number":467,"context_line":"                                             name,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba8a016a_1da0cd9e","line":464,"updated":"2015-11-17 14:58:54.000000000","message":"Ah, my apologies, I did indeed miss the limit\u003d1 in there! Sorry about that!","commit_id":"33304a3cd10b8d8ec75ecc7c89571c0770ffe5df"}],"monasca_api/v2/reference/metrics.py":[{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"6de162b6f796c131f57d224d1a1d83bd46d79393","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        limit \u003d helpers.get_limit(req)"},{"line_number":139,"context_line":"        start_timestamp \u003d helpers.get_query_starttime_timestamp(req, False)"},{"line_number":140,"context_line":"        end_timestamp \u003d helpers.get_query_endtime_timestamp(req, False)"},{"line_number":141,"context_line":"        helpers.validate_start_end_timestamps(start_timestamp, end_timestamp)"},{"line_number":142,"context_line":"        result \u003d self._list_metrics(tenant_id, name, dimensions,"},{"line_number":143,"context_line":"                                    req.uri, offset, limit,"},{"line_number":144,"context_line":"                                    start_timestamp, end_timestamp)"}],"source_content_type":"text/x-python","patch_set":20,"id":"da6ed579_2bf2789b","line":141,"range":{"start_line":141,"start_character":16,"end_line":141,"end_character":45},"updated":"2016-01-12 04:55:48.000000000","message":"same problem as in Java implementation","commit_id":"bc629f612f7bd04a72f9394078a53dd1fc53c2b4"}],"monasca_tempest_tests/tests/api/test_metrics.py":[{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"4f82becabc4f182a45c58d5ff9bf2dbc2fa5f7a5","unresolved":false,"context_lines":[{"line_number":414,"context_line":"                                       timestamp\u003dtime_secs * 1000)"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"        self.monasca_client.create_metrics(metric)"},{"line_number":417,"context_line":"        for timer in xrange(WAIT_TIME):"},{"line_number":418,"context_line":"            query_parms \u003d \u0027?name\u003d\u0027 + name + \u0027\u0026start_time\u003d\u0027 + start_time + \u0027\u0026end_time\u003d\u0027 + end_time"},{"line_number":419,"context_line":"            resp, response_body \u003d self.monasca_client.list_metrics(query_parms)"},{"line_number":420,"context_line":"            self.assertEqual(200, resp.status)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba8a016a_7041f338","line":417,"updated":"2015-11-23 15:50:06.000000000","message":"This test failed the tempest run because WAIT_TIME isn\u0027t defined","commit_id":"0e42ca100e4f404c189ae6772285e094f4fca3e7"},{"author":{"_account_id":8126,"name":"Bradley Klein","email":"bradley.klein@charter.com","username":"bklei"},"change_message_id":"2d6eb91aac9e695554968192501d1505f3146105","unresolved":false,"context_lines":[{"line_number":414,"context_line":"                                       timestamp\u003dtime_secs * 1000)"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"        self.monasca_client.create_metrics(metric)"},{"line_number":417,"context_line":"        for timer in xrange(WAIT_TIME):"},{"line_number":418,"context_line":"            query_parms \u003d \u0027?name\u003d\u0027 + name + \u0027\u0026start_time\u003d\u0027 + start_time + \u0027\u0026end_time\u003d\u0027 + end_time"},{"line_number":419,"context_line":"            resp, response_body \u003d self.monasca_client.list_metrics(query_parms)"},{"line_number":420,"context_line":"            self.assertEqual(200, resp.status)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a8ffd7b_daf56ccb","line":417,"in_reply_to":"ba8a016a_7041f338","updated":"2015-11-25 14:15:04.000000000","message":"Thanks Ryan for the comment, I think some things got refactored in my last rebase, will fix...","commit_id":"0e42ca100e4f404c189ae6772285e094f4fca3e7"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"6de162b6f796c131f57d224d1a1d83bd46d79393","unresolved":false,"context_lines":[{"line_number":459,"context_line":"                               \"timeout on waiting for metrics: at least one \" \\"},{"line_number":460,"context_line":"                               \"metric is needed. Current number of metrics \" \\"},{"line_number":461,"context_line":"                               \"\u003d 0\""},{"line_number":462,"context_line":"                    raise self.skipException(skip_msg)"}],"source_content_type":"text/x-python","patch_set":20,"id":"da6ed579_8b236405","line":462,"range":{"start_line":462,"start_character":31,"end_line":462,"end_character":44},"updated":"2016-01-12 04:55:48.000000000","message":"Under what circumstances is this valid? The test should run always and not be skipped if there is a problem. That allows bugs to slip in","commit_id":"bc629f612f7bd04a72f9394078a53dd1fc53c2b4"}]}
