diskmon 0.0.2 → 0.0.3

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.
@@ -1,16 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "rubygems"
3
3
  require "diskmon"
4
- require "optparse"
5
4
 
6
- OptionParser.new do |opt|
7
- opt.separator ""
8
- opt.separator "Options:"
9
- opt.separator "-------------"
10
- opt.on('-a', '--agent', 'Agent mode') { Diskmon::Runner.agent }
11
- opt.on('-s', '--server', 'Server mode') { Diskmon::Runner.server }
12
- opt.separator ""
13
- opt.on_tail('-h', '--help') { puts opt; exit }
5
+ Diskmon::Runner.agent
14
6
 
15
- opt.parse!
16
- end
@@ -8,14 +8,11 @@ Gem::Specification.new do |gem|
8
8
  gem.summary = %q{Gem for collect statistic from disks}
9
9
  gem.homepage = ""
10
10
 
11
- gem.files = ["Gemfile", "LICENSE", "README.md", "Rakefile", "bin/diskmon", "diskmon.gemspec", "lib/diskmon.rb", "lib/diskmon/client/collector.rb", "lib/diskmon/client/config.rb", "lib/diskmon/client/harddisk.rb", "lib/diskmon/client/raidcontroller.rb", "lib/diskmon/client/solarismapdev.rb", "lib/diskmon/client/zpoolstree.rb", "lib/diskmon/server/harddisk.rb", "lib/diskmon/server/serverapp.rb", "lib/diskmon/server/harddiskreport.rb", "lib/diskmon/version.rb"]
11
+ gem.files = ["Gemfile", "LICENSE", "README.md", "Rakefile", "bin/diskmon", "diskmon.gemspec", "lib/diskmon.rb", "lib/diskmon/collector.rb", "lib/diskmon/config.rb", "lib/diskmon/harddisk.rb", "lib/diskmon/raidcontroller.rb", "lib/diskmon/solarismapdev.rb", "lib/diskmon/zpoolstree.rb", "lib/diskmon/version.rb"]
12
12
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
13
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
14
  gem.name = "diskmon"
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = Diskmon::VERSION
17
- gem.add_runtime_dependency 'data_mapper'
18
- gem.add_runtime_dependency 'sinatra'
19
- # gem.add_runtime_dependency 'thin'
20
- gem.add_runtime_dependency 'dm-sqlite-adapter'
17
+
21
18
  end
@@ -1,15 +1,7 @@
1
1
  require "diskmon/version"
2
- require "diskmon/client/config"
3
- require "diskmon/client/raidcontroller"
4
- require "diskmon/client/collector"
5
-
6
- require 'sinatra'
7
- require "thin"
8
- require 'data_mapper'
9
- require 'dm-validations'
10
- require 'pp'
11
- require "diskmon/server/harddiskreport"
12
- require "diskmon/server/serverapp"
2
+ require "diskmon/config"
3
+ require "diskmon/raidcontroller"
4
+ require "diskmon/collector"
13
5
 
14
6
  module Diskmon
15
7
 
@@ -34,24 +26,5 @@ module Diskmon
34
26
  send_result = coll.send_report(cfg.collector_url, cfg.collector_login, cfg.collector_password, m)
35
27
  p send_result
36
28
  end
37
-
38
- ################################################################################
39
- # Server mode
40
- ################################################################################
41
-
42
- def self.server
43
- set :port, 7777
44
-
45
- DataMapper::Logger.new($stdout, :debug)
46
- DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/reports.db")
47
-
48
- $DEBUG = true
49
-
50
- DataMapper.finalize
51
-
52
- Diskmon::HardDiskReport.auto_upgrade!
53
-
54
- Diskmon::ServerApp.run!
55
- end
56
29
  end
57
30
  end
@@ -12,7 +12,7 @@ module Diskmon
12
12
  attr_accessor :port
13
13
  attr_accessor :status
14
14
  attr_accessor :unit
15
- attr_accessor :type # sata or sas
15
+ attr_accessor :type # sata or sas or jbod
16
16
  attr_accessor :vendor_model
17
17
  attr_accessor :smart_status_raw # array of hex numbers
18
18
  attr_accessor :smart_status
@@ -1,6 +1,6 @@
1
- require "diskmon/client/solarismapdev"
2
- require "diskmon/client/harddisk"
3
- require "diskmon/client/zpoolstree"
1
+ require "diskmon/solarismapdev"
2
+ require "diskmon/harddisk"
3
+ require "diskmon/zpoolstree"
4
4
 
