# ***************************************************************************************************************************
# * 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.                                              *
# ***************************************************************************************************************************

#=======================================================================================================================
# Basic configuration file for SaaS microservices
# Subprojects can use this as a starting point.
#=======================================================================================================================


#=======================================================================================================================
# Jetty settings
#=======================================================================================================================
[Jetty]

# Path of the jetty.xml file used to configure the Jetty server.
config = files/jetty.xml

# Resolve Juneau variables in the jetty.xml file.
resolveVars = true

# Port to use for the jetty server.
# You can specify multiple ports.  The first available will be used.  '0' indicates to try a random port.
# The resulting available port gets set as the system property "availablePort" which can be referenced in the 
# jetty.xml file as "$S{availablePort}" (assuming resolveVars is enabled).
port = 10000,0,0,0

#=======================================================================================================================
# REST settings
#=======================================================================================================================
[REST]

# Comma-delimited list of key-value pairs that represent locations of static files that can be served up by your @RestResource-annotated
# classes.  These are static files that are served up by the servlet under the specified sub-paths.
# For example, given the following setting...
# 	staticFiles = htdocs:my-docs,styles/my-styles
# ...the URI "/servletPath/htdocs/javadoc.css" resolves to the path "/my-docs/javadoc.css".
# This path can be relative to the working directory, classpath root, or package of your resource class.
# Used by the BasicRestConfig interface that defines the following value:
# 	staticFiles="$C{REST/staticFiles}"
staticFiles = htdocs:htdocs

# Stylesheet to use for HTML views.
# Used by the BasicRestConfig interface that defines the following value:
# 	stylesheet="$C{REST/theme,servlet:/htdocs/themes/devops.css}"
theme = servlet:/htdocs/themes/devops.css

# Various look-and-feel settings used in the BasicRestConfig interface.
headerIcon = servlet:/htdocs/images/juneau.png
headerLink = http://juneau.apache.org
footerIcon = servlet:/htdocs/images/asf.png
footerLink = http://www.apache.org
favicon = $C{REST/headerIcon}
head = <link rel='icon' href='$U{$C{REST/favicon}}'/>
header = 
	<a href='$U{$C{REST/headerLink}}'>
		<img src='$U{$C{REST/headerIcon}}' style='position:absolute;top:5;right:5;background-color:transparent;height:30px'/>
	</a>
footer = 
	<a href='$U{$C{REST/footerLink}}'>
		<img style='float:right;padding-right:20px;height:32px' src='$U{$C{REST/footerIcon}}'>
	</a>

#=======================================================================================================================
# Console settings
#=======================================================================================================================
[Console]

enabled = true

# List of available console commands.
# These are classes that implements ConsoleCommand that allow you to submit commands to the microservice via
# the console.
# When listed here, the implementations must provide a no-arg constructor.
# They can also be provided dynamically by overriding the Microservice.createConsoleCommands() method.
commands = 
	org.apache.juneau.microservice.console.ExitCommand,
	org.apache.juneau.microservice.console.RestartCommand,
	org.apache.juneau.microservice.console.HelpCommand,
	org.apache.juneau.microservice.console.ConfigCommand,
	org.apache.juneau.examples.rest.command.EchoCommand

#=======================================================================================================================
# Logger settings
#-----------------------------------------------------------------------------------------------------------------------
# See FileHandler Java class for details.
#=======================================================================================================================
[Logging]

# The directory where to create the log file.
# Default is "."
logDir = ./target/logs

# The name of the log file to create for the main logger.
# The logDir and logFile make up the pattern that's passed to the FileHandler
# constructor.
# If value is not specified, then logging to a file will not be set up.
logFile = microservice.%g.log

# Whether to append to the existing log file or create a new one.
append = false

# The SimpleDateFormat format to use for dates.
dateFormat = yyyy.MM.dd hh:mm:ss

# The log message format.
# The value can contain any of the following variables:
# 	{date} - The date, formatted per dateFormat.
#	{class} - The class name.
#	{method} - The method name.
#	{logger} - The logger name.
#	{level} - The log level name.
#	{msg} - The log message.
#	{threadid} - The thread ID.
#	{exception} - The localized exception message.
format = [{date} {level}] {msg}%n

# The maximum log file size.
# Suffixes available for numbers.
# See Config.getInt(String,int) for details.
limit = 1M

# Max number of log files.
count = 5

# Default log levels.
# Format is lax-JSON.
# Keys are logger names.
# Values are serialized Level POJOs (SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST)
levels = 
	{ 
		'': 'WARNING', 
		org.apache.juneau: 'WARNING', 
		org.eclipse.jetty: 'WARNING' 
	}

# Only print unique stack traces once and then refer to them by a simple 8 character hash identifier.
# Useful for preventing log files from filling up with duplicate stack traces.
useStackTraceHashes = true

# The default level for the console logger.
# Values are serialized Level POJOs (SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST)
consoleLevel = WARNING

# The default level for the file logger.
# Values are serialized Level POJOs (SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST)
# Default is INFO.
fileLevel = INFO

#=======================================================================================================================
# System properties
#-----------------------------------------------------------------------------------------------------------------------
# These are arbitrary system properties that can be set during startup.
#=======================================================================================================================
[SystemProperties]

# Configure Jetty for StdErrLog Logging
# org.eclipse.jetty.util.log.class = org.eclipse.jetty.util.log.StrErrLog

# Configure Jetty to log using java-util logging
org.eclipse.jetty.util.log.class = org.apache.juneau.microservice.jetty.JettyLogger

# Jetty logging level
org.eclipse.jetty.LEVEL = WARN

derby.stream.error.file = $C{Logging/logDir}/derby-errors.log

# Note that any configuration properties can also be set globally as system properties...

# Disable classpath resource caching.
# Useful if you're attached using a debugger and you're modifying classpath resources while running.
RestContext.useClasspathResourceCaching.b = false

#=======================================================================================================================
# DockerRegistryResource properties
#=======================================================================================================================
[DockerRegistry]
url = http://docker.apache.org:5000/v1

#=======================================================================================================================
# SqlQueryResource properties
#=======================================================================================================================
[SqlQueryResource]
driver = org.apache.derby.jdbc.EmbeddedDriver
directory = target/derby/testDB
connectionUrl = jdbc:derby:$C{SqlQueryResource/directory};create=true
allowTempUpdates = true
includeRowNums = false

#=======================================================================================================================
# Source code location
#=======================================================================================================================
[Source]
gitHub = https://github.com/apache/juneau/blob/master/juneau-examples/juneau-examples-rest/src/main/java

#=======================================================================================================================
# PetStoreResource properties
#=======================================================================================================================
[PetStore]
headerImage = <a href='http://swagger.io'><img src='$U{servlet:/htdocs/cat.png}' style='position:absolute;top:5;right:5;background-color:transparent;height:30px'/></a>
