diff --git a/pom.xml b/pom.xml index 4237cdef..c97b4567 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.uid2 uid2-admin - 5.17.0 + 5.17.2-alpha-106-SNAPSHOT UTF-8 @@ -16,7 +16,7 @@ 1.12.2 5.11.2 - 8.0.25 + 8.0.32 0.5.10 ${project.version} diff --git a/src/main/java/com/uid2/admin/Main.java b/src/main/java/com/uid2/admin/Main.java index ed05b34d..8af13488 100644 --- a/src/main/java/com/uid2/admin/Main.java +++ b/src/main/java/com/uid2/admin/Main.java @@ -22,6 +22,7 @@ import com.uid2.admin.store.version.VersionGenerator; import com.uid2.admin.store.writer.*; import com.uid2.admin.vertx.AdminVerticle; +import com.uid2.admin.vertx.Endpoints; import com.uid2.admin.vertx.JsonUtil; import com.uid2.admin.vertx.WriteLock; import com.uid2.admin.vertx.api.V2RouterModule; @@ -42,6 +43,7 @@ import com.uid2.shared.store.RotatingSaltProvider; import com.uid2.shared.store.reader.*; import com.uid2.shared.store.scope.GlobalScope; +import com.uid2.shared.util.HTTPPathMetricFilter; import com.uid2.shared.vertx.VertxUtils; import io.micrometer.core.instrument.Gauge; import io.micrometer.core.instrument.MeterRegistry; @@ -422,13 +424,8 @@ private static void setupMetrics(MicrometerMetricsOptions metricOptions) { prometheusRegistry.config() // providing common renaming for prometheus metric, e.g. "hello.world" to "hello_world" .meterFilter(new PrometheusRenameFilter()) - .meterFilter(MeterFilter.replaceTagValues(Label.HTTP_PATH.toString(), actualPath -> { - try { - return HttpUtils.normalizePath(actualPath).split("\\?")[0]; - } catch (IllegalArgumentException e) { - return actualPath; - } - })) + .meterFilter(MeterFilter.replaceTagValues(Label.HTTP_PATH.toString(), + actualPath -> HTTPPathMetricFilter.filterPath(actualPath, Endpoints.pathSet()))) // adding common labels .commonTags("application", "uid2-admin"); diff --git a/src/main/java/com/uid2/admin/vertx/Endpoints.java b/src/main/java/com/uid2/admin/vertx/Endpoints.java new file mode 100644 index 00000000..7d63a4e2 --- /dev/null +++ b/src/main/java/com/uid2/admin/vertx/Endpoints.java @@ -0,0 +1,147 @@ +package com.uid2.admin.vertx; + +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public enum Endpoints { + API_CLIENT_METADATA("/api/client/metadata"), + API_CLIENT_REWRITE_METADATA("/api/client/rewrite_metadata"), + API_CLIENT_LIST("/api/client/list"), + API_CLIENT_LIST_SITEID("/api/client/list/:siteId"), + API_CLIENT_KEYID("/api/client/keyId"), + API_CLIENT_CONTACT("/api/client/contact"), + API_CLIENT_REVEAL("/api/client/reveal"), + API_CLIENT_ADD("/api/client/add"), + API_CLIENT_DEL("/api/client/del"), + API_CLIENT_UPDATE("/api/client/update"), + API_CLIENT_DISABLE("/api/client/disable"), + API_CLIENT_ENABLE("/api/client/enable"), + API_CLIENT_ROLES("/api/client/roles"), + API_CLIENT_RENAME("/api/client/rename"), + + API_CLIENT_SIDE_KEYPAIRS_ADD("/api/client_side_keypairs/add"), + API_CLIENT_SIDE_KEYPAIRS_UPDATE("/api/client_side_keypairs/update"), + API_CLIENT_SIDE_KEYPAIRS_LIST("/api/client_side_keypairs/list"), + API_CLIENT_SIDE_KEYPAIRS_SUBSCRIPTIONID("/api/client_side_keypairs/:subscriptionId"), + API_CLIENT_SIDE_KEYPAIRS_BY_SITE("/api/v2/sites/:siteId/client-side-keypairs"), + + API_ENCLAVE_METADATA("/api/enclave/metadata"), + API_ENCLAVE_LIST("/api/enclave/list"), + API_ENCLAVE_ADD("/api/enclave/add"), + API_ENCLAVE_DEL("/api/enclave/del"), + + API_ENCRYPTED_FILES_REFRESH("/api/encrypted-files/refresh"), + API_ENCRYPTED_FILES_SYNC_NOW("/api/encrypted-files/syncNow"), + + API_KEY_LIST("/api/key/list"), + API_KEY_LIST_KEYSET_KEYS("/api/key/list_keyset_keys"), + API_KEY_REWRITE_METADATA("/api/key/rewrite_metadata"), + API_KEY_ROTATE_MASTER("/api/key/rotate_master"), + API_KEY_ADD("/api/key/add"), + API_KEY_ROTATE_SITE("/api/key/rotate_site"), + API_KEY_ROTATE_KEYSET_KEY("/api/key/rotate_keyset_key"), + API_KEY_ROTATE_ALL_SITES("/api/key/rotate_all_sites"), + + API_JOB_DISPATCHER_CURRENT_JOB("/api/job-dispatcher/current-job"), + API_JOB_DISPATCHER_JOB_QUEUE("/api/job-dispatcher/job-queue"), + + API_KEYS_ACL_LIST("/api/keys_acl/list"), + API_KEYS_ACL_REWRITE_METADATA("/api/keys_acl/rewrite_metadata"), + + API_OPERATOR_METADATA("/api/operator/metadata"), + API_OPERATOR_LIST("/api/operator/list"), + API_OPERATOR_REVEAL("/api/operator/reveal"), + API_OPERATOR_ADD("/api/operator/add"), + API_OPERATOR_DEL("/api/operator/del"), + API_OPERATOR_DISABLE("/api/operator/disable"), + API_OPERATOR_ENABLE("/api/operator/enable"), + API_OPERATOR_UPDATE("/api/operator/update"), + API_OPERATOR_ROLES("/api/operator/roles"), + + API_PARTNER_CONFIG_GET("/api/partner_config/get"), + API_PARTNER_CONFIG_UPDATE("/api/partner_config/update"), + + API_PRIVATE_SITES_REFRESH("/api/private-sites/refresh"), + API_PRIVATE_SITES_REFRESH_NOW("/api/private-sites/refreshNow"), + + API_SALT_SNAPSHOTS("/api/salt/snapshots"), + API_SALT_ROTATE("/api/salt/rotate"), + + API_SEARCH("/api/search"), + + API_SERVICE_LINK_LIST("/api/service_link/list"), + API_SERVICE_LINK_ADD("/api/service_link/add"), + API_SERVICE_LINK_UPDATE("/api/service_link/update"), + API_SERVICE_LINK_DELETE("/api/service_link/delete"), + + API_SERVICE_LIST("/api/service/list"), + API_SERVICE_LIST_SERVICE_ID("/api/service/list/:service_id"), + API_SERVICE_ADD("/api/service/add"), + API_SERVICE_UPDATE("/api/service/update"), + API_SERVICE_DELETE("/api/service/delete"), + + API_SHARING_LISTS("/api/sharing/lists"), + API_SHARING_LIST_SITEID("/api/sharing/list/:siteId"), + API_SHARING_KEYSETS("/api/sharing/keysets"), + API_SHARING_KEYSET("/api/sharing/keyset"), + API_SHARING_KEYSET_KEYSETID("/api/sharing/keyset/:keyset_id"), + API_SHARING_KEYSETS_RELATED("/api/sharing/keysets/related"), + + API_SITE_REWRITE_METADATA("/api/site/rewrite_metadata"), + API_SITE_LIST("/api/site/list"), + API_SITE_SITEID("/api/site/:siteId"), + API_SITE_ADD("/api/site/add"), + API_SITE_ENABLE("/api/site/enable"), + API_SITE_SET_TYPES("/api/site/set-types"), + API_SITE_DOMAIN_NAMES("/api/site/domain_names"), + API_SITE_APP_NAMES("/api/site/app_names"), + API_SITE_UPDATE("/api/site/update"), + + LOGIN("/login"), + LOGOUT("/logout"), + OPS_HEALTHCHECK("/ops/healthcheck"), + API_USERINFO("/api/userinfo"), + + WEB_ROOT("/"), + WEB_JS_MAIN("/js/main.js"), + WEB_JS_PARTICIPANT_SUMMARY("/js/participantSummary.js"), + WEB_JS_BOOTSTRAP("/js/bootstrap.bundle.min.js"), + WEB_CSS_COPY_SVG("/css/copy.svg"), + WEB_CSS_PARTICIPANT_SUMMARY("/css/participantSummary.css"), + WEB_CSS_STYLE("/css/style.css"), + + ADM_ONCALL_PARTICIPANT_SUMMARY("/adm/oncall/participant-summary.html"), + ADM_ONCALL_GENERATE_API_KEY_SECRET("/adm/oncall/generate-api-key-secret.html"), + ADM_ONCALL_GENERATE_CSTG_KEYPAIR("/adm/oncall/generate-cstg-keypair.html"), + ADM_ONCALL_SEARCH("/adm/oncall/search.html"), + ADM_SITE("/adm/site.html"), + ADM_CLIENT_SIDE_KEYPAIRS("/adm/client-side-keypairs.html"), + ADM_SERVICES("/adm/services.html"), + ADM_SERVICE_LINKS("/adm/service-links.html"), + ADM_CLIENT_KEY("/adm/client-key.html"), + ADM_KEYSETS("/adm/keysets.html"), + ADM_ENCRYPTION_KEY("/adm/encryption-key.html"), + ADM_SALT("/adm/salt.html"), + ADM_OPERATOR_KEY("/adm/operator-key.html"), + ADM_ENCLAVE_ID("/adm/enclave-id.html"), + ADM_ENCLAVE_GCP("/adm/enclave-gcp.html"), + ADM_ENCLAVE_GCP_V2("/adm/enclave-gcp-v2.html"), + ADM_PARTNER_CONFIG("/adm/partner-config.html"), + ADM_KEY_ACL("/adm/key-acl.html"); + + private final String path; + + Endpoints(final String path) { + this.path = path; + } + + public static Set pathSet() { + return Stream.of(Endpoints.values()).map(Endpoints::toString).collect(Collectors.toSet()); + } + + @Override + public String toString() { + return path; + } +}