inventarium 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1dce2dfe30e6634640b0e8248c87b45a5de34ef9c41d1c524a63f2d6bd66a62f
4
- data.tar.gz: 8a66c2006593af39169c6ba0ab7c144fa05d065eccf05d28f9bca506d3d19caf
3
+ metadata.gz: 395db22e4f7711b1376ce7a3a6b830813143fd4c06fc9f2a96675d0d73cf6200
4
+ data.tar.gz: 23468bbeb716770cd8029ffb3ac4d0e00e8710641cff9b1eb86535076019790a
5
5
  SHA512:
6
- metadata.gz: 72916d7d94596cf7caa35bb87388d841ef825f50ba49f0574029d55e08ed604ec6d1b737a5ef29788056f6e21b5b2a8c8b0e02cb7779a59b907654317cf23df3
7
- data.tar.gz: cb83ab763a0e1792d427c39649f2f28b3c0966bb88f33a848774667c6ef9ccf01afd2dc9d91dec34f349143a5582d337b0689ae89263e0a3fb699b77c6b1c9e1
6
+ metadata.gz: 7606c0b74c51656bad562b3ee9dc465793232da3e2b56a99753427e4f5249c65ecb5458b4823ab4e892709c8f935077e06e405cf81c6b41eaeda450ef482ae7e
7
+ data.tar.gz: d9b2613a387fc59e67b3e39b28258fb39f3ab0a3dbb5abfbdc2c243f34989d18e25283cc9efef213ec406c2af57a7a935be65f0761f7734a8baa97a94d66f64d
data/Gemfile.lock CHANGED
@@ -1,10 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- inventarium (0.2.0)
4
+ inventarium (0.3.0)
5
5
  dry-cli (~> 0.4)
6
6
  pastel
7
7
  tty-progressbar
8
+ tty-prompt
8
9
 
9
10
  GEM
10
11
  remote: https://rubygems.org/
@@ -16,6 +17,7 @@ GEM
16
17
  concurrent-ruby (~> 1.0)
17
18
  equatable (0.6.1)
18
19
  json (2.3.0)
20
+ necromancer (0.5.1)
19
21
  pastel (0.7.4)
20
22
  equatable (~> 0.6)
21
23
  tty-color (~> 0.5)
@@ -48,8 +50,17 @@ GEM
48
50
  tty-cursor (~> 0.7)
49
51
  tty-screen (~> 0.7)
50
52
  unicode-display_width (~> 1.6)
53
+ tty-prompt (0.21.0)
54
+ necromancer (~> 0.5.0)
55
+ pastel (~> 0.7.0)
56
+ tty-reader (~> 0.7.0)
57
+ tty-reader (0.7.0)
58
+ tty-cursor (~> 0.7)
59
+ tty-screen (~> 0.7)
60
+ wisper (~> 2.0.0)
51
61
  tty-screen (0.7.1)
52
62
  unicode-display_width (1.7.0)
63
+ wisper (2.0.1)
53
64
 
54
65
  PLATFORMS
55
66
  ruby
data/README.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Inventarium CLI
2
2
 
