-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathconfig.go
119 lines (99 loc) · 3.18 KB
/
config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
// Copyright 2024 Greptime Team
//
// Licensed 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.
package greptime
import (
"fmt"
greptimepb "github.com/GreptimeTeam/greptime-proto/go/greptime/v1"
"google.golang.org/grpc"
)
// Config is to define how the Client behaves.
//
// - Host is 127.0.0.1 in local environment.
// - Port default value is 4001.
// - Username and Password can be left to empty in local environment.
// you can find them in GreptimeCloud service detail page.
// - Database is the default database the client will operate on.
// But you can change the database in InsertRequest or QueryRequest.
// - DialOptions and CallOptions are for gRPC service.
// You can specify them or leave them empty.
type Config struct {
Host string // example: 127.0.0.1
Port int // default: 4001
Username string
Password string
Database string // the default database for client
// DialOptions are passed to grpc.DialContext
// when a new gRPC connection is to be created.
DialOptions []grpc.DialOption
// CallOptions are passed to StreamClient
CallOptions []grpc.CallOption
}
// NewCfg helps to init Config with host only
func NewCfg(host string) *Config {
return &Config{
Host: host,
Port: 4001,
DialOptions: []grpc.DialOption{
grpc.WithUserAgent("greptimedb-client-go"),
},
CallOptions: []grpc.CallOption{},
}
}
// WithPort set the Port field. Do not change it if you have no idea what it is.
func (c *Config) WithPort(port int) *Config {
c.Port = port
return c
}
// WithDatabase helps to specify the default database the client operates on.
func (c *Config) WithDatabase(database string) *Config {
c.Database = database
return c
}
// WithAuth helps to specify the Basic Auth username and password
func (c *Config) WithAuth(username, password string) *Config {
c.Username = username
c.Password = password
return c
}
func (c *Config) WithDialOptions(options ...grpc.DialOption) *Config {
if c.DialOptions == nil {
c.DialOptions = []grpc.DialOption{}
}
c.DialOptions = append(c.DialOptions, options...)
return c
}
func (c *Config) WithCallOptions(options ...grpc.CallOption) *Config {
if c.CallOptions == nil {
c.CallOptions = []grpc.CallOption{}
}
c.CallOptions = append(c.CallOptions, options...)
return c
}
// buildAuthHeader only supports Basic Auth so far
func (c *Config) buildAuthHeader() *greptimepb.AuthHeader {
if isEmptyString(c.Username) || isEmptyString(c.Password) {
return nil
}
return &greptimepb.AuthHeader{
AuthScheme: &greptimepb.AuthHeader_Basic{
Basic: &greptimepb.Basic{
Username: c.Username,
Password: c.Password,
},
},
}
}
func (c *Config) getGRPCAddr() string {
return fmt.Sprintf("%s:%d", c.Host, c.Port)
}