ping-my-site 0.0.2

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: 33f3e581efc5cf1ac95fde19e698ca1e5548dfa7
4
+ data.tar.gz: f40a0044ef2567824d7ddf4be94d2ba0aa9e1d8d
5
+ SHA512:
6
+ metadata.gz: 0bf1d58c5da7a04259a570a1bdedd1e0e1d6c46d99b96e8e1147bd79df779db044ce607e9c9cbf547b56175fa8aede13a0cd30acdfa991f0ec4cab2bebf2bec0
7
+ data.tar.gz: 15e3d017ae2c2c3577fdf335e8e61b133f6697d6706b836ecf442e866b5d8316bea8331e536581ebabcefeae7c6b8e898ef09e38ff380bc7c87bd448b2865700
data/.env_schema ADDED
@@ -0,0 +1 @@
1
+ SLACK_WEBHOOK_URL:
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ .env
data/.rvmrc ADDED
@@ -0,0 +1,2 @@
1
+ rvm use 2.2.0@ping-my-site --create
2
+ rvm_trust_rvmrcs_flag=1
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'dotenv-schema', '~> 0.0.1'
4
+ gem 'thor', '~> 0.19.1'
5
+ gem 'curb', '~> 0.9.0'
6
+ gem 'slack-notifier', '~> 1.5', '>= 1.5.1'
7
+
8
+ gem 'rspec'
data/Gemfile.lock ADDED
@@ -0,0 +1,33 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ curb (0.9.0)
5
+ diff-lcs (1.2.5)
6
+ dotenv (2.0.2)
7
+ dotenv-schema (0.0.1)
8
+ dotenv
9
+ rspec (3.4.0)
10
+ rspec-core (~> 3.4.0)
11
+ rspec-expectations (~> 3.4.0)
12
+ rspec-mocks (~> 3.4.0)
13
+ rspec-core (3.4.1)
14
+ rspec-support (~> 3.4.0)
15
+ rspec-expectations (3.4.0)
16
+ diff-lcs (>= 1.2.0, < 2.0)
17
+ rspec-support (~> 3.4.0)
18
+ rspec-mocks (3.4.0)
19
+ diff-lcs (>= 1.2.0, < 2.0)
20
+ rspec-support (~> 3.4.0)
21
+ rspec-support (3.4.1)
22
+ slack-notifier (1.5.1)
23
+ thor (0.19.1)
24
+
25
+ PLATFORMS
26
+ ruby
27
+
28
+ DEPENDENCIES
29
+ curb (~> 0.9.0)
30
+ dotenv-schema (~> 0.0.1)
31
+ rspec
32
+ slack-notifier (~> 1.5, >= 1.5.1)
33
+ thor (~> 0.19.1)
data/README.md ADDED
@@ -0,0 +1,59 @@
1
+ # Ping My Site
2
+
3
+ A simple CLI Pingdom-like written in ruby.
4
+
5
+ ## How to use
6
+
7
+ ### Git clone
8
+
9
+ > git clone https://github.com/cedricbousmanne/PingMySite.git
10
+
11
+ ### Install required Gem
12
+
13
+ > bundle
14
+
15
+ ### dotenv (.env)
16
+
17
+ Copy the ```.env_schema```file to ```.env```and fill it.
18
+ > cp .env_schema .env
19
+
20
+ ### Run
21
+
22
+ > bin/ping-my-site ping http://google.com --expected-status-code 200 --follow-location false
23
+
24
+ ### Options
25
+
26
+ * ```--expected-status-code XXX``` : define the expected HTTP status code (default: ```200```)
27
+ * ```--follow-location true```: allow CURL to follow HTTP redirection (default: false)
28
+
29
+ ## Usecase
30
+
31
+ ### Test HTTP status
32
+
33
+ > bin/ping-my-site ping http://google.com --expected-status-code 200
34
+
35
+ ### Test HTTP redirection
36
+
37
+ > bin/ping-my-site ping http://mysite.be --expected-status-code 301 --follow-location false --expected-redirect-url http://www.mysite.be
38
+
39
+ ## Troubleshooting
40
+
41
+ ### Dotenv::Schema::ValidationError
42
+
43
+ Something is missing in your ```.env```file. Compare it to ```.env_schema```and be sure every constant is defined.
44
+
45
+ ## Use with crontab
46
+
47
+ > * * * * * /bin/bash -l -c 'cd /path/to/ping-my-site/ && bundle exec bin/ping-my-site ping http://www.6x7asbl.be --expected-status-code 200 --follow-location false'
48
+
49
+ ## Technologies
50
+
51
+ * [Dotenv Schema](https://github.com/mirakui/dotenv-schema)
52
+ * [Thor](http://whatisthor.com/)
53
+ * [Curb](https://github.com/taf2/curb)
54
+ * [Slack-Notifier](https://github.com/stevenosloan/slack-notifier)
55
+
56
+ ## Foot Note
57
+
58
+ Coded with &#9829;, [Ruby](https://www.ruby-lang.org/) and [Vim](http://www.vim.org/). Made in Belgium.
59
+
data/bin/ping-my-site ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift File.expand_path('../../lib', __FILE__)
4
+
5
+ require 'rubygems' unless defined? Gem
6
+ require 'ping-my-site'
7
+
8
+ Dotenv.load
9
+
10
+ PingMySite::Cli.start(ARGV)
data/lib/notifier.rb ADDED
@@ -0,0 +1,26 @@
1
+ class Notifier
2
+
3
+ def initialize(message)
4
+ @message = message
5
+ end
6
+
7
+ def notifier
8
+ @notifier ||= Slack::Notifier.new ENV['SLACK_WEBHOOK_URL']
9
+ @notifier.username = "Ping My Site"
10
+ @notifier
11
+ end
12
+
13
+ def perform
14
+ unless $TESTING
15
+ notification = notifier.ping(@message)
16
+
17
+ if notification.response.code.to_i == 200
18
+ puts "Successfully notified to Slack"
19
+ else
20
+ puts "Something went wrong when trying to notify Slack"
21
+ end
22
+ else
23
+ return "Successfully notified to Slack"
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,28 @@
1
+ #require "ping-my-site/version"
2
+ require "dotenv-schema"
3
+ require "thor"
4
+ require "curb"
5
+ require "slack-notifier"
6
+ require "notifier"
7
+ require "pinger"
8
+
9
+ $TESTING = false
10
+
11
+ module PingMySite
12
+ class Cli < Thor
13
+ option :follow_location, type: :boolean, default: false, desc: "Allow CURL to follow HTTP redirection"
14
+ option :expected_status_code, type: :numeric, default: 200, desc: "A valid HTTP status code"
15
+ option :expected_redirect_url, type: :string, desc: "A valid redirection url"
16
+
17
+ desc "ping URL", "ping to URL"
18
+ def ping(url)
19
+ pinger = Pinger.new
20
+ pinger.url = url
21
+ pinger.expected_status_code = options[:expected_status_code]
22
+ pinger.expected_redirect_url = options[:expected_redirect_url]
23
+ pinger.follow_location = options[:follow_location]
24
+ pinger.perform
25
+ end
26
+
27
+ end
28
+ end
data/lib/pinger.rb ADDED
@@ -0,0 +1,45 @@
1
+ class Pinger
2
+
3
+ attr_accessor :url,
4
+ :expected_status_code,
5
+ :expected_redirect_url,
6
+ :follow_location
7
+
8
+ def perform
9
+ if response_code.to_i == @expected_status_code
10
+ # Everything's fine
11
+ puts "Sucessfully ping #{url} with expected status code #{@expected_status_code}"
12
+ if @expected_status_code == 301 and @expected_redirect_url
13
+ if redirect_url == @expected_redirect_url
14
+ # Everything's fine
15
+ puts "Sucessfully redirect #{url} to #{@expected_redirect_url} with status #{response_code}"
16
+ else
17
+ message = "Unable to redirect #{url} to #{@expected_redirect_url} with expected status code #{@expected_status_code} - Received location #{redirect_url} with #{response_code} instead"
18
+ puts "Something went wrong, we must notify someone"
19
+ Notifier.new(message).perform
20
+ end
21
+ end
22
+ else
23
+ message = "Unable to ping #{url} with expected status code #{@expected_status_code} - Received #{response_code} instead"
24
+ puts "Something went wrong, we must notify someone"
25
+ Notifier.new(message).perform
26
+ end
27
+ end
28
+
29
+
30
+ def response_code
31
+ request.response_code
32
+ end
33
+
34
+ def redirect_url
35
+ request.redirect_url
36
+ end
37
+
38
+ def request
39
+ @request ||= Curl::Easy.new(@url) do |curl|
40
+ curl.follow_location = @follow_location
41
+ end
42
+ @request.perform
43
+ @request
44
+ end
45
+ end
@@ -0,0 +1,21 @@
1
+ require './lib/ping-my-site'
2
+ $TESTING = true # Override $TESTING - this line must stay below the ```require '.lib/ping-my-site'``
3
+
4
+ describe PingMySite do
5
+
6
+ let(:shell){ Thor::Base.shell.new }
7
+
8
+ describe "output" do
9
+ # Dummy test
10
+ specify { expect { print('foo') }.to output('foo').to_stdout }
11
+
12
+ # HTTP 200 successful test
13
+ specify { expect { PingMySite.start(%w[ping http://www.greenlab-coworking.com], shell: shell) }.to output("Sucessfully ping http://www.greenlab-coworking.com with expected status code 200\n").to_stdout }
14
+
15
+ # HTTP 404 unsuccessful test
16
+ specify { expect { PingMySite.start(%w[ping http://www.greenlab-coworking.com --expected-status-code 404], shell: shell) }.to output("Something went wrong, we must notify someone\n").to_stdout }
17
+
18
+ # HTTP 301 successful test
19
+ specify { expect { PingMySite.start(%w[ping http://13pixels.be --expected-status-code 301 --follow-location false --expected-redirect-url http://www.13pixels.be], shell: shell) }.to output("Sucessfully ping http://13pixels.be with expected status code 301\nSucessfully redirect http://13pixels.be to http://www.13pixels.be with status 301\n").to_stdout }
20
+ end
21
+ end
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ping-my-site
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Cédric Bousmanne
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-01-02 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: ''
14
+ email:
15
+ - i@cedricbousmanne.com
16
+ executables:
17
+ - ping-my-site
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - ".env_schema"
22
+ - ".gitignore"
23
+ - ".rvmrc"
24
+ - Gemfile
25
+ - Gemfile.lock
26
+ - README.md
27
+ - bin/ping-my-site
28
+ - lib/notifier.rb
29
+ - lib/ping-my-site.rb
30
+ - lib/pinger.rb
31
+ - spec/ping-my-site.rb
32
+ homepage: http://cedric.io
33
+ licenses: []
34
+ metadata: {}
35
+ post_install_message:
36
+ rdoc_options: []
37
+ require_paths:
38
+ - lib
39
+ required_ruby_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ required_rubygems_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ requirements: []
50
+ rubyforge_project:
51
+ rubygems_version: 2.4.5
52
+ signing_key:
53
+ specification_version: 4
54
+ summary: ''
55
+ test_files:
56
+ - spec/ping-my-site.rb