5
5
  module Diskmon
6
6
 
@@ -12,7 +12,7 @@ module Diskmon
12
12
  end
13
13
 
14
14
  def get_vendor
15
- v = `scanpci | grep -i raid`
15
+ v = `scanpci | egrep -i '(Adaptec|3ware)'`
16
16
 
17
17
  case v.downcase
18
18
  when /3ware/ then return :threeware
@@ -66,21 +66,6 @@ module Diskmon
66
66
 
67
67
  d.dri = "disk://" + Diskmon::Server.get_id + "/" + d.ctl_id + "/" + d.port
68
68
 
69
- # IO.popen("tw_cli /#{ctl_id}/#{d.port} show smart") do |tw_cli_show_smart_io|
70
-
71
- # d.smart_status_raw = []
72
-
73
- # tw_cli_show_smart_io.each_line do |l|
74
- # s = l.split
75
- # d.smart_status_raw.push(s) if l[0,1] =~ /[0-9]/ and not s.empty?
76
- # end
77
-
78
- # d.smart_status = parse_smart_status(d.smart_status_raw.flatten!)
79
-
80
- # end # show smart
81
-
82
- # full stats
83
- #
84
69
  IO.popen("tw_cli /c#{d.ctl_id}/p#{d.port} show all | grep '^/c#{d.ctl_id}/p#{d.port}'") do |tw_cli_show_all_io|
85
70
 
86
71
  tw_cli_show_all_io.each_line do |l|
@@ -98,7 +83,7 @@ module Diskmon
98
83
 
99
84
  end # show all
100
85
 
101
- d.system_device = "c#{d.ctl_id}t#{d.unit}d0"
86
+ d.system_device = "c#{d.ctl_id}t#{d.port}d0"
102
87
  d.short_device = mapdev.to_short(d.system_device)
103
88
 
104
89
  yield d
@@ -106,7 +91,54 @@ module Diskmon
106
91
  end
107
92
 
108
93
  when :adaptec
94
+ mapdev = Diskmon::SolarisMapDev.new
95
+
96
+ # disks overview
97
+ #
98
+ arcconf_num_drives = `arcconf getconfig #{ctl_id} | grep 'Device #' | wc -l`.chomp.to_i
99
+
100
+ 0.upto(arcconf_num_drives - 2) do |num|
101
+ disk = get_hash_of_disk(ctl_id, num)
102
+
103
+ d = Diskmon::HardDisk.new
104
+
105
+ d.ctl_id = ctl_id
106
+ d.port = disk["ReportedLocation"].split("Slot")[1]
107
+ d.status = disk["State"]
108
+ d.size = disk["Size"]
109
+ d.type = disk["TransferSpeed"]
110
+ d.vendor_model = disk["Model"]
111
+ d.serial = disk["Serialnumber"]
112
+
113
+ d.dri = "disk://" + Diskmon::Server.get_id + "/" + d.ctl_id + "/" + d.port
114
+
115
+ # TODO smart status
116
+ if `iostat -En | ggrep #{d.serial} -B1`.split[0]
117
+ d.system_device = `iostat -En | ggrep #{d.serial} -B1`.split[0]
118
+ else
119
+ d.system_device = "c0t#{d.port}d0"
120
+ end
121
+
122
+ d.short_device = mapdev.to_short(d.system_device)
123
+
124
+ yield d
125
+ end
126
+ end
127
+ end
128
+
129
+ def get_hash_of_disk(ctl_id, num)
130
+ disk_info = []
131
+ d = []
132
+ get_config = `arcconf getconfig #{ctl_id} | ggrep -m 1 'Device ##{num}' -A 22`
133
+ get_config.split(/\n/).each do |e|
134
+ disk_info << e.split(' :')
135
+ end
136
+ disk_info.slice!(0,2)
137
+ disk_info.flatten!
138
+ disk_info.each do |e|
139
+ d << e.split(" ").join
109
140
  end
141
+ disk_hash = Hash[*d]
110
142
  end
111
143
 
112
144
  def get_all_stats
