| Index: appengine/monorail/settings.py
|
| diff --git a/appengine/monorail/settings.py b/appengine/monorail/settings.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5a463faefe29d005080ceb61eaeeda8ca64e01e0
|
| --- /dev/null
|
| +++ b/appengine/monorail/settings.py
|
| @@ -0,0 +1,297 @@
|
| +# Copyright 2016 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is govered by a BSD-style
|
| +# license that can be found in the LICENSE file or at
|
| +# https://developers.google.com/open-source/licenses/bsd
|
| +
|
| +"""Defines settings for monorail."""
|
| +
|
| +import os
|
| +import re
|
| +
|
| +from google.appengine.api import app_identity
|
| +
|
| +from proto import project_pb2
|
| +from proto import site_pb2
|
| +
|
| +
|
| +# This file is divided into the following parts:
|
| +# 1. Settings you must edit before deploying your site.
|
| +# 2. Settings you would edit on certainoccasions while maintaining your site.
|
| +# 3. Settings enable specific features.
|
| +# 4. Settings that you can usually leave as-is.
|
| +
|
| +# TODO(jrobbins): Store these settings in the database and implement
|
| +# servlets for domain admins to edit them without needing to redeploy the
|
| +# app.
|
| +
|
| +
|
| +####
|
| +# Part 1: settings that you must edit before deploying your site.
|
| +
|
| +# Email address that is offered to users who might need help using the tool.
|
| +feedback_email = 'jrobbins+monorail.feedback@chromium.org'
|
| +
|
| +# For debugging when running in staging: send all outbound
|
| +# email to this address rather than to the actual address that
|
| +# it would normally be sent to.
|
| +send_all_email_to = 'jrobbins+all+%(user)s+%(domain)s@chromium.org'
|
| +
|
| +# For debugging when running the dev server locally: send all outbound
|
| +# email to this address rather than to the actual address that
|
| +# it would normally be sent to.
|
| +send_dev_email_to = (send_all_email_to or
|
| + 'jrobbins+dev+%(user)s+%(domain)s@chromium.org')
|
| +
|
| +# User to send emails from Monorail as. The reply_to sections of emails will be
|
| +# set to appspotmail addresses.
|
| +# Note: If configuring a new monorail instance without DNS records and reserved
|
| +# email addresses then setting these values to
|
| +# 'reply@${app_id}.appspotmail.com' and 'noreply@{app_id}.appspotmail.com'
|
| +# is likely the best option.
|
| +send_email_as = 'monorail@chromium.org'
|
| +send_noreply_email_as = 'monorail+noreply@chromium.org'
|
| +
|
| +# The default is to look for a database named "monorail" in replicas
|
| +# named "replica-00" .. "replica-09"
|
| +db_database_name = 'monorail'
|
| +db_replica_prefix = 'replica-'
|
| +
|
| +# The number of logical database shards used. Each replica is complete copy
|
| +# of the master, so any replica DB can answer queries about any logical shard.
|
| +num_logical_shards = 10
|
| +
|
| +# "Learn more" link for the site home page
|
| +# TODO(agable): Update this when we have publicly visible documentation.
|
| +learn_more_link = None
|
| +
|
| +# Site name, displayed above the search box on the site home page.
|
| +site_name = 'Monorail'
|
| +
|
| +# Who is allowed to create new projects? Set to ANYONE or ADMIN_ONLY.
|
| +project_creation_restriction = site_pb2.UserTypeRestriction.ADMIN_ONLY
|
| +
|
| +# Default access level when creating a new project.
|
| +default_access_level = project_pb2.ProjectAccess.ANYONE
|
| +
|
| +# Possible access levels to offer when creating a new project.
|
| +allowed_access_levels = [
|
| + project_pb2.ProjectAccess.ANYONE,
|
| + project_pb2.ProjectAccess.MEMBERS_ONLY]
|
| +
|
| +# Who is allowed to create user groups? Set to ANYONE or ADMIN_ONLY.
|
| +group_creation_restriction = site_pb2.UserTypeRestriction.ADMIN_ONLY
|
| +
|
| +####
|
| +# Part 2: Settings you would edit on certain occasions.
|
| +
|
| +# Read-only mode prevents changes while we make server-side changes.
|
| +read_only = False
|
| +
|
| +# Timestamp used to notify users when the read only mode or other status
|
| +# described in the banner message takes effect. It is
|
| +# expressed as a 5-tuple of ints: (year, month, day, hour, minute),
|
| +# e.g. (2009, 3, 20, 21, 45) represents March 20 2009 9:45PM.
|
| +banner_time = None
|
| +
|
| +# Display a site maintenance banner on every monorail page.
|
| +banner_message = ''
|
| +
|
| +# User accounts with email addresses at these domains are all banned.
|
| +banned_user_domains = []
|
| +
|
| +
|
| +####
|
| +# Part 3: Settings that enable specific features
|
| +
|
| +# Enables "My projects" drop down menu
|
| +enable_my_projects_menu = True
|
| +
|
| +# Enables stars in the UI for projects
|
| +enable_project_stars = True
|
| +
|
| +# Enables stars in the UI for users
|
| +enable_user_stars = True
|
| +
|
| +# Enable quick edit mode in issue peek dialog and show dialog on hover
|
| +enable_quick_edit = True
|
| +
|
| +
|
| +####
|
| +# Part 4: Settings that you can usually leave as-is.
|
| +
|
| +# dev_mode makes the server slower and more dynamic for easier debugging.
|
| +# E.g., template files are reloaded on each request.
|
| +dev_mode = os.environ['SERVER_SOFTWARE'].startswith('Development')
|
| +unit_test_mode = os.environ['SERVER_SOFTWARE'].startswith('test')
|
| +
|
| +# If we assume 1KB each, then this would be 400 MB for this cache in frontends
|
| +# that have only 1024 MB total.
|
| +issue_cache_max_size = 400 * 1000
|
| +
|
| +# 150K users should be enough for all the frequent daily users plus the
|
| +# occasional users that are mentioned on any popular pages.
|
| +user_cache_max_size = 150 * 1000
|
| +
|
| +# Recompute derived issue fields via work items rather than while
|
| +# the user is waiting for a page to load.
|
| +recompute_derived_fields_in_worker = True
|
| +
|
| +# The issue search SQL queries have a LIMIT clause with this amount.
|
| +search_limit_per_shard = 10 * 1000 # This is more than all open in chromium.
|
| +
|
| +# The GAE search feature is slow, so don't request too many results.
|
| +fulltext_limit_per_shard = 1 * 1000
|
| +
|
| +# Retrieve at most this many issues from the DB when showing an issue grid.
|
| +max_issues_in_grid = 6000
|
| +# This is the most tiles that we show in grid view. If the number of results
|
| +# is larger than this, we display IDs instead.
|
| +max_tiles_in_grid = 1000
|
| +
|
| +# Maximum number of project results to display on a single pagination page
|
| +max_project_search_results_per_page = 100
|
| +
|
| +# Maxium number of results per pagination page, regardless of what
|
| +# the user specified in his/her request. This exists to prevent someone
|
| +# from doing a DoS attack that makes our servers do a huge amount of work.
|
| +max_artifact_search_results_per_page = 1000
|
| +
|
| +# Maximum number of comments to display on a single pagination page
|
| +max_comments_per_page = 500
|
| +
|
| +# Max number of issue starrers to notify via email. Issues with more
|
| +# that this many starrers will only notify the last N of them after a
|
| +# comment from a project member.
|
| +max_starrers_to_notify = 4000
|
| +
|
| +# In projects that have more than this many issues the next and prev
|
| +# links on the issue detail page will not be shown when the user comes
|
| +# directly to an issue without specifying any query terms.
|
| +threshold_to_suppress_prev_next = 10000
|
| +
|
| +# Format string for the name of the FTS index shards for issues.
|
| +search_index_name_format = 'issues%02d'
|
| +
|
| +# Name of the FTS index for projects (not sharded).
|
| +project_search_index_name = 'projects'
|
| +
|
| +# Each backend has this many seconds to respond, otherwise frontend gives up
|
| +# on that shard.
|
| +backend_deadline = 45
|
| +
|
| +# If the initial call to a backend fails, try again this many times.
|
| +# Initial backend calls are failfast, meaning that they fail immediately rather
|
| +# than queue behind other requests. The last 2 retries will wait in queue.
|
| +backend_retries = 3
|
| +
|
| +# Do various extra logging at INFO level.
|
| +enable_profiler_logging = False
|
| +
|
| +# Mail sending domain. Normally set this to None and it will be computed
|
| +# automatically from your AppEngine APP_ID. But, it can be overridden below.
|
| +mail_domain = None
|
| +
|
| +# URL format to browse source code revisions. This can be overridden
|
| +# in specific projects by setting project.revision_url_format.
|
| +# The format string may include "{revnum}" for the revision number.
|
| +revision_url_format = 'https://crrev.com/{revnum}'
|
| +
|
| +# Users with emails in the priviledged domains see unobscured email addresses.
|
| +priviledged_user_domains = [
|
| + 'google.com', 'chromium.org', 'webrtc.org',
|
| + ]
|
| +
|
| +# Names of projects on code.google.com which we allow cross-linking to.
|
| +recognized_codesite_projects = [
|
| + 'chromium-os',
|
| + 'chrome-os-partner',
|
| +]
|
| +
|
| +###
|
| +# Part 5: Instance-specific settings that override lines above.
|
| +
|
| +# We usually use a DB instance named "master" for writes.
|
| +db_master_name = 'master'
|
| +# This ID is for -staging and other misc deployments. Prod is defined below.
|
| +analytics_id = 'UA-55762617-20'
|
| +
|
| +if unit_test_mode:
|
| + db_cloud_project = '' # No real database is used during unit testing.
|
| +else:
|
| + app_id = app_identity.get_application_id()
|
| +
|
| + if app_id == 'monorail-staging':
|
| + site_name = 'Monorail Staging'
|
| + banner_message = 'This staging site does not send emails.'
|
| + # The Google Cloud SQL databases to use.
|
| + db_cloud_project = app_id
|
| + db_replica_prefix = 'replica-7-'
|
| +
|
| + elif app_id == 'monorail-prod':
|
| + send_all_email_to = None # Deliver it to the intended users.
|
| + # The Google Cloud SQL databases to use.
|
| + db_cloud_project = app_id
|
| + analytics_id = 'UA-55762617-14'
|
| +
|
| +if dev_mode:
|
| + site_name = 'Monorail Dev'
|
| + num_logical_shards = 10
|
| +
|
| +# Combine the customized info above to make the name of the master DB instance.
|
| +db_instance = db_cloud_project + ':' + db_master_name
|
| +
|
| +# Format string for the name of the physical database replicas.
|
| +physical_db_name_format = db_cloud_project + ':' + db_replica_prefix + '%02d'
|
| +
|
| +# preferred domains to display
|
| +preferred_domains = {
|
| + 'monorail-prod.appspot.com': 'bugs.chromium.org',
|
| + 'monorail-staging.appspot.com': 'bugs-staging.chromium.org'}
|
| +
|
| +# Borg robot service account
|
| +borg_service_account = 'chrome-infra-prod-borg@system.gserviceaccount.com'
|
| +
|
| +# Prediction API params.
|
| +classifier_project_id = 'project-id-testing-only'
|
| +
|
| +# Necessary for tests.
|
| +if 'APPLICATION_ID' not in os.environ:
|
| + os.environ['APPLICATION_ID'] = 'testing app'
|
| +
|
| +if dev_mode:
|
| + # This is monorail-staging. There is no local stub for Cloud Prediction.
|
| + classifier_project_id = '52759169022'
|
| +else:
|
| + classifier_project_id = app_identity.get_application_id()
|
| +
|
| +classifier_model_id = 'spam'
|
| +
|
| +# Number of distinct users who have to flag an issue before it
|
| +# is autmatically removed as spam.
|
| +# 5 is an arbitrarily chosen value. Set it to something really high
|
| +# to effectively disable spam flag threshhold checking.
|
| +spam_flag_thresh = 5
|
| +
|
| +# If the classifier's confidence is less than this value, the
|
| +# item will show up in the spam moderation queue for manual
|
| +# review.
|
| +classifier_moderation_thresh = 1.0
|
| +
|
| +# If the classifier's confidence is greater than this value,
|
| +# and the label is 'spam', the item will automatically be created
|
| +# with is_spam=True, and will be filtered out from search results.
|
| +classifier_spam_thresh = 1.0
|
| +
|
| +ratelimiting_enabled = False
|
| +
|
| +# Enable cost-based rate limiting. This only applies if
|
| +# ratelimiting_enabled = True
|
| +ratelimiting_cost_enabled = True
|
| +
|
| +# Requests that take longer than this are hit with extra
|
| +# counts added to their bucket at the end of the request.
|
| +ratelimiting_cost_thresh_ms = 2000
|
| +
|
| +# Requests that hit ratelimiting_cost_thresh_sec get this
|
| +# extra amount added to their bucket at the end of the request.
|
| +ratelimiting_cost_penalty = 1
|
|
|