###############################################################################
# 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.
###############################################################################
####
# OFBiz ControlServlet Stats Settings
####

# The bin length should be <= one hour and evenly divisible into an hour
# set the stats bin length to 15 minutes
stats.bin.length.millis=900000

# Specify whether to use the visit history feature or not
stats.persist.visit=true
stats.persist.visitor=true

# Only counts hits if enabled, if not specified defaults to false
stats.enable.REQUEST=true
stats.enable.EVENT=true
stats.enable.VIEW=true
stats.enable.ENTITY=false
stats.enable.SERVICE=false

stats.persist.REQUEST.bin=true
stats.persist.EVENT.bin=true
stats.persist.VIEW.bin=true
stats.persist.ENTITY.bin=false
stats.persist.SERVICE.bin=false

stats.persist.REQUEST.hit=true
stats.persist.EVENT.hit=false
stats.persist.VIEW.hit=false
stats.persist.ENTITY.hit=false
stats.persist.SERVICE.hit=false

# Specify whether a proxy sits in front of this app server
# This allows VisitHandler to collect the client's real ip
stats.proxy.enabled=false

### Metric parameters (moving average)
# size of the considered subset (defines the window size)
metrics.estimation.size=100
# minimum time considered between 2 samplings for taking a record or not (must be > to metrics.estimation.time)  
metrics.estimation.time=1000
# used to smooth the differences between calculations. A value of "1" disables smoothing
metrics.smoothing.factor=0.7
