You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sirona.apache.org by rm...@apache.org on 2013/11/04 09:24:57 UTC
svn commit: r1538521 - in /incubator/sirona/trunk:
core/src/main/java/org/apache/sirona/gauges/ src/site/markdown/
web/src/main/java/org/apache/sirona/web/discovery/
web/src/main/java/org/apache/sirona/web/registration/
web/src/main/java/org/apache/sir...
Author: rmannibucau
Date: Mon Nov 4 08:24:57 2013
New Revision: 1538521
URL: http://svn.apache.org/r1538521
Log:
using gauges for http status monitoring
Added:
incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/servlet/StatusGauge.java
incubator/sirona/trunk/web/src/test/resources/sirona.properties
Modified:
incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/Gauge.java
incubator/sirona/trunk/src/site/markdown/configuration.md
incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/discovery/GaugeDiscoveryListener.java
incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/registration/WebMonitoringInitializer.java
incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/servlet/MonitoringFilter.java
incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/session/SessionGauge.java
incubator/sirona/trunk/web/src/test/java/org/apache/sirona/test/web/RequestPerformanceTest.java
Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/Gauge.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/Gauge.java?rev=1538521&r1=1538520&r2=1538521&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/Gauge.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/gauges/Gauge.java Mon Nov 4 08:24:57 2013
@@ -20,6 +20,8 @@ import org.apache.sirona.Role;
import org.apache.sirona.repositories.Repository;
import org.apache.sirona.spi.SPI;
+import java.util.Collection;
+import java.util.Collections;
import java.util.LinkedList;
public interface Gauge {
@@ -32,9 +34,12 @@ public interface Gauge {
public static class LoaderHelper {
private LinkedList<Gauge> gauges = new LinkedList<Gauge>();
- public LoaderHelper(final boolean excludeParent, final String... includedPrefixes) {
+ public LoaderHelper(final boolean excludeParent, final Collection<? extends Gauge> manualGauges, final String... includedPrefixes) {
final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+ for (final Gauge g : manualGauges) {
+ addGauge(g);
+ }
for (final Gauge g : SPI.INSTANCE.find(Gauge.class, classLoader)) {
addGaugeIfNecessary(classLoader, g, excludeParent, includedPrefixes);
}
@@ -45,6 +50,10 @@ public interface Gauge {
}
}
+ public LoaderHelper(final boolean excludeParent, final String... includedPrefixes) {
+ this(excludeParent, Collections.<Gauge>emptyList(), includedPrefixes);
+ }
+
private void addGaugeIfNecessary(final ClassLoader classLoader, final Gauge g, final boolean excludeParent, final String... prefixes) {
final Class<? extends Gauge> gaugeClass = g.getClass();
if (!excludeParent || gaugeClass.getClassLoader() == classLoader) {
@@ -60,11 +69,15 @@ public interface Gauge {
return;
}
}
- Repository.INSTANCE.addGauge(g);
- gauges.add(g);
+ addGauge(g);
}
}
+ private void addGauge(Gauge g) {
+ Repository.INSTANCE.addGauge(g);
+ gauges.add(g);
+ }
+
public void destroy() {
for (final Gauge gauge : gauges) {
Repository.INSTANCE.stopGauge(gauge.role());
Modified: incubator/sirona/trunk/src/site/markdown/configuration.md
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/src/site/markdown/configuration.md?rev=1538521&r1=1538520&r2=1538521&view=diff
==============================================================================
--- incubator/sirona/trunk/src/site/markdown/configuration.md (original)
+++ incubator/sirona/trunk/src/site/markdown/configuration.md Mon Nov 4 08:24:57 2013
@@ -68,7 +68,9 @@ or to call manually `Configuration.shutd
* org.apache.sirona.web.activated: if auto deployment of web module is activated
* org.apache.sirona.web.monitored-urls: the mapping of monitored urls
-* org.apache.sirona.gauge.sessions.period: the gauge period for sessions number monitoring
+* org.apache.sirona.web.gauge.sessions.period: the gauge period for sessions number monitoring
+* org.apache.sirona.web.gauge.status.period: when status monitoring is activated the period for status gauges
+* org.apache.sirona.web.monitored-statuses: the comma separated list of monitored statuses (if not a default list is used)
#### CDI
Modified: incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/discovery/GaugeDiscoveryListener.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/discovery/GaugeDiscoveryListener.java?rev=1538521&r1=1538520&r2=1538521&view=diff
==============================================================================
--- incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/discovery/GaugeDiscoveryListener.java (original)
+++ incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/discovery/GaugeDiscoveryListener.java Mon Nov 4 08:24:57 2013
@@ -16,16 +16,71 @@
*/
package org.apache.sirona.web.discovery;
+import org.apache.sirona.Role;
+import org.apache.sirona.configuration.Configuration;
+import org.apache.sirona.counters.Unit;
import org.apache.sirona.gauges.Gauge;
+import org.apache.sirona.web.servlet.MonitoringFilter;
+import org.apache.sirona.web.servlet.StatusGauge;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.net.HttpURLConnection;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
public class GaugeDiscoveryListener implements ServletContextListener {
+ public static final String STATUS_GAUGES_ATTRIBUTE = "status-gauges";
+ private static final int[] DEFAULT_STATUSES = {
+ HttpURLConnection.HTTP_OK,
+ HttpURLConnection.HTTP_CREATED,
+ HttpURLConnection.HTTP_NO_CONTENT,
+ HttpURLConnection.HTTP_BAD_REQUEST,
+ HttpURLConnection.HTTP_MOVED_PERM,
+ HttpURLConnection.HTTP_MOVED_TEMP,
+ HttpURLConnection.HTTP_FORBIDDEN,
+ HttpURLConnection.HTTP_NOT_FOUND,
+ HttpURLConnection.HTTP_INTERNAL_ERROR
+ };
+
private Gauge.LoaderHelper helper;
@Override
public void contextInitialized(final ServletContextEvent sce) {
+ // init status gauges
+ final ConcurrentMap<Integer, StatusGauge> gauges = new ConcurrentHashMap<Integer, StatusGauge>(35);
+ if ("true".equalsIgnoreCase((String) sce.getServletContext().getAttribute(MonitoringFilter.MONITOR_STATUS))) {
+ final String monitoredStatuses = sce.getServletContext().getInitParameter(Configuration.CONFIG_PROPERTY_PREFIX + "web.monitored-statuses");
+ if (monitoredStatuses == null) {
+ for (final int status : DEFAULT_STATUSES) {
+ gauges.put(status, statusGauge(sce.getServletContext().getContextPath(), gauges, status));
+ }
+ /* we could use it but it defines 25 statuses, surely too much
+ for (final Field f : HttpURLConnection.class.getDeclaredFields()) {
+ final int modifiers = f.getModifiers();
+ if (f.getName().startsWith("HTTP_")
+ && Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers) && Modifier.isFinal(modifiers)) {
+ try {
+ final int status = (Integer) f.get(null);
+ gauges.put(status, statusGauge(sce.getServletContext().getContextPath(), gauges, (Integer) f.get(null)));
+ } catch (final IllegalAccessException e) {
+ // no-op
+ }
+ }
+ }
+ */
+ } else {
+ for (final String status : monitoredStatuses.split(",")) {
+ final int statusInt = Integer.parseInt(status.trim());
+ gauges.put(statusInt, statusGauge(sce.getServletContext().getContextPath(), gauges, statusInt));
+ }
+ }
+ sce.getServletContext().setAttribute(STATUS_GAUGES_ATTRIBUTE, gauges);
+ }
+
+ // discovery registration
final String prefixesStr = sce.getServletContext().getInitParameter("monitoring.discovery.packages");
final String[] prefixes;
if (prefixesStr != null) {
@@ -33,7 +88,7 @@ public class GaugeDiscoveryListener impl
} else {
prefixes = null;
}
- helper = new Gauge.LoaderHelper("true".equals(sce.getServletContext().getInitParameter("monitoring.discovery.exclude-parent")), prefixes);
+ helper = new Gauge.LoaderHelper("true".equals(sce.getServletContext().getInitParameter("monitoring.discovery.exclude-parent")), gauges.values(), prefixes);
}
@Override
@@ -42,4 +97,18 @@ public class GaugeDiscoveryListener impl
helper.destroy();
}
}
+
+ private static StatusGauge statusGauge(final String prefix, final ConcurrentMap<Integer, StatusGauge> gauges, final int status) {
+ final StatusGauge gauge = gauges.get(status);
+ if (gauge != null) {
+ return gauge;
+ }
+
+ final StatusGauge newGauge = new StatusGauge(new Role(prefix + "-HTTP-" + Integer.toString(status), Unit.UNARY));
+ final StatusGauge old = gauges.putIfAbsent(status, newGauge);
+ if (old != null) {
+ return old;
+ }
+ return newGauge;
+ }
}
Modified: incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/registration/WebMonitoringInitializer.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/registration/WebMonitoringInitializer.java?rev=1538521&r1=1538520&r2=1538521&view=diff
==============================================================================
--- incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/registration/WebMonitoringInitializer.java (original)
+++ incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/registration/WebMonitoringInitializer.java Mon Nov 4 08:24:57 2013
@@ -42,13 +42,15 @@ public class WebMonitoringInitializer im
return;
}
+ final String monStatus = Boolean.toString(!FALSE.equalsIgnoreCase(ctx.getInitParameter(MonitoringFilter.MONITOR_STATUS)));
+ ctx.setAttribute(MonitoringFilter.MONITOR_STATUS, monStatus);
+
ctx.addListener(MonitoringSessionListener.class);
ctx.addListener(GaugeDiscoveryListener.class);
if (ctx.getClassLoader().equals(Repository.class.getClassLoader())) {
ctx.addListener(SironaLifecycle.class);
}
- final String monStatus = Boolean.toString(!FALSE.equalsIgnoreCase(ctx.getInitParameter(MonitoringFilter.MONITOR_STATUS)));
String ignoredUrls = ctx.getInitParameter(MonitoringFilter.IGNORED_URLS);
String monitoredUrls = ctx.getInitParameter(Configuration.CONFIG_PROPERTY_PREFIX + "web.monitored-urls");
if (!"false".equalsIgnoreCase(monitoredUrls)) {
Modified: incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/servlet/MonitoringFilter.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/servlet/MonitoringFilter.java?rev=1538521&r1=1538520&r2=1538521&view=diff
==============================================================================
--- incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/servlet/MonitoringFilter.java (original)
+++ incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/servlet/MonitoringFilter.java Mon Nov 4 08:24:57 2013
@@ -16,12 +16,11 @@
*/
package org.apache.sirona.web.servlet;
+import org.apache.sirona.MonitoringException;
import org.apache.sirona.Role;
import org.apache.sirona.aop.AbstractPerformanceInterceptor;
import org.apache.sirona.configuration.Configuration;
-import org.apache.sirona.counters.Counter;
-import org.apache.sirona.repositories.Repository;
-import org.apache.sirona.stopwatches.StopWatch;
+import org.apache.sirona.web.discovery.GaugeDiscoveryListener;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
@@ -32,22 +31,14 @@ import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.net.HttpURLConnection;
import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
public class MonitoringFilter extends AbstractPerformanceInterceptor<MonitoringFilter.Invocation> implements Filter {
public static final String MONITOR_STATUS = Configuration.CONFIG_PROPERTY_PREFIX + "web.monitored-status";
public static final String IGNORED_URLS = Configuration.CONFIG_PROPERTY_PREFIX + "web.ignored-urls";
- private static final ConcurrentMap<Integer, Counter.Key> STATUS_KEYS = new ConcurrentHashMap<Integer, Counter.Key>();
-
- private boolean monitorStatus;
-
private String[] ignored = new String[0];
+ private Map<Integer, StatusGauge> statusGauges = null;
@Override
public void init(final FilterConfig filterConfig) throws ServletException {
@@ -57,20 +48,12 @@ public class MonitoringFilter extends Ab
}
final String monStatus = filterConfig.getInitParameter(MONITOR_STATUS);
- monitorStatus = monStatus == null || "true".equalsIgnoreCase(monStatus);
-
- for (final Field f : HttpURLConnection.class.getDeclaredFields()) {
- final int modifiers = f.getModifiers();
- if (f.getName().startsWith("HTTP_")
- && Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers) && Modifier.isFinal(modifiers)) {
- try {
- final int status = (Integer) f.get(null);
- STATUS_KEYS.put(status, statusKey((Integer) f.get(null)));
- } catch (final IllegalAccessException e) {
- // no-op
- }
- }
+ if ((monStatus == null || "true".equalsIgnoreCase(monStatus))
+ && filterConfig.getServletContext().getAttribute(GaugeDiscoveryListener.STATUS_GAUGES_ATTRIBUTE) == null) {
+ throw new MonitoringException("To monitor status activate " + GaugeDiscoveryListener.class.getName());
}
+
+ statusGauges = (Map<Integer, StatusGauge>) filterConfig.getServletContext().getAttribute(GaugeDiscoveryListener.STATUS_GAUGES_ATTRIBUTE);
}
@Override
@@ -98,9 +81,12 @@ public class MonitoringFilter extends Ab
}
throw new IOException(throwable);
} finally {
- if (monitorStatus) {
+ if (statusGauges != null) {
final int status = httpResponse.getStatus();
- Repository.INSTANCE.getCounter(statusKey(status)).add(1);
+ final StatusGauge statusGauge = statusGauges.get(status);
+ if (statusGauge != null) {
+ statusGauge.incr();
+ }
}
}
} else {
@@ -139,20 +125,6 @@ public class MonitoringFilter extends Ab
return uri.substring(context.length());
}
- private static Counter.Key statusKey(final int status) {
- final Counter.Key key = STATUS_KEYS.get(status);
- if (key != null) {
- return key;
- }
-
- final Counter.Key newKey = new Counter.Key(Role.WEB, "HTTP-" + Integer.toString(status));
- final Counter.Key old = STATUS_KEYS.putIfAbsent(status, newKey);
- if (old != null) {
- return old;
- }
- return newKey;
- }
-
protected static class Invocation {
protected final HttpServletRequest request;
protected final HttpServletResponse response;
Added: incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/servlet/StatusGauge.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/servlet/StatusGauge.java?rev=1538521&view=auto
==============================================================================
--- incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/servlet/StatusGauge.java (added)
+++ incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/servlet/StatusGauge.java Mon Nov 4 08:24:57 2013
@@ -0,0 +1,58 @@
+/*
+ * 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.apache.sirona.web.servlet;
+
+import org.apache.sirona.Role;
+import org.apache.sirona.configuration.Configuration;
+import org.apache.sirona.gauges.Gauge;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+public class StatusGauge implements Gauge {
+ private static final int PERIOD = Configuration.getInteger(Configuration.CONFIG_PROPERTY_PREFIX + "web.gauge.status.period", 4000);
+
+ private final Role role;
+ private final AtomicLong count = new AtomicLong(0);
+
+ public StatusGauge(final Role role) {
+ this.role = role;
+ }
+
+ @Override
+ public Role role() {
+ return role;
+ }
+
+ @Override
+ public double value() {
+ return count.getAndSet(0);
+ }
+
+ @Override
+ public long period() {
+ return PERIOD;
+ }
+
+ public void incr() {
+ count.incrementAndGet();
+ }
+
+ @Override
+ public String toString() {
+ return "StatusGauge{role=" + role + '}';
+ }
+}
Modified: incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/session/SessionGauge.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/session/SessionGauge.java?rev=1538521&r1=1538520&r2=1538521&view=diff
==============================================================================
--- incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/session/SessionGauge.java (original)
+++ incubator/sirona/trunk/web/src/main/java/org/apache/sirona/web/session/SessionGauge.java Mon Nov 4 08:24:57 2013
@@ -57,6 +57,6 @@ public class SessionGauge implements Gau
@Override
public long period() {
- return Configuration.getInteger(Configuration.CONFIG_PROPERTY_PREFIX + "gauge.sessions.period", 4000);
+ return Configuration.getInteger(Configuration.CONFIG_PROPERTY_PREFIX + "web.gauge.sessions.period", 4000);
}
}
Modified: incubator/sirona/trunk/web/src/test/java/org/apache/sirona/test/web/RequestPerformanceTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/web/src/test/java/org/apache/sirona/test/web/RequestPerformanceTest.java?rev=1538521&r1=1538520&r2=1538521&view=diff
==============================================================================
--- incubator/sirona/trunk/web/src/test/java/org/apache/sirona/test/web/RequestPerformanceTest.java (original)
+++ incubator/sirona/trunk/web/src/test/java/org/apache/sirona/test/web/RequestPerformanceTest.java Mon Nov 4 08:24:57 2013
@@ -17,12 +17,11 @@
package org.apache.sirona.test.web;
import com.gargoylesoftware.htmlunit.TextPage;
-import com.gargoylesoftware.htmlunit.WebAssert;
import com.gargoylesoftware.htmlunit.WebClient;
-import com.gargoylesoftware.htmlunit.html.HtmlPage;
import org.apache.catalina.startup.Constants;
import org.apache.sirona.Role;
import org.apache.sirona.counters.Counter;
+import org.apache.sirona.counters.Unit;
import org.apache.sirona.repositories.Repository;
import org.apache.sirona.web.registration.WebMonitoringInitializer;
import org.jboss.arquillian.container.test.api.Deployment;
@@ -30,9 +29,9 @@ import org.jboss.arquillian.junit.Arquil
import org.jboss.arquillian.test.api.ArquillianResource;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
-import org.jboss.shrinkwrap.impl.base.io.IOUtil;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -41,9 +40,9 @@ import javax.servlet.ServletContainerIni
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
+import java.util.Map;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
@RunWith(Arquillian.class)
public class RequestPerformanceTest {
@@ -79,17 +78,21 @@ public class RequestPerformanceTest {
}
@Test
- public void monitorStatus200() throws IOException {
+ public void knownStatusIsMonitored() throws IOException, InterruptedException {
+ final Role role = new Role("/sirona-test-HTTP-200", Unit.UNARY);
+ final int before = statusGaugeSum(role);
final TextPage page = newClient().getPage(base.toExternalForm() + "hit");
assertEquals(HttpURLConnection.HTTP_OK, page.getWebResponse().getStatusCode());
- assertEquals(1, Repository.INSTANCE.getCounter(new Counter.Key(Role.WEB, "HTTP-200")).getHits());
+ Thread.sleep(1000);
+ assertEquals(1, statusGaugeSum(role) - before);
}
@Test
- public void monitorStatus4567() throws IOException {
+ public void unknownStatusIsIgnored() throws IOException, InterruptedException {
final TextPage page = newClient().getPage(base.toExternalForm() + "hit?status=4567");
assertEquals(4567, page.getWebResponse().getStatusCode());
- assertEquals(1, Repository.INSTANCE.getCounter(new Counter.Key(Role.WEB, "HTTP-4567")).getHits());
+ Thread.sleep(1000);
+ assertEquals(0, statusGaugeSum(new Role("/sirona-test-HTTP-4567", Unit.UNARY)));
}
private static WebClient newClient() {
@@ -100,4 +103,16 @@ public class RequestPerformanceTest {
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
return webClient;
}
+
+ private static int statusGaugeSum(final Role role) {
+ return sum(Repository.INSTANCE.getGaugeValues(0, System.currentTimeMillis() + 1000, role));
+ }
+
+ private static int sum(final Map<Long, Double> gaugeValues) {
+ int sum = 0;
+ for (final Double d : gaugeValues.values()) {
+ sum += d.intValue();
+ }
+ return sum;
+ }
}
Added: incubator/sirona/trunk/web/src/test/resources/sirona.properties
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/web/src/test/resources/sirona.properties?rev=1538521&view=auto
==============================================================================
--- incubator/sirona/trunk/web/src/test/resources/sirona.properties (added)
+++ incubator/sirona/trunk/web/src/test/resources/sirona.properties Mon Nov 4 08:24:57 2013
@@ -0,0 +1,15 @@
+# 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.
+org.apache.sirona.gauge.web.status.period = 150