inventarium 0.2.0 → 0.3.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 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: