From beeb83cda5947b550510ddfef2880b60cb6a96e3 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Aug 2026 12:30:34 +0300 Subject: [PATCH] 077 rounding --- Application.cfc | 2 +- contragent_rpt.cfm | 7 +-- etc/db/gpu.20260820.sql | 134 ++++++++++++++++++++++++++++++++++++++++ payg.cfm | 42 ++++--------- 4 files changed, 149 insertions(+), 36 deletions(-) create mode 100644 etc/db/gpu.20260820.sql diff --git a/Application.cfc b/Application.cfc index 64d957b..bc6b460 100644 --- a/Application.cfc +++ b/Application.cfc @@ -86,7 +86,7 @@ - + diff --git a/contragent_rpt.cfm b/contragent_rpt.cfm index b2087db..f9c33f2 100644 --- a/contragent_rpt.cfm +++ b/contragent_rpt.cfm @@ -333,7 +333,7 @@ ORDER BY d.siv_uid, p.__id FROM qCompute -

Compute факт #dateFormat(qCompute.ts,'YYYY-MM-DD')# #timeFormat(qCompute.ts,'HH:MM:SS')#

+

Compute факт class="err">#dateFormat(qCompute.ts,'YYYY-MM-DD')# #timeFormat(qCompute.ts,'HH:MM:SS')#

@@ -399,7 +399,7 @@ ORDER BY d.siv_uid, p.__id FROM qStorage -

Storage факт #dateFormat(qStorage.ts,'YYYY-MM-DD')# #timeFormat(qStorage.ts,'HH:MM:SS')#

+

Storage факт class="err">#dateFormat(qStorage.ts,'YYYY-MM-DD')# #timeFormat(qStorage.ts,'HH:MM:SS')#

@@ -449,11 +449,10 @@ ORDER BY d.siv_uid, p.__id FROM vmreports.vm_gpu g WHERE g.ts=(select max(ts) from vmreports.vm_gpu) AND lower(g."ClientID")=lower() - -

GPU факт #dateFormat(qGpu.ts,'YYYY-MM-DD')# #timeFormat(qGpu.ts,'HH:MM:SS')#

+

GPU факт class="err">#dateFormat(qGpu.ts,'YYYY-MM-DD')# #timeFormat(qGpu.ts,'HH:MM:SS')#

