API-Endpoint applog.php — Debug-Log der mobilen App empfangen [deploy]
All checks were successful
Deploy netdiag / deploy (push) Successful in 14s
All checks were successful
Deploy netdiag / deploy (push) Successful in 14s
Die App erfasst Fehler/Meldungen und schiebt sie per POST hierher; sie landen in llx_netdiag_applog und sind serverseitig auswertbar — ohne Kabel. - api/applog.php: JWT-Auth (wie alle Endpoints), Batch-Insert, legt die Tabelle bei Bedarf an (Modul kann schon vorher installiert gewesen sein) - sql/llx_netdiag_applog.sql + .key.sql: Tabelle fuer saubere Neuinstallation Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
baa7df88e4
commit
914101ba30
3 changed files with 124 additions and 0 deletions
99
api/applog.php
Normal file
99
api/applog.php
Normal file
|
|
@ -0,0 +1,99 @@
|
||||||
|
<?php
|
||||||
|
/* Copyright (C) 2026 Eduard Wisch <data@data-it-solution.de>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file netdiag/api/applog.php
|
||||||
|
* \ingroup netdiag
|
||||||
|
* \brief API-Endpunkt: Debug-Log der mobilen App entgegennehmen.
|
||||||
|
*
|
||||||
|
* Die App schickt erfasste Fehler/Meldungen per POST hierher; sie landen
|
||||||
|
* in llx_netdiag_applog und sind so serverseitig auswertbar — ohne Kabel
|
||||||
|
* und ohne Logcat. Authentifizierung über das normale App-JWT.
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once __DIR__.'/netdiag_api.lib.php';
|
||||||
|
|
||||||
|
netdiag_api_bootstrap();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Conf $conf
|
||||||
|
* @var DoliDB $db
|
||||||
|
*/
|
||||||
|
|
||||||
|
$user = netdiag_api_authenticate($db);
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
|
||||||
|
netdiag_api_error('Nur POST erlaubt', 405);
|
||||||
|
}
|
||||||
|
|
||||||
|
$body = netdiag_api_read_body();
|
||||||
|
$entries = (isset($body['entries']) && is_array($body['entries'])) ? $body['entries'] : array();
|
||||||
|
if (empty($entries)) {
|
||||||
|
netdiag_api_respond(array('ok' => true, 'stored' => 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
$appVersion = isset($body['appVersion']) ? mb_substr((string) $body['appVersion'], 0, 32) : '';
|
||||||
|
$device = isset($body['device']) ? mb_substr((string) $body['device'], 0, 128) : '';
|
||||||
|
|
||||||
|
$prefix = $db->prefix();
|
||||||
|
|
||||||
|
// Tabelle bei Bedarf anlegen — das Modul kann in Prod schon vor diesem
|
||||||
|
// Feature installiert worden sein, dann lief die sql/-Datei nie.
|
||||||
|
$db->query(
|
||||||
|
"CREATE TABLE IF NOT EXISTS ".$prefix."netdiag_applog("
|
||||||
|
." rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,"
|
||||||
|
." entity integer DEFAULT 1 NOT NULL,"
|
||||||
|
." fk_user integer,"
|
||||||
|
." app_version varchar(32),"
|
||||||
|
." device varchar(128),"
|
||||||
|
." level varchar(8),"
|
||||||
|
." message text,"
|
||||||
|
." date_log datetime,"
|
||||||
|
." date_creation datetime NOT NULL,"
|
||||||
|
." INDEX idx_netdiag_applog_creation(date_creation)"
|
||||||
|
.") ENGINE=innodb"
|
||||||
|
);
|
||||||
|
|
||||||
|
// Schutz gegen überlange Requests
|
||||||
|
$entries = array_slice($entries, 0, 500);
|
||||||
|
|
||||||
|
$now = $db->idate(dol_now());
|
||||||
|
$stored = 0;
|
||||||
|
$db->begin();
|
||||||
|
foreach ($entries as $e) {
|
||||||
|
if (!is_array($e)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$level = isset($e['level']) ? mb_substr((string) $e['level'], 0, 8) : 'info';
|
||||||
|
$msg = isset($e['msg']) ? mb_substr((string) $e['msg'], 0, 2000) : '';
|
||||||
|
// Client-Zeitstempel in ms -> Sekunden -> DB-Datetime
|
||||||
|
$ts = isset($e['ts']) ? (int) $e['ts'] : 0;
|
||||||
|
$dateLog = $ts > 0 ? $db->idate((int) ($ts / 1000)) : $now;
|
||||||
|
|
||||||
|
$sql = "INSERT INTO ".$prefix."netdiag_applog"
|
||||||
|
." (entity, fk_user, app_version, device, level, message, date_log, date_creation)"
|
||||||
|
." VALUES (".((int) $conf->entity).", ".((int) $user->id).","
|
||||||
|
." '".$db->escape($appVersion)."', '".$db->escape($device)."',"
|
||||||
|
." '".$db->escape($level)."', '".$db->escape($msg)."',"
|
||||||
|
." '".$db->escape($dateLog)."', '".$db->escape($now)."')";
|
||||||
|
if ($db->query($sql)) {
|
||||||
|
$stored++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$db->commit();
|
||||||
|
|
||||||
|
netdiag_api_respond(array('ok' => true, 'stored' => $stored));
|
||||||
5
sql/llx_netdiag_applog.key.sql
Normal file
5
sql/llx_netdiag_applog.key.sql
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
-- Copyright (C) 2026 Eduard Wisch <data@data-it-solution.de>
|
||||||
|
--
|
||||||
|
-- Index für llx_netdiag_applog
|
||||||
|
|
||||||
|
ALTER TABLE llx_netdiag_applog ADD INDEX idx_netdiag_applog_creation(date_creation);
|
||||||
20
sql/llx_netdiag_applog.sql
Normal file
20
sql/llx_netdiag_applog.sql
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
-- Copyright (C) 2026 Eduard Wisch <data@data-it-solution.de>
|
||||||
|
--
|
||||||
|
-- This program is free software; you can redistribute it and/or modify
|
||||||
|
-- it under the terms of the GNU General Public License as published by
|
||||||
|
-- the Free Software Foundation; either version 3 of the License, or
|
||||||
|
-- (at your option) any later version.
|
||||||
|
--
|
||||||
|
-- Tabelle: Debug-Log der mobilen App (von api/applog.php befüllt)
|
||||||
|
|
||||||
|
CREATE TABLE llx_netdiag_applog(
|
||||||
|
rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,
|
||||||
|
entity integer DEFAULT 1 NOT NULL,
|
||||||
|
fk_user integer,
|
||||||
|
app_version varchar(32),
|
||||||
|
device varchar(128),
|
||||||
|
level varchar(8),
|
||||||
|
message text,
|
||||||
|
date_log datetime,
|
||||||
|
date_creation datetime NOT NULL
|
||||||
|
) ENGINE=innodb;
|
||||||
Loading…
Reference in a new issue