Files
michaelschiemer/src/Application/Admin/templates/deployment-dashboard.view.php
Michael Schiemer 36ef2a1e2c
Some checks failed
🚀 Build & Deploy Image / Determine Build Necessity (push) Failing after 10m14s
🚀 Build & Deploy Image / Build Runtime Base Image (push) Has been skipped
🚀 Build & Deploy Image / Build Docker Image (push) Has been skipped
🚀 Build & Deploy Image / Run Tests & Quality Checks (push) Has been skipped
🚀 Build & Deploy Image / Auto-deploy to Staging (push) Has been skipped
🚀 Build & Deploy Image / Auto-deploy to Production (push) Has been skipped
Security Vulnerability Scan / Check for Dependency Changes (push) Failing after 11m25s
Security Vulnerability Scan / Composer Security Audit (push) Has been cancelled
fix: Gitea Traefik routing and connection pool optimization
- Remove middleware reference from Gitea Traefik labels (caused routing issues)
- Optimize Gitea connection pool settings (MAX_IDLE_CONNS=30, authentication_timeout=180s)
- Add explicit service reference in Traefik labels
- Fix intermittent 504 timeouts by improving PostgreSQL connection handling

Fixes Gitea unreachability via git.michaelschiemer.de
2025-11-09 14:46:15 +01:00

215 lines
9.0 KiB
PHP

