Skip to content

Commit

Permalink
Added metrics support for Cloud Assets
Browse files Browse the repository at this point in the history
  • Loading branch information
petrovic-d committed Aug 30, 2024
1 parent 99d110c commit d218baf
Show file tree
Hide file tree
Showing 23 changed files with 704 additions and 25 deletions.
1 change: 1 addition & 0 deletions enterprise/cloud.oracle/external/binaries-list
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ D9918C04C60741D1BBEFBCC82E9D3B8BE690D412 com.oracle.oci.sdk:oci-java-sdk-objects
A7D98B96CEA17F78E4BB9270B4A60FEBFACF6C78 com.oracle.oci.sdk:oci-java-sdk-core:3.25.3
2236737DDF39CA3A3BABDB58B41F50C47E861EA7 com.oracle.oci.sdk:oci-java-sdk-containerengine:3.25.3
923F38FE7186DFCBF921F9B3626832FFFFB8F6E9 com.oracle.oci.sdk:oci-java-sdk-artifacts:3.25.3
99AE5824FBBABF71475404EE19AA480973CBD790 com.oracle.oci.sdk:oci-java-sdk-monitoring:3.25.3

E5F6CAE5CA7ECAAC1EC2827A9E2D65AE2869CADA org.apache.httpcomponents:httpclient:4.5.13
853B96D3AFBB7BF8CC303FE27EE96836A10C1834 org.apache.httpcomponents:httpcore:4.4.13
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Description: Oracle Cloud Infrastructure SDK for Java
Origin: https://github.com/oracle/oci-java-sdk
Version: 3.25.3
License: UPL-Apache-2.0
Files: oci-java-sdk-circuitbreaker-3.25.3.jar, oci-java-sdk-common-3.25.3.jar, oci-java-sdk-database-3.25.3.jar, oci-java-sdk-identity-3.25.3.jar, oci-java-sdk-workrequests-3.25.3.jar, oci-java-sdk-adm-3.25.3.jar, oci-java-sdk-devops-3.25.3.jar, oci-java-sdk-addons-apache-configurator-jersey-3.25.3.jar, oci-java-sdk-common-httpclient-3.25.3.jar, oci-java-sdk-common-httpclient-jersey-3.25.3.jar oci-java-sdk-keymanagement-3.25.3.jar oci-java-sdk-vault-3.25.3.jar oci-java-sdk-containerengine-3.25.3.jar oci-java-sdk-core-3.25.3.jar oci-java-sdk-objectstorage-3.25.3.jar oci-java-sdk-objectstorage-extensions-3.25.3.jar oci-java-sdk-objectstorage-generated-3.25.3.jar, oci-java-sdk-artifacts-3.25.3.jar
Files: oci-java-sdk-circuitbreaker-3.25.3.jar, oci-java-sdk-common-3.25.3.jar, oci-java-sdk-database-3.25.3.jar, oci-java-sdk-identity-3.25.3.jar, oci-java-sdk-workrequests-3.25.3.jar, oci-java-sdk-adm-3.25.3.jar, oci-java-sdk-devops-3.25.3.jar, oci-java-sdk-addons-apache-configurator-jersey-3.25.3.jar, oci-java-sdk-common-httpclient-3.25.3.jar, oci-java-sdk-common-httpclient-jersey-3.25.3.jar oci-java-sdk-keymanagement-3.25.3.jar oci-java-sdk-vault-3.25.3.jar oci-java-sdk-containerengine-3.25.3.jar oci-java-sdk-core-3.25.3.jar oci-java-sdk-objectstorage-3.25.3.jar oci-java-sdk-objectstorage-extensions-3.25.3.jar oci-java-sdk-objectstorage-generated-3.25.3.jar, oci-java-sdk-artifacts-3.25.3.jar, oci-java-sdk-monitoring-3.25.3.jar

Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.

