/
kv.go
100 lines (87 loc) · 1.97 KB
/
kv.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
package header
import (
"context"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
// predefined header
const (
RequestID = "Request-Id"
Timezone = "Timezone"
TenantID = "Tenant-Id"
)
// MutateContext return context.Context,
// carry request id and timezone if value exists.
func MutateContext(c CTX) context.Context {
var (
_requestID interface{} = "Request-Id"
_timezone interface{} = "Timezone"
_tenantID interface{} = "Tenant-Id"
)
ctx := context.Background()
ctx = context.WithValue(ctx, _requestID, c.GetHeader(RequestID))
ctx = context.WithValue(ctx, _timezone, c.GetHeader(Timezone))
ctx = context.WithValue(ctx, _tenantID, c.GetHeader(TenantID))
return ctx
}
type KV []string
func (k KV) Wreck() (string, string) {
switch len(k) {
case 0:
return "", ""
case 1:
return k[0], ""
default:
return k[0], k[1]
}
}
// Fuzzy return key and value as []interface
func (k KV) Fuzzy() (result []interface{}) {
for _, elem := range k {
result = append(result, elem)
}
return
}
func GINRequestID(ctx *gin.Context) zap.Field {
if ctx == nil {
return zap.String("requestID", "")
}
id := ctx.Request.Header.Get("Request-Id")
return zap.String("requestID", id)
}
// GetRequestIDKV return request id
func GetRequestIDKV(ctx context.Context) KV {
i := ctx.Value(RequestID)
rid, ok := i.(string)
if ok {
return KV{RequestID, rid}
}
return KV{RequestID, "unexpected type"}
}
// GetRequestIDKV return request id
func GetRequestId(ctx context.Context) string {
i := ctx.Value(RequestID)
rid, ok := i.(string)
if ok {
return rid
}
return "unexpected type"
}
// GetTimezone return timezone
func GetTimezone(ctx context.Context) KV {
i := ctx.Value(Timezone)
tz, ok := i.(string)
if ok {
return KV{Timezone, tz}
}
return KV{Timezone, "unexpected type"}
}
// GetTenantID return tenantID
func GetTenantID(ctx context.Context) KV {
i := ctx.Value(TenantID)
tid, ok := i.(string)
if ok {
return KV{TenantID, tid}
}
return KV{TenantID, "unexpected type"}
}