summaryrefslogtreecommitdiff
path: root/opendc-web/opendc-web-ui/src/containers/app/map/RackEnergyFillContainer.js
blob: d22317a5a95b43219b751376986d40923d34fbb2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import React from 'react'
import { useSelector } from 'react-redux'
import RackFillBar from '../../../components/app/map/elements/RackFillBar'

const RackSpaceFillContainer = (props) => {
    const state = useSelector((state) => {
        let energyConsumptionTotal = 0
        const rack = state.objects.rack[state.objects.tile[props.tileId].rack]
        const machineIds = rack.machines
        machineIds.forEach((machineId) => {
            if (machineId !== null) {
                const machine = state.objects.machine[machineId]
                machine.cpus.forEach((id) => (energyConsumptionTotal += state.objects.cpu[id].energyConsumptionW))
                machine.gpus.forEach((id) => (energyConsumptionTotal += state.objects.gpu[id].energyConsumptionW))
                machine.memories.forEach(
                    (id) => (energyConsumptionTotal += state.objects.memory[id].energyConsumptionW)
                )
                machine.storages.forEach(
                    (id) => (energyConsumptionTotal += state.objects.storage[id].energyConsumptionW)
                )
            }
        })

        return {
            type: 'energy',
            fillFraction: Math.min(1, energyConsumptionTotal / rack.powerCapacityW),
        }
    })
    return <RackFillBar {...props} {...state} />
}

export default RackSpaceFillContainer