doggy 0.2.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,37 @@
1
+ module Doggy
2
+ module Models
3
+ class Screen < Doggy::Model
4
+ attribute :id, Integer
5
+ attribute :board_title, String
6
+
7
+ attribute :board_bgtype, String
8
+ attribute :templated, Boolean
9
+ attribute :widgets, Array[Hash]
10
+ attribute :height, String
11
+ attribute :width, String
12
+
13
+ def self.resource_url(id = nil)
14
+ "https://app.datadoghq.com/api/v1/screen".tap do |base_url|
15
+ base_url << "/#{ id }" if id
16
+ end
17
+ end
18
+
19
+ def managed?
20
+ !(board_title =~ Doggy::DOG_SKIP_REGEX)
21
+ end
22
+
23
+ def ensure_managed_emoji!
24
+ return unless managed?
25
+ self.board_title += " \xF0\x9F\x90\xB6"
26
+ end
27
+
28
+ def human_url
29
+ "https://app.datadoghq.com/screen/#{ id }"
30
+ end
31
+
32
+ # Screens don't have a direct edit URL
33
+ alias_method :human_edit_url, :human_url
34
+ end # Screen
35
+ end # Models
36
+ end # Doggy
37
+
@@ -1,3 +1,3 @@
1
1
  module Doggy
2
- VERSION = '0.2.2'
2
+ VERSION = "2.0.0"
3
3
  end
metadata CHANGED
@@ -1,108 +1,126 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: doggy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vlad Gorodetsky
8
+ - Andre Medeiros
8
9
  autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2015-09-28 00:00:00.000000000 Z
12
+ date: 2015-10-05 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
- name: bundler
15
+ name: json
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
18
  - - "~>"
18
19
  - !ruby/object:Gem::Version
19
- version: '1.9'
20
- type: :development
20
+ version: 1.8.3
21
+ type: :runtime
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
25
  - - "~>"
25
26
  - !ruby/object:Gem::Version
26
- version: '1.9'
27
+ version: 1.8.3
27
28
  - !ruby/object:Gem::Dependency
28
- name: rake
29
+ name: parallel
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
32
  - - "~>"
32
33
  - !ruby/object:Gem::Version
33
- version: '10.0'
34
- type: :development
34
+ version: 1.6.1
35
+ type: :runtime
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
39
  - - "~>"
39
40
  - !ruby/object:Gem::Version
40
- version: '10.0'
41
+ version: 1.6.1
41
42
  - !ruby/object:Gem::Dependency
42
43
  name: thor
43
44
  requirement: !ruby/object:Gem::Requirement
44
45
  requirements:
45
46
  - - "~>"
46
47
  - !ruby/object:Gem::Version
47
- version: '0.19'
48
+ version: 0.19.1
48
49
  type: :runtime
49
50
  prerelease: false
50
51
  version_requirements: !ruby/object:Gem::Requirement
51
52
  requirements:
52
53
  - - "~>"
53
54
  - !ruby/object:Gem::Version
54
- version: '0.19'
55
+ version: 0.19.1
55
56
  - !ruby/object:Gem::Dependency
56
- name: dogapi
57
+ name: virtus
57
58
  requirement: !ruby/object:Gem::Requirement
58
59
  requirements:
59
60
  - - "~>"
60
61
  - !ruby/object:Gem::Version
61
- version: '1.17'
62
+ version: 1.0.5
62
63
  type: :runtime
63
64
  prerelease: false
64
65
  version_requirements: !ruby/object:Gem::Requirement
65
66
  requirements:
66
67
  - - "~>"
67
68
  - !ruby/object:Gem::Version
68
- version: '1.17'
69
+ version: 1.0.5
69
70
  - !ruby/object:Gem::Dependency
70
- name: thread
71
+ name: bundler
71
72
  requirement: !ruby/object:Gem::Requirement
72
73
  requirements:
73
74
  - - "~>"
74
75
  - !ruby/object:Gem::Version
