philae 0.1.0

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: 3dbb29e017bdc7e8f163b7d791f58f372e5f57d8
4
+ data.tar.gz: 317cbad8caa16777d1bb996dd5667c336dff1508
5
+ SHA512:
6
+ metadata.gz: afb9de7a624f945cbb3f276819d74d2ed20a98c7f6a7fbf3c9966ab0e082e3c72608fd593fcac44a81ad68f4d297925a1e16e1402b18acd5057cecd26a79654d
7
+ data.tar.gz: 6e8a58dbeab4019bad6604e638873802c224c8e55958b2932146baeac5f11b8c0a5ee5f2cdcf2a86310710b9c105aaecc2e727a3df4478a3822262668bac96b3
@@ -0,0 +1,25 @@
1
+ require 'docker'
2
+
3
+ module Philae
4
+ class DockerProbe
5
+ attr_reader :name
6
+
7
+ def initialize(name, endpoint = '/var/run/docker.sock', options = nil)
8
+ @name = name
9
+ @endpoint = endpoint
10
+ @docker_options = options
11
+ end
12
+
13
+ def check
14
+ Docker.url = @endpoint
15
+ Docker.options = @docker_options unless @docker_options.nil? # <3 Etienne
16
+ begin
17
+ Docker::Container.all
18
+ rescue
19
+ return false
20
+ end
21
+
22
+ true
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,30 @@
1
+ require 'net/http'
2
+
3
+ module Philae
4
+ class HttpProbe
5
+ attr_reader :name
6
+
7
+ def initialize(name, uri, username = nil, password = nil)
8
+ @name = name
9
+ @uri = uri
10
+ @username = username
11
+ @password = password
12
+ end
13
+
14
+ def check
15
+ begin
16
+ uri = URI(@uri)
17
+ req = Net::HTTP::Get.new(uri)
18
+ req.basic_auth @username, @password if !@username.nil? || !@password.nil?
19
+ resp = Net::HTTP.start(uri.hostname, uri.port) do |http|
20
+ http.request(req)
21
+ end
22
+
23
+ return false if resp.code.to_s[0] != '2' && resp.code.to_s[0] != '3'
24
+ rescue
25
+ return false
26
+ end
27
+ true
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,23 @@
1
+ require 'mongo'
2
+
3
+ module Philae
4
+ class MongoProbe
5
+ attr_reader :name
6
+
7
+ def initialize(name, uri)
8
+ @name = name
9
+ @uri = uri
10
+ end
11
+
12
+ def check
13
+ begin
14
+ client = Mongo::Client.new(@uri)
15
+ db = client.datbase
16
+ db.collection_names
17
+ rescue
18
+ return false
19
+ end
20
+ true
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,33 @@
1
+ require 'net/http'
2
+ require 'json'
3
+
4
+ module Philae
5
+ class PhilaeProbe
6
+ attr_accessor :name
7
+
8
+ def initialize(name, uri, username = nil, password = nil)
9
+ @name = name
10
+ @uri = uri
11
+ @username = username
12
+ @password = password
13
+ end
14
+
15
+ def check
16
+ begin
17
+ uri = URI(@uri)
18
+ req = Net::HTTP::Get.new(uri)
19
+ req.basic_auth @username, @password if !@username.nil? || !@password.nil?
20
+ resp = Net::HTTP.start(uri.hostname, uri.port) do |http|
21
+ http.request(req)
22
+ end
23
+
24
+ return false if resp.code.to_s[0] != '2' && resp.code.to_s[0] != '3'
25
+
26
+ status = JSON.parse(resp.body)
27
+ return status['healthy']
28
+ rescue
29
+ return false
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,26 @@
1
+ module Philae
2
+ class Prober
3
+ def initialize
4
+ @probes = []
5
+ end
6
+
7
+ def add_probe(probe)
8
+ @probes << probe
9
+ end
10
+
11
+ def check
12
+ probes_status = @probes.map do |probe|
13
+ { name: probe.name, healthy: probe.check }
14
+ end
15
+
16
+ global = probes_status.all? do |probe|
17
+ probe[:healthy]
18
+ end
19
+
20
+ {
21
+ healthy: global,
22
+ probes: probes_status
23
+ }
24
+ end
25
+ end
26
+ end
data/lib/philae.rb ADDED
@@ -0,0 +1,9 @@
1
+
2
+ dir = File.join File.dirname(__FILE__), 'philae'
3
+
4
+ Dir["#{dir}/*.rb"].each do |file|
5
+ require file
6
+ end
7
+
8
+ module Philae
9
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: philae
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - leo@scalingo.com
8
+ - john@scalingo.com
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2017-04-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: docker-api
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.33'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.33'
28
+ - !ruby/object:Gem::Dependency
29
+ name: mongo
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '2.4'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '2.4'
42
+ - !ruby/object:Gem::Dependency
43
+ name: json
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '2.1'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '2.1'
56
+ description:
57
+ email: hello@scalingo.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - lib/philae.rb
63
+ - lib/philae/docker_probe.rb
64
+ - lib/philae/http_probe.rb
65
+ - lib/philae/mongo_probe.rb
66
+ - lib/philae/philae_probe.rb
67
+ - lib/philae/prober.rb
68
+ homepage: https://scalingo.com
69
+ licenses:
70
+ - BSD-3-Clause
71
+ metadata: {}
72
+ post_install_message:
73
+ rdoc_options: []
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ requirements: []
87
+ rubyforge_project:
88
+ rubygems_version: 2.5.2
89
+ signing_key:
90
+ specification_version: 4
91
+ summary: Provide an healthcheck api
92
+ test_files: []