Skip to content

Commit d64d2ef

Browse files
committed
Backport build of monitoring exporter
1 parent d1ff0cf commit d64d2ef

File tree

3 files changed

+24
-111
lines changed

3 files changed

+24
-111
lines changed

integration-tests/src/test/java/oracle/weblogic/kubernetes/ItIstioMonitoringExporter.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2021, 2022, Oracle and/or its affiliates.
1+
// Copyright (c) 2021, 2023, Oracle and/or its affiliates.
22
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
33

44
package oracle.weblogic.kubernetes;
@@ -38,7 +38,6 @@
3838
import static oracle.weblogic.kubernetes.utils.DeployUtil.deployToClusterUsingRest;
3939
import static oracle.weblogic.kubernetes.utils.DomainUtils.createDomainAndVerify;
4040
import static oracle.weblogic.kubernetes.utils.FileUtils.generateFileFromTemplate;
41-
import static oracle.weblogic.kubernetes.utils.ImageUtils.createImageAndPushToRepo;
4241
import static oracle.weblogic.kubernetes.utils.ImageUtils.createMiiImageAndVerify;
4342
import static oracle.weblogic.kubernetes.utils.ImageUtils.createTestRepoSecret;
4443
import static oracle.weblogic.kubernetes.utils.ImageUtils.dockerLoginAndPushImageToRegistry;
@@ -47,6 +46,7 @@
4746
import static oracle.weblogic.kubernetes.utils.IstioUtils.deployIstioDestinationRule;
4847
import static oracle.weblogic.kubernetes.utils.IstioUtils.deployIstioPrometheus;
4948
import static oracle.weblogic.kubernetes.utils.IstioUtils.getIstioHttpIngressPort;
49+
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.buildMonitoringExporterCreateImageAndPushToRepo;
5050
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.checkMetricsViaPrometheus;
5151
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.cloneMonitoringExporter;
5252
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.downloadMonitoringExporterApp;
@@ -171,7 +171,8 @@ void testIstioPrometheusWithSideCar() {
171171

172172
String monitoringExporterSrcDir = Paths.get(RESULTS_ROOT, "monitoringexp", "srcdir").toString();
173173
cloneMonitoringExporter(monitoringExporterSrcDir);
174-
String exporterImage = assertDoesNotThrow(() -> createImageAndPushToRepo(monitoringExporterSrcDir, "exporter",
174+
String exporterImage = assertDoesNotThrow(() ->
175+
buildMonitoringExporterCreateImageAndPushToRepo(monitoringExporterSrcDir, "exporter",
175176
domain2Namespace, TEST_IMAGES_REPO_SECRET_NAME, getDockerExtraArgs()),
176177
"Failed to create image for exporter");
177178
String exporterConfig = RESOURCE_DIR + "/exporter/exporter-config.yaml";

integration-tests/src/test/java/oracle/weblogic/kubernetes/ItMonitoringExporterSideCar.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2021, 2022, Oracle and/or its affiliates.
1+
// Copyright (c) 2021, 2023, Oracle and/or its affiliates.
22
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
33

44
package oracle.weblogic.kubernetes;
@@ -48,10 +48,10 @@
4848
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.generateNewModelFileWithUpdatedDomainUid;
4949
import static oracle.weblogic.kubernetes.utils.CommonTestUtils.getDockerExtraArgs;
5050
import static oracle.weblogic.kubernetes.utils.FileUtils.replaceStringInFile;
51-
import static oracle.weblogic.kubernetes.utils.ImageUtils.createImageAndPushToRepo;
5251
import static oracle.weblogic.kubernetes.utils.ImageUtils.createMiiImageAndVerify;
5352
import static oracle.weblogic.kubernetes.utils.ImageUtils.dockerLoginAndPushImageToRegistry;
5453
import static oracle.weblogic.kubernetes.utils.LoadBalancerUtils.installAndVerifyNginx;
54+
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.buildMonitoringExporterCreateImageAndPushToRepo;
5555
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.checkMetricsViaPrometheus;
5656
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.cleanupPromGrafanaClusterRoles;
5757
import static oracle.weblogic.kubernetes.utils.MonitoringUtils.createAndVerifyDomain;
@@ -174,7 +174,8 @@ public static void initAll(@Namespaces(6) List<String> namespaces) {
174174
installMonitoringExporter(monitoringExporterDir);
175175
assertDoesNotThrow(() -> replaceStringInFile(monitoringExporterEndToEndDir + "/grafana/values.yaml",
176176
"pvc-grafana", "pvc-" + grafanaReleaseName));
177-
exporterImage = assertDoesNotThrow(() -> createImageAndPushToRepo(monitoringExporterSrcDir, "exporter",
177+
exporterImage = assertDoesNotThrow(() ->
178+
buildMonitoringExporterCreateImageAndPushToRepo(monitoringExporterSrcDir, "exporter",
178179
domain1Namespace, TEST_IMAGES_REPO_SECRET_NAME, getDockerExtraArgs()),
179180
"Failed to create image for exporter");
180181
if (!OKD) {

integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/MonitoringUtils.java

Lines changed: 16 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import io.kubernetes.client.openapi.models.V1EnvVar;
2020
import io.kubernetes.client.openapi.models.V1LocalObjectReference;
2121
import io.kubernetes.client.openapi.models.V1ObjectMeta;
22-
import io.kubernetes.client.openapi.models.V1Pod;
2322
import io.kubernetes.client.openapi.models.V1Secret;
2423
import io.kubernetes.client.openapi.models.V1SecretList;
2524
import io.kubernetes.client.openapi.models.V1SecretReference;
@@ -51,7 +50,6 @@
5150
import static oracle.weblogic.kubernetes.TestConstants.DOMAIN_API_VERSION;
5251
import static oracle.weblogic.kubernetes.TestConstants.GRAFANA_REPO_NAME;
5352
import static oracle.weblogic.kubernetes.TestConstants.GRAFANA_REPO_URL;
54-
import static oracle.weblogic.kubernetes.TestConstants.HTTPS_PROXY;
5553
import static oracle.weblogic.kubernetes.TestConstants.K8S_NODEPORT_HOST;
5654
import static oracle.weblogic.kubernetes.TestConstants.MANAGED_SERVER_NAME_BASE;
5755
import static oracle.weblogic.kubernetes.TestConstants.MONITORING_EXPORTER_BRANCH;
@@ -64,10 +62,8 @@
6462
import static oracle.weblogic.kubernetes.actions.ActionConstants.MONITORING_EXPORTER_DOWNLOAD_URL;
6563
import static oracle.weblogic.kubernetes.actions.ActionConstants.RESOURCE_DIR;
6664
import static oracle.weblogic.kubernetes.actions.TestActions.deleteSecret;
67-
import static oracle.weblogic.kubernetes.actions.TestActions.getPod;
6865
import static oracle.weblogic.kubernetes.actions.TestActions.installGrafana;
6966
import static oracle.weblogic.kubernetes.actions.TestActions.installPrometheus;
70-
import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.copyFileToPod;
7167
import static oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes.listSecrets;
7268
import static oracle.weblogic.kubernetes.assertions.TestAssertions.isGrafanaReady;
7369
import static oracle.weblogic.kubernetes.assertions.TestAssertions.isHelmReleaseDeployed;
@@ -80,10 +76,10 @@
8076
import static oracle.weblogic.kubernetes.utils.DomainUtils.createDomainAndVerify;
8177
import static oracle.weblogic.kubernetes.utils.FileUtils.checkFile;
8278
import static oracle.weblogic.kubernetes.utils.FileUtils.replaceStringInFile;
79+
import static oracle.weblogic.kubernetes.utils.ImageUtils.createImageAndPushToRepo;
8380
import static oracle.weblogic.kubernetes.utils.ImageUtils.createMiiImageAndVerify;
8481
import static oracle.weblogic.kubernetes.utils.ImageUtils.createTestRepoSecret;
8582
import static oracle.weblogic.kubernetes.utils.ImageUtils.dockerLoginAndPushImageToRegistry;
86-
import static oracle.weblogic.kubernetes.utils.PodUtils.execInPod;
8783
import static oracle.weblogic.kubernetes.utils.PodUtils.setPodAntiAffinity;
8884
import static oracle.weblogic.kubernetes.utils.SecretUtils.createSecretWithUsernamePassword;
8985
import static oracle.weblogic.kubernetes.utils.ThreadSafeLogger.getLogger;
@@ -94,7 +90,7 @@
9490
import static org.junit.jupiter.api.Assertions.assertTrue;
9591

9692
/**
97-
* A utility class for Monitoring Weblogic Domain via Weblogic MonitoringExporter and Prometheus.
93+
* A utility class for Monitoring WebLogic Domain via WebLogic MonitoringExporter and Prometheus.
9894
*/
9995
public class MonitoringUtils {
10096

@@ -771,53 +767,6 @@ public static void createAndVerifyDomain(String miiImage,
771767
}
772768
}
773769

774-
/**
775-
* Install wls dashboard from endtoend sample and verify it is accessable.
776-
*
777-
* @param hostPort host:nodeport string for grafana
778-
* @param monitoringExporterEndToEndDir endtoend sample directory
779-
*
780-
*/
781-
//public static void installVerifyGrafanaDashBoard(int nodeportGrafana, String monitoringExporterEndToEndDir) {
782-
public static void installVerifyGrafanaDashBoard(String hostPort, String monitoringExporterEndToEndDir) {
783-
//wait until it starts dashboard
784-
String curlCmd = String.format("curl -v -H 'Content-Type: application/json' "
785-
+ " -X GET http://admin:12345678@%s/api/dashboards",
786-
hostPort);
787-
testUntil(
788-
assertDoesNotThrow(() -> searchForKey(curlCmd, "grafana"),
789-
String.format("Check access to grafana dashboard")),
790-
logger,
791-
"Check access to grafana dashboard");
792-
logger.info("installing grafana dashboard");
793-
// url
794-
String curlCmd0 =
795-
String.format("curl -v -H 'Content-Type: application/json' -H \"Content-Type: application/json\""
796-
+ " -X POST http://admin:12345678@%s/api/datasources/"
797-
+ " --data-binary @%s/grafana/datasource.json",
798-
hostPort, monitoringExporterEndToEndDir);
799-
800-
logger.info("Executing Curl cmd {0}", curlCmd);
801-
assertDoesNotThrow(() -> ExecCommand.exec(curlCmd0));
802-
803-
String curlCmd1 =
804-
String.format("curl -v -H 'Content-Type: application/json' -H \"Content-Type: application/json\""
805-
+ " -X POST http://admin:12345678@%s/api/dashboards/db/"
806-
+ " --data-binary @%s/grafana/dashboard.json",
807-
hostPort, monitoringExporterEndToEndDir);
808-
logger.info("Executing Curl cmd {0}", curlCmd1);
809-
assertDoesNotThrow(() -> ExecCommand.exec(curlCmd1));
810-
811-
String curlCmd2 = String.format("curl -v -H 'Content-Type: application/json' "
812-
+ " -X GET http://admin:12345678@%s/api/dashboards/db/weblogic-server-dashboard",
813-
hostPort);
814-
testUntil(
815-
assertDoesNotThrow(() -> searchForKey(curlCmd2, "wls_jvm_uptime"),
816-
String.format("Check grafana dashboard wls against expected %s", "wls_jvm_uptime")),
817-
logger,
818-
"Check grafana dashboard metric against expected wls_jvm_uptime");
819-
}
820-
821770
/**
822771
* Verify the monitoring exporter app can be accessed from all managed servers in the domain through NGINX.
823772
*
@@ -953,63 +902,25 @@ public static boolean verifyMonExpAppAccessSideCar(String searchKey,
953902
return isFound;
954903
}
955904

956-
/** To build monitoring exporter sidecar image.
905+
/**
906+
* Build exporter, create image with unique name, create corresponding repo secret and push to registry.
957907
*
958-
* @param imageName image nmae
959-
* @param monitoringExporterSrcDir path to monitoring exporter src location
908+
* @param srcDir directory where source is located
909+
* @param baseImageName base image name
910+
* @param namespace image namespace
911+
* @param secretName repo secretname for image
912+
* @param extraImageBuilderArgs user specified extra args
913+
* @return image name
960914
*/
961-
public static void buildMonitoringExporterImage(String imageName, String monitoringExporterSrcDir) {
962-
String httpsproxy = HTTPS_PROXY;
963-
logger.info(" httpsproxy : " + httpsproxy);
964-
String proxyHost = "";
965-
String command;
966-
if (httpsproxy != null) {
967-
int firstIndex = httpsproxy.lastIndexOf("www");
968-
int lastIndex = httpsproxy.lastIndexOf(":");
969-
logger.info("Got indexes : " + firstIndex + " : " + lastIndex);
970-
proxyHost = httpsproxy.substring(firstIndex,lastIndex);
971-
logger.info(" proxyHost: " + proxyHost);
972-
973-
command = String.format("cd %s && mvn clean install -Dmaven.test.skip=true "
974-
+ " && docker build . -t "
975-
+ imageName
976-
+ " --build-arg MAVEN_OPTS=\"-Dhttps.proxyHost=%s -Dhttps.proxyPort=80\" --build-arg https_proxy=%s",
977-
monitoringExporterSrcDir, proxyHost, httpsproxy);
978-
} else {
979-
command = String.format("cd %s && mvn clean install -Dmaven.test.skip=true "
980-
+ " && docker build . -t "
981-
+ imageName
982-
+ monitoringExporterSrcDir);
983-
}
915+
public static String buildMonitoringExporterCreateImageAndPushToRepo(
916+
String srcDir, String baseImageName, String namespace, String secretName,
917+
String extraImageBuilderArgs) throws ApiException {
918+
String command = String.format("cd %s && mvn clean install -Dmaven.test.skip=true", srcDir);
984919
logger.info("Executing command " + command);
985920
assertTrue(Command
986921
.withParams(new CommandParams()
987922
.command(command))
988-
.execute(), "Failed to build monitoring exporter image");
989-
// docker login and push image to docker registry if necessary
990-
dockerLoginAndPushImageToRegistry(imageName);
923+
.execute(), "Failed to build monitoring exporter");
924+
return createImageAndPushToRepo(srcDir, baseImageName, namespace, secretName, extraImageBuilderArgs);
991925
}
992-
993-
/** Change monitoring exporter webapp confiuration inside the pod.
994-
*
995-
* @param podName pod name
996-
* @param namespace pod namespace
997-
* @param configYaml monitorin exporter configuration
998-
*/
999-
public static void changeConfigInPod(String podName, String namespace, String configYaml) {
1000-
V1Pod exporterPod = assertDoesNotThrow(() -> getPod(namespace, "", podName),
1001-
" Can't retreive pod " + podName);
1002-
logger.info("Copying config file {0} to pod directory {1}",
1003-
Paths.get(RESOURCE_DIR,"/exporter/" + configYaml).toString(), "/tmp/" + configYaml);
1004-
assertDoesNotThrow(() -> copyFileToPod(namespace, podName, "monitoring-exporter",
1005-
Paths.get(RESOURCE_DIR,"/exporter/" + configYaml), Paths.get("/tmp/" + configYaml)),
1006-
"Copying file to pod failed");
1007-
execInPod(exporterPod, "monitoring-exporter", true,
1008-
"curl -X PUT -H \"content-type: application/yaml\" --data-binary \"@/tmp/"
1009-
+ configYaml + "\" -i -u weblogic:welcome1 http://localhost:8080/configuration");
1010-
execInPod(exporterPod, "monitoring-exporter", true, "curl -X GET "
1011-
+ " -i -u weblogic:welcome1 http://localhost:8080/metrics");
1012-
1013-
}
1014-
1015926
}

0 commit comments

Comments
 (0)