75
- version: '0.2'
76
- type: :runtime
76
+ version: '1.10'
77
+ type: :development
77
78
  prerelease: false
78
79
  version_requirements: !ruby/object:Gem::Requirement
79
80
  requirements:
80
81
  - - "~>"
81
82
  - !ruby/object:Gem::Version
82
- version: '0.2'
83
+ version: '1.10'
83
84
  - !ruby/object:Gem::Dependency
84
- name: ejson
85
+ name: rake
85
86
  requirement: !ruby/object:Gem::Requirement
86
87
  requirements:
87
88
  - - "~>"
88
89
  - !ruby/object:Gem::Version
89
- version: '1.0'
90
- type: :runtime
90
+ version: '10.0'
91
+ type: :development
91
92
  prerelease: false
92
93
  version_requirements: !ruby/object:Gem::Requirement
93
94
  requirements:
94
95
  - - "~>"
95
96
  - !ruby/object:Gem::Version
96
- version: '1.0'
97
+ version: '10.0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: minitest
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
97
112
  description: Syncs DataDog dashboards, alerts, screenboards, and monitors.
98
113
  email:
99
114
  - v@gor.io
115
+ - me@andremedeiros.info
100
116
  executables:
101
117
  - doggy
102
118
  extensions: []
103
119
  extra_rdoc_files: []
104
120
  files:
105
121
  - ".gitignore"
122
+ - ".travis.yml"
123
+ - CODE_OF_CONDUCT.md
106
124
  - Gemfile
107
125
  - Gemfile.lock
108
126
  - LICENSE.txt
@@ -111,31 +129,19 @@ files:
111
129
  - bin/console
112
130
  - bin/setup
113
131
  - doggy.gemspec
114
- - examples/my-monitor.rb
115
132
  - exe/doggy
116
133
  - lib/doggy.rb
117
134
  - lib/doggy/cli.rb
118
- - lib/doggy/cli/delete.rb
119
135
  - lib/doggy/cli/edit.rb
120
136
  - lib/doggy/cli/mute.rb
121
137
  - lib/doggy/cli/pull.rb
122
138
  - lib/doggy/cli/push.rb
123
- - lib/doggy/cli/sha.rb
124
139
  - lib/doggy/cli/unmute.rb
125
- - lib/doggy/cli/version.rb
126
- - lib/doggy/client.rb
127
- - lib/doggy/definition.rb
128
- - lib/doggy/dsl.rb
129
- - lib/doggy/errors.rb
130
- - lib/doggy/friendly_errors.rb
131
- - lib/doggy/model/dash.rb
132
- - lib/doggy/model/monitor.rb
133
- - lib/doggy/model/screen.rb
134
- - lib/doggy/serializer/json.rb
135
- - lib/doggy/serializer/yaml.rb
136
- - lib/doggy/shared_helpers.rb
140
+ - lib/doggy/model.rb
141
+ - lib/doggy/models/dashboard.rb
142
+ - lib/doggy/models/monitor.rb
143
+ - lib/doggy/models/screen.rb
137
144
  - lib/doggy/version.rb
138
- - lib/doggy/worker.rb
139
145
  homepage: http://github.com/bai/doggy
140
146
  licenses:
141
147
  - MIT
