droid-monitor 0.6.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2aa95a30515885e5d6e843bc5ef5e80369000180
4
- data.tar.gz: 75c889ae70cac3d21401222ec717fd8a2f067d9d
2
+ SHA256:
3
+ metadata.gz: '019f451202097810f6434f9f093815f4b4796c592c1e2abd917bf96d64d3265b'
4
+ data.tar.gz: 77a5c9a451a42fd2ff660cd2d2848ec686408a05a0bae99f1eda1db1c639cf09
5
5
  SHA512:
6
- metadata.gz: d33fb3c81370760dd92aeee6afb9cd1e73d2c3aa9f2ecab56a84c6fac2d7c2a6765ba739ec01d6ccffed89be5004874c3b0aa151f50c7ff0cbe64d5d0e25c318
7
- data.tar.gz: 1f0d5cba2c6cdaac3df70a8d522fcf6b0bcab41a7a8acfce770bad314c94a9fa525123c1375d052ef161e9eb061f289abd287ebf53eb6655274ea35187a0771f
6
+ metadata.gz: d3faf985803dc5babcd3c40578972b4e539e57e4fb618ca731d7ff18e3a0e3c4cc49a653bceef415fee69f820a6dae1ffa8c7e38131ccdd271a3ecf35d00b481
7
+ data.tar.gz: fb8a76c3264134608f41ce4c41a591e2617419f76016aa40fc87481c9ccfa4b285508d2f63ffffec65fd0e9c4740e7bc1a34b87b48f826bd9bd7a784198556f6
data/.gitignore CHANGED
@@ -1,6 +1,7 @@
1
1
  /.bundle/
2
2
  /.yardoc
3
3
  /Gemfile.lock
4
+ sample/Gemfile.lock
4
5
  /_yardoc/
5
6
  /coverage/
6
7
  /pkg/
@@ -0,0 +1,16 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.3
3
+ Metrics/LineLength:
4
+ Enabled: false
5
+ Metrics/AbcSize:
6
+ Enabled: false
7
+ Metrics/MethodLength:
8
+ Enabled: false
9
+ Metrics/ClassLength:
10
+ Enabled: false
11
+ Style/Documentation:
12
+ Enabled: false
13
+ Style/CommentedKeyword:
14
+ Enabled: false
15
+ Naming/HeredocDelimiterNaming:
16
+ Enabled: false
@@ -1,16 +1,21 @@
1
+ sudo: false
2
+ #cache: bundler
1
3
  language: ruby
2
4
  rvm:
3
- - 2.1.4
4
- - 2.2.0
5
- - 2.3.0
6
-
7
- sudo: false
8
- cache: bundler
5
+ - 2.3
6
+ - 2.4
7
+ - 2.5
8
+ - 2.6
9
9
 
10
- before_install: gem update --remote bundler
10
+ env:
11
+ - ANDROID_HOME='~' # dummy
11
12
 
12
- install:
13
- - bundle install --retry=3
13
+ before_install:
14
+ - gem update --system
15
+ - gem update bundler
16
+ - mkdir ~/platform-tools
17
+ - touch ~/platform-tools/adb
14
18
 
15
19
  script:
20
+ - bundle exec rubocop
16
21
  - ruby test/run_test.rb
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in droid-monitor.gemspec
data/README.md CHANGED
@@ -4,6 +4,8 @@ Monitoring Android cpu or memory usage and create their simple graph with Google
4
4
 
