diff --git a/Application.cfc b/Application.cfc index 02d0838..9df0a52 100644 --- a/Application.cfc +++ b/Application.cfc @@ -76,7 +76,7 @@ - + diff --git a/cloud_capacity.cfm b/cloud_capacity.cfm index c5e2d21..d8e6142 100644 --- a/cloud_capacity.cfm +++ b/cloud_capacity.cfm @@ -15,7 +15,7 @@ with -capacity as ( + usage as ( select "Cluster" as cluster @@ -55,6 +55,8 @@ SELECT ,sum("CPU_Cores") as cores ,sum(CASE WHEN "Maintenance"='notInMaintenance' THEN "CPU_Cores" ELSE 0 END) as cores_in_service ,sum(CASE WHEN "Maintenance"='notInMaintenance' THEN "CPU_Cores"*"CPU_Speed" ELSE 0 END) as ghz_in_service +,sum(CASE WHEN "Maintenance"='notInMaintenance' THEN "CPUtoVM" ELSE 0 END) as ghz_provisioned +,sum(CASE WHEN "Maintenance"='notInMaintenance' THEN "RAMtoVM" ELSE 0 END) as gb_provisioned ,sum("CPU_Used_AVG") as host_ghz_usage ,(sum(CASE WHEN "Maintenance"='notInMaintenance' THEN "RAM_Total" ELSE 0 END)) as ram_in_service ,(avg(CASE WHEN "Maintenance"='notInMaintenance' THEN "CPU_Speed" ELSE 0 END)) as ghz @@ -102,25 +104,26 @@ select h.ghz h.ram_in_service h.cpu_usage_perc - c.hosts - c.cores as Cores_Capacity - c.ghz as GHz_Capacity + + h.cores as Cores_Capacity + + h.ghz_provisioned as GHz_Provisioned + h.gb_provisioned as GB_Provisioned u.vm_ghz_reserved u.vm_ghz_promised - round((u.vm_ghz_promised/c.ghz)::numeric,2)*100 as GHz_provision_rate - c.ram as RAM_Capacity + round((u.vm_ghz_promised/h.ghz_provisioned)::numeric,2)*100 as GHz_provision_rate + u.vm_ram_alloc u.vm_ram_used - round((u.vm_ram_alloc/c.ram)::numeric,2)*100 as GB_alloc_perc - round((u.vm_ram_used/c.ram)::numeric,2)*100 as GB_usage_perc - round((u.vm_cores/c.cores)::numeric,1) as oversubscription + round((u.vm_ram_alloc/h.gb_provisioned)::numeric,2)*100 as GB_alloc_perc + round((u.vm_ram_used/h.gb_provisioned)::numeric,2)*100 as GB_usage_perc + round((u.vm_cores/h.cores)::numeric,1) as oversubscription u.vm_cores u.vms u.vm_ghz_usage/h.ghz_in_service*100 as vm_cpu_usage_perc from cluster_stat h left outer join usage u on (h.cluster=u.cluster) -left outer join capacity c on (h.cluster=c.cluster) left outer join cluster_naming n on (h.cluster=n.cluster) where 1=1 order by @@ -131,13 +134,12 @@ select sum(hosts_total) as hosts_total ,sum(hosts_ha) as hosts_ha ,sum(hosts_in_maintenance) as hosts_in_maintenance - ,sum(hosts) as hosts ,sum(host_ghz_usage) as host_ghz_usage ,sum(cores_in_service) as cores_in_service ,sum(ghz_in_service) as ghz_in_service - ,sum(GHz_Capacity) as GHz_Capacity + ,sum(ghz_provisioned) as ghz_provisioned ,sum(ram_in_service) as ram_in_service - ,sum(RAM_Capacity) as RAM_Capacity + ,sum(gb_provisioned) as gb_provisioned ,sum(cores_in_service) as cores_in_service ,sum(vm_cores) as vm_cores ,sum(vm_ghz_usage) as vm_ghz_usage @@ -208,17 +210,17 @@ from qRead #hosts_total# - #numberFormat(RAM_Capacity-vm_ram_alloc,"0")# + #numberFormat(gb_provisioned-vm_ram_alloc,"0")# - #numberFormat(GHz_Capacity-vm_ghz_reserved,".0")# - #numberFormat((GHz_Capacity-vm_ghz_reserved)/ghz/0.2,"0")# - #numberFormat((GHz_Capacity-vm_ghz_reserved)/ghz/0.5,"0")# - #numberFormat((GHz_Capacity-vm_ghz_reserved)/ghz/0.8,"0")# + #numberFormat(ghz_provisioned-vm_ghz_reserved,".0")# + #numberFormat((ghz_provisioned-vm_ghz_reserved)/ghz/0.2,"0")# + #numberFormat((ghz_provisioned-vm_ghz_reserved)/ghz/0.5,"0")# + #numberFormat((ghz_provisioned-vm_ghz_reserved)/ghz/0.8,"0")# - #numberFormat(GHz_Capacity-vm_ghz_promised,".0")# - #numberFormat((GHz_Capacity-vm_ghz_promised)/ghz/0.2,"0")# - #numberFormat((GHz_Capacity-vm_ghz_promised)/ghz/0.5,"0")# - #numberFormat((GHz_Capacity-vm_ghz_promised)/ghz/0.8,"0")# + #numberFormat(ghz_provisioned-vm_ghz_promised,".0")# + #numberFormat((ghz_provisioned-vm_ghz_promised)/ghz/0.2,"0")# + #numberFormat((ghz_provisioned-vm_ghz_promised)/ghz/0.5,"0")# + #numberFormat((ghz_provisioned-vm_ghz_promised)/ghz/0.8,"0")# #vms# @@ -247,8 +249,7 @@ from qRead - - + - #hosts# #numberFormat(vm_cores/cores_in_service,".0")# - #numberFormat(GHz_Capacity,".0")# + #numberFormat(ghz_provisioned,".0")# #numberFormat(vm_ghz_reserved,".0")# #numberFormat(vm_ghz_promised,".0")# #vm_cores# - #numberFormat(RAM_Capacity,"0")# + #numberFormat(gb_provisioned,"0")# #numberFormat(vm_ram_alloc,"0")# #numberFormat(vm_ram_used,"0")# #numberFormat(vm_ram_alloc/ram_in_service*100,"0")# diff --git a/crm2cloud.cfm b/crm2cloud.cfm index 9ab8378..a06f0ab 100644 --- a/crm2cloud.cfm +++ b/crm2cloud.cfm @@ -8,110 +8,212 @@ + WITH -status(status, status_id, probability_pc) as (VALUES - ('Закрыта неуспешно',7,0),('Закрыта успешно',6,100),('Договор подписан',5,100),('Договор на подписании',15,90),('Договор на согласовании',12,70), - ('Тестирование',8,50),('Отправлено ТКП',10,20),('Внутреннее согласование',37,10),('Проработка решения',4,10),('Сбор потребностей',1,0) -), -line as ( - SELECT siv.__id as siv_uid, siv.discount, siv.type as line_pricing_model_id - ,siv.hash as line_key, siv.is_actual as siv_is_actual - ,siv.version::numeric as line_version - ,d.__index as deal_index - ,d._companies - ,a.index as agreement_version - ,siv.date_nop::date as dt_from - ,siv.date_end::date as dt_to - ,siv.is_easy as is_simple - ,siv.cnt -- should mutiliply - ,s.probability_pc - ,a.__id as agreement_uid, a.contract_uid, a.is_actual as agreement_is_actual, a.deal_uid - ,d.__name as deal, d.__status_status as deal_status_id - --,c.__name as contract - ,siv.user_description - ,siv.params - --,(SELECT sum(p.price*p.cnt*(100.0-COALESCE(p.discount,0.0))/100.0) FROM elma.service_parametrs p WHERE(p.__id = ANY (siv.params))) as cost - FROM elma.deals_services siv - JOIN elma.deals d on (d.__id = ANY(siv.deal)) - JOIN status s on (d.__status_status=s.status_id) - LEFT OUTER JOIN elma.additional_agreements a on (a.__id = ANY(siv.additional_agreement)) - WHERE siv.is_actual AND siv."__deletedAt" IS NULL AND d."__deletedAt" IS NULL AND a."__deletedAt" IS NULL - AND a.is_actual - AND siv.type IN (2,3) -), -component as ( - SELECT - price*cnt*(100.0-COALESCE(discount,0))/100.0 as cost - ,price - ,cnt - ,code - ,__id - FROM elma.service_parametrs - where "__deletedAt" IS NULL -), -stair as ( -- рабочая лесенка (инстансы строк, имеющие нетривиальную вероятность) - select * FROM ( - SELECT *, - MIN(dt_from) OVER (PARTITION BY line_key ORDER BY deal_index desc) running_min_dt - FROM line WHERE probability_pc > 0 - ) t - WHERE t.dt_from = t.running_min_dt - AND t.dt_to > CURRENT_TIMESTAMP OR t.dt_to IS NULL -), -alloc as (select c."WZ" as wz -, round(sum(c."VM_RAM_Allocated")) as ram -, round(sum(CASE WHEN "VM_is_ON" > 0 THEN c."VM_RAM_Allocated" ELSE 0 END)) as ram_on -, round(sum(c."VM_vCPU_count")) as cpu -, round(sum(CASE WHEN "VM_is_ON" > 0 THEN c."VM_vCPU_count" ELSE 0 END)) as cpu_on -from vmreports.compute c -where ts=(select max(ts) from vmreports.compute) -group by c."WZ" -), -disk_alloc as (select c."WZ" as wz -, round(sum(c."Disk_Allocated")) as disk_alloc -from vmreports.storage c -where ts=(select max(ts) from vmreports.storage) -group by c."WZ" -), -sold_ram as (SELECT -z.id_klienta as WZ, z.__name as client, z.__id as company_uid, round(sum(c.cnt*o.cnt)) as quantity -,count(*) as lines, STRING_AGG(c.code,', ') as codes -/*,o.line_key, o.probability_pc, dt_next, o.deal_uid, o.deal, o.agreement_uid, o.line_pricing_model_id,o.dt_from, o.dt_to*/ -FROM stair o -JOIN elma.companies z on (o._companies=z.__id) -LEFT OUTER JOIN component c on (c.__id = ANY (o.params)) -WHERE c.code SIMILAR TO 'iaas.(ngc|dcp).%.ram-_' AND c.cnt <> 0 AND o.cnt <> 0 -GROUP BY z.id_klienta, z.__id, z.__name -), -sold_cpu as (SELECT -z.id_klienta as WZ, z.__name as client, z.__id as company_uid, round(sum(c.cnt*o.cnt)) as quantity -,count(*) as lines, STRING_AGG(c.code,', ') as codes -/*,o.line_key, o.probability_pc, dt_next, o.deal_uid, o.deal, o.agreement_uid, o.line_pricing_model_id,o.dt_from, o.dt_to*/ -FROM stair o -JOIN elma.companies z on (o._companies=z.__id) -LEFT OUTER JOIN component c on (c.__id = ANY (o.params)) -WHERE c.code SIMILAR TO 'iaas.(ngc|dcp).%.vcpu%-_' AND c.cnt <> 0 AND o.cnt <> 0 -GROUP BY z.id_klienta, z.__id, z.__name -), -sold_disk as (SELECT -z.id_klienta as WZ, z.__name as client, z.__id as company_uid, round(sum(c.cnt*o.cnt)) as quantity -,count(*) as lines, STRING_AGG(c.code,', ') as codes -/*,o.line_key, o.probability_pc, dt_next, o.deal_uid, o.deal, o.agreement_uid, o.line_pricing_model_id,o.dt_from, o.dt_to*/ -FROM stair o -JOIN elma.companies z on (o._companies=z.__id) -LEFT OUTER JOIN component c on (c.__id = ANY (o.params)) -WHERE c.code SIMILAR TO 'iaas.(ngc|dcp).%.(ssd|fstssd|sata)-_' AND c.cnt <> 0 AND o.cnt <> 0 -GROUP BY z.id_klienta, z.__id, z.__name -), -deal_stat as ( -select -STRING_AGG(distinct deal_status_id::text,', ') as status_ids -,STRING_AGG(distinct line_pricing_model_id::text,', ') as line_pricing_model_ids -,z.id_klienta as WZ -from line o join elma.companies z on (o._companies=z.__id) -GROUP BY z.id_klienta -) + status(status, status_id, probability_pc) as + ( + VALUES + ('Закрыта неуспешно',7,0) , + ('Закрыта успешно',6,100) , + ('Договор подписан',5,100) , + ('Договор на подписании',15,90) , + ('Договор на согласовании',12,70), + ('Тестирование',8,50) , + ('Отправлено ТКП',10,20) , + ('Внутреннее согласование',37,10), + ('Проработка решения',4,10) , + ('Сбор потребностей',1,0) + ), + line_expanded as + ( + SELECT + siv.__id as siv_uid , + siv.discount , + siv.type as line_pricing_model_id , + siv.hash as line_key , + siv.is_actual as siv_is_actual , + siv.version::numeric as line_version , + d.__index as deal_index , + d._companies , + a.index as agreement_version , + siv.date_nop::date as dt_from , + siv.date_end::date as dt_to , + siv.is_easy as is_simple , + siv.cnt , + s.probability_pc , + a.__id as agreement_uid , + a.contract_uid , + a.is_actual as agreement_is_actual , + a.deal_uid , + d.__name as deal , + d.__status_status as deal_status_id , + siv.user_description , + unnest(siv.params) as param_id + FROM + elma.deals_services siv + JOIN elma.deals d on (d.__id = ANY(siv.deal)) + JOIN status s on (d.__status_status=s.status_id) + LEFT JOIN elma.additional_agreements a on (a.__id = ANY(siv.additional_agreement)) + WHERE + siv.is_actual + AND siv."__deletedAt" IS NULL + and d."__deletedAt" IS NULL + and a."__deletedAt" IS NULL + and a.is_actual + and siv.type IN (2,3) + ), + component as + ( + SELECT + price*cnt*(100.0-COALESCE(discount,0))/100.0 as cost , + price , + cnt , + code , + __id + FROM + elma.service_parametrs + where + "__deletedAt" IS NULL + ), + stair as + ( + select + * + FROM + ( + SELECT + *, + MIN(dt_from) OVER (PARTITION BY line_key ORDER BY deal_index desc) running_min_dt + FROM + line_expanded + --line + WHERE + probability_pc > 0 + ) t + WHERE + t.dt_from = t.running_min_dt + AND t.dt_to > CURRENT_TIMESTAMP + OR t.dt_to IS NULL + ), + alloc as + ( + select + c."WZ" as wz , + round(sum(c."VM_RAM_Allocated")) as ram , + round(sum(CASE WHEN "VM_is_ON" > 0 THEN c."VM_RAM_Allocated" ELSE 0 END)) as ram_on , + round(sum(c."VM_vCPU_count")) as cpu , + round(sum(CASE WHEN "VM_is_ON" > 0 then c."VM_vCPU_count" ELSE 0 END)) as cpu_on + from + vmreports.compute c + where + ts= (select max(ts) from vmreports.compute) + group by c."WZ" + ), + disk_alloc as + ( + select + c."WZ" as wz , + round(sum(c."Disk_Allocated")) as disk_alloc + from + vmreports.storage c + where + ts= (select max(ts) from vmreports.compute) + group by + c."WZ" ), + sold_ram as + ( + SELECT + z.id_klienta as WZ , + z.__name as client , + z.__id as company_uid, + round(sum(c.cnt*o.cnt)) as quantity , + count(*) as lines , + STRING_AGG( distinct c.code,', ' order by c.code) as codes + FROM + stair o + JOIN elma.companies z on o._companies=z.__id + LEFT JOIN component c on c.__id = o.param_id + --LEFT JOIN component c on (c.__id = ANY (o.params)) + WHERE + --c.code SIMILAR TO 'iaas.(ngc|dcp).%.ram-_' + (c.code LIKE 'iaas.ngc.%.ram-_' OR c.code LIKE 'iaas.dcp.%.ram-_') + AND c.cnt <> 0 + AND o.cnt <> 0 + GROUP BY + z.id_klienta, + z.__id , + z.__name + ), + sold_cpu as + ( + SELECT + z.id_klienta as WZ , + z.__name as client , + z.__id as company_uid, + round(sum(c.cnt*o.cnt)) as quantity , + count(*) as lines , + STRING_AGG(c.code,', ' order by c.code) as codes + FROM + stair o + JOIN + elma.companies z on (o._companies=z.__id) + LEFT JOIN component c on c.__id = o.param_id + --LEFT JOIN component c on (c.__id = ANY (o.params)) + WHERE + c.code SIMILAR TO 'iaas.(ngc|dcp).%.vcpu%-_' + --(c.code LIKE 'iaas.ngc.%.vcpu%-_' OR c.code LIKE 'iaas.dcp.%.vcpu%-_') + AND c.cnt <> 0 + AND o.cnt <> 0 + GROUP BY + z.id_klienta, + z.__id , + z.__name + ), + sold_disk as + ( + SELECT + z.id_klienta as WZ , + z.__name as client , + z.__id as company_uid, + round(sum(c.cnt*o.cnt)) as quantity , + count(*) as lines , + STRING_AGG(c.code,', ' order by c.code) as codes + FROM + stair o + JOIN elma.companies z on (o._companies=z.__id) + LEFT JOIN component c on c.__id = o.param_id + --LEFT JOIN component c on (c.__id = ANY (o.params)) + WHERE + --c.code SIMILAR TO 'iaas.(ngc|dcp).%.(ssd|fstssd|sata)-_' + (c.code LIKE 'iaas.ngc.%.ssd-_' OR c.code LIKE 'iaas.dcp.%.ssd-_' + or c.code LIKE 'iaas.ngc.%.fstssd-_' OR c.code LIKE 'iaas.dcp.%.fstssd-_' + or c.code LIKE 'iaas.ngc.%.sata-_' OR c.code LIKE 'iaas.dcp.%.sata-_' + ) + AND c.cnt <> 0 + AND o.cnt <> 0 + GROUP BY + z.id_klienta, + z.__id , + z.__name + ), + deal_stat as + ( + select + STRING_AGG(distinct deal_status_id::text,', ' order by deal_status_id::text) as status_ids, + ARRAY_AGG(distinct deal_status_id order by deal_status_id) as ar_status_ids, + STRING_AGG(distinct line_pricing_model_id::text,', ' order by line_pricing_model_id::text) as line_pricing_model_ids , + ARRAY_AGG(distinct line_pricing_model_id order by line_pricing_model_id) as ar_line_pricing_model_id, + z.id_klienta as WZ + from + line_expanded o + --line o + join elma.companies z on (o._companies=z.__id) + GROUP BY + z.id_klienta + ) + + select @@ -134,6 +236,7 @@ select da.disk_alloc z.__name as alloc_company z.__id as alloc_company_uid + ds.ar_status_ids from sold_ram r join deal_stat ds on (lower(r.wz)=lower(ds.wz)) @@ -147,7 +250,7 @@ order by - + @@ -221,9 +324,7 @@ S3 операции и трафик: #dateFormat(qS3OpsTrfAge.dt_load,'YYYY-M - - - + #wz_sold# @@ -251,39 +352,41 @@ S3 операции и трафик: #dateFormat(qS3OpsTrfAge.dt_load,'YYYY-M style="background:lightgreen;">#disk_sold# style="background:lightcoral;">#disk_alloc# - - - - - + + style="background:lightgreen;">#disk_sold# + style="background:lightcoral;">#disk_alloc# + + - - - diff --git a/crm2cloud_filter.cfm b/crm2cloud_filter.cfm index 04659f7..c6244b3 100644 --- a/crm2cloud_filter.cfm +++ b/crm2cloud_filter.cfm @@ -11,6 +11,10 @@ + + + + @@ -40,8 +44,48 @@ $(document).ready(function() {
- + +
+
Код артикула
+
+ + #i18("по вхождению подстроки в любой из списков кодов","by substring")# +
+
+ +
+
Статус
+
+ + по вхождению в список +
+
+ +
+
Модель оплаты
+
+ + по вхождению в список +
+
Контрагент