dboard 1.0.3 → 1.1.1

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
+ 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
-