Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(211)

Side by Side Diff: appengine/swarming/server/config.py

Issue 1926443003: swarming: read configs from luci-config (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/luci-py@master
Patch Set: unlint Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2013 The LUCI Authors. All rights reserved. 1 # Copyright 2013 The LUCI Authors. All rights reserved.
2 # Use of this source code is governed by the Apache v2.0 license that can be 2 # Use of this source code is governed by the Apache v2.0 license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Instance specific settings.""" 5 """Instance specific settings."""
6 6
7 from google.appengine.ext import ndb 7 import logging
8 import posixpath
8 9
9 from components.datastore_utils import config 10 from components import config
11 from components import gitiles
12 from components import net
13 from components import utils
14 from components.config import validation
15
16 from proto import config_pb2
17
18 SETTINGS_CFG_FILENAME = 'settings.cfg'
10 19
11 20
12 class GlobalConfig(config.GlobalConfig): 21 ConfigApi = config.ConfigApi
13 """Application wide settings."""
14 # id to inject into pages if applicable.
15 google_analytics = ndb.StringProperty(indexed=False, default='')
16
17 # The number of seconds an old task can be deduped from.
18 reusable_task_age_secs = ndb.IntegerProperty(
19 indexed=False, default=7*24*60*60)
20
21 # The amount of time that has to pass before a machine is considered dead.
22 bot_death_timeout_secs = ndb.IntegerProperty(default=10*60)
23
24 # Enable ts_mon based monitoring.
25 enable_ts_monitoring = ndb.BooleanProperty(indexed=False, default=False)
26 22
27 23
28 def settings(fresh=False): 24 @validation.self_rule(SETTINGS_CFG_FILENAME, config_pb2.SettingsCfg)
29 """Loads GlobalConfig or a default one if not present. 25 def validate_settings(_cfg, _ctx):
26 """Validates settings.cfg file against proto message schema."""
30 27
31 If fresh=True, a full fetch from NDB is done. 28
29 @utils.memcache('config:get_configs_url', time=300)
M-A Ruel 2016/04/27 17:50:45 5 minutes is a long time. 1 minute would be more s
nodir 2016/04/27 18:37:21 This value almost never changes.
M-A Ruel 2016/04/27 18:51:19 but when it does, we don't want to wait. Furthermo
nodir 2016/04/27 19:08:52 changed to 1min
30 def _get_configs_url():
31 """Returns URL where luci-config fetches configs from."""
32 url = None
33 try:
34 url = config.get_config_set_location(config.self_config_set())
35 except net.Error:
36 logging.exception('Could not get configs URL')
37 return url or 'about:blank'
38
39
40 def _gitiles_url(configs_url, rev, path):
41 """URL to a directory in gitiles -> URL to a file at concrete revision."""
42 try:
43 loc = gitiles.Location.parse(configs_url)
44 return str(loc._replace(
45 treeish=rev or loc.treeish,
46 path=posixpath.join(loc.path, path)))
47 except ValueError:
48 # Not a gitiles URL, return as is.
49 return configs_url
50
51
52 def _get_settings():
53 """Returns (rev, cfg) where cfg is a parsed SettingsCfg message.
54
55 The config is cached in the datastore.
32 """ 56 """
33 if fresh: 57 rev = None
34 GlobalConfig.clear_cache() 58 cfg = None
35 return GlobalConfig.cached() 59 try:
60 # store_last_good=True tells config component to update the config file
61 # in a cron job. Here we just read from datastore.
62 rev, cfg = config.get_self_config(
63 SETTINGS_CFG_FILENAME, config_pb2.SettingsCfg, store_last_good=True)
64 except config.CannotLoadConfigError:
65 logging.exception('Could not load settings.cfg; using defaults')
66 if not cfg:
67 cfg = config_pb2.SettingsCfg(
68 reusable_task_age_secs=7*24*60*60,
69 bot_death_timeout_secs=10*60,
70 )
M-A Ruel 2016/04/27 17:50:45 This doesn't match the code style of this project.
nodir 2016/04/27 18:37:21 you mean that the closing bracket must be on the s
M-A Ruel 2016/04/27 18:51:19 yes
71 return rev, cfg
72
73
74 def settings_info():
75 """Returns (settings, rev, rev_url) of the settings file.
76
77 Where settings is a parsed SettingsCfg message, rev is the revision of the
78 config and rev_url is a URL of a human-consumable page that displays the
79 config.
80 """
81 rev, cfg = _get_settings()
82 rev_url = _gitiles_url(_get_configs_url(), rev, SETTINGS_CFG_FILENAME)
83 return cfg, rev, rev_url
84
85
86 def settings():
87 """Loads settings from an NDB-based cache or a default one if not present."""
88 return _get_settings()[1]
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698