1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
<?php
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/init.inc"; global $title; global $isLoggedIn;
require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.inc';
function itemToName(string $item): string {
if ($item === "docs_cleanup") return "Deleting scheduled documents";
if ($item === "important_backup") return "Differential backups";
if ($item === "restore") return "Failure protection";
if ($item === "backups") return "Encrypted off-site backups";
if ($item === "calendar") return "Google Calendar integration";
if ($item === "version") return "Version information";
if ($item === "logo") return "Website logo processing";
if ($item === "favicons") return "Favicons processing";
if ($item === "assets") return "External assets download";
if (str_starts_with($item, "system-")) {
$system = explode("-", $item)[2];
$type = explode("-", $item)[1];
$systemName = $system === "gdapd" ? "Raindrops System" : "Cloudburst System";
return match ($type) {
"general" => "General info about $systemName",
"members" => "Members in the $systemName",
"fronters" => "Current fronter(s) in the $systemName",
"switches" => "Switch history from the $systemName",
default => "$type in $systemName",
};
}
if (str_starts_with($item, "images-")) {
$system = explode("-", $item)[1];
$id = explode("-", $item)[2];
$systemName = $system === "gdapd" ? "Raindrops" : "Cloudburst";
$member = getSystemMember($system, $id) ?? [ "name" => $id, "display_name" => $id, "id" => $id ];
if ($member["name"] === "unknown") {
return "Unknown (" . $systemName . ")'s images";
} else {
return getMiniName($member["display_name"] ?? $member["name"]) . "'s images";
}
}
return "<code>$item</code>";
}
?>
<br>
<div class="container">
<?php $data = json_decode(file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/includes/data/refresh.json"), true); ?>
<div id="page-content">
<h2>Data updater debugging</h2>
<p>This page provides debugging information to troubleshoot unexpectedly long update times or reported failures.</p>
<?php if (time() - $data["timestamp"] > 360): ?>
<div class="alert alert-warning">
<p>
<b>The data is not updated periodically anymore.</b>
</p>
This can be due to multiple things:
<ul>
<li>the data updater has been disabled temporarily for maintenance;</li>
<li>the data updater cannot start on the server;</li>
<li>the server was down for an extended period of time</li>
</ul>
If you are an administrator and think this is not normal, you may investigate the issue.
</div>
<?php endif; ?>
<h4>General information</h4>
<ul>
<li><b>Update date:</b> <?php $dt = DateTime::createFromFormat('U.u', $data["timestamp"]); echo($dt->format("l j F Y, G:i:s.u T")); ?></li>
<li><b>Total duration:</b> <?= round($data["duration"] * 1000) ?> ms</li>
<li><b>Longest operation:</b> <?= itemToName(array_search(max(array_values($data["times"])), $data["times"])) ?? "-" ?> (<?= round(max(array_values($data["times"])) * 1000) ?> ms, <?= round((max(array_values($data["times"])) / $data["duration"]) * 100, 2) ?>%)</li>
</ul>
<h4 id="times">Processing times</h4>
<div>
<?php foreach ($data["times"] as $item => $time): ?><span class="element tooltip-nohelp" title="<b><?= itemToName($item) ?></b><br>(<?= round($time * 1000) ?> ms)" data-bs-toggle="tooltip" data-bs-html="true" style="opacity:.75;display:inline-block;background:#<?= substr(md5($item), 0, 6) ?>;height:8px;margin:4px 0;width:<?= ($time / $data["duration"]) * 100 ?>%"></span><?php endforeach; ?>
</div>
<ul>
<?php foreach ($data["times"] as $item => $time): ?>
<li><b><?= itemToName($item) ?>:</b> <?= round($time * 1000) ?> ms</li>
<?php endforeach; ?>
</ul>
<h4 id="failures">Reported failures</h4>
<?php if (count($data["restored"]) < 1): ?>
<p><i>The data updater has not reported any update failure in the last run.</i></p>
<?php else: ?>
<p>The following files have failed to update:</p>
<ul>
<?php foreach ($data["restored"] as $item): ?>
<li><code><?= $item ?></code></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</div>
</div>
<style>
.element:hover {
margin: 0 !important;
height: 16px !important;
opacity: 1 !important;
}
.element {
transition: margin 200ms, height 200ms, opacity 200ms;
}
</style>
<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/footer.inc'; ?>
|