maintenance

This commit is contained in:
Roman 2021-04-06 23:05:02 +02:00
parent ebdece7144
commit 536cae7a90
4 changed files with 77 additions and 5 deletions

31
cli.php

@ -38,7 +38,7 @@ function connectDatabase() {
} }
function printHelp() { function printHelp() {
// TODO: help
} }
function handleDatabase($argv) { function handleDatabase($argv) {
@ -155,6 +155,31 @@ function handleDatabase($argv) {
proc_close($process); proc_close($process);
} }
} else {
die("Usage: cli.php db <migrate|import|export> [options...]");
}
}
function onMaintenance($argv) {
$action = $argv[2] ?? "status";
$maintenanceFile = "MAINTENANCE";
$isMaintenanceEnabled = file_exists($maintenanceFile);
if ($action === "status") {
die("Maintenance: " . ($isMaintenanceEnabled ? "on" : "off") . "\n");
} else if ($action === "on") {
$file = fopen($maintenanceFile, 'w') or die("Unable to create maintenance file\n");
fclose($file);
die("Maintenance enabled\n");
} else if ($action === "off") {
if (file_exists($maintenanceFile)) {
if (!unlink($maintenanceFile)) {
die("Unable to delete maintenance file\n");
}
}
die("Maintenance disabled\n");
} else {
die("Usage: cli.php maintenance <status|on|off>\n");
} }
} }
@ -172,6 +197,10 @@ switch ($command) {
handleDatabase($argv); handleDatabase($argv);
break; break;
case 'routes': case 'routes':
// TODO: routes
break;
case 'maintenance':
onMaintenance($argv);
break; break;
default: default:
echo "Unknown command '$command'\n\n"; echo "Unknown command '$command'\n\n";

BIN
img/maintenance.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

@ -1,14 +1,21 @@
<?php <?php
include_once 'core/core.php';
include_once 'core/datetime.php';
include_once 'core/constants.php';
if (is_file("MAINTENANCE")) {
http_response_code(503);
$currentDir = dirname(__FILE__);
serveStatic($currentDir, "/static/maintenance.html");
die();
}
use Api\Request; use Api\Request;
use Configuration\Configuration; use Configuration\Configuration;
use Documents\Document404; use Documents\Document404;
use Elements\Document; use Elements\Document;
include_once 'core/core.php';
include_once 'core/datetime.php';
include_once 'core/constants.php';
if (!is_readable(getClassPath(Configuration::class))) { if (!is_readable(getClassPath(Configuration::class))) {
header("Content-Type: application/json"); header("Content-Type: application/json");
die(json_encode(array( "success" => false, "msg" => "Configuration directory is not readable, check permissions before proceeding." ))); die(json_encode(array( "success" => false, "msg" => "Configuration directory is not readable, check permissions before proceeding." )));

36
static/maintenance.html Normal file

@ -0,0 +1,36 @@
<!DOCTYPE html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="format-detection" content="telephone=yes">
<meta charset="utf-8">
<meta http-equiv="expires" content="0">
<meta name="robots" content="noarchive">
<title>Maintenance</title>
<link rel="stylesheet" href="/css/bootstrap.min.css" type="text/css">
<script type="text/javascript" src="/js/bootstrap.bundle.min.js"></script>
<link rel="stylesheet" href="/css/fontawesome.min.css" type="text/css">
</head>
<body>
<div class="container mt-5">
<div class="row">
<div class="col-md-6">
<div class="error-template pt-5 pl-5">
<h1>Service unavailable</h1>
<h3>Temporarily down for maintenance</h3>
<div>
<p>
Sorry for the inconvenience but we're performing some maintenance at the moment.
we'll be back online shortly!
</p>
</div>
<a href="javascript:document.location.reload()" class="btn btn-info btn-lg mt-3">
<i class="fa fa-redo mr-2"></i>Retry
</a>
</div>
</div>
<div class="col-md-6 text-center pt-5">
<img src="/img/maintenance.png" alt="[maintenance]">
</div>
</div>
</div>
</body>