dashdog 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f1eefccd09176d0addebdde251de690ca71b65d9
4
+ data.tar.gz: f24304db6a985c943ecb73adf359c415593b20d8
5
+ SHA512:
6
+ metadata.gz: 9a259f0e6f87135a4034508a08277c2929c371d911e4820d433af8ec4cda8441f29513b078e8690fcf3f3768a3138af2d304d658d701a7db9bf08b7d164a7d21
7
+ data.tar.gz: 24febc08fc6944bfbfd7864d50be38377c4546e562b93d57e66f7bd86092064bd7842af28397505ef253331b43668f5ed7f56c2ee69eb85475547f24082b708f
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ /vendor
11
+ .envrc
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.1.5
5
+ before_install: gem install bundler -v 1.12.5
data/Boardfile ADDED
@@ -0,0 +1,117 @@
1
+ timeboard "terui's TimeBoard 5 Aug 2016 11:46" do
2
+ read_only false
3
+ description "created by terui@serverworks.co.jp"
4
+ title "terui's TimeBoard 5 Aug 2016 11:46"
5
+ graphs do |*|
6
+ definition do
7
+ viz "timeseries"
8
+ requests do |*|
9
+ q "avg:system.load.1{*}"
10
+ aggregator "avg"
11
+ conditional_formats []
12
+ type "line"
13
+ end
14
+ end
15
+ title "Avg of system.load.1 over *"
16
+ end
17
+ graphs do |*|
18
+ definition do
19
+ style do
20
+ palette "green_to_orange"
21
+ paletteFlip false
22
+ end
23
+ group nil
24
+ noMetricHosts true
25
+ viz "hostmap"
26
+ scope nil
27
+ requests do |*|
28
+ q "avg:collection_timestamp{*} by {host}"
29
+ type "fill"
30
+ end
31
+ noGroupHosts true
32
+ end
33
+ title "Avg of collection_timestamp over * by host"
34
+ end
35
+ graphs do |*|
36
+ definition do
37
+ viz "query_value"
38
+ requests do |*|
39
+ q "avg:system.cpu.user{*}"
40
+ conditional_formats do |*|
41
+ palette "white_on_green"
42
+ comparator "<="
43
+ value "50"
44
+ end
45
+ conditional_formats do |*|
46
+ palette "white_on_yellow"
47
+ comparator ">"
48
+ value "50"
49
+ end
50
+ conditional_formats do |*|
51
+ palette "white_on_red"
52
+ comparator ">"
53
+ value "80"
54
+ end
55
+ end
56
+ end
57
+ title "Avg of system.cpu.user over *"
58
+ end
59
+ graphs do |*|
60
+ definition do
61
+ viz "timeseries"
62
+ requests do |*|
63
+ q "avg:aws.ebs.volume_write_ops{host:default-amazon-linux}"
64
+ end
65
+ events []
66
+ end
67
+ title "aws.ebs.volume_write_ops"
68
+ end
69
+ end
70
+
71
+ screenboard "terui's ScreenBoard 15 Aug 2016 15:39 test" do
72
+ read_only false
73
+ board_bgtype "board_graph"
74
+ original_title ""
75
+ height 80
76
+ width "100%"
77
+ template_variables []
78
+ widgets do |*|
79
+ title_size 16
80
+ title true
81
+ color "#4d4d4d"
82
+ text "Text Widget 2"
83
+ title_align "left"
84
+ text_align "left"
85
+ title_text ""
86
+ height 6
87
+ width 24
88
+ y 4
89
+ x 8
90
+ font_size "auto"
91
+ type "free_text"
92
+ end
93
+ widgets do |*|
94
+ title_size 16
95
+ title true
96
+ title_align "left"
97
+ title_text ""
98
+ height 13
99
+ tile_def do
100
+ viz "timeseries"
101
+ requests do |*|
102
+ q "avg:system.cpu.user{*}"
103
+ conditional_formats []
104
+ type "line"
105
+ end
106
+ end
107
+ width 47
108
+ timeframe "1h"
109
+ y 4
110
+ x 52
111
+ legend_size "0"
112
+ type "timeseries"
113
+ legend false
114
+ end
115
+ shared false
116
+ title_edited false
117
+ end
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in dashdog.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Serverworks Co.,Ltd.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,87 @@
1
+ # Dashdog
2
+
3
+ Datadog dashboards management tool with Ruby DSL.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'dashdog'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install dashdog
20
+
21
+ ## Usage
22
+
23
+ Please set your API,Application key in the environment variables.
24
+
25
+ ```sh
26
+ export DD_API_KEY=<your-datadog-api-key>
27
+ export DD_APP_KEY=<your-datadog-application-key>
28
+ ```
29
+
30
+ Available commands:
31
+
32
+ ```
33
+ Commands:
34
+ dashdog apply # Apply the dashboard configurations
35
+ dashdog export # Export the dashboard configurations
36
+ dashdog help [COMMAND] # Describe available commands or one specific command
37
+
38
+ Options:
39
+ -f, [--file=FILE] # Configuration file
40
+ # Default: Boardfile
41
+ ```
42
+
43
+ ## Commands
44
+
45
+ ### export
46
+ Export the dashboard configurations
47
+
48
+ ```sh
49
+ Usage:
50
+ dashdog export
51
+
52
+ Options:
53
+ -w, [--write], [--no-write] # Write the configuration to the file
54
+ -f, [--file=FILE] # Configuration file
55
+ # Default: Boardfile
56
+ ```
57
+
58
+ ### apply
59
+ Apply the dashboard configurations
60
+
61
+ ```sh
62
+ Usage:
63
+ dashdog apply
64
+
65
+ Options:
66
+ -d, [--dry-run=DRY_RUN] # Dry run (Only output the difference)
67
+ -f, [--file=FILE] # Configuration file
68
+ # Default: Boardfile
69
+ ```
70
+
71
+ ## Development
72
+
73
+ 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.
74
+
75
+ 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).
76
+
77
+ ## Contributing
78
+
79
+ Bug reports and pull requests are welcome on GitHub at https://github.com/serverworks/dashdog.
80
+
81
+ ## License
82
+
83
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
84
+
85
+ ## Copyright
86
+
87
+ Copyright (c) 2016 Serverworks Co.,Ltd. See [LICENSE](https://github.com/serverworks/dashdog/blob/master/LICENSE.txt) for details.
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 "dashdog"
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
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/dashdog.gemspec ADDED
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'dashdog/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "dashdog"
8
+ spec.version = Dashdog::VERSION
9
+ spec.authors = ["Serverworks Co.,Ltd."]
10
+ spec.email = ["terui@serverworks.co.jp"]
11
+
12
+ spec.summary = %q{Datadog dashboards management tool with Ruby DSL.}
13
+ spec.description = %q{Datadog dashboards management tool with Ruby DSL.}
14
+ spec.homepage = "https://github.com/serverworks/dashdog"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_dependency "dogapi"
23
+ spec.add_dependency "dslh", "~> 0.3.8"
24
+ spec.add_dependency "thor", "~> 0.19.1"
25
+ spec.add_dependency "coderay"
26
+ spec.add_dependency "diffy"
27
+
28
+ spec.add_development_dependency "bundler", "~> 1.12"
29
+ spec.add_development_dependency "rake", "~> 10.0"
30
+ spec.add_development_dependency "rspec", "~> 3.0"
31
+ end
data/exe/dashdog ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $: << File.expand_path('../../lib', __FILE__)
4
+
5
+ require 'dashdog'
6
+
7
+ Dashdog::Cli.start(ARGV)
data/lib/dashdog.rb ADDED
@@ -0,0 +1,12 @@
1
+ require "dashdog/version"
2
+ require "dashdog/logger"
3
+ require "dashdog/utils"
4
+
5
+ require "dashdog/client"
6
+ require "dashdog/converter"
7
+ require "dashdog/actions"
8
+ require "dashdog/cli"
9
+
10
+ module Dashdog
11
+ # Your code goes here...
12
+ end
@@ -0,0 +1,97 @@
1
+ require 'yaml'
2
+ require 'json'
3
+
4
+ module Dashdog
5
+ class Actions
6
+ include Dashdog::Logger::Helper
7
+
8
+ def initialize
9
+ @client = Dashdog::Client.new
10
+ @converter = Dashdog::Converter.new
11
+ end
12
+
13
+ def export(options)
14
+ dsl = @converter.timeboards_to_dsl(@client.get_timeboards)
15
+ dsl << @converter.screenboards_to_dsl(@client.get_screenboards)
16
+ Dashdog::Utils.print_ruby(dsl)
17
+ File.write(options['file'], dsl) if options['write']
18
+ end
19
+
20
+ def apply(options)
21
+ dry_run = options['dry_run'] ? '[Dry run] ' : ''
22
+ conf = @converter.to_h(File.read(options['file']))
23
+
24
+ _apply_timeboards(conf['timeboards'], @client.get_timeboards, dry_run)
25
+ _apply_screenboards(conf['screenboards'], @client.get_screenboards, dry_run)
26
+ end
27
+
28
+ def _apply_timeboards(local, remote, dry_run)
29
+ local.each do |l|
30
+ r = _choice_by_title(remote, l['title'])
31
+ if r.nil?
32
+ info("#{dry_run}Create the new timeboard '#{l['title']}'")
33
+ @client.create_timeboard(l) if dry_run.empty?
34
+ else
35
+ l['id'] = r['id']
36
+ r.delete('created')
37
+ r.delete('modified')
38
+ if l == r
39
+ info("#{dry_run}No changes '#{l['title']}'")
40
+ else
41
+ warn("#{dry_run}Update the timeboard\n#{Dashdog::Utils.diff(r, l)}")
42
+ @client.update_timeboard(l) if dry_run.empty?
43
+ end
44
+ end
45
+ end
46
+
47
+ remote.each do |r|
48
+ if _choice_by_title(local, r['title']).nil?
49
+ warn("#{dry_run}Delete the timeboard '#{r['title']}'")
50
+ @client.delete_timeboard(r['id']) if dry_run.empty?
51
+ end
52
+ end
53
+ end
54
+
55
+ def _apply_screenboards(local, remote, dry_run)
56
+ local.each do |l|
57
+ r = _choice_by_title(remote, l['board_title'])
58
+ if r.nil?
59
+ info("#{dry_run}Create the new screenboards '#{l['board_title']}'")
60
+ @client.create_screenboard(l) unless dry_run.empty?
61
+ else
62
+ l['id'] = r['id']
63
+ r.delete('created')
64
+ r.delete('modified')
65
+ widgets = r['widgets']
66
+ r['widgets'] = []
67
+ widgets.each do |wd|
68
+ wd.delete('board_id')
69
+ r['widgets'] << wd
70
+ end
71
+ if l == r
72
+ info("#{dry_run}No changes '#{l['board_title']}'")
73
+ else
74
+ warn("#{dry_run}Update the screenboard '#{l['board_title']}'\n#{Dashdog::Utils.diff(r, l)}")
75
+ @client.update_screenboard(l) if dry_run.empty?
76
+ end
77
+ end
78
+ end
79
+
80
+ remote.each do |r|
81
+ if _choice_by_title(local, r['board_title']).nil?
82
+ warn("#{dry_run}Delete the timeboard '#{r['board_title']}'")
83
+ @client.delete_screenboard(r['id']) if dry_run.empty?
84
+ end
85
+ end
86
+ end
87
+
88
+ def _choice_by_title(boards, title)
89
+ boards.each do |b|
90
+ return b if b['title'] == title
91
+ return b if b['board_title'] == title
92
+ end
93
+ nil
94
+ end
95
+
96
+ end
97
+ end
@@ -0,0 +1,24 @@
1
+ require 'thor'
2
+
3
+ module Dashdog
4
+ class Cli < Thor
5
+ class_option :file, aliases: '-f', desc: 'Configuration file', type: :string, default: 'Boardfile'
6
+
7
+ def initialize(*args)
8
+ @actions = Dashdog::Actions.new
9
+ super(*args)
10
+ end
11
+
12
+ desc "export", "Export the dashboard configurations"
13
+ option :write, aliases: '-w', desc: 'Write the configuration to the file', type: :boolean, default: false
14
+ def export
15
+ @actions.export(options)
16
+ end
17
+
18
+ desc "apply", "Apply the dashboard configurations"
19
+ option :dry_run, aliases: '-d', desc: 'Dry run (Only output the difference)', type: :string, default: false
20
+ def apply
21
+ @actions.apply(options)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,67 @@
1
+ require 'dogapi'
2
+
3
+ module Dashdog
4
+ class Client
5
+
6
+ def initialize
7
+ @api = Dogapi::Client.new(ENV['DD_API_KEY'], ENV['DD_APP_KEY'])
8
+ end
9
+
10
+ def get_timeboards
11
+ ret = []
12
+ @api.get_dashboards[1]['dashes'].each do |bd|
13
+ ret << @api.get_dashboard(bd['id'])[1]['dash']
14
+ end
15
+ return ret
16
+ end
17
+
18
+ def get_screenboards
19
+ ret = []
20
+ @api.get_all_screenboards[1]['screenboards'].each do |bd|
21
+ ret << @api.get_screenboard(bd['id'])[1]
22
+ end
23
+ return ret
24
+ end
25
+
26
+ def create_timeboard(tb)
27
+ ret = @api.create_dashboard(
28
+ tb['title'],
29
+ tb['description'],
30
+ tb['graphs'],
31
+ tb['template_variables'])
32
+ raise RuntimeError, ret[1]['errors'] if ret[0] != '200'
33
+ end
34
+
35
+ def update_timeboard(tb)
36
+ ret = @api.update_dashboard(
37
+ tb['id'],
38
+ tb['title'],
39
+ tb['description'],
40
+ tb['graphs'],
41
+ tb['template_variables'])
42
+ raise RuntimeError, ret[1]['errors'] if ret[0] != '200'
43
+ end
44
+
45
+ def delete_timeboard(id)
46
+ ret = @api.delete_dashboard(id)
47
+ raise RuntimeError, ret[1]['errors'] if ret[0] != '200'
48
+ end
49
+
50
+ def create_screenboard(sb)
51
+ ret = @api.create_screenboard(sb)
52
+ raise RuntimeError, ret[1]['errors'] if ret[0] != '200'
53
+ end
54
+
55
+ def update_screenboard(sb)
56
+ id = sb['id']
57
+ sb.delete('id')
58
+ ret = @api.update_screenboard(id, sb)
59
+ raise RuntimeError, ret[1]['errors'] if ret[0] != '200'
60
+ end
61
+
62
+ def delete_screenboard(id)
63
+ ret = @api.delete_screenboard(id)
64
+ raise RuntimeError, ret[1]['errors'] if ret[0] != '200'
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,87 @@
1
+ require 'dslh'
2
+
3
+ DELETE_KEYS = ['id', 'board_title', 'created', 'modified']
4
+
5
+ module Dashdog
6
+ class Converter
7
+ def initialize
8
+ @boards = {'timeboards' => [], 'screenboards' => []}
9
+ end
10
+
11
+ def timeboards_to_dsl(tbs)
12
+ exclude_key = proc do |k|
13
+ false
14
+ end
15
+
16
+ ret = ''
17
+ tbs.each do |tb|
18
+ title = tb['title']
19
+ DELETE_KEYS.each {|k| tb.delete(k) }
20
+ dsl = Dslh.deval(
21
+ tb,
22
+ exclude_key: exclude_key)
23
+ dsl.gsub!(/^/, ' ').strip!
24
+ ret << <<-EOS
25
+ timeboard #{title.inspect} do
26
+ #{dsl}
27
+ end
28
+
29
+ EOS
30
+ end
31
+ ret
32
+ end
33
+
34
+ def screenboards_to_dsl(screenboards)
35
+ exclude_key = proc do |k|
36
+ false
37
+ end
38
+
39
+ ret = ''
40
+ screenboards.each do |sb|
41
+ title = sb['board_title']
42
+ DELETE_KEYS.each {|k| sb.delete(k) }
43
+ widgets = sb['widgets']
44
+ sb['widgets'] = []
45
+ widgets.each do |wd|
46
+ wd.delete('board_id')
47
+ sb['widgets'] << wd
48
+ end
49
+ dsl = Dslh.deval(
50
+ sb,
51
+ exclude_key: exclude_key)
52
+ dsl.gsub!(/^/, ' ').strip!
53
+ ret << <<-EOS
54
+ screenboard #{title.inspect} do
55
+ #{dsl}
56
+ end
57
+
58
+ EOS
59
+ end
60
+ ret
61
+ end
62
+
63
+ def to_h(dsl)
64
+ instance_eval(dsl)
65
+ @boards
66
+ end
67
+
68
+ private
69
+
70
+ def timeboard(value = nil, &block)
71
+ hash = Dslh.eval(
72
+ allow_empty_args: true,
73
+ &block)
74
+ hash['title'] = value
75
+ @boards['timeboards'] << hash
76
+ end
77
+
78
+ def screenboard(value = nil, &block)
79
+ hash = Dslh.eval(
80
+ allow_empty_args: true,
81
+ &block)
82
+ hash['board_title'] = value
83
+ @boards['screenboards'] << hash
84
+ end
85
+
86
+ end
87
+ end
@@ -0,0 +1,86 @@
1
+ require 'logger'
2
+ require 'singleton'
3
+
4
+ module Dashdog
5
+ class TermColor
6
+ class << self
7
+
8
+ def green(msg)
9
+ colorize 32, msg
10
+ end
11
+
12
+ def yellow(msg)
13
+ colorize 33, msg
14
+ end
15
+
16
+ def red(msg)
17
+ colorize 31, msg
18
+ end
19
+
20
+ def colorize(num, msg)
21
+ "\e[#{num}m#{msg}\e[0m"
22
+ end
23
+
24
+ end
25
+ end
26
+
27
+ class Logger < Logger
28
+ include Singleton
29
+
30
+ def initialize
31
+ super(STDERR)
32
+
33
+ self.formatter = proc do |severity, datetime, progname, msg|
34
+ "#{msg}\n"
35
+ end
36
+
37
+ self.level = Logger::INFO
38
+ end
39
+
40
+ def debug(progname = nil, method_name = nil, msg)
41
+ super(progname) { { method_name: method_name, message: msg } }
42
+ end
43
+
44
+ def info(msg)
45
+ super { Dashdog::TermColor.green(msg) }
46
+ end
47
+
48
+ def warn(msg)
49
+ super { Dashdog::TermColor.yellow(msg) }
50
+ end
51
+
52
+ def fatal(msg)
53
+ super { Dashdog::TermColor.red(msg) }
54
+ end
55
+
56
+ def error(progname = nil, method_name = nil, msg, backtrace)
57
+ super(progname) { { method_name: method_name, message: msg, backtrace: backtrace } }
58
+ end
59
+
60
+ module Helper
61
+
62
+ def log(level, message)
63
+ logger = Dashdog::Logger.instance
64
+ logger.send(level, message)
65
+ end
66
+
67
+ def info(msg)
68
+ log(:info, msg)
69
+ end
70
+
71
+ def warn(msg)
72
+ log(:warn, msg)
73
+ end
74
+
75
+ def fatal(msg)
76
+ log(:error, msg)
77
+ end
78
+
79
+ def debug(msg)
80
+ log(:debug, msg)
81
+ end
82
+
83
+ module_function :log, :info, :warn, :fatal, :debug
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,31 @@
1
+ require 'json'
2
+ require 'diffy'
3
+ require 'coderay'
4
+
5
+ module Dashdog
6
+ class Utils
7
+
8
+ def self.diff(hash1, hash2)
9
+ Diffy::Diff.new(
10
+ JSON.pretty_generate(hash1),
11
+ JSON.pretty_generate(hash2),
12
+ :diff => '-u'
13
+ ).to_s(:color)
14
+ end
15
+
16
+ def self.print_yaml(yaml)
17
+ CodeRay::Encoders::Terminal::TOKEN_COLORS[:key] = {
18
+ self: "\e[32m",
19
+ }
20
+ puts CodeRay.scan(yaml, :yaml).terminal
21
+ end
22
+
23
+ def self.print_ruby(ruby)
24
+ puts CodeRay.scan(ruby, :ruby).terminal
25
+ end
26
+
27
+ def self.print_json(json)
28
+ puts CodeRay.scan(json, :json).terminal
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,3 @@
1
+ module Dashdog
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,177 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dashdog
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Serverworks Co.,Ltd.
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-08-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dogapi
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: dslh
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.3.8
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.3.8
41
+ - !ruby/object:Gem::Dependency
42
+ name: thor
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.19.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.19.1
55
+ - !ruby/object:Gem::Dependency
56
+ name: coderay
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: diffy
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
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: bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.12'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.12'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '10.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '10.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '3.0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3.0'
125
+ description: Datadog dashboards management tool with Ruby DSL.
126
+ email:
127
+ - terui@serverworks.co.jp
128
+ executables:
129
+ - dashdog
130
+ extensions: []
131
+ extra_rdoc_files: []
132
+ files:
133
+ - ".gitignore"
134
+ - ".rspec"
135
+ - ".travis.yml"
136
+ - Boardfile
137
+ - Gemfile
138
+ - LICENSE.txt
139
+ - README.md
140
+ - Rakefile
141
+ - bin/console
142
+ - bin/setup
143
+ - dashdog.gemspec
144
+ - exe/dashdog
145
+ - lib/dashdog.rb
146
+ - lib/dashdog/actions.rb
147
+ - lib/dashdog/cli.rb
148
+ - lib/dashdog/client.rb
149
+ - lib/dashdog/converter.rb
150
+ - lib/dashdog/logger.rb
151
+ - lib/dashdog/utils.rb
152
+ - lib/dashdog/version.rb
153
+ homepage: https://github.com/serverworks/dashdog
154
+ licenses:
155
+ - MIT
156
+ metadata: {}
157
+ post_install_message:
158
+ rdoc_options: []
159
+ require_paths:
160
+ - lib
161
+ required_ruby_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ requirements: []
172
+ rubyforge_project:
173
+ rubygems_version: 2.2.2
174
+ signing_key:
175
+ specification_version: 4
176
+ summary: Datadog dashboards management tool with Ruby DSL.
177
+ test_files: []