dboard 1.0.3 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 60c9af8ba57dc09e45ec0f39a2e8394705c4cfadd771f52210578438f4f64219
4
+ data.tar.gz: d1422616d6c609c49cd32c1a88481ae929391d5d3d937cc81b5abb1e37457a90
5
+ SHA512:
6
+ metadata.gz: '091c5bebede637161ece4d905ec07acb12d018c2d7dde186bb427639edbebe43211393ea6279b9ec212f02cdaff847b9812d21e6f1e1bc98dd9dbf117d0ee33a'
7
+ data.tar.gz: dcc00cb4d504f0911b19f68c98af3db66e76a4cef444a8efcbb0e1a8daaa2a281da11f12eb3ae132bee5c7b06c09e0e228c17b2ad1ad2af005e47d379d71c5b0
@@ -0,0 +1,26 @@
1
+ name: Ruby CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ test:
11
+
12
+ runs-on: ubuntu-latest
13
+
14
+ strategy:
15
+ matrix:
16
+ ruby-version: ["3.0", "2.7", "2.6", "2.5"]
17
+
18
+ steps:
19
+ - uses: actions/checkout@v2
20
+ - name: Set up Ruby ${{ matrix.ruby-version }}
21
+ uses: ruby/setup-ruby@v1
22
+ with:
23
+ ruby-version: ${{ matrix.ruby-version }}
24
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
25
+ - name: Run tests
26
+ run: bundle exec rake
data/.gitignore CHANGED
@@ -3,3 +3,4 @@
3
3
  Gemfile.lock
4
4
  pkg/*
5
5
  todo.txt
6
+ /tmp
data/.rubocop.yml ADDED
@@ -0,0 +1,5 @@
1
+ AllCops:
2
+ Exclude:
3
+ - "tmp/**/*"
4
+ inherit_gem:
5
+ barsoom_utils: shared_rubocop.yml
data/Gemfile CHANGED
@@ -1,2 +1,7 @@
1
- source "http://rubygems.org"
1
+ source "https://rubygems.org"
2
2
  gemspec
3
+
4
+ group :development, :test do
5
+ gem "barsoom_utils", github: "barsoom/barsoom_utils"
6
+ gem "rubocop"
7
+ end
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Ruby CI](https://github.com/barsoom/dboard/actions/workflows/ci.yml/badge.svg)](https://github.com/barsoom/dboard/actions/workflows/ci.yml)
2
+
1
3
  A dashboard framework.
2
4
 
3
5
  It handles collecting data from user defined sources (simple ruby classes) and provides a simple API to poll for updates. See the [example app](https://github.com/joakimk/dboard_example) for information on how to use it.
data/Rakefile CHANGED
@@ -1,5 +1,5 @@
1
- require 'bundler'
2
- require 'rspec/core/rake_task'
1
+ require "bundler"
2
+ require "rspec/core/rake_task"
3
3
 
4
4
  Bundler::GemHelper.install_tasks
5
5
 
@@ -7,4 +7,4 @@ desc "Run specs"
7
7
  RSpec::Core::RakeTask.new do |t|
8
8
  end
9
9
 
10
- task :default => :spec
10
+ task default: :spec
data/dboard.gemspec CHANGED
@@ -6,22 +6,21 @@ Gem::Specification.new do |s|
6
6
  s.name = "dboard"
7
7
  s.version = Dboard::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
- s.authors = ["Joakim Kolsjö"]
10
- s.email = ["joakim.kolsjo@gmail.com"]
9
+ s.authors = [ "Joakim Kolsjö" ]
10
+ s.email = [ "joakim.kolsjo@gmail.com" ]
11
11
  s.homepage = ""
12
12
  s.summary = %q{Dashboard framework}
13
13
  s.description = %q{Dashboard framework}
14
14
  s.license = "MIT"
15
+ s.metadata = { "rubygems_mfa_required" => "true" }
15
16
 
16
17
  s.files = `git ls-files`.split("\n")
17
- s.test_files = `git ls-files -- {spec}/*`.split("\n")
18
- s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
19
- s.require_paths = ["lib"]
18
+ s.require_paths = [ "lib" ]
20
19
 
21
20
  s.add_dependency "httparty"
22
21
  s.add_dependency "rake"
23
22
  s.add_dependency "json"
24
23
  s.add_dependency "dalli"
25
24
  s.add_dependency "sinatra"
26
- s.add_development_dependency "rspec", "2.6.0"
25
+ s.add_development_dependency "rspec", "~> 3.9"
27
26
  end
data/lib/api.rb CHANGED
@@ -1,8 +1,8 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), 'cache'))
2
- require File.expand_path(File.join(File.dirname(__FILE__), 'collector.rb'))
3
- require 'digest/md5'
4
- require 'json'
5
- require 'httparty'
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "cache"))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), "collector.rb"))
3
+ require "digest/md5"
4
+ require "json"
5
+ require "httparty"
6
6
 