@@ -1,3 +1,3 @@
1
1
  module Diskmon
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diskmon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,56 +9,8 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-12 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: data_mapper
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :runtime
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ! '>='
28
- - !ruby/object:Gem::Version
29
- version: '0'
30
- - !ruby/object:Gem::Dependency
31
- name: sinatra
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :runtime
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: dm-sqlite-adapter
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
12
+ date: 2012-07-25 00:00:00.000000000 Z
13
+ dependencies: []
62
14
  description: Gem for collect statistic from disks
63
15
  email:
64
16
  - morion.estariol@gmail.com
@@ -74,15 +26,12 @@ files:
74
26
  - bin/diskmon
75
27
  - diskmon.gemspec
76
28
  - lib/diskmon.rb
77
- - lib/diskmon/client/collector.rb
78
- - lib/diskmon/client/config.rb
79
- - lib/diskmon/client/harddisk.rb
80
- - lib/diskmon/client/raidcontroller.rb
81
- - lib/diskmon/client/solarismapdev.rb
82
- - lib/diskmon/client/zpoolstree.rb
83
- - lib/diskmon/server/harddisk.rb
84
- - lib/diskmon/server/serverapp.rb
85
- - lib/diskmon/server/harddiskreport.rb
29
+ - lib/diskmon/collector.rb
30
+ - lib/diskmon/config.rb
31
+ - lib/diskmon/harddisk.rb
32
+ - lib/diskmon/raidcontroller.rb
33
+ - lib/diskmon/solarismapdev.rb
34
+ - lib/diskmon/zpoolstree.rb
86
35
  - lib/diskmon/version.rb
87
36
  homepage: ''
88
37
  licenses: []
@@ -1,19 +0,0 @@
1
- require 'digest'
2
-
3
- module Diskmon
4
-
5
- class HardDisk
6
-
7
- # credit: http://stackoverflow.com/a/5031637
8
- def to_hash
9
- Hash[instance_variables.map { |var| [var[1..-1].to_sym, instance_variable_get(var)] }]
10
- end
11
-
12
- def checksum
13
- as_str = ''
14
- instance_variables.sort.map { |k| as_str << "#{k}=#{instance_variable_get(k)};" }
15
- p as_str if $DEBUG
16
- Digest::MD5.hexdigest(as_str)
17
- end
18
- end
19
- end
@@ -1,50 +0,0 @@
1
- require "data_mapper"
2
-
3
- module Diskmon
4
-
5
- class HardDiskReport
6
- include DataMapper::Resource
7
-
8
- property :dri , String
9
- property :ctl_id , String
10
- property :port , String
11
- property :status , String
12
- property :unit , String
13
- property :type , String
14
- property :vendor_model , String
15
- property :smart_status_raw , String
16
- property :smart_status , String
17
- property :size , String
18
- property :reallocs , String
19
- property :age_hours , String
20
- property :temperature , String
21
- property :serial , String
22
- property :spindle_speed , String
23
- property :error_events , String
24
- property :member_of_zpool , String
25
- property :disk_space_used , String
26
-
27
- property :error_events , String
28
-
29
- property :member_of_zpool , String
30
- property :read_errors , String
31
- property :write_errors , String
32
- property :checksum_errors , String
33
-
34
- property :zpool_health , String
35
- property :zpool_last_command , String
36
- property :zpool_total_space , String
37
- property :zpool_free_space , String
38
-
39
- property :system_device , String
40
- property :short_device , String
41
-
42
- property :created_at , EpochTime
43
- property :checksum , String, :key => true, :unique => true
44
-
45
- def print
46
- instance_variables.sort.map { |k| printf( "%-20s => %s\n", k, instance_variable_get(k) ) }
47
- end
48
-
49
- end
50
- end
@@ -1,28 +0,0 @@
1
- require "sinatra/base"
2
- require "diskmon/server/harddisk"
3
-
4
- module Diskmon
5
- class ServerApp < Sinatra::Base
6
-
7
- set :port, 7777
8
-
9
- post '/report/new' do
10
- data = request.body.read
11
-
12
- Kernel.puts "// Report from #{request.env['REMOTE_ADDR']}" if $DEBUG
13
-
14
- @m = Marshal.load(data)
15
-
16
- @m.each do |disk|
17
- report = Diskmon::HardDiskReport.create(disk.to_hash)
18
- report.checksum = disk.checksum
19
-
20
- report.print if $DEBUG
21
-
22
- report.save
23
- end
24
-
25
- "OK"
26
- end
27
- end
28
- end