Admin/Ingested: per-source breakdown (published vs total crawled)
CI/CD / CI · dotnet build (push) Successful in 2m42s
CI/CD / Deploy · hamkadr (push) Successful in 2m39s

Group RawListings by SourceChannel, fold per-channel/per-host labels into
source families (تلگرام/x → تلگرام, وب‌سایت (host) → وب‌سایت), and show a
published-vs-total table so it's clear which sources are actually producing
(e.g. why everything is coming from دیوار when Telegram's proxy is down).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
soroush.asadi
2026-06-10 08:46:01 +03:30
parent a03dcb1157
commit efbf998caf
2 changed files with 55 additions and 0 deletions
@@ -34,6 +34,32 @@
</form>
}
@if (Model.SourceBreakdown.Count > 0)
{
<div class="card card-pad" style="margin-bottom:14px;">
<strong style="display:block; margin-bottom:8px;">📊 به تفکیک منبع</strong>
<table style="width:100%; border-collapse:collapse; font-size:13.5px;">
<thead>
<tr style="color:var(--muted);">
<th style="text-align:start; padding:4px 0;">منبع</th>
<th style="text-align:start;">منتشرشده</th>
<th style="text-align:start;">کل دریافت</th>
</tr>
</thead>
<tbody>
@foreach (var s in Model.SourceBreakdown)
{
<tr style="border-top:1px solid var(--line);">
<td style="padding:6px 0;"><strong>@s.Source</strong></td>
<td><span class="badge badge-verified">@P(s.Published)</span></td>
<td class="muted">@P(s.Total)</td>
</tr>
}
</tbody>
</table>
</div>
}
<div class="ing-filters">
@Html.Raw(Pill("all", "همه", Model.Counts.Values.Sum()))
@Html.Raw(Pill("new", "در صف", C(JobsMedical.Web.Models.RawListingStatus.New)))