mirror of
https://github.com/tdurieux/anonymous_github.git
synced 2026-04-21 21:06:01 +02:00
196 lines
6.5 KiB
HTML
196 lines
6.5 KiB
HTML
<div class="container page">
|
|
<!-- Admin Navigation -->
|
|
<nav class="admin-nav">
|
|
<a href="/admin/">
|
|
<i class="fas fa-code-branch"></i> Repositories
|
|
</a>
|
|
<a href="/admin/users">
|
|
<i class="fas fa-users"></i> Users
|
|
</a>
|
|
<a href="/admin/conferences">
|
|
<i class="fas fa-chalkboard-teacher"></i> Conferences
|
|
</a>
|
|
<a href="/admin/queues" class="active">
|
|
<i class="fas fa-tasks"></i> Queues
|
|
</a>
|
|
</nav>
|
|
|
|
<!-- Summary Stats -->
|
|
<div class="admin-stats">
|
|
<div class="admin-stat-card">
|
|
<div class="stat-value">{{downloadJobs.length || 0}}</div>
|
|
<div class="stat-label">Download Jobs</div>
|
|
</div>
|
|
<div class="admin-stat-card">
|
|
<div class="stat-value">{{removeJobs.length || 0}}</div>
|
|
<div class="stat-label">Remove Jobs</div>
|
|
</div>
|
|
<div class="admin-stat-card">
|
|
<div class="stat-value">{{removeCaches.length || 0}}</div>
|
|
<div class="stat-label">Cache Jobs</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Download Jobs -->
|
|
<div class="admin-section-header">
|
|
<h2><i class="fas fa-download mr-1"></i> Download Jobs</h2>
|
|
<span class="section-count">{{downloadJobs.length || 0}}</span>
|
|
</div>
|
|
|
|
<div
|
|
class="queue-job-card"
|
|
ng-repeat="job in downloadJobs as filteredDownloadJobs"
|
|
>
|
|
<div class="job-header">
|
|
<div class="job-id">
|
|
<a target="_blank" ng-href="/r/{{job.id}}" ng-bind="job.id"></a>
|
|
<span
|
|
class="status-badge"
|
|
ng-class="'status-' + job.progress.status"
|
|
>{{job.progress.status | title}}</span>
|
|
</div>
|
|
</div>
|
|
<div class="job-timestamps">
|
|
<span ng-if="job.timestamp">
|
|
<i class="fas fa-clock"></i> Created: {{job.timestamp | humanTime}}
|
|
</span>
|
|
<span ng-if="job.processedOn">
|
|
<i class="fas fa-cog"></i> Processed: {{job.processedOn | humanTime}}
|
|
</span>
|
|
<span ng-if="job.finishedOn">
|
|
<i class="fas fa-check"></i> Finished: {{job.finishedOn | humanTime}}
|
|
</span>
|
|
</div>
|
|
<div ng-if="job.stacktrace.length">
|
|
<pre
|
|
ng-repeat="stack in job.stacktrace track by $index"
|
|
style="font-size: 0.8rem; max-height: 100px; overflow: auto; margin: 6px 0 0 0"
|
|
><code ng-bind="stack"></code></pre>
|
|
</div>
|
|
<div class="job-actions">
|
|
<button class="btn btn-sm" ng-click="retryJob('download', job)">
|
|
<i class="fas fa-sync"></i> Retry
|
|
</button>
|
|
<button class="btn btn-sm" ng-click="removeJob('download', job)">
|
|
<i class="fas fa-trash-alt"></i> Remove
|
|
</button>
|
|
<a class="btn btn-sm" href="/anonymize/{{job.id}}">
|
|
<i class="far fa-edit"></i> Edit
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="empty-state" ng-if="filteredDownloadJobs.length == 0" style="padding: 20px">
|
|
<i class="fas fa-check-circle"></i>
|
|
No download jobs in the queue.
|
|
</div>
|
|
|
|
<!-- Remove Jobs -->
|
|
<div class="admin-section-header">
|
|
<h2><i class="fas fa-trash mr-1"></i> Remove Jobs</h2>
|
|
<span class="section-count">{{removeJobs.length || 0}}</span>
|
|
</div>
|
|
|
|
<div
|
|
class="queue-job-card"
|
|
ng-repeat="job in removeJobs as filteredRemoveJobs"
|
|
>
|
|
<div class="job-header">
|
|
<div class="job-id">
|
|
<a target="_blank" ng-href="/r/{{job.id}}" ng-bind="job.id"></a>
|
|
<span
|
|
class="status-badge"
|
|
ng-class="'status-' + job.progress.status"
|
|
>{{job.progress.status | title}}</span>
|
|
</div>
|
|
</div>
|
|
<div class="job-timestamps">
|
|
<span ng-if="job.timestamp">
|
|
<i class="fas fa-clock"></i> Created: {{job.timestamp | humanTime}}
|
|
</span>
|
|
<span ng-if="job.processedOn">
|
|
<i class="fas fa-cog"></i> Processed: {{job.processedOn | humanTime}}
|
|
</span>
|
|
<span ng-if="job.finishedOn">
|
|
<i class="fas fa-check"></i> Finished: {{job.finishedOn | humanTime}}
|
|
</span>
|
|
</div>
|
|
<div ng-if="job.stacktrace.length">
|
|
<pre
|
|
ng-repeat="stack in job.stacktrace track by $index"
|
|
style="font-size: 0.8rem; max-height: 100px; overflow: auto; margin: 6px 0 0 0"
|
|
><code ng-bind="stack"></code></pre>
|
|
</div>
|
|
<div class="job-actions">
|
|
<button class="btn btn-sm" ng-click="retryJob('remove', job)">
|
|
<i class="fas fa-sync"></i> Retry
|
|
</button>
|
|
<button class="btn btn-sm" ng-click="removeJob('remove', job)">
|
|
<i class="fas fa-trash-alt"></i> Remove
|
|
</button>
|
|
<a class="btn btn-sm" href="/anonymize/{{job.id}}">
|
|
<i class="far fa-edit"></i> Edit
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="empty-state" ng-if="filteredRemoveJobs.length == 0" style="padding: 20px">
|
|
<i class="fas fa-check-circle"></i>
|
|
No remove jobs in the queue.
|
|
</div>
|
|
|
|
<!-- Cache Jobs -->
|
|
<div class="admin-section-header">
|
|
<h2><i class="fas fa-broom mr-1"></i> Cache Cleanup Jobs</h2>
|
|
<span class="section-count">{{removeCaches.length || 0}}</span>
|
|
</div>
|
|
|
|
<div
|
|
class="queue-job-card"
|
|
ng-repeat="job in removeCaches as filteredRemoveCache"
|
|
>
|
|
<div class="job-header">
|
|
<div class="job-id">
|
|
<a target="_blank" ng-href="/r/{{job.id}}" ng-bind="job.id"></a>
|
|
<span
|
|
class="status-badge"
|
|
ng-class="'status-' + job.progress.status"
|
|
>{{job.progress.status | title}}</span>
|
|
</div>
|
|
</div>
|
|
<div class="job-timestamps">
|
|
<span ng-if="job.timestamp">
|
|
<i class="fas fa-clock"></i> Created: {{job.timestamp | humanTime}}
|
|
</span>
|
|
<span ng-if="job.processedOn">
|
|
<i class="fas fa-cog"></i> Processed: {{job.processedOn | humanTime}}
|
|
</span>
|
|
<span ng-if="job.finishedOn">
|
|
<i class="fas fa-check"></i> Finished: {{job.finishedOn | humanTime}}
|
|
</span>
|
|
</div>
|
|
<div ng-if="job.stacktrace.length">
|
|
<pre
|
|
ng-repeat="stack in job.stacktrace track by $index"
|
|
style="font-size: 0.8rem; max-height: 100px; overflow: auto; margin: 6px 0 0 0"
|
|
><code ng-bind="stack"></code></pre>
|
|
</div>
|
|
<div class="job-actions">
|
|
<button class="btn btn-sm" ng-click="retryJob('cache', job)">
|
|
<i class="fas fa-sync"></i> Retry
|
|
</button>
|
|
<button class="btn btn-sm" ng-click="removeJob('cache', job)">
|
|
<i class="fas fa-trash-alt"></i> Remove
|
|
</button>
|
|
<a class="btn btn-sm" href="/anonymize/{{job.id}}">
|
|
<i class="far fa-edit"></i> Edit
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="empty-state" ng-if="filteredRemoveCache.length == 0" style="padding: 20px">
|
|
<i class="fas fa-check-circle"></i>
|
|
No cache cleanup jobs in the queue.
|
|
</div>
|
|
</div>
|