xc_metrics_aggregator 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,210 @@
1
+ use AppleScript version "2.4"
2
+ use scripting additions
3
+ use framework "Foundation"
4
+ use framework "ApplicationServices"
5
+ use framework "Quartz"
6
+
7
+
8
+ tell application "Xcode"
9
+ activate
10
+ tell application "System Events"
11
+ tell process "Xcode"
12
+ my displayOrganizer()
13
+ delay 1
14
+
15
+ my arrangePositionOfWindow()
16
+ my clickRadioButtonOfMetricsViewer()
17
+
18
+ set total_row_list to my getAllAppsFromTable()
19
+ set visible_row_list to my getVisibleAppsFromTable()
20
+
21
+ set total_row_count to count of total_row_list
22
+ set visible_row_count to count of visible_row_list
23
+
24
+ tell my NumberOfScrolling to calculate(total_row_count, visible_row_count)
25
+ set start_pos to 1
26
+
27
+ repeat result of NumberOfScrolling times
28
+ my scrollDownForScrollingToTop()
29
+ end repeat
30
+
31
+ repeat result of NumberOfScrolling times
32
+ tell my TableRowsClicker to calculateVisibleRows()
33
+ tell my TableRowsClicker to clickStepByStep(start_pos)
34
+
35
+ my scrollUp()
36
+ delay 1
37
+
38
+ set start_pos to start_pos + (row_count_in_scroll of TableRowsClicker)
39
+ end repeat
40
+ end tell
41
+ end tell
42
+ end tell
43
+
44
+ -- Script Object
45
+
46
+ script TableRowsClicker
47
+ property row_list_in_scroll : []
48
+ property row_count_in_scroll : 0
49
+
50
+ on calculateVisibleRows()
51
+ tell application "System Events"
52
+ tell process "Xcode"
53
+ set my row_list_in_scroll to value of attribute "AXVisibleRows" of table 1 of scroll area 1 of splitter group 1 of window 1
54
+ set my row_count_in_scroll to (count of row_list_in_scroll) - 1
55
+ end tell
56
+ end tell
57
+ end calculateVisibleRows
58
+
59
+ on clickStepByStep(start_pos)
60
+ tell application "System Events"
61
+ tell process "Xcode"
62
+
63
+ set end_pos to start_pos + (my row_count_in_scroll)
64
+
65
+ repeat with elem_pos from start_pos to end_pos by 1
66
+ if elem_pos > my total_row_count then
67
+ exit repeat
68
+ end if
69
+
70
+ set row_elem to my getRowElement(elem_pos)
71
+ set pos to position of row_elem
72
+ my clickAt(item 1 of pos, item 2 of pos)
73
+
74
+ --my waitForDownloading()
75
+ end repeat
76
+
77
+ end tell
78
+ end tell
79
+ end clickStepByStep
80
+
81
+ on getRowElement(pos)
82
+ tell application "System Events"
83
+ tell process "Xcode"
84
+ return row pos of table 1 of scroll area 1 of splitter group 1 of window 1
85
+ end tell
86
+ end tell
87
+ end getRowElement
88
+
89
+ on waitForDownloading()
90
+ tell application "System Events"
91
+ tell process "Xcode"
92
+ repeat 100 times
93
+ delay 1
94
+ if exists static text 1 of splitter group 0 of splitter group 0 of window 1 then
95
+ set label to value of static text 1 of splitter group 0 of splitter group 0 of window 1
96
+ else
97
+ exit repeat
98
+ end if
99
+
100
+ log label
101
+ if my checkIfDownloadedState(label) then
102
+ exit repeat
103
+ end if
104
+ end repeat
105
+
106
+ end tell
107
+ end tell
108
+ end waitForDownloading
109
+
110
+ on checkIfDownloadedState(label)
111
+ return label = "No Metrics" or label = "Last Updated Today" or label = "Unable to Read Metrics" or label begins with "An error occurred"
112
+ end checkIfDownloadedState
113
+ end script
114
+
115
+ script NumberOfScrolling
116
+ property result : 0
117
+
118
+ on calculate(total_row_count, visible_row_count)
119
+ tell application "System Events"
120
+ tell process "Xcode"
121
+ set scroll_div to total_row_count div visible_row_count
122
+ set scroll_mod to total_row_count mod visible_row_count
123
+
124
+
125
+ if 0 < scroll_mod then
126
+ set my result to scroll_div + 1
127
+ else
128
+ set my result to scroll_div
129
+ end if
130
+ end tell
131
+ end tell
132
+ end calculate
133
+ end script
134
+
135
+ -- Functions
136
+
137
+ on scrollDownForScrollingToTop()
138
+ tell application "System Events"
139
+ tell process "Xcode"
140
+ perform action "AXScrollDownByPage" of scroll area 1 of splitter group 1 of window 1
141
+ end tell
142
+ end tell
143
+ end scrollDownForScrollingToTop
144
+
145
+ on scrollUp()
146
+ tell application "System Events"
147
+ tell process "Xcode"
148
+ perform action "AXScrollUpByPage" of scroll area 1 of splitter group 1 of window 1
149
+ end tell
150
+ end tell
151
+ end scrollUp
152
+
153
+ on displayOrganizer()
154
+ tell application "System Events"
155
+ tell process "Xcode"
156
+ click menu item "Organizer" of menu 1 of menu bar item "Window" of menu bar 1
157
+ end tell
158
+ end tell
159
+ end displayOrganizer
160
+
161
+ on arrangePositionOfWindow()
162
+ tell application "Finder"
163
+ set screen_height to (do shell script "system_profiler SPDisplaysDataType | awk '/Resolution/{print $4}'")
164
+ end tell
165
+
166
+ tell application "System Events"
167
+ tell process "Xcode"
168
+ set position of window 1 to {0, 0}
169
+ set size of window 1 to {300, screen_height}
170
+ end tell
171
+ end tell
172
+ end arrangePositionOfWindow
173
+
174
+ on clickRadioButtonOfMetricsViewer()
175
+ tell application "System Events"
176
+ tell process "Xcode"
177
+ click radio button 4 of radio group 1 of group 1 of toolbar 1 of window 1
178
+ end tell
179
+ end tell
180
+ end clickRadioButtonOfMetricsViewer
181
+
182
+ on getAllAppsFromTable()
183
+ tell application "System Events"
184
+ tell process "Xcode"
185
+ set total_row_list to row of table 1 of scroll area 1 of splitter group 1 of window 1
186
+ end tell
187
+ end tell
188
+ return total_row_list
189
+ end getAllAppsFromTable
190
+
191
+ on getVisibleAppsFromTable()
192
+ tell application "System Events"
193
+ tell process "Xcode"
194
+ set visible_row_list to value of attribute "AXVisibleRows" of table 1 of scroll area 1 of splitter group 1 of window 1
195
+ end tell
196
+ end tell
197
+ return visible_row_list
198
+ end getVisibleAppsFromTable
199
+
200
+
201
+ on clickAt(newX, newY)
202
+
203
+ set pt to current application's CGPointZero
204
+ set x of pt to newX
205
+ set y of pt to newY
206
+
207
+ current application's CGPostMouseEvent(pt, 1, 1, 1)
208
+ current application's CGPostMouseEvent(pt, 1, 1, 0)
209
+
210
+ end clickAt
data/run.sh ADDED
@@ -0,0 +1,5 @@
1
+ #!/bin/sh
2
+
3
+ cd `dirname $0`
4
+
5
+ bundle exec exe/xcmagg crowl
@@ -0,0 +1,32 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "xc_metrics_aggregator/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "xc_metrics_aggregator"
8
+ spec.version = XcMetricsAggregator::VERSION
9
+ spec.authors = ["Yahoo Japan Corporation"]
10
+ spec.email = ["kahayash@yahoo-copr.jp"]
11
+
12
+ spec.summary = %q{AppleScript for Xcode Metrics Organizer}
13
+ spec.description = %q{XCMetricsAggregator aggregates metrics across all apps from Xcode Metrics Organizer by automating Xcode with AppleScript.}
14
+ spec.homepage = "https://github.com/yahoojapan/XCMetricsAggregator"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
18
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
+ end
20
+ spec.bindir = "bin"
21
+ spec.executables = ["xcmagg"]
22
+ spec.require_paths = ["lib"]
23
+
24
+ spec.add_dependency "thor"
25
+ spec.add_dependency "etc"
26
+ spec.add_dependency "terminal-table"
27
+ spec.add_dependency "ascii_charts"
28
+
29
+ spec.add_development_dependency "bundler", "~> 2.0"
30
+ spec.add_development_dependency "rake", "~> 10.0"
31
+ spec.add_development_dependency "spec"
32
+ end
metadata ADDED
@@ -0,0 +1,171 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: xc_metrics_aggregator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Yahoo Japan Corporation
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-02-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: etc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: terminal-table
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: ascii_charts
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
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: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '10.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '10.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: spec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: XCMetricsAggregator aggregates metrics across all apps from Xcode Metrics
112
+ Organizer by automating Xcode with AppleScript.
113
+ email:
114
+ - kahayash@yahoo-copr.jp
115
+ executables:
116
+ - xcmagg
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - ".gitignore"
121
+ - ".rspec"
122
+ - CODE_OF_CONDUCT.md
123
+ - Gemfile
124
+ - Gemfile.lock
125
+ - LICENSE
126
+ - README.md
127
+ - Rakefile
128
+ - assets/XCMetricsAggregator.png
129
+ - bin/bundle
130
+ - bin/console
131
+ - bin/setup
132
+ - bin/xcmagg
133
+ - lib/xc_metrics_aggregator.rb
134
+ - lib/xc_metrics_aggregator/crawler.rb
135
+ - lib/xc_metrics_aggregator/formatter/formatter.rb
136
+ - lib/xc_metrics_aggregator/formatter/output_format.rb
137
+ - lib/xc_metrics_aggregator/product.rb
138
+ - lib/xc_metrics_aggregator/service/categories_service.rb
139
+ - lib/xc_metrics_aggregator/service/devices_service.rb
140
+ - lib/xc_metrics_aggregator/service/latest_service.rb
141
+ - lib/xc_metrics_aggregator/service/metrics_service.rb
142
+ - lib/xc_metrics_aggregator/service/percentiles_service.rb
143
+ - lib/xc_metrics_aggregator/structure/structure.rb
144
+ - lib/xc_metrics_aggregator/version.rb
145
+ - lib/xcode_metrics_automation.applescript
146
+ - run.sh
147
+ - xc_metrics_aggregator.gemspec
148
+ homepage: https://github.com/yahoojapan/XCMetricsAggregator
149
+ licenses:
150
+ - MIT
151
+ metadata: {}
152
+ post_install_message:
153
+ rdoc_options: []
154
+ require_paths:
155
+ - lib
156
+ required_ruby_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ required_rubygems_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ requirements: []
167
+ rubygems_version: 3.1.2
168
+ signing_key:
169
+ specification_version: 4
170
+ summary: AppleScript for Xcode Metrics Organizer
171
+ test_files: []