Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 08b6a5c

Browse files
committedNov 30, 2019
initial commit
0 parents  commit 08b6a5c

File tree

23 files changed

+2957
-0
lines changed

23 files changed

+2957
-0
lines changed
 

‎Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
gqlgen:
2+
go run github.com/99designs/gqlgen -v -c ./api/gateway/gqlgen.yml
3+
4+
protobuf:
5+
protoc --go_out=plugins=grpc:. api/echo/echo.proto
6+
7+
dev:
8+
skaffold dev

‎README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
## Weekend project playing around with golang and kubernetes.
2+
3+
Assumes you have a kubernetes cluster with istio setup and an 'echo' namespace.
4+
5+
Run 'skaffold dev' to start developing.

‎api/echo/echo.pb.go

Lines changed: 192 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎api/echo/echo.proto

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
syntax = "proto3";
2+
package api;
3+
4+
message EchoRequest {
5+
string payload = 1;
6+
}
7+
8+
message EchoResponse {
9+
string requestPayload = 1;
10+
}
11+
service Echo {
12+
rpc echo(EchoRequest) returns (EchoResponse) {}
13+
}

‎api/gateway/gqlgen.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
schema:
2+
- "api/gateway/**/*.graphql"
3+
4+
# Let gqlgen know where to put the generated server
5+
exec:
6+
filename: internal/gateway/generated/graphql.go
7+
package: generated
8+
9+
autobind:
10+
- github.com/jsreed/echo/model
11+
12+
# Let gqlgen know where to put the generated models (if any)
13+
model:
14+
filename: model/generated.go
15+
package: model
16+
17+
# Optional, turns on binding to field names by tag provided
18+
struct_tag: json

‎api/gateway/schema.graphql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
type Query {
2+
Echo(payload: String!): String!
3+
}

‎cmd/echo/main.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
api "github.com/jsreed/echo/api/echo"
6+
"github.com/jsreed/echo/internal/echo/impl"
7+
"github.com/spf13/viper"
8+
"google.golang.org/grpc"
9+
"log"
10+
"net"
11+
)
12+
13+
func init() {
14+
viper.SetDefault("port", "9000")
15+
}
16+
17+
func main() {
18+
log.Print("Starting echo")
19+
lis, err := net.Listen("tcp", fmt.Sprintf(":%s", viper.Get("port")))
20+
if err != nil {
21+
log.Fatalf("failed to listen: %v", err)
22+
}
23+
24+
echoImpl := &impl.Echo{}
25+
26+
grpcServer := grpc.NewServer()
27+
28+
api.RegisterEchoServer(grpcServer, echoImpl)
29+
30+
if err := grpcServer.Serve(lis); err != nil {
31+
log.Fatalf("failed to serve: %s", err)
32+
}
33+
}

‎cmd/gateway/main.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"github.com/99designs/gqlgen/handler"
6+
api "github.com/jsreed/echo/api/echo"
7+
"github.com/jsreed/echo/internal/gateway/generated"
8+
"github.com/jsreed/echo/internal/gateway/resolvers"
9+
"github.com/spf13/viper"
10+
"google.golang.org/grpc"
11+
"log"
12+
"net/http"
13+
)
14+
15+
func init() {
16+
viper.SetDefault("echo_url", "echo:9000")
17+
viper.SetDefault("port", "4200")
18+
}
19+
20+
func main() {
21+
log.Print("Starting gateway")
22+
23+
conn, err := grpc.Dial(viper.GetString("echo_url"), grpc.WithInsecure())
24+
if err != nil {
25+
log.Fatalf("Dial Failed: %v", err)
26+
}
27+
28+
echoClient := api.NewEchoClient(conn)
29+
30+
http.Handle("/",handler.Playground("echo playground", "/query"))
31+
http.Handle("/query", handler.GraphQL(
32+
generated.NewExecutableSchema(
33+
generated.Config{
34+
Resolvers: &resolvers.Resolver{
35+
EchoCli: echoClient,
36+
},
37+
},
38+
),
39+
))
40+
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", viper.Get("port")), nil))
41+
}

‎deployment/echo/Dockerfile.dev

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
FROM golang:1.13
2+
3+
WORKDIR /go/src/github.com/jsreed/echo
4+
5+
COPY go.mod .
6+
COPY go.sum .
7+
8+
RUN go mod download
9+
10+
COPY . .
11+
12+
EXPOSE 9000
13+
14+
CMD go run /go/src/github.com/jsreed/echo/cmd/echo

‎deployment/echo/k8s/deployment.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: echo-deployment
5+
labels:
6+
app: echo
7+
spec:
8+
replicas: 1
9+
selector:
10+
matchLabels:
11+
app: echo
12+
template:
13+
metadata:
14+
labels:
15+
app: echo
16+
spec:
17+
containers:
18+
- name: echo
19+
image: echo/echo:latest
20+
ports:
21+
- containerPort: 9000

