Skip to content

Commit

Permalink
basic http proxy for monitor daemon
Browse files Browse the repository at this point in the history
  • Loading branch information
devdinu committed Aug 24, 2023
1 parent 13009c0 commit 056bcff
Show file tree
Hide file tree
Showing 6 changed files with 148 additions and 3 deletions.
5 changes: 3 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
VERSION=$(shell git tag --sort=-version:refname | head -1)
SHA=$(shell git rev-parse --short HEAD)
CMD=dolores

LDFLAGS=-X 'main.Version=$(VERSION)' -X 'main.Sha=$(SHA)'

Expand All @@ -14,7 +15,7 @@ setup:
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.46.2

install:
go install --ldflags="${LDFLAGS}" ./cmd/dolores/
go install --ldflags="${LDFLAGS}" ./cmd/${CMD}/

lint: setup
./bin/golangci-lint run
Expand All @@ -26,7 +27,7 @@ gomod:
go mod tidy

build: gomod
go build --ldflags="${LDFLAGS}" -o ./bin ./cmd/dolores/
go build --ldflags="${LDFLAGS}" -o ./bin/${CMD} ./cmd/${CMD}/

gorelease_snapshot: build
goreleaser release --snapshot --rm-dist
1 change: 1 addition & 0 deletions cmd/dolores/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ func main() {
Commands: []*cli.Command{
NewConfig(newClient).Command,
NewRunner(newClient).Command,
NewMonitor(),
NewInitCommand(newClient),
},
}
Expand Down
58 changes: 58 additions & 0 deletions cmd/dolores/proxy.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package main

import (
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"github.com/scalescape/dolores/monitor"
"github.com/urfave/cli/v2"
)

type baseCommand struct {
*cli.Command
log zerolog.Logger
}

type Monitor struct {
baseCommand
}

func (m Monitor) Daemon(cctx *cli.Context) error {
m.log.Info().Msgf("I'm here")
cfg := monitor.Config{Port: cctx.Int("port"), Host: cctx.String("host")}
pr := monitor.NewProxy(cfg)
pr.Start()
return nil
}

func monitorCommand(action cli.ActionFunc) *cli.Command {
return &cli.Command{
Name: "monitor",
Usage: "daemon to monitor HTTP API",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "host",
Value: "localhost",
},
&cli.IntFlag{
Name: "port",
Aliases: []string{"p"},
Value: 9980,
},
&cli.IntFlag{
Name: "watch",
Aliases: []string{"w"},
Required: true,
},
},
Action: action,
}
}

func NewMonitor() *cli.Command {
mon := Monitor{
baseCommand: baseCommand{
log: log.With().Str("cmd", "config").Logger(),
},
}
return monitorCommand(mon.Daemon)
}
3 changes: 3 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ require (
cloud.google.com/go/storage v1.30.1
filippo.io/age v1.1.1
github.com/AlecAivazis/survey/v2 v2.3.7
github.com/gorilla/mux v1.8.0
github.com/kelseyhightower/envconfig v1.4.0
github.com/rs/zerolog v1.29.1
github.com/stretchr/testify v1.8.4
Expand All @@ -28,6 +29,7 @@ require (
github.com/googleapis/enterprise-certificate-proxy v0.2.5 // indirect
github.com/googleapis/gax-go/v2 v2.11.0 // indirect
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
github.com/kr/pretty v0.1.0 // indirect
github.com/mattn/go-colorable v0.1.12 // indirect
github.com/mattn/go-isatty v0.0.14 // indirect
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
Expand All @@ -49,5 +51,6 @@ require (
google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect
google.golang.org/grpc v1.56.1 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
10 changes: 9 additions & 1 deletion go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -83,13 +83,20 @@ github.com/googleapis/enterprise-certificate-proxy v0.2.5 h1:UR4rDjcgpgEnqpIEvki
github.com/googleapis/enterprise-certificate-proxy v0.2.5/go.mod h1:RxW0N9901Cko1VOCW3SXCpWP+mlIEkk2tP7jnHy9a3w=
github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4=
github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI=
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog=
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8=
github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
Expand Down Expand Up @@ -243,8 +250,9 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Expand Down
74 changes: 74 additions & 0 deletions monitor/monitor.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package monitor

import (
"context"
"fmt"
"net/http"
"os"
"os/signal"
"syscall"
"time"

"github.com/gorilla/mux"
"github.com/rs/zerolog/log"
)

type Proxy struct {
cfg Config
}

type Config struct {
Port int
Host string
}

func (s Config) Address() string {
return fmt.Sprintf("%s:%d", s.Host, s.Port)
}

func router() *mux.Router {
m := mux.NewRouter()
//m.Use(mux.MiddlewareFunc(contentWriter))
m.Use(mux.CORSMethodMiddleware(m))
//m.Use(mux.MiddlewareFunc(accessController))
m.HandleFunc("/.*", GenericHandler)
return m
}

func GenericHandler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("/ping"))
log.Info().Msgf("got request: %s", r.URL)
}

func (p Proxy) Start() {
addr := p.cfg.Address()
log.Info().Msgf("[Main] listening on address %s", addr)
server := &http.Server{
ReadTimeout: 2 * time.Second,
Addr: addr,
Handler: http.HandlerFunc(GenericHandler),
}
go func(server *http.Server) {
err := server.ListenAndServe()
if err != nil {
log.Fatal().Msgf("[Main] error listening for rerquests on port: %s err: %v\n", addr, err)
}
}(server)

<-watchSignal()
// stop HTTP server
ctx, canc := context.WithTimeout(context.Background(), 5*time.Second)
defer canc()
if err := server.Shutdown(ctx); err != nil {
log.Error().Msgf("[Main] error shutting down server\n")
}

}

func watchSignal() chan os.Signal {
stop := make(chan os.Signal, 2)
signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM)
return stop
}

func NewProxy(cfg Config) Proxy { return Proxy{cfg} }

0 comments on commit 056bcff

Please sign in to comment.