@@ -1,14 +0,0 @@
1
- created_at = Time.parse('2015-01-01 14:00:01').to_i * 1000
2
-
3
- query <<-QUERY
4
- sum(last_1m):sum:Engine.current_thrust.status{status:error}.as_count() < 50
5
- QUERY
6
-
7
- obj({
8
- created_at: created_at,
9
- id: 100500,
10
- message: "Houston, we have a problem @pagerduty-Houston",
11
- name: "Engine thrust",
12
- query: query,
13
- type: "query alert"
14
- })
@@ -1,21 +0,0 @@
1
- module Doggy
2
- class CLI::Delete
3
- attr_reader :options, :ids
4
-
5
- def initialize(options, ids)
6
- @options = options
7
- @ids = ids
8
- end
9
-
10
- def run
11
- begin
12
- Doggy::Dash.delete(ids)
13
- Doggy::Monitor.delete(ids)
14
- Doggy::Screen.delete(ids)
15
- rescue DoggyError
16
- puts "Delete failed."
17
- exit 1
18
- end
19
- end
20
- end
21
- end
@@ -1,12 +0,0 @@
1
- module Doggy
2
- class CLI::Sha
3
- def run
4
- begin
5
- print Doggy.current_sha
6
- rescue DoggyError
7
- puts "Could not fetch latest SHA from DataDog."
8
- exit 1
9
- end
10
- end
11
- end
12
- end
@@ -1,7 +0,0 @@
1
- module Doggy
2
- class CLI::Version
3
- def run
4
- print Doggy::VERSION
5
- end
6
- end
7
- end
@@ -1,46 +0,0 @@
1
- class Dogapi::APIService
2
- attr_reader :api_key, :application_key # as they are useless in the parent class
3
- end
4
-
5
- module Doggy
6
- class Client
7
- def api_key
8
- @api_key ||= ENV.fetch('DATADOG_API_KEY', ejson_config[:datadog_api_key])
9
- rescue => e
10
- puts "[DogSync#api_key] Exception: #{e.message}"
11
- raise
12
- end
13
-
14
- def app_key
15
- @app_key ||= ENV.fetch('DATADOG_APP_KEY', ejson_config[:datadog_app_key])
16
- rescue => e
17
- puts "[DogSync#app_key] Exception: #{e.message}"
18
- raise
19
- end
20
-
21
- def dog
22
- @dog ||= Dogapi::Client.new(api_key, app_key)
23
- end
24
-
25
- def api_service
26
- @api_service ||= Dogapi::APIService.new(api_key, app_key)
27
- end
28
-
29
- def api_service_params
30
- @api_service_params ||= { api_key: Doggy.client.api_service.api_key, application_key: Doggy.client.api_service.application_key }
31
- end
32
-
33
- private
34
-
35
- def ejson_config
36
- @ejson_config ||= begin
37
- if File.exists?('secrets.json')
38
- secrets = JSON.parse(File.read('secrets.json'))
39
- { datadog_api_key: secrets['datadog_api_key'], datadog_app_key: secrets['datadog_app_key'] }
40
- else
41
- {}
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,9 +0,0 @@
1
- module Doggy
2
- class Definition
3
- attr_reader :obj
4
-
5
- def initialize(obj)
6
- @obj = obj
7
- end
8
- end
9
- end
@@ -1,73 +0,0 @@
1
- module Doggy
2
- class Dsl
3
- def self.evaluate(object_file)
4
- builder = new
5
- builder.eval_file(object_file)
6
- builder.to_definition
7
- end
8
-
9
- def initialize
10
- @obj = {}
11
- end
12
-
13
- def eval_file(object_file, contents = nil)
14
- contents ||= File.open(object_file.to_s, "rb") { |f| f.read }
15
- instance_eval(contents, object_file.to_s, 1)
16
- rescue Exception => e
17
- message = "There was an error " \
18
- "#{e.is_a?(ObjectFileEvalError) ? "evaluating" : "parsing"} " \
19
- "`#{File.basename object_file.to_s}`: #{e.message}"
20
-
21
- raise DSLError.new(message, object_file, e.backtrace, contents)
22
- end
23
-
24
- def obj(structure)
25
- @obj = structure
26
- end
27
-
28
- # @return [Definition] the parsed object definition.
29
- def to_definition
30
- Definition.new(@obj)
31
- end
32
-
33
- def method_missing(name, *args)
34
- raise Doggy::ObjectFileError, "Undefined local variable or method `#{name}' for object file"
35
- end
36
-
37
- private
38
-
39
- class DSLError < Doggy::ObjectFileError
40
- # @return [String] the message that should be presented to the user.
41
- attr_reader :message
42
-
43
- # @return [String] the path of the dsl file that raised the exception.
44
- attr_reader :dsl_path
45
-
46
- # @return [Exception] the backtrace of the exception raised by the evaluation of the dsl file.
47
- attr_reader :backtrace
48
-
49
- # @param [Exception] backtrace @see backtrace
50
- # @param [String] dsl_path @see dsl_path
51
- def initialize(message, dsl_path, backtrace, contents = nil)
52
- @status_code = $!.respond_to?(:status_code) && $!.status_code
53
-
54
- @message = message
55
- @dsl_path = dsl_path
56
- @backtrace = backtrace
57
- @contents = contents
58
- end
59
-
60
- def status_code
61
- @status_code || super
62
- end
63
-
64
- # @return [String] the contents of the DSL that cause the exception to
65
- # be raised.
66
- def contents
67
- @contents ||= begin
68
- dsl_path && File.exist?(dsl_path) && File.read(dsl_path)
69
- end
70
- end
71
- end
72
- end
73
- end
@@ -1,12 +0,0 @@
1
- module Doggy
2
- class DoggyError < StandardError
3
- def self.status_code(code)
4
- define_method(:status_code) { code }
5
- end
6
- end
7
-
8
- class ObjectFileError < DoggyError; status_code(12); end
9
- class ObjectFileEvalError < DoggyError; status_code(11); end
10
- class InvalidOption < DoggyError; status_code(15); end
11
- class InvalidItemType < DoggyError; status_code(10); end
12
- end
@@ -1,76 +0,0 @@
1
- require 'cgi'
2
- require 'thor'
3
- require 'doggy'
4
-
5
- module Doggy
6
- def self.with_friendly_errors
7
- yield
8
- rescue Doggy::Dsl::DSLError => e
9
- puts e.message
10
- exit e.status_code
11
- rescue Doggy::DoggyError => e
12
- puts e.message
13
- puts e
14
- exit e.status_code
15
- rescue Thor::AmbiguousTaskError => e
16
- puts e.message
17
- exit 15
18
- rescue Thor::UndefinedTaskError => e
19
- puts e.message
20
- exit 15
21
- rescue Thor::Error => e
22
- puts e.message
23
- exit 1
24
- rescue Interrupt => e
25
- puts "\nQuitting..."
26
- puts e
27
- exit 1
28
- rescue SystemExit => e
29
- exit e.status
30
- rescue Exception => e
31
- request_issue_report_for(e)
32
- exit 1
33
- end
34
-
35
- def self.request_issue_report_for(e)
36
- puts <<-EOS.gsub(/^ {6}/, "")
37
- --- ERROR REPORT TEMPLATE -------------------------------------------------------
38
- - What did you do?
39
-
40
- I ran the command `#{$PROGRAM_NAME} #{ARGV.join(" ")}`
41
-
42
- - What did you expect to happen?
43
-
44
- I expected Doggy to...
45
-
46
- - What happened instead?
47
-
48
- Instead, what actually happened was...
49
-
50
-
51
- Error details
52
-
53
- #{e.class}: #{e.message}
54
- #{e.backtrace.join("\n ")}
55
-
56
- --- TEMPLATE END ----------------------------------------------------------------
57
-
58
- EOS
59
-
60
- puts "Unfortunately, an unexpected error occurred, and Doggy cannot continue."
61
-
62
- puts <<-EOS.gsub(/^ {6}/, "")
63
-
64
- First, try this link to see if there are any existing issue reports for this error:
65
- #{issues_url(e)}
66
-
67
- If there aren't any reports for this error yet, please create copy and paste the report template above into a new issue. Don't forget to anonymize any private data! The new issue form is located at:
68
- https://github.com/bai/doggy/issues/new
69
- EOS
70
- end
71
-
72
- def self.issues_url(exception)
73
- "https://github.com/bai/doggy/search?q=" \
74
- "#{CGI.escape(exception.message.lines.first.chomp)}&type=Issues"
75
- end
76
- end