7
7
  module Dboard
8
8
  class Api
@@ -15,12 +15,12 @@ module Dboard
15
15
 
16
16
  def self.get(params)
17
17
  types = {}
18
- params[:types].split(',').each do |type|
18
+ params[:types].split(",").each do |type|
19
19
  raw_data = CACHE.get("dashboard::source::#{type}")
20
20
  data = raw_data ? JSON.parse(raw_data) : {}
21
- types.merge!(type => { :data => data, :checksum => Digest::MD5.hexdigest(data.inspect) })
21
+ types.merge!(type => { data: data, checksum: Digest::MD5.hexdigest(data.inspect) })
22
22
  end
23
- { :version => (@@version || ENV["COMMIT_HASH"] || "unversioned"), :sources => types }.to_json
23
+ { version: (@@version || ENV["COMMIT_HASH"] || "unversioned"), sources: types }.to_json
24
24
  end
25
25
 
26
26
  def self.version=(version)
data/lib/cache.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'dalli'
1
+ require "dalli"
2
2
 
3
3
  module Dboard
4
4
  if Config.config[:memcache]
data/lib/collector.rb CHANGED
@@ -1,5 +1,5 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), 'publisher'))
2
- require 'singleton'
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "publisher"))
2
+ require "singleton"
3
3
 
4
4
  module Dboard
5
5
  class Collector
@@ -15,6 +15,10 @@ module Dboard
15
15
  Collector.instance.register_after_update_callback(callback)
16
16
  end
17
17
 
18
+ def self.register_error_callback(callback)
19
+ Collector.instance.register_error_callback(callback)
20
+ end
21
+
18
22
  def self.start
19
23
  instance.start
20
24
  end
@@ -22,11 +26,14 @@ module Dboard
22
26
  def initialize
23
27
  @sources = {}
24
28
  @after_update_callback = lambda {}
29
+ @error_callback = lambda { |exception| }
25
30
  end
26
31
 
27
32
  def start
28
33
  @sources.each do |source, instance|
29
34
  Thread.new do
35
+ wait_a_little_bit_to_not_start_all_fetches_at_once
36
+
30
37
  loop do
31
38
  update_in_thread(source, instance)
32
39
  end
@@ -35,20 +42,19 @@ module Dboard
35
42
  loop { sleep 1 }
36
43
  end
37
44
 
38
- def update_in_thread(source, instance)
39
- time = Time.now
40
- puts "#{source} updating..."
41
- update_source(source, instance)
42
- elapsed_time = Time.now - time
43
- time_until_next_update = instance.update_interval - elapsed_time
44
- time_until_next_update = 0 if time_until_next_update < 0
45
- puts "#{source} done in #{elapsed_time} seconds, will update again in #{time_until_next_update} seconds (interval: #{instance.update_interval})."
46
- sleep time_until_next_update
47
- rescue Exception => ex
48
- puts "Something failed outside the update_source method. #{ex.message}"
49
- puts ex.backtrace
45
+ def register_source(key, instance)
46
+ @sources.merge!({ key => instance })
47
+ end
48
+
49
+ def register_after_update_callback(callback)
50
+ @after_update_callback = callback
50
51
  end
