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