Expand Down
1 change: 1 addition & 0 deletions enterprise/cloud.oracle/nbproject/project.properties
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ release.external/oci-java-sdk-objectstorage-extensions-3.25.3.jar=modules/ext/oc
release.external/oci-java-sdk-core-3.25.3.jar=modules/ext/oci-java-sdk-core-3.25.3.jar
release.external/oci-java-sdk-containerengine-3.25.3.jar=modules/ext/oci-java-sdk-containerengine-3.25.3.jar
release.external/oci-java-sdk-artifacts-3.25.3.jar=modules/ext/oci-java-sdk-artifacts-3.25.3.jar
release.external/oci-java-sdk-monitoring-3.25.3.jar=modules/ext/oci-java-sdk-monitoring-3.25.3.jar
release.external/httpclient-4.5.13.jar=modules/ext/httpclient-4.5.13.jar
release.external/httpcore-4.4.13.jar=modules/ext/httpcore-4.4.13.jar
release.external/javassist-3.25.0-GA.jar=modules/ext/javassist-3.25.0-GA.jar
Expand Down
4 changes: 4 additions & 0 deletions enterprise/cloud.oracle/nbproject/project.xml
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,10 @@
<runtime-relative-path>ext/oci-java-sdk-artifacts-3.25.3.jar</runtime-relative-path>
<binary-origin>external/oci-java-sdk-artifacts-3.25.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/oci-java-sdk-monitoring-3.25.3.jar</runtime-relative-path>
<binary-origin>external/oci-java-sdk-monitoring-3.25.3.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/httpclient-4.5.13.jar</runtime-relative-path>
<binary-origin>external/httpclient-4.5.13.jar</binary-origin>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
@ActionReference(path = "Cloud/Oracle/KnowledgeBase/Actions", position = 260),
@ActionReference(path = "Cloud/Oracle/Vulnerability/Actions", position = 260),
@ActionReference(path = "Cloud/Oracle/VulnerabilityAudit/Actions", position = 260),
@ActionReference(path = "Cloud/Oracle/MetricsNamespace/Metrics/Actions", position = 260),
})

