Compare commits

..
4 Commits
10 changed files with 934 additions and 40 deletions
+31 -7
View File
@@ -32,11 +32,26 @@ function build_filters(array $opts): array {
}
}
// Max age filter
$max_age_days = intval($opts['max_age_days'] ?? 0);
if ($max_age_days > 0) {
$conds[] = 'e.created_at < EXTRACT(EPOCH FROM NOW())::BIGINT - :max_age_seconds';
$params[':max_age_seconds'] = $max_age_days * 86400;
// Date/time range filter (supports YYYY-MM-DD or YYYY-MM-DD HH:MM)
$from_date = $opts['from_date'] ?? '';
$to_date = $opts['to_date'] ?? '';
if ($from_date !== '') {
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $from_date)) {
$conds[] = 'e.created_at >= EXTRACT(EPOCH FROM :from_date::date)::BIGINT';
$params[':from_date'] = $from_date;
} elseif (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/', $from_date)) {
$conds[] = 'e.created_at >= EXTRACT(EPOCH FROM :from_date::timestamp)::BIGINT';
$params[':from_date'] = $from_date . ':00';
}
}
if ($to_date !== '') {
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $to_date)) {
$conds[] = 'e.created_at < (EXTRACT(EPOCH FROM :to_date::date)::BIGINT + 86400)';
$params[':to_date'] = $to_date;
} elseif (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/', $to_date)) {
$conds[] = 'e.created_at < EXTRACT(EPOCH FROM :to_date::timestamp)::BIGINT';
$params[':to_date'] = $to_date . ':00';
}
}
// Follows filter
@@ -69,7 +84,8 @@ if ($method === 'GET') {
$opts = [
'follows_filter' => $_GET['follows_filter'] ?? 'all',
'kinds' => $_GET['kinds'] ?? '',
'max_age_days' => intval($_GET['max_age_days'] ?? 0),
'from_date' => $_GET['from_date'] ?? '',
'to_date' => $_GET['to_date'] ?? '',
'max_events' => intval($_GET['max_events'] ?? 0),
];
@@ -167,7 +183,8 @@ if ($method === 'POST') {
$opts = [
'follows_filter' => $body['follows_filter'] ?? 'all',
'kinds' => $body['kinds'] ?? [],
'max_age_days' => intval($body['max_age_days'] ?? 0),
'from_date' => $body['from_date'] ?? '',
'to_date' => $body['to_date'] ?? '',
'max_events' => intval($body['max_events'] ?? 0),
];
@@ -273,6 +290,13 @@ if ($method === 'POST') {
? intval($expected_bytes * ($deleted_count / $expected_count))
: 0;
// Clear stats cache so the dashboard reflects changes immediately
$cache_dir = __DIR__ . '/../cache';
foreach (['stats_kinds.json', 'stats_pubkeys.json'] as $cache_file) {
$path = $cache_dir . '/' . $cache_file;
if (is_file($path)) @unlink($path);
}
json_response([
'deleted_count' => $deleted_count,
'freed_bytes' => $freed_bytes,
+43 -15
View File
@@ -22,7 +22,7 @@ function fmt_bytes(int $bytes): string {
if ($method === 'GET') {
try {
$rows = $pdo->query(
"SELECT id, name, follows_filter, kinds, max_age_days, max_events,\n"
"SELECT id, name, follows_filter, kinds, from_date, to_date, max_events,\n"
. " last_preview_count, last_preview_size_bytes,\n"
. " last_executed_at, created_at, updated_at\n"
. " FROM cleanup_saved_queries\n"
@@ -50,7 +50,8 @@ if ($method === 'GET') {
'name' => $r['name'],
'follows_filter' => $r['follows_filter'],
'kinds' => $kinds,
'max_age_days' => intval($r['max_age_days']),
'from_date' => $r['from_date'] ?? '',
'to_date' => $r['to_date'] ?? '',
'max_events' => intval($r['max_events']),
'last_preview_count' => intval($r['last_preview_count']),
'last_preview_size_human' => fmt_bytes(intval($r['last_preview_size_bytes'])),
@@ -101,8 +102,9 @@ if ($method === 'POST') {
// PostgreSQL array literal
$kinds_pg = '{' . implode(',', $kinds) . '}';
$max_age_days = intval($body['max_age_days'] ?? 0);
$max_events = intval($body['max_events'] ?? 0);
$from_date = $body['from_date'] ?? '';
$to_date = $body['to_date'] ?? '';
$max_events = intval($body['max_events'] ?? 0);
try {
if ($id) {
@@ -112,7 +114,8 @@ if ($method === 'POST') {
. " SET name = :name,\n"
. " follows_filter = :follows_filter,\n"
. " kinds = :kinds::integer[],\n"
. " max_age_days = :max_age_days,\n"
. " from_date = :from_date,\n"
. " to_date = :to_date,\n"
. " max_events = :max_events,\n"
. " updated_at = EXTRACT(EPOCH FROM NOW())::BIGINT\n"
. " WHERE id = :id"
@@ -122,20 +125,22 @@ if ($method === 'POST') {
':name' => $name,
':follows_filter' => $follows_filter,
':kinds' => $kinds_pg,
':max_age_days' => $max_age_days,
':from_date' => $from_date,
':to_date' => $to_date,
':max_events' => $max_events,
]);
} else {
// Insert new
$stmt = $pdo->prepare(
"INSERT INTO cleanup_saved_queries\n"
. " (name, follows_filter, kinds, max_age_days, max_events)\n"
. " (name, follows_filter, kinds, from_date, to_date, max_events)\n"
. "VALUES (:name, :follows_filter, :kinds::integer[],\n"
. " :max_age_days, :max_events)\n"
. " :from_date, :to_date, :max_events)\n"
. "ON CONFLICT (name) DO UPDATE SET\n"
. " follows_filter = EXCLUDED.follows_filter,\n"
. " kinds = EXCLUDED.kinds,\n"
. " max_age_days = EXCLUDED.max_age_days,\n"
. " from_date = EXCLUDED.from_date,\n"
. " to_date = EXCLUDED.to_date,\n"
. " max_events = EXCLUDED.max_events,\n"
. " updated_at = EXTRACT(EPOCH FROM NOW())::BIGINT"
);
@@ -143,7 +148,8 @@ if ($method === 'POST') {
':name' => $name,
':follows_filter' => $follows_filter,
':kinds' => $kinds_pg,
':max_age_days' => $max_age_days,
':from_date' => $from_date,
':to_date' => $to_date,
':max_events' => $max_events,
]);
$id = $pdo->lastInsertId();
@@ -186,7 +192,7 @@ if ($method === 'POST') {
// Load the saved query
try {
$stmt = $pdo->prepare(
"SELECT id, name, follows_filter, kinds, max_age_days, max_events\n"
"SELECT id, name, follows_filter, kinds, from_date, to_date, max_events\n"
. " FROM cleanup_saved_queries\n"
. " WHERE id = :id"
);
@@ -225,10 +231,25 @@ if ($method === 'POST') {
$conds[] = 'e.kind IN (' . implode(',', $kind_placeholders) . ')';
}
$max_age_days = intval($query['max_age_days']);
if ($max_age_days > 0) {
$conds[] = 'e.created_at < EXTRACT(EPOCH FROM NOW())::BIGINT - :max_age_seconds';
$params[':max_age_seconds'] = $max_age_days * 86400;
$from_date = $query['from_date'] ?? '';
$to_date = $query['to_date'] ?? '';
if ($from_date !== '') {
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $from_date)) {
$conds[] = 'e.created_at >= EXTRACT(EPOCH FROM :from_date::date)::BIGINT';
$params[':from_date'] = $from_date;
} elseif (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/', $from_date)) {
$conds[] = 'e.created_at >= EXTRACT(EPOCH FROM :from_date::timestamp)::BIGINT';
$params[':from_date'] = $from_date . ':00';
}
}
if ($to_date !== '') {
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $to_date)) {
$conds[] = 'e.created_at < (EXTRACT(EPOCH FROM :to_date::date)::BIGINT + 86400)';
$params[':to_date'] = $to_date;
} elseif (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/', $to_date)) {
$conds[] = 'e.created_at < EXTRACT(EPOCH FROM :to_date::timestamp)::BIGINT';
$params[':to_date'] = $to_date . ':00';
}
}
$follows_filter = $query['follows_filter'];
@@ -301,6 +322,13 @@ if ($method === 'POST') {
]);
} catch (PDOException $e) {}
// Clear stats cache so the dashboard reflects changes immediately
$cache_dir = __DIR__ . '/../cache';
foreach (['stats_kinds.json', 'stats_pubkeys.json'] as $cache_file) {
$path = $cache_dir . '/' . $cache_file;
if (is_file($path)) @unlink($path);
}
json_response([
'deleted_count' => $deleted_count,
'freed_bytes' => $freed_bytes,
+36 -11
View File
@@ -702,9 +702,11 @@ async function loadCleanupQueries() {
: q.follows_filter === 'follows' ? 'Follows'
: 'Non-follows';
const kindsStr = q.kinds && q.kinds.length > 0 ? q.kinds.join(', ') : 'all';
const ageStr = q.max_age_days > 0 ? q.max_age_days + 'd' : '∞';
const dateStr = (q.from_date || q.to_date)
? `${q.from_date || '…'}${q.to_date || '…'}`
: 'no date bound';
const limitStr = q.max_events > 0 ? q.max_events.toLocaleString() : '∞';
const filters = `${filterLabel} | kinds: ${kindsStr} | age: ${ageStr} | max: ${limitStr}`;
const filters = `${filterLabel} | kinds: ${kindsStr} | ${dateStr} | max: ${limitStr}`;
const previewInfo = q.last_preview_count > 0
? `${q.last_preview_count.toLocaleString()} evts (${q.last_preview_size_human})`
: '—';
@@ -733,22 +735,34 @@ function newCleanupQuery() {
r.checked = r.value === 'all';
});
document.getElementById('cleanup-kinds').value = '';
document.getElementById('cleanup-max-age').value = '0';
document.getElementById('cleanup-from-date').value = '';
document.getElementById('cleanup-from-time').value = '';
document.getElementById('cleanup-to-date').value = '';
document.getElementById('cleanup-to-time').value = '';
document.getElementById('cleanup-max-events').value = '0';
document.getElementById('cleanup-results-group').style.display = 'none';
document.getElementById('cleanup-name').focus();
}
// ── Combine date + time inputs into a single datetime string ───────────
function combineDateTime(dateId, timeId) {
const dateVal = document.getElementById(dateId).value;
const timeVal = document.getElementById(timeId).value;
if (!dateVal) return '';
return timeVal ? dateVal + ' ' + timeVal : dateVal;
}
// ── Read filter values from the form ───────────────────────────────────
function readCleanupFilters() {
const followsEl = document.querySelector('input[name="cleanup-follows"]:checked');
const follows_filter = followsEl ? followsEl.value : 'all';
const kindsRaw = document.getElementById('cleanup-kinds').value.trim();
const kinds = kindsRaw ? kindsRaw.split(',').map(s => parseInt(s.trim(), 10)).filter(n => !isNaN(n) && n > 0) : [];
const max_age_days = parseInt(document.getElementById('cleanup-max-age').value, 10) || 0;
const from_date = combineDateTime('cleanup-from-date', 'cleanup-from-time');
const to_date = combineDateTime('cleanup-to-date', 'cleanup-to-time');
const max_events = parseInt(document.getElementById('cleanup-max-events').value, 10) || 0;
const name = document.getElementById('cleanup-name').value.trim();
return { name, follows_filter, kinds, max_age_days, max_events };
return { name, follows_filter, kinds, from_date, to_date, max_events };
}
// ── Preview ────────────────────────────────────────────────────────────
@@ -757,7 +771,8 @@ async function previewCleanup(queryId) {
const params = new URLSearchParams();
params.set('follows_filter', filters.follows_filter);
if (filters.kinds.length > 0) params.set('kinds', filters.kinds.join(','));
if (filters.max_age_days > 0) params.set('max_age_days', String(filters.max_age_days));
if (filters.from_date) params.set('from_date', filters.from_date);
if (filters.to_date) params.set('to_date', filters.to_date);
if (filters.max_events > 0) params.set('max_events', String(filters.max_events));
if (queryId) params.set('query_id', String(queryId));
@@ -835,7 +850,8 @@ async function saveCleanupQuery() {
name: filters.name,
follows_filter: filters.follows_filter,
kinds: filters.kinds,
max_age_days: filters.max_age_days,
from_date: filters.from_date,
to_date: filters.to_date,
max_events: filters.max_events,
};
@@ -864,7 +880,8 @@ async function executeCleanup() {
const params = new URLSearchParams();
params.set('follows_filter', filters.follows_filter);
if (filters.kinds.length > 0) params.set('kinds', filters.kinds.join(','));
if (filters.max_age_days > 0) params.set('max_age_days', String(filters.max_age_days));
if (filters.from_date) params.set('from_date', filters.from_date);
if (filters.to_date) params.set('to_date', filters.to_date);
if (filters.max_events > 0) params.set('max_events', String(filters.max_events));
try {
@@ -893,7 +910,8 @@ async function executeCleanupConfirmed() {
const body = {
follows_filter: filters.follows_filter,
kinds: filters.kinds,
max_age_days: filters.max_age_days,
from_date: filters.from_date,
to_date: filters.to_date,
max_events: filters.max_events,
dry_run: false,
};
@@ -942,7 +960,13 @@ async function loadSavedCleanupQuery(id) {
r.checked = r.value === q.follows_filter;
});
document.getElementById('cleanup-kinds').value = (q.kinds || []).join(', ');
document.getElementById('cleanup-max-age').value = q.max_age_days;
// Split stored datetime into date + time parts
const fromParts = (q.from_date || '').split(' ');
document.getElementById('cleanup-from-date').value = fromParts[0] || '';
document.getElementById('cleanup-from-time').value = fromParts[1] || '';
const toParts = (q.to_date || '').split(' ');
document.getElementById('cleanup-to-date').value = toParts[0] || '';
document.getElementById('cleanup-to-time').value = toParts[1] || '';
document.getElementById('cleanup-max-events').value = q.max_events;
document.getElementById('cleanup-results-group').style.display = 'none';
@@ -985,7 +1009,8 @@ async function runSavedCleanupExecute(id) {
const msg = `Query: ${name}\n`
+ `Follows: ${q.follows_filter}\n`
+ `Kinds: ${(q.kinds || []).join(', ') || 'all'}\n`
+ `Max age: ${q.max_age_days > 0 ? q.max_age_days + ' days' : 'no limit'}\n`
+ `From: ${q.from_date || 'no bound'}\n`
+ `To: ${q.to_date || 'no bound'}\n`
+ `Max events: ${q.max_events > 0 ? q.max_events.toLocaleString() : 'no limit'}`;
document.getElementById('cleanup-confirm-msg').textContent = msg;
document.getElementById('cleanup-confirm-btn').onclick = async () => {
+33
View File
@@ -281,6 +281,39 @@ body {
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
}
/* Cleanup Date/Time Inputs */
.datetime-group {
display: flex;
align-items: center;
gap: 6px;
flex-wrap: wrap;
}
.cleanup-date-input {
font-family: var(--font-family);
font-size: 13px;
padding: 4px 6px;
border: var(--border-width) solid var(--border-color);
border-radius: var(--border-radius);
background: var(--secondary-color);
color: var(--primary-color);
width: 160px;
}
.cleanup-time-input {
font-family: var(--font-family);
font-size: 13px;
padding: 4px 6px;
border: var(--border-width) solid var(--border-color);
border-radius: var(--border-radius);
background: var(--secondary-color);
color: var(--primary-color);
width: 110px;
}
.datetime-hint {
font-size: 11px;
color: var(--muted-color);
font-style: italic;
}
/* Cleanup Confirmation Modal */
.modal-overlay {
position: fixed;
+1 -1
View File
@@ -1 +1 @@
[]
[{"kind":1,"count":501,"pct":56.8},{"kind":7,"count":200,"pct":22.7},{"kind":9734,"count":110,"pct":12.5},{"kind":6,"count":30,"pct":3.4},{"kind":9735,"count":20,"pct":2.3},{"kind":3,"count":11,"pct":1.2},{"kind":0,"count":10,"pct":1.1}]
+1 -1
View File
@@ -1 +1 @@
[]
[{"pubkey":"4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa","name":"","count":182,"pct":20.6},{"pubkey":"eff555c8453f665bb54f907188aefba0e85c29aa9f5c30fa13d78d003c71265c","name":"Random User 4","count":70,"pct":7.9},{"pubkey":"9a90e4db8996e235a5bf1501013149d5f250b60e79336b69035f0b4dab8a4302","name":"Random User 9","count":70,"pct":7.9},{"pubkey":"b80c8c5fb175c50fe97d3a63658fa8b5dcc3e20da22dff8cef54317f6fe25394","name":"Random User 7","count":70,"pct":7.9},{"pubkey":"3d68fc5c3ddf8feef6cb6345817e4c6e421b5d292bef0be8d9a4809a23a4f0f5","name":"Random User 1","count":70,"pct":7.9},{"pubkey":"1c38f0e5446b8f5d7bc074f9f4b7afe85980706e765a5b1a3e4a52504e521ec1","name":"Random User 6","count":70,"pct":7.9},{"pubkey":"084857a219f6d73ec30fb90376e6f30161b07cd5d2130dffe47d32f229610b8a","name":"Random User 5","count":70,"pct":7.9},{"pubkey":"71691b130642de5af2b7f0a5ecf4eb374c46d913dbc72bc802005b24f9e87e11","name":"Random User 8","count":70,"pct":7.9},{"pubkey":"8d8b59e842e1529e0c448f05e570eccca82d9ca4500b758c9d44f478e96e8cdf","name":"Random User 10","count":70,"pct":7.9},{"pubkey":"f4bd9e04029c11440d545ffa66aeac45b87becf4075e2f321b0f5e8c30f187c2","name":"Random User 2","count":70,"pct":7.9},{"pubkey":"f2c0cadeee26653d9d2acd3788f6cc26d19b680d439640501eb1545afb94dd56","name":"Random User 3","count":70,"pct":7.9}]
+14 -2
View File
@@ -453,8 +453,20 @@ $display_name = $relay_version ? ($relay_name . ' ' . $relay_version) : $relay_n
</div>
</div>
<div class="form-group">
<label for="cleanup-max-age">Max Age (days, 0 = no limit):</label>
<input type="number" id="cleanup-max-age" value="0" min="0" style="width:120px">
<label>From (delete events after this):</label>
<div class="datetime-group">
<input type="date" id="cleanup-from-date" class="cleanup-date-input">
<input type="time" id="cleanup-from-time" class="cleanup-time-input">
<span class="datetime-hint">leave empty for no bound</span>
</div>
</div>
<div class="form-group">
<label>To (delete events before this):</label>
<div class="datetime-group">
<input type="date" id="cleanup-to-date" class="cleanup-date-input">
<input type="time" id="cleanup-to-time" class="cleanup-time-input">
<span class="datetime-hint">leave empty for no bound</span>
</div>
</div>
<div class="form-group">
<label for="cleanup-max-events">Max Events (0 = no limit):</label>
+771
View File
@@ -3237,3 +3237,774 @@ Stack trace:
[Sun Aug 2 17:12:49 2026] 127.0.0.1:41386 Accepted
[Sun Aug 2 17:12:49 2026] 127.0.0.1:41386 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:12:49 2026] 127.0.0.1:41386 Closing
[Sun Aug 2 17:12:59 2026] 127.0.0.1:56602 Accepted
[Sun Aug 2 17:12:59 2026] 127.0.0.1:56602 [200]: GET /api/stats.php
[Sun Aug 2 17:12:59 2026] 127.0.0.1:56602 Closing
[Sun Aug 2 17:12:59 2026] 127.0.0.1:56618 Accepted
[Sun Aug 2 17:12:59 2026] 127.0.0.1:56618 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:12:59 2026] 127.0.0.1:56618 Closing
[Sun Aug 2 17:13:09 2026] 127.0.0.1:48558 Accepted
[Sun Aug 2 17:13:09 2026] 127.0.0.1:48558 [200]: GET /api/stats.php
[Sun Aug 2 17:13:09 2026] 127.0.0.1:48558 Closing
[Sun Aug 2 17:13:09 2026] 127.0.0.1:48560 Accepted
[Sun Aug 2 17:13:09 2026] 127.0.0.1:48560 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:13:09 2026] 127.0.0.1:48560 Closing
[Sun Aug 2 17:13:19 2026] 127.0.0.1:40898 Accepted
[Sun Aug 2 17:13:19 2026] 127.0.0.1:40898 [200]: GET /api/stats.php
[Sun Aug 2 17:13:19 2026] 127.0.0.1:40898 Closing
[Sun Aug 2 17:13:19 2026] 127.0.0.1:40902 Accepted
[Sun Aug 2 17:13:19 2026] 127.0.0.1:40902 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:13:19 2026] 127.0.0.1:40902 Closing
[Sun Aug 2 17:13:29 2026] 127.0.0.1:41780 Accepted
[Sun Aug 2 17:13:29 2026] 127.0.0.1:41780 [200]: GET /api/stats.php
[Sun Aug 2 17:13:29 2026] 127.0.0.1:41780 Closing
[Sun Aug 2 17:13:29 2026] 127.0.0.1:41786 Accepted
[Sun Aug 2 17:13:29 2026] 127.0.0.1:41786 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:13:29 2026] 127.0.0.1:41786 Closing
[Sun Aug 2 17:13:39 2026] 127.0.0.1:42806 Accepted
[Sun Aug 2 17:13:39 2026] 127.0.0.1:42806 [200]: GET /api/stats.php
[Sun Aug 2 17:13:39 2026] 127.0.0.1:42806 Closing
[Sun Aug 2 17:13:39 2026] 127.0.0.1:42822 Accepted
[Sun Aug 2 17:13:39 2026] 127.0.0.1:42822 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:13:39 2026] 127.0.0.1:42822 Closing
[Sun Aug 2 17:13:49 2026] 127.0.0.1:33036 Accepted
[Sun Aug 2 17:13:49 2026] 127.0.0.1:33036 [200]: GET /api/stats.php
[Sun Aug 2 17:13:49 2026] 127.0.0.1:33036 Closing
[Sun Aug 2 17:13:49 2026] 127.0.0.1:33048 Accepted
[Sun Aug 2 17:13:49 2026] 127.0.0.1:33048 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:13:49 2026] 127.0.0.1:33048 Closing
[Sun Aug 2 17:13:59 2026] 127.0.0.1:51520 Accepted
[Sun Aug 2 17:13:59 2026] 127.0.0.1:51520 [200]: GET /api/stats.php
[Sun Aug 2 17:13:59 2026] 127.0.0.1:51520 Closing
[Sun Aug 2 17:13:59 2026] 127.0.0.1:51530 Accepted
[Sun Aug 2 17:13:59 2026] 127.0.0.1:51530 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:13:59 2026] 127.0.0.1:51530 Closing
[Sun Aug 2 17:14:09 2026] 127.0.0.1:35806 Accepted
[Sun Aug 2 17:14:09 2026] 127.0.0.1:35806 [200]: GET /api/stats.php
[Sun Aug 2 17:14:09 2026] 127.0.0.1:35806 Closing
[Sun Aug 2 17:14:09 2026] 127.0.0.1:35814 Accepted
[Sun Aug 2 17:14:09 2026] 127.0.0.1:35814 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:14:09 2026] 127.0.0.1:35814 Closing
[Sun Aug 2 17:14:19 2026] 127.0.0.1:47900 Accepted
[Sun Aug 2 17:14:19 2026] 127.0.0.1:47900 [200]: GET /api/stats.php
[Sun Aug 2 17:14:19 2026] 127.0.0.1:47900 Closing
[Sun Aug 2 17:14:19 2026] 127.0.0.1:47916 Accepted
[Sun Aug 2 17:14:19 2026] 127.0.0.1:47916 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:14:19 2026] 127.0.0.1:47916 Closing
[Sun Aug 2 17:14:29 2026] 127.0.0.1:42610 Accepted
[Sun Aug 2 17:14:29 2026] 127.0.0.1:42610 [200]: GET /api/stats.php
[Sun Aug 2 17:14:29 2026] 127.0.0.1:42610 Closing
[Sun Aug 2 17:14:29 2026] 127.0.0.1:42618 Accepted
[Sun Aug 2 17:14:29 2026] 127.0.0.1:42618 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:14:29 2026] 127.0.0.1:42618 Closing
[Sun Aug 2 17:14:39 2026] 127.0.0.1:56522 Accepted
[Sun Aug 2 17:14:39 2026] 127.0.0.1:56522 [200]: GET /api/stats.php
[Sun Aug 2 17:14:39 2026] 127.0.0.1:56522 Closing
[Sun Aug 2 17:14:39 2026] 127.0.0.1:56524 Accepted
[Sun Aug 2 17:14:39 2026] 127.0.0.1:56524 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:14:39 2026] 127.0.0.1:56524 Closing
[Sun Aug 2 17:14:50 2026] 127.0.0.1:44124 Accepted
[Sun Aug 2 17:14:50 2026] 127.0.0.1:44124 [200]: GET /api/stats.php
[Sun Aug 2 17:14:50 2026] 127.0.0.1:44124 Closing
[Sun Aug 2 17:14:50 2026] 127.0.0.1:44134 Accepted
[Sun Aug 2 17:14:50 2026] 127.0.0.1:44134 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:14:50 2026] 127.0.0.1:44134 Closing
[Sun Aug 2 17:15:00 2026] 127.0.0.1:48044 Accepted
[Sun Aug 2 17:15:00 2026] 127.0.0.1:48044 [200]: GET /api/stats.php
[Sun Aug 2 17:15:00 2026] 127.0.0.1:48044 Closing
[Sun Aug 2 17:15:00 2026] 127.0.0.1:48048 Accepted
[Sun Aug 2 17:15:00 2026] 127.0.0.1:48048 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:15:00 2026] 127.0.0.1:48048 Closing
[Sun Aug 2 17:15:10 2026] 127.0.0.1:52206 Accepted
[Sun Aug 2 17:15:10 2026] 127.0.0.1:52206 [200]: GET /api/stats.php
[Sun Aug 2 17:15:10 2026] 127.0.0.1:52206 Closing
[Sun Aug 2 17:15:10 2026] 127.0.0.1:52220 Accepted
[Sun Aug 2 17:15:10 2026] 127.0.0.1:52220 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:15:10 2026] 127.0.0.1:52220 Closing
[Sun Aug 2 17:15:20 2026] 127.0.0.1:37932 Accepted
[Sun Aug 2 17:15:20 2026] 127.0.0.1:37932 [200]: GET /api/stats.php
[Sun Aug 2 17:15:20 2026] 127.0.0.1:37932 Closing
[Sun Aug 2 17:15:20 2026] 127.0.0.1:37942 Accepted
[Sun Aug 2 17:15:20 2026] 127.0.0.1:37942 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:15:20 2026] 127.0.0.1:37942 Closing
[Sun Aug 2 17:15:30 2026] 127.0.0.1:50192 Accepted
[Sun Aug 2 17:15:30 2026] 127.0.0.1:50192 [200]: GET /api/stats.php
[Sun Aug 2 17:15:30 2026] 127.0.0.1:50192 Closing
[Sun Aug 2 17:15:30 2026] 127.0.0.1:50204 Accepted
[Sun Aug 2 17:15:30 2026] 127.0.0.1:50204 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:15:30 2026] 127.0.0.1:50204 Closing
[Sun Aug 2 17:15:40 2026] 127.0.0.1:58026 Accepted
[Sun Aug 2 17:15:40 2026] 127.0.0.1:58026 [200]: GET /api/stats.php
[Sun Aug 2 17:15:40 2026] 127.0.0.1:58026 Closing
[Sun Aug 2 17:15:40 2026] 127.0.0.1:58042 Accepted
[Sun Aug 2 17:15:40 2026] 127.0.0.1:58042 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:15:40 2026] 127.0.0.1:58042 Closing
[Sun Aug 2 17:16:39 2026] 127.0.0.1:36528 Accepted
[Sun Aug 2 17:16:39 2026] 127.0.0.1:36528 [200]: GET /api/stats.php
[Sun Aug 2 17:16:39 2026] 127.0.0.1:36528 Closing
[Sun Aug 2 17:16:39 2026] 127.0.0.1:36538 Accepted
[Sun Aug 2 17:16:39 2026] 127.0.0.1:36538 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:16:39 2026] 127.0.0.1:36538 Closing
[Sun Aug 2 17:17:39 2026] 127.0.0.1:35490 Accepted
[Sun Aug 2 17:17:39 2026] 127.0.0.1:35490 [200]: GET /api/stats.php
[Sun Aug 2 17:17:39 2026] 127.0.0.1:35490 Closing
[Sun Aug 2 17:17:39 2026] 127.0.0.1:35500 Accepted
[Sun Aug 2 17:17:39 2026] 127.0.0.1:35500 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:17:39 2026] 127.0.0.1:35500 Closing
[Sun Aug 2 17:18:39 2026] 127.0.0.1:54114 Accepted
[Sun Aug 2 17:18:39 2026] 127.0.0.1:54114 [200]: GET /api/stats.php
[Sun Aug 2 17:18:39 2026] 127.0.0.1:54114 Closing
[Sun Aug 2 17:18:39 2026] 127.0.0.1:54128 Accepted
[Sun Aug 2 17:18:39 2026] 127.0.0.1:54128 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:18:39 2026] 127.0.0.1:54128 Closing
[Sun Aug 2 17:19:39 2026] 127.0.0.1:34840 Accepted
[Sun Aug 2 17:19:39 2026] 127.0.0.1:34840 [200]: GET /api/stats.php
[Sun Aug 2 17:19:39 2026] 127.0.0.1:34840 Closing
[Sun Aug 2 17:19:39 2026] 127.0.0.1:34848 Accepted
[Sun Aug 2 17:19:39 2026] 127.0.0.1:34848 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:19:39 2026] 127.0.0.1:34848 Closing
[Sun Aug 2 17:20:39 2026] 127.0.0.1:38934 Accepted
[Sun Aug 2 17:20:39 2026] 127.0.0.1:38934 [200]: GET /api/stats.php
[Sun Aug 2 17:20:39 2026] 127.0.0.1:38934 Closing
[Sun Aug 2 17:20:39 2026] 127.0.0.1:38940 Accepted
[Sun Aug 2 17:20:39 2026] 127.0.0.1:38940 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:20:39 2026] 127.0.0.1:38940 Closing
[Sun Aug 2 17:21:24 2026] 127.0.0.1:35564 Accepted
[Sun Aug 2 17:21:24 2026] 127.0.0.1:35564 [200]: GET /api/stats.php
[Sun Aug 2 17:21:24 2026] 127.0.0.1:35564 Closing
[Sun Aug 2 17:21:24 2026] 127.0.0.1:35572 Accepted
[Sun Aug 2 17:21:24 2026] 127.0.0.1:35572 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:21:24 2026] 127.0.0.1:35572 Closing
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35582 Accepted
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35582 [200]: GET /index.php
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35582 Closing
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35594 Accepted
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35594 [200]: GET /assets/index.css
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35594 Closing
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35596 Accepted
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35610 Accepted
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35620 Accepted
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35596 [200]: GET /assets/nostr.bundle.js
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35610 [200]: GET /assets/nostr-lite.js
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35620 [200]: GET /assets/app.js
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35596 Closing
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35610 Closing
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35620 Closing
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35628 Accepted
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35628 [200]: GET /.well-known/appspecific/com.chrome.devtools.json
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35628 Closing
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35638 Accepted
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35638 [200]: GET /api/stats.php
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35638 Closing
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35642 Accepted
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35642 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35642 Closing
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35652 Accepted
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35662 Accepted
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35652 [200]: GET /favicon.ico
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35652 Closing
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35670 Accepted
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35662 [200]: GET /api/stats.php
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35662 Closing
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35670 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35670 Closing
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35686 Accepted
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35686 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35686 Closing
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35692 Accepted
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35692 [404]: GET /api/profile.php?pubkey=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
[Sun Aug 2 17:21:29 2026] 127.0.0.1:35692 Closing
[Sun Aug 2 17:21:39 2026] 127.0.0.1:58468 Accepted
[Sun Aug 2 17:21:39 2026] 127.0.0.1:58468 [200]: GET /api/stats.php
[Sun Aug 2 17:21:39 2026] 127.0.0.1:58468 Closing
[Sun Aug 2 17:21:39 2026] 127.0.0.1:58470 Accepted
[Sun Aug 2 17:21:39 2026] 127.0.0.1:58470 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:21:39 2026] 127.0.0.1:58470 Closing
[Sun Aug 2 17:21:49 2026] 127.0.0.1:60164 Accepted
[Sun Aug 2 17:21:49 2026] 127.0.0.1:60164 [200]: GET /api/stats.php
[Sun Aug 2 17:21:49 2026] 127.0.0.1:60164 Closing
[Sun Aug 2 17:21:49 2026] 127.0.0.1:60174 Accepted
[Sun Aug 2 17:21:49 2026] 127.0.0.1:60174 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:21:49 2026] 127.0.0.1:60174 Closing
[Sun Aug 2 17:21:59 2026] 127.0.0.1:58784 Accepted
[Sun Aug 2 17:21:59 2026] 127.0.0.1:58784 [200]: GET /api/stats.php
[Sun Aug 2 17:21:59 2026] 127.0.0.1:58784 Closing
[Sun Aug 2 17:21:59 2026] 127.0.0.1:58792 Accepted
[Sun Aug 2 17:21:59 2026] 127.0.0.1:58792 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:21:59 2026] 127.0.0.1:58792 Closing
[Sun Aug 2 17:22:09 2026] 127.0.0.1:33310 Accepted
[Sun Aug 2 17:22:09 2026] 127.0.0.1:33310 [200]: GET /api/stats.php
[Sun Aug 2 17:22:09 2026] 127.0.0.1:33310 Closing
[Sun Aug 2 17:22:09 2026] 127.0.0.1:33326 Accepted
[Sun Aug 2 17:22:09 2026] 127.0.0.1:33326 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:22:09 2026] 127.0.0.1:33326 Closing
[Sun Aug 2 17:22:19 2026] 127.0.0.1:32882 Accepted
[Sun Aug 2 17:22:19 2026] 127.0.0.1:32882 [200]: GET /api/stats.php
[Sun Aug 2 17:22:19 2026] 127.0.0.1:32882 Closing
[Sun Aug 2 17:22:19 2026] 127.0.0.1:32890 Accepted
[Sun Aug 2 17:22:19 2026] 127.0.0.1:32890 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:22:19 2026] 127.0.0.1:32890 Closing
[Sun Aug 2 17:22:29 2026] 127.0.0.1:41454 Accepted
[Sun Aug 2 17:22:29 2026] 127.0.0.1:41454 [200]: GET /api/stats.php
[Sun Aug 2 17:22:29 2026] 127.0.0.1:41454 Closing
[Sun Aug 2 17:22:29 2026] 127.0.0.1:41468 Accepted
[Sun Aug 2 17:22:29 2026] 127.0.0.1:41468 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:22:29 2026] 127.0.0.1:41468 Closing
[Sun Aug 2 17:22:39 2026] 127.0.0.1:40002 Accepted
[Sun Aug 2 17:22:39 2026] 127.0.0.1:40002 [200]: GET /api/stats.php
[Sun Aug 2 17:22:39 2026] 127.0.0.1:40002 Closing
[Sun Aug 2 17:22:39 2026] 127.0.0.1:40014 Accepted
[Sun Aug 2 17:22:39 2026] 127.0.0.1:40014 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:22:39 2026] 127.0.0.1:40014 Closing
[Sun Aug 2 17:22:49 2026] 127.0.0.1:42208 Accepted
[Sun Aug 2 17:22:49 2026] 127.0.0.1:42208 [200]: GET /api/stats.php
[Sun Aug 2 17:22:49 2026] 127.0.0.1:42208 Closing
[Sun Aug 2 17:22:49 2026] 127.0.0.1:42212 Accepted
[Sun Aug 2 17:22:49 2026] 127.0.0.1:42212 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:22:49 2026] 127.0.0.1:42212 Closing
[Sun Aug 2 17:22:59 2026] 127.0.0.1:54728 Accepted
[Sun Aug 2 17:22:59 2026] 127.0.0.1:54728 [200]: GET /api/stats.php
[Sun Aug 2 17:22:59 2026] 127.0.0.1:54728 Closing
[Sun Aug 2 17:22:59 2026] 127.0.0.1:54744 Accepted
[Sun Aug 2 17:22:59 2026] 127.0.0.1:54744 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:22:59 2026] 127.0.0.1:54744 Closing
[Sun Aug 2 17:23:09 2026] 127.0.0.1:58778 Accepted
[Sun Aug 2 17:23:09 2026] 127.0.0.1:58778 [200]: GET /api/stats.php
[Sun Aug 2 17:23:09 2026] 127.0.0.1:58778 Closing
[Sun Aug 2 17:23:09 2026] 127.0.0.1:58792 Accepted
[Sun Aug 2 17:23:09 2026] 127.0.0.1:58792 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:23:09 2026] 127.0.0.1:58792 Closing
[Sun Aug 2 17:23:19 2026] 127.0.0.1:43280 Accepted
[Sun Aug 2 17:23:19 2026] 127.0.0.1:43280 [200]: GET /api/stats.php
[Sun Aug 2 17:23:19 2026] 127.0.0.1:43280 Closing
[Sun Aug 2 17:23:19 2026] 127.0.0.1:43288 Accepted
[Sun Aug 2 17:23:19 2026] 127.0.0.1:43288 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:23:19 2026] 127.0.0.1:43288 Closing
[Sun Aug 2 17:23:29 2026] 127.0.0.1:53080 Accepted
[Sun Aug 2 17:23:29 2026] 127.0.0.1:53080 [200]: GET /api/stats.php
[Sun Aug 2 17:23:29 2026] 127.0.0.1:53080 Closing
[Sun Aug 2 17:23:29 2026] 127.0.0.1:53088 Accepted
[Sun Aug 2 17:23:29 2026] 127.0.0.1:53088 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:23:29 2026] 127.0.0.1:53088 Closing
[Sun Aug 2 17:23:39 2026] 127.0.0.1:40550 Accepted
[Sun Aug 2 17:23:39 2026] 127.0.0.1:40550 [200]: GET /api/stats.php
[Sun Aug 2 17:23:39 2026] 127.0.0.1:40550 Closing
[Sun Aug 2 17:23:39 2026] 127.0.0.1:40562 Accepted
[Sun Aug 2 17:23:39 2026] 127.0.0.1:40562 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:23:39 2026] 127.0.0.1:40562 Closing
[Sun Aug 2 17:23:49 2026] 127.0.0.1:36810 Accepted
[Sun Aug 2 17:23:49 2026] 127.0.0.1:36810 [200]: GET /api/stats.php
[Sun Aug 2 17:23:49 2026] 127.0.0.1:36810 Closing
[Sun Aug 2 17:23:49 2026] 127.0.0.1:36820 Accepted
[Sun Aug 2 17:23:49 2026] 127.0.0.1:36820 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:23:49 2026] 127.0.0.1:36820 Closing
[Sun Aug 2 17:23:59 2026] 127.0.0.1:34526 Accepted
[Sun Aug 2 17:23:59 2026] 127.0.0.1:34526 [200]: GET /api/stats.php
[Sun Aug 2 17:23:59 2026] 127.0.0.1:34526 Closing
[Sun Aug 2 17:23:59 2026] 127.0.0.1:34534 Accepted
[Sun Aug 2 17:23:59 2026] 127.0.0.1:34534 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:23:59 2026] 127.0.0.1:34534 Closing
[Sun Aug 2 17:24:09 2026] 127.0.0.1:58146 Accepted
[Sun Aug 2 17:24:09 2026] 127.0.0.1:58146 [200]: GET /api/stats.php
[Sun Aug 2 17:24:09 2026] 127.0.0.1:58146 Closing
[Sun Aug 2 17:24:09 2026] 127.0.0.1:58150 Accepted
[Sun Aug 2 17:24:09 2026] 127.0.0.1:58150 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:24:09 2026] 127.0.0.1:58150 Closing
[Sun Aug 2 17:24:19 2026] 127.0.0.1:39692 Accepted
[Sun Aug 2 17:24:19 2026] 127.0.0.1:39692 [200]: GET /api/stats.php
[Sun Aug 2 17:24:19 2026] 127.0.0.1:39692 Closing
[Sun Aug 2 17:24:19 2026] 127.0.0.1:39700 Accepted
[Sun Aug 2 17:24:19 2026] 127.0.0.1:39700 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:24:19 2026] 127.0.0.1:39700 Closing
[Sun Aug 2 17:24:29 2026] 127.0.0.1:35502 Accepted
[Sun Aug 2 17:24:29 2026] 127.0.0.1:35502 [200]: GET /api/stats.php
[Sun Aug 2 17:24:29 2026] 127.0.0.1:35502 Closing
[Sun Aug 2 17:24:29 2026] 127.0.0.1:35512 Accepted
[Sun Aug 2 17:24:29 2026] 127.0.0.1:35512 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:24:29 2026] 127.0.0.1:35512 Closing
[Sun Aug 2 17:24:39 2026] 127.0.0.1:39186 Accepted
[Sun Aug 2 17:24:39 2026] 127.0.0.1:39186 [200]: GET /api/stats.php
[Sun Aug 2 17:24:39 2026] 127.0.0.1:39186 Closing
[Sun Aug 2 17:24:39 2026] 127.0.0.1:39188 Accepted
[Sun Aug 2 17:24:39 2026] 127.0.0.1:39188 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:24:39 2026] 127.0.0.1:39188 Closing
[Sun Aug 2 17:24:49 2026] 127.0.0.1:47360 Accepted
[Sun Aug 2 17:24:49 2026] 127.0.0.1:47360 [200]: GET /api/stats.php
[Sun Aug 2 17:24:49 2026] 127.0.0.1:47360 Closing
[Sun Aug 2 17:24:49 2026] 127.0.0.1:47362 Accepted
[Sun Aug 2 17:24:49 2026] 127.0.0.1:47362 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:24:49 2026] 127.0.0.1:47362 Closing
[Sun Aug 2 17:24:59 2026] 127.0.0.1:37802 Accepted
[Sun Aug 2 17:24:59 2026] 127.0.0.1:37802 [200]: GET /api/stats.php
[Sun Aug 2 17:24:59 2026] 127.0.0.1:37802 Closing
[Sun Aug 2 17:24:59 2026] 127.0.0.1:37816 Accepted
[Sun Aug 2 17:24:59 2026] 127.0.0.1:37816 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:24:59 2026] 127.0.0.1:37816 Closing
[Sun Aug 2 17:25:09 2026] 127.0.0.1:40712 Accepted
[Sun Aug 2 17:25:09 2026] 127.0.0.1:40712 [200]: GET /api/stats.php
[Sun Aug 2 17:25:09 2026] 127.0.0.1:40712 Closing
[Sun Aug 2 17:25:09 2026] 127.0.0.1:40718 Accepted
[Sun Aug 2 17:25:09 2026] 127.0.0.1:40718 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:25:09 2026] 127.0.0.1:40718 Closing
[Sun Aug 2 17:25:19 2026] 127.0.0.1:35140 Accepted
[Sun Aug 2 17:25:19 2026] 127.0.0.1:35140 [200]: GET /api/stats.php
[Sun Aug 2 17:25:19 2026] 127.0.0.1:35140 Closing
[Sun Aug 2 17:25:19 2026] 127.0.0.1:35156 Accepted
[Sun Aug 2 17:25:19 2026] 127.0.0.1:35156 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:25:19 2026] 127.0.0.1:35156 Closing
[Sun Aug 2 17:25:29 2026] 127.0.0.1:46804 Accepted
[Sun Aug 2 17:25:29 2026] 127.0.0.1:46804 [200]: GET /api/stats.php
[Sun Aug 2 17:25:29 2026] 127.0.0.1:46804 Closing
[Sun Aug 2 17:25:29 2026] 127.0.0.1:46806 Accepted
[Sun Aug 2 17:25:29 2026] 127.0.0.1:46806 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:25:29 2026] 127.0.0.1:46806 Closing
[Sun Aug 2 17:25:39 2026] 127.0.0.1:58034 Accepted
[Sun Aug 2 17:25:39 2026] 127.0.0.1:58034 [200]: GET /api/stats.php
[Sun Aug 2 17:25:39 2026] 127.0.0.1:58034 Closing
[Sun Aug 2 17:25:39 2026] 127.0.0.1:58044 Accepted
[Sun Aug 2 17:25:39 2026] 127.0.0.1:58044 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:25:39 2026] 127.0.0.1:58044 Closing
[Sun Aug 2 17:25:49 2026] 127.0.0.1:38730 Accepted
[Sun Aug 2 17:25:49 2026] 127.0.0.1:38730 [200]: GET /api/stats.php
[Sun Aug 2 17:25:49 2026] 127.0.0.1:38730 Closing
[Sun Aug 2 17:25:49 2026] 127.0.0.1:38746 Accepted
[Sun Aug 2 17:25:49 2026] 127.0.0.1:38746 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:25:49 2026] 127.0.0.1:38746 Closing
[Sun Aug 2 17:25:59 2026] 127.0.0.1:40212 Accepted
[Sun Aug 2 17:25:59 2026] 127.0.0.1:40212 [200]: GET /api/stats.php
[Sun Aug 2 17:25:59 2026] 127.0.0.1:40212 Closing
[Sun Aug 2 17:25:59 2026] 127.0.0.1:40228 Accepted
[Sun Aug 2 17:25:59 2026] 127.0.0.1:40228 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:25:59 2026] 127.0.0.1:40228 Closing
[Sun Aug 2 17:26:09 2026] 127.0.0.1:58290 Accepted
[Sun Aug 2 17:26:09 2026] 127.0.0.1:58290 [200]: GET /api/stats.php
[Sun Aug 2 17:26:09 2026] 127.0.0.1:58290 Closing
[Sun Aug 2 17:26:09 2026] 127.0.0.1:58304 Accepted
[Sun Aug 2 17:26:09 2026] 127.0.0.1:58304 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:26:09 2026] 127.0.0.1:58304 Closing
[Sun Aug 2 17:26:19 2026] 127.0.0.1:51606 Accepted
[Sun Aug 2 17:26:19 2026] 127.0.0.1:51606 [200]: GET /api/stats.php
[Sun Aug 2 17:26:19 2026] 127.0.0.1:51606 Closing
[Sun Aug 2 17:26:19 2026] 127.0.0.1:51616 Accepted
[Sun Aug 2 17:26:19 2026] 127.0.0.1:51616 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:26:19 2026] 127.0.0.1:51616 Closing
[Sun Aug 2 17:26:29 2026] 127.0.0.1:54734 Accepted
[Sun Aug 2 17:26:29 2026] 127.0.0.1:54734 [200]: GET /api/stats.php
[Sun Aug 2 17:26:29 2026] 127.0.0.1:54734 Closing
[Sun Aug 2 17:26:29 2026] 127.0.0.1:54746 Accepted
[Sun Aug 2 17:26:29 2026] 127.0.0.1:54746 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:26:29 2026] 127.0.0.1:54746 Closing
[Sun Aug 2 17:26:39 2026] 127.0.0.1:47508 Accepted
[Sun Aug 2 17:26:39 2026] 127.0.0.1:47508 [200]: GET /api/stats.php
[Sun Aug 2 17:26:39 2026] 127.0.0.1:47508 Closing
[Sun Aug 2 17:26:39 2026] 127.0.0.1:47512 Accepted
[Sun Aug 2 17:26:39 2026] 127.0.0.1:47512 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:26:39 2026] 127.0.0.1:47512 Closing
[Sun Aug 2 17:26:49 2026] 127.0.0.1:57426 Accepted
[Sun Aug 2 17:26:49 2026] 127.0.0.1:57426 [200]: GET /api/stats.php
[Sun Aug 2 17:26:49 2026] 127.0.0.1:57426 Closing
[Sun Aug 2 17:26:49 2026] 127.0.0.1:57432 Accepted
[Sun Aug 2 17:26:49 2026] 127.0.0.1:57432 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:26:49 2026] 127.0.0.1:57432 Closing
[Sun Aug 2 17:26:59 2026] 127.0.0.1:43684 Accepted
[Sun Aug 2 17:26:59 2026] 127.0.0.1:43684 [200]: GET /api/stats.php
[Sun Aug 2 17:26:59 2026] 127.0.0.1:43684 Closing
[Sun Aug 2 17:26:59 2026] 127.0.0.1:43694 Accepted
[Sun Aug 2 17:26:59 2026] 127.0.0.1:43694 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:26:59 2026] 127.0.0.1:43694 Closing
[Sun Aug 2 17:27:09 2026] 127.0.0.1:34260 Accepted
[Sun Aug 2 17:27:09 2026] 127.0.0.1:34260 [200]: GET /api/stats.php
[Sun Aug 2 17:27:09 2026] 127.0.0.1:34260 Closing
[Sun Aug 2 17:27:09 2026] 127.0.0.1:34270 Accepted
[Sun Aug 2 17:27:09 2026] 127.0.0.1:34270 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:27:09 2026] 127.0.0.1:34270 Closing
[Sun Aug 2 17:27:10 2026] 127.0.0.1:34284 Accepted
[Sun Aug 2 17:27:10 2026] 127.0.0.1:34284 [200]: GET /api/cleanup_queries.php
[Sun Aug 2 17:27:10 2026] 127.0.0.1:34284 Closing
[Sun Aug 2 17:27:24 2026] 127.0.0.1:43980 Accepted
[Sun Aug 2 17:27:24 2026] 127.0.0.1:43980 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:27:24 2026] 127.0.0.1:43980 Closing
[Sun Aug 2 17:27:24 2026] 127.0.0.1:43988 Accepted
[Sun Aug 2 17:27:24 2026] 127.0.0.1:43988 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:27:24 2026] 127.0.0.1:43988 Closing
[Sun Aug 2 17:27:32 2026] 127.0.0.1:43998 Accepted
[Sun Aug 2 17:27:32 2026] 127.0.0.1:43998 [200]: GET /api/cleanup_queries.php
[Sun Aug 2 17:27:32 2026] 127.0.0.1:43998 Closing
[Sun Aug 2 17:33:34 2026] 127.0.0.1:44574 Accepted
[Sun Aug 2 17:33:34 2026] 127.0.0.1:44574 [200]: GET /api/stats.php
[Sun Aug 2 17:33:34 2026] 127.0.0.1:44574 Closing
[Sun Aug 2 17:33:34 2026] 127.0.0.1:44578 Accepted
[Sun Aug 2 17:33:34 2026] 127.0.0.1:44578 [200]: GET /api/stats.php
[Sun Aug 2 17:33:34 2026] 127.0.0.1:44578 Closing
[Sun Aug 2 17:33:34 2026] 127.0.0.1:44586 Accepted
[Sun Aug 2 17:33:34 2026] 127.0.0.1:44586 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:33:34 2026] 127.0.0.1:44586 Closing
[Sun Aug 2 17:33:34 2026] 127.0.0.1:44602 Accepted
[Sun Aug 2 17:33:34 2026] 127.0.0.1:44602 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:33:34 2026] 127.0.0.1:44602 Closing
[Sun Aug 2 17:33:41 2026] 127.0.0.1:44616 Accepted
[Sun Aug 2 17:33:41 2026] 127.0.0.1:44616 [200]: GET /api/cleanup_queries.php
[Sun Aug 2 17:33:41 2026] 127.0.0.1:44616 Closing
[Sun Aug 2 17:34:08 2026] 127.0.0.1:52032 Accepted
[Sun Aug 2 17:34:08 2026] 127.0.0.1:52032 [200]: GET /api/cleanup.php?follows_filter=follows&kinds=3023
[Sun Aug 2 17:34:08 2026] 127.0.0.1:52032 Closing
[Sun Aug 2 17:34:22 2026] 127.0.0.1:36666 Accepted
[Sun Aug 2 17:34:22 2026] 127.0.0.1:36666 [200]: GET /api/cleanup.php?follows_filter=non_follows&kinds=3023
[Sun Aug 2 17:34:22 2026] 127.0.0.1:36666 Closing
[Sun Aug 2 17:34:24 2026] 127.0.0.1:38772 Accepted
[Sun Aug 2 17:34:24 2026] 127.0.0.1:38772 [200]: GET /api/cleanup.php?follows_filter=non_follows&kinds=3023
[Sun Aug 2 17:34:24 2026] 127.0.0.1:38772 Closing
[Sun Aug 2 17:34:27 2026] 127.0.0.1:38782 Accepted
[Sun Aug 2 17:34:27 2026] 127.0.0.1:38782 [200]: GET /api/cleanup.php?follows_filter=all&kinds=3023
[Sun Aug 2 17:34:27 2026] 127.0.0.1:38782 Closing
[Sun Aug 2 17:34:39 2026] 127.0.0.1:59922 Accepted
[Sun Aug 2 17:34:39 2026] 127.0.0.1:59922 [200]: GET /api/cleanup.php?follows_filter=all&kinds=3023
[Sun Aug 2 17:34:39 2026] 127.0.0.1:59922 Closing
[Sun Aug 2 17:34:40 2026] 127.0.0.1:59924 Accepted
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59924 [200]: GET /index.php
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59924 Closing
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59936 Accepted
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59936 [200]: GET /assets/index.css
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59936 Closing
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59948 Accepted
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59964 Accepted
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59966 Accepted
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59948 [200]: GET /assets/nostr.bundle.js
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59964 [200]: GET /assets/nostr-lite.js
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59966 [200]: GET /assets/app.js
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59948 Closing
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59964 Closing
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59966 Closing
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59968 Accepted
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59984 Accepted
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59968 [200]: GET /api/stats.php
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59968 Closing
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59986 Accepted
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59984 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59984 Closing
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59996 Accepted
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59986 [200]: GET /favicon.ico
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59986 Closing
[Sun Aug 2 17:34:41 2026] 127.0.0.1:60008 Accepted
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59996 [200]: GET /api/stats.php
[Sun Aug 2 17:34:41 2026] 127.0.0.1:59996 Closing
[Sun Aug 2 17:34:41 2026] 127.0.0.1:60008 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:34:41 2026] 127.0.0.1:60008 Closing
[Sun Aug 2 17:34:41 2026] 127.0.0.1:60012 Accepted
[Sun Aug 2 17:34:41 2026] 127.0.0.1:60012 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:34:41 2026] 127.0.0.1:60012 Closing
[Sun Aug 2 17:34:41 2026] 127.0.0.1:60026 Accepted
[Sun Aug 2 17:34:41 2026] 127.0.0.1:60026 [404]: GET /api/profile.php?pubkey=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
[Sun Aug 2 17:34:41 2026] 127.0.0.1:60026 Closing
[Sun Aug 2 17:34:44 2026] 127.0.0.1:48372 Accepted
[Sun Aug 2 17:34:44 2026] 127.0.0.1:48372 [200]: GET /api/cleanup_queries.php
[Sun Aug 2 17:34:44 2026] 127.0.0.1:48372 Closing
[Sun Aug 2 17:34:50 2026] 127.0.0.1:48374 Accepted
[Sun Aug 2 17:34:50 2026] 127.0.0.1:48374 [200]: GET /api/cleanup.php?follows_filter=all&kinds=3023
[Sun Aug 2 17:34:50 2026] 127.0.0.1:48374 Closing
[Sun Aug 2 17:34:56 2026] 127.0.0.1:37302 Accepted
[Sun Aug 2 17:34:56 2026] 127.0.0.1:37302 [200]: GET /api/stats.php
[Sun Aug 2 17:34:56 2026] 127.0.0.1:37302 Closing
[Sun Aug 2 17:34:56 2026] 127.0.0.1:37304 Accepted
[Sun Aug 2 17:34:56 2026] 127.0.0.1:37304 [200]: GET /api/stats.php
[Sun Aug 2 17:34:56 2026] 127.0.0.1:37304 Closing
[Sun Aug 2 17:34:56 2026] 127.0.0.1:37320 Accepted
[Sun Aug 2 17:34:56 2026] 127.0.0.1:37320 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:34:56 2026] 127.0.0.1:37320 Closing
[Sun Aug 2 17:34:56 2026] 127.0.0.1:37334 Accepted
[Sun Aug 2 17:34:56 2026] 127.0.0.1:37334 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:34:56 2026] 127.0.0.1:37334 Closing
[Sun Aug 2 17:35:05 2026] 127.0.0.1:58204 Accepted
[Sun Aug 2 17:35:05 2026] 127.0.0.1:58204 [200]: GET /api/cleanup_queries.php
[Sun Aug 2 17:35:05 2026] 127.0.0.1:58204 Closing
[Sun Aug 2 17:35:10 2026] 127.0.0.1:58214 Accepted
[Sun Aug 2 17:35:10 2026] 127.0.0.1:58214 [200]: GET /api/cleanup.php?follows_filter=all&kinds=30023
[Sun Aug 2 17:35:10 2026] 127.0.0.1:58214 Closing
[Sun Aug 2 17:35:18 2026] 127.0.0.1:33664 Accepted
[Sun Aug 2 17:35:18 2026] 127.0.0.1:33664 [200]: GET /api/cleanup.php?follows_filter=all&kinds=30023
[Sun Aug 2 17:35:18 2026] 127.0.0.1:33664 Closing
[Sun Aug 2 17:35:19 2026] 127.0.0.1:33680 Accepted
[Sun Aug 2 17:35:19 2026] 127.0.0.1:33680 [200]: POST /api/cleanup.php
[Sun Aug 2 17:35:19 2026] 127.0.0.1:33680 Closing
[Sun Aug 2 17:35:19 2026] 127.0.0.1:33690 Accepted
[Sun Aug 2 17:35:19 2026] 127.0.0.1:33690 [200]: GET /api/cleanup_queries.php
[Sun Aug 2 17:35:19 2026] 127.0.0.1:33690 Closing
[Sun Aug 2 17:35:24 2026] 127.0.0.1:44122 Accepted
[Sun Aug 2 17:35:24 2026] 127.0.0.1:44122 [200]: GET /api/stats.php
[Sun Aug 2 17:35:24 2026] 127.0.0.1:44122 Closing
[Sun Aug 2 17:35:24 2026] 127.0.0.1:44134 Accepted
[Sun Aug 2 17:35:24 2026] 127.0.0.1:44134 [200]: GET /api/stats.php
[Sun Aug 2 17:35:24 2026] 127.0.0.1:44134 Closing
[Sun Aug 2 17:35:24 2026] 127.0.0.1:44148 Accepted
[Sun Aug 2 17:35:24 2026] 127.0.0.1:44148 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:35:24 2026] 127.0.0.1:44148 Closing
[Sun Aug 2 17:35:24 2026] 127.0.0.1:44154 Accepted
[Sun Aug 2 17:35:24 2026] 127.0.0.1:44154 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:35:24 2026] 127.0.0.1:44154 Closing
[Sun Aug 2 17:35:34 2026] 127.0.0.1:55700 Accepted
[Sun Aug 2 17:35:34 2026] 127.0.0.1:55700 [200]: GET /api/stats.php
[Sun Aug 2 17:35:34 2026] 127.0.0.1:55700 Closing
[Sun Aug 2 17:35:34 2026] 127.0.0.1:55710 Accepted
[Sun Aug 2 17:35:34 2026] 127.0.0.1:55710 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:35:34 2026] 127.0.0.1:55710 Closing
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55716 Accepted
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55716 [200]: GET /index.php
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55716 Closing
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55726 Accepted
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55738 Accepted
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55746 Accepted
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55748 Accepted
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55726 [200]: GET /assets/index.css
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55726 Closing
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55738 [200]: GET /assets/nostr.bundle.js
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55738 Closing
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55746 [200]: GET /assets/nostr-lite.js
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55748 [200]: GET /assets/app.js
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55746 Closing
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55748 Closing
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55750 Accepted
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55750 [200]: GET /api/stats.php
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55750 Closing
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55760 Accepted
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55772 Accepted
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55760 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55760 Closing
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55786 Accepted
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55772 [200]: GET /favicon.ico
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55772 Closing
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55790 Accepted
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55786 [200]: GET /api/stats.php
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55786 Closing
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55790 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55790 Closing
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55798 Accepted
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55798 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:35:38 2026] 127.0.0.1:55798 Closing
[Sun Aug 2 17:35:39 2026] 127.0.0.1:55802 Accepted
[Sun Aug 2 17:35:39 2026] 127.0.0.1:55802 [404]: GET /api/profile.php?pubkey=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
[Sun Aug 2 17:35:39 2026] 127.0.0.1:55802 Closing
[Sun Aug 2 17:35:48 2026] 127.0.0.1:60432 Accepted
[Sun Aug 2 17:35:48 2026] 127.0.0.1:60432 [200]: GET /api/stats.php
[Sun Aug 2 17:35:48 2026] 127.0.0.1:60432 Closing
[Sun Aug 2 17:35:48 2026] 127.0.0.1:60438 Accepted
[Sun Aug 2 17:35:48 2026] 127.0.0.1:60438 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:35:48 2026] 127.0.0.1:60438 Closing
[Sun Aug 2 17:35:58 2026] 127.0.0.1:34342 Accepted
[Sun Aug 2 17:35:58 2026] 127.0.0.1:34342 [200]: GET /api/stats.php
[Sun Aug 2 17:35:58 2026] 127.0.0.1:34342 Closing
[Sun Aug 2 17:35:58 2026] 127.0.0.1:34348 Accepted
[Sun Aug 2 17:35:58 2026] 127.0.0.1:34348 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:35:58 2026] 127.0.0.1:34348 Closing
[Sun Aug 2 17:36:08 2026] 127.0.0.1:40448 Accepted
[Sun Aug 2 17:36:08 2026] 127.0.0.1:40448 [200]: GET /api/stats.php
[Sun Aug 2 17:36:08 2026] 127.0.0.1:40448 Closing
[Sun Aug 2 17:36:08 2026] 127.0.0.1:40464 Accepted
[Sun Aug 2 17:36:08 2026] 127.0.0.1:40464 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:36:08 2026] 127.0.0.1:40464 Closing
[Sun Aug 2 17:36:18 2026] 127.0.0.1:48204 Accepted
[Sun Aug 2 17:36:18 2026] 127.0.0.1:48204 [200]: GET /api/stats.php
[Sun Aug 2 17:36:18 2026] 127.0.0.1:48204 Closing
[Sun Aug 2 17:36:18 2026] 127.0.0.1:48218 Accepted
[Sun Aug 2 17:36:18 2026] 127.0.0.1:48218 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:36:18 2026] 127.0.0.1:48218 Closing
[Sun Aug 2 17:36:28 2026] 127.0.0.1:33884 Accepted
[Sun Aug 2 17:36:28 2026] 127.0.0.1:33884 [200]: GET /api/stats.php
[Sun Aug 2 17:36:28 2026] 127.0.0.1:33884 Closing
[Sun Aug 2 17:36:28 2026] 127.0.0.1:33890 Accepted
[Sun Aug 2 17:36:28 2026] 127.0.0.1:33890 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:36:28 2026] 127.0.0.1:33890 Closing
[Sun Aug 2 17:36:38 2026] 127.0.0.1:60928 Accepted
[Sun Aug 2 17:36:38 2026] 127.0.0.1:60928 [200]: GET /api/stats.php
[Sun Aug 2 17:36:38 2026] 127.0.0.1:60928 Closing
[Sun Aug 2 17:36:38 2026] 127.0.0.1:60936 Accepted
[Sun Aug 2 17:36:38 2026] 127.0.0.1:60936 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:36:38 2026] 127.0.0.1:60936 Closing
[Sun Aug 2 17:36:48 2026] 127.0.0.1:51134 Accepted
[Sun Aug 2 17:36:48 2026] 127.0.0.1:51134 [200]: GET /api/stats.php
[Sun Aug 2 17:36:48 2026] 127.0.0.1:51134 Closing
[Sun Aug 2 17:36:48 2026] 127.0.0.1:51136 Accepted
[Sun Aug 2 17:36:48 2026] 127.0.0.1:51136 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:36:48 2026] 127.0.0.1:51136 Closing
[Sun Aug 2 17:36:58 2026] 127.0.0.1:59952 Accepted
[Sun Aug 2 17:36:58 2026] 127.0.0.1:59952 [200]: GET /api/stats.php
[Sun Aug 2 17:36:58 2026] 127.0.0.1:59952 Closing
[Sun Aug 2 17:36:58 2026] 127.0.0.1:59958 Accepted
[Sun Aug 2 17:36:58 2026] 127.0.0.1:59958 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:36:58 2026] 127.0.0.1:59958 Closing
[Sun Aug 2 17:37:05 2026] 127.0.0.1:42404 Accepted
[Sun Aug 2 17:37:05 2026] 127.0.0.1:42404 [200]: GET /api/cleanup_queries.php
[Sun Aug 2 17:37:05 2026] 127.0.0.1:42404 Closing
[Sun Aug 2 17:39:24 2026] 127.0.0.1:52106 Accepted
[Sun Aug 2 17:39:24 2026] 127.0.0.1:52106 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:39:24 2026] 127.0.0.1:52106 Closing
[Sun Aug 2 17:39:24 2026] 127.0.0.1:52116 Accepted
[Sun Aug 2 17:39:24 2026] 127.0.0.1:52116 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:39:24 2026] 127.0.0.1:52116 Closing
[Sun Aug 2 17:39:34 2026] 127.0.0.1:37848 Accepted
[Sun Aug 2 17:39:34 2026] 127.0.0.1:37848 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:39:34 2026] 127.0.0.1:37848 Closing
[Sun Aug 2 17:39:44 2026] 127.0.0.1:51354 Accepted
[Sun Aug 2 17:39:44 2026] 127.0.0.1:51354 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:39:44 2026] 127.0.0.1:51354 Closing
[Sun Aug 2 17:39:54 2026] 127.0.0.1:33746 Accepted
[Sun Aug 2 17:39:54 2026] 127.0.0.1:33746 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:39:54 2026] 127.0.0.1:33746 Closing
[Sun Aug 2 17:40:04 2026] 127.0.0.1:52364 Accepted
[Sun Aug 2 17:40:04 2026] 127.0.0.1:52364 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:40:04 2026] 127.0.0.1:52364 Closing
[Sun Aug 2 17:40:14 2026] 127.0.0.1:46640 Accepted
[Sun Aug 2 17:40:14 2026] 127.0.0.1:46640 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:40:14 2026] 127.0.0.1:46640 Closing
[Sun Aug 2 17:40:24 2026] 127.0.0.1:32844 Accepted
[Sun Aug 2 17:40:24 2026] 127.0.0.1:32844 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:40:24 2026] 127.0.0.1:32844 Closing
[Sun Aug 2 17:40:34 2026] 127.0.0.1:37218 Accepted
[Sun Aug 2 17:40:34 2026] 127.0.0.1:37218 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:40:34 2026] 127.0.0.1:37218 Closing
[Sun Aug 2 17:40:44 2026] 127.0.0.1:53012 Accepted
[Sun Aug 2 17:40:44 2026] 127.0.0.1:53012 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:40:44 2026] 127.0.0.1:53012 Closing
[Sun Aug 2 17:40:54 2026] 127.0.0.1:47382 Accepted
[Sun Aug 2 17:40:54 2026] 127.0.0.1:47382 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:40:54 2026] 127.0.0.1:47382 Closing
[Sun Aug 2 17:41:04 2026] 127.0.0.1:56362 Accepted
[Sun Aug 2 17:41:04 2026] 127.0.0.1:56362 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:41:04 2026] 127.0.0.1:56362 Closing
[Sun Aug 2 17:41:14 2026] 127.0.0.1:58268 Accepted
[Sun Aug 2 17:41:14 2026] 127.0.0.1:58268 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:41:14 2026] 127.0.0.1:58268 Closing
[Sun Aug 2 17:41:24 2026] 127.0.0.1:38366 Accepted
[Sun Aug 2 17:41:24 2026] 127.0.0.1:38366 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:41:24 2026] 127.0.0.1:38366 Closing
[Sun Aug 2 17:41:34 2026] 127.0.0.1:59490 Accepted
[Sun Aug 2 17:41:34 2026] 127.0.0.1:59490 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:41:34 2026] 127.0.0.1:59490 Closing
[Sun Aug 2 17:41:44 2026] 127.0.0.1:46120 Accepted
[Sun Aug 2 17:41:44 2026] 127.0.0.1:46120 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:41:44 2026] 127.0.0.1:46120 Closing
[Sun Aug 2 17:41:54 2026] 127.0.0.1:45214 Accepted
[Sun Aug 2 17:41:54 2026] 127.0.0.1:45214 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:41:54 2026] 127.0.0.1:45214 Closing
[Sun Aug 2 17:42:00 2026] 127.0.0.1:45216 Accepted
[Sun Aug 2 17:42:00 2026] 127.0.0.1:45216 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:42:00 2026] 127.0.0.1:45216 Closing
[Sun Aug 2 17:42:00 2026] 127.0.0.1:45220 Accepted
[Sun Aug 2 17:42:00 2026] 127.0.0.1:45220 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:42:00 2026] 127.0.0.1:45220 Closing
[Sun Aug 2 17:42:04 2026] 127.0.0.1:37990 Accepted
[Sun Aug 2 17:42:04 2026] 127.0.0.1:37990 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:42:04 2026] 127.0.0.1:37990 Closing
[Sun Aug 2 17:42:14 2026] 127.0.0.1:55332 Accepted
[Sun Aug 2 17:42:14 2026] 127.0.0.1:55332 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:42:14 2026] 127.0.0.1:55332 Closing
[Sun Aug 2 17:42:24 2026] 127.0.0.1:41788 Accepted
[Sun Aug 2 17:42:24 2026] 127.0.0.1:41788 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:42:24 2026] 127.0.0.1:41788 Closing
[Sun Aug 2 17:42:34 2026] 127.0.0.1:40948 Accepted
[Sun Aug 2 17:42:34 2026] 127.0.0.1:40948 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:42:34 2026] 127.0.0.1:40948 Closing
[Sun Aug 2 17:42:44 2026] 127.0.0.1:51876 Accepted
[Sun Aug 2 17:42:44 2026] 127.0.0.1:51876 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:42:44 2026] 127.0.0.1:51876 Closing
[Sun Aug 2 17:42:54 2026] 127.0.0.1:39890 Accepted
[Sun Aug 2 17:42:54 2026] 127.0.0.1:39890 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:42:54 2026] 127.0.0.1:39890 Closing
[Sun Aug 2 17:43:04 2026] 127.0.0.1:54022 Accepted
[Sun Aug 2 17:43:04 2026] 127.0.0.1:54022 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:43:04 2026] 127.0.0.1:54022 Closing
[Sun Aug 2 17:43:14 2026] 127.0.0.1:46878 Accepted
[Sun Aug 2 17:43:14 2026] 127.0.0.1:46878 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:43:14 2026] 127.0.0.1:46878 Closing
[Sun Aug 2 17:43:24 2026] 127.0.0.1:37572 Accepted
[Sun Aug 2 17:43:24 2026] 127.0.0.1:37572 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:43:24 2026] 127.0.0.1:37572 Closing
[Sun Aug 2 17:43:34 2026] 127.0.0.1:44360 Accepted
[Sun Aug 2 17:43:34 2026] 127.0.0.1:44360 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:43:34 2026] 127.0.0.1:44360 Closing
[Sun Aug 2 17:43:44 2026] 127.0.0.1:38786 Accepted
[Sun Aug 2 17:43:44 2026] 127.0.0.1:38786 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:43:44 2026] 127.0.0.1:38786 Closing
[Sun Aug 2 17:43:54 2026] 127.0.0.1:59926 Accepted
[Sun Aug 2 17:43:54 2026] 127.0.0.1:59926 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:43:54 2026] 127.0.0.1:59926 Closing
[Sun Aug 2 17:44:04 2026] 127.0.0.1:59842 Accepted
[Sun Aug 2 17:44:04 2026] 127.0.0.1:59842 [200]: GET /api/caching.php?page=1
[Sun Aug 2 17:44:04 2026] 127.0.0.1:59842 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59846 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59846 [200]: GET /index.php
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59846 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59854 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59854 [200]: GET /assets/index.css
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59854 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59866 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59880 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59866 [200]: GET /assets/nostr.bundle.js
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59894 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59880 [200]: GET /assets/nostr-lite.js
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59894 [200]: GET /assets/app.js
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59866 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59880 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59894 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59904 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59904 [200]: GET /api/stats.php
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59904 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59910 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59920 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59910 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59910 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59922 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59920 [200]: GET /favicon.ico
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59920 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59932 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59922 [200]: GET /api/stats.php
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59922 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59932 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59932 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59938 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59938 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59938 Closing
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59954 Accepted
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59954 [404]: GET /api/profile.php?pubkey=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
[Sun Aug 2 17:44:11 2026] 127.0.0.1:59954 Closing
[Sun Aug 2 17:44:14 2026] 127.0.0.1:45466 Accepted
[Sun Aug 2 17:44:14 2026] 127.0.0.1:45466 [200]: GET /api/cleanup_queries.php
[Sun Aug 2 17:44:14 2026] 127.0.0.1:45466 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48586 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48586 [200]: GET /index.php
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48586 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48594 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48594 [200]: GET /assets/index.css
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48594 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48598 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48606 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48610 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48598 [200]: GET /assets/nostr.bundle.js
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48598 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48606 [200]: GET /assets/nostr-lite.js
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48610 [200]: GET /assets/app.js
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48606 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48610 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48624 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48624 [200]: GET /api/stats.php
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48624 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48632 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48638 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48632 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48632 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48652 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48638 [200]: GET /favicon.ico
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48638 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48662 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48652 [200]: GET /api/stats.php
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48652 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48662 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48662 Closing
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48674 Accepted
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48674 [200]: GET /api/chart.php?range=hour
[Sun Aug 2 17:47:48 2026] 127.0.0.1:48674 Closing
[Sun Aug 2 17:47:49 2026] 127.0.0.1:48686 Accepted
[Sun Aug 2 17:47:49 2026] 127.0.0.1:48686 [404]: GET /api/profile.php?pubkey=8ff74724ed641b3c28e5a86d7c5cbc49c37638ace8c6c38935860e7a5eedde0e
[Sun Aug 2 17:47:49 2026] 127.0.0.1:48686 Closing
[Sun Aug 2 17:47:51 2026] 127.0.0.1:48698 Accepted
[Sun Aug 2 17:47:51 2026] 127.0.0.1:48698 [200]: GET /api/cleanup_queries.php
[Sun Aug 2 17:47:51 2026] 127.0.0.1:48698 Closing
+2 -2
View File
@@ -13,8 +13,8 @@
// Using CRELAY_ prefix to avoid conflicts with nostr_core_lib VERSION macros
#define CRELAY_VERSION_MAJOR 2
#define CRELAY_VERSION_MINOR 1
#define CRELAY_VERSION_PATCH 31
#define CRELAY_VERSION "v2.1.31"
#define CRELAY_VERSION_PATCH 35
#define CRELAY_VERSION "v2.1.35"
// Relay metadata (authoritative source for NIP-11 information)
#define RELAY_NAME "C-Relay-PG"
+2 -1
View File
@@ -752,7 +752,8 @@ static const char* const EMBEDDED_PG_SCHEMA_SQL =
" follows_filter TEXT NOT NULL DEFAULT 'all'\n"
" CHECK (follows_filter IN ('all', 'follows', 'non_follows')),\n"
" kinds INTEGER[] NOT NULL DEFAULT '{}',\n"
" max_age_days INTEGER NOT NULL DEFAULT 0,\n"
" from_date TEXT NOT NULL DEFAULT '',\n"
" to_date TEXT NOT NULL DEFAULT '',\n"
" max_events INTEGER NOT NULL DEFAULT 0,\n"
" last_preview_count INTEGER NOT NULL DEFAULT 0,\n"
" last_preview_size_bytes BIGINT NOT NULL DEFAULT 0,\n"