uptime_monitor 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -2,7 +2,208 @@ uptime_monitor (Hercules)
2
2
  ==========================
3
3
  [![Build Status](https://travis-ci.org/obi-a/uptime_monitor.png?branch=master)](https://travis-ci.org/obi-a/uptime_monitor)
4
4
 
5
- Using a real web browser, this plugin checks pages of a website at the specified time intervals, to ensure that the specified elements of the pages and features of the site are still working correctly.
5
+ Uptime_monitor is a [ragios](https://github.com/obi-a/ragios) plugin that uses a real web browser to perform transactions on a website to ensure that features of the site are still working correctly. It can check elements of a webpage to ensure they still exist and it can also perform transactions like a website login to ensure that the process still works correctly.
6
+
7
+ ##Requirements
8
+ [Ragios](https://github.com/obi-a/ragios)
9
+
10
+ ##Installation:
11
+ Add the uptime_monitor gem to your ragios Gemfile
12
+ ```ruby
13
+ gem "uptime_monitor"
14
+ ```
15
+ Run bundle install from the ragios root directory
16
+ ```
17
+ bundle install
18
+ ```
19
+ Restart ragios
20
+
21
+ ##usage:
22
+ A quick example, to monitor the title tag of a web page to ensure that it hasn't changed. Using [Ragios ruby client](http://www.whisperservers.com/ragios/ragios-saint-ruby/using-ragios)
23
+ ````ruby
24
+ monitor = {monitor: "My Blog title tag",
25
+ url: "http://obi-akubue.org",
26
+ every: "5m",
27
+ contact: "admin@obiora.com",
28
+ via: "gmail_notifier",
29
+ plugin: "uptime_monitor",
30
+ exists?: [
31
+ [:title, [text: "Obi Akubue"]]
32
+ ],
33
+ browser: ["firefox"]
34
+ }
35
+ ragios.add [monitor]
36
+ ```
37
+ The above example will create a ragios monitor that will, every 5 minutes, use firefox to visit the website url http://obi-akubue.org, and verify that the title tag on the page matches the text "Obi Akubue".
38
+
39
+ ###Using the plugin
40
+ To use the uptime monitor plugin add the key/value pair to the monitor
41
+ ```ruby
42
+ plugin: "uptime_monitor"
43
+ ```
44
+
45
+ ###Browsers
46
+ The browser to use is specified, by adding a browser key/value pair to the monitor
47
+ ```ruby
48
+ browser: ["firefox"]
49
+ ```
50
+ Supported browsers include Firefox, Chrome, Safari and Phantomjs. Other browsers can be specified as
51
+ ```ruby
52
+ browser: ["chrome"]
53
+ browser: ["safari"]
54
+ browser: ["phantomjs"]
55
+ ```
56
+ uptime_monitor uses [Watir Webdriver](http://watirwebdriver.com), firefox runs out of the box with no configuration requried. To use Chrome or Safari see the Watir Webdriver documentation on downloading the appropriate driver binary and configuration.
57
+
58
+ By default, the browsers don't run headless, to run the browser headless, you can specify it in the format below:
59
+ ```ruby
60
+ browser: ["firefox", headless: true]
61
+ ```
62
+ This will run firefox as a headless browser. You should have [Xvfb](https://en.wikipedia.org/wiki/Xvfb) installed to run a non-headless browsers as headless. Headless browsers like Phantomjs don't require Xvfb.
63
+
64
+ You can also specify headless as false
65
+ ```ruby
66
+ browser: ["firefox", headless: false]
67
+ ```
68
+ The above example will run firefox as a non-headless browser.
69
+
70
+ ###Validations
71
+ To verify that a html element exists on the web page, a validation needs to be added to the monitor. Validations are specified with the exists? key/value pair which takes an array of html elements as it's value. It verifies that the html elements in the array exists on the current web page.
72
+ ```ruby
73
+ exists?: [
74
+ [:h1]
75
+ [:div]
76
+ ]
77
+ ```
78
+ The above example will verify that an h1 and a div exists on the page.
79
+
80
+ ####HTML Elements
81
+ The simplest way to specify a html element is using a symbol.
82
+ ```ruby
83
+ exists?: [
84
+ [:h1]
85
+ [:div]
86
+ [:a]
87
+ [:img]
88
+ [:span]
89
+ ]
90
+ ```
91
+ HTML elements can also be specified as a hash with their name as key and attributes as value.
92
+ ```ruby
93
+ exists?: [
94
+ [div: {class: "box_content"}]
95
+ ]
96
+ ```
97
+ The above will verify that a div with class "box_content" exists on the page.
98
+
99
+ Other examples:
100
+ ```ruby
101
+ [img: {src: "https://fc03.deviantart.net/fs14/f/2007/047/f/2/Street_Addiction_by_gizmodus.jpg"}]
102
+
103
+ ```
104
+ Specifies an img tag with src="https://fc03.deviantart.net/fs14/f/2007/047/f/2/Street_Addiction_by_gizmodus.jpg".
105
+
106
+ ```ruby
107
+ [div: {id:"test", class: "test-section"}]
108
+ ```
109
+ Specifes a div with id="test" and class="test-section".
110
+
111
+ ####Standard attributes
112
+
113
+ Only standard attributes for an element can be included in the hash, for example a div can only include all or any of the following attributes id, class, lang, dir, title, align, onclick, ondblclick, onmousedown, onmouseup, onmouseover, onmousemove, onmouseout, onkeypress, onkeydown, onkeyup.
114
+
115
+ Custom or data attributes cannot be included, for example to specify a div by data attributes, for example
116
+ ```html
117
+ <div data-brand="toyota">
118
+ ```
119
+ The following
120
+ ```ruby
121
+ [div: {"data-brand" => "toyota"}]
122
+ ```
123
+ will give an error because "data-brand" is not a standard attibute for div, to specify elements by data or custom attributes use css selectors, see below.
124
+
125
+
126
+ ####Using CSS Selectors
127
+ HTML elements can also be specified with css selectors.
128
+ ```ruby
129
+ [element: {css: '#rss-link'}]
130
+ ```
131
+ This specifies an element with id="rss-link".
132
+
133
+ To specify an element by data attributes
134
+ ```ruby
135
+ [element: {css: '[data-brand="toyota"]'}]
136
+ ```
137
+
138
+ ####Helpers for HTML elements
139
+ Helpers are available to make some elements easier to reason about:
140
+
141
+ #####Links
142
+ An anchor tag could be specified by a link, this makes it more readable and easier to reason about
143
+ Using the anchor tag
144
+ ```ruby
145
+ [a: {text: "Click Here"}]
146
+ ```
147
+
148
+ More readble using helper
149
+ ```ruby
150
+ [link: {text: "Click Here"}]
151
+ ```
152
+
153
+ ```ruby
154
+ [link: {href: "https://www.southmunn.com/aboutus"}]
155
+ ```
156
+
157
+ #####Buttons
158
+ ```ruby
159
+ [button: {id: "searchsubmit"}]
160
+ ```
161
+
162
+ #####Text Fields
163
+ ```ruby
164
+ [text_field: {id: "search"}]
165
+ ```
166
+
167
+ More readable than the input tag
168
+ ```ruby
169
+ [input: {id: "search", type: "text"}]
170
+ ```
171
+
172
+ #####Checkbox
173
+ ```ruby
174
+ [checkbox: {value: "Butter"}]
175
+ ```
176
+ #####Radio Buttons
177
+ ```ruby
178
+ [radio: {name: "group1", value: "Milk"}]
179
+ ```
180
+
181
+ ######Drop Down menus
182
+ ```html
183
+ <select name="mydropdown">
184
+ <option value="Milk">Fresh Milk</option>
185
+ <option value="Cheese">Old Cheese</option>
186
+ <option value="Bread">Hot Bread</option>
187
+ </select>
188
+ ```
189
+ Helper
190
+ ```ruby
191
+ [select_list: {name: "mydropdown"}]
192
+ ```
193
+
194
+ Or HTML select tag
195
+ ```ruby
196
+ [select: {name: "mydropdown"}]
197
+ ```
198
+
199
+ Options of the drop-down menu can be specified using option
200
+ ```ruby
201
+ [option: {value: "Milk"}]
202
+ ```
203
+
204
+ ####Text Validations
205
+
206
+ ... more documentation coming soon
6
207
 
7
208
  ##Specification:
8
209
 
@@ -95,16 +296,4 @@ u.test_result
95
296
  # :does_not_exist_as_expected}
96
297
  </pre>
97
298
 
98
- ###Supported browsers:
99
- Firefox, Chrome, Safari, Phantomjs
100
-
101
- ### Browser Format:
102
- <pre lang="ruby">
103
- browser: ["firefox", headless: true]
104
- browser: ["firefox", headless: false]
105
- browser: ["firefox"]
106
- browser: ["chrome"]
107
- </pre>
108
- Running a browser headless requires xvfb installed.
109
-
110
299
  ###More details coming soon
data/Rakefile CHANGED
@@ -18,7 +18,7 @@ Jeweler::Tasks.new do |gem|
18
18
  gem.homepage = "http://github.com/obi-a/uptime_monitor"
19
19
  gem.license = "MIT"
20
20
  gem.summary = %Q{Real browser website uptime monitoring plugin for Ragios}
21
- gem.description = %Q{Uses a real web browser to monitor a web app for uptime}
21
+ gem.description = %Q{A Ragios plugin that uses a real web browser to monitor transactions on a website for availability}
22
22
  gem.email = "obioraakubue@yahoo.com"
23
23
  gem.authors = ["obi-a"]
24
24
  # dependencies defined in Gemfile
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.4
@@ -22,7 +22,7 @@ module Hercules
22
22
  begin
23
23
  first_exists = element.exists?
24
24
  rescue Exception => e
25
- message = "Cannot find page element in this form: #{page_element.first.inspect}, you may use a css query form"
25
+ message = "Cannot find page element in this form: #{page_element.first.inspect}, you may use a css selector form"
26
26
  raise(Hercules::UptimeMonitor::UnknownPageElement.new(error: message), message)
27
27
  end
28
28
  if first_exists && !rest(page_element).empty?
@@ -32,7 +32,8 @@ module Hercules
32
32
  end
33
33
  end
34
34
  def get_element(first)
35
- if first.is_a? Symbol
35
+ if (first.is_a? Symbol) || (first.is_a? String)
36
+ first.to_sym
36
37
  @browser.send(first)
37
38
  elsif first.is_a? Hash
38
39
  key, value = first.first
data/spec/browser_spec.rb CHANGED
@@ -127,8 +127,12 @@ describe Hercules::UptimeMonitor::Browser do
127
127
  element = @browser.get_element({element: {css: '#rss-link'}})
128
128
  element.exists?.should == true
129
129
  end
130
+ it "can check if an element in string form exists" do
131
+ element = @browser.get_element("title")
132
+ element.exists?.should == true
133
+ end
130
134
  it "cannot check if an element exists if element has incorrect form" do
131
- expect{@browser.get_element("something_else")}.to raise_error(Hercules::UptimeMonitor::InvalidPageElement)
135
+ expect{@browser.get_element(1)}.to raise_error(Hercules::UptimeMonitor::InvalidPageElement)
132
136
  end
133
137
  it "can check if a symbol form page element exists" do
134
138
  @browser.page_element_exists?([:title]).should == true
@@ -5,12 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "uptime_monitor"
8
- s.version = "0.0.2"
8
+ s.version = "0.0.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["obi-a"]
12
- s.date = "2014-03-29"
13
- s.description = "Uses a real web browser to monitor a web app for uptime"
12
+ s.date = "2014-04-06"
13
+ s.description = "A Ragios plugin that uses a real web browser to monitor transactions on a website for availability"
14
14
  s.email = "obioraakubue@yahoo.com"
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uptime_monitor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-03-29 00:00:00.000000000 Z
12
+ date: 2014-04-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: headless
@@ -155,7 +155,8 @@ dependencies:
155
155
  - - ! '>='
156
156
  - !ruby/object:Gem::Version
157
157
  version: '0'
158
- description: Uses a real web browser to monitor a web app for uptime
158
+ description: A Ragios plugin that uses a real web browser to monitor transactions
159
+ on a website for availability
159
160
  email: obioraakubue@yahoo.com
160
161
  executables: []
161
162
  extensions: []
@@ -195,7 +196,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
195
196
  version: '0'
196
197
  segments:
197
198
  - 0
198
- hash: 1288937127654970223
199
+ hash: 660930515595020497
199
200
  required_rubygems_version: !ruby/object:Gem::Requirement
200
201
  none: false
201
202
  requirements: