Pārlūkot izejas kodu

refactor into net.p0f package namespace, add request logging to filter

Grega Bremec 7 mēneši atpakaļ
vecāks
revīzija
749f1d3eff

+ 2 - 2
pom.xml

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-    <groupId>com.redhat.training</groupId>
-    <artifactId>job-activator</artifactId>
+    <groupId>net.p0f.k8s.demo</groupId>
+    <artifactId>api-client</artifactId>
     <version>1.0.0-SNAPSHOT</version>
 
     <properties>

+ 0 - 67
src/main/java/com/redhat/training/Job.java

@@ -1,67 +0,0 @@
-package com.redhat.training;
-
-import org.jboss.logmanager.Logger;
-
-public class Job {
-    final Logger LOG = Logger.getLogger(Job.class.getName());
-
-    final String apiResourceTemplate = """
-            {
-                "apiVersion": "batch/v1",
-                "kind": "Job",
-                "metadata": {
-                    "name": "%s",
-                    "namespace": "%s"
-                },
-                "spec": {
-                    "activeDeadlineSeconds": 30,
-                    "completions": 1,
-                    "parallelism": 1,
-                    "selector": {
-                        "matchLabels": {
-                            "jobname": "%s"
-                        }
-                    },
-                    "template": {
-                        "metadata": {
-                            "labels": {
-                                "jobname": "%s"
-                            }
-                        },
-                        "spec": {
-                            "containers": [
-                                {
-                                    "name": "job-%s",
-                                    "image": "registry.access.redhat.com/ubi9/ubi:latest",
-                                    "command": [
-                                        "/bin/bash",
-                                        "-c",
-                                        "%s"
-                                    ]
-                                }
-                            ]
-                        }
-                    }
-                }
-            }
-            """;
-    String apiResource;
-
-    public Job(String namespace, String name, String command) {
-        LOG.info("Constructing: namespace = " + namespace + ", " +
-                                "name = " + name + ", " +
-                                "command = " + command);
-
-        this.apiResource = String.format(apiResourceTemplate,
-                                         name,
-                                         namespace,
-                                         name, name, name,
-                                         command);
-
-        LOG.info("Constructed:\n" + this.apiResource);
-    }
-
-    public String getApiResource() {
-        return apiResource;
-    }
-}

+ 3 - 3
src/main/java/com/redhat/training/Activator.java → src/main/java/net/p0f/k8s/demo/apiclient/Activator.java

@@ -1,4 +1,4 @@
-package com.redhat.training;
+package net.p0f.k8s.demo.apiclient;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -87,7 +87,8 @@ public class Activator {
                 tlscaFile = new File("/var/run/secrets/kubernetes.io/serviceaccount/ca.crt");
             }
             if (!tlscaFile.exists()) {
-                throw new RuntimeException("TLS CA cert file set, but does not exist.");
+                LOG.warn("TLS CA file set, but does not exist: " + tlscaFile.getAbsolutePath());
+                // throw new RuntimeException("TLS CA cert file set, but does not exist.");
             }
             // Try to build an SSLContext by using a PEM file.
             LOG.info("Attempting to build SSLContext with " + tlscaFile.getAbsolutePath());
@@ -132,7 +133,6 @@ public class Activator {
         String response = k8s.createJob(
                             "Bearer " + token.get(),
                             job.getNamespace(),
-                            job.getName(),
                             new Job(job.getNamespace(),
                                      job.getName(),
                                      job.getCommand()).getApiResource());

+ 2 - 3
src/main/java/com/redhat/training/ApiClient.java → src/main/java/net/p0f/k8s/demo/apiclient/ApiClient.java

@@ -1,4 +1,4 @@
-package com.redhat.training;
+package net.p0f.k8s.demo.apiclient;
 
 import java.util.List;
 
@@ -14,12 +14,11 @@ import jakarta.ws.rs.core.MediaType;
 @Path("/apis/batch/v1")
 public interface ApiClient {
     @POST
-    @Path("/namespaces/{namespace}/jobs/{job}")
+    @Path("/namespaces/{namespace}/jobs")
     @Consumes("application/json")
     @Produces(MediaType.APPLICATION_JSON)
     String createJob(@HeaderParam("Authorization") String token,
                      @PathParam("namespace") String namespace,
-                     @PathParam("job") String jobName,
                      String job);
 
     @GET

+ 47 - 0
src/main/java/net/p0f/k8s/demo/apiclient/Job.java

@@ -0,0 +1,47 @@
+package net.p0f.k8s.demo.apiclient;
+
+import org.jboss.logmanager.Logger;
+
+public class Job {
+    final Logger LOG = Logger.getLogger(Job.class.getName());
+
+    final String apiResourceTemplate = """
+            {
+                "apiVersion": "batch/v1",
+                "kind": "Job",
+                "metadata": {   "name": "%s",
+                                "namespace": "%s" },
+                "spec": {       "activeDeadlineSeconds": 30,
+                                "completions": 1,
+                                "parallelism": 1,
+                                "selector": { "matchLabels": { "jobname": "%s" }},
+                                "template": {
+                                    "metadata": { "labels": { "jobname": "%s" }},
+                                    "spec": { "containers": [{
+                                                "name": "job-%s",
+                                                "image": "registry.access.redhat.com/ubi9/ubi:latest",
+                                                "command": [ "/bin/bash", "-c", "%s" ]
+                                            }]
+                                    }
+                                }}}
+            """;
+    String apiResource;
+
+    public Job(String namespace, String name, String command) {
+        LOG.info("Constructing: namespace = " + namespace + ", " +
+                                "name = " + name + ", " +
+                                "command = " + command);
+
+        this.apiResource = String.format(apiResourceTemplate,
+                                         name,
+                                         namespace,
+                                         name, name, name,
+                                         command);
+
+        LOG.info("Constructed:\n" + this.apiResource);
+    }
+
+    public String getApiResource() {
+        return apiResource;
+    }
+}

+ 1 - 1
src/main/java/com/redhat/training/JobDescription.java → src/main/java/net/p0f/k8s/demo/apiclient/JobDescription.java

@@ -1,4 +1,4 @@
-package com.redhat.training;
+package net.p0f.k8s.demo.apiclient;
 
 public class JobDescription {
     String namespace;

+ 15 - 4
src/main/java/com/redhat/training/ResponseFilter.java → src/main/java/net/p0f/k8s/demo/apiclient/ResponseFilter.java

@@ -1,4 +1,4 @@
-package com.redhat.training;
+package net.p0f.k8s.demo.apiclient;
 
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -15,9 +15,20 @@ public class ResponseFilter implements ClientResponseFilter {
 
     @Override
     public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException {
-        LOG.info("Got invoked: HTTP/" + responseContext.getStatus());
-        LOG.info("Response Headers: ");
-        responseContext.getHeaders().forEach((k, v ) -> {
+        LOG.info("Original request: " + requestContext.getMethod() + " " + requestContext.getUri());
+        LOG.info("Request Headers:");
+        requestContext.getHeaders().forEach((k, v) -> {
+            LOG.info(k + ": " + v);
+        });
+        if (requestContext.getEntity() != null) {
+            LOG.info("Request payload:");
+            LOG.info(requestContext.getEntity().toString());
+        } else {
+            LOG.info("Request payload empty.");
+        }
+        LOG.info("Got response: HTTP/" + responseContext.getStatus());
+        LOG.info("Response Headers:");
+        responseContext.getHeaders().forEach((k, v) -> {
             LOG.info(k + ": " + v);
         });
         LOG.info("Response Body:");