diskmon 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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