@NbBundle.Messages({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,17 @@ public class AddNewAssetCommand implements CommandProvider {
put("Databases", new String[]{"io.micronaut.oraclecloud", "micronaut-oraclecloud-atp"}); //NOI18N
put("Bucket", new String[]{"io.micronaut.objectstorage", "micronaut-object-storage-oracle-cloud"}); //NOI18N
put("Vault", new String[]{"io.micronaut.oraclecloud", "micronaut-oraclecloud-vault"}); //NOI18N
put("MetricsNamespace", new String[]{"io.micronaut.oraclecloud", "micronaut-oraclecloud-micrometer"}); //NOI18N
}
};

private static final Map<String, String[]> ANNOTATION_PROCESSOR_MAP = new HashMap() {
{
put("MetricsNamespace", new String[]{"io.micronaut.micrometer", "micronaut-micrometer-annotation"}); //NOI18N
}
};


@Override
public Set<String> getCommands() {
return Collections.unmodifiableSet(COMMANDS);
Expand All @@ -78,16 +86,15 @@ public CompletableFuture<Object> runCommand(String command, List<Object> argumen
return new TenancyStep();
}).stepForClass(TenancyStep.class, (s) -> new CompartmentStep())
.stepForClass(CompartmentStep.class, (s) -> new SuggestedStep(null))
.stepForClass(SuggestedStep.class, (s) -> new ProjectStep())
.stepForClass(SuggestedStep.class, (s) -> new ProjectStep())
.build();

Steps.getDefault()
.executeMultistep(new ItemTypeStep(), Lookups.fixed(nsProvider))
.thenAccept(values -> {
Project project = values.getValueForStep(ProjectStep.class);
CompletableFuture<? extends OCIItem> item = null;
String itemType = values.getValueForStep(ItemTypeStep.class);
if ("Databases".equals(itemType)) {
if ("Databases".equals(itemType)) {
DatabaseItem i = values.getValueForStep(DatabaseConnectionStep.class);
if (i == null) {
item = new AddADBAction().addADB();
Expand Down Expand Up @@ -117,15 +124,20 @@ public CompletableFuture<Object> runCommand(String command, List<Object> argumen
item.thenAccept(i -> {
CloudAssets.getDefault().addItem(i);
String[] art = DEP_MAP.get(i.getKey().getPath());
String[] processor = ANNOTATION_PROCESSOR_MAP.get(i.getKey().getPath());
try {
DependencyUtils.addDependency(project, art[0], art[1]);
future.complete(null);
if (art != null && art.length > 1) {
DependencyUtils.addDependency(project, art[0], art[1]);
}
if (processor != null && processor.length > 1) {
DependencyUtils.addAnnotationProcessor(project, processor[0], processor[1]);
}
} catch (IllegalStateException e) {
future.completeExceptionally(e);
}
future.complete(null);
});
});
return future;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
import org.netbeans.modules.cloud.oracle.compute.ComputeInstanceItem;
import org.netbeans.modules.cloud.oracle.database.DatabaseItem;
import org.netbeans.modules.cloud.oracle.developer.ContainerRepositoryItem;
import org.netbeans.modules.cloud.oracle.developer.MetricsNamespaceItem;
import org.netbeans.modules.cloud.oracle.items.OCID;
import org.netbeans.modules.cloud.oracle.items.OCIItem;
import org.netbeans.modules.cloud.oracle.vault.VaultItem;
Expand Down Expand Up @@ -353,6 +354,9 @@ synchronized void loadAssets() {
case "ContainerRepository": //NOI18N
loaded.add(gson.fromJson(element, ContainerRepositoryItem.class));
break;
case "MetricsNamespace": //NOI18N
loaded.add(gson.fromJson(element, MetricsNamespaceItem.class));
break;
}
}
reader.endArray();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ public final class DependenciesAnalyzer implements SuggestionAnalyzer {
put("micronaut-oraclecloud-atp", "Databases"); //NOI18N
put("micronaut-object-storage-oracle-cloud", "Bucket"); //NOI18N
put("micronaut-oraclecloud-vault", "Vault"); //NOI18N
put("micronaut-oraclecloud-micrometer", "MetricsNamespace"); //NOI18N
}
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@
import org.netbeans.modules.project.dependency.ArtifactSpec;
import org.netbeans.modules.project.dependency.Dependency;
import org.netbeans.modules.project.dependency.DependencyChange;
import org.netbeans.modules.project.dependency.DependencyChange.Options;
import org.netbeans.modules.project.dependency.DependencyChangeException;
import org.netbeans.modules.project.dependency.DependencyChangeRequest;
import org.netbeans.modules.project.dependency.ProjectDependencies;
import org.netbeans.modules.project.dependency.ProjectOperationException;
import org.netbeans.modules.project.dependency.Scopes;
Expand All @@ -38,30 +40,57 @@
* @author Jan Horvath
*/
public class DependencyUtils {

public static void addDependency(Project project, String groupId, String artifactId) {
Project projectToModify = null;
Set<Project> subProjects = ProjectUtils.getContainedProjects(project, false);
for (Project subProject : subProjects) {
if ("oci".equals(subProject.getProjectDirectory().getName())) { //NOI18N
projectToModify = subProject;
break;
}
}
if (projectToModify == null) {
projectToModify = project;
}
Project projectToModify = getProjectToModify(project, "oci");

if (projectToModify != null) {
ArtifactSpec spec = ArtifactSpec.make(groupId, artifactId);
Dependency dep = Dependency.make(spec, Scopes.COMPILE);
DependencyChange change = DependencyChange.add(Collections.singletonList(dep), DependencyChange.Options.skipConflicts);
DependencyChange change = DependencyChange.add(Collections.singletonList(dep), Options.skipConflicts);
try {
ModificationResult mod = ProjectDependencies.modifyDependencies(projectToModify, change);
mod.commit();
} catch (IOException | DependencyChangeException | ProjectOperationException ex) {
throw new IllegalStateException(ex);
}
}
}
}

public static void addAnnotationProcessor(Project project, String groupId, String artifactId) {
Project projectToModify = getProjectToModify(project, "lib");

if (projectToModify != null) {
ArtifactSpec spec = ArtifactSpec.make(groupId, artifactId);
Dependency dep = Dependency.make(spec, Scopes.PROCESS);
DependencyChange change = DependencyChange.builder(DependencyChange.Kind.ADD)
.dependency(dep)
.option(Options.skipConflicts)
.create();

try {
ModificationResult mod = ProjectDependencies
.modifyDependencies(projectToModify, new DependencyChangeRequest(Collections.singletonList(change)));
mod.commit();
} catch (IOException | DependencyChangeException | ProjectOperationException ex) {
throw new IllegalStateException(ex);
}
}
}

private static Project getProjectToModify(Project project, String projectDirectory) {
Project projectToModify = null;
Set<Project> subProjects = ProjectUtils.getContainedProjects(project, false);
for (Project subProject : subProjects) {
if (projectDirectory.equals(subProject.getProjectDirectory().getName())) { //NOI18N
projectToModify = subProject;
break;
}
}
if (projectToModify == null) {
projectToModify = project;
}

return projectToModify;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import org.netbeans.api.db.explorer.ConnectionManager;
import org.netbeans.api.db.explorer.DatabaseConnection;
import org.netbeans.modules.cloud.oracle.bucket.BucketItem;
import org.netbeans.modules.cloud.oracle.developer.MetricsNamespaceItem;
import org.netbeans.modules.cloud.oracle.items.OCIItem;
import org.netbeans.modules.cloud.oracle.vault.VaultItem;

Expand All @@ -53,7 +54,18 @@ public final class PropertiesGenerator {
"oci.config.instance-principal.enabled",
"oci.vault.config.enabled",
"oci.vault.vaults[0].ocid",
"oci.vault.vaults[0].compartment-ocid"
"oci.vault.vaults[0].compartment-ocid",
"micronaut.metrics.enabled",
"micronaut.metrics.binders.files.enabled",
"micronaut.metrics.binders.jdbc.enabled",
"micronaut.metrics.binders.jvm.enabled",
"micronaut.metrics.binders.logback.enabled",
"micronaut.metrics.binders.processor.enabled",
"micronaut.metrics.binders.uptime.enabled",
"micronaut.metrics.binders.web.enabled",
"micronaut.metrics.export.oraclecloud.enabled",
"micronaut.metrics.export.oraclecloud.namespace",
"micronaut.metrics.export.oraclecloud.compartmentId"
);

public PropertiesGenerator(boolean local) {
Expand Down Expand Up @@ -113,6 +125,20 @@ public PropertiesGenerator(boolean local) {
}
}
}
break;
case "MetricsNamespace": //NOI18N
application.put("micronaut.metrics.enabled", "true"); //NOI18N
application.put("micronaut.metrics.binders.files.enabled", "true"); //NOI18N
application.put("micronaut.metrics.binders.jdbc.enabled", "true"); //NOI18N
application.put("micronaut.metrics.binders.jvm.enabled", "true"); //NOI18N
application.put("micronaut.metrics.binders.logback.enabled", "true"); //NOI18N
application.put("micronaut.metrics.binders.processor.enabled", "true"); //NOI18N
application.put("micronaut.metrics.binders.uptime.enabled", "true"); //NOI18N
application.put("micronaut.metrics.binders.web.enabled", "true"); //NOI18N
application.put("micronaut.metrics.export.oraclecloud.enabled", "true"); //NOI18N
application.put("micronaut.metrics.export.oraclecloud.namespace", ((MetricsNamespaceItem) item).getName()); //NOI18N
application.put("micronaut.metrics.export.oraclecloud.compartmentId", ((MetricsNamespaceItem) item).getCompartmentId()); //NOI18N

}
}
if (!local) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@
"SelectBucket=Select Object Storage Bucket",
"SelectCluster=Select Oracle Container Engine for Kubernetes",
"SelectCompute=Select Compute Instance",
"SelectContainerRepository=Select Container Repository"
"SelectContainerRepository=Select Container Repository",
"SelectMetricsNamespace=Select Metrics Namespace"
})
public final class SuggestedItem extends OCIItem {

Expand Down Expand Up @@ -69,6 +70,8 @@ public static SuggestedItem forPath(String path) {
return new SuggestedItem("ComputeInstance", Bundle.SelectCompute(), Collections.singleton("Cluster")); //NOI18N
case "ContainerRepository": //NOI18N
return new SuggestedItem("ContainerRepository", Bundle.SelectContainerRepository(), Collections.singleton("ContainerRepository")); //NOI18N
case "MetricsNamespace": //NOI18N
return new SuggestedItem("MetricsNamespace", Bundle.SelectMetricsNamespace(), Collections.singleton("MetricsNamespace")); //NOI18N
default:
throw new IllegalArgumentException("");
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.cloud.oracle.developer;

import java.net.MalformedURLException;
import java.net.URL;
import org.netbeans.modules.cloud.oracle.adm.URLProvider;
import org.netbeans.modules.cloud.oracle.items.OCID;
import org.netbeans.modules.cloud.oracle.items.OCIItem;
import org.openide.util.Exceptions;

/**
*
* @author Dusan Petrovic
*/
public class MetricsItem extends OCIItem implements URLProvider {

private static final String DEFAULT_AGGREGATION_FUNCTION = "mean()";
private static final String DEFAULT_INTERVAL = "1m";
private static final String BASE_URL = "https://cloud.oracle.com/monitoring/explore";
private static final String DEFAULT_ADVANCED_MODE = "false";
private static final String DEFAULT_AGGREGATE_METRICS = "false";

final String namespace;
final String region;

public MetricsItem(String compartmentId, String name, String namespace, String region) {
super(OCID.of(null, "MetricsNamespace/Metrics"), compartmentId, name);
this.namespace = namespace;
this.region = region;
}

public String getNamespace() {
return namespace;
}

@Override
public URL getURL() {
StringBuilder sb = new StringBuilder(BASE_URL);
sb.append("?");
sb.append("panelConfigs[0][advanced]=").append(DEFAULT_ADVANCED_MODE).append("&");
sb.append("panelConfigs[0][content][aggregate]=").append(DEFAULT_AGGREGATE_METRICS).append("&");
sb.append("panelConfigs[0][content][compartmentId]=").append(this.getCompartmentId()).append("&");
sb.append("panelConfigs[0][content][metricName]=").append(this.getName()).append("&");
sb.append("panelConfigs[0][content][namespace]=").append(this.getNamespace()).append("&");
sb.append("panelConfigs[0][content][interval]=").append(DEFAULT_INTERVAL).append("&");
sb.append("panelConfigs[0][content][statistic]=").append(DEFAULT_AGGREGATION_FUNCTION).append("&");
sb.append("region=").append(this.region);
try {
return new URL(sb.toString());
} catch (MalformedURLException ex) {
Exceptions.printStackTrace(ex);
}
return null;
}
}
Loading

0 comments on commit d218baf

Please sign in to comment.