uptimerobot_cmd 0.1.2 → 0.2.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
  SHA1:
3
- metadata.gz: 8947cfccf925bba284bb80334b79395f45420001
4
- data.tar.gz: 73b2cc369a4a25da56723cfa3b474d936857b5bb
3
+ metadata.gz: 02f5f7e56ee4cff14f89ab3b86186f3d476142e8
4
+ data.tar.gz: 32d053ab4394994e861aac0bc26a3fcbf7e7eab3
5
5
  SHA512:
6
- metadata.gz: f0b85944e9801a4e24287bbdc5ec1979556dc894c2bfd588552dab16d4bc2c788b53f758e5d727fa22418f762193b4eee48e033775951b4229ae5edf86cea38b
7
- data.tar.gz: 0c0077413cbfa6ea07f217a8baaf90ab6a03845a8974dea6860c176f9e4c3ad3771cc6b0a12e976468a28ebf5f70ed57c09ef145d73ca430f9a230dea6eff0dc
6
+ metadata.gz: 766f2ea20adbce5d7e2a3d5c1b1a1c29f47daa2e2813f1bca43b96c839c517032de86c6fc39c033a77afdeb2ad7146e9ea065876fec1cbf532b990c21e6ae1a2
7
+ data.tar.gz: 8f940133b8cd5bdd79e5b048e377c9ca6a86573e794cb63e2f49bee5a0760463d4c93c774099caec388b8aa9615dd3a0e4ab2dec89cf98d6eda058287b6814b2
data/README.md CHANGED
@@ -36,13 +36,38 @@ All commands:
36
36
 
37
37
  ```bash
38
38
  Commands:
39
- uptimerobot_cmd add_new_monitor --contact-id=CONTACT_ID --url=URL # Add new service for monitor
40
- uptimerobot_cmd delete_monitor --monitor-id=MONITOR_ID # Delete monitor via given monitor_id
41
- uptimerobot_cmd help [COMMAND] # Describe available commands or one specific command
42
- uptimerobot_cmd list_contacts # List current contacts for monitors
43
- uptimerobot_cmd list_monitors # List current monitors
39
+ uptimerobot_cmd add # Add new service for monitoring
40
+ uptimerobot_cmd contacts # List current contacts for monitors
41
+ uptimerobot_cmd delete # Delete monitor
42
+ uptimerobot_cmd help [COMMAND] # Describe available commands or one specific command
43
+ uptimerobot_cmd list # List current monitors
44
+ uptimerobot_cmd search NAME or URL # Search in monitored services
45
+
46
+ Options:
47
+ [--color], [--no-color]
44
48
  ```
45
49
 
50
+ ### add
51
+
52
+ You can set `UPTIMEROBOT_DEFAULT_CONTACT` environment variable for default
53
+ contact. This will help you to add more quicker. You don’t need to pass
54
+ `--contact` if you have `UPTIMEROBOT_DEFAULT_CONTACT` environment variable set.
55
+
56
+ ```bash
57
+ # without UPTIMEROBOT_DEFAULT_CONTACT
58
+ uptimerobot_cmd add http://example.com --contact=1234567
59
+ uptimerobot_cmd add http://example.com --name=Example --contact=1234567
60
+ uptimerobot_cmd add http://example.com --name="Example Website" --contact=1234567
61
+
62
+ # with UPTIMEROBOT_DEFAULT_CONTACT
63
+ uptimerobot_cmd add http://example.com
64
+ uptimerobot_cmd add http://example.com --name=Example
65
+ uptimerobot_cmd add http://example.com --name="Example Website"
66
+ ```
67
+
68
+ Will be more features for **add** soon!
69
+
70
+
46
71
  ## Development
47
72
 
48
73
  After checking out the repo, run `bin/setup` to install dependencies. Then,
@@ -65,10 +90,6 @@ bundle exec rake TEST=test/private_test.rb
65
90
  Due to Security and Privacy, most of the test cases are private. You can find