51
52
 
53
+ def register_error_callback(callback)
54
+ @error_callback = callback
55
+ end
56
+
57
+ # Public because the old tests depend on it
52
58
  def update_source(source, instance)
53
59
  begin
54
60
  data = instance.fetch
@@ -59,18 +65,31 @@ module Dboard
59
65
  rescue Exception => ex
60
66
  puts "Failed to update #{source}: #{ex.message}"
61
67
  puts ex.backtrace
68
+ @error_callback.call(ex)
62
69
  end
63
70
 
64
- def register_source(key, instance)
65
- @sources.merge!({ key => instance })
66
- end
71
+ private
67
72
 
68
- def register_after_update_callback(callback)
69
- @after_update_callback = callback
73
+ def update_in_thread(source, instance)
74
+ time = Time.now
75
+ puts "#{source} updating..."
76
+ update_source(source, instance)
77
+ elapsed_time = Time.now - time
78
+ time_until_next_update = instance.update_interval - elapsed_time
79
+ time_until_next_update = 0 if time_until_next_update < 0
80
+ puts "#{source} done in #{elapsed_time} seconds, will update again in #{time_until_next_update} seconds (interval: #{instance.update_interval})."
81
+ sleep time_until_next_update
82
+ rescue Exception => ex
83
+ puts "Something failed outside the update_source method. #{ex.message}"
84
+ puts ex.backtrace
70
85
  end
71
86
 
72
87
  def publish_data(source, data)
73
88
  Publisher.publish(source, data)
74
89
  end
90
+
91
+ def wait_a_little_bit_to_not_start_all_fetches_at_once
92
+ sleep 10 * rand
93
+ end
75
94
  end
76
95
  end
data/lib/dboard.rb CHANGED
@@ -1,3 +1,3 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), 'config.rb'))
2
- require File.expand_path(File.join(File.dirname(__FILE__), 'api.rb'))
3
- require File.expand_path(File.join(File.dirname(__FILE__), 'collector.rb'))
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "config.rb"))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), "api.rb"))
3
+ require File.expand_path(File.join(File.dirname(__FILE__), "collector.rb"))
data/lib/publisher.rb CHANGED
@@ -1,9 +1,9 @@
1
- require 'json'
1
+ require "json"
2
2
 
3
3
  module Dboard
4
4
  class Publisher
5
5
  def self.publish(source, data)
6
- Api::Client.post("/sources/#{source}", :body => { :data => data.to_json }, :timeout => 10000)
6
+ Api::Client.post("/sources/#{source}", body: { data: data.to_json }, timeout: 10000)
7
7
  rescue SocketError => ex
8
8
  puts "SocketError: #{ex.message}"
9
9
  end
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Dboard
2
- VERSION = "1.0.3"
2
+ VERSION = "1.1.1"
3
3
  end
@@ -1,32 +1,46 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
2
2
 
3
3
  describe Dboard::Collector, "register_source" do
4
-
5
4
  before do
6
5
  Dboard::Collector.instance.sources.clear
7
6
  end
8
7
 
9
8
  it "can register a source" do
10
- new_relic = mock
11
- new_relic.stub!(:update_interval).and_return(5)
9
+ new_relic = double
10
+ allow(new_relic).to receive(:update_interval).and_return(5)
12
11
  Dboard::Collector.register_source :new_relic, new_relic
13
- Dboard::Collector.instance.sources.should == { :new_relic => new_relic }
12
+ expect(Dboard::Collector.instance.sources).to eq({ new_relic: new_relic })
14
13
  end
