# Application Configuration properties
#
# The default topology provider is DirectProvider.
topology.provider=org.apache.edgent.providers.development.DevelopmentProvider
#
application.name=GpsAnalyticsApplication
#

# Write console URL to file consoleUrl.txt
consoleUrl=yes

# =========================================================================
# Application stream logging configuration
# Where the app puts its stream logs.  
# The directory will be created when the topology
# runs if it doesn't already exist.
application.log.dir=/tmp/GpsAnalyticsApplication/logs

# =========================================================================
# Application "ranges" - e.g., for threshold detections
# Specify values generated by Range.toString():
#  <lowerBoundType><lowerBound>..<upperBound><upperBoundType>
#  where
#      lowerBoundType is "[" inclusive or "(" exclusive
#      upperBoundType is "]" inclusive or ")" exclusive
#      lowerBound or upperBound is "*" for open ranges,
#         e.g., [*..50]  for "atMost" 50
#
##sensor1.range.outside1hzMeanRange=[124..129]


# =========================================================================
# Patterns for identifying which streams to trace to System.out
# To enable use include.csv and/or includes.regex.
# To exclude an otherwise included file, use excludes.csv and/or excludes.regex
#
# Some tracing labels
# sensor1.raw1khz,sensor1.j1khz,sensor1.j1hzStats,sensor1.outside1hzMeanRange*,
# sensor1.periodicLastN*
#
#stream.tracing.includes.csv=sensor1.j1hzStats
##stream.tracing.includes.regex=sensor1.outside1hzMeanRange.*
#stream.tracing.excludes.regex=.*
#stream.tracing.excludes.csv=sensor1.raw1khz
