@@ -16,16 +16,30 @@ limitations under the License.
16
16
package mountmanager
17
17
18
18
import (
19
- "fmt"
19
+ "context"
20
+
21
+ volumeapi "github.com/kubernetes-csi/csi-proxy/client/api/volume/v1beta1"
22
+ volumeclient "github.com/kubernetes-csi/csi-proxy/client/groups/volume/v1beta1"
20
23
)
21
24
22
25
var _ Statter = realStatter {}
23
26
24
27
type realStatter struct {
28
+ VolumeClient * volumeclient.Client
29
+ }
30
+
31
+ func NewStatter () (realStatter , error ) {
32
+ volumeClient , err := volumeclient .NewClient ()
33
+ if err != nil {
34
+ return realStatter {}, err
35
+ }
36
+ return realStatter {
37
+ VolumeClient : volumeClient ,
38
+ }, nil
25
39
}
26
40
27
- func NewStatter () realStatter {
28
- return realStatter {}
41
+ func getStatFS ( s Statter , volumeId , volumePath string ) ( available , capacity , used , inodesFree , inodes , inodesUsed int64 , err error ) {
42
+ return s . StatFS ( volumeId )
29
43
}
30
44
31
45
// IsBlock checks if the given path is a block device
@@ -34,9 +48,30 @@ func (realStatter) IsBlockDevice(fullPath string) (bool, error) {
34
48
}
35
49
36
50
//TODO (jinxu): implement StatFS to get metrics
37
- func (realStatter ) StatFS (path string ) (available , capacity , used , inodesFree , inodes , inodesUsed int64 , err error ) {
51
+ func (r realStatter ) StatFS (path string ) (available , capacity , used , inodesFree , inodes , inodesUsed int64 , err error ) {
38
52
zero := int64 (0 )
39
- return zero , zero , zero , zero , zero , zero , fmt .Errorf ("Not implemented" )
53
+ //return zero, zero, zero, zero, zero, zero, fmt.Errorf("Not implemented")
54
+
55
+ idRequest := & volumeapi.VolumeIDFromMountRequest {
56
+ Mount : path ,
57
+ }
58
+ idResponse , err := r .VolumeClient .GetVolumeIDFromMount (context .Background (), idRequest )
59
+ if err != nil {
60
+ return zero , zero , zero , zero , zero , zero , err
61
+ }
62
+ volumeId := idResponse .GetVolumeId ()
63
+
64
+ request := & volumeapi.VolumeStatsRequest {
65
+ VolumeId : volumeId ,
66
+ }
67
+ response , err := r .VolumeClient .VolumeStats (context .Background (), request )
68
+ if err != nil {
69
+ return zero , zero , zero , zero , zero , zero , err
70
+ }
71
+ capacity = response .GetVolumeSize ()
72
+ used = response .GetVolumeUsedSize ()
73
+ available = capacity - used
74
+ return available , capacity , used , zero , zero , zero , nil
40
75
}
41
76
42
77
type fakeStatter struct {}
0 commit comments