minke-generator-go 0.1.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
[](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
|