171 lines
6.0 KiB
PHP
171 lines
6.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\MaintenanceHistory;
|
|
use App\Services\ZabbixService;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Http\Request;
|
|
|
|
class MaintenanceController extends BaseController
|
|
{
|
|
public function index()
|
|
{
|
|
return view('maintenance.index');
|
|
}
|
|
|
|
public function planned()
|
|
{
|
|
return view('maintenance.planned');
|
|
}
|
|
|
|
public function plannedDetail(MaintenanceHistory $maintenance_history)
|
|
{
|
|
|
|
|
|
if (!empty($maintenance_history->finished_at)) {
|
|
abort(404);
|
|
}
|
|
|
|
return view('maintenance.planned-detail', [
|
|
'maintenance_history' => $maintenance_history ?? [],
|
|
]);
|
|
}
|
|
|
|
public function plannedDetailPut(Request $request, MaintenanceHistory $maintenance_history)
|
|
{
|
|
|
|
if (!empty($maintenance_history->finished_at)) {
|
|
abort(404);
|
|
}
|
|
|
|
return view('maintenance.planned-detail-done', [
|
|
'maintenance_history' => $maintenance_history,
|
|
'maintenance_task_status' => $request->input('maintenance_task_status') ?? [],
|
|
'maintenance_host_skipped' => $request->input('maintenance_host_skipped') ?? [],
|
|
]);
|
|
}
|
|
|
|
public function plannedDetailFinishPost(Request $request, MaintenanceHistory $maintenance_history)
|
|
{
|
|
if (!empty($maintenance_history->finished_at)) {
|
|
abort(404);
|
|
}
|
|
|
|
$request->validate([
|
|
"skippedHostsSummary.*.*" => 'required|string'
|
|
]);
|
|
|
|
// if ($request->has('skippedHostsSummary') || $request->has('skippedHostTasksSummary'))
|
|
// {
|
|
// return redirect()->back()->with('error', __('boilerplate::ui.incorect.old.password'));
|
|
// }
|
|
|
|
|
|
foreach ($request->input('skippedHostsSummary') as $history_host_id => $summary) {
|
|
$maintenance_history->historyHosts->find($history_host_id)->update([
|
|
'summary' => $summary,
|
|
]);
|
|
}
|
|
|
|
if ($request->has('skippedHostTasksSummary')) {
|
|
foreach ($maintenance_history->historyHosts as $history_host) {
|
|
if (!isset($request->input('skippedHostTasksSummary')[$history_host->id]))
|
|
continue;
|
|
|
|
foreach ($request->input('skippedHostTasksSummary')[$history_host->id] as $history_task_id => $task_summary) {
|
|
$history_host->historyTasks->find($history_task_id)->update([
|
|
'summary' => $task_summary,
|
|
]);
|
|
}
|
|
}
|
|
}
|
|
|
|
$maintenance_history->finished_at = Carbon::now();
|
|
$maintenance_history->save();
|
|
|
|
return redirect()->route('maintenance.history.detail', $maintenance_history->id);
|
|
}
|
|
|
|
public function history(Request $request)
|
|
{
|
|
return view('maintenance.history');
|
|
}
|
|
|
|
public function historyDetail(Request $request, MaintenanceHistory $maintenance_history)
|
|
{
|
|
return view('maintenance.history-detail-done', [
|
|
'maintenance_history' => $maintenance_history ?? []
|
|
]);
|
|
}
|
|
|
|
public function start(Request $request, MaintenanceHistory $maintenance_history)
|
|
{
|
|
|
|
$hostsForMaintenance = [];
|
|
|
|
foreach ($maintenance_history->historyHosts as $historyHost) {
|
|
if (empty($historyHost->host->external_id)) {
|
|
continue;
|
|
}
|
|
|
|
$hostsForMaintenance[] = [
|
|
"hostid" => (int) $historyHost->host->external_id,
|
|
];
|
|
}
|
|
|
|
$zabbix = new ZabbixService(config('zabbix.url'));
|
|
$zabbix->connect(config('zabbix.username'), config('zabbix.password'));
|
|
if (empty($maintenance_history->maintenance->external_id)) {
|
|
$maintenance_history->maintenance->external_id = $zabbix->maintenancesCreate([
|
|
"name" => $maintenance_history->maintenance->name . ' - ' . $maintenance_history->start_at->format('Y'),
|
|
"description" => strip_tags($maintenance_history->maintenance->description),
|
|
"active_since" => $maintenance_history->start_at->startofyear()->timestamp,
|
|
"active_till" => $maintenance_history->start_at->endofyear()->timestamp,
|
|
"tags_evaltype" => 0,
|
|
"hosts" => $hostsForMaintenance,
|
|
"timeperiods" => [[
|
|
"timeperiod_type" => 0,
|
|
"start_date" => $maintenance_history->start_at->timestamp,
|
|
"period" => (($maintenance_history->maintenance->duration * 60) * 60),
|
|
]],
|
|
])['maintenanceids'][0];
|
|
$maintenance_history->maintenance->save();
|
|
} else {
|
|
$createPeriode = true;
|
|
$timePeriodes = $zabbix->maintenances([
|
|
"selectTimeperiods" => "extend",
|
|
'maintenanceids' => $maintenance_history->maintenance->external_id,
|
|
])[0]['timeperiods'];
|
|
|
|
foreach ($timePeriodes as $periode) {
|
|
if ((int) $periode['start_date'] === $maintenance_history->start_at->timestamp) {
|
|
$createPeriode = false;
|
|
}
|
|
}
|
|
|
|
if ($createPeriode) {
|
|
for ($i=0; $i < count($timePeriodes); $i++) {
|
|
unset($timePeriodes[$i]['every']);
|
|
unset($timePeriodes[$i]['month']);
|
|
unset($timePeriodes[$i]['dayofweek']);
|
|
unset($timePeriodes[$i]['day']);
|
|
unset($timePeriodes[$i]['start_time']);
|
|
}
|
|
$timePeriodes[] = [
|
|
"timeperiod_type" => 0,
|
|
"start_date" => $maintenance_history->start_at->timestamp,
|
|
"period" => (($maintenance_history->maintenance->duration * 60) * 60),
|
|
];
|
|
|
|
$zabbix->maintenancesUpdate([
|
|
"maintenanceid" => $maintenance_history->maintenance->external_id,
|
|
"timeperiods" => $timePeriodes,
|
|
]);
|
|
}
|
|
}
|
|
|
|
return redirect()->back();
|
|
}
|
|
}
|