@@ -16,27 +16,57 @@ limitations under the License.
1616package mountmanager
1717
1818import (
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"
2023)
2124
2225var _ Statter = realStatter {}
2326
2427type realStatter struct {
28+ VolumeClient * volumeclient.Client
2529}
2630
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
2939}
3040
3141// IsBlock checks if the given path is a block device
3242func (realStatter ) IsBlockDevice (fullPath string ) (bool , error ) {
3343 return false , nil
3444}
3545
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 ) {
3848 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
4070}
4171
4272type fakeStatter struct {}
0 commit comments