mdbpanel/app/Http/Controllers/API/v1/BackupController.php

141 lines
4.7 KiB
PHP

<?php
namespace App\Http\Controllers\API\v1;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Mail;
use Illuminate\Http\Request;
use App\Mail\BackupWarning;
use App\Mail\BackupSuccess;
use App\Mail\BackupError;
use App\Mail\BackupDebug;
use Carbon\Carbon;
use App\Schedule;
use App\Backup;
use App\Client;
class BackupController extends Controller
{
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store($client_id, $schedule_name, Request $request)
{
$client = Client::where('id', '=', $client_id)->first();
$current_time = Carbon::now()->toDateTimeString();
$response = json_decode( file_get_contents('php://input') );
if( isset($response->Data->ParsedResult)){
$data = $response->Data;
}
else{
Mail::to('matthew@shillam.me.uk')
->send(new BackupDebug($client, $response));
return response()->json(['error' => 'A Problem with the data provided from Duplicati!'], 403);
}
$schedule = Schedule::updateOrCreate(
['client_id' => $client_id, 'name' => $schedule_name],
['last_backup_status' => $data->ParsedResult, 'last_backup_time' => $current_time]
);
// Create Backup DB entry
$backup = Backup::Create(array(
'schedule_id' => $schedule->id,
'schedule_name' => $schedule_name,
'status' => $data->ParsedResult,
'deleted_files' => $data->DeletedFiles,
'deleted_folders' => $data->DeletedFolders,
'modified_files' => $data->ModifiedFiles,
'examined_files' => $data->ExaminedFiles,
'opened_files' => $data->OpenedFiles,
'added_files' => $data->AddedFiles,
'size_of_modified_files' => $data->SizeOfModifiedFiles,
'size_of_added_files' => $data->SizeOfAddedFiles,
'size_of_examined_files' => $data->SizeOfExaminedFiles,
'size_of_opened_files' => $data->SizeOfOpenedFiles,
'not_processed_files' => $data->NotProcessedFiles,
'added_folders' => $data->AddedFolders,
'too_large_files' => $data->TooLargeFiles,
'files_with_error' => $data->FilesWithError,
'modified_folders' => $data->ModifiedFolders,
'modified_symlinks' => $data->ModifiedSymlinks,
'added_symlinks' => $data->AddedSymlinks,
'deleted_symlinks' => $data->DeletedSymlinks,
'partial_backup' => $data->PartialBackup,
'dryrun' => $data->Dryrun,
'main_operation' => $data->MainOperation,
'started_at' => date("Y-m-d\ G:i:s",strtotime($data->BeginTime)),
'finished_at' => date("Y-m-d\ G:i:s",strtotime($data->EndTime)),
'duration' => $data->Duration,
'version' => $data->Version
));
/**
* notify client by email
*/
if($backup->status == "Success")
{
Mail::to('reports@mydentalbackup.co.uk')
->send(new BackupSuccess($backup, $client));
}
elseif($backup->status == "Warning")
{
Mail::to('reports@mydentalbackup.co.uk')
->send(new BackupWarning($backup, $client));
}
elseif($backup->status == "Error")
{
Mail::to('reports@mydentalbackup.co.uk')
->send(new BackupError($backup, $client));
}
else{
Mail::to('matthew@shillam.me.uk')
->send(new BackupDebug($client, $response));
return response()->json(['error' => 'A Problem with the data provided from Duplicati!'], 403);
}
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}