snapstats 0.0.1
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 +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +34 -0
- data/app/assets/javascripts/snapstats/application.js +19 -0
- data/app/assets/javascripts/snapstats/lib/d3.min.js +5 -0
- data/app/assets/javascripts/snapstats/lib/jquery.min.js +4 -0
- data/app/assets/javascripts/snapstats/lib/metricsgraphics.min.js +3 -0
- data/app/assets/javascripts/snapstats/main/main_controller.js +51 -0
- data/app/assets/javascripts/snapstats/performances/performances_controller.js +49 -0
- data/app/assets/javascripts/snapstats/users/users_controller.js +47 -0
- data/app/assets/stylesheets/snapstats/animate.css +3158 -0
- data/app/assets/stylesheets/snapstats/app.css +58 -0
- data/app/assets/stylesheets/snapstats/application.css +18 -0
- data/app/assets/stylesheets/snapstats/bootstrap.min.css +5 -0
- data/app/assets/stylesheets/snapstats/metricsgraphics-demo-dark.css +636 -0
- data/app/assets/stylesheets/snapstats/metricsgraphics.css +363 -0
- data/app/controllers/snapstats/application_controller.rb +5 -0
- data/app/controllers/snapstats/mains_controller.rb +18 -0
- data/app/controllers/snapstats/performances_controller.rb +18 -0
- data/app/controllers/snapstats/users_controller.rb +22 -0
- data/app/helpers/snapstats/application_helper.rb +7 -0
- data/app/views/layouts/snapstats/application.html.erb +20 -0
- data/app/views/snapstats/application/_main_menu.html.erb +8 -0
- data/app/views/snapstats/mains/show.html.erb +87 -0
- data/app/views/snapstats/performances/show.html.erb +80 -0
- data/app/views/snapstats/users/activity.html.erb +49 -0
- data/app/views/snapstats/users/show.html.erb +32 -0
- data/config/routes.rb +23 -0
- data/lib/event_logger/event_logger.rb +45 -0
- data/lib/event_logger/event_logger_static.rb +55 -0
- data/lib/event_logger/event_logger_store.rb +89 -0
- data/lib/event_reader/event_reader.rb +168 -0
- data/lib/ext/redis.rb +19 -0
- data/lib/snapstats/engine.rb +9 -0
- data/lib/snapstats/version.rb +3 -0
- data/lib/snapstats.rb +8 -0
- data/lib/tasks/snapstats_tasks.rake +4 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config/application.rb +23 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +29 -0
- data/test/dummy/config/environments/production.rb +80 -0
- data/test/dummy/config/environments/test.rb +36 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +12 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/public/404.html +58 -0
- data/test/dummy/public/422.html +58 -0
- data/test/dummy/public/500.html +57 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/snapstats_test.rb +7 -0
- data/test/test_helper.rb +15 -0
- metadata +206 -0
@@ -0,0 +1,363 @@
|
|
1
|
+
.mg-active-datapoint {
|
2
|
+
fill: black;
|
3
|
+
font-size: 0.9rem;
|
4
|
+
font-weight: 400;
|
5
|
+
opacity: 0.8;
|
6
|
+
}
|
7
|
+
|
8
|
+
.mg-area1-color {
|
9
|
+
fill: #0000ff;
|
10
|
+
}
|
11
|
+
|
12
|
+
.mg-area2-color {
|
13
|
+
fill: #05b378;
|
14
|
+
}
|
15
|
+
|
16
|
+
.mg-area3-color {
|
17
|
+
fill: #db4437;
|
18
|
+
}
|
19
|
+
|
20
|
+
.mg-area4-color {
|
21
|
+
fill: #f8b128;
|
22
|
+
}
|
23
|
+
|
24
|
+
.mg-area5-color {
|
25
|
+
fill: #5c5c5c;
|
26
|
+
}
|
27
|
+
|
28
|
+
.mg-barplot rect.mg-bar {
|
29
|
+
shape-rendering: auto;
|
30
|
+
fill: #b6b6fc;
|
31
|
+
}
|
32
|
+
|
33
|
+
.mg-barplot rect.mg-bar.active {
|
34
|
+
fill: #9e9efc;
|
35
|
+
}
|
36
|
+
|
37
|
+
.mg-barplot .mg-bar-prediction {
|
38
|
+
fill: #5b5b5b;
|
39
|
+
}
|
40
|
+
|
41
|
+
.mg-barplot .mg-bar-baseline {
|
42
|
+
stroke: #5b5b5b;
|
43
|
+
stroke-width: 2;
|
44
|
+
}
|
45
|
+
|
46
|
+
.mg-baselines line {
|
47
|
+
opacity: 1;
|
48
|
+
shape-rendering: auto;
|
49
|
+
stroke: #b3b2b2;
|
50
|
+
stroke-width: 1px;
|
51
|
+
}
|
52
|
+
|
53
|
+
.mg-baselines text {
|
54
|
+
fill: black;
|
55
|
+
font-size: 0.7rem;
|
56
|
+
opacity: 0.5;
|
57
|
+
stroke: none;
|
58
|
+
}
|
59
|
+
|
60
|
+
.mg-chart-title .popover {
|
61
|
+
font-size: 0.95rem;
|
62
|
+
}
|
63
|
+
|
64
|
+
.mg-chart-title .popover-content {
|
65
|
+
cursor: auto;
|
66
|
+
line-height: 17px;
|
67
|
+
}
|
68
|
+
|
69
|
+
.mg-chart-title .popover.top,
|
70
|
+
.mg-data-table .popover.top {
|
71
|
+
margin-top: 0;
|
72
|
+
}
|
73
|
+
|
74
|
+
.mg-chart-title {
|
75
|
+
cursor: default;
|
76
|
+
font-size: 1.8rem;
|
77
|
+
padding-top: 8px;
|
78
|
+
text-align: center;
|
79
|
+
}
|
80
|
+
|
81
|
+
.mg-chart-title .fa {
|
82
|
+
color: #ccc;
|
83
|
+
font-size: 1.2rem;
|
84
|
+
padding-left: 4px;
|
85
|
+
vertical-align: top;
|
86
|
+
}
|
87
|
+
|
88
|
+
.mg-chart-title .fa.warning {
|
89
|
+
font-weight: 300;
|
90
|
+
}
|
91
|
+
|
92
|
+
.mg-points circle {
|
93
|
+
opacity: 0.85;
|
94
|
+
}
|
95
|
+
|
96
|
+
.mg-data-table {
|
97
|
+
margin-top: 30px;
|
98
|
+
}
|
99
|
+
|
100
|
+
.mg-data-table thead tr th {
|
101
|
+
border-bottom: 1px solid darkgray;
|
102
|
+
cursor: default;
|
103
|
+
font-size: 1.1rem;
|
104
|
+
font-weight: normal;
|
105
|
+
padding: 5px 5px 8px 5px;
|
106
|
+
text-align: right;
|
107
|
+
}
|
108
|
+
|
109
|
+
.mg-data-table thead tr th .fa {
|
110
|
+
color: #ccc;
|
111
|
+
padding-left: 4px;
|
112
|
+
}
|
113
|
+
|
114
|
+
.mg-data-table thead tr th .popover {
|
115
|
+
font-size: 1rem;
|
116
|
+
font-weight: normal;
|
117
|
+
}
|
118
|
+
|
119
|
+
.mg-data-table .secondary-title {
|
120
|
+
color: darkgray;
|
121
|
+
}
|
122
|
+
|
123
|
+
.mg-data-table tbody tr td {
|
124
|
+
margin: 2px;
|
125
|
+
padding: 5px;
|
126
|
+
vertical-align: top;
|
127
|
+
}
|
128
|
+
|
129
|
+
.mg-data-table tbody tr td.table-text {
|
130
|
+
opacity: 0.8;
|
131
|
+
padding-left: 30px;
|
132
|
+
}
|
133
|
+
|
134
|
+
.mg-y-axis line.mg-extended-y-ticks {
|
135
|
+
opacity: 0.4;
|
136
|
+
}
|
137
|
+
|
138
|
+
.mg-x-axis line.mg-extended-x-ticks {
|
139
|
+
opacity: 0.4;
|
140
|
+
}
|
141
|
+
|
142
|
+
.mg-histogram .axis path,
|
143
|
+
.mg-histogram .axis line {
|
144
|
+
fill: none;
|
145
|
+
opacity: 0.7;
|
146
|
+
shape-rendering: auto;
|
147
|
+
stroke: #ccc;
|
148
|
+
}
|
149
|
+
|
150
|
+
.mg-histogram .mg-bar rect {
|
151
|
+
fill: #b6b6fc;
|
152
|
+
shape-rendering: auto;
|
153
|
+
}
|
154
|
+
|
155
|
+
.mg-histogram .mg-bar rect.active {
|
156
|
+
fill: #9e9efc;
|
157
|
+
}
|
158
|
+
|
159
|
+
.mg-least-squares-line {
|
160
|
+
stroke: red;
|
161
|
+
stroke-width: 1px;
|
162
|
+
}
|
163
|
+
|
164
|
+
.mg-lowess-line {
|
165
|
+
fill: none;
|
166
|
+
stroke: red;
|
167
|
+
}
|
168
|
+
|
169
|
+
.mg-line1-color {
|
170
|
+
stroke: #4040e8;
|
171
|
+
}
|
172
|
+
|
173
|
+
.mg-hover-line1-color {
|
174
|
+
fill: #4040e8;
|
175
|
+
}
|
176
|
+
|
177
|
+
.mg-line2-color {
|
178
|
+
stroke: #05b378;
|
179
|
+
}
|
180
|
+
|
181
|
+
.mg-hover-line2-color {
|
182
|
+
fill: #05b378;
|
183
|
+
}
|
184
|
+
|
185
|
+
.mg-line3-color {
|
186
|
+
stroke: #db4437;
|
187
|
+
}
|
188
|
+
|
189
|
+
.mg-hover-line3-color {
|
190
|
+
fill: #db4437;
|
191
|
+
}
|
192
|
+
|
193
|
+
.mg-line4-color {
|
194
|
+
stroke: #f8b128;
|
195
|
+
}
|
196
|
+
|
197
|
+
.mg-hover-line4-color {
|
198
|
+
fill: #f8b128;
|
199
|
+
}
|
200
|
+
|
201
|
+
.mg-line5-color {
|
202
|
+
stroke: #5c5c5c;
|
203
|
+
}
|
204
|
+
|
205
|
+
.mg-hover-line5-color {
|
206
|
+
fill: #5c5c5c;
|
207
|
+
}
|
208
|
+
|
209
|
+
.mg-line1-legend-color {
|
210
|
+
color: #4040e8;
|
211
|
+
}
|
212
|
+
|
213
|
+
.mg-line2-legend-color {
|
214
|
+
color: #05b378;
|
215
|
+
}
|
216
|
+
|
217
|
+
.mg-line3-legend-color {
|
218
|
+
color: #db4437;
|
219
|
+
}
|
220
|
+
|
221
|
+
.mg-line4-legend-color {
|
222
|
+
color: #f8b128;
|
223
|
+
}
|
224
|
+
|
225
|
+
.mg-line5-legend-color {
|
226
|
+
color: #5c5c5c;
|
227
|
+
}
|
228
|
+
|
229
|
+
.mg-main-area-solid svg .mg-main-area {
|
230
|
+
fill: #ccccff;
|
231
|
+
opacity: 1;
|
232
|
+
}
|
233
|
+
|
234
|
+
.mg-markers line {
|
235
|
+
opacity: 0.9;
|
236
|
+
shape-rendering: auto;
|
237
|
+
stroke: #b3b2b2;
|
238
|
+
stroke-width: 1px;
|
239
|
+
}
|
240
|
+
|
241
|
+
.mg-markers text {
|
242
|
+
fill: black;
|
243
|
+
font-size: 0.7rem;
|
244
|
+
opacity: 0.5;
|
245
|
+
stroke: none;
|
246
|
+
}
|
247
|
+
|
248
|
+
.mg-missing-text {
|
249
|
+
opacity: 0.9;
|
250
|
+
}
|
251
|
+
|
252
|
+
.mg-missing-background {
|
253
|
+
stroke: blue;
|
254
|
+
fill: none;
|
255
|
+
stroke-dasharray: 10,5;
|
256
|
+
stroke-opacity: 0.05;
|
257
|
+
stroke-width: 2;
|
258
|
+
}
|
259
|
+
|
260
|
+
.mg-missing .mg-main-line {
|
261
|
+
opacity: 0.1;
|
262
|
+
}
|
263
|
+
|
264
|
+
.mg-missing .mg-main-area {
|
265
|
+
opacity: 0.03;
|
266
|
+
}
|
267
|
+
|
268
|
+
path.mg-main-area {
|
269
|
+
opacity: 0.2;
|
270
|
+
stroke: none;
|
271
|
+
}
|
272
|
+
|
273
|
+
path.mg-confidence-band {
|
274
|
+
fill: #ccc;
|
275
|
+
opacity: 0.4;
|
276
|
+
stroke: none;
|
277
|
+
}
|
278
|
+
|
279
|
+
path.mg-main-line {
|
280
|
+
fill: none;
|
281
|
+
opacity: 0.8;
|
282
|
+
stroke-width: 1.1px;
|
283
|
+
}
|
284
|
+
|
285
|
+
.mg-points circle {
|
286
|
+
fill-opacity: 0.4;
|
287
|
+
stroke-opacity: 1;
|
288
|
+
}
|
289
|
+
|
290
|
+
circle.mg-points-mono {
|
291
|
+
fill: #0000ff;
|
292
|
+
stroke: #0000ff;
|
293
|
+
}
|
294
|
+
|
295
|
+
/* a selected point in a scatterplot */
|
296
|
+
.mg-points circle.selected {
|
297
|
+
fill-opacity: 1;
|
298
|
+
stroke-opacity: 1;
|
299
|
+
}
|
300
|
+
|
301
|
+
.mg-voronoi path {
|
302
|
+
fill: none;
|
303
|
+
pointer-events: all;
|
304
|
+
stroke: none;
|
305
|
+
stroke-opacity: 0.1;
|
306
|
+
}
|
307
|
+
|
308
|
+
.mg-x-rug-mono,
|
309
|
+
.mg-y-rug-mono {
|
310
|
+
stroke: black;
|
311
|
+
}
|
312
|
+
|
313
|
+
.mg-x-axis line,
|
314
|
+
.mg-y-axis line {
|
315
|
+
opacity: 1;
|
316
|
+
shape-rendering: auto;
|
317
|
+
stroke: #b3b2b2;
|
318
|
+
stroke-width: 1px;
|
319
|
+
}
|
320
|
+
|
321
|
+
.mg-x-axis text,
|
322
|
+
.mg-y-axis text,
|
323
|
+
.mg-histogram .axis text {
|
324
|
+
fill: black;
|
325
|
+
font-size: 0.9rem;
|
326
|
+
opacity: 0.5;
|
327
|
+
}
|
328
|
+
|
329
|
+
.mg-x-axis .label,
|
330
|
+
.mg-y-axis .label,
|
331
|
+
.mg-axis .label {
|
332
|
+
font-size: 0.8rem;
|
333
|
+
text-transform: uppercase;
|
334
|
+
font-weight: 400;
|
335
|
+
}
|
336
|
+
|
337
|
+
.mg-x-axis-small text,
|
338
|
+
.mg-y-axis-small text,
|
339
|
+
.mg-active-datapoint-small {
|
340
|
+
font-size: 0.6rem;
|
341
|
+
}
|
342
|
+
|
343
|
+
.mg-x-axis-small .label,
|
344
|
+
.mg-y-axis-small .label {
|
345
|
+
font-size: 0.65rem;
|
346
|
+
}
|
347
|
+
|
348
|
+
.mg-year-marker text {
|
349
|
+
fill: black;
|
350
|
+
font-size: 0.7rem;
|
351
|
+
opacity: 0.5;
|
352
|
+
}
|
353
|
+
|
354
|
+
.mg-year-marker line {
|
355
|
+
opacity: 1;
|
356
|
+
shape-rendering: auto;
|
357
|
+
stroke: #b3b2b2;
|
358
|
+
stroke-width: 1px;
|
359
|
+
}
|
360
|
+
|
361
|
+
.mg-year-marker-small text {
|
362
|
+
font-size: 0.6rem;
|
363
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Snapstats
|
2
|
+
class MainsController < ApplicationController
|
3
|
+
|
4
|
+
def show
|
5
|
+
@uniqs = EventReader::Uniqs.fetch_uniqs
|
6
|
+
@clicks = EventReader::Cpm.fetch_all_hash
|
7
|
+
@platforms = EventReader::Browsers.fetch_platforms
|
8
|
+
@browsers = EventReader::Browsers.fetch_browsers
|
9
|
+
end
|
10
|
+
|
11
|
+
def chart
|
12
|
+
data = EventReader::Cpm.fetch_all_chart
|
13
|
+
render json: data
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Snapstats
|
2
|
+
class PerformancesController < ApplicationController
|
3
|
+
|
4
|
+
def index
|
5
|
+
|
6
|
+
end
|
7
|
+
|
8
|
+
def show
|
9
|
+
@controllers = Snapstats::EventReader::Performance.fetch_slowest_controllers
|
10
|
+
end
|
11
|
+
|
12
|
+
def chart
|
13
|
+
data = Snapstats::EventReader::Activity.fetch_all_chart
|
14
|
+
render json: {data: data.values, legend: data.keys}
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Snapstats
|
2
|
+
class UsersController < ApplicationController
|
3
|
+
|
4
|
+
def index
|
5
|
+
|
6
|
+
end
|
7
|
+
|
8
|
+
def show
|
9
|
+
@users = EventReader::UserActivity.fetch_all
|
10
|
+
end
|
11
|
+
|
12
|
+
def activity
|
13
|
+
@user_email = EventReader::UserActivity.fetch_email_by_uid params[:id]
|
14
|
+
@activity = EventReader::UserActivity.fetch_for_user params[:id]
|
15
|
+
end
|
16
|
+
|
17
|
+
def chart
|
18
|
+
render json: EventReader::UserActivity.fetch_chart_for_user(params[:id])
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Snapstats</title>
|
5
|
+
<%= stylesheet_link_tag "snapstats/application", media: "all" %>
|
6
|
+
<%= javascript_include_tag "snapstats/application" %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<div class="app-container">
|
12
|
+
|
13
|
+
<%= render 'main_menu' %>
|
14
|
+
<%= yield %>
|
15
|
+
|
16
|
+
</div>
|
17
|
+
|
18
|
+
|
19
|
+
</body>
|
20
|
+
</html>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<div class="container">
|
2
|
+
<ul class="menu pull-left">
|
3
|
+
<li <%= active_cat? :main %>> <%= link_to 'Daily report', root_path %> </li>
|
4
|
+
<li <%= active_cat? :user %>> <a href="#"><%= link_to 'Users', user_path %></a></li>
|
5
|
+
<li <%= active_cat? :performance %>> <a href="#"><%= link_to 'Performance', performance_path %></li>
|
6
|
+
<li <%= active_cat? :reports %>> <a href="#"><%= link_to 'Reports', performance_path %></li>
|
7
|
+
</ul>
|
8
|
+
</div>
|
@@ -0,0 +1,87 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
<div class="container animated fadeIn">
|
4
|
+
|
5
|
+
<div class="panel panel-wgt">
|
6
|
+
<div class="panel-heading">
|
7
|
+
<h3 class="panel-title">Activity</h3>
|
8
|
+
</div>
|
9
|
+
<div class="panel-body">
|
10
|
+
<div class="chart"></div>
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
</div>
|
15
|
+
|
16
|
+
<!-- Daily overview -->
|
17
|
+
|
18
|
+
<div class="container animated fadeIn">
|
19
|
+
|
20
|
+
<div class="page-header">
|
21
|
+
<h1>Daily overview</h1>
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<div class="row">
|
25
|
+
<div class="col-lg-12">
|
26
|
+
<table class="table">
|
27
|
+
|
28
|
+
<tr>
|
29
|
+
<td class="col-lg-8">Unique visits</td>
|
30
|
+
<td><%= @uniqs %></td>
|
31
|
+
</tr>
|
32
|
+
|
33
|
+
<tr class="clean-cell">
|
34
|
+
<td> </td>
|
35
|
+
<td> </td>
|
36
|
+
</tr>
|
37
|
+
|
38
|
+
<tr>
|
39
|
+
<td>Clicks per minute</td>
|
40
|
+
<td><%= @clicks[:cpm] %></td>
|
41
|
+
</tr>
|
42
|
+
|
43
|
+
<tr>
|
44
|
+
<td>Clicks per hour</td>
|
45
|
+
<td><%= @clicks[:cph] %></td>
|
46
|
+
</tr>
|
47
|
+
|
48
|
+
<tr>
|
49
|
+
<td>Clicks per day</td>
|
50
|
+
<td><%= @clicks[:cpd] %></td>
|
51
|
+
</tr>
|
52
|
+
|
53
|
+
|
54
|
+
<tr class="clean-cell">
|
55
|
+
<td> </td>
|
56
|
+
<td> </td>
|
57
|
+
</tr>
|
58
|
+
|
59
|
+
<!-- Platforms -->
|
60
|
+
|
61
|
+
<% @platforms.each do |i| %>
|
62
|
+
<tr>
|
63
|
+
<td><%= i.name %></td>
|
64
|
+
<td><%= i.total %></td>
|
65
|
+
</tr>
|
66
|
+
<% end %>
|
67
|
+
|
68
|
+
<!-- Browsers -->
|
69
|
+
|
70
|
+
<tr class="clean-cell">
|
71
|
+
<td> </td>
|
72
|
+
<td> </td>
|
73
|
+
</tr>
|
74
|
+
|
75
|
+
<% @browsers.each do |i| %>
|
76
|
+
<tr>
|
77
|
+
<td><%= i.name %></td>
|
78
|
+
<td><%= i.total %></td>
|
79
|
+
</tr>
|
80
|
+
<% end %>
|
81
|
+
|
82
|
+
</table>
|
83
|
+
</div>
|
84
|
+
</div>
|
85
|
+
|
86
|
+
</div>
|
87
|
+
|
@@ -0,0 +1,80 @@
|
|
1
|
+
<div class="container animated fadeIn">
|
2
|
+
|
3
|
+
<div class="panel panel-wgt">
|
4
|
+
<div class="panel-heading">
|
5
|
+
<h3 class="panel-title">Load Average</h3>
|
6
|
+
</div>
|
7
|
+
<div class="panel-body">
|
8
|
+
<div class="chart-performance"></div>
|
9
|
+
<div class="legend pull-right"></div>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
</div>
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
<div class="container animated fadeIn">
|
18
|
+
|
19
|
+
<div class="page-header">
|
20
|
+
<h1>Top Slowest Actions</h1>
|
21
|
+
</div>
|
22
|
+
|
23
|
+
<div class="row">
|
24
|
+
<div class="col-lg-12">
|
25
|
+
<table class="table">
|
26
|
+
|
27
|
+
<tr>
|
28
|
+
<th class="col-lg-6"> Controller </th>
|
29
|
+
<th class="col-lg-4">Action</th>
|
30
|
+
<th>Render time (ms)</th>
|
31
|
+
</tr>
|
32
|
+
|
33
|
+
<% @controllers.each do |i| %>
|
34
|
+
<tr>
|
35
|
+
<td> <%= i.controller %> </td>
|
36
|
+
<td> <%= i.action %> </td>
|
37
|
+
<td><%= i.render_time %></td>
|
38
|
+
</tr>
|
39
|
+
<% end %>
|
40
|
+
|
41
|
+
</table>
|
42
|
+
</div>
|
43
|
+
</div>
|
44
|
+
|
45
|
+
</div>
|
46
|
+
|
47
|
+
|
48
|
+
<div class="container animated fadeIn" style="display:none;">
|
49
|
+
|
50
|
+
<div class="page-header">
|
51
|
+
<h1>System Component</h1>
|
52
|
+
</div>
|
53
|
+
|
54
|
+
<div class="row">
|
55
|
+
<div class="col-lg-12">
|
56
|
+
<table class="table">
|
57
|
+
|
58
|
+
<tr>
|
59
|
+
<td class="col-lg-5">admin@admin.local</td>
|
60
|
+
<td class="col-lg-3">5 minutes ago</td>
|
61
|
+
<td>/companies</td>
|
62
|
+
</tr>
|
63
|
+
|
64
|
+
<tr>
|
65
|
+
<td>test1@local</td>
|
66
|
+
<td>10 minutes ago</td>
|
67
|
+
<td>/companies</td>
|
68
|
+
</tr>
|
69
|
+
|
70
|
+
<tr>
|
71
|
+
<td>test2@local</td>
|
72
|
+
<td>15 minutes ago</td>
|
73
|
+
<td>/companies</td>
|
74
|
+
</tr>
|
75
|
+
|
76
|
+
</table>
|
77
|
+
</div>
|
78
|
+
</div>
|
79
|
+
|
80
|
+
</div>
|
@@ -0,0 +1,49 @@
|
|
1
|
+
|
2
|
+
<div class="container animated fadeIn">
|
3
|
+
|
4
|
+
<div class="panel panel-wgt">
|
5
|
+
<div class="panel-heading">
|
6
|
+
<h3 class="panel-title"><%= @user_email %></h3>
|
7
|
+
</div>
|
8
|
+
<div class="panel-body">
|
9
|
+
<div class="user-activity-chart"></div>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
</div>
|
14
|
+
|
15
|
+
<div class="container animated fadeIn">
|
16
|
+
|
17
|
+
<div class="page-header">
|
18
|
+
<h1>Requests </h1>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<div class="row">
|
22
|
+
<div class="col-lg-12">
|
23
|
+
<table class="table">
|
24
|
+
|
25
|
+
<tr>
|
26
|
+
<th class="col-lg-5"> Path </th>
|
27
|
+
<th class="col-lg-3"> Time </th>
|
28
|
+
<th>Render Time (ms)</th>
|
29
|
+
<th>Platform</th>
|
30
|
+
<th>Browser</th>
|
31
|
+
</tr>
|
32
|
+
|
33
|
+
<% @activity.each do |i| %>
|
34
|
+
|
35
|
+
<tr>
|
36
|
+
<td> <%= i.path %> </td>
|
37
|
+
<td> <%= time_ago_in_words i.date, locale: :en %> </td>
|
38
|
+
<td> <%= i.render_time %> </td>
|
39
|
+
<td> <%= i.os %> </td>
|
40
|
+
<td> <%= i.browser %> <%= i.version %> </td>
|
41
|
+
</tr>
|
42
|
+
|
43
|
+
<% end %>
|
44
|
+
|
45
|
+
</table>
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
|
49
|
+
</div>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
|
2
|
+
<div class="container animated fadeIn">
|
3
|
+
|
4
|
+
<div class="page-header">
|
5
|
+
<h1>Users Activity</h1>
|
6
|
+
</div>
|
7
|
+
|
8
|
+
<div class="row">
|
9
|
+
<div class="col-lg-12">
|
10
|
+
<table class="table">
|
11
|
+
|
12
|
+
<tr>
|
13
|
+
<th class="col-lg-5"> User email </th>
|
14
|
+
<th class="col-lg-3"> Time </th>
|
15
|
+
<th>Path</th>
|
16
|
+
</tr>
|
17
|
+
|
18
|
+
<% @users.each do |i| %>
|
19
|
+
|
20
|
+
<tr>
|
21
|
+
<td> <%= link_to i.email, activity_user_path(i.user_id) %> </td>
|
22
|
+
<td> <%= time_ago_in_words i.date, locale: :en %> </td>
|
23
|
+
<td> <%= i.path %> </td>
|
24
|
+
</tr>
|
25
|
+
|
26
|
+
<% end %>
|
27
|
+
|
28
|
+
</table>
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
|
32
|
+
</div>
|