]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-6024 Show query details on delete by query requests
authorJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Mon, 16 Feb 2015 15:33:28 +0000 (16:33 +0100)
committerJean-Baptiste Lievremont <jean-baptiste.lievremont@sonarsource.com>
Tue, 17 Feb 2015 10:37:20 +0000 (11:37 +0100)
server/sonar-server/src/main/java/org/sonar/server/es/request/ProxyDeleteByQueryRequestBuilder.java
server/sonar-server/src/test/java/org/sonar/server/es/request/ProxyDeleteByQueryRequestBuilderTest.java

index f473fc305b2525e2d2d7c2636c5201347d2b12cf..0d1474e66ff6cd133d4f29e5a25d9d2684ba69f8 100644 (file)
@@ -26,13 +26,21 @@ import org.elasticsearch.action.deletebyquery.DeleteByQueryRequestBuilder;
 import org.elasticsearch.action.deletebyquery.DeleteByQueryResponse;
 import org.elasticsearch.client.Client;
 import org.elasticsearch.common.unit.TimeValue;
+import org.elasticsearch.common.xcontent.ToXContent;
+import org.elasticsearch.common.xcontent.XContentBuilder;
+import org.elasticsearch.common.xcontent.XContentFactory;
+import org.elasticsearch.index.query.QueryBuilder;
 import org.sonar.core.profiling.Profiling;
 import org.sonar.core.profiling.StopWatch;
 
+import java.io.IOException;
+
 public class ProxyDeleteByQueryRequestBuilder extends DeleteByQueryRequestBuilder {
 
   private final Profiling profiling;
 
+  private QueryBuilder internalBuilder;
+
   public ProxyDeleteByQueryRequestBuilder(Client client, Profiling profiling) {
     super(client);
     this.profiling = profiling;
@@ -67,13 +75,32 @@ public class ProxyDeleteByQueryRequestBuilder extends DeleteByQueryRequestBuilde
     throw new UnsupportedOperationException("execute() should not be called as it's used for asynchronous");
   }
 
+  @Override
+  public DeleteByQueryRequestBuilder setQuery(QueryBuilder queryBuilder) {
+    this.internalBuilder = queryBuilder;
+    return super.setQuery(queryBuilder);
+  }
+
   @Override
   public String toString() {
     StringBuilder message = new StringBuilder();
-    message.append("ES delete by query request");
+    message.append(String.format("ES delete by query request '%s'", xContentToString(internalBuilder)));
     if (request.indices().length > 0) {
       message.append(String.format(" on indices '%s'", StringUtils.join(request.indices(), ",")));
     }
     return message.toString();
   }
+
+  private String xContentToString(ToXContent toXContent) {
+    if (internalBuilder == null) {
+      return "";
+    }
+    try {
+      XContentBuilder builder = XContentFactory.jsonBuilder();
+      toXContent.toXContent(builder, ToXContent.EMPTY_PARAMS);
+      return builder.string();
+    } catch (IOException e) {
+      throw new IllegalStateException("Fail to convert request to string", e);
+    }
+  }
 }
index b43698ea88271fe2418cc80558cb1e3b3118cb9a..e602a69ab21c26f2a3742bd5930c0d67efee6b3d 100644 (file)
@@ -49,8 +49,9 @@ public class ProxyDeleteByQueryRequestBuilderTest {
 
   @Test
   public void to_string() {
-    assertThat(esTester.client().prepareDeleteByQuery(FakeIndexDefinition.INDEX).toString()).isEqualTo("ES delete by query request on indices 'fakes'");
-    assertThat(esTester.client().prepareDeleteByQuery().toString()).isEqualTo("ES delete by query request");
+    assertThat(esTester.client().prepareDeleteByQuery(FakeIndexDefinition.INDEX).setQuery(QueryBuilders.matchAllQuery()).toString()).isEqualTo(
+      "ES delete by query request '{\"match_all\":{}}' on indices 'fakes'");
+    assertThat(esTester.client().prepareDeleteByQuery().toString()).isEqualTo("ES delete by query request ''");
   }
 
   @Test