diff --git a/Application.cfc b/Application.cfc index 2c85ee7..ee62a4d 100644 --- a/Application.cfc +++ b/Application.cfc @@ -23,7 +23,6 @@ - @@ -78,7 +77,7 @@ - + diff --git a/etc/env.json b/etc/env.json index 8e5f01a..5c3c75f 100644 --- a/etc/env.json +++ b/etc/env.json @@ -1,8 +1,8 @@ { "ds_rpt_class": "org.postgresql.Driver", - "ds_rpt_connectionString": "jdbc:postgresql://db-services.adl.nubes.ru:5432/dwh", - "ds_rpt_username": "smishchuk", - "ds_rpt_password": "encrypted:46692f9b4e3bda4931a9b83685a04a15187cb725295dc68627d7eb0b760362bc8a9de8d28395fca70b30fa4595cf3ed4a83772ee73eaf13a", + "ds_rpt_connectionString": "jdbc:postgresql://write.09d78921-77a7-401a-b2cb-5ca11be850a0.services.ngcloud.ru:5432/rpt", + "ds_rpt_username": "appserver", + "ds_rpt_password": "encrypted:********", "ds_rpt_connectionLimit": "5", - "IDP_CLIENT_SECRET": "mXuJehst7ZZSBIFpjpLZFicYRhpLmxVs", + "IDP_CLIENT_SECRET": "********", } diff --git a/etc/env.json.bak b/etc/env.json.bak new file mode 100644 index 0000000..8e5f01a --- /dev/null +++ b/etc/env.json.bak @@ -0,0 +1,8 @@ +{ + "ds_rpt_class": "org.postgresql.Driver", + "ds_rpt_connectionString": "jdbc:postgresql://db-services.adl.nubes.ru:5432/dwh", + "ds_rpt_username": "smishchuk", + "ds_rpt_password": "encrypted:46692f9b4e3bda4931a9b83685a04a15187cb725295dc68627d7eb0b760362bc8a9de8d28395fca70b30fa4595cf3ed4a83772ee73eaf13a", + "ds_rpt_connectionLimit": "5", + "IDP_CLIENT_SECRET": "mXuJehst7ZZSBIFpjpLZFicYRhpLmxVs", +} diff --git a/etc/set_env - Copy.cmd b/etc/set_env - Copy.cmd new file mode 100644 index 0000000..26892e3 --- /dev/null +++ b/etc/set_env - Copy.cmd @@ -0,0 +1,10 @@ +REM set Windows env +setx rpt_class org.postgresql.Driver /M +setx rpt_connectionString jdbc:postgresql://write.09d78921-77a7-401a-b2cb-5ca11be850a0.services.ngcloud.ru:5432/rpt /M +setx rpt_username appserver /M +setx rpt_password encrypted:8b11c6e220c6456af3e08294e86cf91283d4119b58e25891e24719b0d27cbd4991d023c88da45113555c98d2cb5e4e969a4f585a94051527 /M +setx rpt_connectionLimit 5 /M + +setx IDP_CLIENT_SECRET mXuJehst7ZZSBIFpjpLZFicYRhpLmxVs /M + +pause diff --git a/etc/set_env - Copy.cmd.bak b/etc/set_env - Copy.cmd.bak new file mode 100644 index 0000000..170660b --- /dev/null +++ b/etc/set_env - Copy.cmd.bak @@ -0,0 +1,10 @@ +REM set Windows env +setx rpt_class org.postgresql.Driver /M +setx rpt_connectionString jdbc:postgresql://write.09d78921-77a7-401a-b2cb-5ca11be850a0.services.ngcloud.ru:5432/rpt /M +setx rpt_username smishchuk /M +setx rpt_password encrypted:8b11c6e220c6456af3e08294e86cf91283d4119b58e25891e24719b0d27cbd4991d023c88da45113555c98d2cb5e4e969a4f585a94051527 /M +setx rpt_connectionLimit 5 /M + +setx IDP_CLIENT_SECRET mXuJehst7ZZSBIFpjpLZFicYRhpLmxVs /M + +pause diff --git a/etc/set_env.cmd b/etc/set_env.cmd index 633a195..a799733 100644 --- a/etc/set_env.cmd +++ b/etc/set_env.cmd @@ -1,10 +1,10 @@ REM set Windows env -setx ds_dwh_class org.postgresql.Driver /M -setx ds_dwh_connectionString jdbc:postgresql://db-services.adl.nubes.ru:5432/dwh /M -setx ds_dwh_username smishchuk /M -setx ds_dwh_password encrypted:******** /M -setx ds_dwh_connectionLimit 5 /M +setx rpt_class org.postgresql.Driver /M +setx rpt_connectionString jdbc:postgresql://write.09d78921-77a7-401a-b2cb-5ca11be850a0.services.ngcloud.ru:5432/rpt /M +setx rpt_username appserver /M +setx rpt_password encrypted:******** /M +setx rpt_connectionLimit 5 /M setx IDP_CLIENT_SECRET ******** /M -pause +pause \ No newline at end of file diff --git a/etc/set_env.cmd.bak b/etc/set_env.cmd.bak new file mode 100644 index 0000000..f5a4352 --- /dev/null +++ b/etc/set_env.cmd.bak @@ -0,0 +1,10 @@ +REM set Windows env +setx rpt_class org.postgresql.Driver /M +setx rpt_connectionString jdbc:postgresql://write.09d78921-77a7-401a-b2cb-5ca11be850a0.services.ngcloud.ru:5432/rpt /M +setx rpt_username smishchuk /M +setx rpt_password encrypted:******** /M +setx rpt_connectionLimit 5 /M + +setx IDP_CLIENT_SECRET ******** /M + +pause \ No newline at end of file diff --git a/index.cfm b/index.cfm index 03e180f..43597ef 100644 --- a/index.cfm +++ b/index.cfm @@ -7,22 +7,25 @@ - - - - - - - + - - + @@ -51,266 +54,19 @@ + - - - - 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 - -Часов в периоде: #hours# Строк в отчете: #qCharge.recordCount#
+Часов в периоде: #hours# Строк в отчете: #report.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: #dateFormat(report.qComputingAge.dt_load,'YYYY-MM-DD')# #timeFormat(report.qComputingAge.dt_load,'HH:MM:SS')# +VCD Storage: #dateFormat(report.qStorageAge.dt_load,'YYYY-MM-DD')# #timeFormat(report.qStorageAge.dt_load,'HH:MM:SS')# +S3 хранение: #dateFormat(report.qS3VolAge.dt_load,'YYYY-MM-DD')# #timeFormat(report.qS3VolAge.dt_load,'HH:MM:SS')# +S3 операции и трафик: #dateFormat(report.qS3OpsTrfAge.dt_load,'YYYY-MM-DD')# #timeFormat(report.qS3OpsTrfAge.dt_load,'HH:MM:SS')#
@@ -349,7 +105,7 @@ S3 операции и трафик: #dateFormat(qS3OpsTrfAge.dt_load,'YYYY-M - + diff --git a/json.cfm b/json.cfm new file mode 100644 index 0000000..4174474 --- /dev/null +++ b/json.cfm @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + //copy fields to structure, renaming fields, this preserves data type + + + + + + + + + + + + + + + + + { + result.append(row); + return result; + }, [])# +}/> + +#serializeJSON(out)# + + diff --git a/mod/payg.cfm b/mod/payg.cfm new file mode 100644 index 0000000..9c6379d --- /dev/null +++ b/mod/payg.cfm @@ -0,0 +1,281 @@ + + + + + + + + + + + + + + + + + + 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 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mod/payg.cfm.bak b/mod/payg.cfm.bak new file mode 100644 index 0000000..f203f08 --- /dev/null +++ b/mod/payg.cfm.bak @@ -0,0 +1,281 @@ + + + + + + + + + + + + + + + + + + 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 + + + + + + + + + + + + + + + \ No newline at end of file