From 228023ba4969eabed15532d3f01ee234a8fa792e Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 2 Jul 2026 19:34:41 +0300 Subject: [PATCH] 057 orrganization_status --- Application.cfc | 2 +- cloud_capacity.cfm | 165 ++++++++++++++++++++++++++++++++------------- crm2cloud.cfm | 15 +++-- 3 files changed, 131 insertions(+), 51 deletions(-) diff --git a/Application.cfc b/Application.cfc index 5dda269..7d991e9 100644 --- a/Application.cfc +++ b/Application.cfc @@ -76,7 +76,7 @@ - + diff --git a/cloud_capacity.cfm b/cloud_capacity.cfm index fa34724..c20f84b 100644 --- a/cloud_capacity.cfm +++ b/cloud_capacity.cfm @@ -81,24 +81,28 @@ from ( group by "Cluster"), ---> usage as ( -select c."Cluster" as cluster -,count(c."UUID_VM") as vms -,sum(c."VM_vCPU_count") as vm_cores -,sum(c."VM_vCPU_count"*c."VM_is_ON") as vm_cores_on -,sum(c."VM_vCPU_count"*c."VDC_CPU_Speed") as vm_ghz -,sum(c."VM_vCPU_count"*c."VDC_CPU_Speed"*c."VM_is_ON") as vm_ghz_on -,sum(c."VM_CPU_Reserv_GHz") as vm_ghz_reserved -,sum(c."VM_vCPU_count"*c."VDC_CPU_Speed"*c."VM_CPU_Reserv_perc"/100) as vm_ghz_reserved_c -,sum(c."VM_vCPU_count"*c."VDC_CPU_Speed"*(case when c."VM_CPU_Reserv_perc" IS null then 20 when c."VM_CPU_Reserv_perc"<=20 then 20 else c."VM_CPU_Reserv_perc" end)/100) as vm_ghz_promised --- promised - зарезервированные ГГц, если включить минимальное согласованное резервирование -,sum(c."VM_RAM_Allocated"*c."VM_is_ON") as vm_ram_alloc_on -,sum(c."VM_RAM_Allocated") as vm_ram_alloc -,sum(c."VM_RAM_Used") as vm_ram_used -,sum(c."VM_CPU_Used_AVG") as vm_ghz_usage -,sum(c."VM_is_ON") as vms_on -,sum(s."Disk_Allocated") as disk_allocated -,sum(s."Disk_Used") as disk_used +select + c."Cluster" as cluster + ,count(c."UUID_VM") as vms + ,sum(c."VM_vCPU_count") as vm_cores + ,sum(c."VM_vCPU_count"*c."VM_is_ON") as vm_cores_on + ,sum(c."VM_vCPU_count"*c."VDC_CPU_Speed") as vm_ghz + ,sum(c."VM_vCPU_count"*c."VDC_CPU_Speed"*c."VM_is_ON") as vm_ghz_on + ,sum(c."VM_CPU_Reserv_GHz") as vm_ghz_reserved + ,sum(c."VM_vCPU_count"*c."VDC_CPU_Speed"*c."VM_CPU_Reserv_perc"/100) as vm_ghz_reserved_c + ,sum(c."VM_vCPU_count"*c."VDC_CPU_Speed"*(case when c."VM_CPU_Reserv_perc" IS null then 20 when c."VM_CPU_Reserv_perc"<=20 then 20 else c."VM_CPU_Reserv_perc" end)/100) as vm_ghz_promised + -- promised - зарезервированные ГГц, если включить минимальное согласованное резервирование + ,sum(c."VM_RAM_Allocated"*c."VM_is_ON") as vm_ram_alloc_on + ,sum(c."VM_RAM_Allocated") as vm_ram_alloc + ,sum(c."VM_RAM_Used") as vm_ram_used + ,sum(c."VM_CPU_Used_AVG") as vm_ghz_usage + ,sum(c."VM_is_ON") as vms_on + ,sum(s."Disk_Allocated") as disk_allocated + ,sum(s."Disk_Used") as disk_used + ,sum(CASE WHEN c."Organization_Status"='prod' THEN c."VM_CPU_Used_AVG" ELSE 0 END ) as ghz_used_prod + ,sum(CASE WHEN c."Organization_Status"='prod' THEN c."VM_RAM_Used" ELSE 0 END ) as ram_used_prod + ,sum(CASE WHEN c."Organization_Status"='prod' THEN s."Disk_Used" ELSE 0 END ) as disk_used_prod from vmreports.compute c left outer join vmreports.storage s on(c."UUID_VM"=s."VM_UUID") @@ -108,27 +112,27 @@ group by c."Cluster"), cluster_stat as ( SELECT - h."Cluster" as cluster -,h."Cluster_v2" as cluster_v2 -,m.models -,COUNT(*) as hosts_total -,COUNT(*)-1 as hosts_ha /*не вполне корректно, хосты разного размера, отказ по-разному влияет*/ -,sum(CASE WHEN "Maintenance"='inMaintenance' THEN 1 ELSE 0 END) as hosts_in_maintenance -,sum(CASE WHEN "Maintenance"='notInMaintenance' THEN 1 ELSE 0 END) as hosts_in_service -,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 "CPU_Used_AVG" ELSE 0 END) as host_ghz_usage -,sum(CASE WHEN "Maintenance"='notInMaintenance' THEN "CPU_Used" ELSE 0 END) 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 -,max("CPUtoVM") as ghz_subtract_ha -,max("RAMtoVM") as gb_subtract_ha -,sum("RAM_Total")/sum("CPU_Cores") as gb_per_core -,CASE WHEN sum("CPU_Cores"*"CPU_Speed") > 0 THEN sum("CPU_Used_AVG")/sum("CPU_Cores"*"CPU_Speed")*100 ELSE NULL END as cpu_usage_perc + h."Cluster" as cluster + ,h."Cluster_v2" as cluster_v2 + ,m.models + ,COUNT(*) as hosts_total + ,COUNT(*)-1 as hosts_ha /*не вполне корректно, хосты разного размера, отказ по-разному влияет*/ + ,sum(CASE WHEN "Maintenance"='inMaintenance' THEN 1 ELSE 0 END) as hosts_in_maintenance + ,sum(CASE WHEN "Maintenance"='notInMaintenance' THEN 1 ELSE 0 END) as hosts_in_service + ,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 "CPU_Used_AVG" ELSE 0 END) as host_ghz_usage + ,sum(CASE WHEN "Maintenance"='notInMaintenance' THEN "CPU_Used" ELSE 0 END) 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 + ,max("CPUtoVM") as ghz_subtract_ha + ,max("RAMtoVM") as gb_subtract_ha + ,sum("RAM_Total")/sum("CPU_Cores") as gb_per_core + ,CASE WHEN sum("CPU_Cores"*"CPU_Speed") > 0 THEN sum("CPU_Used_AVG")/sum("CPU_Cores"*"CPU_Speed")*100 ELSE NULL END as cpu_usage_perc FROM vmreports.host h LEFT OUTER JOIN ( SELECT hi."Cluster", STRING_AGG(DISTINCT hi."Model" || ' [' || (hi.cnt::text) || '] ',', ') as models @@ -159,7 +163,6 @@ FROM vmreports.vsan_storage WHERE ts=(SELECT max(ts) FROM vmreports.vsan_storage) ) - select h.cluster as cluster_v1 @@ -206,6 +209,10 @@ select coalesce(u.disk_allocated,0) as disk_allocated coalesce(u.disk_used,0) as disk_used + + coalesce(u.ghz_used_prod,0) as ghz_used_prod + coalesce(u.ram_used_prod,0) as ram_used_prod + coalesce(u.disk_used_prod,0) as disk_used_prod from cluster_stat h @@ -235,12 +242,21 @@ select ,sum(vm_ghz_reserved) as vm_ghz_reserved ,sum(vm_ghz_promised) as vm_ghz_promised ,sum(vm_ram_alloc) as vm_ram_alloc + ,sum(vm_ram_alloc_on) as vm_ram_alloc_on ,sum(vm_ram_used) as vm_ram_used ,sum(vms) as vms ,sum(vms_on) as vms_on ,sum(cores*ghz)/sum(cores) as ghz + ,sum(disk_allocated) as disk_allocated ,sum(disk_used) as disk_used + ,sum(usable) as usable + + ,sum(ghz_used_prod) as ghz_used_prod + ,sum(ram_used_prod) as ram_used_prod + ,sum(disk_used_prod) as disk_used_prod + + from qRead @@ -482,7 +498,7 @@ from qRead Пока выводим избыточный набор колонок для контроля. Кроме того, еще не выбрали, какие колонки удобнее и релевантнее
-* CPU GHz provision rate % - отношение зарезервированной частоты (с учетом 20% резерва по умолчанию) к наличной частоте процессоров +* CPU GHz provision rate % - отношение зарезервированной частоты (с учетом 20% резерва по умолчанию) к наличной частоте процессоров (считая выключенные ВМ - поэтому "мертвые" ВМ искажают статистику, кроме того, что занимают диск)
* Для средней ВМ указана аллоцированная память, в скобках - используемая, далее аллоцированное дисковое пространство, в скобках используемое. Диск считается без разделения по политикам (2do). ГГц на ВМ, процент загрузки ядер (** проверить), используемая память - считается по включенным ВМ. Количество ядер, аллоцированная память и диск - по всем ВМ
@@ -539,6 +555,8 @@ from qRead + + @@ -555,12 +573,12 @@ from qRead Емкость vSAN GB Свободно vSAN % alloc - Свободно vSAN % used + Свободно vSAN % used - + + + - - @@ -579,6 +597,8 @@ from qRead #numberFormat(vm_cpu_usage_perc,"0")# #oversubscription# #cores_total# + #cores_in_service# + #safeNumberFormat(ghz_in_service,".0")# #numberFormat(ghz_provisioned,".0")# #numberFormat(vm_ghz_reserved,".0")# #numberFormat(vm_ghz_usage,".0")# @@ -609,7 +629,62 @@ from qRead - + + #safeNumberFormat(ghz_used_prod,".0")# + #safeNumberFormat(ram_used_prod,"0")# + #safeNumberFormat(disk_used_prod,"0")# + + + + + + Итого + + #hosts_total# + #numberFormat(ghz,".0")# + + #numberFormat(vms,"0")# + #numberFormat(vms_on,"0")# + + + + + #cores_total# + #cores_in_service# + #safeNumberFormat(ghz_in_service,".0")# + #numberFormat(ghz_provisioned,".0")# + #numberFormat(vm_ghz_reserved,".0")# + #numberFormat(vm_ghz_usage,".0")# + #vm_cores# + #vm_cores_on# + + #numberFormat(gb_provisioned,"0")# + #numberFormat(vm_ram_alloc,"0")# + #numberFormat(vm_ram_alloc_on,"0")# + #numberFormat(vm_ram_used,"0")# + + + + #safeNumberFormat(usable,"0")# + + + + #numberFormat(effective_free/usable*100,"0")# + + + + + + + + #numberFormat((usable-used)/usable*100,"0")# + + + + + #safeNumberFormat(ghz_used_prod,".0")# + #safeNumberFormat(ram_used_prod,"0")# + #safeNumberFormat(disk_used_prod,"0")# diff --git a/crm2cloud.cfm b/crm2cloud.cfm index 21aea00..fa527fd 100644 --- a/crm2cloud.cfm +++ b/crm2cloud.cfm @@ -111,6 +111,8 @@ AS ( ,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 + ,STRING_AGG(DISTINCT "Organization_Status",',') as organization_status + ,COUNT(DISTINCT "Organization_UUID") as org_count FROM vmreports.compute c WHERE ts = ( SELECT max(ts) @@ -269,6 +271,7 @@ select r.client as client_sold r.company_uid a.wz as wz_alloc + a.organization_status ds.status_ids ds.line_pricing_model_ids r.codes as ram_codes @@ -357,6 +360,7 @@ S3 операции и трафик: #dateFormat(qS3OpsTrfAge.dt_load,'YYYY-M + @@ -396,24 +400,25 @@ S3 операции и трафик: #dateFormat(qS3OpsTrfAge.dt_load,'YYYY-M #wz_alloc# #status_ids# + #organization_status# #line_pricing_model_ids# #cpu_codes# - style="background:lightgreen;">#cpu_sold# + style="background:lightgreen;" style="background:yellow;">#cpu_sold# style="background:lightcoral;">#cpu_alloc# style="background:lightcoral;">#cpu_alloc_on# #ram_codes# - style="background:lightgreen;">#ram_sold# + style="background:lightgreen;" style="background:yellow;">#ram_sold# style="background:lightcoral;">#ram_alloc# style="background:lightcoral;">#ram_alloc_on# #disk_codes# - style="background:lightgreen;">#disk_sold# + style="background:lightgreen;" style="background:yellow;">#disk_sold# style="background:lightcoral;">#disk_alloc# #gpu_codes# - style="background:lightgreen;">#gpu_sold# + style="background:lightgreen;" style="background:yellow;">#gpu_sold# style="background:lightcoral;">#gpu_alloc# #gpu# @@ -436,7 +441,7 @@ S3 операции и трафик: #dateFormat(qS3OpsTrfAge.dt_load,'YYYY-M - Итого + Итого style="background:lightgreen;">#cpu_sold# style="background:lightcoral;">#cpu_alloc#