@@ -16,27 +16,57 @@ 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
25
29
}
26
30
27
- func NewStatter () realStatter {
28
- return realStatter {}
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
29
39
}
30
40
31
41
// IsBlock checks if the given path is a block device
32
42
func (realStatter ) IsBlockDevice (fullPath string ) (bool , error ) {
33
43
return false , nil
34
44
}
35
45
36
- //TODO (jinxu): implement StatFS to get metrics
37
- func (realStatter ) StatFS (path string ) (available , capacity , used , inodesFree , inodes , inodesUsed int64 , err error ) {
46
+ // StatFS returns volume usage information
47
+ func (r realStatter ) StatFS (path string ) (available , capacity , used , inodesFree , inodes , inodesUsed int64 , err error ) {
38
48
zero := int64 (0 )
39
- return zero , zero , zero , zero , zero , zero , fmt .Errorf ("Not implemented" )
49
+
50
+ idRequest := & volumeapi.VolumeIDFromMountRequest {
51
+ Mount : path ,
52
+ }
53
+ idResponse , err := r .VolumeClient .GetVolumeIDFromMount (context .Background (), idRequest )
54
+ if err != nil {
55
+ return zero , zero , zero , zero , zero , zero , err
56
+ }
57
+ volumeId := idResponse .GetVolumeId ()
58
+
59
+ request := & volumeapi.VolumeStatsRequest {
60
+ VolumeId : volumeId ,
61
+ }
62
+ response , err := r .VolumeClient .VolumeStats (context .Background (), request )
63
+ if err != nil {
64
+ return zero , zero , zero , zero , zero , zero , err
65
+ }
66
+ capacity = response .GetVolumeSize ()
67
+ used = response .GetVolumeUsedSize ()
68
+ available = capacity - used
69
+ return available , capacity , used , zero , zero , zero , nil
40
70
}
41
71
42
72
type fakeStatter struct {}
0 commit comments