3
+ ## Instalation
4
+
5
+ Requirements:
6
+
7
+ - Ruby version: `2.5.0` (working with default macOS version)
8
+
9
+ ```
10
+ gem install inventarium
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ - `inventarium init` - generate new empty `service.yaml` file
16
+ - `inventarium push path/to/service.yaml` - push service information to [inventarium app](https://inventarium.io)
3
17
 
4
18
  ## Copyright
5
19
 
data/inventarium.gemspec CHANGED
@@ -32,6 +32,7 @@ Gem::Specification.new do |spec|
32
32
 
33
33
  spec.add_runtime_dependency "dry-cli", "~> 0.4"
34
34
  spec.add_runtime_dependency "tty-progressbar"
35
+ spec.add_runtime_dependency "tty-prompt"
35
36
  spec.add_runtime_dependency "pastel"
36
37
 
37
38
  spec.add_development_dependency "bundler"
@@ -1,4 +1,5 @@
1
1
  require "dry/cli"
2
+ require_relative "./cli/template_generator"
2
3
  require_relative "./cli/version"
3
4
  require_relative "./cli/init"
4
5
  require_relative "./cli/push"
@@ -1,3 +1,5 @@
1
+ require "tty-prompt"
2
+
1
3
  module Inventarium
2
4
  module CLI
3
5
  class Init < Dry::CLI::Command
@@ -9,20 +11,35 @@ module Inventarium
9
11
  "order_service.yaml # Generate order_service.yml in root folder"
10
12
  ]
11
13
 
14
+ CLASSIFICATION_VALUES = %w[critical normal internal experiment]
15
+ STATUS_VALUES = %w[adopt hold trial in_development]
16
+
12
17
  def call(args: [], **)
13
- dir = args.first || '.'
18
+ dir = args.first || './service.yaml'
19
+ result = base_service_information
14
20
 
15
21
  pastel = Pastel.new
16
22
  printf "Generating a new service.yaml\t\t"
17
23
 
18
- FileUtils.cp(template_file_path, dir)
24
+ TemplateGenerator.new.call(dir: dir, payload: result)
25
+
19
26
  puts "[#{pastel.green('DONE')}]"
20
27
  end
21
28
 
22
29
  private
23
30
 
24
- def template_file_path
25
- File.expand_path(File.dirname(__FILE__) + "/templates/service.yaml")
31
+ def base_service_information
32
+ prompt = TTY::Prompt.new
33
+ name = prompt.ask('A name of the service:', required: true)
34
+
35
+ key = prompt.ask("A uniq key for service (you can use only chars, integers, '_' and '-'):", required: true) do |q|
36
+ q.validate(/\A[a-zA-Z0-9_-]+\Z/, "Invalid key value, please use only chars, integers and '-'")
37
+ end
38
+
39
+ classification = prompt.select("Choose service classification", CLASSIFICATION_VALUES, symbols: {marker: '>'})
40
+ status = prompt.select("Choose service status", STATUS_VALUES, symbols: {marker: '>'})
41
+
42
+ { name: name, key: key, classification: classification, status: status }
26
43
  end
27
44
  end
28
45
  end
@@ -2,6 +2,7 @@ require 'tty-progressbar'
2
2
  require 'net/http'
3
3
  require 'yaml'
4
4
  require 'json'
5
+ require 'pp'
5
6
 
6
7
  module Inventarium
7
8
  module CLI
@@ -29,19 +30,25 @@ module Inventarium
29
30
 
30
31
  bar.advance(10)
31
32
 
33
+ pastel = Pastel.new
34
+
32
35
  case response.code
33
36
  when '200'
34
- pastel = Pastel.new
35
37
  puts "[#{pastel.green('DONE')}]"
36
- when '422'
37
- pastel = Pastel.new
38
+
39
+ exit(0) # success exist
40
+ when '401' # Unauthorized
38
41
  puts "[#{pastel.red('FAIL')}] #{response.body}"
39
- when '500'
40
- pastel = Pastel.new
42
+ when '403' # Forbidden
41
43
  puts "[#{pastel.red('FAIL')}] #{response.body}"
44
+ when '422' # invalid data
45
+ puts "[#{pastel.red('FAIL')}]"
46
+ pp JSON.parse(response.body)
47
+ when '500'
48
+ puts "[#{pastel.red('FAIL')}] Service error, please try later or create an issue in https://github.com/inventarium-org/core"
42
49
  end
43
50
 
44
- # puts "Push a new service.yml file from '#{dir}' directory"
51
+ exit(1)
45
52
  end
46
53
 
47
54
  private
@@ -0,0 +1,20 @@
1
+ require 'erb'
2
+
3
+ module Inventarium
4
+ module CLI
5
+ class TemplateGenerator
6
+ def call(dir:, payload:)
7
+ template = File.read(template_file_path)
8
+ result = ERB.new(template).result(binding)
9
+
10
+ File.open(dir, 'w') { |f| f.write(result) }
11
+ end
12
+
13
+ private
14
+
15
+ def template_file_path
16
+ File.expand_path(File.dirname(__FILE__) + "/templates/service.yaml.erb")
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,64 @@
1
+ version: v0
2
+
3
+ # You need to provide only name and key fields, everything else can be empty
4
+ # For example, if you don't have documentation or environments you can add it later
5
+
6
+ # required
7
+ name: <%= payload[:name] %>
8
+ # required, should be unique for each service
9
+ key: <%= payload[:key] %>
10
+ description:
11
+ languages:
12
+ -
13
+ repository_link:
14
+ tags:
15
+ -
16
+
17
+ owner:
18
+ team_or_developer_name:
19
+ slack_channel:
20
+
21
+ service:
22
+ # optional, can be (critical | normal | internal | experiment)
23
+ classification: <%= payload[:classification] %>
24
+ # optional, can be (adopt | hold | trial | in_development)
25
+ status: <%= payload[:status] %>
26
+
27
+ docs:
28
+ api:
29
+ maintenance:
30
+ domain:
31
+
32
+ # You can add any count of environments and you can use any names instead production, like stage, demo, etc
33
+ environments:
34
+ production:
35
+ url:
36
+ healthcheck_url:
37
+ logs_url:
38
+ error_tracker_url:
39
+ tags:
40
+ - test
41
+ - specific gateway
42
+ monitoring:
43
+ # You can use any key-value objects here, like new_relic, grafana, etc
44
+ something:
45
+
46
+ operations:
47
+ ci_build_url:
48
+
49
+ communications:
50
+ # type is reqired, can be (http | rpc | graphql | event-producer | event-consumer)
51
+ - type:
52
+ # reqired, can be anything like (service key | kafka | rabbitmq | etc)
53
+ target:
54
+ # optional, can be (critical | uncritical)
55
+ criticality:
56
+ # optional list, can be (topic name | queue name | rpc resource | rest resource | gqlschema name)
57
+ resource:
58
+ -
59
+ # optional
60
+ custom_data:
61
+ # can be anything
62
+ # events:
63
+ # - test-event
64
+ # version: 2
@@ -1,3 +1,3 @@
1
1
  module Inventarium
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inventarium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Davydov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-12 00:00:00.000000000 Z
11
+ date: 2020-05-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-cli
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: tty-prompt
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: pastel
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -114,7 +128,8 @@ files:
114
128
  - lib/inventarium/cli.rb
115
129
  - lib/inventarium/cli/init.rb
116
130
  - lib/inventarium/cli/push.rb
117
- - lib/inventarium/cli/templates/service.yaml
131
+ - lib/inventarium/cli/template_generator.rb
132
+ - lib/inventarium/cli/templates/service.yaml.erb
118
133
  - lib/inventarium/cli/version.rb
119
134
  - lib/inventarium/version.rb
120
135
  homepage: https://inventarium.io
@@ -1,47 +0,0 @@
1
- version: v0
2
-
3
- # You need to provide only name and key fields, everything else can be empty
4
- # For example, if you don't have documentation or environments you can add it later
5
-
6
- # required
7
- name: Service
8
- # required, should be unique for each service
9
- key: service
10
- description:
11
- languages:
12
- -
13
- repository_link:
14
- tags:
15
- -
16
-
17
- owner:
18
- team_or_developer_name:
19
- slack_channel:
20
-
21
- service:
22
- # optional, can be (critical | normal | internal | expiriment)
23
- classification:
24
- # optional, can be (adopt | hold | trial | in development)
25
- status:
26
-
27
- docs:
28
- api:
29
- maintenance:
30
- domain:
31
-
32
- # You can add any count of environments and you can use any names instead production, like stage, demo, etc
33
- environments:
34
- production:
35
- url:
36
- healthcheck_url:
37
- logs_url:
38
- error_traker_url:
39
- tags:
40
- - test
41
- - specific gateway
42
- monitoring:
43
- # You can use any key-value objects here, like new_relic, grafana, etc
44
- something:
45
-
46
- operations:
47
- ci_build_url: