-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgke_s2a_test_app.go
134 lines (117 loc) · 3.48 KB
/
gke_s2a_test_app.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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package main
import (
apiv3 "cloud.google.com/go/translate/apiv3"
"cloud.google.com/go/translate/apiv3/translatepb"
"context"
"fmt"
"google.golang.org/api/option"
"log"
"net/http"
"os"
"sync"
)
// translate grpc client
var translateGrpcClient *apiv3.TranslationClient
// translate http client
var translateHttpClient *apiv3.TranslationClient
var ctx context.Context
func main() {
os.Setenv("EXPERIMENTAL_GOOGLE_API_USE_S2A", "true")
os.Setenv("GRPC_GO_LOG_SEVERITY_LEVEL", "info")
os.Setenv("GRPC_GO_LOG_VERBOSITY_LEVEL", "99")
var err error
ctx = context.Background()
// translate grpc client with connection pool size = 1
translateGrpcClient, err = apiv3.NewTranslationClient(ctx, option.WithGRPCConnectionPool(1))
if err != nil {
log.Fatalf("can not create translate grpc client: %v", err)
}
defer translateGrpcClient.Close()
// translate http client
translateHttpClient, err = apiv3.NewTranslationRESTClient(ctx)
if err != nil {
log.Fatalf("can not create translate http client: %v", err)
}
defer translateHttpClient.Close()
http.HandleFunc("/", indexHandler)
// concurrently translates sentences, using the grpc client
http.HandleFunc("/translatehttp", translateHttpHandler)
// concurrently translates sentences, using the http client
http.HandleFunc("/translategrpc", translateGrpcHandler)
port := os.Getenv("PORT")
if port == "" {
port = "8080"
log.Printf("Defaulting to port %s", port)
}
log.Printf("Listening on port %s", port)
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
}
func indexHandler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(200)
w.Write([]byte("Hello and Welcome!"))
return
}
func translateGrpcHandler(w http.ResponseWriter, r *http.Request) {
var wg sync.WaitGroup
texts := []string{
"s2a is awesome",
"zatar is great",
"authentication is important",
"mtls is a must",
"google cloud is better than aws",
"google cloud is better than azure",
"how are you?",
"good morning",
"summer is the best",
"I love Sunnyvale",
}
wg.Add(len(texts))
for i := 0; i < len(texts); i++ {
go func(t string) {
doTranslate(t, "zh", ctx, w, translateGrpcClient)
wg.Done()
}(texts[i])
}
wg.Wait()
}
func translateHttpHandler(w http.ResponseWriter, r *http.Request) {
var wg sync.WaitGroup
texts := []string{
"s2a is awesome",
"zatar is great",
"authentication is important",
"mtls is a must",
"google cloud is better than aws",
"google cloud is better than azure",
"how are you?",
"good morning",
"summer is the best",
"I love Sunnyvale",
}
wg.Add(len(texts))
for i := 0; i < len(texts); i++ {
go func(t string) {
doTranslate(t, "ar", ctx, w, translateHttpClient)
wg.Done()
}(texts[i])
}
wg.Wait()
}
func doTranslate(text string, targetLangCode string, ctx context.Context, w http.ResponseWriter, c *apiv3.TranslationClient) {
log.Printf("sending translate text request ...")
req := &translatepb.TranslateTextRequest{
Parent: fmt.Sprintf("projects/%s/locations/%s", "xmenxk-gke-dev", "us-central1"),
TargetLanguageCode: targetLangCode,
Contents: []string{text},
// See https://pkg.go.dev/cloud.google.com/go/translate/apiv3/translatepb#TranslateTextRequest.
}
resp, err := c.TranslateText(ctx, req)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(fmt.Sprintf("Translate: %v", err)))
return
}
for _, translation := range resp.GetTranslations() {
fmt.Fprintf(w, "Translated text: %v\n", translation.GetTranslatedText())
}
}