| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- package kubemodel
- import (
- "time"
- "github.com/opencost/opencost/core/pkg/log"
- "github.com/opencost/opencost/core/pkg/model/kubemodel"
- "github.com/opencost/opencost/core/pkg/source"
- )
- func (km *KubeModel) computePersistentVolumes(kms *kubemodel.KubeModelSet, start, end time.Time) error {
- grp := source.NewQueryGroup()
- metrics := km.ds.Metrics()
- pvInfoResultFuture := source.WithGroup(grp, metrics.QueryKMPVInfo(start, end))
- pvUptimeResultFuture := source.WithGroup(grp, metrics.QueryPVUptime(start, end))
- pvBytesResultFuture := source.WithGroup(grp, metrics.QueryPVBytes(start, end))
- pvMap := make(map[string]*kubemodel.PersistentVolume)
- pvInfoResult, _ := pvInfoResultFuture.Await()
- for _, res := range pvInfoResult {
- pvMap[res.UID] = &kubemodel.PersistentVolume{
- UID: res.UID,
- Name: res.PersistentVolume,
- StorageClass: res.StorageClass,
- CSIVolumeHandle: res.CSIVolumeHandle,
- }
- }
- pvUptimeResult, _ := pvUptimeResultFuture.Await()
- for _, res := range pvUptimeResult {
- pv, ok := pvMap[res.UID]
- if !ok {
- log.Warnf("persistent volume with UID '%s' has not been initialized to add uptime", res.UID)
- continue
- }
- s, e := res.GetStartEnd(start, end, km.ds.Resolution())
- pv.Start = s
- pv.End = e
- }
- pvBytesResult, _ := pvBytesResultFuture.Await()
- for _, res := range pvBytesResult {
- pv, ok := pvMap[res.UID]
- if !ok {
- log.Warnf("persistent volume with UID '%s' has not been initialized to add bytes", res.UID)
- continue
- }
- pv.SizeBytes = res.Value
- }
- for _, pv := range pvMap {
- err := kms.RegisterPersistentVolume(pv)
- if err != nil {
- log.Warnf("Failed to register persistent volume: %s", err.Error())
- }
- }
- return nil
- }
|