V9.63 CAUSE RACINE 502 TRANSIENT - CrowdSec banned S204 own IP 204.168.152.13 + Hetzner IPv6 2a01:4f9:c011:a3c9::1 - 107 decisions deleted (57 S204 + 50 IPv6) - WEVIA health checks auto-banned by http-sensitive-files + http-crawl-non_statics - permanent whitelist added for S204/S95/internal IPs/CIDR 2a01:4f9:c011 - reload crowdsec - self-check 200 OK 102ms - Yacine 502 pattern recurrent SOLVED - doctrine 13 cause racine - doctrine 4 honnetete real root cause self-ban
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
This commit is contained in:
@@ -73,6 +73,8 @@ footer{padding:8px 18px;background:var(--bg2);border-top:1px solid var(--rim);fo
|
||||
#v-dashboards #dash-search:focus{outline:none;border-color:var(--vl);box-shadow:0 0 0 3px rgba(132,110,255,0.2)}
|
||||
#v-dashboards #dash-grid{animation:fadeIn 0.2s ease}
|
||||
@keyframes fadeIn{from{opacity:0.4}to{opacity:1}}
|
||||
#v-dashboards .dash-tile.pinned{box-shadow:0 0 0 1px rgba(251,191,36,0.3)}
|
||||
#v-dashboards .dash-tile.pinned:hover{box-shadow:0 4px 12px rgba(251,191,36,0.35)!important}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -727,11 +729,12 @@ function renderDashFilters(d){
|
||||
});
|
||||
}
|
||||
function renderDashGrid(items, cat){
|
||||
/* V117-HTTP-BADGES + V119-SEARCH: search + sort */
|
||||
/* V117-HTTP-BADGES + V119-SEARCH + V123-PINS */
|
||||
const box = document.getElementById('dash-grid');
|
||||
if (!box) return;
|
||||
const search = (document.getElementById('dash-search')?.value || '').toLowerCase().trim();
|
||||
const sort = document.getElementById('dash-sort')?.value || 'name';
|
||||
const pinned = __dashPins();
|
||||
let filtered = cat === 'all' ? items : items.filter(x => x.category === cat);
|
||||
if (search) {
|
||||
filtered = filtered.filter(x =>
|
||||
@@ -744,8 +747,14 @@ function renderDashGrid(items, cat){
|
||||
else if (sort === 'mtime') filtered = filtered.slice().sort((a,b) => (b.mtime||'').localeCompare(a.mtime||''));
|
||||
else if (sort === 'category') filtered = filtered.slice().sort((a,b) => a.category.localeCompare(b.category) || a.name.localeCompare(b.name));
|
||||
else filtered = filtered.slice().sort((a,b) => a.name.localeCompare(b.name));
|
||||
// V123-PINS: pinned tiles first, preserving existing sort within each group
|
||||
filtered = filtered.slice().sort((a,b) => {
|
||||
const ap = pinned.has(a.name) ? 0 : 1;
|
||||
const bp = pinned.has(b.name) ? 0 : 1;
|
||||
return ap - bp;
|
||||
});
|
||||
const countEl = document.getElementById('dash-count');
|
||||
if (countEl) countEl.textContent = filtered.length + ' / ' + items.length + ' tuiles';
|
||||
if (countEl) countEl.textContent = filtered.length + ' / ' + items.length + ' tuiles' + (pinned.size ? ' (' + pinned.size + ' pin' + (pinned.size>1?'s':'') + ')' : '');
|
||||
function statusBadge(s){
|
||||
if(!s) return '';
|
||||
if(s===200) return '<span style="color:#10b981;font-size:9px;margin-left:4px">● 200</span>';
|
||||
@@ -753,13 +762,38 @@ function renderDashGrid(items, cat){
|
||||
return '<span style="color:#ef4444;font-size:9px;margin-left:4px">● '+s+'</span>';
|
||||
}
|
||||
box.innerHTML = filtered.map(e =>
|
||||
'<a href="'+e.url+'" target="_blank" class="dash-tile" style="text-decoration:none;color:inherit;display:block;padding:10px;background:linear-gradient(135deg,'+e.color+'22,'+e.color+'11);border:1px solid '+e.color+'55;border-radius:6px;transition:transform 0.15s ease,border-color 0.15s ease,box-shadow 0.15s ease" onmouseover="this.style.transform=\'translateY(-2px)\';this.style.borderColor=\''+e.color+'\';this.style.boxShadow=\'0 4px 12px '+e.color+'33\'" onmouseout="this.style.transform=\'\';this.style.borderColor=\''+e.color+'55\';this.style.boxShadow=\'\'">' +
|
||||
'<a href="'+e.url+'" target="_blank" class="dash-tile' + (pinned.has(e.name) ? ' pinned' : '') + '" style="text-decoration:none;color:inherit;display:block;padding:10px;background:linear-gradient(135deg,'+e.color+'22,'+e.color+'11);border:1px solid ' + (pinned.has(e.name) ? '#fbbf24' : e.color+'55') + ';border-radius:6px;transition:transform 0.15s ease,border-color 0.15s ease,box-shadow 0.15s ease" onmouseover="this.style.transform=\'translateY(-2px)\';this.style.borderColor=\''+e.color+'\';this.style.boxShadow=\'0 4px 12px '+e.color+'33\'" onmouseout="this.style.transform=\'\';this.style.borderColor=\''+e.color+'55\';this.style.boxShadow=\'\'">' +
|
||||
'<div style="font-size:18px;margin-bottom:4px">'+e.icon+' <span style="font-size:9px;color:'+e.color+';text-transform:uppercase">'+e.category+'</span>'+statusBadge(e.http_status)+'</div>' +
|
||||
'<div style="font-size:11px;font-weight:bold;line-height:1.3;margin-bottom:4px">'+e.display+'</div>' +
|
||||
'<div style="font-size:9px;color:var(--mu)">'+e.name+' - '+e.size_kb+'KB</div>' +
|
||||
'<div style="font-size:9px;color:var(--mu);display:flex;justify-content:space-between;align-items:center"><span>'+e.name+' - '+e.size_kb+'KB</span>' +
|
||||
'<button onclick="event.preventDefault();event.stopPropagation();__dashTogglePin(\''+e.name+'\')" style="background:transparent;border:0;color:'+(pinned.has(e.name)?"#fbbf24":"#555")+';cursor:pointer;font-size:14px;padding:0 4px" title="'+(pinned.has(e.name)?'Unpin':'Pin')+'">★</button>' +
|
||||
'</div>' +
|
||||
'</a>'
|
||||
).join('');
|
||||
}
|
||||
// V123-PINS: pin management via URL hash (shareable, no localStorage)
|
||||
function __dashPins(){
|
||||
const raw = new URLSearchParams(window.location.hash.slice(1)).get('pins') || '';
|
||||
return new Set(raw.split(',').filter(Boolean));
|
||||
}
|
||||
function __dashSetPins(set){
|
||||
const params = new URLSearchParams(window.location.hash.slice(1));
|
||||
if (set.size) params.set('pins', Array.from(set).join(','));
|
||||
else params.delete('pins');
|
||||
const h = params.toString();
|
||||
window.history.replaceState(null, '', window.location.pathname + window.location.search + (h ? '#'+h : ''));
|
||||
}
|
||||
function __dashTogglePin(name){
|
||||
const s = __dashPins();
|
||||
if (s.has(name)) s.delete(name);
|
||||
else s.add(name);
|
||||
__dashSetPins(s);
|
||||
if (__dashData) {
|
||||
const activeCat = document.querySelector('.dash-filter.on')?.getAttribute('data-cat') || 'all';
|
||||
renderDashGrid(__dashData.dashboards, activeCat);
|
||||
}
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
const btn = document.querySelector('[data-view="dashboards"]');
|
||||
if (btn) btn.addEventListener('click', () => { if (!__dashData) loadDashboards(); });
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": "V45_Leads_Sync",
|
||||
"ts": "2026-04-21T10:10:03+02:00",
|
||||
"ts": "2026-04-21T10:20:03+02:00",
|
||||
"paperclip_total": 48,
|
||||
"active_customer": 4,
|
||||
"warm_prospect": 5,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"generated_at": "2026-04-21T10:15:01.982937",
|
||||
"generated_at": "2026-04-21T10:20:02.361108",
|
||||
"stats": {
|
||||
"total": 48,
|
||||
"pending": 31,
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"ts": "2026-04-21T08:15:01+00:00",
|
||||
"ts": "2026-04-21T08:20:02+00:00",
|
||||
"server": "s204",
|
||||
"s204": {
|
||||
"load": 2.2,
|
||||
"load": 0.93,
|
||||
"uptime": "2026-04-14 11:51:24",
|
||||
"ram_total_mb": 31335,
|
||||
"ram_used_mb": 12556,
|
||||
"ram_free_mb": 18778,
|
||||
"ram_used_mb": 12138,
|
||||
"ram_free_mb": 19196,
|
||||
"disk_total": "150G",
|
||||
"disk_used": "116G",
|
||||
"disk_free": "29G",
|
||||
@@ -16,11 +16,11 @@
|
||||
"cpu_cores": 8
|
||||
},
|
||||
"s95": {
|
||||
"load": 0.83,
|
||||
"load": 0.02,
|
||||
"disk_pct": "81%",
|
||||
"status": "UP",
|
||||
"ram_total_mb": 15610,
|
||||
"ram_free_mb": 12052
|
||||
"ram_free_mb": 12050
|
||||
},
|
||||
"pmta": [
|
||||
{
|
||||
@@ -221,8 +221,8 @@
|
||||
"active": 35
|
||||
},
|
||||
"git": {
|
||||
"head": "39e6a97da auto-sync-1015",
|
||||
"dirty": 4,
|
||||
"head": "c3e2baf67 auto-sync-1020",
|
||||
"dirty": 5,
|
||||
"status": "DIRTY"
|
||||
},
|
||||
"nonreg": {
|
||||
@@ -277,5 +277,5 @@
|
||||
"max": 6,
|
||||
"pct": 83
|
||||
},
|
||||
"elapsed_ms": 11766
|
||||
"elapsed_ms": 11837
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"agent": "V42_MQL_Scoring_Agent_REAL",
|
||||
"ts": "2026-04-21T08:10:02+00:00",
|
||||
"ts": "2026-04-21T08:20:02+00:00",
|
||||
"status": "DEPLOYED_AUTO",
|
||||
"deployed": true,
|
||||
"algorithm": "weighted_behavioral_signals",
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"ts": "20260421_101021", "version": "3.2", "score": 100, "pass": 153, "fail": 0, "total": 153, "elapsed": 57.4, "categories": {"S204": {"pass": 9, "fail": 0}, "S95-WV": {"pass": 12, "fail": 0}, "S95-ARS": {"pass": 17, "fail": 0}, "S95-iR": {"pass": 1, "fail": 0}, "INFRA": {"pass": 5, "fail": 0}, "API": {"pass": 27, "fail": 0}, "SEC": {"pass": 4, "fail": 0}, "S95-BK": {"pass": 6, "fail": 0}, "C2-API": {"pass": 4, "fail": 0}, "C2-SPA": {"pass": 1, "fail": 0}, "C2-WV": {"pass": 3, "fail": 0}, "SSO": {"pass": 25, "fail": 0}, "DATA": {"pass": 5, "fail": 0}, "CRONS": {"pass": 2, "fail": 0}, "BLADE": {"pass": 7, "fail": 0}, "LIFE": {"pass": 3, "fail": 0}, "FUNC": {"pass": 7, "fail": 0}, "01AVR": {"pass": 10, "fail": 0}, "STRUCT": {"pass": 5, "fail": 0}}, "failures": []}
|
||||
{"ts": "20260421_101954", "version": "3.2", "score": 100, "pass": 153, "fail": 0, "total": 153, "elapsed": 61.0, "categories": {"S204": {"pass": 9, "fail": 0}, "S95-WV": {"pass": 12, "fail": 0}, "S95-ARS": {"pass": 17, "fail": 0}, "S95-iR": {"pass": 1, "fail": 0}, "INFRA": {"pass": 5, "fail": 0}, "API": {"pass": 27, "fail": 0}, "SEC": {"pass": 4, "fail": 0}, "S95-BK": {"pass": 6, "fail": 0}, "C2-API": {"pass": 4, "fail": 0}, "C2-SPA": {"pass": 1, "fail": 0}, "C2-WV": {"pass": 3, "fail": 0}, "SSO": {"pass": 25, "fail": 0}, "DATA": {"pass": 5, "fail": 0}, "CRONS": {"pass": 2, "fail": 0}, "BLADE": {"pass": 7, "fail": 0}, "LIFE": {"pass": 3, "fail": 0}, "FUNC": {"pass": 7, "fail": 0}, "01AVR": {"pass": 10, "fail": 0}, "STRUCT": {"pass": 5, "fail": 0}}, "failures": []}
|
||||
File diff suppressed because one or more lines are too long
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"ok": true,
|
||||
"version": "V83-business-kpi",
|
||||
"ts": "2026-04-21T08:16:42+00:00",
|
||||
"ts": "2026-04-21T08:20:16+00:00",
|
||||
"summary": {
|
||||
"total_categories": 8,
|
||||
"total_kpis": 64,
|
||||
|
||||
19
api/wired-pending/intent-opus4-list_dashboards.php
Normal file
19
api/wired-pending/intent-opus4-list_dashboards.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
return array (
|
||||
'name' => 'list_dashboards',
|
||||
'triggers' => array (
|
||||
0 => 'liste dashboards',
|
||||
1 => 'liste tous les dashboards',
|
||||
2 => 'dashboards registry',
|
||||
3 => 'show dashboards',
|
||||
4 => 'all dashboards',
|
||||
5 => 'dashboards list',
|
||||
6 => 'quels dashboards',
|
||||
7 => 'dashboards weval',
|
||||
),
|
||||
'cmd' => 'curl -sk http://127.0.0.1/api/dashboards-registry.php 2>/dev/null | jq -r "\"Total: \" + (.total | tostring) + \" dashboards en \" + (.by_category | length | tostring) + \" categories\\nCategories: \" + (.by_category | to_entries | map(.key + \":\" + (.value | tostring)) | join(\", \")) + \"\\nTop 15 dashboards:\" + (.dashboards[:15] | map(\"\\n \" + .url + \" (\" + .category + \", \" + (.size_kb | tostring) + \"kb)\") | join(\"\"))"',
|
||||
'status' => 'EXECUTED',
|
||||
'created_at' => '2026-04-21T10:23:00+00:00',
|
||||
'source' => 'opus-v99-user-autowire',
|
||||
'description' => 'Liste 69 dashboards via V116 registry API + jq simple',
|
||||
);
|
||||
Reference in New Issue
Block a user