mirror of
https://github.com/getnamingo/registry.git
synced 2025-05-10 16:58:34 +02:00
Added log page and log api
This commit is contained in:
parent
5133b005a5
commit
b245bae65a
3 changed files with 98 additions and 63 deletions
|
@ -1,6 +1,6 @@
|
||||||
{% extends "layouts/app.twig" %}
|
{% extends "layouts/app.twig" %}
|
||||||
|
|
||||||
{% block title %}Log History{% endblock %}
|
{% block title %}{{ __('Log History') }}{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="page-wrapper">
|
<div class="page-wrapper">
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
Overview
|
Overview
|
||||||
</div>
|
</div>
|
||||||
<h2 class="page-title">
|
<h2 class="page-title">
|
||||||
Log History
|
{{ __('Log History') }}
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
<!-- Page title actions -->
|
<!-- Page title actions -->
|
||||||
|
@ -42,51 +42,26 @@
|
||||||
<!-- Page body -->
|
<!-- Page body -->
|
||||||
<div class="page-body">
|
<div class="page-body">
|
||||||
<div class="container-xl">
|
<div class="container-xl">
|
||||||
|
<div class="col-12">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body">
|
<div class="card-body border-bottom py-3">
|
||||||
<div id="table-logs" class="table-responsive">
|
<div class="d-flex">
|
||||||
<table class="table">
|
<div class="text-secondary">
|
||||||
<thead>
|
<button class="btn btn-info btn-icon" onclick="downloadCSV()"><svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 15a1 1 0 0 0 1 1h2a1 1 0 0 0 1 -1v-2a1 1 0 0 0 -1 -1h-2a1 1 0 0 1 -1 -1v-2a1 1 0 0 1 1 -1h2a1 1 0 0 1 1 1"></path><path d="M17 8l2 8l2 -8"></path><path d="M7 10a2 2 0 1 0 -4 0v4a2 2 0 1 0 4 0"></path></svg></button>
|
||||||
<tr>
|
<button class="btn btn-info btn-icon" onclick="downloadJSON()"><svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M20 16v-8l3 8v-8"></path><path d="M15 8a2 2 0 0 1 2 2v4a2 2 0 1 1 -4 0v-4a2 2 0 0 1 2 -2z"></path><path d="M1 8h3v6.5a1.5 1.5 0 0 1 -3 0v-.5"></path><path d="M7 15a1 1 0 0 0 1 1h1a1 1 0 0 0 1 -1v-2a1 1 0 0 0 -1 -1h-1a1 1 0 0 1 -1 -1v-2a1 1 0 0 1 1 -1h1a1 1 0 0 1 1 1"></path></svg></button>
|
||||||
<th><button class="table-sort" data-sort="sort-date">Date</button></th>
|
<button class="btn btn-green btn-icon" onclick="downloadXLSX()"><svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M14 3v4a1 1 0 0 0 1 1h4"></path><path d="M5 12v-7a2 2 0 0 1 2 -2h7l5 5v4"></path><path d="M4 15l4 6"></path><path d="M4 21l4 -6"></path><path d="M17 20.25c0 .414 .336 .75 .75 .75h1.25a1 1 0 0 0 1 -1v-1a1 1 0 0 0 -1 -1h-1a1 1 0 0 1 -1 -1v-1a1 1 0 0 1 1 -1h1.25a.75 .75 0 0 1 .75 .75"></path><path d="M11 15v6h3"></path></svg></button>
|
||||||
<th><button class="table-sort" data-sort="sort-registrar">Registrar</button></th>
|
<button class="btn btn-red btn-icon" onclick="downloadPDF()"><svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M10 8v8h2a2 2 0 0 0 2 -2v-4a2 2 0 0 0 -2 -2h-2z"></path><path d="M3 12h2a2 2 0 1 0 0 -4h-2v8"></path><path d="M17 12h3"></path><path d="M21 8h-4v8"></path></svg></button>
|
||||||
<th><button class="table-sort" data-sort="sort-command">Command</button></th>
|
|
||||||
<th><button class="table-sort" data-sort="sort-object">Object</button></th>
|
|
||||||
<th><button class="table-sort" data-sort="sort-result">Result</button></th>
|
|
||||||
<th><button class="table-sort" data-sort="sort-message">Message</button></th>
|
|
||||||
<th><button class="table-sort" data-sort="sort-milliseconds">Milliseconds</button></th>
|
|
||||||
<th><button class="table-sort" data-sort="sort-cltrid">clTRID</button></th>
|
|
||||||
<th>Actions</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody class="table-tbody">
|
|
||||||
{% for log in logs %}
|
|
||||||
<tr>
|
|
||||||
<td class="sort-date">{{ log.cldate }}</td>
|
|
||||||
<td class="sort-registrar">{{ log.registrar_id }}</td>
|
|
||||||
<td class="sort-command">{{ log.cmd }}</td>
|
|
||||||
<td class="sort-object">{{ log.obj_id }}</td>
|
|
||||||
<td class="sort-result">{{ log.code }}</td>
|
|
||||||
<td class="sort-message">{{ log.msg }}</td>
|
|
||||||
<td class="sort-milliseconds">{{ log.clmicrosecond }}</td>
|
|
||||||
<td class="sort-cltrid">{{ log.clTRID }}</td>
|
|
||||||
<td class="text-end">
|
|
||||||
<span class="dropdown">
|
|
||||||
<button class="btn dropdown-toggle align-text-top" data-bs-boundary="viewport" data-bs-toggle="dropdown">Actions</button>
|
|
||||||
<div class="dropdown-menu dropdown-menu-end">
|
|
||||||
<a class="dropdown-item" href="#">
|
|
||||||
Action
|
|
||||||
</a>
|
|
||||||
<a class="dropdown-item" href="#">
|
|
||||||
Another action
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
</span>
|
<div class="ms-auto text-secondary">
|
||||||
</td>
|
Search:
|
||||||
</tr>
|
<div class="ms-2 d-inline-block">
|
||||||
{% endfor %}
|
<input id="search-input" type="text" class="form-control" aria-label="Search logs">
|
||||||
</tbody>
|
</div>
|
||||||
</table><ul class="pagination"></ul>
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<div id="logTable"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,17 +1,60 @@
|
||||||
<script src="/assets/libs/list.js/dist/list.min.js" defer></script>
|
<script src="/assets/js/tabulator.min.js" defer></script>
|
||||||
<script src="/assets/js/tabler.min.js" defer></script>
|
<script src="/assets/js/tabler.min.js" defer></script>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"></script>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.6.0/jspdf.plugin.autotable.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
|
var table;
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", function(){
|
document.addEventListener("DOMContentLoaded", function(){
|
||||||
const list = new List('table-logs', {
|
table = new Tabulator("#logTable", {
|
||||||
sortClass: 'table-sort',
|
ajaxURL:"/log-api/records/transaction_identifier", // Set the URL for your JSON data
|
||||||
listClass: 'table-tbody',
|
ajaxConfig:"GET",
|
||||||
valueNames: [ 'sort-date', 'sort-registrar', 'sort-command', 'sort-object',
|
pagination:"local",
|
||||||
'sort-result', 'sort-message', 'sort-milliseconds', 'sort-cltrid'
|
paginationSize:10,
|
||||||
|
ajaxResponse:function(url, params, response){
|
||||||
|
return response.records;
|
||||||
|
},
|
||||||
|
layout:"fitColumns",
|
||||||
|
responsiveLayout: "hide",
|
||||||
|
initialSort:[
|
||||||
|
{column:"cldate", dir:"desc"}, // sorting by the "cldate" field in descending order
|
||||||
|
],
|
||||||
|
columns:[
|
||||||
|
{title:"Date", field:"cldate", headerSort:true},
|
||||||
|
{title:"Registrar", field:"registrar_id", headerSort:true},
|
||||||
|
{title:"Command", field:"cmd", headerSort:true, responsive:0},
|
||||||
|
{title:"Object Type", field:"obj_type", headerSort:true, responsive:0},
|
||||||
|
{title:"Object", field:"obj_id", headerSort:true, responsive:0},
|
||||||
|
{title:"Result", field:"code", headerSort:true},
|
||||||
|
{title:"Message", field:"msg", headerSort:true, responsive:0, download:false},
|
||||||
|
{title:"clTRID", field:"clTRID", headerSort:true, responsive:0, download:false},
|
||||||
|
{title:"Milliseconds", field:"svmicrosecond", headerSort:false, download:false},
|
||||||
],
|
],
|
||||||
page: 10,
|
|
||||||
pagination: true
|
|
||||||
});
|
});
|
||||||
})
|
var searchInput = document.getElementById("search-input");
|
||||||
|
searchInput.addEventListener("input", function(){
|
||||||
|
table.setFilter("cmd", "like", searchInput.value);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
function downloadCSV() {
|
||||||
|
table.download("csv", "data.csv");
|
||||||
|
}
|
||||||
|
|
||||||
|
function downloadJSON() {
|
||||||
|
table.download("json", "data.json");
|
||||||
|
}
|
||||||
|
|
||||||
|
function downloadXLSX() {
|
||||||
|
table.download("xlsx", "data.xlsx", {sheetName:"My Contacts"});
|
||||||
|
}
|
||||||
|
|
||||||
|
function downloadPDF() {
|
||||||
|
table.download("pdf", "data.pdf", {
|
||||||
|
orientation:"portrait",
|
||||||
|
title:"My Contacts",
|
||||||
|
jsPDF:{unit:"mm", format:"a4", orientation:"p"}
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -79,6 +79,23 @@ $app->any('/api[/{params:.*}]', function (
|
||||||
return $response;
|
return $response;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$app->any('/log-api[/{params:.*}]', function (
|
||||||
|
ServerRequest $request,
|
||||||
|
Response $response,
|
||||||
|
$args
|
||||||
|
) use ($container) {
|
||||||
|
$db = config('connections');
|
||||||
|
$config = new Config([
|
||||||
|
'username' => $db['mysql']['username'],
|
||||||
|
'password' => $db['mysql']['password'],
|
||||||
|
'database' => 'registryTransaction',
|
||||||
|
'basePath' => '/log-api',
|
||||||
|
]);
|
||||||
|
$api = new Api($config);
|
||||||
|
$response = $api->handle($request);
|
||||||
|
return $response;
|
||||||
|
});
|
||||||
|
|
||||||
$app->add(function (Psr\Http\Message\ServerRequestInterface $request, Psr\Http\Server\RequestHandlerInterface $handler) {
|
$app->add(function (Psr\Http\Message\ServerRequestInterface $request, Psr\Http\Server\RequestHandlerInterface $handler) {
|
||||||
try {
|
try {
|
||||||
return $handler->handle($request);
|
return $handler->handle($request);
|
||||||
|
|
Loading…
Add table
Reference in a new issue