5
5
  [![Gem Version](https://badge.fury.io/rb/droid-monitor.svg)](http://badge.fury.io/rb/droid-monitor)
6
6
 
7
+ Read also: https://developer.android.com/training/testing/performance
8
+
7
9
  ## Installation
8
10
 
9
11
  Add this line to your application's Gemfile:
data/Rakefile CHANGED
@@ -1,2 +1,11 @@
1
- require "bundler/gem_tasks"
1
+ # frozen_string_literal: true
2
2
 
3
+ require 'bundler/gem_tasks'
4
+ require 'rubocop/rake_task'
5
+
6
+ desc('Execute RuboCop static code analysis')
7
+ RuboCop::RakeTask.new(:rubocop) do |t|
8
+ t.patterns = %w[lib test sample]
9
+ t.options = %w[-D]
10
+ t.fail_on_error = true
11
+ end
@@ -1,27 +1,29 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'droid/monitor/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = "droid-monitor"
8
+ spec.name = 'droid-monitor'
8
9
  spec.version = Droid::Monitor::VERSION
9
- spec.authors = ["Kazuaki MATSUO"]
10
- spec.email = ["fly.49.89.over@gmail.com"]
11
- spec.summary = %q{Monitoring Android cpu or memory usage and create their simple graph with Google API.}
12
- spec.description = %q{Monitoring connected Android devices via adb command. And you can create simple http graph wth Google API.}
13
- spec.homepage = "https://github.com/KazuCocoa/droid-monitor"
14
- spec.license = "MIT"
10
+ spec.authors = ['Kazuaki MATSUO']
11
+ spec.email = ['fly.49.89.over@gmail.com']
12
+ spec.summary = 'Monitoring Android cpu or memory usage and create their simple graph with Google API.'
13
+ spec.description = 'Monitoring connected Android devices via adb command. And you can create simple http graph wth Google API.'
14
+ spec.homepage = 'https://github.com/KazuCocoa/droid-monitor'
15
+ spec.license = 'MIT'
15
16
 
16
17
  spec.files = `git ls-files -z`.split("\x0")
17
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
20
- spec.required_ruby_version = ">= 2.1.0"
20
+ spec.require_paths = ['lib']
21
+ spec.required_ruby_version = '>= 2.3'
21
22
 
22
- spec.add_dependency "faml"
23
- spec.add_dependency "haml" # for using faml to tilt
24
- spec.add_dependency "tilt"
25
- spec.add_development_dependency "rake"
26
- spec.add_development_dependency "test-unit"
23
+ spec.add_dependency 'faml', '~> 0.8'
24
+ spec.add_dependency 'haml', '~> 5.0' # for using faml to tilt
25
+ spec.add_dependency 'tilt', '~> 2.0'
26
+ spec.add_development_dependency 'rake'
27
+ spec.add_development_dependency 'rubocop', '0.61.0'
28
+ spec.add_development_dependency 'test-unit'
27
29
  end
@@ -1,8 +1,10 @@
1
- require_relative "monitor/version"
2
- require_relative "monitor/common/timer"
3
- require_relative "monitor/executor/executor"
1
+ # frozen_string_literal: true
4
2
 
5
- require "Open3"
3
+ require_relative 'monitor/version'
4
+ require_relative 'monitor/common/timer'
5
+ require_relative 'monitor/executor/executor'
6
+
7
+ require 'open3'
6
8
 
7
9
  module Droid
8
10
  module Monitor
@@ -10,10 +12,11 @@ module Droid
10
12
  attr_accessor :package, :device_serial, :api_level
11
13
 
12
14
  def initialize(opts = {})
13
- raise "opts must be a hash" unless opts.is_a? Hash
14
- raise "Package name is required." unless opts[:package]
15
+ raise 'opts must be a hash' unless opts.is_a? Hash
16
+ raise 'Package name is required.' unless opts[:package]
17
+
15
18
  @package = opts[:package]
16
- @device_serial = opts[:device_serial] || ""
19
+ @device_serial = opts[:device_serial] || ''
17
20
  @api_level = device_sdk_version
18
21
  @debug = opts[:debug]
19
22
  end
@@ -46,15 +49,17 @@ module Droid
46
49
  end
47
50
 
48
51
  def dump_tcp_rec
49
- pid = get_pid
52
+ pid = user_pid
50
53
  return 0 if pid == -1
54
+
51
55
  puts "pid is #{pid}" if @debug
52
56
  run_adb("#{adb_shell} cat proc/uid_stat/#{pid}/tcp_rcv").to_i
53
57
  end
54
58
 
55
59
  def dump_tcp_snd
56
- pid = get_pid
60
+ pid = user_pid
57
61
  return 0 if pid == -1
62
+
58
63
  puts "pid is #{pid}" if @debug
59
64
  run_adb("#{adb_shell} cat proc/uid_stat/#{pid}/tcp_snd").to_i
60
65
  end
@@ -66,12 +71,14 @@ module Droid
66
71
  private
67
72
 
68
73
  def adb
69
- raise "ANDROID_HOME is not set" unless ENV["ANDROID_HOME"]
70
- "#{ENV["ANDROID_HOME"]}/platform-tools/adb"
74
+ raise 'ANDROID_HOME is not set' unless ENV['ANDROID_HOME']
75
+
76
+ "#{ENV['ANDROID_HOME']}/platform-tools/adb"
71
77
  end
72
78
 
73
79
  def device_serial_option
74
- return "" unless @device_serial && @device_serial != ""
80
+ return '' unless @device_serial && @device_serial != ''
81
+
75
82
  "-s \"#{@device_serial}\""
76
83
  end
77
84
 
@@ -80,19 +87,19 @@ module Droid
80
87
  end
81
88
 
82
89
  # @return [String] line of packages regarding pid and so on
83
- def get_pid
90
+ def user_pid
84
91
  dump = run_adb("#{adb_shell} dumpsys package #{@package}")
85
92
  return -1 if dump.nil?
86
93
 
87
94
  userid = dump.scan(/userId=[0-9]+/)
88
95
  return -1 if userid.empty?
89
96
 
90
- userid.uniq.first.delete("userId=")
97
+ userid.uniq.first.delete('userId=')
91
98
  end
92
99
 
93
100
  def run_adb(cmd)
94
- out_s, out_e, status = Open3.capture3(cmd)
95
- puts "error: device not found which serial is #{@device_serial}" if out_e.include?("error: device not found")
101
+ out_s, out_e, _status = Open3.capture3(cmd)
102
+ puts "error: device not found which serial is #{@device_serial}" if out_e.include?('error: device not found')
96
103
  out_s.chomp unless out_s.nil? || out_s.empty?
97
104
  end
98
105
  end # class Adb
@@ -1,2 +1,4 @@
1
- require_relative "utils"
2
- require_relative "timer"
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'utils'
4
+ require_relative 'timer'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Droid
2
4
  module Monitor
3
5
  module Timer
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Droid
2
4
  module Monitor
3
5
  module Utils
@@ -1,8 +1,10 @@
1
- require_relative "../monitor"
2
- require_relative "common/commons"
3
- require_relative "report/google_api_template"
1
+ # frozen_string_literal: true
4
2
 
5
- require "json"
3
+ require_relative '../monitor'
4
+ require_relative 'common/commons'
5
+ require_relative 'report/google_api_template'
6
+
7
+ require 'json'
6
8
 
7
9
  module Droid
8
10
  module Monitor
@@ -21,11 +23,12 @@ module Droid
21
23
  end
22
24
 
23
25
  def dump_cpu_usage(dump_data)
24
- scanned_dump = dump_data.scan(/^.*#{self.package}.*$/).map(&:strip).first
26
+ scanned_dump = dump_data.scan(/^.*#{package}.*$/).map(&:strip).first
25
27
  return [] if scanned_dump.nil?
26
28
 
27
29
  dump = scanned_dump.split(/\s/).reject(&:empty?)
28
- fail 'no package' if /^Load:$/ =~ dump[0]
30
+ raise 'no package' if /^Load:$/ =~ dump[0]
31
+
29
32
  dump
30
33
  rescue StandardError => e
31
34
  puts e
@@ -36,9 +39,7 @@ module Droid
36
39
  return [] if dump_data.nil?
37
40
 
38
41
  dump = dump_data.split(/\s/).reject(&:empty?)
39
- fail 'no package' if /^Load:$/ =~ dump[0]
40
-
41
- puts dump
42
+ raise 'no package' if /^Load:$/ =~ dump[0]
42
43
 
43
44
  dump
44
45
  rescue StandardError => e
@@ -48,27 +49,27 @@ module Droid
48
49
 
49
50
  # called directory
50
51
  def store_dumped_cpu_usage
51
- self.store_cpu_usage(self.dump_cpu_usage(self.dump_cpuinfo))
52
+ store_cpu_usage(dump_cpu_usage(dump_cpuinfo))
52
53
  end
53
54
 
54
55
  def store_dumped_cpu_usage_with_top
55
- self.store_cpu_usage_with_top(self.dump_cpu_usage_with_top(self.dump_cpuinfo_with_top))
56
+ store_cpu_usage_with_top(dump_cpu_usage_with_top(dump_cpuinfo_with_top))
56
57
  end
57
58
 
58
59
  def save_cpu_usage_as_google_api(file_path)
59
- self.save(export_as_google_api_format(@cpu_usage), file_path)
60
+ save(export_as_google_api_format(@cpu_usage), file_path)
60
61
  end
61
62
 
62
63
  def save_cpu_usage_as_google_api_with_top(file_path)
63
- self.save(export_as_google_api_format_with_top(@cpu_usage), file_path)
64
+ save(export_as_google_api_format_with_top(@cpu_usage), file_path)
64
65
  end
65
66
 
66
67
  def store_cpu_usage(dumped_cpu)
67
- @cpu_usage.push self.merge_current_time(transfer_total_cpu_to_hash(dumped_cpu))
68
+ @cpu_usage.push merge_current_time(transfer_total_cpu_to_hash(dumped_cpu))
68
69
  end
69
70
 
70
71
  def store_cpu_usage_with_top(dumped_cpu)
71
- @cpu_usage.push self.merge_current_time(transfer_total_cpu_with_top_to_hash(dumped_cpu))
72
+ @cpu_usage.push merge_current_time(transfer_total_cpu_with_top_to_hash(dumped_cpu))
72
73
  end
73
74
 
74
75
  def transfer_total_cpu_to_hash(dump_cpu_array)
@@ -78,7 +79,7 @@ module Droid
78
79
  process: 'no package process',
79
80
  user: '0%',
80
81
  kernel: '0%',
81
- time: dump_cpu_array.last,
82
+ time: dump_cpu_array.last
82
83
  }
83
84
  else
84
85
  {
@@ -86,7 +87,7 @@ module Droid
86
87
  process: dump_cpu_array[1],
87
88
  user: dump_cpu_array[2],
88
89
  kernel: dump_cpu_array[5],
89
- time: dump_cpu_array.last,
90
+ time: dump_cpu_array.last
90
91
  }
91
92
  end
92
93
  end
@@ -94,15 +95,15 @@ module Droid
94
95
  def transfer_total_cpu_with_top_to_hash(dump_cpu_array)
95
96
  if dump_cpu_array.length <= 1
96
97
  {
97
- total_cpu: '0%',
98
- process: 'no package process',
99
- time: dump_cpu_array.last,
98
+ total_cpu: '0%',
99
+ process: 'no package process',
100
+ time: dump_cpu_array.last
100
101
  }
101
102
  else
102
103
  {
103
- total_cpu: dump_cpu_array[2],
104
- process: dump_cpu_array[0],
105
- time: dump_cpu_array.last,
104
+ total_cpu: dump_cpu_array[2],
105
+ process: dump_cpu_array[0],
106
+ time: dump_cpu_array.last
106
107
  }
107
108
  end
108
109
  end
@@ -111,13 +112,12 @@ module Droid
111
112
  google_api_data_format = empty_google_api_format
112
113
 
113
114
  from_cpu_usage.each do |hash|
114
-
115
115
  a_google_api_data_format = {
116
116
  c: [
117
117
  { v: hash[:time] },
118
118
  { v: hash[:total_cpu].delete('%').to_f },
119
119
  { v: hash[:user].delete('%').to_f },
120
- { v: hash[:kernel].delete('%').to_f },
120
+ { v: hash[:kernel].delete('%').to_f }
121
121
  ]
122
122
  }
123
123
  google_api_data_format[:rows].push(a_google_api_data_format)
@@ -130,12 +130,11 @@ module Droid
130
130
  google_api_data_format = empty_google_api_format_with_top
131
131
 
132
132
  from_cpu_usage.each do |hash|
133
-
134
133
  a_google_api_data_format = {
135
- c: [
136
- { v: hash[:time] },
137
- { v: hash[:total_cpu].delete('%').to_f },
138
- ]
134
+ c: [
135
+ { v: hash[:time] },
136
+ { v: hash[:total_cpu].delete('%').to_f }
137
+ ]
139
138
  }
140
139
  google_api_data_format[:rows].push(a_google_api_data_format)
141
140
  end
@@ -146,9 +145,9 @@ module Droid
146
145
  # @params [String] data_file_path A path to data.
147
146
  # @params [Hash] graph_opts A hash regarding graph settings.
148
147
  # @params [String] output_file_path A path you would like to export data.
149
- def create_graph(data_file_path, graph_opts = {}, output_file_path)
150
- self.save(Droid::Monitor::GoogleApiTemplate.create_graph(data_file_path, graph_opts),
151
- output_file_path)
148
+ def create_graph(data_file_path, graph_opts = {}, output_file_path) # rubocop:disable Style/OptionalArguments
149
+ save(Droid::Monitor::GoogleApiTemplate.create_graph(data_file_path, graph_opts),
150
+ output_file_path)
152
151
  end
153
152
 
154
153
  private
@@ -159,21 +158,19 @@ module Droid
159
158
  { label: 'time', type: 'string' },
160
159
  { label: 'total_cpu', type: 'number' },
161
160
  { label: 'user', type: 'number' },
162
- { label: 'kernel', type: 'number' },
163
- ],
164
- rows: [
161
+ { label: 'kernel', type: 'number' }
165
162
  ],
163
+ rows: []
166
164
  }
167
165
  end
168
166
 
169
167
  def empty_google_api_format_with_top
170
168
  {
171
- cols: [
172
- { label: 'time', type: 'string' },
173
- { label: 'total_cpu', type: 'number' },
174
- ],
175
- rows: [
176
- ],
169
+ cols: [
170
+ { label: 'time', type: 'string' },
171
+ { label: 'total_cpu', type: 'number' }
172
+ ],
173
+ rows: []
177
174
  }
178
175
  end
179
176
  end # class Cpu
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Droid
2
4
  module Monitor
3
5
  class Executor