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

Side by Side Diff: logdog/server/service/config/flag.go

Issue 2647083003: LogDog: Use luci_config/server packages for config (Closed)
Patch Set: Comments. Created 3 years, 11 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
« no previous file with comments | « logdog/server/service/config/config_test.go ('k') | logdog/server/service/config/flag_test.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 The LUCI Authors. All rights reserved.
2 // Use of this source code is governed under the Apache License, Version 2.0
3 // that can be found in the LICENSE file.
4
5 package config
6
7 import (
8 "errors"
9 "flag"
10 "fmt"
11 "net/http"
12 "net/url"
13 "time"
14
15 "github.com/luci/luci-go/common/clock/clockflag"
16 "github.com/luci/luci-go/common/config"
17 "github.com/luci/luci-go/common/config/impl/filesystem"
18 "github.com/luci/luci-go/common/config/impl/remote"
19 "github.com/luci/luci-go/common/proto/google"
20 "github.com/luci/luci-go/logdog/api/endpoints/coordinator/services/v1"
21 "golang.org/x/net/context"
22 )
23
24 // Flags is the set of command-line flags used to configure a service.
25 type Flags struct {
26 // ConfigFilePath is the path within the ConfigSet of the configuration.
27 //
28 // If ConfigURL is empty, this will be interpreted as a local filesystem path
29 // from which the configuration should be loaded.
30 ConfigFilePath string
31
32 // KillCheckInterval, if >0, starts a goroutine that polls every interva l to
33 // see if the configuration has changed.
34 KillCheckInterval clockflag.Duration
35
36 // RoundTripper, if not nil, is the http.RoundTripper that will be used to
37 // fetch remote configurations.
38 RoundTripper http.RoundTripper
39 }
40
41 // AddToFlagSet augments the supplied FlagSet with values for Flags.
42 func (f *Flags) AddToFlagSet(fs *flag.FlagSet) {
43 fs.StringVar(&f.ConfigFilePath, "config-file-path", "",
44 "If set, load configuration from a local filesystem rooted here. ")
45 fs.Var(&f.KillCheckInterval, "config-kill-interval",
46 "If non-zero, poll for configuration changes and kill the applic ation if one is detected.")
47 }
48
49 // CoordinatorOptions returns an Options instance loaded from the supplied flags
50 // and Coordinator instance.
51 func (f *Flags) CoordinatorOptions(c context.Context, client logdog.ServicesClie nt) (*Options, error) {
52 ccfg, err := client.GetConfig(c, &google.Empty{})
53 if err != nil {
54 return nil, err
55 }
56
57 // If a ConfigFilePath was specified, use a mock configuration service t hat
58 // loads from a local file.
59 var ci config.Interface
60 if f.ConfigFilePath != "" {
61 var err error
62 ci, err = filesystem.New(f.ConfigFilePath)
63 if err != nil {
64 return nil, err
65 }
66 } else {
67 host := ccfg.ConfigServiceHost
68 if host == "" {
69 if ccfg.ConfigServiceUrl == "" {
70 return nil, errors.New("coordinator does not spe cify a config service")
71 }
72 u, err := url.Parse(ccfg.ConfigServiceUrl)
73 if err != nil {
74 return nil, fmt.Errorf("failed to parse config s ervice URL: %v", err)
75 }
76 host = u.Host
77 }
78 if ccfg.ConfigSet == "" {
79 return nil, errors.New("coordinator does not specify a c onfig set")
80 }
81 if ccfg.ServiceConfigPath == "" {
82 return nil, errors.New("coordinator does not specify a c onfig path")
83 }
84
85 var clientFactory remote.ClientFactory
86 if f.RoundTripper != nil {
87 rr := f.RoundTripper
88 clientFactory = func(context.Context) (*http.Client, err or) {
89 return &http.Client{Transport: rr}, nil
90 }
91 }
92 ci = remote.New(host, false, clientFactory)
93 }
94
95 return &Options{
96 Config: ci,
97 ConfigSet: ccfg.ConfigSet,
98 ServiceConfigPath: ccfg.ServiceConfigPath,
99 KillCheckInterval: time.Duration(f.KillCheckInterval),
100 }, nil
101 }
OLDNEW
« no previous file with comments | « logdog/server/service/config/config_test.go ('k') | logdog/server/service/config/flag_test.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698