File tree Expand file tree Collapse file tree 4 files changed +98
-0
lines changed Expand file tree Collapse file tree 4 files changed +98
-0
lines changed Original file line number Diff line number Diff line change 1+ FROM golang:1.9.2-alpine3.6
2+
3+ # Alternatively use ADD https:// (which will not be cached by Docker builder)
4+ RUN apk --no-cache add curl \
5+ && echo "Pulling watchdog binary from Github." \
6+ && curl -sSLf https://github.com/openfaas-incubator/of-watchdog/releases/download/0.2.1/of-watchdog > /usr/bin/fwatchdog \
7+ && chmod +x /usr/bin/fwatchdog \
8+ && apk del curl --no-cache
9+
10+ WORKDIR /go/src/handler
11+ COPY . .
12+
13+ # Run a gofmt and exclude all vendored code.
14+ RUN test -z "$(gofmt -l $(find . -type f -name '*.go' -not -path " ./vendor/*" -not -path " ./function/vendor/*"))" || { echo "Run \" gofmt -s -w\" on your Golang code" ; exit 1; }
15+
16+ RUN CGO_ENABLED=0 GOOS=linux \
17+ go build --ldflags "-s -w" -a -installsuffix cgo -o handler . && \
18+ go test $(go list ./... | grep -v /vendor/) -cover
19+
20+ FROM alpine:3.6
21+ RUN apk --no-cache add ca-certificates
22+
23+ # Add non root user
24+ RUN addgroup -S app && adduser -S -g app app
25+ RUN mkdir -p /home/app
26+ RUN chown app /home/app
27+
28+ WORKDIR /home/app
29+
30+ COPY --from=0 /go/src/handler/handler .
31+ COPY --from=0 /usr/bin/fwatchdog .
32+ RUN apk add --no-cache curl
33+ USER app
34+
35+ ENV fprocess="./handler"
36+ ENV mode="http"
37+ ENV upstream_url="http://127.0.0.1:8081"
38+
39+ CMD ["./fwatchdog" ]
Original file line number Diff line number Diff line change 1+ package function
2+
3+ import (
4+ "fmt"
5+ )
6+
7+ // Handle a serverless request
8+ func Handle (req []byte ) string {
9+ return fmt .Sprintf ("Hello, Go. You said: %s" , string (req ))
10+ }
Original file line number Diff line number Diff line change 1+ package main
2+
3+ import (
4+ "fmt"
5+ "io/ioutil"
6+ "log"
7+ "net/http"
8+ "time"
9+
10+ "handler/function"
11+ )
12+
13+ func makeRequestHandler () func (http.ResponseWriter , * http.Request ) {
14+ return func (w http.ResponseWriter , r * http.Request ) {
15+ var input []byte
16+
17+ if r .Body != nil {
18+
19+ defer r .Body .Close ()
20+
21+ bodyBytes , bodyErr := ioutil .ReadAll (r .Body )
22+
23+ if bodyErr != nil {
24+ log .Printf ("Error reading body from request." )
25+ }
26+
27+ input = bodyBytes
28+ }
29+
30+ result := function .Handle (input )
31+
32+ w .WriteHeader (http .StatusOK )
33+ w .Write ([]byte (result ))
34+ }
35+ }
36+
37+ func main () {
38+ s := & http.Server {
39+ Addr : fmt .Sprintf (":%d" , 8081 ),
40+ ReadTimeout : 3 * time .Second ,
41+ WriteTimeout : 3 * time .Second ,
42+ MaxHeaderBytes : 1 << 20 , // Max header of 1MB
43+ }
44+
45+ http .HandleFunc ("/" , makeRequestHandler ())
46+ log .Fatal (s .ListenAndServe ())
47+ }
Original file line number Diff line number Diff line change 1+ language : go
2+ fprocess : ./handler
You can’t perform that action at this time.
0 commit comments