select * from ( values ('Объектное хранилище S3 CEPH','Дисковое пространство: Объем хранения','paas.s3.ceph.vol-m','ГБайт',1.80,0) ,('Объектное хранилище S3 CEPH','Исходящий трафик','paas.s3.ceph.trf-m','ГБайт',1.50,0) ,('Объектное хранилище S3 CEPH','Запросы GET, HEAD, OPTIONS','paas.s3.ceph.get-m','10тыс.шт.',0.35,0) ,('Объектное хранилище S3 CEPH','Запросы PUT, POST, PATCH','paas.s3.ceph.put-m','10тыс.шт.',4.50,0) ) as s (svc, component, code, unit, price, discount) order by code select 'WZ'||to_char(tenant.wzcode,'FM00000') as wz, vdc.name as vdc_name, case when vdc.name like '%-v1cl1%' then 'iaas.ngc.i29' when vdc.name like '%-v1cl2%' then 'iaas.ngc.i31' when vdc.name like '%-v1cl4%' then 'iaas.ngc.a28' when vdc.name like '%-v1cl6%' then 'iaas.ngc.i28' else '['||vdc.name||']' end as code, sum(cpu_used/cpu_speed)/4. as core_h, sum(mem_used)/1024/4. as gb_h from ngcloud_ru.capacity_resource join ngcloud_ru.vdc on capacity_resource.vdc_id=vdc.id join ngcloud_ru.tenant on tenant.id=vdc.tenant_id where tenant.wzcode = AND capacity_resource.timestamp >= AND capacity_resource.timestamp < group by tenant.wzcode, vdc.name order by tenant.wzcode, vdc.name; select max(capacity_resource.timestamp) as dt_load from ngcloud_ru.capacity_resource select 'WZ'||to_char(tenant.wzcode,'FM00000') as wz, vdc.name as vdc_name, case WHEN vdc.name LIKE '%-v1cl1%' THEN 'iaas.ngc.i29' WHEN vdc.name LIKE '%-v1cl2%' THEN 'iaas.ngc.i31' WHEN vdc.name LIKE '%-v1cl4%' THEN 'iaas.ngc.a28' WHEN vdc.name LIKE '%-v1cl6%' THEN 'iaas.ngc.i28' ELSE '['||vdc.name||']' END || CASE WHEN storage_profile_types.name ILIKE '%-SSD%' THEN '.ssd-m' WHEN storage_profile_types.name ILIKE '%-SAS' THEN '.sas-m' WHEN storage_profile_types.name ILIKE '%-SATA' THEN '.sata-m' ELSE '.['|| storage_profile_types.name ||']' END as code, storage_profile_types.name, -- *** это не тип, а профайл sum("limit")/1024./4 as gb_h_limit, -- 4 потому, что сбор раз в 15 минут sum(used)/1024./4 as gb_h_used from ngcloud_ru.capacity_storage join ngcloud_ru.vdc on capacity_storage.vdc_id=vdc.id join ngcloud_ru.tenant on tenant.id=vdc.tenant_id join ngcloud_ru.storage_profile_types on capacity_storage.storage_profile_types_id=storage_profile_types.id where tenant.wzcode = AND capacity_storage.timestamp >= AND capacity_storage.timestamp < group by tenant.wzcode, vdc.name, storage_profile_types.name order by tenant.wzcode, vdc.name, storage_profile_types.name; select max(capacity_storage.timestamp) as dt_load from ngcloud_ru.capacity_storage select /* *** ниже дублирование кода агрегации - round ceil etc, обратить внимание при правке */ (sum(bucket_stat.usage_rgw_main_size_actual)/) as vol_B ,ceil(sum(bucket_stat.usage_rgw_main_size_actual)//1024/1024/1024) as vol_GB ,greatest(ceil(sum(bucket_stat.usage_rgw_main_size_actual)/ /1024/1024/1024)- case when bucket_stat.placement_id = 1 then 1 else 0 end, 0) as vol_GB_free_tier_subtracted /*считается не в точности так, как в функции*/ ,case when bucket_stat.placement_id = 1 then 'paas.s3.ceph' when bucket_stat.placement_id = 2 then 'paas.s3.cphc' else '['|| TO_CHAR(bucket_stat.placement_id,'FM9') ||']' end as code --,bucket_stat.placement_id ,'WZ'||lpad(bucket_stat.owner, 5, '0') as wz -- *** здесь не число, а строка, поэтому другая формула обратной сборки WZ from s3billing.bucket_stat join s3billing.placement ON s3billing.placement.id=bucket_stat.placement_id join s3billing.bucket_info ON bucket_info.id=bucket_stat.bucket_id where bucket_stat.placement_id in (1,2) AND bucket_stat.owner = AND bucket_stat.timestamp_addition >= AND bucket_stat.timestamp_addition < group by bucket_stat.owner, bucket_stat.placement_id order by bucket_stat.owner, bucket_stat.placement_id; select max(timestamp_addition) as dt_load from s3billing.bucket_stat select sum( CASE WHEN (category.name LIKE 'get%' OR category.name LIKE 'head%' OR category.name LIKE 'options%' ) THEN ops ELSE 0 END ) as get ,ceil(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 ,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 ) as put ,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) 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 ,(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 ,case when bucket_info.placement_id = 1 then 'paas.s3.ceph' when bucket_info.placement_id = 2 then 'paas.s3.cphc' else '['|| TO_CHAR(bucket_info.placement_id,'FM9') ||']' end as code --*** зачем делать там ключ bigint ,bucket_info.placement_id --category.name, bucket_info.name ,'WZ'||lpad(user_info.name, 5, '0') as wz from s3billing.usage_bucket_by_user join s3billing.user_info on usage_bucket_by_user.user_id=user_info.id join s3billing.category on usage_bucket_by_user.category_id=category.id join s3billing.bucket_info on usage_bucket_by_user.bucketid=bucket_info.id join s3billing.placement on bucket_info.placement_id=placement.id where 1=1 AND user_info.name = AND usage_bucket_by_user.time >= AND usage_bucket_by_user.time < group by user_info.name, bucket_info.placement_id order by user_info.name, bucket_info.placement_id; select max(time) as dt_load from s3billing.usage_bucket_by_user select wz, code || '.vcpu-m' as code, core_h as raw_metric, core_h as metric, core_h as chargeable_metric from qComputing union all select wz, code || '.ram-m' as code, gb_h as raw_metric, gb_h as metric, gb_h as chargeable_metric from qComputing union all select wz, code, gb_h_used as raw_metric, gb_h_used as metric, gb_h_used as chargeable_metric from qStorage union all select wz, code || '.vol-m', vol_b as raw_metric, vol_gb as metric, vol_GB_free_tier_subtracted as chargeable_metric from qS3Vol union all select wz, code || '.get-m', get as raw_metric, get_10k as metric, get_10k_free_tier_subtracted as chargeable_metric from qS3OpsTrf union all select wz, code || '.put-m', put as raw_metric, put_10k as metric, put_10k_free_tier_subtracted as chargeable_metric from qS3OpsTrf union all select wz, code || '.trf-m', bytes_sent as raw_metric, bytes_sent_gb as metric, bytes_sent_gb_free_tier_subtracted as chargeable_metric from qS3OpsTrf SELECT s.code s.svc s.component m.chargeable_metric s.unit s.price*(100-s.discount)/100 as discounted_price s.price*(100-s.discount)/100*m.chargeable_metric as charge s.price s.discount m.raw_metric m.metric FROM qSpec as s, qUnifiedMetric as m WHERE m.wz= AND s.code=m.code order by s.code Отчет по PAYG #request.auth.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')#
Артикул Кол-во (метрика) Ед.изм. Цена ₽ со скид., с НДС Стоимость ₽ с НДС     Услуга Компонент GPL с НДС Скидка% Оплачиваемый объем
#svc#
#currentRow# #code# #chargeable_metric# #unit# #discounted_price# #charge# #svc# #component# #price# #discount# #metric#
Итого #svc#: #NumFmt(acc,2)#