diff --git a/app/Actions/GetFailedSpeedtestData.php b/app/Actions/GetFailedSpeedtestData.php new file mode 100644 index 00000000..7ffd586a --- /dev/null +++ b/app/Actions/GetFailedSpeedtestData.php @@ -0,0 +1,48 @@ +addDays(1); + + return Cache::remember('failure-rate-' . $days, $ttl, function () use ($days) { + $range = [ + Carbon::today() + ]; + for ($i = 0; $i < ($days - 1); $i++) { + $prev = end($range); + $new = $prev->copy()->subDays(1); + array_push($range, $new); + } + + $rate = []; + + foreach ($range as $day) { + $success = Speedtest::select(DB::raw('COUNT(id) as rate'))->whereDate('created_at', $day)->where('failed', false)->get()[0]['rate']; + $fail = Speedtest::select(DB::raw('COUNT(id) as rate'))->whereDate('created_at', $day)->where('failed', true)->get()[0]['rate']; + + array_push($rate, [ + 'date' => $day->toDateString(), + 'success' => $success, + 'failure' => $fail, + ]); + } + + return array_reverse($rate); + }); + } +} diff --git a/app/Actions/GetLatestSpeedtestData.php b/app/Actions/GetLatestSpeedtestData.php new file mode 100644 index 00000000..ec6b8044 --- /dev/null +++ b/app/Actions/GetLatestSpeedtestData.php @@ -0,0 +1,52 @@ + $data, + ]; + + if (SettingsHelper::get('show_average')) { + $avg = Speedtest::select(DB::raw('AVG(ping) as ping, AVG(download) as download, AVG(upload) as upload')) + ->where('failed', false) + ->first() + ->toArray(); + $response['average'] = $avg; + } + + if (SettingsHelper::get('show_max')) { + $max = Speedtest::select(DB::raw('MAX(ping) as ping, MAX(download) as download, MAX(upload) as upload')) + ->where('failed', false) + ->first() + ->toArray(); + $response['maximum'] = $max; + } + + if (SettingsHelper::get('show_min')) { + $min = Speedtest::select(DB::raw('MIN(ping) as ping, MIN(download) as download, MIN(upload) as upload')) + ->where('failed', false) + ->first() + ->toArray(); + $response['minimum'] = $min; + } + + return $response; + } +} diff --git a/app/Actions/GetSpeedtestTimeData.php b/app/Actions/GetSpeedtestTimeData.php new file mode 100644 index 00000000..105baa00 --- /dev/null +++ b/app/Actions/GetSpeedtestTimeData.php @@ -0,0 +1,37 @@ +addDays(1); + + return Cache::remember('speedtest-days-' . $days, $ttl, function () use ($days) { + $showFailed = (bool)SettingsHelper::get('show_failed_tests_on_graph')->value; + + if ($showFailed === true) { + return Speedtest::where('created_at', '>=', Carbon::now()->subDays($days)) + ->orderBy('created_at', 'asc') + ->get(); + } + + return Speedtest::where('created_at', '>=', Carbon::now()->subDays($days)) + ->where('failed', false) + ->orderBy('created_at', 'asc') + ->get(); + }); + } +} diff --git a/app/Helpers/SpeedtestHelper.php b/app/Helpers/SpeedtestHelper.php index 09ee999d..b75fbd83 100644 --- a/app/Helpers/SpeedtestHelper.php +++ b/app/Helpers/SpeedtestHelper.php @@ -107,44 +107,6 @@ class SpeedtestHelper ]; } - /** - * Get a percentage rate of failure by days - * - * @param integer $days number of days to get rate for - * @return integer percentage fail rate - */ - public static function failureRate(int $days) - { - $ttl = Carbon::now()->addDays(1); - $rate = Cache::remember('failure-rate-' . $days, $ttl, function () use ($days) { - $range = [ - Carbon::today() - ]; - for ($i = 0; $i < ($days - 1); $i++) { - $prev = end($range); - $new = $prev->copy()->subDays(1); - array_push($range, $new); - } - - $rate = []; - - foreach ($range as $day) { - $success = Speedtest::select(DB::raw('COUNT(id) as rate'))->whereDate('created_at', $day)->where('failed', false)->get()[0]['rate']; - $fail = Speedtest::select(DB::raw('COUNT(id) as rate'))->whereDate('created_at', $day)->where('failed', true)->get()[0]['rate']; - - array_push($rate, [ - 'date' => $day->toDateString(), - 'success' => $success, - 'failure' => $fail, - ]); - } - - return array_reverse($rate); - }); - - return $rate; - } - /** * Create a backup of the SQLite database * diff --git a/app/Http/Controllers/HomepageDataController.php b/app/Http/Controllers/HomepageDataController.php new file mode 100644 index 00000000..fc69020a --- /dev/null +++ b/app/Http/Controllers/HomepageDataController.php @@ -0,0 +1,33 @@ + $days], + ['days' => ['required', 'numeric']], + ); + + if ($validator->fails()) { + return response()->json([ + 'method' => 'get speedtests in last x days', + 'error' => $validator->errors(), + ], 422); + } + + return [ + 'latest' => run(GetLatestSpeedtestData::class), + 'time' => run(GetSpeedtestTimeData::class), + 'fail' => run(GetFailedSpeedtestData::class), + ]; + } +} diff --git a/app/Http/Controllers/SpeedtestController.php b/app/Http/Controllers/SpeedtestController.php index 900616c7..f4204ff0 100644 --- a/app/Http/Controllers/SpeedtestController.php +++ b/app/Http/Controllers/SpeedtestController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Actions\GetFailedSpeedtestData; use App\Actions\GetLatestSpeedtestData; use App\Actions\GetSpeedtestTimeData; use App\Actions\QueueSpeedtest; @@ -94,7 +95,7 @@ class SpeedtestController extends Controller ], 422); } - $data = SpeedtestHelper::failureRate($days); + $data = run(GetFailedSpeedtestData::class, $days); return response()->json([ 'method' => 'get speedtests in last x days', diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 916cdf51..7133239d 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -15,7 +15,7 @@ class RouteServiceProvider extends ServiceProvider * * @var string */ - protected $namespace = 'App\Http\Controllers'; + protected $namespace = null; /** * The path to the "home" route for your application.