TokiCLI 0.2.1 → 0.3.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 +4 -4
- data/.coveralls.yml +1 -0
- data/.gitignore +9 -17
- data/.rspec +3 -0
- data/.travis.yml +3 -0
- data/CHANGELOG.md +4 -0
- data/README.md +99 -163
- data/Rakefile +5 -0
- data/TokiCLI.gemspec +5 -4
- data/bin/toki +2 -2
- data/lib/API/helpers.rb +27 -170
- data/lib/API/toki_api.rb +227 -0
- data/lib/API/toki_db.rb +67 -0
- data/lib/TokiCLI.rb +270 -5
- data/lib/TokiCLI/adnimport.rb +202 -0
- data/lib/TokiCLI/fileops.rb +187 -0
- data/lib/TokiCLI/status.rb +49 -37
- data/lib/TokiCLI/version.rb +1 -1
- data/lib/TokiCLI/view.rb +133 -86
- data/lib/TokiServer/.bowerrc +3 -0
- data/lib/TokiServer/.gitignore +2 -0
- data/lib/TokiServer/Gemfile +1 -0
- data/lib/TokiServer/bower.json +0 -0
- data/lib/TokiServer/bower_components/fastclick/.bower.json +4 -4
- data/lib/TokiServer/bower_components/fastclick/bower.json +1 -1
- data/lib/TokiServer/bower_components/fastclick/lib/fastclick.js +33 -2
- data/lib/TokiServer/bower_components/foundation/.bower.json +5 -4
- data/lib/TokiServer/bower_components/foundation/bower.json +2 -1
- data/lib/TokiServer/bower_components/foundation/css/foundation.css +2173 -922
- data/lib/TokiServer/bower_components/foundation/css/foundation.css.map +7 -0
- data/lib/TokiServer/bower_components/foundation/css/normalize.css +53 -16
- data/lib/TokiServer/bower_components/foundation/css/normalize.css.map +7 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation.js +782 -542
- data/lib/TokiServer/bower_components/foundation/js/foundation.min.js +4 -3
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.abide.js +45 -31
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.accordion.js +12 -6
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.alert.js +5 -5
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.clearing.js +34 -10
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.dropdown.js +83 -29
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.equalizer.js +3 -3
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.interchange.js +25 -12
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.joyride.js +112 -40
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.js +19 -5
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.magellan.js +22 -11
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.offcanvas.js +52 -8
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.orbit.js +133 -271
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.reveal.js +27 -20
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.slider.js +73 -33
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.tab.js +88 -31
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.tooltip.js +7 -5
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.topbar.js +44 -24
- data/lib/TokiServer/bower_components/foundation/js/vendor/fastclick.js +2 -2
- data/lib/TokiServer/bower_components/foundation/js/vendor/modernizr.js +2 -2
- data/lib/TokiServer/bower_components/foundation/scss/foundation.scss +38 -38
- data/lib/TokiServer/bower_components/foundation/scss/foundation/_functions.scss +3 -3
- data/lib/TokiServer/bower_components/foundation/scss/foundation/_settings.scss +417 -271
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_accordion.scss +110 -6
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_alert-boxes.scss +2 -2
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_block-grid.scss +2 -2
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_breadcrumbs.scss +8 -3
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_button-groups.scss +99 -9
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_buttons.scss +66 -28
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_clearing.scss +5 -5
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_dropdown-buttons.scss +4 -4
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_dropdown.scss +48 -35
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_forms.scss +104 -32
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_global.scss +48 -30
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_grid.scss +19 -4
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_icon-bar.scss +293 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_joyride.scss +11 -9
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_keystrokes.scss +4 -4
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_labels.scss +4 -2
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_magellan.scss +1 -1
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_offcanvas.scss +193 -35
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_orbit.scss +92 -147
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_pagination.scss +22 -10
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_panels.scss +10 -7
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_pricing-tables.scss +11 -11
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_progress-bars.scss +2 -2
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_range-slider.scss +29 -9
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_reveal.scss +60 -56
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_side-nav.scss +3 -2
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_split-buttons.scss +2 -2
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_sub-nav.scss +2 -2
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_switches.scss +226 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_tables.scss +13 -7
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_tabs.scss +22 -8
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_thumbs.scss +2 -4
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_toolbar.scss +70 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_tooltips.scss +9 -7
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_top-bar.scss +77 -44
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_type.scss +21 -9
- data/lib/TokiServer/bower_components/modernizr/.bower.json +4 -4
- data/lib/TokiServer/bower_components/modernizr/feature-detects/workers-blobworkers.js +2 -2
- data/lib/TokiServer/bower_components/modernizr/grunt.js +1 -1
- data/lib/TokiServer/bower_components/modernizr/modernizr.js +2 -2
- data/lib/TokiServer/config.rb +0 -0
- data/lib/TokiServer/humans.txt +0 -0
- data/lib/TokiServer/{itunesicon.rb → itunesicons.rb} +25 -23
- data/lib/TokiServer/js/app.js +0 -0
- data/lib/TokiServer/public/stylesheets/app.css +2636 -1610
- data/lib/TokiServer/robots.txt +0 -0
- data/lib/TokiServer/scss/_settings.scss +0 -0
- data/lib/TokiServer/scss/app.scss +7 -1
- data/lib/TokiServer/tokiserver.rb +239 -244
- data/lib/TokiServer/views/activity.erb +42 -0
- data/lib/TokiServer/views/apps_total.erb +8 -2
- data/lib/TokiServer/views/error.erb +13 -4
- data/lib/TokiServer/views/index.erb +36 -27
- data/lib/TokiServer/views/logs_total.erb +34 -0
- data/spec/TokiCLI_spec.rb +354 -0
- data/spec/mock/mock.sqlite3 +0 -0
- data/spec/spec_helper.rb +26 -0
- metadata +78 -23
- data/lib/API/dbapi.rb +0 -488
- data/lib/TokiCLI/app.rb +0 -389
- data/lib/TokiCLI/authorize.rb +0 -77
- data/lib/TokiCLI/export.rb +0 -81
- data/lib/TokiCLI/get_channels.rb +0 -22
- data/lib/TokiCLI/get_messages.rb +0 -32
- data/lib/TokiCLI/import.rb +0 -122
- data/lib/TokiCLI/scan.rb +0 -19
- data/lib/TokiCLI/search_messages.rb +0 -23
- data/lib/TokiServer/README.md +0 -37
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_reveal-new.scss +0 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_switch.scss +0 -294
- data/lib/TokiServer/views/name_log.erb +0 -50
- data/lib/TokiServer/views/name_split.erb +0 -37
- data/lib/TokiServer/views/name_total.erb +0 -34
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<div class="row">
|
|
2
|
+
<div class="header">
|
|
3
|
+
<div class="small-6 columns">
|
|
4
|
+
<h1 class="logo">TOKI</h1>
|
|
5
|
+
</div>
|
|
6
|
+
<div class="small-6 columns">
|
|
7
|
+
<h1 class="title"><%= title %></h1>
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
<div class="row">
|
|
13
|
+
<div class="small-12 columns">
|
|
14
|
+
<h3 class="total"><%= name %> <%= toki.helpers.readable_time(toki.helpers.sec_to_time(total)) unless total.nil? %></h3>
|
|
15
|
+
<% unless icon.nil? %>
|
|
16
|
+
<div class="small-1 small-centered columns">
|
|
17
|
+
<img src="<%= icon %>" alt="icon" class="icon">
|
|
18
|
+
</div>
|
|
19
|
+
<% end %>
|
|
20
|
+
<br>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<% data.each do |id, log| %>
|
|
25
|
+
<div class="row">
|
|
26
|
+
<div class="small-4 columns">
|
|
27
|
+
<h4 class="bundle"> <%= log['name'] || log['bundle'] %> </h4>
|
|
28
|
+
</div>
|
|
29
|
+
<div class="small-6 columns">
|
|
30
|
+
<h4 class="start"> <%= log['start'] %> </h4>
|
|
31
|
+
</div>
|
|
32
|
+
<div class="small-2 columns time">
|
|
33
|
+
<h4 class="duration"> <%= toki.helpers.readable_time_log(toki.helpers.sec_to_time(log['duration']['seconds'])) %> </h4>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
<% end %>
|
|
37
|
+
|
|
38
|
+
<div class="row">
|
|
39
|
+
<div class="small-4 small-centered columns">
|
|
40
|
+
<h3 class="back"><a href="/">BACK TO INDEX</a></h3>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
@@ -9,14 +9,20 @@
|
|
|
9
9
|
</div>
|
|
10
10
|
</div>
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
<div class="row">
|
|
13
|
+
<div class="small-6 small-centered columns">
|
|
14
|
+
<h3 class="total"><%= toki.helpers.readable_time(toki.helpers.sec_to_time(total)) unless total.nil? %></h3>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<% data.reverse.each do |app| %>
|
|
13
19
|
<div class="row">
|
|
14
20
|
<div class="small-6 columns">
|
|
15
21
|
<h3 class="name"> <%= app['name'] || app['bundle'] %> </h3>
|
|
16
22
|
<h4 class="bundle"> <%= app['bundle'] %> </h4>
|
|
17
23
|
</div>
|
|
18
24
|
<div class="small-6 columns time">
|
|
19
|
-
<h4 class="seconds"> <%=
|
|
25
|
+
<h4 class="seconds"> <%= toki.helpers.readable_time(app['total']['time']) %> </h4>
|
|
20
26
|
</div>
|
|
21
27
|
</div>
|
|
22
28
|
<% end %>
|
|
@@ -11,13 +11,22 @@
|
|
|
11
11
|
|
|
12
12
|
<div class="row">
|
|
13
13
|
<div class="small-12 columns">
|
|
14
|
-
<
|
|
15
|
-
|
|
16
|
-
<p><%= resp %></p>
|
|
17
|
-
</div>
|
|
14
|
+
<h3 class="total"><%= error %></h3>
|
|
15
|
+
<br>
|
|
18
16
|
</div>
|
|
19
17
|
</div>
|
|
20
18
|
|
|
19
|
+
<% data.each do |k, v| %>
|
|
20
|
+
<div class="row">
|
|
21
|
+
<div class="small-4 columns">
|
|
22
|
+
<h4 class="start"> <%= k %> </h4>
|
|
23
|
+
</div>
|
|
24
|
+
<div class="small-8 columns time">
|
|
25
|
+
<h4 class="duration"> <%= v %> </h4>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
<% end %>
|
|
29
|
+
|
|
21
30
|
<div class="row">
|
|
22
31
|
<div class="small-4 small-centered columns">
|
|
23
32
|
<h3 class="back"><a href="/">BACK TO INDEX</a></h3>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<h1 class="logo">TOKI</h1>
|
|
5
5
|
</div>
|
|
6
6
|
<div class="small-7 columns">
|
|
7
|
-
<h1 class="title">
|
|
7
|
+
<h1 class="title">EXAMPLES</h1>
|
|
8
8
|
</div>
|
|
9
9
|
</div>
|
|
10
10
|
</div>
|
|
@@ -72,120 +72,129 @@
|
|
|
72
72
|
</div>
|
|
73
73
|
</div>
|
|
74
74
|
|
|
75
|
-
<div class="row">
|
|
75
|
+
<!-- <div class="row">
|
|
76
76
|
<div class="small-5 columns">
|
|
77
77
|
<h5 class="list">Complete log for app x</h5>
|
|
78
78
|
</div>
|
|
79
79
|
<div class="small-7 columns">
|
|
80
|
-
<h5 class="endpoint"><a href="/
|
|
80
|
+
<h5 class="endpoint"><a href="/logs/app/safari">/logs/app/safari</a></h5>
|
|
81
81
|
</div>
|
|
82
|
-
</div>
|
|
82
|
+
</div> -->
|
|
83
83
|
|
|
84
84
|
<div class="row">
|
|
85
85
|
<div class="small-5 columns">
|
|
86
86
|
<h5 class="list">Complete log for bundle x</h5>
|
|
87
87
|
</div>
|
|
88
88
|
<div class="small-7 columns">
|
|
89
|
-
<h5 class="endpoint"><a href="/bundle/com.apple.Safari
|
|
89
|
+
<h5 class="endpoint"><a href="/logs/bundle/com.apple.Safari">/logs/bundle/com.apple.Safari</a></h5>
|
|
90
90
|
</div>
|
|
91
91
|
</div>
|
|
92
|
-
|
|
92
|
+
<!--
|
|
93
93
|
<div class="row">
|
|
94
94
|
<div class="small-5 columns">
|
|
95
95
|
<h5 class="list">Total for app x (ex: Safari)</h5>
|
|
96
96
|
</div>
|
|
97
97
|
<div class="small-7 columns">
|
|
98
|
-
<h5 class="endpoint"><a href="/
|
|
98
|
+
<h5 class="endpoint"><a href="/logs/app/safari/total">/logs/app/safari/total</a></h5>
|
|
99
99
|
</div>
|
|
100
|
-
</div>
|
|
100
|
+
</div> -->
|
|
101
101
|
|
|
102
102
|
<div class="row">
|
|
103
103
|
<div class="small-5 columns">
|
|
104
104
|
<h5 class="list">Total for bundle x (ex: Safari)</h5>
|
|
105
105
|
</div>
|
|
106
106
|
<div class="small-7 columns">
|
|
107
|
-
<h5 class="endpoint"><a href="/bundle/com.apple.Safari/total">/bundle/com.apple.Safari/total</a></h5>
|
|
107
|
+
<h5 class="endpoint"><a href="/logs/bundle/com.apple.Safari/total">/logs/bundle/com.apple.Safari/total</a></h5>
|
|
108
108
|
</div>
|
|
109
109
|
</div>
|
|
110
110
|
|
|
111
|
-
<div class="row">
|
|
111
|
+
<!-- <div class="row">
|
|
112
112
|
<div class="small-5 columns">
|
|
113
113
|
<h5 class="list">Total for app x before day x</h5>
|
|
114
114
|
</div>
|
|
115
115
|
<div class="small-7 columns">
|
|
116
|
-
<h5 class="endpoint"><a href="/
|
|
116
|
+
<h5 class="endpoint"><a href="/logs/app/safari/before/2014-05-27">/logs/app/safari/before/2014-05-27</a></h5>
|
|
117
117
|
</div>
|
|
118
|
-
</div>
|
|
118
|
+
</div> -->
|
|
119
119
|
|
|
120
120
|
<div class="row">
|
|
121
121
|
<div class="small-5 columns">
|
|
122
122
|
<h5 class="list">Total for bundle x before day x</h5>
|
|
123
123
|
</div>
|
|
124
124
|
<div class="small-7 columns">
|
|
125
|
-
<h5 class="endpoint"><a href="/bundle/com.apple.Safari/before/2014-05-27">/bundle/com.apple.Safari/before/2014-05-27</a></h5>
|
|
125
|
+
<h5 class="endpoint"><a href="/logs/bundle/com.apple.Safari/before/2014-05-27">/logs/bundle/com.apple.Safari/before/2014-05-27</a></h5>
|
|
126
126
|
</div>
|
|
127
127
|
</div>
|
|
128
128
|
|
|
129
|
-
<div class="row">
|
|
129
|
+
<!-- <div class="row">
|
|
130
130
|
<div class="small-5 columns">
|
|
131
131
|
<h5 class="list">Total for app x since day x</h5>
|
|
132
132
|
</div>
|
|
133
133
|
<div class="small-7 columns">
|
|
134
|
-
<h5 class="endpoint"><a href="/
|
|
134
|
+
<h5 class="endpoint"><a href="/logs/app/safari/since/2014-05-27">/logs/app/safari/since/2014-05-27</a></h5>
|
|
135
135
|
</div>
|
|
136
|
-
</div>
|
|
136
|
+
</div> -->
|
|
137
137
|
|
|
138
138
|
<div class="row">
|
|
139
139
|
<div class="small-5 columns">
|
|
140
140
|
<h5 class="list">Total for bundle x since day x</h5>
|
|
141
141
|
</div>
|
|
142
142
|
<div class="small-7 columns">
|
|
143
|
-
<h5 class="endpoint"><a href="/bundle/com.apple.Safari/since/2014-05-27">/bundle/com.apple.Safari/since/2014-05-27</a></h5>
|
|
143
|
+
<h5 class="endpoint"><a href="/logs/bundle/com.apple.Safari/since/2014-05-27">/logs/bundle/com.apple.Safari/since/2014-05-27</a></h5>
|
|
144
144
|
</div>
|
|
145
145
|
</div>
|
|
146
146
|
|
|
147
|
-
<div class="row">
|
|
147
|
+
<!-- <div class="row">
|
|
148
148
|
<div class="small-5 columns">
|
|
149
149
|
<h5 class="list">Total for app x between day 1 and day 2</h5>
|
|
150
150
|
</div>
|
|
151
151
|
<div class="small-7 columns">
|
|
152
|
-
<h5 class="endpoint"><a href="/
|
|
152
|
+
<h5 class="endpoint"><a href="/logs/app/safari/range/2014-05-27/2014-05-30">/logs/app/safari/range/2014-05-27/2014-05-30</a></h5>
|
|
153
153
|
</div>
|
|
154
|
-
</div>
|
|
154
|
+
</div> -->
|
|
155
155
|
|
|
156
156
|
<div class="row">
|
|
157
157
|
<div class="small-5 columns">
|
|
158
158
|
<h5 class="list">Total for bundle x between day 1 and day 2</h5>
|
|
159
159
|
</div>
|
|
160
160
|
<div class="small-7 columns">
|
|
161
|
-
<h5 class="endpoint"><a href="/bundle/com.apple.Safari/range/2014-05-27/2014-05-30">/bundle/com.apple.Safari/range/2014-05-27/2014-05-30</a></h5>
|
|
161
|
+
<h5 class="endpoint"><a href="/logs/bundle/com.apple.Safari/range/2014-05-27/2014-05-30">/logs/bundle/com.apple.Safari/range/2014-05-27/2014-05-30</a></h5>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
|
|
165
|
+
<div class="row">
|
|
166
|
+
<div class="small-5 columns">
|
|
167
|
+
<h5 class="list">Activity</h5>
|
|
168
|
+
</div>
|
|
169
|
+
<div class="small-7 columns">
|
|
170
|
+
<h5 class="endpoint"><a href="/activity">/activity</a></h5>
|
|
162
171
|
</div>
|
|
163
172
|
</div>
|
|
164
173
|
|
|
165
174
|
<div class="row">
|
|
166
175
|
<div class="small-5 columns">
|
|
167
|
-
<h5 class="list">
|
|
176
|
+
<h5 class="list">Activity for a specific day</h5>
|
|
168
177
|
</div>
|
|
169
178
|
<div class="small-7 columns">
|
|
170
|
-
<h5 class="endpoint"><a href="/
|
|
179
|
+
<h5 class="endpoint"><a href="/activity/day/2014-09-14">/activity/day/2014-09-14</a></h5>
|
|
171
180
|
</div>
|
|
172
181
|
</div>
|
|
173
182
|
|
|
174
183
|
<div class="row">
|
|
175
184
|
<div class="small-5 columns">
|
|
176
|
-
<h5 class="list">
|
|
185
|
+
<h5 class="list">Activity since a specific day</h5>
|
|
177
186
|
</div>
|
|
178
187
|
<div class="small-7 columns">
|
|
179
|
-
<h5 class="endpoint"><a href="/
|
|
188
|
+
<h5 class="endpoint"><a href="/activity/since/2014-09-14">/activity/since/2014-09-14</a></h5>
|
|
180
189
|
</div>
|
|
181
190
|
</div>
|
|
182
191
|
|
|
183
192
|
<div class="row">
|
|
184
193
|
<div class="small-5 columns">
|
|
185
194
|
<h5 class="list">JSON API</h5>
|
|
186
|
-
<p>Add "/api" in front of the urls to get
|
|
195
|
+
<p>Add "/api" in front of the urls to get JSON</p>
|
|
187
196
|
</div>
|
|
188
197
|
<div class="small-7 columns">
|
|
189
|
-
<h5 class="endpoint"><a href="/api
|
|
198
|
+
<h5 class="endpoint"><a href="/api">/api</a></h5>
|
|
190
199
|
</div>
|
|
191
200
|
</div>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<div class="row">
|
|
2
|
+
<div class="header">
|
|
3
|
+
<div class="small-6 columns">
|
|
4
|
+
<h1 class="logo">TOKI</h1>
|
|
5
|
+
</div>
|
|
6
|
+
<div class="small-6 columns">
|
|
7
|
+
<h1 class="title"><%= title %></h1>
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
<div class="row">
|
|
13
|
+
<div class="small-6 small-centered columns">
|
|
14
|
+
<h3 class="total"><%= toki.helpers.readable_time(toki.helpers.sec_to_time(total)) unless total.nil? %></h3>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<% data.reverse.each do |app| %>
|
|
19
|
+
<div class="row">
|
|
20
|
+
<div class="small-6 columns">
|
|
21
|
+
<h3 class="name"> <%= app['name'] || app['bundle'] %> </h3>
|
|
22
|
+
<h4 class="bundle"> <%= app['bundle'] %> </h4>
|
|
23
|
+
</div>
|
|
24
|
+
<div class="small-6 columns time">
|
|
25
|
+
<h4 class="seconds"> <%= toki.helpers.readable_time(app['total']['time']) %> </h4>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
<% end %>
|
|
29
|
+
|
|
30
|
+
<div class="row">
|
|
31
|
+
<div class="small-4 small-centered columns">
|
|
32
|
+
<h3 class="back"><a href="/">BACK TO INDEX</a></h3>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe TokiCLI do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
TokiCLI::FileOps.any_instance.stub(:db_file).and_return('spec/mock/mock.sqlite3')
|
|
7
|
+
TokiCLI::FileOps.any_instance.stub(:bundles).and_return(nil)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe "#version" do
|
|
11
|
+
it 'has a version number' do
|
|
12
|
+
expect(TokiCLI::VERSION).not_to be nil
|
|
13
|
+
end
|
|
14
|
+
it "shows version number" do
|
|
15
|
+
printed = capture_stdout do
|
|
16
|
+
TokiCLI::App.start(['version'])
|
|
17
|
+
end
|
|
18
|
+
expect(printed).to include 'TokiCLI'
|
|
19
|
+
expect(printed).to include 'Version'
|
|
20
|
+
expect(printed).to include 'github'
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
describe "#total" do
|
|
25
|
+
it "shows the total for all apps" do
|
|
26
|
+
printed = capture_stdout do
|
|
27
|
+
TokiCLI::App.start(['total'])
|
|
28
|
+
end
|
|
29
|
+
expect(printed).to include *%w{com.apple.ReportPanic com.apple.SystemProfiler com.apple.systemuiserver com.apple.InstallAssistant.OSX10Seed1 com.apple.frameworks.diskimages.diuiagent com.apple.WebKit.WebContent com.apple.coreservices.uiagent com.apple.PhotoBooth com.apple.TextEdit com.apple.ProblemReporter com.apple.FontBook com.apple.DigitalColorMeter com.apple.KeyboardSetupAssistant com.apple.ScriptEditor2 com.apple.installer com.apple.DiskUtility com.apple.ActivityMonitor com.apple.iCal com.apple.iphonesimulator com.apple.NetAuthAgent com.apple.AddressBook com.apple.Console com.apple.mail com.apple.Notes com.apple.ScreenSaver.Engine com.apple.Automator com.apple.AirPlayUIAgent com.apple.FaceTime com.apple.iPhoto com.apple.dt.Xcode com.apple.QuickTimePlayerX com.apple.iChat com.apple.systempreferences com.apple.Preview com.apple.WebKit.PluginProcess com.apple.ScreenSharing com.apple.appstore com.apple.ASApplication com.apple.Terminal com.apple.iBooksX com.apple.iTunes com.apple.finder com.apple.Safari}
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe "#top" do
|
|
34
|
+
it "shows the top 10 apps" do
|
|
35
|
+
printed = capture_stdout do
|
|
36
|
+
TokiCLI::App.start(['top', '-n10'])
|
|
37
|
+
end
|
|
38
|
+
expect(printed).to include *%w{com.apple.Preview com.apple.WebKit.PluginProcess com.apple.ScreenSharing com.apple.appstore com.apple.ASApplication com.apple.Terminal com.apple.iBooksX com.apple.iTunes com.apple.finder com.apple.Safari}
|
|
39
|
+
expect(printed).to_not include 'com.apple.systempreferences'
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "shows the top apps" do
|
|
43
|
+
printed = capture_stdout do
|
|
44
|
+
TokiCLI::App.start(['top'])
|
|
45
|
+
end
|
|
46
|
+
expect(printed).to include *%w{com.apple.Terminal com.apple.iBooksX com.apple.iTunes com.apple.finder com.apple.Safari}
|
|
47
|
+
expect(printed).to_not include 'com.apple.ASApplication'
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe "day" do
|
|
52
|
+
it "shows apps for day 2014-09-15" do
|
|
53
|
+
printed = capture_stdout do
|
|
54
|
+
TokiCLI::App.start(['day', '2014-09-15'])
|
|
55
|
+
end
|
|
56
|
+
expect(printed).to include *%w{com.apple.finder com.apple.Safari}
|
|
57
|
+
expect(printed).to_not include 'com.apple.iTunes'
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
describe "range" do
|
|
62
|
+
it "shows apps between 2014-09-12 and 2014-09-15" do
|
|
63
|
+
printed = capture_stdout do
|
|
64
|
+
TokiCLI::App.start(['range', '2014-09-12', '2014-09-15'])
|
|
65
|
+
end
|
|
66
|
+
expect(printed).to include *%w{com.apple.NetAuthAgent com.apple.ActivityMonitor com.apple.installer com.apple.appstore com.apple.iTunes com.apple.Terminal com.apple.ScreenSaver.Engine com.apple.ScreenSharing com.apple.WebKit.PluginProcess com.apple.finder com.apple.Safari}
|
|
67
|
+
expect(printed).to_not include 'com.apple.TextEdit'
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
describe "before" do
|
|
72
|
+
it "shows apps before 2014-05-15" do
|
|
73
|
+
printed = capture_stdout do
|
|
74
|
+
TokiCLI::App.start(['before', '2014-05-15'])
|
|
75
|
+
end
|
|
76
|
+
expect(printed).to include *%w{com.apple.coreservices.uiagent com.apple.ReportPanic com.apple.frameworks.diskimages.diuiagent com.apple.installer com.apple.ProblemReporter com.apple.WebKit.WebContent com.apple.dt.Xcode com.apple.TextEdit com.apple.NetAuthAgent com.apple.DigitalColorMeter com.apple.KeyboardSetupAssistant com.apple.ActivityMonitor com.apple.Automator com.apple.mail com.apple.iphonesimulator com.apple.Terminal com.apple.Console com.apple.Notes com.apple.iChat com.apple.WebKit.PluginProcess com.apple.Preview com.apple.iPhoto com.apple.ASApplication com.apple.systempreferences com.apple.ScreenSharing com.apple.appstore com.apple.QuickTimePlayerX com.apple.iTunes com.apple.finder com.apple.Safari}
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
describe "since" do
|
|
81
|
+
it "shows apps since 2014-09-12" do
|
|
82
|
+
printed = capture_stdout do
|
|
83
|
+
TokiCLI::App.start(['since', '2014-09-12'])
|
|
84
|
+
end
|
|
85
|
+
expect(printed).to include *%w{com.apple.NetAuthAgent com.apple.ActivityMonitor com.apple.installer com.apple.appstore com.apple.iTunes com.apple.Terminal com.apple.ScreenSaver.Engine com.apple.ScreenSharing com.apple.WebKit.PluginProcess com.apple.finder com.apple.Safari}
|
|
86
|
+
expect(printed).to_not include 'com.apple.TextEdit'
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
describe "activity" do
|
|
91
|
+
it "shows activity for 2014-09-14" do
|
|
92
|
+
printed = capture_stdout do
|
|
93
|
+
TokiCLI::App.start(['activity', '--day', '2014-09-14'])
|
|
94
|
+
end
|
|
95
|
+
expect(printed).to include *['com.apple.finder | 02:00:00 | 00m 04s | 3009986780794979448', 'com.apple.Safari | 17:00:00 | 02m 02s | 279578532860092796', 'com.apple.finder | 23:30:00 | 01m 37s | 5321635596015812810']
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
describe "activity" do
|
|
100
|
+
it "shows activity since 2014-09-14" do
|
|
101
|
+
printed = capture_stdout do
|
|
102
|
+
TokiCLI::App.start(['activity', '--since', '2014-09-14'])
|
|
103
|
+
end
|
|
104
|
+
expect(printed).to include *['com.apple.finder | 02:00:00 | 00m 04s | 3009986780794979448', 'com.apple.Safari | 17:00:00 | 02m 02s | 279578532860092796', 'com.apple.finder | 23:30:00 | 01m 37s | 5321635596015812810', 'com.apple.finder | 08:15:00 | 00m 29s | 2450616761580369798', 'com.apple.Safari | 15:00:00 | 00m 06s | 7557789946794681026']
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
describe "bundle" do
|
|
109
|
+
it "shows log for an app" do
|
|
110
|
+
printed = capture_stdout do
|
|
111
|
+
TokiCLI::App.start(['bundle', 'com.apple.iTunes'])
|
|
112
|
+
end
|
|
113
|
+
expect(printed).to include *['2014-04-13', '16:45:00 | 01m 02s | 93837223385103975', '2014-04-14', '09:15:00 | 00m 18s | 9048025340952260608', '12:30:00 | 00m 27s | 8045504996000693405', 'Total: 3h 52m 32s']
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
describe TokiCLI::TokiAPI do
|
|
120
|
+
|
|
121
|
+
let(:toki) { TokiCLI::TokiAPI.new('spec/mock/mock.sqlite3', {}) }
|
|
122
|
+
|
|
123
|
+
describe "#apps_total" do
|
|
124
|
+
it "returns the total for all apps" do
|
|
125
|
+
toki.apps_total
|
|
126
|
+
resp = JSON.parse(toki.response)
|
|
127
|
+
expect(resp['meta']['code']).to eq 200
|
|
128
|
+
expect(resp['meta']['request']['command']).to eq 'apps_total'
|
|
129
|
+
expect(resp['data'].first['bundle']).to eq 'com.apple.ReportPanic'
|
|
130
|
+
expect(resp['data'].first['total']['seconds']).to eq 4
|
|
131
|
+
expect(resp['data'].first['total']['time']['hours']).to eq 0
|
|
132
|
+
expect(resp['data'].first['total']['time']['minutes']).to eq 0
|
|
133
|
+
expect(resp['data'].first['total']['time']['seconds']).to eq 4
|
|
134
|
+
|
|
135
|
+
expect(resp['data'].last['bundle']).to eq 'com.apple.Safari'
|
|
136
|
+
expect(resp['data'].last['total']['seconds']).to eq 958537
|
|
137
|
+
expect(resp['data'].last['total']['time']['hours']).to eq 266
|
|
138
|
+
expect(resp['data'].last['total']['time']['minutes']).to eq 15
|
|
139
|
+
expect(resp['data'].last['total']['time']['seconds']).to eq 37
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
describe "#apps_top" do
|
|
144
|
+
it "returns top apps" do
|
|
145
|
+
toki.apps_top
|
|
146
|
+
resp = JSON.parse(toki.response)
|
|
147
|
+
expect(resp['meta']['code']).to eq 200
|
|
148
|
+
expect(resp['meta']['request']['command']).to eq 'apps_top'
|
|
149
|
+
expect(resp['data'].first['bundle']).to eq 'com.apple.Terminal'
|
|
150
|
+
expect(resp['data'].first['total']['seconds']).to eq 7510
|
|
151
|
+
expect(resp['data'].first['total']['time']['hours']).to eq 2
|
|
152
|
+
expect(resp['data'].first['total']['time']['minutes']).to eq 5
|
|
153
|
+
expect(resp['data'].first['total']['time']['seconds']).to eq 10
|
|
154
|
+
|
|
155
|
+
expect(resp['data'].last['bundle']).to eq 'com.apple.Safari'
|
|
156
|
+
expect(resp['data'].last['total']['seconds']).to eq 958537
|
|
157
|
+
expect(resp['data'].last['total']['time']['hours']).to eq 266
|
|
158
|
+
expect(resp['data'].last['total']['time']['minutes']).to eq 15
|
|
159
|
+
expect(resp['data'].last['total']['time']['seconds']).to eq 37
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it "returns top 10 apps" do
|
|
163
|
+
toki.apps_top(10)
|
|
164
|
+
resp = JSON.parse(toki.response)
|
|
165
|
+
expect(resp['meta']['code']).to eq 200
|
|
166
|
+
expect(resp['meta']['request']['command']).to eq 'apps_top'
|
|
167
|
+
expect(resp['data'].first['bundle']).to eq 'com.apple.Preview'
|
|
168
|
+
expect(resp['data'].first['total']['seconds']).to eq 3123
|
|
169
|
+
expect(resp['data'].first['total']['time']['hours']).to eq 0
|
|
170
|
+
expect(resp['data'].first['total']['time']['minutes']).to eq 52
|
|
171
|
+
expect(resp['data'].first['total']['time']['seconds']).to eq 3
|
|
172
|
+
|
|
173
|
+
expect(resp['data'].last['bundle']).to eq 'com.apple.Safari'
|
|
174
|
+
expect(resp['data'].last['total']['seconds']).to eq 958537
|
|
175
|
+
expect(resp['data'].last['total']['time']['hours']).to eq 266
|
|
176
|
+
expect(resp['data'].last['total']['time']['minutes']).to eq 15
|
|
177
|
+
expect(resp['data'].last['total']['time']['seconds']).to eq 37
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
describe "#apps_day" do
|
|
182
|
+
it "returns apps for day 2014-09-15" do
|
|
183
|
+
toki.apps_day('2014-09-15')
|
|
184
|
+
resp = JSON.parse(toki.response)
|
|
185
|
+
expect(resp['meta']['code']).to eq 200
|
|
186
|
+
expect(resp['meta']['request']['command']).to eq 'apps_day'
|
|
187
|
+
expect(resp['data'].first['bundle']).to eq 'com.apple.finder'
|
|
188
|
+
expect(resp['data'].first['total']['seconds']).to eq 979
|
|
189
|
+
expect(resp['data'].first['total']['time']['hours']).to eq 0
|
|
190
|
+
expect(resp['data'].first['total']['time']['minutes']).to eq 16
|
|
191
|
+
expect(resp['data'].first['total']['time']['seconds']).to eq 19
|
|
192
|
+
|
|
193
|
+
expect(resp['data'].last['bundle']).to eq 'com.apple.Safari'
|
|
194
|
+
expect(resp['data'].last['total']['seconds']).to eq 5058
|
|
195
|
+
expect(resp['data'].last['total']['time']['hours']).to eq 1
|
|
196
|
+
expect(resp['data'].last['total']['time']['minutes']).to eq 24
|
|
197
|
+
expect(resp['data'].last['total']['time']['seconds']).to eq 18
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
describe "#apps_range" do
|
|
202
|
+
it "returns apps between '2014-09-12' and '2014-09-15'" do
|
|
203
|
+
toki.apps_range('2014-09-12', '2014-09-15')
|
|
204
|
+
resp = JSON.parse(toki.response)
|
|
205
|
+
expect(resp['meta']['code']).to eq 200
|
|
206
|
+
expect(resp['meta']['request']['command']).to eq 'apps_range'
|
|
207
|
+
expect(resp['data'].first['bundle']).to eq 'com.apple.NetAuthAgent'
|
|
208
|
+
expect(resp['data'].first['total']['seconds']).to eq 5
|
|
209
|
+
expect(resp['data'].first['total']['time']['hours']).to eq 0
|
|
210
|
+
expect(resp['data'].first['total']['time']['minutes']).to eq 0
|
|
211
|
+
expect(resp['data'].first['total']['time']['seconds']).to eq 5
|
|
212
|
+
|
|
213
|
+
expect(resp['data'].last['bundle']).to eq 'com.apple.Safari'
|
|
214
|
+
expect(resp['data'].last['total']['seconds']).to eq 22017
|
|
215
|
+
expect(resp['data'].last['total']['time']['hours']).to eq 6
|
|
216
|
+
expect(resp['data'].last['total']['time']['minutes']).to eq 6
|
|
217
|
+
expect(resp['data'].last['total']['time']['seconds']).to eq 57
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
describe "#apps_since" do
|
|
222
|
+
it "returns apps since day 2014-09-14" do
|
|
223
|
+
toki.apps_since('2014-09-14')
|
|
224
|
+
resp = JSON.parse(toki.response)
|
|
225
|
+
expect(resp['meta']['code']).to eq 200
|
|
226
|
+
expect(resp['meta']['request']['command']).to eq 'apps_since'
|
|
227
|
+
expect(resp['data'].first['bundle']).to eq 'com.apple.ActivityMonitor'
|
|
228
|
+
expect(resp['data'].first['total']['seconds']).to eq 6
|
|
229
|
+
expect(resp['data'].first['total']['time']['hours']).to eq 0
|
|
230
|
+
expect(resp['data'].first['total']['time']['minutes']).to eq 0
|
|
231
|
+
expect(resp['data'].first['total']['time']['seconds']).to eq 6
|
|
232
|
+
|
|
233
|
+
expect(resp['data'].last['bundle']).to eq 'com.apple.Safari'
|
|
234
|
+
expect(resp['data'].last['total']['seconds']).to eq 19902
|
|
235
|
+
expect(resp['data'].last['total']['time']['hours']).to eq 5
|
|
236
|
+
expect(resp['data'].last['total']['time']['minutes']).to eq 31
|
|
237
|
+
expect(resp['data'].last['total']['time']['seconds']).to eq 42
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
describe "#apps_before" do
|
|
242
|
+
it "returns apps before day 2014-09-01" do
|
|
243
|
+
toki.apps_before('2014-09-01')
|
|
244
|
+
resp = JSON.parse(toki.response)
|
|
245
|
+
expect(resp['meta']['code']).to eq 200
|
|
246
|
+
expect(resp['meta']['request']['command']).to eq 'apps_before'
|
|
247
|
+
expect(resp['data'].first['bundle']).to eq 'com.apple.ReportPanic'
|
|
248
|
+
expect(resp['data'].first['total']['seconds']).to eq 4
|
|
249
|
+
expect(resp['data'].first['total']['time']['hours']).to eq 0
|
|
250
|
+
expect(resp['data'].first['total']['time']['minutes']).to eq 0
|
|
251
|
+
expect(resp['data'].first['total']['time']['seconds']).to eq 4
|
|
252
|
+
|
|
253
|
+
expect(resp['data'].last['bundle']).to eq 'com.apple.Safari'
|
|
254
|
+
expect(resp['data'].last['total']['seconds']).to eq 831821
|
|
255
|
+
expect(resp['data'].last['total']['time']['hours']).to eq 231
|
|
256
|
+
expect(resp['data'].last['total']['time']['minutes']).to eq 3
|
|
257
|
+
expect(resp['data'].last['total']['time']['seconds']).to eq 41
|
|
258
|
+
end
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
describe "#bundle_log" do
|
|
262
|
+
it "returns log for com.apple.finder" do
|
|
263
|
+
toki.bundle_log('com.apple.finder')
|
|
264
|
+
resp = JSON.parse(toki.response)
|
|
265
|
+
expect(resp['meta']['code']).to eq 200
|
|
266
|
+
expect(resp['meta']['request']['command']).to eq 'bundle_log'
|
|
267
|
+
expect(resp['data'].size).to eq 1397
|
|
268
|
+
expect(resp['data']['6853206097451538432'].to_a).to eq [["bundle", "com.apple.finder"], ["name", nil], ["start", "2014-04-12 15:15:00 +0200"], ["duration", {"seconds"=>10, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>10}}]]
|
|
269
|
+
expect(resp['data']['8223841650221385607'].to_a).to eq [["bundle", "com.apple.finder"], ["name", nil], ["start", "2014-09-15 10:45:00 +0200"], ["duration", {"seconds"=>70, "time"=>{"hours"=>0, "minutes"=>1, "seconds"=>10}}]]
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
describe "#bundle_log_since" do
|
|
274
|
+
it "returns log for com.apple.finder since 2014-09-01" do
|
|
275
|
+
toki.bundle_log_since('com.apple.finder', '2014-09-01')
|
|
276
|
+
resp = JSON.parse(toki.response)
|
|
277
|
+
expect(resp['meta']['code']).to eq 200
|
|
278
|
+
expect(resp['meta']['request']['command']).to eq 'bundle_log_since'
|
|
279
|
+
expect(resp['data'].size).to eq 131
|
|
280
|
+
expect(resp['data']['3343489613556420396'].to_a).to eq [["bundle", "com.apple.finder"], ["name", nil], ["start", "2014-09-01 08:45:00 +0200"], ["duration", {"seconds"=>15, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>15}}]]
|
|
281
|
+
expect(resp['data']['8223841650221385607'].to_a).to eq [["bundle", "com.apple.finder"], ["name", nil], ["start", "2014-09-15 10:45:00 +0200"], ["duration", {"seconds"=>70, "time"=>{"hours"=>0, "minutes"=>1, "seconds"=>10}}]]
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
describe "#bundle_log_before" do
|
|
286
|
+
it "returns log for com.apple.finder before 2014-09-01" do
|
|
287
|
+
toki.bundle_log_before('com.apple.finder', '2014-09-01')
|
|
288
|
+
resp = JSON.parse(toki.response)
|
|
289
|
+
expect(resp['meta']['code']).to eq 200
|
|
290
|
+
expect(resp['meta']['request']['command']).to eq 'bundle_log_before'
|
|
291
|
+
expect(resp['data'].size).to eq 1266
|
|
292
|
+
arr = resp['data'].to_a
|
|
293
|
+
expect(arr.first).to eq ["6853206097451538432", {"bundle"=>"com.apple.finder", "name"=>nil, "start"=>"2014-04-12 15:15:00 +0200", "duration"=>{"seconds"=>10, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>10}}}]
|
|
294
|
+
expect(arr.last).to eq ["3110227595022506229", {"bundle"=>"com.apple.finder", "name"=>nil, "start"=>"2014-08-31 23:00:00 +0200", "duration"=>{"seconds"=>30, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>30}}}]
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
describe "#bundle_log_range" do
|
|
299
|
+
it "returns log for com.apple.finder between 2014-09-01 and 2014-09-04" do
|
|
300
|
+
toki.bundle_log_range('com.apple.finder', '2014-09-01', '2014-09-04')
|
|
301
|
+
resp = JSON.parse(toki.response)
|
|
302
|
+
expect(resp['meta']['code']).to eq 200
|
|
303
|
+
expect(resp['meta']['request']['command']).to eq 'bundle_log_range'
|
|
304
|
+
expect(resp['data'].size).to eq 26
|
|
305
|
+
arr = resp['data'].to_a
|
|
306
|
+
expect(arr.first).to eq ["3343489613556420396", {"bundle"=>"com.apple.finder", "name"=>nil, "start"=>"2014-09-01 08:45:00 +0200", "duration"=>{"seconds"=>15, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>15}}}]
|
|
307
|
+
expect(arr.last).to eq ["249678006045203865", {"bundle"=>"com.apple.finder", "name"=>nil, "start"=>"2014-09-03 21:30:00 +0200", "duration"=>{"seconds"=>16, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>16}}}]
|
|
308
|
+
end
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
describe "#bundle_log_day" do
|
|
312
|
+
it "returns log for com.apple.finder for 2014-09-01" do
|
|
313
|
+
toki.bundle_log_day('com.apple.finder', '2014-09-01')
|
|
314
|
+
resp = JSON.parse(toki.response)
|
|
315
|
+
expect(resp['meta']['code']).to eq 200
|
|
316
|
+
expect(resp['meta']['request']['command']).to eq 'bundle_log_range'
|
|
317
|
+
expect(resp['meta']['request']['args']).to eq ["com.apple.finder", "2014-09-01", "2014-09-02"]
|
|
318
|
+
expect(resp['data'].size).to eq 13
|
|
319
|
+
arr = resp['data'].to_a
|
|
320
|
+
expect(arr.first).to eq ["3343489613556420396", {"bundle"=>"com.apple.finder", "name"=>nil, "start"=>"2014-09-01 08:45:00 +0200", "duration"=>{"seconds"=>15, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>15}}}]
|
|
321
|
+
expect(arr.last).to eq ["8777542996540152763", {"bundle"=>"com.apple.finder", "name"=>nil, "start"=>"2014-09-01 21:45:00 +0200", "duration"=>{"seconds"=>61, "time"=>{"hours"=>0, "minutes"=>1, "seconds"=>1}}}]
|
|
322
|
+
end
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
describe "#log_since" do
|
|
326
|
+
it "returns log for recent activity" do
|
|
327
|
+
toki.log_since('2014-09-13')
|
|
328
|
+
resp = JSON.parse(toki.response)
|
|
329
|
+
expect(resp['meta']['code']).to eq 200
|
|
330
|
+
expect(resp['meta']['request']['command']).to eq 'log_since'
|
|
331
|
+
expect(resp['meta']['request']['args']).to eq ["2014-09-13"]
|
|
332
|
+
expect(resp['data'].size).to eq 87
|
|
333
|
+
arr = resp['data'].to_a
|
|
334
|
+
expect(arr.first).to eq ["1226267152535471391", {"bundle"=>"com.apple.appstore", "name"=>nil, "start"=>"2014-09-13 10:15:00 +0200", "duration"=>{"seconds"=>3, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>3}}}]
|
|
335
|
+
expect(arr.last).to eq ["7557789946794681026", {"bundle"=>"com.apple.Safari", "name"=>nil, "start"=>"2014-09-15 15:00:00 +0200", "duration"=>{"seconds"=>6, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>6}}}]
|
|
336
|
+
end
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
describe "#log_day" do
|
|
340
|
+
it "returns log for '2014-09-13'" do
|
|
341
|
+
toki.log_day('2014-09-13')
|
|
342
|
+
resp = JSON.parse(toki.response)
|
|
343
|
+
expect(resp['meta']['code']).to eq 200
|
|
344
|
+
expect(resp['meta']['request']['command']).to eq 'log_range'
|
|
345
|
+
expect(resp['meta']['request']['args']).to eq ["2014-09-13"]
|
|
346
|
+
expect(resp['data'].size).to eq 17
|
|
347
|
+
arr = resp['data'].to_a
|
|
348
|
+
expect(arr.first).to eq ["6362298701774470696", {"bundle"=>"com.apple.Safari", "name"=>nil, "start"=>"2014-09-13 10:15:00 +0200", "duration"=>{"seconds"=>54, "time"=>{"hours"=>0, "minutes"=>0, "seconds"=>54}}}]
|
|
349
|
+
expect(arr.last).to eq ["2496889557830869773", {"bundle"=>"com.apple.finder", "name"=>nil, "start"=>"2014-09-13 19:00:00 +0200", "duration"=>{"seconds"=>297, "time"=>{"hours"=>0, "minutes"=>4, "seconds"=>57}}}]
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
end
|