057 orrganization_status

This commit is contained in:
2026-07-02 19:34:41 +03:00
parent 6c952ca443
commit 228023ba49
3 changed files with 131 additions and 51 deletions
+120 -45
View File
@@ -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
<d:field_set titleMapOut="titleMap" lengthOut="fieldCount">
<d:field title="cluster v1">h.cluster as cluster_v1</d:field>
@@ -206,6 +209,10 @@ select
<d:field title="Disk Allocated" cfSqlType="CF_SQL_NUMERIC">coalesce(u.disk_allocated,0) as disk_allocated</d:field>
<d:field title="Disk Used" cfSqlType="CF_SQL_NUMERIC">coalesce(u.disk_used,0) as disk_used</d:field>
<d:field title="GHz Used Prod" cfSqlType="CF_SQL_NUMERIC">coalesce(u.ghz_used_prod,0) as ghz_used_prod</d:field>
<d:field title="RAM Used PROD" cfSqlType="CF_SQL_NUMERIC">coalesce(u.ram_used_prod,0) as ram_used_prod</d:field>
<d:field title="Disk Used Prod" cfSqlType="CF_SQL_NUMERIC">coalesce(u.disk_used_prod,0) as disk_used_prod</d:field>
</d:field_set>
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
</cfquery>
@@ -482,7 +498,7 @@ from qRead
<!--- <cfdump var=#qTotal#/> --->
<i>Пока выводим избыточный набор колонок для контроля. Кроме того, еще не выбрали, какие колонки удобнее и релевантнее</i>
<br/>
<i>* CPU GHz provision rate % - отношение зарезервированной частоты (с учетом 20% резерва по умолчанию) к наличной частоте процессоров</i>
<i>* CPU GHz provision rate % - отношение зарезервированной частоты (с учетом 20% резерва по умолчанию) к наличной частоте процессоров (считая выключенные ВМ - поэтому "мертвые" ВМ искажают статистику, кроме того, что занимают диск)</i>
<br/>
<i>* Для средней ВМ указана аллоцированная память, в скобках - используемая, далее аллоцированное дисковое пространство, в скобках используемое. Диск считается без разделения по политикам (2do). ГГц на ВМ, процент загрузки ядер (** проверить), используемая память - считается по включенным ВМ. Количество ядер, аллоцированная память и диск - по всем ВМ</i>
<br/>
@@ -539,6 +555,8 @@ from qRead
<th width="3%"><layout:column_head name="vm_cpu_usage_perc"/></th>
<th width="3%"><layout:column_head name="oversubscription"/></th>
<th width="3%"><layout:column_head name="cores_total"/></th>
<th width="3%"><layout:column_head name="cores_in_service"/></th>
<th width="3%"><layout:column_head name="ghz_in_service"/></th>
<th width="3%"><layout:column_head name="ghz_provisioned"/></th>
<th width="3%"><layout:column_head name="vm_ghz_reserved"/></th>
<th width="3%"><layout:column_head name="vm_ghz_usage"/></th>
@@ -555,12 +573,12 @@ from qRead
<th width="3%"><layout:column_head name="GB_usage_perc"/></th>
<th width="3%">Емкость vSAN GB</th>
<th width="3%">Свободно vSAN % alloc</th>
<th width="3%">Свободно vSAN % used</th>
<th width="3%">Свободно vSAN % used</th>
<th width="3%"><layout:column_head name="ghz_used_prod"/></th>
<th width="3%"><layout:column_head name="ram_used_prod"/></th>
<th width="3%"><layout:column_head name="disk_used_prod"/></th>
</layout:grid_head>
</thead>
<cfoutput query="qRead">
@@ -579,6 +597,8 @@ from qRead
<td class="c" style="font-size:130%;">#numberFormat(vm_cpu_usage_perc,"0")#</td>
<td class="r">#oversubscription#</td>
<td class="r">#cores_total#</td>
<td class="r">#cores_in_service#</td>
<td class="r">#safeNumberFormat(ghz_in_service,".0")#</td>
<td class="r">#numberFormat(ghz_provisioned,".0")#</td>
<td class="r">#numberFormat(vm_ghz_reserved,".0")#</td>
<td class="r">#numberFormat(vm_ghz_usage,".0")#</td>
@@ -609,7 +629,62 @@ from qRead
<cfcatch type="any"></cfcatch>
</cftry>
</cfif>
</td>
</td>
<td class="c">#safeNumberFormat(ghz_used_prod,".0")#</td>
<td class="c">#safeNumberFormat(ram_used_prod,"0")#</td>
<td class="c">#safeNumberFormat(disk_used_prod,"0")#</td>
</tr>
</cfoutput>
<cfoutput query="qTotal">
<tr class="b">
<td colspan="3" class="r b"> Итого</td>
<td class="r">#hosts_total#</td>
<td class="r" style="font-size:120%">#numberFormat(ghz,".0")#</td>
<td class="r" style="font-size:120%"></td>
<td class="r" style="font-size:120%">#numberFormat(vms,"0")#</td>
<td class="r" style="font-size:120%">#numberFormat(vms_on,"0")#</td>
<td class="c" style="font-size:130%;"></td>
<td class="c" style="font-size:130%;"></td>
<td class="r"></td>
<td class="r">#cores_total#</td>
<td class="r">#cores_in_service#</td>
<td class="r">#safeNumberFormat(ghz_in_service,".0")#</td>
<td class="r">#numberFormat(ghz_provisioned,".0")#</td>
<td class="r">#numberFormat(vm_ghz_reserved,".0")#</td>
<td class="r">#numberFormat(vm_ghz_usage,".0")#</td>
<td class="r">#vm_cores#</td>
<td class="r">#vm_cores_on#</td>
<td class="r">#numberFormat(gb_provisioned,"0")#</td>
<td class="r">#numberFormat(vm_ram_alloc,"0")#</td>
<td class="r">#numberFormat(vm_ram_alloc_on,"0")#</td>
<td class="r">#numberFormat(vm_ram_used,"0")#</td>
<td class="c" style="font-size:130%;"></td>
<td class="c" style="font-size:130%;"></td>
<td class="c" style="font-size:130%;"></td>
<td class="c" style="font-size:130%;">#safeNumberFormat(usable,"0")#</td>
<td class="c" style="font-size:130%;">
<cfif usable GT 0>
<cftry>
#numberFormat(effective_free/usable*100,"0")#
<cfcatch type="any"></cfcatch>
</cftry>
</cfif>
</td>
<td class="c" style="font-size:130%;">
<cfif usable GT 0>
<cftry>
#numberFormat((usable-used)/usable*100,"0")#
<cfcatch type="any"></cfcatch>
</cftry>
</cfif>
</td>
<td class="c">#safeNumberFormat(ghz_used_prod,".0")#</td>
<td class="c">#safeNumberFormat(ram_used_prod,"0")#</td>
<td class="c">#safeNumberFormat(disk_used_prod,"0")#</td>
</tr>
</cfoutput>
</table>