‎deployment/echo/k8s/service.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: echo
5+
labels:
6+
app: echo
7+
service: echo
8+
spec:
9+
ports:
10+
- port: 9000
11+
protocol: TCP
12+
name: grpc
13+
selector:
14+
app: echo

‎deployment/gateway/Dockerfile.dev

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
FROM golang:1.13
2+
3+
WORKDIR /go/src/github.com/jsreed/echo
4+
5+
COPY go.mod .
6+
COPY go.sum .
7+
8+
RUN go mod download
9+
10+
COPY . .
11+
12+
EXPOSE 4200
13+
14+
CMD go run /go/src/github.com/jsreed/echo/cmd/gateway

‎deployment/gateway/k8s/deployment.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: gateway-deployment
5+
labels:
6+
app: gateway
7+
spec:
8+
replicas: 1
9+
selector:
10+
matchLabels:
11+
app: gateway
12+
template:
13+
metadata:
14+
labels:
15+
app: gateway
16+
spec:
17+
containers:
18+
- name: gateway
19+
image: echo/gateway:latest
20+
ports:
21+
- containerPort: 4200
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
apiVersion: networking.istio.io/v1alpha3
2+
kind: Gateway
3+
metadata:
4+
name: echo-gateway
5+
spec:
6+
selector:
7+
istio: ingressgateway
8+
servers:
9+
- port:
10+
number: 4200
11+
name: http
12+
protocol: HTTP
13+
hosts:
14+
- "*"
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: networking.istio.io/v1alpha3
2+
kind: VirtualService
3+
metadata:
4+
name: echo-virtualservice
5+
spec:
6+
gateways:
7+
- echo-gateway
8+
hosts:
9+
- "*"
10+
http:
11+
- route:
12+
- destination:
13+
host: gateway.default.svc.cluster.local

‎deployment/gateway/k8s/service.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: gateway-service
5+
labels:
6+
app: gateway
7+
spec:
8+
ports:
9+
- port: 4200
10+
name: http
11+
selector:
12+
app: gateway

‎go.mod

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module github.com/jsreed/echo
2+
3+
go 1.13
4+
5+
require (
6+
github.com/99designs/gqlgen v0.10.2
7+
github.com/golang/protobuf v1.3.1
8+
github.com/spf13/viper v1.5.0
9+
github.com/vektah/gqlparser v1.2.0
10+
go.uber.org/zap v1.13.0
11+
golang.org/x/net v0.0.0-20190620200207-3b0461eec859
12+
google.golang.org/grpc v1.21.0
13+
)

‎go.sum

Lines changed: 177 additions & 0 deletions
Large diffs are not rendered by default.

‎internal/echo/impl/echo.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package impl
2+
3+
import (
4+
"github.com/jsreed/echo/api/echo"
5+
"golang.org/x/net/context"
6+
"log"
7+
)
8+
9+
type Echo struct {}
10+
11+
func (e Echo) Echo(ctx context.Context, request *api.EchoRequest) (response *api.EchoResponse, err error) {
12+
log.Print("echoing!!")
13+
response = &api.EchoResponse{
14+
RequestPayload: request.Payload,
15+
}
16+
return
17+
}

‎internal/gateway/generated/graphql.go

Lines changed: 2252 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎internal/gateway/resolvers/query.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package resolvers
2+
3+
import (
4+
"context"
5+
api "github.com/jsreed/echo/api/echo"
6+
"log"
7+
)
8+
9+
type queryResolver struct{ *Resolver }
10+
11+
func (q queryResolver) Echo(ctx context.Context, payload string) (returnPayload string, err error) {
12+
log.Print("handling echo query")
13+
14+
echoResponse, err := q.EchoCli.Echo(ctx, &api.EchoRequest{
15+
Payload: payload,
16+
})
17+
if err != nil {
18+
log.Print(err)
19+
}
20+
if echoResponse == nil {
21+
return "nil echoResponse", nil
22+
}
23+
24+
return echoResponse.RequestPayload, err
25+
}
26+
27+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package resolvers
2+
3+
import (
4+
api "github.com/jsreed/echo/api/echo"
5+
"github.com/jsreed/echo/internal/gateway/generated"
6+
)
7+
8+
type Resolver struct{
9+
EchoCli api.EchoClient
10+
}
11+
12+
func (r *Resolver) Query() generated.QueryResolver {
13+
return &queryResolver{r}
14+
}

‎skaffold.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
apiVersion: skaffold/v1
2+
kind: Config
3+
metadata:
4+
name: "echo"
5+
build:
6+
artifacts:
7+
- image: echo/gateway
8+
context: .
9+
docker:
10+
dockerfile: ./deployment/gateway/Dockerfile.dev
11+
- image: echo/echo
12+
context: .
13+
docker:
14+
dockerfile: ./deployment/echo/Dockerfile.dev
15+
deploy:
16+
kubectl:
17+
manifests:
18+
- ./deployment/gateway/k8s/*.yml
19+
- ./deployment/echo/k8s/*.yml
20+
flags:
21+
global: ["--namespace=echo"]

0 commit comments

Comments
 (0)
Please sign in to comment.