diff --git a/etc/db/gpu.20260820.sql b/etc/db/gpu.20260820.sql new file mode 100644 index 0000000..c7d4f40 --- /dev/null +++ b/etc/db/gpu.20260820.sql @@ -0,0 +1,134 @@ + + select upper(trim(vm.client_id)) as wz + ,item.key as gpu_model + ,sum(item.value::int*p.value)/12. as gpu_h -- 5 minute sampling + ,avg(item.value::int*p.value)*744 as gpu_ha -- 5 minute sampling + from gpu.vm + JOIN gpu.vm_power_state p on (vm.obj_uuid=p.obj_uuid) + CROSS JOIN LATERAL jsonb_each(vm.gpu) AS item(key, value) + where 1=1 + AND p.ts >= '2026-07-01' + AND p.ts < '2026-07-31' + group by vm.client_id, item.key + order by vm.client_id, item.key; + + --select * from gpu.vm_power_state limit 100; + --select * from gpu.vm limit 100; + + select count(*), sum(value) from gpu.vm_power_state p + where 1=1 + AND p.ts >= '2026-07-01' + AND p.ts < '2026-07-31' + group by obj_uuid + + select item.key as gpu_model, + case + WHEN org_vdc LIKE '%-v1cl1%' THEN 'iaas.ngc.i29' + WHEN org_vdc LIKE '%-v1cl2%' THEN 'iaas.ngc.i31' + WHEN org_vdc LIKE '%-v1cl4%' THEN 'iaas.ngc.a28' + WHEN org_vdc LIKE '%-v1cl5%' THEN 'iaas.ngc.a45' + WHEN org_vdc LIKE '%-v1cl6%' THEN 'iaas.ngc.i28' + WHEN org_vdc LIKE '%-v1cl7%' THEN 'iaas.ngc.a40' + --WHEN org_vdc LIKE '%-v2cl2-1c%' THEN '1c' + else '['||org_vdc||']' end as code + from gpu.vm + CROSS JOIN LATERAL jsonb_each(vm.gpu) AS item(key, value) + group by item.key, code + ORDER BY 1 + + + select client_id, org, obj_id, org_vdc, item.key as gpu_model, item.value as gpu_cnt + from gpu.vm + CROSS JOIN LATERAL jsonb_each(vm.gpu) AS item(key, value) + ORDER BY client_id, org, obj_id + + + select + count(distinct obj_id) as unique_vm_cnt, + sum(p.value)/12. as vm_h, -- 5 minute sampling + sum(p.value)/12.*32.18 as cost, + sum(p.value)/12./744 as avg_month_vm -- в августе 744 часа + from gpu.vm + JOIN gpu.vm_power_state p on (vm.obj_uuid=p.obj_uuid) + where 1=1 + AND p.ts >= '2026-08-01' + AND p.ts < '2026-08-31' + AND vm.client_id='WZ01516' + -- упражнение: посчитать, сколько средних ВМ, включенных круглые сутки, создаст такой же движ за время оказания сервиса + + select + p.ts::date, + count(distinct obj_id) as unique_vm_cnt, + round((sum(p.value)/12.)::numeric,1) as vm_h, -- 5 minute sampling + round((sum(p.value)/12.*32.18)::numeric,2) as cost, + round((sum(p.value)/12./24)::numeric, 1) as avg_roundclock_vm + from gpu.vm + JOIN gpu.vm_power_state p on (vm.obj_uuid=p.obj_uuid) + where 1=1 + AND p.ts >= '2026-08-01' + AND p.ts < '2026-08-31' + AND vm.client_id='WZ01516' + GROUP BY p.ts::date + ORDER BY 1 + + select + p.ts::date, + count(distinct obj_id) as unique_vm_cnt, + round((sum(p.value)/12.)::numeric,1) as vm_h, -- 5 minute sampling + round((sum(p.value)/12.*32.18)::numeric,2) as cost, + round((sum(p.value)/12.*32.18*(1-0.02*400/32.18))::numeric,2) as cost_wo_disk, + round((count(distinct obj_id)*0.02*400*24)::numeric,2) as disk_cost_simplified, -- считаем все ВМ, включавшиеся за данные сутки + round((sum(p.value)/12./24)::numeric, 1) as avg_roundclock_vm + from gpu.vm + JOIN gpu.vm_power_state p on (vm.obj_uuid=p.obj_uuid) + where 1=1 + AND p.ts >= '2026-08-01' + AND p.ts < '2026-08-31' + AND vm.client_id='WZ01516' + GROUP BY p.ts::date + ORDER BY 1 + + select + p.ts::date, + count(distinct obj_id) as unique_vm_cnt, + (select count(distinct obj_id) from gpu.vm vm1 + JOIN gpu.vm_power_state p1 on (vm1.obj_uuid=p1.obj_uuid) + WHERE vm1.client_id='WZ01516' AND p1.ts <= p.ts::date) as unique_vm_acc, + round((sum(p.value)/12.)::numeric,1) as vm_h, -- 5 minute sampling + round((sum(p.value)/12.*32.18)::numeric,2) as cost, + round((sum(p.value)/12.*32.18*(1-0.02*400/32.18))::numeric,2) as cost_wo_disk, + round((count(distinct obj_id)*0.02*400*24)::numeric,2) as disk_cost_simplified, -- считаем все ВМ, включавшиеся за данные сутки + round((sum(p.value)/12./24)::numeric, 1) as avg_roundclock_vm + from gpu.vm + JOIN gpu.vm_power_state p on (vm.obj_uuid=p.obj_uuid) + where 1=1 + AND p.ts >= '2026-08-01' + AND p.ts < '2026-08-31' + AND vm.client_id='WZ01516' + GROUP BY p.ts::date + ORDER BY 1 + + + with daily as ( + select + p.ts::date as dt, + count(distinct obj_id) as unique_vm_cnt, + round((sum(p.value)/12.)::numeric,1) as vm_h, -- 5 minute sampling + round((sum(p.value)/12.*32.18)::numeric,2) as cost, + round((sum(p.value)/12.*32.18*(1-0.02*400/32.18))::numeric,2) as cost_wo_disk, + round((count(distinct obj_id)*0.02*400*24)::numeric,2) as disk_cost_simplified, -- считаем все ВМ, включавшиеся за данные сутки + round((sum(p.value)/12./24)::numeric, 1) as avg_roundclock_vm + from gpu.vm + JOIN gpu.vm_power_state p on (vm.obj_uuid=p.obj_uuid) + where 1=1 + AND p.ts >= '2026-08-01' + AND p.ts < '2026-08-31' + AND vm.client_id='WZ01516' + GROUP BY p.ts::date + ORDER BY 1 + ), + acc as (select p.ts::date as dt, count(distinct obj_id) as unique_vm_accum from gpu.vm + JOIN gpu.vm_power_state p on (vm.obj_uuid=p.obj_uuid) + WHERE vm.client_id='WZ01516' + group by p.ts::date) + select * from daily join acc on daily.dt<=acc.dt diff --git a/payg.cfm b/payg.cfm index c35dcf7..eeaff40 100644 --- a/payg.cfm +++ b/payg.cfm @@ -144,6 +144,8 @@ select * from elma.deals_services where __id='019edf9c-c23d-7ad6-a990-643dd09579 order by m.clientid, vdc.name; + + qComputing:#getTickCount()-request.startTickCount# @@ -265,22 +267,13 @@ select OR category.name LIKE 'options%' ) THEN ops ELSE 0 END ) as get - ,ceil(sum( + ,(sum( CASE WHEN (category.name LIKE 'get%' OR category.name LIKE 'head%' OR category.name LIKE 'options%' ) THEN ops ELSE 0 END - )/10000) as get_10k - ,greatest(ceil(sum( - CASE WHEN - (category.name LIKE 'get%' - OR category.name LIKE 'head%' - OR category.name LIKE 'options%' - ) THEN ops ELSE 0 END - )/10000) - CASE WHEN bucket_info.placement_id = 1 THEN 10 ELSE 0 END, 0 - ) as get_10k_free_tier_subtracted - + )/10000) as get_10k ,sum( CASE WHEN (category.name LIKE 'put%' @@ -289,29 +282,16 @@ select OR category.name LIKE 'list%' ) THEN ops ELSE 0 END ) as put - ,ceil(sum( + ,(sum( CASE WHEN (category.name LIKE 'put%' OR category.name LIKE 'post%' OR category.name LIKE 'patch%' OR category.name LIKE 'list%' ) THEN ops ELSE 0 END - )/10000) as put_10k - ,greatest(ceil(sum( - CASE WHEN - (category.name LIKE 'put%' - OR category.name LIKE 'post%' - OR category.name LIKE 'patch%' - OR category.name LIKE 'list%' - ) THEN ops ELSE 0 END - )/10000) - CASE WHEN bucket_info.placement_id = 1 THEN 1 ELSE 0 END, 0 - ) as put_10k_free_tier_subtracted - + )/10000) as put_10k ,(sum(bytes_sent)) as bytes_sent - ,ceil(sum(bytes_sent)/1024/1024/1024) as bytes_sent_GB - ,greatest(ceil(sum(bytes_sent)/1024/1024/1024) - CASE WHEN bucket_info.placement_id = 1 THEN 100 ELSE 0 END, 0 - ) as bytes_sent_GB_free_tier_subtracted - + ,(sum(bytes_sent)/1024/1024/1024) as bytes_sent_GB ,case when bucket_info.placement_id = 1 then 'paas.s3.ceph' when bucket_info.placement_id = 2 then 'paas.s3.cphc' @@ -525,10 +505,10 @@ WZ по вхождению подс Часов в периоде: #hours# Строк в отчете: #qCharge.recordCount#
Актуальность данных: -VCD Computing: #dateFormat(qComputingAge.dt_load,'YYYY-MM-DD')# #timeFormat(qComputingAge.dt_load,'HH:MM:SS')# -VCD Storage: #dateFormat(qStorageAge.dt_load,'YYYY-MM-DD')# #timeFormat(qStorageAge.dt_load,'HH:MM:SS')# -S3 хранение: #dateFormat(qS3VolAge.dt_load,'YYYY-MM-DD')# #timeFormat(qS3VolAge.dt_load,'HH:MM:SS')# -S3 операции и трафик: #dateFormat(qS3OpsTrfAge.dt_load,'YYYY-MM-DD')# #timeFormat(qS3OpsTrfAge.dt_load,'HH:MM:SS')# +VCD Computing: class="err"
>>#dateFormat(qComputingAge.dt_load,'YYYY-MM-DD')# #timeFormat(qComputingAge.dt_load,'HH:MM:SS')# +VCD Storage: class="err">>#dateFormat(qStorageAge.dt_load,'YYYY-MM-DD')# #timeFormat(qStorageAge.dt_load,'HH:MM:SS')# +S3 хранение: class="err">>#dateFormat(qS3VolAge.dt_load,'YYYY-MM-DD')# #timeFormat(qS3VolAge.dt_load,'HH:MM:SS')# +S3 операции и трафик: class="err">>#dateFormat(qS3OpsTrfAge.dt_load,'YYYY-MM-DD')# #timeFormat(qS3OpsTrfAge.dt_load,'HH:MM:SS')#