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

Side by Side Diff: appengine/logdog/coordinator/project.go

Issue 1971623002: LogDog: Enable Coordinator to load project configs (Closed) Base URL: https://github.com/luci/luci-go@logdog-project-config
Patch Set: rebase (auto) 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package coordinator 5 package coordinator
6 6
7 import ( 7 import (
8 "strings" 8 "strings"
9 9
10 "github.com/luci/gae/service/datastore/meta" 10 "github.com/luci/gae/service/datastore/meta"
11 "github.com/luci/gae/service/info"
11 "github.com/luci/luci-go/common/config" 12 "github.com/luci/luci-go/common/config"
13 "github.com/luci/luci-go/common/proto/logdog/svcconfig"
12 "golang.org/x/net/context" 14 "golang.org/x/net/context"
13 ) 15 )
14 16
15 // projectNamespacePrefix is the datastore namespace prefix for project 17 // projectNamespacePrefix is the datastore namespace prefix for project
16 // namespaces. 18 // namespaces.
17 const projectNamespacePrefix = "luci." 19 const projectNamespacePrefix = "luci."
18 20
19 // ProjectNamespace returns the AppEngine namespace for a given luci-config 21 // ProjectNamespace returns the AppEngine namespace for a given luci-config
20 // project name. 22 // project name.
21 func ProjectNamespace(project config.ProjectName) string { 23 func ProjectNamespace(project config.ProjectName) string {
22 return projectNamespacePrefix + string(project) 24 return projectNamespacePrefix + string(project)
23 } 25 }
24 26
25 // ProjectFromNamespace returns the current project installed in the supplied 27 // ProjectFromNamespace returns the current project installed in the supplied
26 // Context's namespace. 28 // Context's namespace.
27 // 29 //
28 // If the namespace does not have a project namespace prefix, this function 30 // If the namespace does not have a project namespace prefix, this function
29 // will return an empty string. 31 // will return an empty string.
30 func ProjectFromNamespace(ns string) config.ProjectName { 32 func ProjectFromNamespace(ns string) config.ProjectName {
31 if !strings.HasPrefix(ns, projectNamespacePrefix) { 33 if !strings.HasPrefix(ns, projectNamespacePrefix) {
32 return "" 34 return ""
33 } 35 }
34 return config.ProjectName(ns[len(projectNamespacePrefix):]) 36 return config.ProjectName(ns[len(projectNamespacePrefix):])
35 } 37 }
36 38
39 // CurrentProject returns the current project based on the currently-loaded
40 // namespace.
41 //
42 // If there is no current namespace, or if the current namespace is not a valid
43 // project namespace, an empty string will be returned.
44 func CurrentProject(c context.Context) config.ProjectName {
45 if ns, ok := info.Get(c).GetNamespace(); ok {
46 return ProjectFromNamespace(ns)
47 }
48 return ""
49 }
50
51 // CurrentProjectConfig returns the project-specific configuration for the
52 // current project.
53 //
54 // If there is no current project namespace, or if the current project has no
55 // configuration, config.ErrInvalidConfig will be returned.
56 func CurrentProjectConfig(c context.Context) (*svcconfig.ProjectConfig, error) {
57 return GetServices(c).ProjectConfig(c, CurrentProject(c))
58 }
59
37 // AllProjectsWithNamespaces scans current namespaces and returns those that 60 // AllProjectsWithNamespaces scans current namespaces and returns those that
38 // belong to LUCI projects. 61 // belong to LUCI projects.
39 func AllProjectsWithNamespaces(c context.Context) ([]config.ProjectName, error) { 62 func AllProjectsWithNamespaces(c context.Context) ([]config.ProjectName, error) {
40 var projects []config.ProjectName 63 var projects []config.ProjectName
41 err := meta.NamespacesWithPrefix(c, projectNamespacePrefix, func(ns stri ng) error { 64 err := meta.NamespacesWithPrefix(c, projectNamespacePrefix, func(ns stri ng) error {
42 if proj := ProjectFromNamespace(ns); proj != "" { 65 if proj := ProjectFromNamespace(ns); proj != "" {
43 projects = append(projects, proj) 66 projects = append(projects, proj)
44 } 67 }
45 return nil 68 return nil
46 }) 69 })
47 if err != nil { 70 if err != nil {
48 return nil, err 71 return nil, err
49 } 72 }
50 return projects, nil 73 return projects, nil
51 } 74 }
OLDNEW
« no previous file with comments | « appengine/logdog/coordinator/coordinatorTest/service.go ('k') | appengine/logdog/coordinator/service.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698