15
14
 
16
15
  it "can register an after update callback" do
17
- new_relic = mock
18
- new_relic.stub!(:fetch).and_return({ :db => "100%" })
19
- callback = mock
16
+ new_relic = double
17
+ allow(new_relic).to receive(:fetch).and_return({ db: "100%" })
18
+ callback = double
20
19
  Dboard::Collector.register_after_update_callback callback
21
20
 
22
- callback.should_receive(:call)
23
- Dboard::Publisher.stub!(:publish)
21
+ expect(callback).to receive(:call)
22
+ allow(Dboard::Publisher).to receive(:publish)
24
23
  Dboard::Collector.instance.update_source(:new_relic, new_relic)
25
24
 
26
25
  # since it is a singleton, and this callbacks leaks into the other tests
27
26
  Dboard::Collector.register_after_update_callback(lambda {})
28
27
  end
29
28
 
29
+ it "can register an error callback" do
30
+ new_relic = double
31
+ error = RuntimeError.new("error")
32
+ allow(new_relic).to receive(:fetch).and_raise(error)
33
+ callback = double
34
+ Dboard::Collector.register_error_callback callback
35
+
36
+ expect(callback).to receive(:call).with(error)
37
+ allow(Dboard::Publisher).to receive(:publish)
38
+ allow_any_instance_of(Dboard::Collector).to receive(:puts)
39
+ Dboard::Collector.instance.update_source(:new_relic, new_relic)
40
+
41
+ # since it is a singleton, and this callbacks leaks into the other tests
42
+ Dboard::Collector.register_error_callback(lambda { |_| })
43
+ end
30
44
  end
31
45
 
32
46
  describe Dboard::Collector, "update_source" do
@@ -35,17 +49,16 @@ describe Dboard::Collector, "update_source" do
35
49
  end
36
50
 
37
51
  it "should collect and publish data from sources" do
38
- new_relic = mock
39
- new_relic.stub!(:fetch).and_return({ :db => "100%" })
40
- Dboard::Publisher.should_receive(:publish).with(:new_relic, { :db => "100%" })
52
+ new_relic = double
53
+ allow(new_relic).to receive(:fetch).and_return({ db: "100%" })
54
+ expect(Dboard::Publisher).to receive(:publish).with(:new_relic, { db: "100%" })
41
55
  Dboard::Collector.instance.update_source(:new_relic, new_relic)
42
56
  end
43
57
 
44
58
  it "should print out debugging info" do
45
- new_relic = mock
46
- new_relic.stub!(:fetch).and_raise(Exception.new("some error"))
47
- Dboard::Collector.instance.should_receive(:puts).twice
59
+ new_relic = double
60
+ allow(new_relic).to receive(:fetch).and_raise(Exception.new("some error"))
61
+ expect(Dboard::Collector.instance).to receive(:puts).twice
48
62
  Dboard::Collector.instance.update_source(:new_relic, new_relic)
49
63
  end
50
-
51
64
  end
@@ -1,16 +1,14 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper"))
2
2
 
3
3
  describe "Publisher", "publish" do
4
-
5
4
  it "should send data to the dashboard server" do
6
- Dboard::Api::Client.should_receive(:post).with("/sources/new_relic", :body => { :data => { :db => "80%" }.to_json }, :timeout => 10000)
7
- Dboard::Publisher.publish(:new_relic, { :db => "80%" })
5
+ expect(Dboard::Api::Client).to receive(:post).with("/sources/new_relic", body: { data: { db: "80%" }.to_json }, timeout: 10000)
6
+ Dboard::Publisher.publish(:new_relic, { db: "80%" })
8
7
  end
9
8
 
10
9
  it "should handle and log socket errors" do
