From 2adfc667538aef5f7c3ae382740b4c1325df3927 Mon Sep 17 00:00:00 2001 From: Luca Sepe <luca.sepe@gmail.com> Date: Fri, 5 Jun 2020 18:12:12 +0200 Subject: [PATCH] first commit --- .gitignore | 36 +++ LICENSE | 21 ++ README.md | 261 ++++++++++++++++++++++ broker.go | 54 +++++ client.go | 38 ++++ cmd/.gitignore | 38 ++++ cmd/main.go | 95 ++++++++ database.go | 38 ++++ draft.go | 137 ++++++++++++ examples/aws-cognito-custom-auth-flow.png | Bin 0 -> 53468 bytes examples/aws-cognito-custom-auth-flow.yml | 62 +++++ examples/backend-for-frontend.png | Bin 0 -> 49495 bytes examples/backend-for-frontend.yml | 79 +++++++ examples/br.jpg | Bin 0 -> 9677 bytes examples/broker.png | Bin 0 -> 4907 bytes examples/broker.yml | 5 + examples/broker_impl.yml | 6 + examples/cl.jpg | Bin 0 -> 9960 bytes examples/cl.png | Bin 0 -> 28755 bytes examples/client.png | Bin 0 -> 2150 bytes examples/client.yml | 6 + examples/client_impl.yml | 6 + examples/database.png | Bin 0 -> 4248 bytes examples/database.yml | 5 + examples/database_impl.yml | 6 + examples/db.jpg | Bin 0 -> 10586 bytes examples/fn.jpg | Bin 0 -> 11424 bytes examples/function.png | Bin 0 -> 2789 bytes examples/function.yml | 5 + examples/function_impl.yml | 6 + examples/gateway.png | Bin 0 -> 2083 bytes examples/gateway.yml | 6 + examples/gateway_impl.yml | 7 + examples/gt.jpg | Bin 0 -> 10800 bytes examples/message-bus-pattern.png | Bin 0 -> 55359 bytes examples/message-bus-pattern.yml | 58 +++++ examples/ms.jpg | Bin 0 -> 8691 bytes examples/qs.jpg | Bin 0 -> 8928 bytes examples/queue.png | Bin 0 -> 5061 bytes examples/queue.yml | 5 + examples/queue_impl.yml | 6 + examples/service.png | Bin 0 -> 2662 bytes examples/service.yml | 5 + examples/service_impl.yml | 6 + examples/st.jpg | Bin 0 -> 9419 bytes examples/storage.png | Bin 0 -> 2757 bytes examples/storage.yml | 5 + examples/storage_impl.yml | 6 + function.go | 38 ++++ gateway.go | 43 ++++ go.mod | 8 + pkg/cluster/cluster.go | 65 ++++++ pkg/edge/edge.go | 105 +++++++++ pkg/graph/graph.go | 75 +++++++ pkg/node/node.go | 79 +++++++ queue.go | 58 +++++ service.go | 37 +++ storage.go | 38 ++++ 58 files changed, 1554 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 broker.go create mode 100644 client.go create mode 100644 cmd/.gitignore create mode 100644 cmd/main.go create mode 100644 database.go create mode 100644 draft.go create mode 100644 examples/aws-cognito-custom-auth-flow.png create mode 100644 examples/aws-cognito-custom-auth-flow.yml create mode 100644 examples/backend-for-frontend.png create mode 100644 examples/backend-for-frontend.yml create mode 100644 examples/br.jpg create mode 100644 examples/broker.png create mode 100644 examples/broker.yml create mode 100644 examples/broker_impl.yml create mode 100644 examples/cl.jpg create mode 100644 examples/cl.png create mode 100644 examples/client.png create mode 100644 examples/client.yml create mode 100644 examples/client_impl.yml create mode 100644 examples/database.png create mode 100644 examples/database.yml create mode 100644 examples/database_impl.yml create mode 100644 examples/db.jpg create mode 100644 examples/fn.jpg create mode 100644 examples/function.png create mode 100644 examples/function.yml create mode 100644 examples/function_impl.yml create mode 100644 examples/gateway.png create mode 100644 examples/gateway.yml create mode 100644 examples/gateway_impl.yml create mode 100644 examples/gt.jpg create mode 100644 examples/message-bus-pattern.png create mode 100644 examples/message-bus-pattern.yml create mode 100644 examples/ms.jpg create mode 100644 examples/qs.jpg create mode 100644 examples/queue.png create mode 100644 examples/queue.yml create mode 100644 examples/queue_impl.yml create mode 100644 examples/service.png create mode 100644 examples/service.yml create mode 100644 examples/service_impl.yml create mode 100644 examples/st.jpg create mode 100644 examples/storage.png create mode 100644 examples/storage.yml create mode 100644 examples/storage_impl.yml create mode 100644 function.go create mode 100644 gateway.go create mode 100644 go.mod create mode 100644 pkg/cluster/cluster.go create mode 100644 pkg/edge/edge.go create mode 100644 pkg/graph/graph.go create mode 100644 pkg/node/node.go create mode 100644 queue.go create mode 100644 service.go create mode 100644 storage.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ab6648a --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +## Intellij +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/encodings.xml +.idea/**/compiler.xml +.idea/**/misc.xml +.idea/**/modules.xml +.idea/**/vcs.xml + +## VSCode +.vscode/ + +## File-based project format: +*.iws +*.iml +.idea/ + +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib +*.dat +*.DS_Store +go.sum + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Goreleaser builds +dist/** + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..c1d8e80 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Luca Sepe + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..2c3cf8e --- /dev/null +++ b/README.md @@ -0,0 +1,261 @@ +# Draft + +A commandline tool that generate **H**igh **L**evel microservice & serverless **A**rchitecture diagrams using a declarative syntax defined in a YAML file. + +- Works on Linux, Mac OSX, Windows +- Just a single portable binary file +- It Does One Thing Well +- Input data in flat YAML text files +- Usable with shell scripts +- Can take input from pipes `cat` + +## How `draft` works? + +`draft` takes in input a declarative YAML file and generates a [`dot`](https://en.wikipedia.org/wiki/DOT_(graph_description_language)) script for [Graphviz](https://www.graphviz.org/) + +```bash +draft backend-for-frontend.yml | dot -Tpng -Gdpi=200 > backend-for-frontend.png +``` + +Piping the `draft` output to [GraphViz](http://www.graphviz.org/doc/info/output.html/) `dot` you can generate the following output formats: + +| format | command | +|:-------------|:---------------------------------------------------------------| +| GIF | <code>draft input.yml | dot -Tgif > output.gif</code> | +| JPEG | <code>draft input.yml | dot -Tjpg > output.jpg</code> | +| PostScript | <code>draft input.yml | dot -Tps > output.ps</code> | +| PSD | <code>draft input.yml | dot -Tpsd > output.psd</code> | +| SVG | <code>draft input.yml | dot -Tsvg > output.svg</code> | +| WebP | <code>draft input.yml | dot -Twebp > output.webp</code> | + +To install GraphViz to your favorite OS, please, follow this link [https://graphviz.gitlab.io/download/](https://graphviz.gitlab.io/download/). + +## Components + +### A picture is worth a thousand words + +... and this is particularly true in regard to complex IT architectures. + +The basic unit of each _draft_ design is the `component`: + +```go +type Component struct { + ID string `yaml:"id,omitempty"` // optional - autogenerated if omitted (read more for details...) + Kind string `yaml:"kind"` // required (one of: service, gateway, queue, broker, function, storage, database) + Label string `yaml:"label,omitempty"` // optional - the component description (or scope) + Provider string `yaml:"provider,omitempty"` // optional - you can use this to specify the implementation + FillColor string `yaml:"fillColor,omitempty"` // optional - the hex code for the background color + FontColor string `yaml:"fontColor,omitempty"` // optional - the hex code for the foreground color + Rounded bool `yaml:"rounded,omitempty"` // optional - set to true if you wants rounded shapes +} +``` + +Draft uses a set of symbols independent from the different providers (AWS, Microsoft Azure, GCP). + +- you can eventually describe the implementation using the `provider` attribute. + +Below is a list of all the components currently implemented. + +| Component | Kind | YAML | Output | +|:-------------------|:------------|:--------------------------|:--------------------------------:| +| **Client** | `client` | ![](./examples/cl.jpg) | ![](./examples/client.png) | +| **Microservice** | `service` | ![](./examples/ms.jpg) | ![](./examples/service.png) | +| **Gateway** | `gateway` | ![](./examples/gt.jpg) | ![](./examples/gateway.png) | +| **Message Broker** | `broker` | ![](./examples/br.jpg) | ![](./examples/broker.png) | +| **Queue Service** | `queue` | ![](./examples/qs.jpg) | ![](./examples/queue.png) | +| **Object Storage** | `storage` | ![](./examples/st.jpg) | ![](./examples/storage.png) | +| **Function** | `function` | ![](./examples/fn.jpg) | ![](./examples/function.png) | +| **Database** | `database` | ![](./examples/db.jpg) | ![](./examples/database.png) | + +## Connections + +You can connect each component by arrows. + +To be able to connect an _origin component_ with one or more _target component_ you need to specify each `componentId`. + +- you can define your component `id` explicitly +- you can omit the component `id` attribute and it will be autogenerated + +### Autogenerated `id` + +An autogenerated `id` has a prefix and a sequential number + +- the prefix is related to the component `kind` + +Aautogenerated `id` prefix mapping. + +| a kind of... | will generate an `id` prefix with... | examples | +|:-------------|:-------------------------------------|:---------------| +| `client` | `cl` | `cl1, cl2,...` | +| `service` | `ms` | `ms1, ms2,...` | +| `gateway` | `gt` | `gt1, gt2,...` | +| `broker` | `br` | `br1, br2,...` | +| `queue` | `qs` | `qs1, qs2,...` | +| `storage` | `st` | `st1, st2,...` | +| `function` | `fn` | `fn1, fn2,...` | +| `database` | `db` | `db1, db2,...` | + +A `connection` has the following properties: + +```go +type Connection struct { + Origin struct { + ComponentID string `yaml:"componentId"` + } `yaml:"origin"` + Targets []struct { + ComponentID string `yaml:"componentId"` + Label string `yaml:"label,omitempty"` + Color string `yaml:"color,omitempty"` + Dashed bool `yaml:"dashed,omitempty"` + Dir string `yaml:"dir,omitempty"` + Highlight bool `yaml:"highlight,omitempty"` + } `yaml:"targets"` +} +``` + +## Example 1 - Message Bus Pattern + +Create the `draft` architecture descriptor YAML with your favorite editor: + +```yaml +title: message bus pattern +backgroundColor: '#ffffff' +components: + - + kind: service + label: Producer + provider: AWS EC2 + - + kind: broker + label: "Notification\nService" + provider: AWS SNS + - + kind: queue + label: "event queue @ topic 1" + provider: AWS SQS + - + kind: queue + label: "event queue @ topic 2" + provider: AWS SQS + - + kind: service + label: "Consumer\n@ topic 1" + provider: AWS EC2 + - + kind: service + label: "Consumer\n@ topic 2" + provider: AWS EC2 +connections: + - + origin: + componentId: ms1 + targets: + - + componentId: br1 + - + origin: + componentId: br1 + targets: + - + componentId: qs1 + dashed: true + - + componentId: qs2 + dashed: true + - + origin: + componentId: qs1 + targets: + - + componentId: ms2 + dir: back + - + origin: + componentId: qs2 + targets: + - + componentId: ms3 + dir: back +``` + +Then run `draft`: + +```bash +draft message-bus-pattern.yml | dot -Tpng > message-bus-pattern.png +``` + +Here the generated output: + +![](./examples/message-bus-pattern.png) + + +## Example 2 - AWS Cognito Custom Authentication Flow + +Create the draft architecture descriptor YAML with your favorite editor: + +```yaml +title: Amazon Cognito Custom Authentication Flow with external database +backgroundColor: '#ffffff' +components: + - + kind: client + label: "Web App" + - + kind: client + label: "Mobile App" + - + kind: service + label: "Cognito" + provider: "AWS Cognito" + fillColor: '#991919' + fontColor: '#fafafa' + - + kind: function + label: "Define\nAuthChallange" + provider: "AWS Lambda" + - + kind: function + label: "Create\nAuthChallange" + provider: "AWS Lambda" + - + kind: function + label: "Verify\nAuthChallange" + provider: "AWS Lambda" + - + kind: database + label: "Users\nRepository" + provider: "AWS RDS" +connections: + - + origin: + componentId: cl1 + targets: + - + componentId: ms1 + - + origin: + componentId: cl2 + targets: + - + componentId: ms1 + - + origin: + componentId: ms1 + targets: + - + componentId: fn1 + - + componentId: fn2 + - + componentId: fn3 + - + origin: + componentId: fn2 + targets: + - + componentId: db1 +``` + +Here the generated output: + +![](./examples/aws-cognito-custom-auth-flow.png) \ No newline at end of file diff --git a/broker.go b/broker.go new file mode 100644 index 0000000..41a1656 --- /dev/null +++ b/broker.go @@ -0,0 +1,54 @@ +package draft + +import ( + "fmt" + "strings" + + "github.com/emicklei/dot" + "github.com/lucasepe/draft/pkg/cluster" + "github.com/lucasepe/draft/pkg/node" +) + +type broker struct { + seq int16 +} + +func (rcv *broker) nextID() string { + rcv.seq++ + return fmt.Sprintf("br%d", rcv.seq) +} + +func (rcv *broker) sketch(graph *dot.Graph, comp Component) { + id := comp.ID + if strings.TrimSpace(comp.ID) == "" { + id = rcv.nextID() + } + + label := comp.Label + if strings.TrimSpace(comp.Label) == "" { + label = "Message Broker" + } + + cl := cluster.New(graph, id, cluster.Label(comp.Provider)) + + el := node.New(cl, id, + node.Label(label), + node.Rounded(comp.Rounded), + node.FontColor(comp.FontColor), + node.FillColor(comp.FillColor, "#e0eeeeff"), + node.Shape("cds"), + ) + el.Attr("height", "0.8") +} + +/** Alternative + +label=<table border="0" cellspacing="0"> + <tr><td border="1" align="center"><font point-size="8"><b> topic 1 </b></font></td></tr> + <tr><td border="1" align="center"><font point-size="8"><b> topic 2 </b></font></td></tr> + <tr><td border="1" align="center"><font point-size="8"><b> ... </b></font></td></tr> + <tr><td border="1" align="center"><font point-size="8"><b> topic N </b></font></td></tr> + </table> > +shape="plain" + +**/ diff --git a/client.go b/client.go new file mode 100644 index 0000000..3e68abb --- /dev/null +++ b/client.go @@ -0,0 +1,38 @@ +package draft + +import ( + "fmt" + "strings" + + "github.com/emicklei/dot" + "github.com/lucasepe/draft/pkg/cluster" + "github.com/lucasepe/draft/pkg/node" +) + +type client struct { + seq int16 +} + +func (rcv *client) nextID() string { + rcv.seq++ + return fmt.Sprintf("cl%d", rcv.seq) +} + +func (rcv *client) sketch(graph *dot.Graph, comp Component) { + id := comp.ID + if strings.TrimSpace(comp.ID) == "" { + id = rcv.nextID() + } + + cl := cluster.New(graph, id, cluster.Label(comp.Provider)) + + el := node.New(cl, id, + node.Label(comp.Label), + node.Rounded(comp.Rounded), + node.FontColor(comp.FontColor), + node.FillColor(comp.FillColor, "#90ee90ff"), + node.Shape("underline"), + ) + el.Attr("fontsize", "8") + el.Attr("height", "0.3") +} diff --git a/cmd/.gitignore b/cmd/.gitignore new file mode 100644 index 0000000..3c46005 --- /dev/null +++ b/cmd/.gitignore @@ -0,0 +1,38 @@ +## Intellij +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/encodings.xml +.idea/**/compiler.xml +.idea/**/misc.xml +.idea/**/modules.xml +.idea/**/vcs.xml + +## File-based project format: +*.iws +*.iml +.idea/ + +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib +*.dat +*.DS_Store +go.sum + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Goreleaser builds +dist/** + +# Goreleaser file +.goreleaser.yml + +# Custom Bash Scripts +draft-all.sh diff --git a/cmd/main.go b/cmd/main.go new file mode 100644 index 0000000..0ccee21 --- /dev/null +++ b/cmd/main.go @@ -0,0 +1,95 @@ +package main + +import ( + "flag" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "strings" + + "github.com/lucasepe/draft" +) + +// go run main.go | dot -Tpng -Gdpi=300 > test.png + +const ( + maxFileSize = 500 * 1024 + banner = ` +______ __ _ +| _ \ / _|| | Crafted with passion by Luca Sepe +| | | | _ __ __ _ | |_ | |_ +| | | || '__| / _' || _|| __| https://github.com/lucasepe/draft +| |/ / | | | (_| || | | |_ +|___/ |_| \__,_||_| \__| {{VERSION}}` +) + +var ( + version = "dev" + commit = "none" + date = "unknown" +) + +func main() { + configureFlags() + + if flag.CommandLine.Arg(0) == "" { + flag.CommandLine.Usage() + os.Exit(2) + } + + fn, err := filepath.Abs(flag.Args()[0]) + handleErr(err) + + file, err := os.Open(fn) + handleErr(err) + + defer file.Close() + + ark, err := draft.NewDraft(file) + handleErr(err) + + str, err := ark.Sketch() + handleErr(err) + + fmt.Println(str) +} + +// handleErr check for an error and eventually exit +func handleErr(err error) { + if err != nil { + fmt.Fprintf(os.Stderr, "error: %s\n", err.Error()) + os.Exit(1) + } +} + +func configureFlags() { + flag.CommandLine.Usage = func() { + printBanner() + fmt.Printf("Generate High Level Microservice Architecture diagrams for GraphViz using simple YAML syntax.\n\n") + + name := filepath.Base(os.Args[0]) + + fmt.Print("USAGE:\n\n") + fmt.Printf(" %s [options] /path/to/yaml/file\n\n", name) + + fmt.Print("EXAMPLE:\n\n") + fmt.Printf(" %s input.yml | dot -Tpng -Gdpi=200 > output.png\n\n", name) + + fmt.Print("OPTIONS:\n\n") + flag.CommandLine.SetOutput(os.Stdout) + flag.CommandLine.PrintDefaults() + flag.CommandLine.SetOutput(ioutil.Discard) // hide flag errors + fmt.Print(" -help\n\tprints this message\n") + fmt.Println() + } + + flag.CommandLine.SetOutput(ioutil.Discard) // hide flag errors + flag.CommandLine.Init(os.Args[0], flag.ExitOnError) + + flag.CommandLine.Parse(os.Args[1:]) +} + +func printBanner() { + fmt.Print(strings.Trim(strings.Replace(banner, "{{VERSION}}", version, 1), "\n"), "\n\n") +} diff --git a/database.go b/database.go new file mode 100644 index 0000000..42990e8 --- /dev/null +++ b/database.go @@ -0,0 +1,38 @@ +package draft + +import ( + "fmt" + "strings" + + "github.com/emicklei/dot" + "github.com/lucasepe/draft/pkg/cluster" + "github.com/lucasepe/draft/pkg/node" +) + +type database struct { + seq int16 +} + +func (rcv *database) nextID() string { + rcv.seq++ + return fmt.Sprintf("db%d", rcv.seq) +} + +func (rcv *database) sketch(graph *dot.Graph, comp Component) { + id := comp.ID + if strings.TrimSpace(comp.ID) == "" { + id = rcv.nextID() + } + + cl := cluster.New(graph, id, cluster.Label(comp.Provider)) + + el := node.New(cl, id, + node.Label(comp.Label), + node.Rounded(comp.Rounded), + node.FontColor(comp.FontColor), + node.FillColor(comp.FillColor, "#f5f5dcff"), + node.Shape("cylinder"), + ) + el.Attr("height", "0.5") + el.Attr("fontsize", "6") +} diff --git a/draft.go b/draft.go new file mode 100644 index 0000000..887d87f --- /dev/null +++ b/draft.go @@ -0,0 +1,137 @@ +package draft + +import ( + "fmt" + "io" + + "github.com/emicklei/dot" + "github.com/lucasepe/draft/pkg/edge" + "github.com/lucasepe/draft/pkg/graph" + "gopkg.in/yaml.v2" +) + +const ( + kindClient = "client" + kindGateway = "gateway" + kindService = "service" + kindQueue = "queue" + kindBroker = "broker" + kindStorage = "storage" + kindDatabase = "database" + kindFunction = "function" +) + +// Connection is a link between two components. +type Connection struct { + Origin struct { + ComponentID string `yaml:"componentId"` + } `yaml:"origin"` + Targets []struct { + ComponentID string `yaml:"componentId"` + Label string `yaml:"label,omitempty"` + Color string `yaml:"color,omitempty"` + Dashed bool `yaml:"dashed,omitempty"` + Dir string `yaml:"dir,omitempty"` + Highlight bool `yaml:"highlight,omitempty"` + } `yaml:"targets"` +} + +// Component is a basic architecture unit. +type Component struct { + ID string `yaml:"id,omitempty"` + Kind string `yaml:"kind"` + Label string `yaml:"label,omitempty"` + Provider string `yaml:"provider,omitempty"` + FillColor string `yaml:"fillColor,omitempty"` + FontColor string `yaml:"fontColor,omitempty"` + Rounded bool `yaml:"rounded,omitempty"` +} + +// Draft represents a whole diagram. +type Draft struct { + Title string `yaml:"title,omitempty"` + BackgroundColor string `yaml:"backgroundColor,omitempty"` + Components []Component `yaml:"components"` + Connections []Connection `yaml:"connections,omitempty"` + + sketchers map[string]interface { + sketch(*dot.Graph, Component) + } +} + +// NewDraft returns a new decoded Draft struct +func NewDraft(r io.Reader) (*Draft, error) { + res := &Draft{ + sketchers: map[string]interface { + sketch(*dot.Graph, Component) + }{ + kindClient: &client{}, + kindGateway: &gateway{}, + kindService: &service{}, + kindBroker: &broker{}, + kindQueue: &queue{}, + kindFunction: &function{}, + kindStorage: &storage{}, + kindDatabase: &database{}, + }, + } + + // Init new YAML decode + d := yaml.NewDecoder(r) + + // Start YAML decoding from file + if err := d.Decode(&res); err != nil { + return nil, err + } + + return res, nil +} + +// Sketch generates the GraphViz definition for this architecture diagram. +func (ark *Draft) Sketch() (string, error) { + g := graph.New(graph.BackgroundColor(ark.BackgroundColor), graph.Label(ark.Title)) + + if err := sketchComponents(g, ark); err != nil { + return "", err + } + + if err := sketchConnections(g, ark); err != nil { + return "", err + } + + return g.String(), nil +} + +func sketchComponents(graph *dot.Graph, draft *Draft) error { + for _, el := range draft.Components { + sketcher, ok := draft.sketchers[el.Kind] + if !ok { + return fmt.Errorf("render not found for component of kind '%s'", el.Kind) + } + + sketcher.sketch(graph, el) + } + + return nil +} + +func sketchConnections(graph *dot.Graph, draft *Draft) error { + for _, el := range draft.Connections { + var from = el.Origin.ComponentID + + for _, x := range el.Targets { + err := edge.New(graph, from, x.ComponentID, + edge.Label(x.Label), + edge.Dir(x.Dir), + edge.Color(x.Color), + edge.Dashed(x.Dashed), + edge.Highlight(x.Highlight)) + + if err != nil { + return err + } + } + } + + return nil +} diff --git a/examples/aws-cognito-custom-auth-flow.png b/examples/aws-cognito-custom-auth-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..1354b1f6743a9be919029edeaf812a74de75f425 GIT binary patch literal 53468 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 O2kD3M;)SC6ul@((pG3C+ literal 0 HcmV?d00001 diff --git a/examples/aws-cognito-custom-auth-flow.yml b/examples/aws-cognito-custom-auth-flow.yml new file mode 100644 index 0000000..6eff08e --- /dev/null +++ b/examples/aws-cognito-custom-auth-flow.yml @@ -0,0 +1,62 @@ +title: Amazon Cognito Custom Authentication Flow with external database +backgroundColor: '#ffffff' +components: + - + kind: client + label: "Web App" + provider: SPA + - + kind: client + label: "Mobile App" + provider: "Android & iOS" + - + kind: service + label: "Cognito" + provider: "AWS Cognito" + fillColor: '#991919' + fontColor: '#fafafa' + - + kind: function + label: "Define\nAuthChallange" + provider: "AWS Lambda" + - + kind: function + label: "Create\nAuthChallange" + provider: "AWS Lambda" + - + kind: function + label: "Verify\nAuthChallange" + provider: "AWS Lambda" + - + kind: database + label: "Users\nRepository" + provider: "AWS RDS" +connections: + - + origin: + componentId: cl1 + targets: + - + componentId: ms1 + - + origin: + componentId: cl2 + targets: + - + componentId: ms1 + - + origin: + componentId: ms1 + targets: + - + componentId: fn1 + - + componentId: fn2 + - + componentId: fn3 + - + origin: + componentId: fn2 + targets: + - + componentId: db1 \ No newline at end of file diff --git a/examples/backend-for-frontend.png b/examples/backend-for-frontend.png new file mode 100644 index 0000000000000000000000000000000000000000..2174d9ccc7f0af4f64177d505f75f50fbbd7fed5 GIT binary patch literal 49495 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%0DGPkhu#UqEt5J}T_e^Pv4e}G(hVbHtfQGy+>~4+f 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 literal 0 HcmV?d00001 diff --git a/examples/backend-for-frontend.yml b/examples/backend-for-frontend.yml new file mode 100644 index 0000000..fc59986 --- /dev/null +++ b/examples/backend-for-frontend.yml @@ -0,0 +1,79 @@ +title: Backend For Frontend (BFF) +backgroundColor: '#ffffff' +components: + - + kind: client + label: Web App + fillColor: '#ee82ee' + - + kind: client + label: Mobile App + fillColor: '#708090' + - + kind: gateway + label: "Web BFF\nAPI Gateway" + - + kind: gateway + label: "Mobile BFF\nAPI Gateway" + - + kind: service + label: μService A + fillColor: '#b0e0e6' + - + kind: service + label: μService B + - + kind: service + label: μService C + fillColor: '#00ff7f' + - + kind: service + label: μService D + fillColor: '#00007f' + fontColor: '#fafafa' +connections: + - + origin: + componentId: cl1 + targets: + - + componentId: gt1 + color: '#ee82ee' + - + origin: + componentId: cl2 + targets: + - + componentId: gt2 + - + origin: + componentId: gt1 + targets: + - + componentId: ms1 + color: '#ee82ee' + - + componentId: ms2 + color: '#ee82ee' + - + componentId: ms3 + color: '#ee82ee' + - + componentId: ms4 + color: '#ee82ee' + - + origin: + componentId: gt2 + targets: + - + componentId: ms1 + highlight: true + - + componentId: ms2 + highlight: true + - + componentId: ms3 + highlight: true + - + componentId: ms4 + highlight: true \ No newline at end of file diff --git a/examples/br.jpg b/examples/br.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2d7c08a765d9e1c615197e163332a3e55301ebef GIT binary patch literal 9677 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 literal 0 HcmV?d00001 diff --git a/examples/broker.png b/examples/broker.png new file mode 100644 index 0000000000000000000000000000000000000000..6adb5c789758daf3eb10a3b505f7dbd481de1b7f GIT binary patch literal 4907 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 Ha(?z-<wT#9 literal 0 HcmV?d00001 diff --git a/examples/broker.yml b/examples/broker.yml new file mode 100644 index 0000000..2ceb258 --- /dev/null +++ b/examples/broker.yml @@ -0,0 +1,5 @@ +--- +components: + - + kind: broker + label: "Message Broker" \ No newline at end of file diff --git a/examples/broker_impl.yml b/examples/broker_impl.yml new file mode 100644 index 0000000..bbfd5ae --- /dev/null +++ b/examples/broker_impl.yml @@ -0,0 +1,6 @@ +--- +components: + - + kind: broker + label: "Message Broker" + provider: AWS SNS \ No newline at end of file diff --git a/examples/cl.jpg b/examples/cl.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9859aeb819911a8f173feb15477e58368abed52e GIT binary patch literal 9960 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 J!yA4%`5)gD{wM$d literal 0 HcmV?d00001 diff --git a/examples/cl.png b/examples/cl.png new file mode 100644 index 0000000000000000000000000000000000000000..dfd2e6e19cf47de9086368b1bfdd7805f563fc08 GIT binary patch literal 28755 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 literal 0 HcmV?d00001 diff --git a/examples/client.png b/examples/client.png new file mode 100644 index 0000000000000000000000000000000000000000..875542f7ee446f3d506ef6816841b9b54e95733d GIT binary patch literal 2150 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 KqN;y;@Z#T#cM+Qa literal 0 HcmV?d00001 diff --git a/examples/client.yml b/examples/client.yml new file mode 100644 index 0000000..a656f77 --- /dev/null +++ b/examples/client.yml @@ -0,0 +1,6 @@ +--- +components: + - + kind: client + label: "Web App" + fillColor: '#ee82ee' diff --git a/examples/client_impl.yml b/examples/client_impl.yml new file mode 100644 index 0000000..5989bfb --- /dev/null +++ b/examples/client_impl.yml @@ -0,0 +1,6 @@ +--- +components: + - + kind: client + label: "Web App" + provider: SPA diff --git a/examples/database.png b/examples/database.png new file mode 100644 index 0000000000000000000000000000000000000000..3e92d284baa6e2bfba9ea76cfee0c8ec36e004ab GIT binary patch literal 4248 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 E1&;$@DF6Tf literal 0 HcmV?d00001 diff --git a/examples/database.yml b/examples/database.yml new file mode 100644 index 0000000..55060fb --- /dev/null +++ b/examples/database.yml @@ -0,0 +1,5 @@ +--- +components: + - + kind: database + label: "Users\nRepository" diff --git a/examples/database_impl.yml b/examples/database_impl.yml new file mode 100644 index 0000000..6d464cc --- /dev/null +++ b/examples/database_impl.yml @@ -0,0 +1,6 @@ +--- +components: + - + kind: database + label: "Users\nRepository" + provider: AWS RDS diff --git a/examples/db.jpg b/examples/db.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dedfdea2ea62c844e77fec20420eda581e794f9b GIT binary patch literal 10586 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 literal 0 HcmV?d00001 diff --git a/examples/fn.jpg b/examples/fn.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d5b33d499c5d228b97d9dd8a58122588911b42c3 GIT binary patch literal 11424 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 LKYtMAcQf@Ll9o$O literal 0 HcmV?d00001 diff --git a/examples/function.png b/examples/function.png new file mode 100644 index 0000000000000000000000000000000000000000..12c3847ce26246f4cf005c303655ce0af3dee353 GIT binary patch literal 2789 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 literal 0 HcmV?d00001 diff --git a/examples/function.yml b/examples/function.yml new file mode 100644 index 0000000..06dbe4c --- /dev/null +++ b/examples/function.yml @@ -0,0 +1,5 @@ +--- +components: + - + kind: function + label: "Create\nAuth Challange" diff --git a/examples/function_impl.yml b/examples/function_impl.yml new file mode 100644 index 0000000..58f7ba1 --- /dev/null +++ b/examples/function_impl.yml @@ -0,0 +1,6 @@ +--- +components: + - + kind: function + label: "Create\nAuth Challange" + provider: AWS Lambda diff --git a/examples/gateway.png b/examples/gateway.png new file mode 100644 index 0000000000000000000000000000000000000000..24b56955da0246f2d6ac40b65da8069ab7491738 GIT binary patch literal 2083 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 QC#es(VP<EFHTFsU4`$XD5dZ)H literal 0 HcmV?d00001 diff --git a/examples/gateway.yml b/examples/gateway.yml new file mode 100644 index 0000000..c669810 --- /dev/null +++ b/examples/gateway.yml @@ -0,0 +1,6 @@ +--- +components: + - + kind: gateway + label: "API Gateway" + fontColor: '#fafafaff' \ No newline at end of file diff --git a/examples/gateway_impl.yml b/examples/gateway_impl.yml new file mode 100644 index 0000000..9f6ade4 --- /dev/null +++ b/examples/gateway_impl.yml @@ -0,0 +1,7 @@ +--- +components: + - + kind: gateway + label: "API Gateway" + fontColor: '#fafafaff' + provider: "AWS API\nGateway" \ No newline at end of file diff --git a/examples/gt.jpg b/examples/gt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27631b5d7f769674d607e484145f9f7692aaacb4 GIT binary patch literal 10800 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 Hi|PLYLQ8-J literal 0 HcmV?d00001 diff --git a/examples/message-bus-pattern.png b/examples/message-bus-pattern.png new file mode 100644 index 0000000000000000000000000000000000000000..d19fabfdf3a9e46919d9fc0b555619df0c923aee GIT binary patch literal 55359 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 IkT44PA9ljEz5oCK literal 0 HcmV?d00001 diff --git a/examples/message-bus-pattern.yml b/examples/message-bus-pattern.yml new file mode 100644 index 0000000..cd64f1a --- /dev/null +++ b/examples/message-bus-pattern.yml @@ -0,0 +1,58 @@ +title: message bus pattern +backgroundColor: '#ffffff' +components: + - + kind: service + label: Producer + provider: AWS EC2 + - + kind: broker + label: "Notification\nService" + provider: AWS SNS + - + kind: queue + label: "event queue @ topic 1" + provider: AWS SQS + - + kind: queue + label: "event queue @ topic 2" + provider: AWS SQS + - + kind: service + label: "Consumer\n@ topic 1" + provider: AWS EC2 + - + kind: service + label: "Consumer\n@ topic 2" + provider: AWS EC2 +connections: + - + origin: + componentId: ms1 + targets: + - + componentId: br1 + - + origin: + componentId: br1 + targets: + - + componentId: qs1 + dashed: true + - + componentId: qs2 + dashed: true + - + origin: + componentId: qs1 + targets: + - + componentId: ms2 + dir: back + - + origin: + componentId: qs2 + targets: + - + componentId: ms3 + dir: back diff --git a/examples/ms.jpg b/examples/ms.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d48fe24714ddbbc30e32e3268c99d61aeee98bbb GIT binary patch literal 8691 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 literal 0 HcmV?d00001 diff --git a/examples/qs.jpg b/examples/qs.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ffaf71b7ab8d27b39a9b152284cdfacd5f423cac GIT binary patch literal 8928 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 literal 0 HcmV?d00001 diff --git a/examples/queue.png b/examples/queue.png new file mode 100644 index 0000000000000000000000000000000000000000..313c62775cac96e2f1a0a4e9d99ff6fd2c01ea68 GIT binary patch literal 5061 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 K^_r&+G5-RBmC-W* literal 0 HcmV?d00001 diff --git a/examples/queue.yml b/examples/queue.yml new file mode 100644 index 0000000..1b3baab --- /dev/null +++ b/examples/queue.yml @@ -0,0 +1,5 @@ +--- +components: + - + kind: queue + label: "event queue" \ No newline at end of file diff --git a/examples/queue_impl.yml b/examples/queue_impl.yml new file mode 100644 index 0000000..a1336b7 --- /dev/null +++ b/examples/queue_impl.yml @@ -0,0 +1,6 @@ +--- +components: + - + kind: queue + label: "event queue" + provider: "AWS SQS" \ No newline at end of file diff --git a/examples/service.png b/examples/service.png new file mode 100644 index 0000000000000000000000000000000000000000..56fe2a7443a5c2dbe0d928cbb68d4de169a725f6 GIT binary patch literal 2662 zcmb_ei#rqE8{ZJi{a)^5VNI^pm^4hen^Z1^v=vH|8MZK{i)&g@E?<UjC`%%jFPR}B z`6~B2rHq(qXtd$C{)6A|_k2I+Ip=-e=X}m{-sgSa^S&q5!`(qjTvZ$Z07yAG+ItFQ zi(uA)L<MWPCEP|JMA0q|_JEx~qqwOw3jh#TbF#NRO)Owd#-4r<rP=WlW)cEV@p}t~ z)l^1xKdDJve4LqcSn2rgH$ASW+OU*D>%oTTF{6qo8co+IckxDOnZ%{%q0h)60YjDR zt)o>BKS&gZ4Cz6HbStzg6F!>2%h40+1<X}=u=FZ_uETt~h?B?U^5+VeK)L@BxLO-+ zg|Zs!uhesQ7jcAWpy#X0Hkz{Ezrp?f>KfhE8Pz0nbZKed9UF%mbFXC=Pw!VE?y-=d z0pq0<h1wanpuf4oLqL6UI-`zpHgHCXM6cZX2#lY;QImcsy+L+>YjI_9T&zBvdMp@F z{c;-1$nrsyp+8yLrhmR)eBB>#0=QF))dwcLv1X^PPsf@KA;QUj+ZdS0FRld}g-`t& zOGs2KE@>}6VsX3pI#sk5Fg;p}5TRFDa{*%jX2m>09V8kJpafFgyWC1-C*q*wxbfAK z40qZWr<Mlw1F$^1@KtI{44Qu~5auDZfwoSak|0{XI)w2A6+9905tn@bd!YyuDkGF+ zS#I#e6BI_5V+=D~i;X|+T6}@hNM{Ad(x6Tx@;zvPOl8fk8sf8kQXX~oF%z{^?6~HQ zbzWk__a12*;PCkqTlzx^A!OV2wenqk=OXPzAM3XCoVmSDu>xA$ic(n<3YX0l<I68v z-bnc`;fTlMqk+R;L?a`j<@#tw;hSmW9Noyd_psLf*`XMIp4W>r(;XuhIocK$jL}Pu z3O<HPihGK1(JJd#26aHv(%Qz?N~^o?>G@R8A-~R^<6?885`;{T-nNlM>BzR70=-*N z{I}FF+g@w#0Uez$-<Vp2Xo!)mPJOHQd5sHwPklvp-TuNPz_?R9?Nz3}$Jw)UOMU7E z@O3R`XJ?4<@H6XtWI0`EvM2JJBM_PFUhMtK%BOxsW`oCzm|^6A^-Eue4r@j)`>~hg zS)QkM?Cn}D8zMg+PS3w-7nqfqDQy$|tC4uUMl5h`{=&!HpN{2?*(If=PQZ{8M%Eh6 z&Sw)x)jvFQ8I)!P;SF~0?vlm^_h$D!y16F^Z<YM3!r!XD6m>1Rc5LkIR7~i85>L9L zmmSvHdZIeaKM7f+>mY8Dk2K9k`c{D-W@h4Di?$^b6S<fp$(dQzTI9}7pCoB&_!*X^ zB~QTH+?YizVQ-4Ik8m#w7zG7h><z@$p`5ZZNaSL)mVe_fU3iSDfU9~`*_+v?6C%h2 z-sW;+|Hr&lGv)5h7#@A4Rn5@nUgyAb1>YukYRgTYIqA3g)sf24DSZP2@|`<_x01O} z%I3j1oH+zqz0&7`5}uju2a@aS4I=Q(Gdy;>#+0r(UX4yaCaEHS;hKwUT%O<*?R+yo zX?B!Of??jfJ}N0mdiQP<4F1@5ku#G4%RWprtZ?tw$=5H;eMcu13B3A`6+6x*at&1C znyPCS0SF7rVPEp}@Oanv40@f%647&4m-w@7m@Tes=m<U%eF(rBufxoLN;LFuNLyQz zl2qUO&+qkaOWapQ{M_3+6qEx%GbZFvFQWM#jiw>+B9zCwc!?D_Q7=b~3D`Ckmsk|@ zF(w2Q3F1%~AEU{gSXD4H+fM5G24r9;?YN)lOE){d{)hxu;s}J`_O#;{gPXfM@5@wP zKq{X+d1~(=gCt}!hqYy9UMFmFb;L$s7*E%X!&E=!#~7_<R*coPM-&bR#7e_pF#Z<F z$vLL|SgFkJ-C#qSR{jyvRrb#Mumi-vV4qQ#>y!7K(O@x%;n9|ld08xAS${1yUoWFw zX~A(NK~!eBccx_v0)^@yWU=3JKA_Q<*{+_+JEIeKF&$}T6%~45F#oUS^PZk*MMV_k zIrh|}wPg))a!yX(#)gAN03|&gz0DU9*!TABSXSQO8VH1zCUIs@hAJ|C+Z3?;w%Va- zOVwQ2`>Cv7aveb|sJHOMcrBLr<N5V(bMgP&(~&#vJv_5;8Qq<ISi1iy+}3uo;>zke z%ZD91=$2ZG<=x87J$W%G48z~J?@dbE@i}uQ2e7hIwqrA$`?`J~@>X$Gm3-Fo$qcIi zBzvj}U_lyda2;!k)fVtTp!u<@b(!LV%3(+|R#6#GNdf7?xDs<cu_d2*i&NGh@@xl6 zUQW&n)jX%w{jyV*DWZ>x4^5y8UMRrXMWY$JHFNW-vvWnE@U_VX2{N6OAZ~MdAbf_y z6_0xH!sw*0@8G;D2Genmx+QZYY$C0>+4%l_Vb!Kr+gt3m>FJz-0dCpLmr=x*4Zk@N zIG2p?Uj6m6*lu%SJc(pw7CQ9i1pDGNy>~>A#|{+Dj*gCe%CWK5>R!5YV|3l;=UK+4 zrcVF{g5c-{i9#R?f`a%Ur%2zJZIYS_^`Rf7LQd(KV8_}3k;_Xc+)tJ4gXi1?;sCUK z<n`>S!Z?nvVfLz|>VOtGElpx+s;Q_apWqP?Ul`C76aEvup9<gfuO4DB#(m!y<Oz$> z!SEOn%zMe^7rlknJNpnjdvD)9PV;X}wOR%}a#KUy)j~K?G+TZ_GP=ICu<8gGMym#w zCV7^6Syo~)nqSw4bE>Wk!Zk^2k3=(`K{y=g*SJ|PvY&Q&m(^9E5klj~$Y(Vf8G;_F z&@Chc)z_CvWH)6fDl3ojh_Qq~_LQ5UZ{~+2DPOSOwi1B=TW(l%S2iw0#qq((B%=Vn zgPom_PtBEsP;WY_)II)=8n?Jjo(Y?d>mGSc8L#WOODgEf!uZnpJ)uJ?iUS!dEAdOy z34%gW7WymCbe2$Hf%`zG78C^Sw9?+JRkm5ad+KER=jP9kn@vK8R&!nTL?t&=@XYO! z77Q-x<$BN*HL>41Rus0d{Lsk>O8nUlgFvm~dK3_suX|54MW~pJcYXKE>Ml|k7#Q&I z_n%!dd#Z%rluemPaY-(Apahn<Q&SonOY9;@MkMsnc)sI%iq?XF^bo(Go7hQtB%AUD zB7!E0C+;n@(@rY=chrD#`i7UA+d%|BeCSUTeULMpp#N#8_)Kzf*}Pf<;o9%RoZ~<G t&mujf6yc4a%U<oU<$eDz`X;u;t_-KCC+~jnRq$~HI30JludoZe@gK_G=+yuK literal 0 HcmV?d00001 diff --git a/examples/service.yml b/examples/service.yml new file mode 100644 index 0000000..705a759 --- /dev/null +++ b/examples/service.yml @@ -0,0 +1,5 @@ +--- +components: + - + kind: service + label: "μService" diff --git a/examples/service_impl.yml b/examples/service_impl.yml new file mode 100644 index 0000000..c7f6080 --- /dev/null +++ b/examples/service_impl.yml @@ -0,0 +1,6 @@ +--- +components: + - + kind: service + label: "μService" + provider: AWS EC2 diff --git a/examples/st.jpg b/examples/st.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3e103a1b30fc0187ec8aa2b643ce019443217356 GIT binary patch literal 9419 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 V(da0w8chFNiuu0~aRHYT{|^-v$}0c> literal 0 HcmV?d00001 diff --git a/examples/storage.png b/examples/storage.png new file mode 100644 index 0000000000000000000000000000000000000000..c945571375a92265baf1c0bfb6844b8216736bc9 GIT binary patch literal 2757 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 literal 0 HcmV?d00001 diff --git a/examples/storage.yml b/examples/storage.yml new file mode 100644 index 0000000..8a0870e --- /dev/null +++ b/examples/storage.yml @@ -0,0 +1,5 @@ +--- +components: + - + kind: storage + label: "*.jpg\n*.png" \ No newline at end of file diff --git a/examples/storage_impl.yml b/examples/storage_impl.yml new file mode 100644 index 0000000..dc539bc --- /dev/null +++ b/examples/storage_impl.yml @@ -0,0 +1,6 @@ +--- +components: + - + kind: storage + label: "*.jpg\n*.png" + provider: "AWS S3" \ No newline at end of file diff --git a/function.go b/function.go new file mode 100644 index 0000000..5642f20 --- /dev/null +++ b/function.go @@ -0,0 +1,38 @@ +package draft + +import ( + "fmt" + "strings" + + "github.com/emicklei/dot" + "github.com/lucasepe/draft/pkg/cluster" + "github.com/lucasepe/draft/pkg/node" +) + +type function struct { + seq int16 +} + +func (rcv *function) nextID() string { + rcv.seq++ + return fmt.Sprintf("fn%d", rcv.seq) +} + +func (rcv *function) sketch(graph *dot.Graph, comp Component) { + id := comp.ID + if strings.TrimSpace(comp.ID) == "" { + id = rcv.nextID() + } + + cl := cluster.New(graph, id, cluster.Label(comp.Provider)) + + el := node.New(cl, id, + node.Label(comp.Label), + node.Rounded(comp.Rounded), + node.FontColor(comp.FontColor), + node.FillColor(comp.FillColor, "#abd9e9ff"), + node.Shape("signature"), + ) + el.Attr("fontsize", "6") + el.Attr("height", "0.5") +} diff --git a/gateway.go b/gateway.go new file mode 100644 index 0000000..c61ce98 --- /dev/null +++ b/gateway.go @@ -0,0 +1,43 @@ +package draft + +import ( + "fmt" + "strings" + + "github.com/emicklei/dot" + "github.com/lucasepe/draft/pkg/cluster" + "github.com/lucasepe/draft/pkg/node" +) + +type gateway struct { + seq int16 +} + +func (rcv *gateway) nextID() string { + rcv.seq++ + return fmt.Sprintf("gt%d", rcv.seq) +} + +func (rcv *gateway) sketch(graph *dot.Graph, comp Component) { + id := comp.ID + if strings.TrimSpace(comp.ID) == "" { + id = rcv.nextID() + } + + label := comp.Label + if strings.TrimSpace(comp.Label) == "" { + label = "API Gateway" + } + + cl := cluster.New(graph, id, cluster.Label(comp.Provider)) + + el := node.New(cl, id, + node.Label(label), + node.Rounded(comp.Rounded), + node.FontColor(comp.FontColor), + node.FillColor(comp.FillColor, "#ff7f00ff"), + node.FontSize(7), + node.Shape("point"), + ) + el.Attr("width", "0.3") +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..65e2863 --- /dev/null +++ b/go.mod @@ -0,0 +1,8 @@ +module github.com/lucasepe/draft + +go 1.14 + +require ( + github.com/emicklei/dot v0.11.0 + gopkg.in/yaml.v2 v2.3.0 +) diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go new file mode 100644 index 0000000..170565b --- /dev/null +++ b/pkg/cluster/cluster.go @@ -0,0 +1,65 @@ +package cluster + +import ( + "fmt" + "strings" + + "github.com/emicklei/dot" +) + +type Attribute func(*dot.Graph) + +func Label(label string) Attribute { + return func(el *dot.Graph) { + if strings.TrimSpace(label) != "" { + el.Attr("label", label) + el.Attr("pencolor", "#f5deb3") + el.Attr("style", "dashed") + } + } +} + +func PenColor(color string) Attribute { + return func(el *dot.Graph) { + if strings.TrimSpace(color) != "" { + el.Attr("pencolor", color) + } + } +} + +func FontColor(color string) Attribute { + return func(el *dot.Graph) { + if strings.TrimSpace(color) != "" { + el.Attr("fontcolor", color) + } else { + el.Attr("fontcolor", "#000000ff") + } + } +} + +func FontName(name string) Attribute { + return func(el *dot.Graph) { + el.Attr("fontname", name) + } +} + +func FontSize(size float32) Attribute { + return func(el *dot.Graph) { + fs := fmt.Sprintf("%.2f", size) + el.Attr("fontsize", fs) + } +} + +func New(parent *dot.Graph, id string, attrs ...Attribute) *dot.Graph { + cluster := parent.Subgraph(id, dot.ClusterOption{}) + + // default attributes + FontName("Fira Mono Bold")(cluster) + FontSize(9)(cluster) + PenColor("transparent")(cluster) + + for _, opt := range attrs { + opt(cluster) + } + return cluster +} diff --git a/pkg/edge/edge.go b/pkg/edge/edge.go new file mode 100644 index 0000000..afce977 --- /dev/null +++ b/pkg/edge/edge.go @@ -0,0 +1,105 @@ +package edge + +import ( + "fmt" + "strings" + + "github.com/emicklei/dot" +) + +type Attribute func(*dot.Edge) + +func Label(label string) Attribute { + return func(el *dot.Edge) { + el.Attr("label", label) + } +} + +func FontName(name string) Attribute { + return func(el *dot.Edge) { + el.Attr("fontname", name) + } +} + +func FontSize(size float32) Attribute { + return func(el *dot.Edge) { + fs := fmt.Sprintf("%.2f", size) + el.Attr("fontsize", fs) + } +} + +func Dir(dir string) Attribute { + return func(el *dot.Edge) { + if strings.TrimSpace(dir) != "" { + el.Attr("dir", dir) + } + } +} + +func Dashed(dashed bool) Attribute { + return func(el *dot.Edge) { + if dashed { + el.Attr("style", "dashed") + } + } +} + +func Color(color string) Attribute { + return func(el *dot.Edge) { + if strings.TrimSpace(color) != "" { + el.Attr("color", color) + } else { + el.Attr("color", "#708090ff") + } + } +} + +func PenWidth(size float32) Attribute { + return func(el *dot.Edge) { + pw := fmt.Sprintf("%.2f", size) + el.Attr("penwidth", pw) + } +} + +func ArrowSize(size float32) Attribute { + return func(el *dot.Edge) { + pw := fmt.Sprintf("%.2f", size) + el.Attr("arrowsize", pw) + } +} + +func Highlight(ok bool) Attribute { + return func(el *dot.Edge) { + if ok { + el.Attr("penwidth", "1.2") + el.Attr("arrowsize", "0.9") + } else { + el.Attr("penwidth", "0.6") + el.Attr("arrowsize", "0.6") + } + } +} + +func New(g *dot.Graph, fromNodeID, toNodeID string, attrs ...Attribute) error { + n1, ok := g.FindNodeById(fromNodeID) + if !ok { + return fmt.Errorf("node with id=%s not found", fromNodeID) + } + + n2, ok := g.FindNodeById(toNodeID) + if !ok { + return fmt.Errorf("node with id=%s not found", toNodeID) + } + + el := g.Edge(n1, n2) + + FontName("Fira Mono")(&el) + FontSize(8)(&el) + Highlight(false)(&el) + + for _, opt := range attrs { + opt(&el) + } + + return nil +} diff --git a/pkg/graph/graph.go b/pkg/graph/graph.go new file mode 100644 index 0000000..81fdcd6 --- /dev/null +++ b/pkg/graph/graph.go @@ -0,0 +1,75 @@ +package graph + +import ( + "fmt" + "strings" + + "github.com/emicklei/dot" +) + +type Attribute func(*dot.Graph) + +func Label(label string) Attribute { + return func(el *dot.Graph) { + if strings.TrimSpace(label) != "" { + el.Attr("label", label) + } + } +} + +func FontName(name string) Attribute { + return func(el *dot.Graph) { + el.Attr("fontname", name) + } +} + +func FontSize(size float32) Attribute { + return func(el *dot.Graph) { + fs := fmt.Sprintf("%.2f", size) + el.Attr("fontsize", fs) + } +} + +func LeftToRight() Attribute { + return func(el *dot.Graph) { + el.Attr("rankdir", "LR") + } +} + +func TopToBottom() Attribute { + return func(el *dot.Graph) { + el.Attr("rankdir", "TB") + } +} + +func RankSep(size float32) Attribute { + return func(el *dot.Graph) { + fs := fmt.Sprintf("%.2f", size) + el.Attr("ranksep", fs) + } +} + +func BackgroundColor(color string) Attribute { + return func(el *dot.Graph) { + if strings.TrimSpace(color) != "" { + el.Attr("bgcolor", color) + } else { + el.Attr("bgcolor", "transparent") + } + } +} + +func New(attrs ...Attribute) *dot.Graph { + el := dot.NewGraph(dot.Directed) + + FontName("Fira Mono Bold")(el) + FontSize(13)(el) + LeftToRight()(el) + RankSep(1.1)(el) + + for _, opt := range attrs { + opt(el) + } + + return el +} diff --git a/pkg/node/node.go b/pkg/node/node.go new file mode 100644 index 0000000..892d4d0 --- /dev/null +++ b/pkg/node/node.go @@ -0,0 +1,79 @@ +package node + +import ( + "fmt" + "strings" + + "github.com/emicklei/dot" +) + +type Attribute func(*dot.Node) + +func Label(label string) Attribute { + return func(el *dot.Node) { + el.Attr("label", label) + } +} + +func Shape(shape string) Attribute { + return func(el *dot.Node) { + el.Attr("shape", shape) + } +} + +func Rounded(rounded bool) Attribute { + return func(el *dot.Node) { + if rounded { + el.Attr("style", "rounded,filled") + } else { + el.Attr("style", "filled") + } + } +} + +func FillColor(color, fallback string) Attribute { + return func(el *dot.Node) { + if strings.TrimSpace(color) != "" { + el.Attr("fillcolor", color) + } else { + el.Attr("fillcolor", fallback) + } + } +} + +func FontColor(color string) Attribute { + return func(el *dot.Node) { + if strings.TrimSpace(color) != "" { + el.Attr("fontcolor", color) + } else { + el.Attr("fontcolor", "#000000ff") + } + } +} + +func FontName(name string) Attribute { + return func(el *dot.Node) { + el.Attr("fontname", name) + } +} + +func FontSize(size float32) Attribute { + return func(el *dot.Node) { + fs := fmt.Sprintf("%.2f", size) + el.Attr("fontsize", fs) + } +} + +func New(cluster *dot.Graph, id string, attrs ...Attribute) *dot.Node { + el := cluster.Node(id) + + // default attributes + FontName("Fira Mono")(&el) + FontSize(9)(&el) + + for _, opt := range attrs { + opt(&el) + } + + return &el +} diff --git a/queue.go b/queue.go new file mode 100644 index 0000000..ebd5f58 --- /dev/null +++ b/queue.go @@ -0,0 +1,58 @@ +package draft + +import ( + "fmt" + "strings" + + "github.com/emicklei/dot" + "github.com/lucasepe/draft/pkg/cluster" + "github.com/lucasepe/draft/pkg/node" +) + +type queue struct { + seq int16 +} + +func (rcv *queue) nextID() string { + rcv.seq++ + return fmt.Sprintf("qs%d", rcv.seq) +} + +func (rcv *queue) sketch(graph *dot.Graph, comp Component) { + id := comp.ID + if strings.TrimSpace(comp.ID) == "" { + id = rcv.nextID() + } + + cl := cluster.New(graph, id, cluster.Label(comp.Provider)) + + el := node.New(cl, id, + node.Label(comp.Label), + node.Rounded(comp.Rounded), + node.FontColor(comp.FontColor), + node.FillColor("", "transparent"), + // ^^^ hack to set a transparent background + // color since we will use the HTML table. + node.Shape("plaintext"), + ) + + caption := strings.TrimSpace(comp.Label) + if len(caption) == 0 { + caption = " " + } + + fillColor := comp.FillColor + if strings.TrimSpace(comp.FillColor) == "" { + fillColor = "#bdb76bff" + } + + label := fmt.Sprintf(`<table border="0" cellspacing="0" cellpadding="8"> + <tr><td border="0" colspan="3"> </td></tr> + <tr><td border="1" style="dashed" bgcolor="%s">msg N</td> + <td border="1" style="dashed" bgcolor="%s">...</td> + <td border="1" style="dashed" bgcolor="%s">msg 1</td></tr> + <tr><td border="0" colspan="3"><font point-size="8">%s</font></td></tr> + </table>`, fillColor, fillColor, fillColor, caption) + + el.Attr("label", dot.HTML(label)) +} diff --git a/service.go b/service.go new file mode 100644 index 0000000..ab53eaf --- /dev/null +++ b/service.go @@ -0,0 +1,37 @@ +package draft + +import ( + "fmt" + "strings" + + "github.com/emicklei/dot" + "github.com/lucasepe/draft/pkg/cluster" + "github.com/lucasepe/draft/pkg/node" +) + +type service struct { + seq int16 +} + +func (rcv *service) nextID() string { + rcv.seq++ + return fmt.Sprintf("ms%d", rcv.seq) +} + +func (rcv *service) sketch(graph *dot.Graph, comp Component) { + id := comp.ID + if strings.TrimSpace(comp.ID) == "" { + id = rcv.nextID() + } + + cl := cluster.New(graph, id, cluster.Label(comp.Provider)) + + el := node.New(cl, id, + node.Label(comp.Label), + node.Rounded(comp.Rounded), + node.FontColor(comp.FontColor), + node.FillColor(comp.FillColor, "#f5f5dcff"), + node.Shape("box"), + ) + el.Attr("height", "0.5") +} diff --git a/storage.go b/storage.go new file mode 100644 index 0000000..09135b1 --- /dev/null +++ b/storage.go @@ -0,0 +1,38 @@ +package draft + +import ( + "fmt" + "strings" + + "github.com/emicklei/dot" + "github.com/lucasepe/draft/pkg/cluster" + "github.com/lucasepe/draft/pkg/node" +) + +type storage struct { + seq int16 +} + +func (rcv *storage) nextID() string { + rcv.seq++ + return fmt.Sprintf("st%d", rcv.seq) +} + +func (rcv *storage) sketch(graph *dot.Graph, comp Component) { + id := comp.ID + if strings.TrimSpace(comp.ID) == "" { + id = rcv.nextID() + } + + cl := cluster.New(graph, id, cluster.Label(comp.Provider)) + + el := node.New(cl, id, + node.Label(comp.Label), + node.Rounded(comp.Rounded), + node.FontColor(comp.FontColor), + node.FillColor(comp.FillColor, "#f0e77fff"), + node.FontSize(8), + node.Shape("folder"), + ) + el.Attr("height", "0.4") +}