Skip to content

Commit

Permalink
Rebase ENG-8444 splitting main package
Browse files Browse the repository at this point in the history
PR-34 from kelly deng

Signed-off-by: Raj Dharwadkar <[email protected]>
  • Loading branch information
Raj-Dharwadkar committed May 14, 2021
1 parent c8a6831 commit 7621946
Show file tree
Hide file tree
Showing 22 changed files with 1,824 additions and 1,427 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ jobs:
uses: docker/build-push-action@v2
with:
context: ./
file: ./Dockerfile
file: ./cmd/hegel/Dockerfile
cache-from: type=registry,ref=quay.io/tinkerbell/hegel:latest
push: ${{ startsWith(github.ref, 'refs/heads/master') }}
tags: ${{ steps.docker-image-tag.outputs.tags }}
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
certs/
/hegel
/cmd/hegel/hegel
.env
16 changes: 16 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
binary := cmd/hegel
all: ${binary}
.PHONY: ${binary} gen test
${binary}: grpc/protos/hegel
${binary}:
CGO_ENABLED=0 GOOS=$$GOOS go build -ldflags="-X main.GitRev=$(shell git rev-parse --short HEAD)" -o $@ ./$@
gen: grpc/protos/hegel/hegel.pb.go
grpc/protos/hegel/hegel.pb.go: grpc/protos/hegel/hegel.proto
protoc --go_out=plugins=grpc:./ grpc/protos/hegel/hegel.proto
goimports -w $@
ifeq ($(CI),drone)
run: ${binary}
${binary}
test:
go test -race -coverprofile=coverage.txt -covermode=atomic ${TEST_ARGS} ./...
endif
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,5 +28,5 @@ openssl req -new -key ./certs/server.key -out ./certs/server.csr
openssl x509 -req -sha256 -days 365 -in ./certs/server.csr -signkey ./certs/server.key -out ./certs/server.crt
export HEGEL_TLS_CERT=./certs/server.crt
export HEGEL_TLS_KEY=./certs/server.key
go run main.go
go run cmd/hegel/main.go
```
2 changes: 1 addition & 1 deletion Dockerfile → cmd/hegel/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
FROM golang:1.15-alpine
COPY . /usr/myapp
WORKDIR /usr/myapp
RUN mkdir bin && go build -o ./bin ./...
RUN mkdir -p bin && go build -o ./bin ./...

FROM alpine:3.7

Expand Down
90 changes: 90 additions & 0 deletions cmd/hegel/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package main

import (
"context"
"flag"
_ "net/http/pprof"
"os"
"os/signal"
"sync"
"syscall"
"time"

"github.com/packethost/pkg/env"
"github.com/packethost/pkg/log"
grpcserver "github.com/tinkerbell/hegel/grpc-server"
httpserver "github.com/tinkerbell/hegel/http-server"
"github.com/tinkerbell/hegel/metrics"
)

var (
GitRev string
logger log.Logger
customEndpoints string
)

func main() {
flag.Parse()
// setup structured logging
l, err := log.Init("github.com/tinkerbell/hegel")
if err != nil {
logger.Fatal(err)
}
logger = l.Package("main")
defer l.Close()
metrics.Init(l)

metrics.State.Set(metrics.Initializing)

hegelServer, err := grpcserver.NewServer(l, nil)
if err != nil {
logger.Fatal(err, "failed to create hegel server")
}

c := make(chan os.Signal)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
var ret error
ctx, cancel := context.WithCancel(context.TODO())
var once sync.Once
var wg sync.WaitGroup
customEndpoints = env.Get("CUSTOM_ENDPOINTS", `{"/metadata":".metadata.instance"}`)

runGoroutine(&ret, cancel, &once, &wg, func() error {
return httpserver.Serve(ctx, logger, hegelServer, GitRev, time.Now(), customEndpoints)
})

runGoroutine(&ret, cancel, &once, &wg, func() error {
return grpcserver.Serve(ctx, logger, hegelServer)
})
runGoroutine(&ret, cancel, &once, &wg, func() error {
select {
case sig, ok := <-c:
if ok {
l.With("signal", sig).Info("received stop signal, gracefully shutting down")
cancel()
}
case <-ctx.Done():
}
return nil
})
l.Info("waiting")
wg.Wait()
if ret != nil {
logger.Fatal(ret)
}
}

func runGoroutine(ret *error, cancel context.CancelFunc, once *sync.Once, wg *sync.WaitGroup, fn func() error) {
wg.Add(1)
go func() {
defer wg.Done()
err := fn()
if err != nil {
// we only care about the first error
once.Do(func() {
*ret = err
cancel()
})
}
}()
}
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module github.com/packethost/hegel
module github.com/tinkerbell/hegel

go 1.13

Expand Down
Loading

0 comments on commit 7621946

Please sign in to comment.