11
- Dboard::Api::Client.should_receive(:post).and_raise(SocketError.new("failed to connect"))
12
- Dboard::Publisher.should_receive(:puts).with("SocketError: failed to connect")
10
+ expect(Dboard::Api::Client).to receive(:post).and_raise(SocketError.new("failed to connect"))
11
+ expect(Dboard::Publisher).to receive(:puts).with("SocketError: failed to connect")
13
12
  Dboard::Publisher.publish(:new_relic, {})
14
13
  end
15
-
16
14
  end
data/spec/spec_helper.rb CHANGED
@@ -1,11 +1,11 @@
1
1
  require "rspec"
2
2
 
3
- ENV["RACK_ENV"] ||= 'test'
4
- ENV['API_URL'] = "http://localhost:20843"
5
- ENV['API_USER'] = 'test'
6
- ENV['API_PASSWORD'] = 'test'
3
+ ENV["RACK_ENV"] ||= "test"
4
+ ENV["API_URL"] = "http://localhost:20843"
5
+ ENV["API_USER"] = "test"
6
+ ENV["API_PASSWORD"] = "test"
7
7
 
8
- require File.expand_path(File.join(File.dirname(__FILE__), '../lib/dboard'))
8
+ require File.expand_path(File.join(File.dirname(__FILE__), "../lib/dboard"))
9
9
 
10
- Dboard::Api::Client.basic_auth(ENV['API_USER'], ENV['API_PASSWORD'])
11
- Dboard::Api::Client.base_uri(ENV['API_URL'])
10
+ Dboard::Api::Client.basic_auth(ENV["API_USER"], ENV["API_PASSWORD"])
11
+ Dboard::Api::Client.base_uri(ENV["API_URL"])
metadata CHANGED
@@ -1,121 +1,109 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: dboard
3
- version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease:
6
- segments:
7
- - 1
8
- - 0
9
- - 3
10
- version: 1.0.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.1
11
5
  platform: ruby
12
- authors:
13
- - "Joakim Kolsj\xC3\xB6"
6
+ authors:
7
+ - Joakim Kolsjö
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2013-09-05 00:00:00 +02:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
11
+ date: 2021-11-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
22
14
  name: httparty
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
27
17
  - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
33
20
  type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: rake
37
21
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
41
24
  - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
47
34
  type: :runtime
48
- version_requirements: *id002
49
- - !ruby/object:Gem::Dependency
50
- name: json
51
35
  prerelease: false
52
- requirement: &id003 !ruby/object:Gem::Requirement
53
- none: false
54
- requirements:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
55
38
  - - ">="
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 0
60
- version: "0"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: json
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
61
48
  type: :runtime
62
- version_requirements: *id003
63
- - !ruby/object:Gem::Dependency
64
- name: dalli
65
49
  prerelease: false
66
- requirement: &id004 !ruby/object:Gem::Requirement
67
- none: false
68
- requirements:
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
69
52
  - - ">="
70
- - !ruby/object:Gem::Version
71
- hash: 3
72
- segments:
73
- - 0
74
- version: "0"
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: dalli
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
75
62
  type: :runtime
76
- version_requirements: *id004
77
- - !ruby/object:Gem::Dependency
78
- name: sinatra
79
63
  prerelease: false
80
- requirement: &id005 !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: sinatra
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
83
73
  - - ">="
84
- - !ruby/object:Gem::Version
85
- hash: 3
86
- segments:
87
- - 0
88
- version: "0"
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
89
76
  type: :runtime
90
- version_requirements: *id005
91
- - !ruby/object:Gem::Dependency
92
- name: rspec
93
77
  prerelease: false
94
- requirement: &id006 !ruby/object:Gem::Requirement
95
- none: false
96
- requirements:
97
- - - "="
98
- - !ruby/object:Gem::Version
99
- hash: 23
100
- segments:
101
- - 2
102
- - 6
103
- - 0
104
- version: 2.6.0
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.9'
105
90
  type: :development
106
- version_requirements: *id006
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.9'
107
97
  description: Dashboard framework
