added GAE, testing
This commit is contained in:
parent
30e5760cf6
commit
73f2860add
2
.dockerignore
Normal file
2
.dockerignore
Normal file
@ -0,0 +1,2 @@
|
||||
merp
|
||||
prod-secrets.yaml
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
||||
merp
|
||||
prod-secrets.yaml
|
||||
|
8
app.yaml
Normal file
8
app.yaml
Normal file
@ -0,0 +1,8 @@
|
||||
runtime: custom
|
||||
env: flex
|
||||
|
||||
env_variables:
|
||||
DEBUG: 1
|
||||
|
||||
includes:
|
||||
- prod-secrets.yaml
|
62
merp.go
62
merp.go
@ -18,11 +18,55 @@ func thingRegex() *regexp.Regexp {
|
||||
return THING_REGEX
|
||||
}
|
||||
|
||||
/*
|
||||
func decodeJson(in []byte) interface{} {
|
||||
var out interface{}
|
||||
err := json.Unmarshal(in, &out)
|
||||
if err != nil {
|
||||
log.Error().Msg("error decoding json")
|
||||
return nil
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func GetLatestMerps() gin.HandlerFunc {
|
||||
THING_REGEX := thingRegex()
|
||||
orm := models.GetOrmObject()
|
||||
|
||||
h := func(c *gin.Context) {
|
||||
thing := c.Param("thing")
|
||||
if THING_REGEX.MatchString(thing) == false {
|
||||
c.JSON(http.StatusPreconditionFailed, gin.H{
|
||||
"this": "failed",
|
||||
"status": http.StatusPreconditionFailed,
|
||||
"because": "invalid thing format, try a-zA-Z0-9-_",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
var merps []*models.Merp
|
||||
qs := orm.QueryTable("merp").Filter("thing", thing).OrderBy("-created").Limit(50)
|
||||
qs.All(&merps)
|
||||
|
||||
var output []map[string]interface{}
|
||||
for _, merp := range merps {
|
||||
outelem := make(map[string]interface{})
|
||||
outelem["thing"] = merp.Thing
|
||||
outjs := decodeJson([]byte(merp.Content))
|
||||
if outjs == nil {
|
||||
outelem["content"] = gin.H{}
|
||||
} else {
|
||||
outelem["content"] = outjs
|
||||
}
|
||||
outelem["created"] = merp.Created
|
||||
output = append(output, outelem)
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"this": "succeeded",
|
||||
"by": "getting",
|
||||
"the": "merps",
|
||||
"with": output,
|
||||
})
|
||||
}
|
||||
return h
|
||||
}
|
||||
@ -31,11 +75,21 @@ func GetLatestMerp() gin.HandlerFunc {
|
||||
THING_REGEX := thingRegex()
|
||||
|
||||
h := func(c *gin.Context) {
|
||||
thing := c.Param("thing")
|
||||
if THING_REGEX.MatchString(thing) == false {
|
||||
c.JSON(http.StatusPreconditionFailed, gin.H{
|
||||
"this": "failed",
|
||||
"status": http.StatusPreconditionFailed,
|
||||
"because": "invalid thing format, try a-zA-Z0-9-_",
|
||||
})
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"this": "succeeded",
|
||||
})
|
||||
}
|
||||
return h
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
func HandleNewMerp() gin.HandlerFunc {
|
||||
// server startup time
|
||||
@ -75,7 +129,7 @@ func HandleNewMerp() gin.HandlerFunc {
|
||||
at := time.Now().UTC()
|
||||
atString := at.Format(time.RFC3339)
|
||||
|
||||
serialized, jsonerr := json.Marshal(content)
|
||||
serialized, jsonerr := json.MarshalIndent(content, "", " ")
|
||||
|
||||
if jsonerr != nil {
|
||||
c.JSON(
|
||||
|
@ -3,10 +3,10 @@ package models
|
||||
import "time"
|
||||
|
||||
type Merp struct {
|
||||
ID int `json:"id" orm:"auto;column(id)"`
|
||||
ID int `orm:"auto;column(id)"`
|
||||
Content string `json:"content" orm:"type(jsonb);column(content)"`
|
||||
Created time.Time `orm:"auto_now_add;type(datetime);column(created)"`
|
||||
RemoteIP string `json:"remoteIP" orm:"size(128);column(remoteip)"`
|
||||
Thing string `json:"thing" orm:"size(256)"`
|
||||
UUID string `json:"uuid" orm:"size(36);column(uuid)"`
|
||||
RemoteIP string `orm:"size(128);column(remoteip)"`
|
||||
Thing string `json:"thing" orm:"index;size(256)"`
|
||||
UUID string `orm:"size(36);column(uuid)"`
|
||||
}
|
||||
|
15
server.go
15
server.go
@ -10,14 +10,6 @@ import "time"
|
||||
import "github.com/gin-gonic/gin"
|
||||
import "github.com/dn365/gin-zerolog"
|
||||
|
||||
/* func initDb() {
|
||||
db, err := sql.Open("postgres", os.Getenv("POSTGRES_DB_URL"))
|
||||
if err != nil {
|
||||
log.Fatal().Msg(err)
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
func serve() {
|
||||
if os.Getenv("DEBUG") == "" {
|
||||
gin.SetMode(gin.ReleaseMode)
|
||||
@ -32,14 +24,17 @@ func serve() {
|
||||
// attach logger middleware
|
||||
r.Use(ginzerolog.Logger("gin"))
|
||||
|
||||
r.GET("/ping", func(c *gin.Context) {
|
||||
r.GET("/.well-known/healthcheck.json", func(c *gin.Context) {
|
||||
c.JSON(200, gin.H{
|
||||
"message": "pong",
|
||||
"status": "ok",
|
||||
"now": time.Now().UTC().Format(time.RFC3339),
|
||||
})
|
||||
})
|
||||
|
||||
// call it, it returns the appropriate handler function
|
||||
r.GET("/merp/for/:thing", HandleNewMerp())
|
||||
r.GET("/get/latest/merp/for/:thing", GetLatestMerp())
|
||||
r.GET("/get/merps/for/:thing", GetLatestMerps())
|
||||
|
||||
port := "8080"
|
||||
if os.Getenv("PORT") != "" {
|
||||
|
Loading…
Reference in New Issue
Block a user