Parcourir la source

change return type of create to context, move processing from filter to activator

Grega Bremec il y a 7 mois
Parent
commit
13c7b69f6e

+ 30 - 8
src/main/java/net/p0f/k8s/demo/apiclient/Activator.java

@@ -5,6 +5,7 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileReader;
 import java.io.IOException;
+import java.io.InputStreamReader;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.security.KeyManagementException;
@@ -28,6 +29,7 @@ import jakarta.annotation.PostConstruct;
 import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.ws.rs.POST;
 import jakarta.ws.rs.Path;
+import jakarta.ws.rs.client.ClientResponseContext;
 
 @ApplicationScoped
 @Path("/jobs")
@@ -129,13 +131,33 @@ public class Activator {
     @POST
     public String createJob(JobDescription job) {
         LOG.info("Sending request: " + this.apiserver.get());
-        String response = k8s.createJob(
-                            "Bearer " + token.get(),
-                            job.getNamespace(),
-                            new Job(job.getNamespace(),
-                                     job.getName(),
-                                     job.getCommand()).getApiResource());
-        LOG.debug("Received: " + response);
-        return response;
+        ClientResponseContext response = k8s.createJob(
+                                            "Bearer " + token.get(),
+                                            job.getNamespace(),
+                                            new Job(job.getNamespace(),
+                                                    job.getName(),
+                                                    job.getCommand()).getApiResource());
+
+        // Log response next. Real status might be in X-Original-Status though.
+        int status = 0;
+        if (response.getHeaders().containsKey("X-Original-Status")) {
+            status = Integer.valueOf(response.getHeaders().get("X-Original-Status").get(0));
+        } else {
+            status = response.getStatus();
+        }
+        LOG.info("Got response: HTTP/" + status);
+        LOG.debug("Response Headers:");
+        response.getHeaders().forEach((k, v) -> {
+            LOG.info(k + ": " + v);
+        });
+
+        // Aggregate the body.
+        StringBuffer body = new StringBuffer();
+        BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntityStream()));
+        br.lines().forEach((l) -> body.append(l));
+
+        LOG.debug("Response Body: " + body.toString());
+
+        return body.toString();
     }
 }

+ 2 - 1
src/main/java/net/p0f/k8s/demo/apiclient/ApiClient.java

@@ -9,6 +9,7 @@ import jakarta.ws.rs.POST;
 import jakarta.ws.rs.Path;
 import jakarta.ws.rs.PathParam;
 import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.client.ClientResponseContext;
 import jakarta.ws.rs.core.MediaType;
 
 @Path("/apis/batch/v1")
@@ -17,7 +18,7 @@ public interface ApiClient {
     @Path("/namespaces/{namespace}/jobs")
     @Consumes("application/json")
     @Produces(MediaType.APPLICATION_JSON)
-    String createJob(@HeaderParam("Authorization") String token,
+    ClientResponseContext createJob(@HeaderParam("Authorization") String token,
                      @PathParam("namespace") String namespace,
                      String job);
 

+ 1 - 18
src/main/java/net/p0f/k8s/demo/apiclient/ResponseFilter.java

@@ -1,27 +1,18 @@
 package net.p0f.k8s.demo.apiclient;
 
-import java.io.BufferedReader;
 import java.io.IOException;
-import java.io.InputStreamReader;
 
 import org.jboss.logging.Logger;
 
 import jakarta.ws.rs.client.ClientRequestContext;
 import jakarta.ws.rs.client.ClientResponseContext;
 import jakarta.ws.rs.client.ClientResponseFilter;
-import jakarta.ws.rs.core.MultivaluedMap;
 
 public class ResponseFilter implements ClientResponseFilter {
     final Logger LOG = Logger.getLogger(ResponseFilter.class.getName());
 
     @Override
     public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException {
-        int status = responseContext.getStatus();
-        MultivaluedMap<String, String> headers = responseContext.getHeaders();
-        StringBuffer body = new StringBuffer();
-        BufferedReader br = new BufferedReader(new InputStreamReader(responseContext.getEntityStream()));
-        br.lines().forEach((l) -> { body.append(l); });
-
         // Log request info first.
         LOG.info("Original request: " + requestContext.getMethod() + " " + requestContext.getUri());
         LOG.info("Request Headers:");
@@ -35,16 +26,8 @@ public class ResponseFilter implements ClientResponseFilter {
             LOG.info("Request payload empty.");
         }
 
-        // Log response next.
-        LOG.info("Got response: HTTP/" + status);
-        LOG.info("Response Headers:");
-        headers.forEach((k, v) -> {
-            LOG.info(k + ": " + v);
-        });
-        LOG.info("Response Body:");
-        LOG.info(body);
-
         // If status wasn't a happy one, reset it and add a header with the original.
+        // The Activator will do the rest of response processing.
         if (responseContext.getStatus() > 299) {
             responseContext.getHeaders().add("X-Original-Status", String.valueOf(responseContext.getStatus()));
             responseContext.setStatus(200);