<layout name="admin" />
<!-- Breadcrumbs -->
<x-breadcrumbs items='[{"url": "/admin", "text": "Dashboard"}, {"url": "/admin/deployment/dashboard", "text": "Deployments"}]' />
<!-- Dashboard Header -->
<div class="admin-content__header admin-content__header--with-actions">
<div class="admin-content__title-group">
<h1 class="admin-content__title">{{ $pageTitle }}</h1>
<p class="admin-content__description">{{ $pageDescription }}</p>
</div>
</div>
<!-- Overall Statistics Grid -->
<div class="admin-grid admin-grid--4-col">
<div class="admin-card">
<div class="admin-card__header">
<h3 class="admin-card__title">Total Deployments</h3>
</div>
<div class="admin-card__content">
<div class="admin-stat-big">
<span class="admin-stat-big__value">{{$totalDeployments}}</span>
<span class="admin-stat-big__label">All Time</span>
</div>
</div>
</div>
<div class="admin-card">
<div class="admin-card__header">
<h3 class="admin-card__title">Success Rate</h3>
</div>
<div class="admin-card__content">
<div class="admin-stat-big">
<span class="admin-stat-big__value">{{$successRate}}%</span>
<span class="admin-stat-big__label">Success</span>
</div>
</div>
</div>
<div class="admin-card">
<div class="admin-card__header">
<h3 class="admin-card__title">Failed Deployments</h3>
</div>
<div class="admin-card__content">
<div class="admin-stat-big">
<span class="admin-stat-big__value">{{$failedDeployments}}</span>
<span class="admin-stat-big__label">Failures</span>
</div>
</div>
</div>
<div class="admin-card">
<div class="admin-card__header">
<h3 class="admin-card__title">Average Duration</h3>
</div>
<div class="admin-card__content">
<div class="admin-stat-big">
<span class="admin-stat-big__value">{{$averageDurationFormatted}}</span>
<span class="admin-stat-big__label">Avg Time</span>
</div>
</div>
</div>
</div>
<!-- Environment-Specific Statistics -->
<div class="admin-grid admin-grid--2-col" style="margin-top: var(--admin-spacing-xl);">
<div class="admin-card">
<div class="admin-card__header">
<h3 class="admin-card__title">Production Environment</h3>
</div>
<div class="admin-card__content">
<div class="admin-stat-list">
<div class="admin-stat-list__item">
<span class="admin-stat-list__label">Total Deployments</span>
<span class="admin-stat-list__value">{{$productionStats['total_deployments']}}</span>
</div>
<div class="admin-stat-list__item">
<span class="admin-stat-list__label">Success Rate</span>
<span class="admin-stat-list__value">{{$productionStats['success_rate']}}%</span>
</div>
<div class="admin-stat-list__item">
<span class="admin-stat-list__label">Failed</span>
<span class="admin-stat-list__value">{{$productionStats['failed']}}</span>
</div>
<div class="admin-stat-list__item">
<span class="admin-stat-list__label">Rolled Back</span>
<span class="admin-stat-list__value">{{$productionStats['rolled_back']}}</span>
</div>
</div>
</div>
</div>
<div class="admin-card">
<div class="admin-card__header">
<h3 class="admin-card__title">Staging Environment</h3>
</div>
<div class="admin-card__content">
<div class="admin-stat-list">
<div class="admin-stat-list__item">
<span class="admin-stat-list__label">Total Deployments</span>
<span class="admin-stat-list__value">{{$stagingStats['total_deployments']}}</span>
</div>
<div class="admin-stat-list__item">
<span class="admin-stat-list__label">Success Rate</span>
<span class="admin-stat-list__value">{{$stagingStats['success_rate']}}%</span>
</div>
<div class="admin-stat-list__item">
<span class="admin-stat-list__label">Failed</span>
<span class="admin-stat-list__value">{{$stagingStats['failed']}}</span>
</div>
<div class="admin-stat-list__item">
<span class="admin-stat-list__label">Rolled Back</span>
<span class="admin-stat-list__value">{{$stagingStats['rolled_back']}}</span>
</div>
</div>
</div>
</div>
</div>
<!-- Recent Deployments Table -->
<div class="admin-card" style="margin-top: var(--admin-spacing-xl);">
<div class="admin-card__header">
<h3 class="admin-card__title">Recent Deployments</h3>
</div>
<div class="admin-card__content">
<div if="{{count($recentDeployments) > 0}}">
<table class="admin-table">
<thead>
<tr>
<th>Pipeline ID</th>
<th>Environment</th>
<th>Status</th>
<th>Duration</th>
<th>Stages</th>
<th>Success Rate</th>
<th>Started At</th>
<th>Completed At</th>
</tr>
</thead>
<tbody>
<tr foreach="$recentDeployments as $deployment">
<td><code>{{$deployment['pipelineId']}}</code></td>
<td>
<span class="admin-badge admin-badge--neutral">
{{$deployment['environment']}}
</span>
</td>
<td>
<span class="admin-badge {{$deployment['statusBadgeClass']}}">
{{$deployment['status']}}
</span>
<span if="{{$deployment['wasRolledBack']}}" class="admin-badge admin-badge--warning">Rolled Back</span>
</td>
<td>{{$deployment['durationFormatted']}}</td>
<td>{{$deployment['stageCount']}}</td>
<td>{{$deployment['successRate']}}%</td>
<td>{{$deployment['startedAt']}}</td>
<td>{{$deployment['completedAt']}}</td>
</tr>
</tbody>
</table>
</div>
<div if="{{count($recentDeployments) === 0}}">
<div class="admin-empty-state">
<p class="admin-empty-state__text">No deployments found</p>
</div>
</div>
</div>
</div>
<!-- Failed Deployments Section -->
<div class="admin-card" style="margin-top: var(--admin-spacing-xl);" if="{{count($failedDeployments) > 0}}">
<div class="admin-card__header">
<h3 class="admin-card__title">Recent Failed Deployments</h3>
</div>
<div class="admin-card__content">
<table class="admin-table">
<thead>
<tr>
<th>Pipeline ID</th>
<th>Environment</th>
<th>Failed Stage</th>
<th>Error</th>
<th>Duration</th>
<th>Started At</th>
</tr>
</thead>
<tbody>
<tr foreach="$failedDeployments as $deployment">
<td><code>{{$deployment['pipelineId']}}</code></td>
<td>
<span class="admin-badge admin-badge--neutral">
{{$deployment['environment']}}
</span>
</td>
<td>
<span if="{{$deployment['failedStage'] !== null}}" class="admin-badge admin-badge--danger">
{{$deployment['failedStage']}}
</span>
<span if="{{$deployment['failedStage'] === null}}" class="admin-badge admin-badge--neutral">N/A</span>
</td>
<td>
<span if="{{$deployment['error'] !== null}}" class="admin-text-truncate" title="{{$deployment['error']}}">
{{$deployment['error']}}
</span>
<span if="{{$deployment['error'] === null}}" class="admin-text-muted">No error message</span>
</td>
<td>{{$deployment['durationFormatted']}}</td>
<td>{{$deployment['startedAt']}}</td>
</tr>
</tbody>
</table>
</div>
</div>