66
91
  example private tests under `test/` folder.
67
92
 
68
- ## TODO
69
-
70
- - `add_new_monitor` will have more options/features...
71
-
72
93
  ## Contributing
73
94
 
74
95
  Bug reports and pull requests are welcome on GitHub at
@@ -1,5 +1,4 @@
1
1
  require 'uptimerobot_cmd/version'
2
- require 'colorize'
3
2
  require 'httparty'
4
3
  require 'terminal-table'
5
4
 
@@ -24,17 +23,18 @@ module UptimerobotCmd
24
23
  def self.human_readable_status(status_code)
25
24
  case status_code
26
25
  when '0'
27
- ['paused', :light_black]
26
+ ['paused', :black]
28
27
  when '1'
29
28
  ['not checked yet', :black]
30
29
  when '2'
31
30
  ['up', :yellow]
32
31
  when '8'
33
- ['seems down', :light_red]
32
+ ['seems down', :red]
34
33
  when '9'
35
34
  ['down', :red]
36
35
  end
37
36
  end
37
+
38
38
  def self.apikey_defined
39
39
  raise ::UptimerobotCmd::APIKEYError, "Please set UPTIMEROBOT_APIKEY environment variable." unless ENV['UPTIMEROBOT_APIKEY']
40
40
  true
@@ -54,53 +54,20 @@ module UptimerobotCmd
54
54
  end
55
55
  end
56
56
 
57
- def self.get_alert_contacts
57
+ def self.search_in_monitors(input)
58
58
  if ::UptimerobotCmd.apikey_defined
59
- response = HTTParty.get(::UptimerobotCmd.build_service_url(:get_alert_contacts))
60
- response["alertcontacts"]["alertcontact"]
61
- end
62
- end
63
-
64
- def self.list_alert_contacts
65
- if ::UptimerobotCmd.apikey_defined
66
- contacts = ::UptimerobotCmd.get_alert_contacts
67
- rows = []
68
- table_title = 'Listing %d contact(s)' % contacts.count
69
- table_title = table_title.colorize(:yellow) if ENV['UPTIMEROBOT_COLORIZE']
70
- contacts.each do |contact|
71
- contact_id = contact['id']
72
- contact_id = contact_id.colorize(:green) if ENV['UPTIMEROBOT_COLORIZE']
73
- contact_info = contact['value']
74
- contact_info = contact_info.colorize(:light_green) if ENV['UPTIMEROBOT_COLORIZE']
75
- rows << [contact_id, contact_info]
76
- end
77
- Terminal::Table.new :headings => ['ID', 'Info'],
78
- :rows => rows,
79
- :title => table_title
59
+ monitors = ::UptimerobotCmd.get_monitors
60
+ monitors.select{|monitor|
61
+ monitor['friendlyname'] =~ /#{input}/i ||
62
+ monitor['url'] =~ /#{input}/i
63
+ }
80
64
  end
81
65
  end
82
66
 
83
- def self.get_list_monitors
67
+ def self.get_alert_contacts
84
68
  if ::UptimerobotCmd.apikey_defined
85
- monitors = ::UptimerobotCmd.get_monitors
86
- table_title = 'Monitoring %d site(s)' % monitors.count
87
- table_title = table_title.colorize(:yellow) if ENV['UPTIMEROBOT_COLORIZE']
88
- rows = []
89
- monitors.each do |monitor|
90
- monitor_id = monitor['id']
91
- monitor_id = monitor_id.colorize(:green) if ENV['UPTIMEROBOT_COLORIZE']
92
- status_data = ::UptimerobotCmd.human_readable_status(monitor['status'])
93
- status = status_data[0]
94
- status = status_data[0].colorize(status_data[1]) if ENV['UPTIMEROBOT_COLORIZE']
95
- friendly_name = monitor['friendlyname']
96
- friendly_name = friendly_name.colorize(:light_white) if ENV['UPTIMEROBOT_COLORIZE']
97
- url = monitor['url']
98
- url = url.colorize(:default) if ENV['UPTIMEROBOT_COLORIZE']
99
- rows << [monitor_id, status, friendly_name, url]
100
- end
101
- Terminal::Table.new :headings => ['ID', 'Status', 'Name', 'Url'],
102
- :rows => rows,
103
- :title => table_title
69
+ response = HTTParty.get(::UptimerobotCmd.build_service_url(:get_alert_contacts))
70
+ response["alertcontacts"]["alertcontact"]
104
71
  end
