droid-monitor 0.6.1 → 0.7.0

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