Skip to content
This repository has been archived by the owner on Aug 29, 2024. It is now read-only.

Commit

Permalink
Add feed response statistics (#468)
Browse files Browse the repository at this point in the history
* Added consistent and better exception handling,
Added reactive repository integration test.
Fixed few API bugs

* Added request charnge and activity id as part of ResponseDiagnostics using CosmosResponseStatistics

* Updated innerException to CosmosClientException

* Updated the instance fields to final
  • Loading branch information
kushagraThapar authored Dec 31, 2019
1 parent 8c240ab commit 0449d5a
Show file tree
Hide file tree
Showing 5 changed files with 116 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,16 +46,19 @@ public static <T extends Resource> void fillAndProcessResponseDiagnostics(
cosmosResponseDiagnostics = cosmosResponse.cosmosResponseDiagnosticsString();
}
FeedResponseDiagnostics feedResponseDiagnostics = null;
ResponseDiagnostics.CosmosResponseStatistics cosmosResponseStatistics = null;
if (feedResponse != null) {
feedResponseDiagnostics = feedResponse.feedResponseDiagnostics();
cosmosResponseStatistics = new ResponseDiagnostics.CosmosResponseStatistics(feedResponse);
}
if (cosmosResponseDiagnostics == null &&
(feedResponseDiagnostics == null || feedResponseDiagnostics.toString().isEmpty())) {
(feedResponseDiagnostics == null || feedResponseDiagnostics.toString().isEmpty()) &&
cosmosResponseStatistics == null) {
log.debug("Empty response diagnostics");
return;
}
final ResponseDiagnostics responseDiagnostics =
new ResponseDiagnostics(cosmosResponseDiagnostics, feedResponseDiagnostics);
new ResponseDiagnostics(cosmosResponseDiagnostics, feedResponseDiagnostics, cosmosResponseStatistics);

// Process response diagnostics
responseDiagnosticsProcessor.processResponseDiagnostics(responseDiagnostics);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,33 @@
package com.microsoft.azure.spring.data.cosmosdb.core;

import com.azure.data.cosmos.CosmosResponseDiagnostics;
import com.azure.data.cosmos.FeedResponse;
import com.azure.data.cosmos.FeedResponseDiagnostics;
import lombok.AllArgsConstructor;
import com.azure.data.cosmos.Resource;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@AllArgsConstructor
public class ResponseDiagnostics {

private CosmosResponseDiagnostics cosmosResponseDiagnostics;
private FeedResponseDiagnostics feedResponseDiagnostics;
private CosmosResponseStatistics cosmosResponseStatistics;

public ResponseDiagnostics(CosmosResponseDiagnostics cosmosResponseDiagnostics,
FeedResponseDiagnostics feedResponseDiagnostics) {
this.cosmosResponseDiagnostics = cosmosResponseDiagnostics;
this.feedResponseDiagnostics = feedResponseDiagnostics;
}

public ResponseDiagnostics(CosmosResponseDiagnostics cosmosResponseDiagnostics,
FeedResponseDiagnostics feedResponseDiagnostics,
CosmosResponseStatistics cosmosResponseStatistics) {
this.cosmosResponseDiagnostics = cosmosResponseDiagnostics;
this.feedResponseDiagnostics = feedResponseDiagnostics;
this.cosmosResponseStatistics = cosmosResponseStatistics;
}

@Override
public String toString() {
Expand All @@ -29,10 +44,41 @@ public String toString() {
.append("}");
}
if (feedResponseDiagnostics != null) {
if (diagnostics.length() != 0) {
diagnostics.append(", ");
}
diagnostics.append("feedResponseDiagnostics={")
.append(feedResponseDiagnostics)
.append("}");
}
if (cosmosResponseStatistics != null) {
if (diagnostics.length() != 0) {
diagnostics.append(", ");
}
diagnostics.append("cosmosResponseStatistics={")
.append(cosmosResponseStatistics)
.append("}");
}
return diagnostics.toString();
}

@Getter
public static class CosmosResponseStatistics {

private final double requestCharge;
private final String activityId;

public <T extends Resource> CosmosResponseStatistics(FeedResponse<T> feedResponse) {
this.requestCharge = feedResponse.requestCharge();
this.activityId = feedResponse.activityId();
}

@Override
public String toString() {
return "CosmosResponseStatistics{" +
"requestCharge=" + requestCharge +
", activityId='" + activityId + '\'' +
'}';
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,8 @@ public CosmosResponseDiagnostics getCosmosResponseDiagnostics() {
public FeedResponseDiagnostics getFeedResponseDiagnostics() {
return diagnostics == null ? null : diagnostics.getFeedResponseDiagnostics();
}

public ResponseDiagnostics.CosmosResponseStatistics getCosmosResponseStatistics() {
return diagnostics == null ? null : diagnostics.getCosmosResponseStatistics();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,8 @@ public void testFindAll() {
assertThat(result.size()).isEqualTo(1);
assertThat(result.get(0)).isEqualTo(TEST_PERSON);
assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics().getRequestCharge()).isGreaterThan(0);
}

@Test
Expand All @@ -148,6 +150,8 @@ public void testFindById() {
TEST_PERSON.getId(), Person.class);
assertEquals(result, TEST_PERSON);
assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics().getRequestCharge()).isGreaterThan(0);

final Person nullResult = cosmosTemplate.findById(Person.class.getSimpleName(),
NOT_EXIST_ID, Person.class);
Expand All @@ -165,6 +169,8 @@ public void testFindByMultiIds() {
final List<Person> result = cosmosTemplate.findByIds(ids, Person.class, collectionName);

assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics().getRequestCharge()).isGreaterThan(0);

final List<Person> expected = Lists.newArrayList(TEST_PERSON, TEST_PERSON_2, TEST_PERSON_3);
assertThat(result.size()).isEqualTo(expected.size());
Expand All @@ -186,10 +192,13 @@ public void testUpsertNewDocument() {

assertThat(responseDiagnosticsTestUtils.getCosmosResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNull();

final List<Person> result = cosmosTemplate.findAll(Person.class);

assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics().getRequestCharge()).isGreaterThan(0);

assertThat(result.size()).isEqualTo(1);
assertEquals(result.get(0).getFirstName(), firstName);
Expand All @@ -205,11 +214,14 @@ public void testUpdate() {

assertThat(responseDiagnosticsTestUtils.getCosmosResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNull();

final Person result = cosmosTemplate.findById(Person.class.getSimpleName(),
updated.getId(), Person.class);

assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics().getRequestCharge()).isGreaterThan(0);

assertEquals(result, updated);
}
Expand Down Expand Up @@ -247,10 +259,13 @@ public void testDeleteById() {

assertThat(responseDiagnosticsTestUtils.getCosmosResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNull();

final List<Person> result = cosmosTemplate.findAll(Person.class);

assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics().getRequestCharge()).isGreaterThan(0);
assertThat(result.size()).isEqualTo(1);
assertEquals(result.get(0), TEST_PERSON_2);
}
Expand All @@ -261,6 +276,8 @@ public void testCountByCollection() {
assertThat(prevCount).isEqualTo(1);

assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics().getRequestCharge()).isGreaterThan(0);

cosmosTemplate.insert(TEST_PERSON_2,
new PartitionKey(personInfo.getPartitionKeyFieldValue(TEST_PERSON_2)));
Expand All @@ -272,6 +289,8 @@ public void testCountByCollection() {

assertThat(responseDiagnosticsTestUtils.getCosmosResponseDiagnostics()).isNull();
assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics().getRequestCharge()).isGreaterThan(0);
}

@Test
Expand All @@ -281,6 +300,7 @@ public void testCountByQuery() {

assertThat(responseDiagnosticsTestUtils.getCosmosResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNull();

final Criteria criteria = Criteria.getInstance(CriteriaType.IS_EQUAL, "firstName",
Collections.singletonList(TEST_PERSON_2.getFirstName()));
Expand All @@ -290,6 +310,8 @@ public void testCountByQuery() {
assertThat(count).isEqualTo(1);

assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics().getRequestCharge()).isGreaterThan(0);
}

@Test
Expand All @@ -299,6 +321,7 @@ public void testFindAllPageableMultiPages() {

assertThat(responseDiagnosticsTestUtils.getCosmosResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNull();

final CosmosPageRequest pageRequest = new CosmosPageRequest(0, PAGE_SIZE_1, null);
final Page<Person> page1 = cosmosTemplate.findAll(pageRequest, Person.class, collectionName);
Expand All @@ -308,6 +331,8 @@ public void testFindAllPageableMultiPages() {

assertThat(responseDiagnosticsTestUtils.getCosmosResponseDiagnostics()).isNull();
assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics().getRequestCharge()).isGreaterThan(0);

final Page<Person> page2 = cosmosTemplate.findAll(page1.getPageable(), Person.class,
collectionName);
Expand All @@ -316,6 +341,8 @@ public void testFindAllPageableMultiPages() {

assertThat(responseDiagnosticsTestUtils.getCosmosResponseDiagnostics()).isNull();
assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics().getRequestCharge()).isGreaterThan(0);
}

@Test
Expand All @@ -325,6 +352,7 @@ public void testPaginationQuery() {

assertThat(responseDiagnosticsTestUtils.getCosmosResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNull();

final Criteria criteria = Criteria.getInstance(CriteriaType.IS_EQUAL, "firstName",
Collections.singletonList(FIRST_NAME));
Expand All @@ -337,6 +365,8 @@ public void testPaginationQuery() {

assertThat(responseDiagnosticsTestUtils.getCosmosResponseDiagnostics()).isNull();
assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics().getRequestCharge()).isGreaterThan(0);
}

@Test
Expand All @@ -348,6 +378,7 @@ public void testFindAllWithPageableAndSort() {

assertThat(responseDiagnosticsTestUtils.getCosmosResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNull();

final Sort sort = Sort.by(Sort.Direction.DESC, "firstName");
final PageRequest pageRequest = new CosmosPageRequest(0, PAGE_SIZE_3, null, sort);
Expand All @@ -363,6 +394,8 @@ public void testFindAllWithPageableAndSort() {

assertThat(responseDiagnosticsTestUtils.getCosmosResponseDiagnostics()).isNull();
assertThat(responseDiagnosticsTestUtils.getFeedResponseDiagnostics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics()).isNotNull();
assertThat(responseDiagnosticsTestUtils.getCosmosResponseStatistics().getRequestCharge()).isGreaterThan(0);

}

Expand Down
Loading

0 comments on commit 0449d5a

Please sign in to comment.