105
72
  end
106
73
 
@@ -1,92 +1,159 @@
1
1
  require 'thor'
2
2
  require 'uptimerobot_cmd'
3
+ require 'uri'
3
4
 
4
5
  module UptimerobotCmd
5
6
  class CLI < Thor
7
+ class_option :color, :type => :boolean
6
8
 
7
- option :color, :type => :boolean
8
- desc "list_monitors", "List current monitors"
9
+ desc "list", "List current monitors"
9
10
  long_desc <<-LONGDESC
10
- `uptimerobot_cmd list_monitors` will print out all available monitors
11
- with ID/Status/Name/URL format. Use `--color` option for colorized
12
- output.
13
-
14
- \x5
15
- \x5> uptimerobot_cmd list_monitors
16
- \x5> uptimerobot_cmd list_monitors --color
11
+ List current monitored services.\n
12
+
13
+ $ uptimerobot_cmd list\n
14
+ $ uptimerobot_cmd list --color
17
15
  LONGDESC
18
- def list_monitors
16
+ def list
19
17
  ENV['UPTIMEROBOT_COLORIZE'] = '1' if options[:color]
20
- puts UptimerobotCmd.get_list_monitors
18
+ monitors = UptimerobotCmd.get_monitors
19
+ table_title = 'Monitoring %d site(s)' % monitors.count
20
+ puts print_monitors(monitors, table_title)
21
21
  end
22
22
 
23
- option :color, :type => :boolean
24
- desc "list_contacts", "List current contacts for monitors"
23
+ desc "contacts", "List current contacts for monitors"
25
24
  long_desc <<-LONGDESC
26
- `uptimerobot_cmd list_contacts` will print out all available contacts
27
- for monitors. Use `--color` option for colorized
28
- \x5
29
- \x5> uptimerobot_cmd list_contacts
30
- \x5> uptimerobot_cmd list_contacts --color
25
+ List available contact information.\n
26
+
27
+ $ uptimerobot_cmd contacts\n
28
+ $ uptimerobot_cmd contacts --color
31
29
  LONGDESC
32
- def list_contacts
30
+ def contacts
33
31
  ENV['UPTIMEROBOT_COLORIZE'] = '1' if options[:color]
34
- puts UptimerobotCmd.list_alert_contacts
32
+ contacts = UptimerobotCmd.get_alert_contacts
33
+ table_title = 'Listing %d contact(s)' % contacts.count
34
+ puts print_contacts(contacts, table_title)
35
35
  end
36
36
 
37
- option :url, :required => true
38
- option :contact_id
39
- option :name
40
- desc "add_new_monitor", "Add new service for monitor"
37
+ option :contact, :banner => "<contact_id>"
38
+ option :name, :banner => "<friendly name>"
39
+ desc "add", "Add new service for monitoring"
41
40
  long_desc <<-LONGDESC
42
- `uptimerobot_cmd add_new_monitor` will add new site for monitoring.
43
- Required options are: `--url`, `--contact-id`. You can get your
44
- desired CONTACT ID via `uptimerobot_cmd list_contacts` first column is the ID.
45
- `--name` is optional. It's the friendly name...
41
+ You need to provide `--contact` option or must set `UPTIMEROBOT_DEFAULT_CONTACT`
42
+ environment variable.
43
+
44
+ $ uptimerobot_cmd add http://example.com --contact=1234567\n
45
+ $ uptimerobot_cmd add http://example.com --name=Example --contact=1234567\n
46
+ $ uptimerobot_cmd add http://example.com --name="Example Website" --contact=1234567
46
47
  LONGDESC
