Skip to content

Commit

Permalink
renderer fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
ihadeed committed Oct 2, 2020
1 parent d2f7463 commit ed884db
Show file tree
Hide file tree
Showing 49 changed files with 698 additions and 6,268 deletions.
9 changes: 5 additions & 4 deletions cmd/autonats/main.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package main

import (
"fmt"
"github.com/urfave/cli"
"github.com/zyra/autonats"
"log"
Expand Down Expand Up @@ -37,17 +38,17 @@ func main() {
timeout = 5
}

fmt.Printf("parsing '%s' and will export to '%s'\n", baseDir, outFile)

parser := autonats.NewParser()

if err := parser.ParseDir(baseDir); err != nil {
return err
return fmt.Errorf("failed to parse the provided directory: %s", err.Error())
}

parser.Run()

parser.Render(baseDir, outFile, timeout)

return nil
return parser.Render(baseDir, outFile, timeout)
},
Flags: []cli.Flag{
cli.StringFlag{
Expand Down
170 changes: 170 additions & 0 deletions example/api/nats_client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
package api

import (
"context"
"encoding/json"
"github.com/nats-io/nats.go"
"github.com/zyra/autonats"
"github.com/zyra/autonats/example"
"time"
)

const timeout = time.Second * 5

type ImageServer interface {
GetByUserId(ctx context.Context, userId string) ([]*example.Image, error)
GetCountByUserId(ctx context.Context, userId string) (int, error)
}

type imageHandler struct {
Server ImageServer
nc *nats.Conn
runners []*autonats.Runner
}

func (h *imageHandler) Run(ctx context.Context) error {
h.runners = make([]*autonats.Runner, 2, 2)
if runner, err := autonats.StartRunner(ctx, h.nc, "autonats.Image.GetByUserId", "autonats", 5, func(msg *nats.Msg) (interface{}, error) {
var data string
if err := json.Unmarshal(msg.Data, &data); err != nil {
return nil, err
} else {
innerCtx, _ := context.WithTimeout(ctx, time.Second*5)
return h.Server.GetByUserId(innerCtx, data)
}
}); err != nil {
return err
} else {
h.runners[0] = runner
}

if runner, err := autonats.StartRunner(ctx, h.nc, "autonats.Image.GetCountByUserId", "autonats", 5, func(msg *nats.Msg) (interface{}, error) {
var data string
if err := json.Unmarshal(msg.Data, &data); err != nil {
return nil, err
} else {
innerCtx, _ := context.WithTimeout(ctx, time.Second*5)
return h.Server.GetCountByUserId(innerCtx, data)
}
}); err != nil {
return err
} else {
h.runners[1] = runner
}

return nil
}

func (h *imageHandler) Shutdown() {
for i := range h.runners {
h.runners[i].Shutdown()
}
}

func NewImageHandler(server ImageServer, nc *nats.Conn) autonats.Handler {
return &imageHandler{
Server: server,
nc: nc,
}
}

type ImageClient struct {
nc *nats.EncodedConn
log autonats.Logger
}

func (client *ImageClient) GetByUserId(ctx context.Context, userId string) ([]*example.Image, error) {
var dest []*example.Image

if err := autonats.SendRequest(ctx, client.nc, "autonats.Image.GetByUserId", userId, &dest); err != nil {
return nil, err
} else {
return dest, nil
}
}

func (client *ImageClient) GetCountByUserId(ctx context.Context, userId string) (int, error) {
var dest int

if err := autonats.SendRequest(ctx, client.nc, "autonats.Image.GetCountByUserId", userId, &dest); err != nil {
return 0, err
} else {
return dest, nil
}
}

type UserServer interface {
GetById(ctx context.Context, id []byte) (*example.User, error)
Create(ctx context.Context, user *example.User) error
}

type userHandler struct {
Server UserServer
nc *nats.Conn
runners []*autonats.Runner
}

func (h *userHandler) Run(ctx context.Context) error {
h.runners = make([]*autonats.Runner, 2, 2)
if runner, err := autonats.StartRunner(ctx, h.nc, "autonats.User.GetById", "autonats", 5, func(msg *nats.Msg) (interface{}, error) {
var data []byte
if err := json.Unmarshal(msg.Data, &data); err != nil {
return nil, err
} else {
innerCtx, _ := context.WithTimeout(ctx, time.Second*5)
return h.Server.GetById(innerCtx, data)
}
}); err != nil {
return err
} else {
h.runners[0] = runner
}

if runner, err := autonats.StartRunner(ctx, h.nc, "autonats.User.Create", "autonats", 5, func(msg *nats.Msg) (interface{}, error) {
var data example.User
if err := json.Unmarshal(msg.Data, &data); err != nil {
return nil, err
} else {
innerCtx, _ := context.WithTimeout(ctx, time.Second*5)
return nil, h.Server.Create(innerCtx, &data)
}
}); err != nil {
return err
} else {
h.runners[1] = runner
}

return nil
}

func (h *userHandler) Shutdown() {
for i := range h.runners {
h.runners[i].Shutdown()
}
}

func NewUserHandler(server UserServer, nc *nats.Conn) autonats.Handler {
return &userHandler{
Server: server,
nc: nc,
}
}

type UserClient struct {
nc *nats.EncodedConn
log autonats.Logger
}

func (client *UserClient) GetById(ctx context.Context, id []byte) (*example.User, error) {
var dest example.User

if err := autonats.SendRequest(ctx, client.nc, "autonats.User.GetById", id, &dest); err != nil {
return nil, err
} else {
return &dest, nil
}
}

func (client *UserClient) Create(ctx context.Context, user *example.User) error {
return autonats.SendRequest(ctx, client.nc, "autonats.User.Create", user, nil)
}
10 changes: 8 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,13 @@ module github.com/zyra/autonats
go 1.13

require (
github.com/dave/jennifer v1.3.0
github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect
github.com/golang/protobuf v1.4.2 // indirect
github.com/nats-io/jwt v1.0.1 // indirect
github.com/nats-io/nats-server/v2 v2.1.8 // indirect
github.com/nats-io/nats.go v1.10.0
github.com/urfave/cli v1.22.1
github.com/nats-io/nkeys v0.2.0 // indirect
github.com/urfave/cli v1.22.4
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 // indirect
google.golang.org/protobuf v1.25.0 // indirect
)
15 changes: 10 additions & 5 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/dave/jennifer v1.3.0 h1:p3tl41zjjCZTNBytMwrUuiAnherNUZktlhPTKoF/sEk=
github.com/dave/jennifer v1.3.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg=
github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
Expand All @@ -28,14 +28,17 @@ github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/nats-io/jwt v0.3.2 h1:+RB5hMpXUUA2dfxuhBTEkMOrYmM+gKIZYS1KjSostMI=
github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
github.com/nats-io/nats-server v1.4.1 h1:Ul1oSOGNV/L8kjr4v6l2f9Yet6WY+LevH1/7cRZ/qyA=
github.com/nats-io/jwt v1.0.1 h1:71ivoESdfT2K/qDiw5YwX/3W9/dR7c+m83xiGOj/EZ4=
github.com/nats-io/jwt v1.0.1/go.mod h1:n3cvmLfBfnpV4JJRN7lRYCyZnw48ksGsbThGXEk4w9M=
github.com/nats-io/nats-server/v2 v2.1.8 h1:d5GoJA6W7vQkmt99Nfdeie3pEFFUEjIwt1YZp50DkIQ=
github.com/nats-io/nats-server/v2 v2.1.8/go.mod h1:rbRrRE/Iv93O/rUvZ9dh4NfT0Cm9HWjW/BqOWLGgYiE=
github.com/nats-io/nats.go v1.10.0 h1:L8qnKaofSfNFbXg0C5F71LdjPRnmQwSsA4ukmkt1TvY=
github.com/nats-io/nats.go v1.10.0/go.mod h1:AjGArbfyR50+afOUotNX2Xs5SYHf+CoOa5HH1eEl2HE=
github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
github.com/nats-io/nkeys v0.1.4 h1:aEsHIssIk6ETN5m2/MD8Y4B2X7FfXrBAUdkyRvbVYzA=
github.com/nats-io/nkeys v0.1.4/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s=
github.com/nats-io/nkeys v0.2.0 h1:WXKF7diOaPU9cJdLD7nuzwasQy9vT1tBqzXZZf3AMJM=
github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s=
github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
Expand All @@ -45,12 +48,14 @@ github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/urfave/cli v1.22.4 h1:u7tSpNPPswAFymm8IehJhy4uJMlUuU/GmqSkvJ1InXA=
github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59 h1:3zb4D3T4G8jdExgVU/95+vQXfpEPiMdCaZgmGVxjNHM=
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
Expand Down
8 changes: 4 additions & 4 deletions parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,11 +86,11 @@ func (par *Parser) Run() {
par.packages = packages
}

func (par *Parser) Render(baseDir, outfile string, timeout int) {
func (par *Parser) Render(baseDir, outfile string, timeout int) error {
imports := make([]string, 0)

for i := range par.packages {
for k, _ := range par.packages[i].Imports {
for pk, _ := range par.packages {
for k, _ := range par.packages[pk].Imports {
imports = append(imports, k)
}
}
Expand All @@ -103,5 +103,5 @@ func (par *Parser) Render(baseDir, outfile string, timeout int) {
Timeout: timeout,
}

Render(&data)
return Render(&data)
}
25 changes: 21 additions & 4 deletions render.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package autonats

import (
"bytes"
"errors"
"fmt"
"go/format"
"io/ioutil"
"path/filepath"
Expand All @@ -16,7 +18,16 @@ type RenderData struct {
}

func Render(data *RenderData) error {
data.Imports = append(data.Imports, "github.com/zyra/autonats", "github.com/nats-io/nats.go", "json", "time")
if data == nil || len(data.Services) == 0 {
return errors.New("no data found to render")
}

data.Imports = append(data.Imports,
"github.com/zyra/autonats",
"github.com/nats-io/nats.go",
"encoding/json",
"time",
)

sort.Strings(data.Imports)
sort.Slice(data.Services, func(i, j int) bool {
Expand All @@ -35,14 +46,20 @@ func Render(data *RenderData) error {
err := tmplService.Execute(buff, data)

if err != nil {
return err
return fmt.Errorf("failed to execute template: %s", err.Error())
}

out, err := format.Source(buff.Bytes())

if err != nil {
return err
return fmt.Errorf("failed to run gofmt on generated source: %s", err.Error())
}

return ioutil.WriteFile(outFile, out, 0655)
fmt.Printf("rendering data to %s\n", outFile)

if err := ioutil.WriteFile(outFile, out, 0655); err != nil {
return fmt.Errorf("failed to write file: %s", err.Error())
} else {
return nil
}
}
Loading

0 comments on commit ed884db

Please sign in to comment.