AggregatesTrends::minByWeeks()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 0
cts 2
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 3
crap 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Arcanedev\LaravelMetrics\Metrics\Concerns;
6
7
use Arcanedev\LaravelMetrics\Metrics\Trend;
8
9
/**
10
 * Trait     AggregatesTrends
11
 *
12
 * @author   ARCANEDEV <[email protected]>
13
 */
14
trait AggregatesTrends
15
{
16
    /* -----------------------------------------------------------------
17
     |  Count Methods
18
     | -----------------------------------------------------------------
19
     */
20
21
    /**
22
     * Calculate the `count` of the metric over months.
23
     *
24
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
25
     * @param  string|null                                   $column
26
     *
27
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
28
     */
29 12
    public function countByMonths($model, $column = null)
30
    {
31 12
        return $this->count(Trend::BY_MONTHS, $model, $column);
32
    }
33
34
    /**
35
     * Calculate the `count` of the metric over weeks.
36
     *
37
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
38
     * @param  string|null                                   $column
39
     *
40
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
41
     */
42 4
    public function countByWeeks($model, $column = null)
43
    {
44 4
        return $this->count(Trend::BY_WEEKS, $model, $column);
45
    }
46
47
    /**
48
     * Calculate the `count` of the metric over days.
49
     *
50
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
51
     * @param  string|null                                   $column
52
     *
53
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
54
     */
55 4
    public function countByDays($model, $column = null)
56
    {
57 4
        return $this->count(Trend::BY_DAYS, $model, $column);
58
    }
59
60
    /**
61
     * Calculate the `count` of the metric over hours.
62
     *
63
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
64
     * @param  string|null                                   $column
65
     *
66
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
67
     */
68 4
    public function countByHours($model, $column = null)
69
    {
70 4
        return $this->count(Trend::BY_HOURS, $model, $column);
71
    }
72
73
    /**
74
     * Calculate the `count` of the metric over minutes.
75
     *
76
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
77
     * @param  string|null                                   $column
78
     *
79
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
80
     */
81 4
    public function countByMinutes($model, $column = null)
82
    {
83 4
        return $this->count(Trend::BY_MINUTES, $model, $column);
84
    }
85
86
    /* -----------------------------------------------------------------
87
     |  Average Methods
88
     | -----------------------------------------------------------------
89
     */
90
91
    /**
92
     * Calculate the `average` of the metric over months.
93
     *
94
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
95
     * @param  string                                        $column
96
     * @param  string|null                                   $dateColumn
97
     *
98
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
99
     */
100
    public function averageByMonths($model, $column, $dateColumn = null)
101
    {
102
        return $this->average(Trend::BY_MONTHS, $model, $column, $dateColumn);
103
    }
104
105
    /**
106
     * Calculate the `average` of the metric over weeks.
107
     *
108
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
109
     * @param  string                                        $column
110
     * @param  string|null                                   $dateColumn
111
     *
112
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
113
     */
114
    public function averageByWeeks($model, $column, $dateColumn = null)
115
    {
116
        return $this->average(Trend::BY_WEEKS, $model, $column, $dateColumn);
117
    }
118
119
    /**
120
     * Calculate the `average` of the metric over days.
121
     *
122
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
123
     * @param  string                                        $column
124
     * @param  string|null                                   $dateColumn
125
     *
126
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
127
     */
128
    public function averageByDays($model, $column, $dateColumn = null)
129
    {
130
        return $this->average(Trend::BY_DAYS, $model, $column, $dateColumn);
131
    }
132
133
    /**
134
     * Calculate the `average` of the metric over hours.
135
     *
136
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
137
     * @param  string                                        $column
138
     * @param  string|null                                   $dateColumn
139
     *
140
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
141
     */
142
    public function averageByHours($model, $column, $dateColumn = null)
143
    {
144
        return $this->average(Trend::BY_HOURS, $model, $column, $dateColumn);
145
    }
146
147
    /**
148
     * Calculate the `average` of the metric over minutes.
149
     *
150
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
151
     * @param  string                                        $column
152
     * @param  string|null                                   $dateColumn
153
     *
154
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
155
     */
156
    public function averageByMinutes($model, $column, $dateColumn = null)
157
    {
158
        return $this->average(Trend::BY_MINUTES, $model, $column, $dateColumn);
159
    }
160
161
    /* -----------------------------------------------------------------
162
     |  Sum Methods
163
     | -----------------------------------------------------------------
164
     */
165
166
    /**
167
     * Calculate the `sum` of the metric over months.
168
     *
169
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
170
     * @param  string                                        $column
171
     * @param  string|null                                   $dateColumn
172
     *
173
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
174
     */
175
    public function sumByMonths($model, $column, $dateColumn = null)
176
    {
177
        return $this->sum(Trend::BY_MONTHS, $model, $column, $dateColumn);
178
    }
179
180
    /**
181
     * Calculate the `sum` of the metric over weeks.
182
     *
183
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
184
     * @param  string                                        $column
185
     * @param  string                                        $dateColumn
186
     *
187
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
188
     */
189
    public function sumByWeeks($model, $column, $dateColumn = null)
190
    {
191
        return $this->sum(Trend::BY_WEEKS, $model, $column, $dateColumn);
192
    }
193
194
    /**
195
     * Calculate the `sum` of the metric over days.
196
     *
197
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
198
     * @param  string                                        $column
199
     * @param  string|null                                   $dateColumn
200
     *
201
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
202
     */
203
    public function sumByDays($model, $column, $dateColumn = null)
204
    {
205
        return $this->sum(Trend::BY_DAYS, $model, $column, $dateColumn);
206
    }
207
208
    /**
209
     * Calculate the `sum` of the metric over hours.
210
     *
211
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
212
     * @param  string                                        $column
213
     * @param  string                                        $dateColumn
214
     *
215
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
216
     */
217
    public function sumByHours($model, $column, $dateColumn = null)
218
    {
219
        return $this->sum(Trend::BY_HOURS, $model, $column, $dateColumn);
220
    }
221
222
    /**
223
     * Calculate the `sum` of the metric over minutes.
224
     *
225
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
226
     * @param  string                                        $column
227
     * @param  string|null                                   $dateColumn
228
     *
229
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
230
     */
231
    public function sumByMinutes($model, $column, $dateColumn = null)
232
    {
233
        return $this->sum(Trend::BY_MINUTES, $model, $column, $dateColumn);
234
    }
235
236
    /* -----------------------------------------------------------------
237
     |  Max Methods
238
     | -----------------------------------------------------------------
239
     */
240
241
    /**
242
     * Calculate the `max` of the metric over months.
243
     *
244
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
245
     * @param  string                                        $column
246
     * @param  string|null                                   $dateColumn
247
     *
248
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
249
     */
250
    public function maxByMonths($model, $column, $dateColumn = null)
251
    {
252
        return $this->max(Trend::BY_MONTHS, $model, $column, $dateColumn);
253
    }
254
255
    /**
256
     * Calculate the `max` of the metric over weeks.
257
     *
258
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
259
     * @param  string                                        $column
260
     * @param  string|null                                   $dateColumn
261
     *
262
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
263
     */
264
    public function maxByWeeks($model, $column, $dateColumn = null)
265
    {
266
        return $this->max(Trend::BY_WEEKS, $model, $column, $dateColumn);
267
    }
268
269
    /**
270
     * Calculate the `max` of the metric over days.
271
     *
272
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
273
     * @param  string                                        $column
274
     * @param  string|null                                   $dateColumn
275
     *
276
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
277
     */
278
    public function maxByDays($model, $column, $dateColumn = null)
279
    {
280
        return $this->max(Trend::BY_DAYS, $model, $column, $dateColumn);
281
    }
282
283
    /**
284
     * Calculate the `max` of the metric over hours.
285
     *
286
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
287
     * @param  string                                        $column
288
     * @param  string|null                                   $dateColumn
289
     *
290
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
291
     */
292
    public function maxByHours($model, $column, $dateColumn = null)
293
    {
294
        return $this->max(Trend::BY_HOURS, $model, $column, $dateColumn);
295
    }
296
297
    /**
298
     * Calculate the `max` of the metric over minutes.
299
     *
300
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
301
     * @param  string                                        $column
302
     * @param  string|null                                   $dateColumn
303
     *
304
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
305
     */
306
    public function maxByMinutes($model, $column, $dateColumn = null)
307
    {
308
        return $this->max(Trend::BY_MINUTES, $model, $column, $dateColumn);
309
    }
310
311
    /* -----------------------------------------------------------------
312
     |  Min Methods
313
     | -----------------------------------------------------------------
314
     */
315
316
    /**
317
     * Calculate the `min` of the metric over months.
318
     *
319
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
320
     * @param  string                                        $column
321
     * @param  string|null                                   $dateColumn
322
     *
323
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
324
     */
325
    public function minByMonths($model, $column, $dateColumn = null)
326
    {
327
        return $this->min(Trend::BY_MONTHS, $model, $column, $dateColumn);
328
    }
329
330
    /**
331
     * Calculate the `min` of the metric over weeks.
332
     *
333
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
334
     * @param  string                                        $column
335
     * @param  string|null                                   $dateColumn
336
     *
337
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
338
     */
339
    public function minByWeeks($model, $column, $dateColumn = null)
340
    {
341
        return $this->min(Trend::BY_WEEKS, $model, $column, $dateColumn);
342
    }
343
344
    /**
345
     * Calculate the `min` of the metric over days.
346
     *
347
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
348
     * @param  string                                        $column
349
     * @param  string|null                                   $dateColumn
350
     *
351
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
352
     */
353
    public function minByDays($model, $column, $dateColumn = null)
354
    {
355
        return $this->min(Trend::BY_DAYS, $model, $column, $dateColumn);
356
    }
357
358
    /**
359
     * Calculate the `min` of the metric over hours.
360
     *
361
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
362
     * @param  string                                        $column
363
     * @param  string|null                                   $dateColumn
364
     *
365
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
366
     */
367
    public function minByHours($model, $column, $dateColumn = null)
368
    {
369
        return $this->min(Trend::BY_HOURS, $model, $column, $dateColumn);
370
    }
371
372
    /**
373
     * Calculate the `min` of the metric over minutes.
374
     *
375
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
376
     * @param  string                                        $column
377
     * @param  string|null                                   $dateColumn
378
     *
379
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
380
     */
381
    public function minByMinutes($model, $column, $dateColumn = null)
382
    {
383
        return $this->min(Trend::BY_MINUTES, $model, $column, $dateColumn);
384
    }
385
386
    /* -----------------------------------------------------------------
387
     |  Aggregate Methods
388
     | -----------------------------------------------------------------
389
     */
390
391
    /**
392
     * Calculate the `count` of the metric.
393
     *
394
     * @param  string                                        $unit
395
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
396
     * @param  string|null                                   $dateColumn
397
     * @param  string|null                                   $column
398
     *
399
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
400
     */
401
    abstract public function count($unit, $model, $dateColumn = null, $column = null);
402
403
    /**
404
     * Return a value result showing a average aggregate over time.
405
     *
406
     * @param  string                                        $unit
407
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
408
     * @param  string                                        $column
409
     * @param  string|null                                   $dateColumn
410
     *
411
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
412
     */
413
    abstract public function average(string $unit, $model, $column, $dateColumn = null);
414
415
    /**
416
     * Return a value result showing a sum aggregate over time.
417
     *
418
     * @param  string                                        $unit
419
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
420
     * @param  string                                        $column
421
     * @param  string|null                                   $dateColumn
422
     *
423
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
424
     */
425
    abstract public function sum(string $unit, $model, $column, $dateColumn = null);
426
427
    /**
428
     * Return a value result showing a max aggregate over time.
429
     *
430
     * @param  string                                        $unit
431
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
432
     * @param  string                                        $column
433
     * @param  string|null                                   $dateColumn
434
     *
435
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
436
     */
437
    abstract public function max(string $unit, $model, $column, $dateColumn = null);
438
439
    /**
440
     * Return a value result showing a min aggregate over time.
441
     *
442
     * @param  string                                        $unit
443
     * @param  \Illuminate\Database\Eloquent\Builder|string  $model
444
     * @param  string                                        $column
445
     * @param  string|null                                   $dateColumn
446
     *
447
     * @return \Arcanedev\LaravelMetrics\Results\TrendResult|mixed
448
     */
449
    abstract public function min(string $unit, $model, $column, $dateColumn = null);
450
}
451