Hizmet Metrikleri
Kullanıma göre faturalamayı yapılandıran, ölçümleri ve kesilen dönem kayıtlarını okuyan beş uç.
Genel Bakış
Metrik faturalama, sabit ücret yerine kullanıma göre ücretlendirmedir: disk, trafik, çağrı sayısı. Bu beş uç neyin ölçüleceğini yapılandırır, ölçülen değerleri okur ve kesilmiş dönem kayıtlarını gösterir.
Neyin ölçülebileceğini modül belirler; ne kadarının ücretsiz olduğunu, fiyat kademelerini ve üst sınırı ise hizmet başına siz yazarsınız. Liste ucu ikisini birlikte döndürür, böylece bir hizmette hangi metriklerin açılabileceğini tek istekte görürsünüz.
Referans
Metrikleri Listeleme
Modülün ölçebildiği metriklerle hizmette yapılandırılmış olanları tek listede döndürür.
per_unit her birimi aynı fiyatlar, volume toplamı düştüğü kademenin fiyatıyla çarpar, graduated her kademeyi kendi fiyatıyla toplar.curl 'https://panel.ornek.com/api/v1/admin/services/529/metrics' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/services/529/metrics', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/529/metrics');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Liste 'yapilandirilabilir' olanlari da tasir; kurulu olanlari 'configured' ile ayirin.
$metrics = Api::Services()->GetServiceMetrics(['id' => 529])['data'];
$live = array_filter($metrics, fn (array $m): bool => $m['configured'] && $m['enabled']);{
"data": [
{
"key": "disk_space",
"label": "Disk Space",
"unit": "GB",
"supported": true,
"configured": true,
"enabled": true,
"included": 10,
"max_value": 100,
"scheme": "per_unit",
"pricing": {
"1-100": {
"from": 1,
"to": 100,
"USD": { "enable": 1, "price": 0.5 }
}
}
},
{
"key": "bandwidth",
"label": "Bandwidth",
"unit": "GB",
"supported": true,
"configured": false,
"enabled": false,
"included": 0,
"max_value": 0,
"scheme": "per_unit",
"pricing": []
}
]
}Metriği Yapılandırma
Tek bir metriğin ücretsiz miktarını, üst sınırını ve fiyat kademelerini yazar.
per_unit her birimi aynı fiyatlar, volume toplamı düştüğü kademenin fiyatıyla çarpar, graduated her kademeyi kendi fiyatıyla toplar. Varsayılan per_unit.{enable, price} taşır. Üst sınırı alt sınırdan küçük ya da sıfır olan kademeler yok sayılır.curl -X PUT 'https://panel.ornek.com/api/v1/admin/services/529/metrics/disk_space' \
-H "Authorization: Bearer $API_KEY" \
-H 'Content-Type: application/json' \
-d '{"enabled":true,"included":10,"max_value":100,"scheme":"per_unit","pricing":[{"from":1,"to":100,"USD":{"enable":1,"price":0.5}}]}'const res = await fetch('https://panel.ornek.com/api/v1/admin/services/529/metrics/disk_space', {
method: 'PUT',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
enabled: true,
included: 10,
max_value: 100,
scheme: 'per_unit',
pricing: [{ from: 1, to: 100, USD: { enable: 1, price: 0.5 } }],
}),
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/529/metrics/disk_space');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'enabled' => true,
'included' => 10,
'scheme' => 'per_unit',
'pricing' => [
['from' => 1, 'to' => 100, 'USD' => ['enable' => 1, 'price' => 0.5]],
],
]),
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Kademeler DIZI gonderilir, NESNE olarak geri doner: okudugunuzu oldugu gibi geri gondermeyin.
$current = Api::Services()->GetServiceMetrics(['id' => 529])['data'][0];
$tiers = array_values($current['pricing']);
Api::Services()->UpdateServiceMetric([
'id' => 529,
'metric' => 'disk_space',
'pricing' => $tiers,
]);{
"error": {
"code": "currency_required",
"message": "Enabling a metric requires at least one currency with a price."
}
}Metriği Kaldırma
Metriği hizmetin yapılandırmasından çıkarır. Kullanım ve faturalama kayıtları yerinde kalır.
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/services/529/metrics/disk_space' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/services/529/metrics/disk_space', {
method: 'DELETE',
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/529/metrics/disk_space');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);// Kaldirmak gecmisi SILMEZ: faturalama satirlari sorgulanmaya devam eder.
$response = Api::Services()->DeleteServiceMetric([
'id' => 529,
'metric' => 'disk_space',
]);Kullanımı Okuma
Verilen dönem için günlük kullanım noktalarını döndürür.
curl -G 'https://panel.ornek.com/api/v1/admin/services/529/metrics/disk_space/usage' \
-H "Authorization: Bearer $API_KEY" \
-d period_start=2026-06-01 \
-d period_end=2026-06-30const url = new URL('https://panel.ornek.com/api/v1/admin/services/529/metrics/disk_space/usage');
url.searchParams.set('period_start', '2026-06-01');
url.searchParams.set('period_end', '2026-06-30');
const res = await fetch(url, { headers: { Authorization: `Bearer ${apiKey}` } });
const body = await res.json();$url = 'https://panel.ornek.com/api/v1/admin/services/529/metrics/disk_space/usage?' . http_build_query([
'period_start' => '2026-06-01',
'period_end' => '2026-06-30',
]);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);$usage = Api::Services()->GetServiceMetricUsage(
['id' => 529, 'metric' => 'disk_space'],
['period_start' => '2026-06-01', 'period_end' => '2026-06-30'],
);
// Bos deger 'o gun sifir kullanim' DEGIL 'o gun olcum yok' demektir.
$measured = array_filter($usage['data']['points'], fn (array $p): bool => $p['value'] !== null);Faturalama Geçmişini Okuma
Metrik için kesilmiş dönem kayıtlarını döndürür.
curl 'https://panel.ornek.com/api/v1/admin/services/529/metrics/disk_space/billing' \
-H "Authorization: Bearer $API_KEY"const res = await fetch('https://panel.ornek.com/api/v1/admin/services/529/metrics/disk_space/billing', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();$ch = curl_init('https://panel.ornek.com/api/v1/admin/services/529/metrics/disk_space/billing');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$body = json_decode(curl_exec($ch), true);
curl_close($ch);$rows = Api::Services()->GetServiceMetricBilling([
'id' => 529,
'metric' => 'disk_space',
])['data'];
// Faturaya baglanmamis satirlar henuz tahsil edilmemistir.
$pending = array_filter($rows, fn (array $r): bool => $r['invoice_id'] === 0);Tuzaklar
Fiyat kademelerini dizi olarak gönderirsiniz ama yanıt bunları sınırlarından türetilmiş anahtarlarla nesne olarak döndürür. Okuduğunuzu olduğu gibi geri göndermek çalışmaz; önce değerleri düz diziye çevirmeniz gerekir.
Kullanım noktalarında bir günün değeri boş geliyorsa o gün ölçüm alınmamıştır; kullanımın sıfır olduğu anlamına gelmez. Boşları sıfır sayarak ortalama alan bir hesap, ölçümün durduğu günleri kullanımın düştüğü günler gibi gösterir.
Kaldırma ucu metriği yalnız yapılandırmadan çıkarır. Kullanım noktaları ve faturalama satırları yerinde kalır ve sorgulanmaya devam eder — kesilmiş bir tutar kaybolmaz. Metriği yeniden yapılandırdığınızda eski geçmiş yanında durur.
Bir metriği faturalamaya açmak, kademelerde fiyatı olan en az bir aktif para birimi ister; yoksa istek currency_required ile döner. Ücretsiz miktarı ayarlamak için açmanız gerekmez: kapalı bir metrikte de included yazabilirsiniz.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.