packagiezed

This commit is contained in:
Jeffrey Paul 2019-11-08 04:35:27 -08:00
parent ca30e650b4
commit 7eab8504f0
9 changed files with 63 additions and 44 deletions

View File

@ -10,7 +10,7 @@ RUN tar cvfz go-src.tgz src && du -sh *
FROM alpine
COPY --from=builder /go/src/github.com/sneak/merp/merp /bin/merp
COPY --from=builder /go/src/github.com/sneak/merp/cmd/merp/merp /bin/merp
# put the source in there too for safekeeping
COPY --from=builder /go/go-src.tgz /usr/local/src/go-src.tgz

View File

@ -29,15 +29,15 @@ endif
default: run
run: build
DEBUG=1 PORT=1111 ./$(APPNAME)
DEBUG=1 PORT=1111 ./cmd/$(APPNAME)/$(APPNAME)
build: ./$(APPNAME)
build: ./cmd/$(APPNAME)/$(APPNAME)
./$(APPNAME): *.go models/*.go
go build -o $@ $(GOFLAGS) .
./cmd/$(APPNAME)/$(APPNAME): *.go models/*.go cmd/*/*.go
cd ./cmd/$(APPNAME) && go build -o ./$(APPNAME) $(GOFLAGS) .
clean:
rm $(APPNAME)
rm ./cmd/$(APPNAME)/$(APPNAME)
fmt:
go fmt *.go

View File

@ -1,11 +1,38 @@
//3456789112345676892123456789312345678941234567895123456789612345678971234567898
package main
import "os"
import "time"
import "os"
import "github.com/rs/zerolog"
import "github.com/rs/zerolog/log"
import "golang.org/x/crypto/ssh/terminal"
import "github.com/sneak/merp"
//revive:disable
var Version string
var Buildtime string
var Builduser string
var Buildarch string
var Appname string
//revive:enable
func main() {
initLogging()
identify()
merp.ServeForever()
}
func identify() {
log.Info().
Str("app", Appname).
Str("version", Version).
Str("buildarch", Buildarch).
Str("buildtime", Buildtime).
Str("builduser", Builduser).
Msg("starting")
}
func initLogging() {

1
go.mod
View File

@ -16,6 +16,7 @@ require (
github.com/mgechev/revive v0.0.0-20191017201419-88015ccf8e97 // indirect
github.com/olekukonko/tablewriter v0.0.2 // indirect
github.com/rs/zerolog v1.16.0
github.com/thoas/stats v0.0.0-20190407194641-965cb2de1678
golang.org/x/crypto v0.0.0-20191029031824-8986dd9e96cf
golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd // indirect
golang.org/x/tools v0.0.0-20191107185733-c07e1c6ef61c // indirect

2
go.sum
View File

@ -94,6 +94,8 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
github.com/thoas/stats v0.0.0-20190407194641-965cb2de1678 h1:kFej3rMKjbzysHYvLmv5iOlbRymDMkNJxbovYb/iP0c=
github.com/thoas/stats v0.0.0-20190407194641-965cb2de1678/go.mod h1:GkZsNBOco11YY68OnXUARbSl26IOXXAeYf6ZKmSZR2M=
github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw=
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc=

View File

@ -1,4 +1,5 @@
package main
//3456789112345676892123456789312345678941234567895123456789612345678971234567898
package merp
const basePage = `<!DOCTYPE html>
<html>

29
main.go
View File

@ -1,29 +0,0 @@
//3456789112345676892123456789312345678941234567895123456789612345678971234567898
package main
import "github.com/rs/zerolog/log"
//revive:disable
var Version string
var Buildtime string
var Builduser string
var Buildarch string
var Appname string
//revive:enable
func main() {
initLogging()
identify()
serve()
}
func identify() {
log.Info().
Str("app", Appname).
Str("version", Version).
Str("buildarch", Buildarch).
Str("buildtime", Buildtime).
Str("builduser", Builduser).
Msg("starting")
}

View File

@ -1,4 +1,4 @@
package main
package merp
import "encoding/json"
import "net/http"
@ -38,7 +38,7 @@ func getLatestMerps() gin.HandlerFunc {
c.JSON(http.StatusPreconditionFailed, gin.H{
"this": "failed",
"status": http.StatusPreconditionFailed,
"because": "invalid thing format, try a-zA-Z0-9-_",
"because": "invalid thing format, try [a-zA-Z0-9-_]",
})
return
}
@ -80,7 +80,7 @@ func getLatestMerp() gin.HandlerFunc {
c.JSON(http.StatusPreconditionFailed, gin.H{
"this": "failed",
"status": http.StatusPreconditionFailed,
"because": "invalid thing format, try a-zA-Z0-9-_",
"because": "invalid thing format, try [a-zA-Z0-9-_]",
})
return
}
@ -102,7 +102,6 @@ func handleNewMerp() gin.HandlerFunc {
// request time
thing := c.Param("thing")
if ThingRegex.MatchString(thing) == false {
log.Debug().Msgf("%s didnt match", thing)
c.JSON(http.StatusPreconditionFailed, gin.H{
"this": "failed",
"status": http.StatusPreconditionFailed,
@ -110,7 +109,6 @@ func handleNewMerp() gin.HandlerFunc {
})
return
}
log.Debug().Msgf("%s matched", thing)
//web.Get(`/merp/for/([A-Za-z0-9\-\_\.]+)`, merpHandler)
// FIXME rate limit this a bit on thing+clientip+json to cut down on

View File

@ -1,5 +1,5 @@
//3456789112345676892123456789312345678941234567895123456789612345678971234567898
package main
package merp
import "encoding/json"
import "fmt"
@ -10,8 +10,9 @@ import "time"
//import "github.com/rs/zerolog/log"
import "github.com/gin-gonic/gin"
import "github.com/dn365/gin-zerolog"
import "github.com/thoas/stats"
func serve() {
func ServeForever() {
s := getServer()
s.ListenAndServe()
}
@ -33,12 +34,23 @@ func getHealthCheckHandler() http.HandlerFunc {
}
}
func getStatsHandler(middleware *stats.Stats) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
stats := middleware.Data()
b, _ := json.Marshal(stats)
w.Write(b)
}
}
func getRouter() *gin.Engine {
if os.Getenv("DEBUG") == "" {
gin.SetMode(gin.ReleaseMode)
}
statsMiddleware := stats.New()
// empty router
r := gin.New()
@ -48,8 +60,15 @@ func getRouter() *gin.Engine {
// attach logger middleware
r.Use(ginzerolog.Logger("gin"))
r.Use(func(c *gin.Context) {
beginning, recorder := statsMiddleware.Begin(c.Writer)
c.Next()
statsMiddleware.End(beginning, stats.WithRecorder(recorder))
})
r.GET("/.well-known/healthcheck.json", gin.WrapF(getHealthCheckHandler()))
r.GET("/admin/healthcheck.json", gin.WrapF(getHealthCheckHandler()))
r.GET("/admin/stats.json", gin.WrapF(getStatsHandler(statsMiddleware)))
// call it, it returns the appropriate handler function
// so we can execute some code at startup time