261 lines
9.1 KiB
YAML
261 lines
9.1 KiB
YAML
- type: custom-api
|
|
title: Site Statistics
|
|
hide-header: true
|
|
cache: 1m
|
|
subrequests:
|
|
# aveminakarabudak.com
|
|
a1:
|
|
url: ${PLAUSIBLE_BASE_URL}/api/v1/stats/realtime/visitors?site_id=aveminakarabudak.com
|
|
headers: { Authorization: "Bearer ${PLAUSIBLE_TOKEN}" }
|
|
s1:
|
|
url: ${PLAUSIBLE_BASE_URL}/api/v1/stats/aggregate?site_id=aveminakarabudak.com&period=day&metrics=visitors,pageviews,visits
|
|
headers: { Authorization: "Bearer ${PLAUSIBLE_TOKEN}" }
|
|
# ayrisapart.com
|
|
a2:
|
|
url: ${PLAUSIBLE_BASE_URL}/api/v1/stats/realtime/visitors?site_id=ayrisapart.com
|
|
headers: { Authorization: "Bearer ${PLAUSIBLE_TOKEN}" }
|
|
s2:
|
|
url: ${PLAUSIBLE_BASE_URL}/api/v1/stats/aggregate?site_id=ayrisapart.com&period=day&metrics=visitors,pageviews,visits
|
|
headers: { Authorization: "Bearer ${PLAUSIBLE_TOKEN}" }
|
|
# ayris.tech
|
|
a3:
|
|
url: ${PLAUSIBLE_BASE_URL}/api/v1/stats/realtime/visitors?site_id=ayris.tech
|
|
headers: { Authorization: "Bearer ${PLAUSIBLE_TOKEN}" }
|
|
s3:
|
|
url: ${PLAUSIBLE_BASE_URL}/api/v1/stats/aggregate?site_id=ayris.tech&period=day&metrics=visitors,pageviews,visits
|
|
headers: { Authorization: "Bearer ${PLAUSIBLE_TOKEN}" }
|
|
# irisiptv.online
|
|
a4:
|
|
url: ${PLAUSIBLE_BASE_URL}/api/v1/stats/realtime/visitors?site_id=irisiptv.online
|
|
headers: { Authorization: "Bearer ${PLAUSIBLE_TOKEN}" }
|
|
s4:
|
|
url: ${PLAUSIBLE_BASE_URL}/api/v1/stats/aggregate?site_id=irisiptv.online&period=day&metrics=visitors,pageviews,visits
|
|
headers: { Authorization: "Bearer ${PLAUSIBLE_TOKEN}" }
|
|
# screencapr.com
|
|
a5:
|
|
url: ${PLAUSIBLE_BASE_URL}/api/v1/stats/realtime/visitors?site_id=screencapr.com
|
|
headers: { Authorization: "Bearer ${PLAUSIBLE_TOKEN}" }
|
|
s5:
|
|
url: ${PLAUSIBLE_BASE_URL}/api/v1/stats/aggregate?site_id=screencapr.com&period=day&metrics=visitors,pageviews,visits
|
|
headers: { Authorization: "Bearer ${PLAUSIBLE_TOKEN}" }
|
|
template: |
|
|
<div class="plausible-multi-site">
|
|
<style>
|
|
.plausible-site-row {
|
|
display: grid;
|
|
grid-template-columns: auto 1fr auto;
|
|
gap: 16px;
|
|
padding: 16px;
|
|
border-bottom: 1px solid var(--color-widget-content-border);
|
|
align-items: center;
|
|
}
|
|
.plausible-site-row:last-child {
|
|
border-bottom: none;
|
|
}
|
|
.site-icon {
|
|
width: 48px;
|
|
height: 48px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
border-radius: 50%;
|
|
overflow: hidden;
|
|
}
|
|
.site-icon img {
|
|
width: 100%;
|
|
height: 100%;
|
|
object-fit: cover;
|
|
}
|
|
.site-info {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 2px;
|
|
}
|
|
.site-domain {
|
|
font-weight: 800;
|
|
color: var(--color-highlight);
|
|
font-size: 1.25rem;
|
|
}
|
|
.site-metrics {
|
|
display: flex;
|
|
gap: 12px;
|
|
font-size: 0.85rem;
|
|
color: var(--color-subdue);
|
|
font-family: var(--font-family-mono);
|
|
}
|
|
.metric-item b {
|
|
color: var(--color-primary);
|
|
}
|
|
.realtime-badge {
|
|
background: rgba(34, 197, 94, 0.15);
|
|
color: #22c55e;
|
|
padding: 2px 10px;
|
|
border-radius: 20px;
|
|
font-size: 0.8rem;
|
|
font-weight: 700;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
}
|
|
.realtime-dot {
|
|
width: 8px;
|
|
height: 8px;
|
|
background: currentColor;
|
|
border-radius: 50%;
|
|
animation: pulse 1.5s infinite;
|
|
}
|
|
@keyframes pulse {
|
|
0% { opacity: 1; transform: scale(1); }
|
|
50% { opacity: 0.4; transform: scale(1.2); }
|
|
100% { opacity: 1; transform: scale(1); }
|
|
}
|
|
</style>
|
|
|
|
{{ $sites := . }}
|
|
|
|
<!-- Site Block 1 -->
|
|
{{ $a1 := .Subrequest "a1" }}
|
|
{{ $s1 := .Subrequest "s1" }}
|
|
<div class="plausible-site-row">
|
|
<div class="site-icon">
|
|
<img src="https://icon.horse/icon/aveminakarabudak.com" alt="" />
|
|
</div>
|
|
<div class="site-info">
|
|
<span class="site-domain">aveminakarabudak.com</span>
|
|
<div class="site-metrics">
|
|
{{ if eq $s1.Response.StatusCode 200 }}
|
|
<span class="metric-item">Visitors: <b>{{ $s1.JSON.Get "results.visitors.value" }}</b></span>
|
|
<span class="metric-item">Views: <b>{{ $s1.JSON.Get "results.pageviews.value" }}</b></span>
|
|
{{ end }}
|
|
</div>
|
|
</div>
|
|
<div class="site-status">
|
|
{{ if eq $a1.Response.StatusCode 200 }}
|
|
{{ $c1 := $a1.JSON.Raw }}
|
|
{{ if ne $c1 "0" }}
|
|
<div class="realtime-badge">
|
|
<span class="realtime-dot"></span>
|
|
{{ $c1 }} Active
|
|
</div>
|
|
{{ end }}
|
|
{{ end }}
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Site Block 2 -->
|
|
{{ $a2 := .Subrequest "a2" }}
|
|
{{ $s2 := .Subrequest "s2" }}
|
|
<div class="plausible-site-row">
|
|
<div class="site-icon">
|
|
<img src="https://icon.horse/icon/ayrisapart.com" alt="" />
|
|
</div>
|
|
<div class="site-info">
|
|
<span class="site-domain">ayrisapart.com</span>
|
|
<div class="site-metrics">
|
|
{{ if eq $s2.Response.StatusCode 200 }}
|
|
<span class="metric-item">Visitors: <b>{{ $s2.JSON.Get "results.visitors.value" }}</b></span>
|
|
<span class="metric-item">Views: <b>{{ $s2.JSON.Get "results.pageviews.value" }}</b></span>
|
|
{{ end }}
|
|
</div>
|
|
</div>
|
|
<div class="site-status">
|
|
{{ if eq $a2.Response.StatusCode 200 }}
|
|
{{ $c2 := $a2.JSON.Raw }}
|
|
{{ if ne $c2 "0" }}
|
|
<div class="realtime-badge">
|
|
<span class="realtime-dot"></span>
|
|
{{ $c2 }} Active
|
|
</div>
|
|
{{ end }}
|
|
{{ end }}
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Site Block 3 -->
|
|
{{ $a3 := .Subrequest "a3" }}
|
|
{{ $s3 := .Subrequest "s3" }}
|
|
<div class="plausible-site-row">
|
|
<div class="site-icon">
|
|
<img src="https://icon.horse/icon/ayris.tech" alt="" />
|
|
</div>
|
|
<div class="site-info">
|
|
<span class="site-domain">ayris.tech</span>
|
|
<div class="site-metrics">
|
|
{{ if eq $s3.Response.StatusCode 200 }}
|
|
<span class="metric-item">Visitors: <b>{{ $s3.JSON.Get "results.visitors.value" }}</b></span>
|
|
<span class="metric-item">Views: <b>{{ $s3.JSON.Get "results.pageviews.value" }}</b></span>
|
|
{{ end }}
|
|
</div>
|
|
</div>
|
|
<div class="site-status">
|
|
{{ if eq $a3.Response.StatusCode 200 }}
|
|
{{ $c3 := $a3.JSON.Raw }}
|
|
{{ if ne $c3 "0" }}
|
|
<div class="realtime-badge">
|
|
<span class="realtime-dot"></span>
|
|
{{ $c3 }} Active
|
|
</div>
|
|
{{ end }}
|
|
{{ end }}
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Site Block 4 -->
|
|
{{ $a4 := .Subrequest "a4" }}
|
|
{{ $s4 := .Subrequest "s4" }}
|
|
<div class="plausible-site-row">
|
|
<div class="site-icon">
|
|
<img src="https://icon.horse/icon/irisiptv.online" alt="" />
|
|
</div>
|
|
<div class="site-info">
|
|
<span class="site-domain">irisiptv.online</span>
|
|
<div class="site-metrics">
|
|
{{ if eq $s4.Response.StatusCode 200 }}
|
|
<span class="metric-item">Visitors: <b>{{ $s4.JSON.Get "results.visitors.value" }}</b></span>
|
|
<span class="metric-item">Views: <b>{{ $s4.JSON.Get "results.pageviews.value" }}</b></span>
|
|
{{ end }}
|
|
</div>
|
|
</div>
|
|
<div class="site-status">
|
|
{{ if eq $a4.Response.StatusCode 200 }}
|
|
{{ $c4 := $a4.JSON.Raw }}
|
|
{{ if ne $c4 "0" }}
|
|
<div class="realtime-badge">
|
|
<span class="realtime-dot"></span>
|
|
{{ $c4 }} Active
|
|
</div>
|
|
{{ end }}
|
|
{{ end }}
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Site Block 5 -->
|
|
{{ $a5 := .Subrequest "a5" }}
|
|
{{ $s5 := .Subrequest "s5" }}
|
|
<div class="plausible-site-row">
|
|
<div class="site-icon">
|
|
<img src="https://icon.horse/icon/screencapr.com" alt="" />
|
|
</div>
|
|
<div class="site-info">
|
|
<span class="site-domain">screencapr.com</span>
|
|
<div class="site-metrics">
|
|
{{ if eq $s5.Response.StatusCode 200 }}
|
|
<span class="metric-item">Visitors: <b>{{ $s5.JSON.Get "results.visitors.value" }}</b></span>
|
|
<span class="metric-item">Views: <b>{{ $s5.JSON.Get "results.pageviews.value" }}</b></span>
|
|
{{ end }}
|
|
</div>
|
|
</div>
|
|
<div class="site-status">
|
|
{{ if eq $a5.Response.StatusCode 200 }}
|
|
{{ $c5 := $a5.JSON.Raw }}
|
|
{{ if ne $c5 "0" }}
|
|
<div class="realtime-badge">
|
|
<span class="realtime-dot"></span>
|
|
{{ $c5 }} Active
|
|
</div>
|
|
{{ end }}
|
|
{{ end }}
|
|
</div>
|
|
</div>
|
|
</div>
|