47
- def add_new_monitor
48
+ def add(url)
49
+ ENV['UPTIMEROBOT_COLORIZE'] = '1' if options[:color]
50
+
48
51
  my_options = {}
49
- my_options[:monitor_url] = options[:url]
50
- if ENV['UPTIMEROBOT_DEFAULT_CONTACT']
51
- my_options[:contact_id] = ENV['UPTIMEROBOT_DEFAULT_CONTACT']
52
- else
53
- my_options[:contact_id] = options[:contact_id] if options[:contact_id]
52
+ my_options[:monitor_url] = url if url =~ /\A#{URI::regexp}\z/
53
+ unless my_options[:monitor_url]
54
+ puts "Please enter valid url. Example: http://example.com or https://example.com"
55
+ exit
54
56
  end
55
-
57
+ my_options[:contact_id] = options[:contact] || ENV['UPTIMEROBOT_DEFAULT_CONTACT'] || nil
56
58
  unless my_options[:contact_id]
57
- puts "Please provice --contact-id or set UPTIMEROBOT_DEFAULT_CONTACT environment variable"
59
+ puts "Please set contact or set UPTIMEROBOT_DEFAULT_CONTACT environment variable"
58
60
  exit
59
61
  end
60
-
61
62
  my_options[:friendly_name] = options[:name] if options[:name]
62
- begin
63
- response = UptimerobotCmd.add_new_monitor(my_options)
64
- if response[0] == 200 and response[1] == "ok"
65
- message = "#{my_options[:monitor_url]} has been added."
66
- else
67
- message = "Error. Response code: #{response[0]}, status: #{response[1]}"
63
+
64
+ duplicate_entries = UptimerobotCmd.search_in_monitors(url)
65
+ if duplicate_entries.count > 0
66
+ table_title = 'Found duplicate %d monitor(s)' % duplicate_entries.count
67
+ puts print_monitors(duplicate_entries, table_title)
68
+ exit
69
+ else
70
+ begin
71
+ response = UptimerobotCmd.add_new_monitor(my_options)
72
+ if response[0] == 200 and response[1] == "ok"
73
+ message = "#{my_options[:monitor_url]} has been added."
74
+ else
75
+ message = "Error. Response code: #{response[0]}, status: #{response[1]}"
76
+ end
77
+ puts message
78
+ rescue UptimerobotCmd::OptionsError => e
79
+ puts e
68
80
  end
69
- puts message
70
- rescue UptimerobotCmd::OptionsError => e
71
- puts e
72
81
  end
73
82
  end
74
83
 
75
- option :monitor_id, :required => true
76
- desc "delete_monitor", "Delete monitor via given monitor_id"
77
- def delete_monitor
78
- my_options = {}
79
- my_options[:monitor_id] = options[:monitor_id]
80
- begin
81
- response = UptimerobotCmd.delete_monitor(my_options)
84
+ desc "delete", "Delete monitor"
85
+ def delete(input)
86
+ ENV['UPTIMEROBOT_COLORIZE'] = '1' if options[:color]
87
+ search = UptimerobotCmd.search_in_monitors(input)
88
+ delete_id = nil
89
+ if search.count > 1
90
+ puts print_monitors(search, 'Found %d monitor(s)' % search.count)
91
+ ask_delete_id = ask("Please enter ID number:").to_i
92
+ delete_id = ask_delete_id if ask_delete_id > 0
93
+ else
94
+ ask_user = "You are going to delete %{name} [%{url}]" % {
95
+ name: search.first['friendlyname'],
96
+ url: search.first['url'],
97
+ }
98
+ result = ask(ask_user, :limited_to => ['y', 'n'])
99
+ delete_id = search.first['id'] if result == 'y'
100
+ end
101
+
102
+ if delete_id
103
+ response = UptimerobotCmd.delete_monitor(monitor_id: delete_id)
82
104
  if response[0] == 200 and response[1] == "ok"
