ruboty-mackerel 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 76a05ee99dd7d366c7411f2ffc3e2e87765ba0ab
4
+ data.tar.gz: da9584b909399231d407e74d09ef21cc96110924
5
+ SHA512:
6
+ metadata.gz: 525ad1ae74eef74dffc1367a63ef07ad7e77f884dc08d77cb14cc4f98964647efd1dfccdfb7a27352c4aa10f191082f59d64ce0c709108d7a8e93c3ae38867f6
7
+ data.tar.gz: d33864fc169f95f3857c427e7e195dc93215ffb149f16a0d5d9ccd5365bed4fe405d2b0eed168f048cbdb77511054de1773fae2bfa6a20742a885f30b93a14f1
data/.env.sample ADDED
@@ -0,0 +1,2 @@
1
+ MACKEREL_APIKEY=<YOUR MACKEREL API KEY>
2
+ MACKEREL_ORG=<YOUR MACKEREL ORGANIZATION>
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.env
3
+ /.yardoc
4
+ /Gemfile.lock
5
+ /_yardoc/
6
+ /coverage/
7
+ /doc/
8
+ /pkg/
9
+ /spec/reports/
10
+ /tmp/
11
+ /vendor/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.3
4
+ before_install: gem install bundler -v 1.10.6
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in ruboty-mackerel.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # Ruboty::Mackerel
2
+
3
+ ## Installation
4
+
5
+ Add this line to your application's Gemfile:
6
+
7
+ ```ruby
8
+ gem 'ruboty-mackerel'
9
+ ```
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install ruboty-mackerel
18
+
19
+ ## Usage
20
+
21
+ ```
22
+ Help:
23
+ +---------------------------------------------------+--------------------------+
24
+ | ruboty /mkr services? (\w+) hosts?$/ | List service hosts. |
25
+ | ruboty /mkr services? (\w+) roles? (\w+)? hosts$/ | List service role hosts. |
26
+ | ruboty /mkr services? (\w+) roles?$/ | List service roles. |
27
+ | ruboty /mkr services?$/ | List services. |
28
+ +---------------------------------------------------+--------------------------+
29
+ ```
30
+
31
+ ## Development
32
+
33
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
34
+
35
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
36
+
37
+ ## Contributing
38
+
39
+ Bug reports and pull requests are welcome on GitHub at https://github.com/mizoR/ruboty-mackerel.
40
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "ruboty/mackerel"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ require "dotenv"
10
+ Dotenv.load
11
+
12
+ require "ruboty"
13
+ require "ruboty/mackerel"
14
+ Ruboty::CommandBuilder.new(ARGV).build.call
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,6 @@
1
+ require "ruboty/actions/mackerel/base"
2
+ require "ruboty/actions/mackerel/help"
3
+ require "ruboty/actions/mackerel/list_services"
4
+ require "ruboty/actions/mackerel/list_service_roles"
5
+ require "ruboty/actions/mackerel/list_service_role_hosts"
6
+ require "ruboty/actions/mackerel/list_service_hosts"
@@ -0,0 +1,39 @@
1
+ require "terminal-table"
2
+
3
+ module Ruboty
4
+ module Actions
5
+ module Mackerel
6
+ class Base < ::Ruboty::Actions::Base
7
+ def call
8
+ message.reply(body, code: true)
9
+ end
10
+
11
+ private
12
+
13
+ def body
14
+ get_body
15
+ rescue ::Mackerel::Error => e
16
+ e.message.lines[0..2].join("\n")
17
+ rescue => e
18
+ e.message
19
+ end
20
+
21
+ def url_for(params={})
22
+ service_name, role_name, host_id =
23
+ params.values_at(:service_name, :role_name, :host_id)
24
+
25
+ case
26
+ when host_id
27
+ "https://mackerel.io/orgs/#{ENV['MACKEREL_ORG']}/hosts/#{host_id}"
28
+ when service_name && role_name
29
+ "https://mackerel.io/orgs/#{ENV['MACKEREL_ORG']}/services/#{service_name}#role=#{role_name}"
30
+ when service_name
31
+ "https://mackerel.io/orgs/#{ENV['MACKEREL_ORG']}/services/#{service_name}"
32
+ else
33
+ raise "Routing not found. (params: #{params})"
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,24 @@
1
+ module Ruboty
2
+ module Actions
3
+ module Mackerel
4
+ class Help < Base
5
+ private
6
+
7
+ def get_body
8
+ descriptions = get_all_descriptions
9
+ descriptions.select! { |pattern, _| pattern.include?('mkr') }
10
+ "Command not found:\n #{message.body}\n\nHelp:\n" +
11
+ Terminal::Table.new(rows: descriptions).to_s
12
+ end
13
+
14
+ def get_all_descriptions
15
+ Ruboty.actions.reject(&:hidden?).sort.map do |action|
16
+ prefix = ""
17
+ prefix << message.robot.name << " " unless action.all?
18
+ ["#{prefix}#{action.pattern.inspect}", action.description]
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,20 @@
1
+ module Ruboty
2
+ module Actions
3
+ module Mackerel
4
+ class ListServiceHosts < Base
5
+ private
6
+
7
+ def get_body
8
+ hosts = ::Mackerel.hosts(service: service_name)
9
+ rows = hosts.map {|h| [h.status, h.id, h.name, url_for(host_id: h.id)]}
10
+ Terminal::Table.new(rows: rows).to_s +
11
+ "\n#{hosts.count} hosts in services/#{service_name}"
12
+ end
13
+
14
+ def service_name
15
+ message[1]
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,24 @@
1
+ module Ruboty
2
+ module Actions
3
+ module Mackerel
4
+ class ListServiceRoleHosts < Base
5
+ private
6
+
7
+ def get_body
8
+ hosts = ::Mackerel.hosts(service: service_name, role: role_name)
9
+ rows = hosts.map {|h| [h.status, h.id, h.name, url_for(host_id: h.id)]}
10
+ Terminal::Table.new(rows: rows).to_s +
11
+ "\n#{hosts.count} hosts in services/#{service_name}/roles/#{role_name}"
12
+ end
13
+
14
+ def service_name
15
+ message[1]
16
+ end
17
+
18
+ def role_name
19
+ message[2]
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,20 @@
1
+ module Ruboty
2
+ module Actions
3
+ module Mackerel
4
+ class ListServiceRoles < Base
5
+ private
6
+
7
+ def get_body
8
+ roles = ::Mackerel.roles(service_name)
9
+ rows = roles.map {|r| [r.name, url_for(service_name: service_name, role_name: r.name)]}
10
+ Terminal::Table.new(rows: rows).to_s +
11
+ "\n#{roles.count} roles in services/#{service_name}"
12
+ end
13
+
14
+ def service_name
15
+ message[1]
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,16 @@
1
+ module Ruboty
2
+ module Actions
3
+ module Mackerel
4
+ class ListServices < Base
5
+ private
6
+
7
+ def get_body
8
+ services = ::Mackerel.services
9
+ rows = services.map {|s| [s.name, url_for(service_name: s.name)]}
10
+ Terminal::Table.new(rows: rows).to_s +
11
+ "\n#{services.count} services"
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,34 @@
1
+ module Ruboty
2
+ module Handlers
3
+ class Mackerel < Base
4
+ env :MACKEREL_APIKEY, "Mackerel api key"
5
+ env :MACKEREL_ORG, "Mackerel organization"
6
+
7
+ on %r<mkr services?$>, name: 'list_services', description: 'List services.'
8
+ on %r<mkr services? (\w+) roles?$>, name: 'list_service_roles', description: 'List service roles.'
9
+ on %r<mkr services? (\w+) roles? (\w+) hosts?$>, name: 'list_service_role_hosts', description: 'List service role hosts.'
10
+ on %r<mkr services? (\w+) hosts?$>, name: 'list_service_hosts', description: 'List service hosts.'
11
+ on %r<mkr(.+)?>, name: 'help', description: 'Help.', missing: true, hidden: true
12
+
13
+ def list_services(message)
14
+ Ruboty::Actions::Mackerel::ListServices.new(message).call
15
+ end
16
+
17
+ def list_service_roles(message)
18
+ Ruboty::Actions::Mackerel::ListServiceRoles.new(message).call
19
+ end
20
+
21
+ def list_service_role_hosts(message)
22
+ Ruboty::Actions::Mackerel::ListServiceRoleHosts.new(message).call
23
+ end
24
+
25
+ def list_service_hosts(message)
26
+ Ruboty::Actions::Mackerel::ListServiceHosts.new(message).call
27
+ end
28
+
29
+ def help(message)
30
+ Ruboty::Actions::Mackerel::Help.new(message).call
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,10 @@
1
+ require "ruboty"
2
+ require "ruboty/actions/mackerel"
3
+ require "ruboty/handlers/mackerel"
4
+ require "ruboty/mackerel/version"
5
+ require "mackerel-rb"
6
+
7
+ module Ruboty
8
+ module Mackerel
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ module Ruboty
2
+ module Mackerel
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'ruboty/mackerel/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "ruboty-mackerel"
8
+ spec.version = Ruboty::Mackerel::VERSION
9
+ spec.authors = ["mizokami"]
10
+ spec.email = ["r.mizokami@gmail.com"]
11
+
12
+ spec.summary = %q{Ruboty plugin for Mackerel.}
13
+ spec.description = %q{Ruboty plugin for Mackerel.}
14
+ spec.homepage = "https://github.com/mizoR/ruboty-mackerel"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "mackerel-rb"
22
+ spec.add_dependency "terminal-table"
23
+ spec.add_development_dependency "bundler", "~> 1.10"
24
+ spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "rspec"
26
+ spec.add_development_dependency "ruboty"
27
+ spec.add_development_dependency "dotenv"
28
+ end
metadata ADDED
@@ -0,0 +1,161 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruboty-mackerel
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - mizokami
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-11-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mackerel-rb
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: terminal-table
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.10'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: ruboty
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: dotenv
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Ruboty plugin for Mackerel.
112
+ email:
113
+ - r.mizokami@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - ".env.sample"
119
+ - ".gitignore"
120
+ - ".rspec"
121
+ - ".travis.yml"
122
+ - Gemfile
123
+ - README.md
124
+ - Rakefile
125
+ - bin/console
126
+ - bin/setup
127
+ - lib/ruboty/actions/mackerel.rb
128
+ - lib/ruboty/actions/mackerel/base.rb
129
+ - lib/ruboty/actions/mackerel/help.rb
130
+ - lib/ruboty/actions/mackerel/list_service_hosts.rb
131
+ - lib/ruboty/actions/mackerel/list_service_role_hosts.rb
132
+ - lib/ruboty/actions/mackerel/list_service_roles.rb
133
+ - lib/ruboty/actions/mackerel/list_services.rb
134
+ - lib/ruboty/handlers/mackerel.rb
135
+ - lib/ruboty/mackerel.rb
136
+ - lib/ruboty/mackerel/version.rb
137
+ - ruboty-mackerel.gemspec
138
+ homepage: https://github.com/mizoR/ruboty-mackerel
139
+ licenses: []
140
+ metadata: {}
141
+ post_install_message:
142
+ rdoc_options: []
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ required_rubygems_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ requirements: []
156
+ rubyforge_project:
157
+ rubygems_version: 2.4.5.1
158
+ signing_key:
159
+ specification_version: 4
160
+ summary: Ruboty plugin for Mackerel.
161
+ test_files: []