# 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.

# Salt to generate the hash to avoid whatever problems a collision may cause
playground_salt: Beam playground salt
# File content size limit. Since 1 character occupies 1 byte of memory, and 1 MB is approximately equal to 1000000 bytes, then maximum size of the snippet is 1000000
max_snippet_size: 1000000
# Length of the identifier that is used to store data in the cloud datastore. It's appropriate length to save storage size in the cloud datastore and provide good randomnicity
id_length: 11
# Cron expression for the scheduled task to remove unused snippets. Cron time: At 12:00 AM, on day 1 of the month, every month
# Check your cron expression here: https://crontab.cronhub.io/
# Time trigger for the scheduled task will be updated every time the application is restarted
removing_unused_snippets_cron: 0 0 0 1 */1 *