83
- message = "Site has been deleted."
105
+ message = "Site has been deleted."
84
106
  else
85
107
  message = "Error. Response code: #{response[0]}, status: #{response[1]}"
86
108
  end
87
109
  puts message
88
- rescue UptimerobotCmd::OptionsError => e
89
- puts e
110
+ else
111
+ puts "Delete canceled..."
112
+ end
113
+ end
114
+
115
+ desc "search NAME or URL", "Search in monitored services"
116
+ def search(input)
117
+ ENV['UPTIMEROBOT_COLORIZE'] = '1' if options[:color]
118
+ results = UptimerobotCmd.search_in_monitors(input)
119
+ table_title = 'Found %d monitor(s)' % results.count
120
+ puts print_monitors(results, table_title)
121
+ end
122
+
123
+ no_commands do
124
+ def print_contacts(contacts, table_title)
125
+ table_title = set_color(table_title, :yellow) if ENV['UPTIMEROBOT_COLORIZE']
126
+ rows = []
127
+ contacts.each do |contact|
128
+ contact_id = contact['id']
129
+ contact_id = set_color(contact_id, :green) if ENV['UPTIMEROBOT_COLORIZE']
130
+ contact_info = contact['value']
131
+ contact_info = set_color(contact_info, :white) if ENV['UPTIMEROBOT_COLORIZE']
132
+ rows << [contact_id, contact_info]
133
+ end
134
+ Terminal::Table.new :headings => ['ID', 'Info'],
135
+ :rows => rows,
136
+ :title => table_title
137
+ end
138
+
139
+ def print_monitors(monitors, table_title)
140
+ table_title = set_color(table_title, :yellow) if ENV['UPTIMEROBOT_COLORIZE']
141
+ rows = []
142
+ monitors.each do |monitor|
143
+ monitor_id = monitor['id']
144
+ monitor_id = set_color(monitor_id, :green) if ENV['UPTIMEROBOT_COLORIZE']
145
+ status_data = ::UptimerobotCmd.human_readable_status(monitor['status'])
146
+ status = status_data[0]
147
+ status = set_color(status, status_data[1], :bold) if ENV['UPTIMEROBOT_COLORIZE']
148
+ friendly_name = monitor['friendlyname']
149
+ friendly_name = set_color(friendly_name, :white) if ENV['UPTIMEROBOT_COLORIZE']
150
+ url = monitor['url']
151
+ url = set_color(url, :cyan) if ENV['UPTIMEROBOT_COLORIZE']
152
+ rows << [monitor_id, status, friendly_name, url]
153
+ end
154
+ Terminal::Table.new :headings => ['ID', 'Status', 'Name', 'Url'],
155
+ :rows => rows,
156
+ :title => table_title
90
157
  end
91
158
  end
92
159
 
@@ -1,3 +1,3 @@
1
1
  module UptimerobotCmd
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -25,7 +25,6 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency 'minitest-reporters', '~> 1.1', '>= 1.1.10'
26
26
 
27
27
  spec.add_runtime_dependency 'httparty', '~> 0.13.7'
28
- spec.add_runtime_dependency 'colorize', '~> 0.8.1'
29
28
  spec.add_runtime_dependency 'terminal-table', '~> 1.6'
30
29
  spec.add_runtime_dependency 'thor', '~> 0.19.1'
31
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uptimerobot_cmd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uğur Özyılmazel
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-22 00:00:00.000000000 Z
11
+ date: 2016-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -86,20 +86,6 @@ dependencies:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
88
  version: 0.13.7
89
- - !ruby/object:Gem::Dependency
90
- name: colorize
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: 0.8.1
96
- type: :runtime
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: 0.8.1
103
89
  - !ruby/object:Gem::Dependency
104
90
  name: terminal-table
105
91
  requirement: !ruby/object:Gem::Requirement