minke-generator-go 0.1.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/README.md +39 -18
- data/lib/generators/gomicroservice/scaffold/_build/Gemfile +4 -4
- data/lib/generators/gomicroservice/scaffold/_build/config.yml.erb +3 -1
- data/lib/generators/gomicroservice/scaffold/_build/dockercompose/<%= application_name %>/docker-compose.yml.erb +8 -1
- data/lib/generators/gomicroservice/scaffold/_build/dockercompose/<%= application_name %>/docker-no-server.yml.erb +7 -3
- data/lib/generators/gomicroservice/scaffold/_build/dockerfile/<%= application_name %>/config.ctmpl.erb +2 -1
- data/lib/generators/gomicroservice/scaffold/global/global.go +1 -0
- data/lib/generators/gomicroservice/scaffold/handlers/echo.go.erb +4 -0
- data/lib/generators/gomicroservice/scaffold/handlers/echo_test.go.erb +1 -0
- data/lib/generators/gomicroservice/scaffold/handlers/health.go.erb +6 -0
- data/lib/generators/gomicroservice/scaffold/handlers/health_test.go.erb +1 -0
- data/lib/generators/gomicroservice/scaffold/main.go.erb +10 -0
- data/lib/generators/gomicroservice/version.rb +1 -1
- data/lib/generators/gomicroservice.rb +3 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 919e1b5d93dbcbc2fa3add6dc68e6f44376982fa
|
4
|
+
data.tar.gz: ecdf27932dca828d8f6b296a5e61450815c5ea93
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31fa9cf1b50555a864c418319025a583b90d5bdc850c32e42e1ceaa7ea9272e442f0f6528dbd6e5b884c41cc8020271ff52415b7b96b7f2ed552b3c72e72902c
|
7
|
+
data.tar.gz: 3ba77bc89cbeb323f0777b963a8d43cce073e2606be5006e72a47ff259d17000d0080b3b46ee007b25d73f3a3bdc330e91606beede23c92a247c5b71b135df1b
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -2,41 +2,62 @@
|
|
2
2
|
|
3
3
|
[![Build Status](https://travis-ci.org/nicholasjackson/minke-generator-go.svg?branch=master)](https://travis-ci.org/nicholasjackson/minke-generator-go)
|
4
4
|
|
5
|
-
This generator creates a REST API
|
5
|
+
This generator creates a REST API Microservice in Go for the Minke build and test system.
|
6
6
|
|
7
|
-
|
8
|
-
- <%= application_name %>: The name of the application executable
|
9
|
-
- <%= namespace %>: Namespace of the application
|
7
|
+
For information on Minke please see the documentation [http://nicholasjackson.github.io/minke/](http://nicholasjackson.github.io/minke/).
|
10
8
|
|
11
|
-
##
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
```
|
18
|
-
$ bundle exec minke -g minke-generator-template -o ../temp -a tester -n mynamespace
|
19
|
-
```
|
9
|
+
## Available variables for templates (erb style)
|
10
|
+
| Variable | Description |
|
11
|
+
| ----------------------- | |
|
12
|
+
| <%= application_name %> | The name of the application executable |
|
13
|
+
| <%= namespace %> | Namespace of the application |
|
14
|
+
| <%= src_root %> | Source root of the application |
|
20
15
|
|
21
16
|
## Installation
|
22
17
|
|
23
18
|
Add this line to your application's Gemfile:
|
24
19
|
|
25
20
|
```ruby
|
26
|
-
gem 'minke
|
21
|
+
gem 'minke'
|
22
|
+
gem 'minke-generator-go'
|
27
23
|
```
|
28
24
|
|
29
25
|
And then execute:
|
30
26
|
|
31
27
|
$ bundle
|
32
28
|
|
33
|
-
Or install it yourself
|
29
|
+
Or install it yourself:
|
30
|
+
|
31
|
+
```
|
32
|
+
$ gem install minke
|
33
|
+
$ gem install minke-generator-go
|
34
34
|
|
35
|
-
|
35
|
+
```
|
36
36
|
|
37
37
|
## Usage
|
38
38
|
|
39
|
-
|
39
|
+
To scaffold a new service run:
|
40
|
+
|
41
|
+
```bash
|
42
|
+
$ minke -g minke-generator-go -o $GOPATH/src/github.com/nicholasjackson/helloworld
|
43
|
+
-a helloworld -n github.com/nicholasjackson
|
44
|
+
```
|
45
|
+
|
46
|
+
## Build and test with Docker
|
47
|
+
To run a build with a Docker container, to execute the functional and unit tests you can use the following commands. Please see the main Minke documentation for more information [http://nicholasjackson.github.io/minke/](http://nicholasjackson.github.io/minke/).
|
48
|
+
|
49
|
+
### Build Application Code and Execute Unit tests
|
50
|
+
```bash
|
51
|
+
$ cd _build
|
52
|
+
$ bundle
|
53
|
+
$ rake app:test
|
54
|
+
```
|
55
|
+
|
56
|
+
### Build a Docker image and execute functional tests with Cucumber
|
57
|
+
```bash
|
58
|
+
$ rake app:build_image
|
59
|
+
$ rake app:cucumber
|
60
|
+
```
|
40
61
|
|
41
62
|
## Development
|
42
63
|
|
@@ -46,7 +67,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
46
67
|
|
47
68
|
## Contributing
|
48
69
|
|
49
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
70
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/nicholasjackson/minke-generator-netmvc. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
50
71
|
|
51
72
|
|
52
73
|
## License
|
@@ -4,8 +4,8 @@ gem "rake"
|
|
4
4
|
gem 'cucumber-api', '~> 0.3'
|
5
5
|
gem 'nokogiri'
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
gem 'minke'
|
8
|
+
gem 'minke-generator-go'
|
9
9
|
|
10
|
-
gem 'minke', :path => '/Users/nicj/Developer/gems/minke'
|
11
|
-
gem 'minke-generator-go', :path => '/Users/nicj/Developer/gems/minke-generator-go'
|
10
|
+
#gem 'minke', :path => '/Users/nicj/Developer/gems/minke'
|
11
|
+
#gem 'minke-generator-go', :path => '/Users/nicj/Developer/gems/minke-generator-go'
|
@@ -13,6 +13,9 @@ docker:
|
|
13
13
|
application_docker_file: './dockerfile/<%= application_name %>/'
|
14
14
|
application_compose_file: './dockercompose/<%= application_name %>/docker-compose.yml'
|
15
15
|
fetch:
|
16
|
+
enabled: true
|
17
|
+
test:
|
18
|
+
enabled: true
|
16
19
|
build:
|
17
20
|
post:
|
18
21
|
copy:
|
@@ -30,7 +33,6 @@ run:
|
|
30
33
|
address: consul
|
31
34
|
port: 8500
|
32
35
|
type: private
|
33
|
-
test:
|
34
36
|
cucumber:
|
35
37
|
pre:
|
36
38
|
consul_loader:
|
@@ -1,4 +1,5 @@
|
|
1
1
|
version: '2'
|
2
|
+
|
2
3
|
services:
|
3
4
|
<%= application_name %>:
|
4
5
|
image: <%= application_name %>
|
@@ -9,6 +10,7 @@ services:
|
|
9
10
|
links:
|
10
11
|
- consul:consul
|
11
12
|
- statsd:statsd
|
13
|
+
- syslog:syslog
|
12
14
|
consul:
|
13
15
|
image: progrium/consul
|
14
16
|
ports:
|
@@ -22,7 +24,7 @@ services:
|
|
22
24
|
expose:
|
23
25
|
- "8125/udp"
|
24
26
|
environment:
|
25
|
-
- "
|
27
|
+
- "SERVICE_8125_NAME=statsd-8125"
|
26
28
|
registrator:
|
27
29
|
image: 'gliderlabs/registrator:latest'
|
28
30
|
links:
|
@@ -30,3 +32,8 @@ services:
|
|
30
32
|
command: '-internal -tags=dev consul://consul:8500'
|
31
33
|
volumes:
|
32
34
|
- '/var/run/docker.sock:/tmp/docker.sock'
|
35
|
+
syslog:
|
36
|
+
image: 'factorish/syslog'
|
37
|
+
command: '-t udp'
|
38
|
+
environment:
|
39
|
+
- "SERVICE_514_NAME=syslog-514"
|
@@ -1,4 +1,5 @@
|
|
1
1
|
version: '2'
|
2
|
+
|
2
3
|
services:
|
3
4
|
consul:
|
4
5
|
image: progrium/consul
|
@@ -13,13 +14,16 @@ services:
|
|
13
14
|
expose:
|
14
15
|
- "8125/udp"
|
15
16
|
environment:
|
16
|
-
- "
|
17
|
+
- "SERVICE_8125_NAME=statsd-8125"
|
17
18
|
registrator:
|
18
19
|
image: 'gliderlabs/registrator:latest'
|
19
20
|
links:
|
20
21
|
- consul:consul
|
21
|
-
environment:
|
22
|
-
- "SERVICE_NAME=statsd"
|
23
22
|
command: '-internal -tags=dev consul://consul:8500'
|
24
23
|
volumes:
|
25
24
|
- '/var/run/docker.sock:/tmp/docker.sock'
|
25
|
+
syslog:
|
26
|
+
image: 'factorish/syslog'
|
27
|
+
command: '-t udp'
|
28
|
+
environment:
|
29
|
+
- "SERVICE_514_NAME=syslog-514"
|
@@ -1,3 +1,4 @@
|
|
1
1
|
{
|
2
|
-
"stats_d_server": "{{
|
2
|
+
"stats_d_server": "{{range service "statsd-8125"}}{{.Address}}:{{.Port}}{{end}}",
|
3
|
+
"syslog_server": "{{range $index, $element := service "syslog-514"}}{{if eq $index 0}}{{.Address}}:{{.Port}}{{end}}{{end}}"
|
3
4
|
}
|
@@ -4,6 +4,7 @@ import (
|
|
4
4
|
"encoding/json"
|
5
5
|
"fmt"
|
6
6
|
"net/http"
|
7
|
+
"log"
|
7
8
|
|
8
9
|
"github.com/gorilla/context"
|
9
10
|
"<%= namespace %>/<%= application_name %>/logging"
|
@@ -11,9 +12,11 @@ import (
|
|
11
12
|
|
12
13
|
type EchoDependenciesContainer struct {
|
13
14
|
StatsD logging.StatsD `inject:"statsd"`
|
15
|
+
Log *log.Logger `inject:""`
|
14
16
|
}
|
15
17
|
|
16
18
|
var EchoDependencies *EchoDependenciesContainer = &EchoDependenciesContainer{}
|
19
|
+
const EHTAGNAME = "EchoHandler: "
|
17
20
|
|
18
21
|
// use the validation middleware to automatically validate input
|
19
22
|
// github.com/asaskevich/govalidator
|
@@ -23,6 +26,7 @@ type Echo struct {
|
|
23
26
|
|
24
27
|
func EchoHandler(rw http.ResponseWriter, r *http.Request) {
|
25
28
|
EchoDependencies.StatsD.Increment(ECHO_HANDLER + POST + CALLED)
|
29
|
+
EchoDependencies.Log.Printf("%v Called GET\n", EHTAGNAME)
|
26
30
|
|
27
31
|
// request is set into the context from the middleware
|
28
32
|
request := context.Get(r, "request").(*Echo)
|
@@ -3,6 +3,7 @@ package handlers
|
|
3
3
|
import (
|
4
4
|
"encoding/json"
|
5
5
|
"net/http"
|
6
|
+
"log"
|
6
7
|
|
7
8
|
"<%= namespace %>/<%= application_name %>/logging"
|
8
9
|
)
|
@@ -31,6 +32,9 @@ type HealthDependenciesContainer struct {
|
|
31
32
|
// statsD interface must use a name type as injection cannot infer ducktypes
|
32
33
|
Stats logging.StatsD `inject:"statsd"`
|
33
34
|
|
35
|
+
// reference to the log writer
|
36
|
+
Log *log.Logger `inject:""`
|
37
|
+
|
34
38
|
// if not specified in the graph will automatically create private instance
|
35
39
|
PrivateBuilder *HealthResponseBuilder `inject:"private"`
|
36
40
|
}
|
@@ -40,10 +44,12 @@ type HealthResponse struct {
|
|
40
44
|
}
|
41
45
|
|
42
46
|
var HealthDependencies *HealthDependenciesContainer = &HealthDependenciesContainer{}
|
47
|
+
const HHTAGNAME = "HealthHandler: "
|
43
48
|
|
44
49
|
func HealthHandler(rw http.ResponseWriter, r *http.Request) {
|
45
50
|
// all HealthHandlerDependencies are automatically created by injection process
|
46
51
|
HealthDependencies.Stats.Increment(HEALTH_HANDLER + GET + CALLED)
|
52
|
+
HealthDependencies.Log.Printf("%v Called GET\n", HHTAGNAME)
|
47
53
|
|
48
54
|
response := HealthDependencies.SingletonBuilder.SetStatusMessage("OK").Build()
|
49
55
|
|
@@ -25,6 +25,7 @@ func healthTestSetup(t *testing.T) {
|
|
25
25
|
err := g.Provide(
|
26
26
|
&inject.Object{Value: HealthDependencies},
|
27
27
|
&inject.Object{Value: healthStatsDMock, Name: "statsd"},
|
28
|
+
&inject.Object{Value: log.New(os.Stdout, "tester", log.Lshortfile)},
|
28
29
|
)
|
29
30
|
|
30
31
|
if err != nil {
|
@@ -4,6 +4,8 @@ import (
|
|
4
4
|
"fmt"
|
5
5
|
"net/http"
|
6
6
|
"os"
|
7
|
+
"log"
|
8
|
+
"log/syslog"
|
7
9
|
"<%= namespace %>/<%= application_name %>/global"
|
8
10
|
"<%= namespace %>/<%= application_name %>/handlers"
|
9
11
|
|
@@ -38,11 +40,19 @@ func setupInjection() {
|
|
38
40
|
panic(fmt.Sprintln("Unable to create StatsD Client: ", err))
|
39
41
|
}
|
40
42
|
|
43
|
+
syslogWriter, err := syslog.Dial("udp", global.Config.SysLogIP, syslog.LOG_SYSLOG, "sorcery")
|
44
|
+
if err != nil {
|
45
|
+
panic(fmt.Sprintln("Unable to connect to syslog: ", err))
|
46
|
+
}
|
47
|
+
|
48
|
+
logWriter := log.New(syslogWriter, "<%= application_name %>: ", log.Lshortfile)
|
49
|
+
|
41
50
|
err = g.Provide(
|
42
51
|
&inject.Object{Value: handlers.RouterDependencies},
|
43
52
|
&inject.Object{Value: handlers.HealthDependencies},
|
44
53
|
&inject.Object{Value: handlers.EchoDependencies},
|
45
54
|
&inject.Object{Value: statsdClient, Name: "statsd"},
|
55
|
+
&inject.Object{Value: logWriter},
|
46
56
|
)
|
47
57
|
|
48
58
|
if err != nil {
|
@@ -12,16 +12,18 @@ module Minke
|
|
12
12
|
config.template_location = File.expand_path(File.dirname(__FILE__)) + '/gomicroservice/scaffold'
|
13
13
|
|
14
14
|
config.build_settings = Minke::Generators::BuildSettings.new
|
15
|
+
|
15
16
|
config.build_settings.build_commands = Minke::Generators::BuildCommands.new.tap do |bc|
|
16
17
|
bc.fetch = [['/bin/bash', '-c', 'go get -t -v -d ./... && echo Downloaded packages']]
|
17
18
|
bc.build = [['/bin/bash', '-c', 'go build -a -installsuffix cgo -ldflags \'-s\' -o <%= application_name %>']]
|
18
19
|
bc.test = [['/bin/bash', '-c', 'go test ./...']]
|
19
20
|
end
|
21
|
+
|
20
22
|
config.build_settings.docker_settings = Minke::Generators::DockerSettings.new.tap do |bs|
|
21
23
|
bs.image = 'golang:latest'
|
22
24
|
bs.env = ['CGO_ENABLED=0']
|
23
25
|
bs.binds = ["#{ENV['GOPATH']}/src:/go/src"]
|
24
|
-
#
|
26
|
+
# working directory is added via a class patch to enable lazy load
|
25
27
|
end
|
26
28
|
|
27
29
|
# we need lazy evaluation of this property
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minke-generator-go
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nic Jackson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -132,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
132
|
version: '0'
|
133
133
|
requirements: []
|
134
134
|
rubyforge_project:
|
135
|
-
rubygems_version: 2.
|
135
|
+
rubygems_version: 2.6.4
|
136
136
|
signing_key:
|
137
137
|
specification_version: 4
|
138
138
|
summary: Go microservice template for Minke
|