Files
docker-rconfig/app/Http/Controllers/Api/ConfigController.php
2024-10-19 18:23:55 +00:00

234 lines
8.4 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Models\Config;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
use Response;
class ConfigController extends ApiBaseController
{
public function __construct(Config $model, $modelname = 'config')
{
$this->model = $model;
$this->modelname = $modelname;
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request, $searchCols = null, $relationship = null, $withCount = null)
{
$searchCols = [''];
return response()->json(parent::index($request, $searchCols));
}
/**
* Display the specified resource.
*
* @param \App\Models\Command $tag
* @return \Illuminate\Http\Response
*/
public function show($id, $relationship = null, $withCount = null)
{
return parent::show($id);
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id, $return = 0)
{
$model = parent::destroy($id, 1);
if (File::exists($model->config_location)) {
File::delete($model->config_location);
$logmsg = 'Config File : '.$model->config_location.' was deleted';
} else {
$logmsg = 'Unable to find file from path: '.$model->config_location;
$this->failureResponse($logmsg);
}
activityLogIt(__CLASS__, __FUNCTION__, 'warn', $logmsg, 'config', '', $model->device_id, 'device');
return $this->successResponse($logmsg);
}
/**
* Display a listing of the resource for a given device ID.
*
* @param \App\Models\Request $tag
* @return \Illuminate\Http\Response
*/
public function getAllById($id, $status, Request $request)
{
$sortCol = $request->sortCol != '' ? $request->sortCol : 'created_at';
$sortOrd = $request->sortOrd != '' ? $request->sortOrd : 'desc';
$searchCols = ['command'];
$perPage = (int) $request->perPage;
// dd($perPage);
$this->query = $this->model::query();
$this->query->orderBy($sortCol, $sortOrd);
if ($id != 0) {
$this->query->where('device_id', $id);
}
if (! $status || $status != 'all') {
$this->query->where('download_status', $status);
}
if ($request->filter != null) {
$this->return_filtered_data($request->filter, $searchCols);
}
return $this->query->orderBy('created_at', 'desc')->paginate($perPage);
}
public function getLatestById($id)
{
$results = DB::select('select * from configs WHERE id IN (SELECT MAX(id) FROM configs WHERE device_id = ? GROUP BY command)', [$id]);
return $this->successResponse('Success', $results);
}
public function getSingleConfigFile($id)
{
if (! $id) {
return $this->failureResponse('No ID provided');
}
$config_location = Config::find($id)->config_location;
if ($config_location) {
$content = File::get($config_location);
$utf8_string = mb_convert_encoding($content, 'UTF-8');
return $this->successResponse('Success', $utf8_string);
} else {
return $this->failureResponse('No config file found');
}
}
public function getDistinctCommands($id)
{
if ($id == 0) {
$result = Config::distinct()->get(['command']);
} else {
$result = Config::where('device_id', $id)->distinct()->get(['command']);
}
return $this->successResponse('Success', $result);
}
// public function getOneById(Request $request)
// {
// $model = Config::find($request->id);
// return $model;
// }
// public function getAllInvalid(Request $request)
// {
// $perPage = (int) $request->items;
// $data = Config::orderBy('created_at', 'desc')->where('download_status', 0)->orderBy('created_at', 'desc')->paginate($perPage);
// return response()->json($data);
// }
// public function getAllInvalidById(Request $request)
// {
// $perPage = (int) $request->items;
// $data = Config::where('device_id', $request->device_id)->where('download_status', null)->orWhere('download_status', '=', 0)->orderBy('created_at', 'desc')->orderBy('created_at', 'desc')->paginate($perPage);
// return response()->json($data);
// }
// public function getAllByCommandString($command, Request $request)
// {
// $perPage = (int) $request->items;
// if ($request->filter != 'null') {
// $data = $this->return_filtered_data_by_id($request->filter, $perPage, $request->device_id);
// } else {
// $data = Config::where('device_id', $request->device_id)->where('command', $command)->orderBy('created_at', 'desc')->paginate($perPage);
// }
// return response()->json($data);
// }
// public function getOneById(Request $request)
// {
// $model = Config::find($request->id);
// return $model;
// }
// public function getLatestConfigDate()
// {
// return Config::select('created_at')->latest()->first();
// }
// public function getConfigsStatsByDeviceId(Request $request)
// {
// $resultArr['count_valid'] = Config::where('device_id', $request->id)->where('download_status', 1)->count();
// $invalid_collection = Config::where('device_id', $request->id)->get();
// $resultArr['count_invalid'] = $invalid_collection->where('download_status', null)->where('download_status', 0)->count();
// $resultArr['latest_download'] = Config::select('start_time')->where('device_id', $request->id)->orderBy('created_at', 'desc')->first();
// $resultArr['latest_download'] = $resultArr['count_valid'] != null ? $resultArr['count_valid'] : 'NULL';
// return $resultArr;
// }
// public function getConfigsInfoByDeviceId(Request $request)
// {
// $resultArr = array();
// $uniqueCommands = Config::select('command')->where('device_id', $request->id)->distinct('command')->get();
// $timezone = \Config::get('app.timezone');
// $now = Carbon::now($timezone);
// $i = 0;
// foreach ($uniqueCommands as $uniqueCommand) {
// $latestCommand = Config::select('id', 'download_status', 'start_time')
// ->where('command', $uniqueCommand->command)
// ->where('device_id', $request->id)
// ->orderBy('created_at', 'desc')
// ->first();
// // $initialCommand = Config::select('id', 'download_status', 'start_time')->where('command', $uniqueCommand->command)->where('device_id', $request->id)->orderBy('created_at', 'asc')->first();
// $count = Config::where('command', $uniqueCommand->command)->where('device_id', $request->id)->where('download_status', 1)->count();
// $resultArr['commands'][$i]['id'] = $latestCommand->id;
// $resultArr['commands'][$i]['command'] = $uniqueCommand->command;
// $resultArr['commands'][$i]['count'] = $count;
// $resultArr['commands'][$i]['latest_config_time'] = Carbon::createFromTimestamp(strtotime($latestCommand->start_time))
// ->addHours($timezone)
// ->format('M d, Y G:iA');
// // $resultArr['commands'][$i]['initial_config_time'] = Carbon::createFromTimestamp(strtotime($initialCommand->start_time))
// // ->addHours($timezone)
// // ->format('M d, Y G:iA');
// $resultArr['commands'][$i]['download_status'] = $latestCommand->download_status;
// $i++;
// }
// return $resultArr;
// }
// private function return_filtered_data($filter, $perPage)
// {
// return Config::orderBy('created_at', 'desc')
// ->where('command', 'like', '%' . $filter . '%')
// ->paginate($perPage);
// }
// private function return_filtered_data_by_id($filter, $perPage, $id)
// {
// return Config::orderBy('created_at', 'desc')
// ->where('device_id', $id)
// ->where('command', 'like', '%' . $filter . '%')
// ->paginate($perPage);
// }
}