108
- email:
98
+ email:
109
99
  - joakim.kolsjo@gmail.com
110
100
  executables: []
111
-
112
101
  extensions: []
113
-
114
102
  extra_rdoc_files: []
115
-
116
- files:
117
- - .gitignore
118
- - .rvmrc
103
+ files:
104
+ - ".github/workflows/ci.yml"
105
+ - ".gitignore"
106
+ - ".rubocop.yml"
119
107
  - Gemfile
120
108
  - LICENCE
121
109
  - README.md
@@ -129,42 +117,30 @@ files:
129
117
  - lib/publisher.rb
130
118
  - lib/version.rb
131
119
  - spec/collector_spec.rb
132
- - spec/integration_spec.rb
133
120
  - spec/publisher_spec.rb
134
121
  - spec/spec_helper.rb
135
- has_rdoc: true
136
- homepage: ""
137
- licenses:
122
+ homepage: ''
123
+ licenses:
138
124
  - MIT
125
+ metadata:
126
+ rubygems_mfa_required: 'true'
139
127
  post_install_message:
140
128
  rdoc_options: []
141
-
142
- require_paths:
129
+ require_paths:
143
130
  - lib
144
- required_ruby_version: !ruby/object:Gem::Requirement
145
- none: false
146
- requirements:
131
+ required_ruby_version: !ruby/object:Gem::Requirement
132
+ requirements:
147
133
  - - ">="
148
- - !ruby/object:Gem::Version
149
- hash: 3
150
- segments:
151
- - 0
152
- version: "0"
153
- required_rubygems_version: !ruby/object:Gem::Requirement
154
- none: false
155
- requirements:
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ requirements:
156
138
  - - ">="
157
- - !ruby/object:Gem::Version
158
- hash: 3
159
- segments:
160
- - 0
161
- version: "0"
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
162
141
  requirements: []
163
-
164
- rubyforge_project:
165
- rubygems_version: 1.5.3
142
+ rubygems_version: 3.2.28
166
143
  signing_key:
167
- specification_version: 3
144
+ specification_version: 4
168
145
  summary: Dashboard framework
169
146
  test_files: []
170
-
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm ree-1.8.7-2011.03@dboard --create
@@ -1,54 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
2
-
3
- # Test app
4
- require 'sinatra'
5
-
6
- get "/sources" do
7
- Dboard::Api.get(params)
8
- end
9
-
10
- post "/sources/:type" do
11
- Dboard::Api.update(params)
12
- end
13
-
14
- describe "Dashboard" do
15
-
16
- def app
17
- Sinatra::Application
18
- end
19
-
20
- def start_app
21
- app.port = 20843
22
- app.environment = 'test'
23
- @app_thread = Thread.new { app.run! }
24
- sleep 1
25
- end
26
-
27
- def stop_app
28
- @app_thread && @app_thread.kill
29
- end
30
-
31
- before do
32
- ENV['API_URL'] = "http://localhost:20843"
33
- ENV['API_USER'] = 'test'
34
- ENV['API_PASSWORD'] = 'test'
35
- @new_relic = mock
36
- @new_relic.stub!(:fetch).and_return({ :db => "33.3%", :memory => "33333 MB" })
37
- Dboard::CACHE.delete "dashboard::source::new_relic"
38
- end
39
-
40
- it "should collect stats and post them to the server" do
41
- start_app
42
- body = Dboard::Api::Client.get("/sources?types=new_relic")
43
- JSON.parse(body)["sources"]["new_relic"]["data"].should == {}
44
- Dboard::Collector.instance.update_source(:new_relic, @new_relic)
45
- body = Dboard::Api::Client.get("/sources?types=new_relic")
46
- JSON.parse(body)["sources"]["new_relic"]["data"].should == { "db" => "33.3%", "memory" => "33333 MB" }
47
- end
48
-
49
- after do
50
- stop_app
51
- end
52
-
53
- end
54
-