This is an automated email from the ASF dual-hosted git repository.
radu pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-graphql-core.git
The following commit(s) were added to refs/heads/master by this push:
new 1387c9c SLING-9744 - Add metrics for the persisted queries
1387c9c is described below
commit 1387c9cfdb1091ad68115253de68a79b855f12b5
Author: Radu Cotescu <[email protected]>
AuthorDate: Tue Sep 22 23:46:05 2020 +0200
SLING-9744 - Add metrics for the persisted queries
* renamed metrics
* unified metrics with OSGi configurations
---
docs/metrics.md | 5 +++--
.../core/cache/SimpleGraphQLCacheProvider.java | 26 +++++++++++-----------
.../sling/graphql/core/servlet/GraphQLServlet.java | 20 ++++++++++++-----
.../core/cache/SimpleGraphQLCacheProviderTest.java | 6 ++---
.../graphql/core/servlet/GraphQLServletTest.java | 2 +-
5 files changed, 34 insertions(+), 25 deletions(-)
diff --git a/docs/metrics.md b/docs/metrics.md
index 318752a..abe910e 100644
--- a/docs/metrics.md
+++ b/docs/metrics.md
@@ -12,7 +12,7 @@ This page documents the metrics the Apache Sling GraphQL Core
bundle exposes to
the number of cache evictions for <a
href="../README.md#caching-persisted-queries-api">persisted queries</a>
</dd>
-<dt>org.apache.sling.graphql.core.cache.SimpleGraphQLCacheProvider.capacity</dt>
+<dt>org.apache.sling.graphql.core.cache.SimpleGraphQLCacheProvider.cacheSize</dt>
<dd>
the maximum number of entries the cache can store
</dd>
@@ -38,7 +38,8 @@ This page documents the metrics the Apache Sling GraphQL Core
bundle exposes to
For each service instance of the
`org.apache.sling.graphql.core.servlet.GraphQLServlet` servlet, the following
additional
metrics are available, where the `<qualifier>` is a string using the
-`[rt=list of servlet resource types][m=list of servlet methods][s=list of
servlet selectors][e=list of servlet extensions]` pattern:
+`.rt:list of servlet resource types.m:list of servlet methods.s:list of
servlet selectors.e:list of servlet extensions` pattern (each
+ list uses `_` as an element separator):
<dl>
diff --git
a/src/main/java/org/apache/sling/graphql/core/cache/SimpleGraphQLCacheProvider.java
b/src/main/java/org/apache/sling/graphql/core/cache/SimpleGraphQLCacheProvider.java
index 5b4a7b7..97a6092 100644
---
a/src/main/java/org/apache/sling/graphql/core/cache/SimpleGraphQLCacheProvider.java
+++
b/src/main/java/org/apache/sling/graphql/core/cache/SimpleGraphQLCacheProvider.java
@@ -68,18 +68,18 @@ public class SimpleGraphQLCacheProvider implements
GraphQLCacheProvider {
@AttributeDefinition(
name = "Capacity",
- description = "The number of persisted queries to cache. If
the capacity is set to a number greater than 0, then this " +
- "parameter will have priority over maxSize.",
+ description = "The number of persisted queries to cache. If
the cache size is set to a number greater than 0, then this " +
+ "parameter will have priority over maxMemory.",
type = AttributeType.INTEGER,
min = "0"
)
- int capacity() default 0;
+ int cacheSize() default 0;
@AttributeDefinition(
name = "Max Values in Bytes",
description = "The maximum amount of memory the values stored
in the cache can use."
)
- long maxSize() default 10 * FileUtils.ONE_MB;
+ long maxMemory() default 10 * FileUtils.ONE_MB;
}
@@ -98,12 +98,12 @@ public class SimpleGraphQLCacheProvider implements
GraphQLCacheProvider {
private Counter evictions;
private static final String METRIC_NS =
SimpleGraphQLCacheProvider.class.getName();
- private static final String GAUGE_CAPACITY = METRIC_NS + ".capacity";
+ private static final String GAUGE_CACHE_SIZE = METRIC_NS + ".cacheSize";
private static final String GAUGE_ELEMENTS = METRIC_NS + ".elements";
private static final String GAUGE_MAX_MEMORY = METRIC_NS + ".maxMemory";
private static final String GAUGE_CURRENT_MEMORY = METRIC_NS +
".currentMemory";
private static final String COUNTER_EVICTIONS = METRIC_NS + ".evictions";
- private static final Set<String> MANUALLY_REGISTERED_METRICS = new
HashSet<>(Arrays.asList(GAUGE_CAPACITY, GAUGE_ELEMENTS,
+ private static final Set<String> MANUALLY_REGISTERED_METRICS = new
HashSet<>(Arrays.asList(GAUGE_CACHE_SIZE, GAUGE_ELEMENTS,
GAUGE_MAX_MEMORY, GAUGE_CURRENT_MEMORY));
@Activate
@@ -112,22 +112,22 @@ public class SimpleGraphQLCacheProvider implements
GraphQLCacheProvider {
readLock = readWriteLock.readLock();
writeLock = readWriteLock.writeLock();
int capacity;
- if (config.capacity() < 0) {
+ if (config.cacheSize() < 0) {
capacity = 0;
- LOGGER.debug("Cache capacity set to {}. Defaulting to 0.",
config.capacity());
+ LOGGER.debug("Cache capacity set to {}. Defaulting to 0.",
config.cacheSize());
} else {
- capacity = config.capacity();
+ capacity = config.cacheSize();
}
long maxMemory;
- if (config.maxSize() < 0) {
+ if (config.maxMemory() < 0) {
maxMemory = 0;
- LOGGER.debug("Cache max memory set to {}. Defaulting to 0.",
config.maxSize());
+ LOGGER.debug("Cache max memory set to {}. Defaulting to 0.",
config.maxMemory());
} else {
- maxMemory = config.maxSize();
+ maxMemory = config.maxMemory();
}
persistedQueriesCache = new InMemoryLRUCache(capacity, maxMemory);
LOGGER.debug("In-memory cache initialized: capacity={},
maxMemory={}.", capacity, maxMemory);
- metricRegistry.register(GAUGE_CAPACITY, (Gauge<Integer>) () ->
capacity);
+ metricRegistry.register(GAUGE_CACHE_SIZE, (Gauge<Integer>) () ->
capacity);
metricRegistry.register(GAUGE_MAX_MEMORY, (Gauge<Long>) () ->
maxMemory);
metricRegistry.register(GAUGE_CURRENT_MEMORY, (Gauge<Long>) () ->
persistedQueriesCache.currentSizeInBytes);
metricRegistry.register(GAUGE_ELEMENTS, (Gauge<Integer>) () ->
persistedQueriesCache.size());
diff --git
a/src/main/java/org/apache/sling/graphql/core/servlet/GraphQLServlet.java
b/src/main/java/org/apache/sling/graphql/core/servlet/GraphQLServlet.java
index 7943bb8..f38c29f 100644
--- a/src/main/java/org/apache/sling/graphql/core/servlet/GraphQLServlet.java
+++ b/src/main/java/org/apache/sling/graphql/core/servlet/GraphQLServlet.java
@@ -21,6 +21,7 @@
package org.apache.sling.graphql.core.servlet;
import java.io.IOException;
+import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -179,20 +180,27 @@ public class GraphQLServlet extends
SlingAllMethodsServlet {
patternGetPersistedQuery = null;
}
StringBuilder sb = new StringBuilder();
- sb.append("[rt=").append(String.join(",",
config.sling_servlet_resourceTypes())).append("]");
+ String[] resourceTypes = config.sling_servlet_resourceTypes();
+ Arrays.sort(resourceTypes);
+ sb.append("rt:").append(String.join("_", resourceTypes));
if (config.sling_servlet_methods().length > 0) {
- sb.append("[m=").append(String.join(",",
config.sling_servlet_methods())).append("]");
+ String[] methods = config.sling_servlet_methods();
+ Arrays.sort(methods);
+ sb.append(".m:").append(String.join("_", methods));
}
if (config.sling_servlet_selectors().length > 0) {
- sb.append("[s=").append(String.join(",",
config.sling_servlet_selectors())).append("]");
+ String[] selectors = config.sling_servlet_selectors();
+ Arrays.sort(selectors);
+ sb.append(".s:").append(String.join("_", selectors));
}
- if (config.sling_servlet_extensions().length > 0) {
- sb.append("[e=").append(String.join(",",
config.sling_servlet_extensions())).append("]");
+ if (extensions.length > 0) {
+ Arrays.sort(extensions);
+ sb.append(".e:").append(String.join("_", extensions));
}
servletRegistrationProperties = sb.toString();
cacheHits = metricsService.counter(METRIC_NS + "." +
servletRegistrationProperties + ".cache_hits");
cacheMisses = metricsService.counter(METRIC_NS + "." +
servletRegistrationProperties + ".cache_misses");
- requestsServed = metricsService.counter(METRIC_NS + "." +
servletRegistrationProperties + ".total_requests");
+ requestsServed = metricsService.counter(METRIC_NS + "." +
servletRegistrationProperties + ".requests_total");
gaugeCacheHitRate = METRIC_NS + "." + servletRegistrationProperties +
".cache_hit_rate";
metricRegistry.register(gaugeCacheHitRate,
(Gauge<Float>) () -> (float) (cacheHits.getCount() / (float)
(cacheHits.getCount() + cacheMisses.getCount())));
diff --git
a/src/test/java/org/apache/sling/graphql/core/cache/SimpleGraphQLCacheProviderTest.java
b/src/test/java/org/apache/sling/graphql/core/cache/SimpleGraphQLCacheProviderTest.java
index b42eaac..16fe357 100644
---
a/src/test/java/org/apache/sling/graphql/core/cache/SimpleGraphQLCacheProviderTest.java
+++
b/src/test/java/org/apache/sling/graphql/core/cache/SimpleGraphQLCacheProviderTest.java
@@ -62,7 +62,7 @@ public class SimpleGraphQLCacheProviderTest {
@Test
public void testMemoryLimits() {
- context.registerInjectActivateService(new
SimpleGraphQLCacheProvider(), "capacity", 0, "maxSize", 40);
+ context.registerInjectActivateService(new
SimpleGraphQLCacheProvider(), "cacheSize", 0, "maxMemory", 40);
SimpleGraphQLCacheProvider provider = (SimpleGraphQLCacheProvider)
context.getService(GraphQLCacheProvider.class);
assertNotNull(provider);
@@ -89,7 +89,7 @@ public class SimpleGraphQLCacheProviderTest {
@Test
public void testCapacityLimits() {
- context.registerInjectActivateService(new
SimpleGraphQLCacheProvider(), "capacity", 3, "maxSize", 0);
+ context.registerInjectActivateService(new
SimpleGraphQLCacheProvider(), "cacheSize", 3, "maxMemory", 0);
SimpleGraphQLCacheProvider provider = (SimpleGraphQLCacheProvider)
context.getService(GraphQLCacheProvider.class);
assertNotNull(provider);
@@ -116,7 +116,7 @@ public class SimpleGraphQLCacheProviderTest {
@Test
public void testCapacityHasPriorityOverMemory() {
- context.registerInjectActivateService(new
SimpleGraphQLCacheProvider(), "capacity", 2, "maxSize", 40);
+ context.registerInjectActivateService(new
SimpleGraphQLCacheProvider(), "cacheSize", 2, "maxMemory", 40);
SimpleGraphQLCacheProvider provider = (SimpleGraphQLCacheProvider)
context.getService(GraphQLCacheProvider.class);
assertNotNull(provider);
diff --git
a/src/test/java/org/apache/sling/graphql/core/servlet/GraphQLServletTest.java
b/src/test/java/org/apache/sling/graphql/core/servlet/GraphQLServletTest.java
index 6703d28..100bdc0 100644
---
a/src/test/java/org/apache/sling/graphql/core/servlet/GraphQLServletTest.java
+++
b/src/test/java/org/apache/sling/graphql/core/servlet/GraphQLServletTest.java
@@ -90,7 +90,7 @@ public class GraphQLServletTest {
SlingScalarsProvider slingScalarsProvider =
mock(SlingScalarsProvider.class);
context.registerService(slingScalarsProvider);
- context.registerInjectActivateService(new
SimpleGraphQLCacheProvider(), "maxSize", 10);
+ context.registerInjectActivateService(new
SimpleGraphQLCacheProvider(), "maxMemory", 10);
context.registerInjectActivateService(new GraphQLServlet(),
ServletResolverConstants.SLING_SERVLET_RESOURCE_TYPES, "a/b/c",
"persistedQueries.suffix", "/persisted");