@@ -55,24 +55,23 @@ type Snapshot struct {
5555 FullName string
5656 Path string
5757 ParentDataset * Dataset
58- Date * time.Time
5958
6059 rawGozfsData * gozfs.Dataset
6160 rawGolibzfsData * golibzfs.Dataset
61+ Properties SnapshotProperties
6262}
6363
6464func (s * Snapshot ) Equal (e Snapshot ) bool {
6565 return s .Name == e .Name && s .Path == e .Path
6666}
6767
68- func NewSnapshot (name string , path string , parentDataset * Dataset , date * time. Time , s * golibzfs.Dataset ) * Snapshot {
68+ func NewSnapshot (name string , path string , parentDataset * Dataset , s * golibzfs.Dataset ) * Snapshot {
6969 fullName := fmt .Sprintf ("%s@%s" , parentDataset .rawGozfsData .Name , name )
7070 snapshot := & Snapshot {
7171 Name : name ,
7272 FullName : fullName ,
7373 Path : path ,
7474 ParentDataset : parentDataset ,
75- Date : date ,
7675
7776 rawGolibzfsData : s ,
7877 }
@@ -85,6 +84,8 @@ func NewSnapshot(name string, path string, parentDataset *Dataset, date *time.Ti
8584 snapshot .rawGozfsData = rawGoufsData [0 ]
8685 }
8786
87+ snapshot .FetchDetails ()
88+
8889 return snapshot
8990}
9091
@@ -321,37 +322,38 @@ func (s *Snapshot) DestroyRecursive() error {
321322 return ds .DestroySnapshot (s .Name , true )
322323}
323324
324- func (s * Snapshot ) GetCreationData () * time.Time {
325- //propValue, err := s.rawGozfsData.GetProperty("creation")
326- //if err != nil {
327- // logging.Error("Could not get creation property: %s", err.Error())
328- // return nil
329- //}
330- //
331- //timestamp, err := strconv.ParseInt(propValue, 10, 64)
332- //if err != nil {
333- // logging.Error("Could not parse creation property: %s", err.Error())
334- // return nil
335- //}
336- //t := time.Unix(timestamp, 0)
337- //return &t
338-
339- if s .rawGolibzfsData == nil {
340- logging .Error ("No rawGolibzfsData available" )
341- return nil
342- }
343- prop , err := s .rawGolibzfsData .GetProperty (golibzfs .DatasetPropCreation )
325+ func (s * Snapshot ) GetCreationDate () * time.Time {
326+ propValue , err := s .rawGozfsData .GetProperty ("creation" )
344327 if err != nil {
345328 logging .Error ("Could not get creation property: %s" , err .Error ())
346329 return nil
347330 }
348- timestamp , err := strconv .ParseInt (prop .Value , 10 , 64 )
331+
332+ timestamp , err := strconv .ParseInt (propValue , 10 , 64 )
349333 if err != nil {
350334 logging .Error ("Could not parse creation property: %s" , err .Error ())
351335 return nil
352336 }
337+
353338 t := time .Unix (timestamp , 0 )
354339 return & t
340+
341+ //if s.rawGolibzfsData == nil {
342+ // logging.Error("No rawGolibzfsData available")
343+ // return nil
344+ //}
345+ //prop, err := s.rawGolibzfsData.GetProperty(golibzfs.DatasetPropCreation)
346+ //if err != nil {
347+ // logging.Error("Could not get creation property: %s", err.Error())
348+ // return nil
349+ //}
350+ //timestamp, err := strconv.ParseInt(prop.Value, 10, 64)
351+ //if err != nil {
352+ // logging.Error("Could not parse creation property: %s", err.Error())
353+ // return nil
354+ //}
355+ //t := time.Unix(timestamp, 0)
356+ //return &t
355357}
356358
357359func (s * Snapshot ) GetUsed () uint64 {
@@ -408,6 +410,22 @@ func (s *Snapshot) GetRatio() float64 {
408410 return val
409411}
410412
413+ type SnapshotProperties struct {
414+ CreationDate * time.Time
415+ Used uint64
416+ Referenced uint64
417+ CompressionRatio float64
418+ }
419+
420+ func (s * Snapshot ) FetchDetails () {
421+ s .Properties = SnapshotProperties {
422+ CreationDate : s .GetCreationDate (),
423+ Used : s .GetUsed (),
424+ Referenced : s .GetReferenced (),
425+ CompressionRatio : s .GetRatio (),
426+ }
427+ }
428+
411429func syncFileProperties (dstPath string , stat os.FileInfo ) error {
412430 err := os .Chmod (dstPath , stat .Mode ())
413431 if err != nil {
0 commit comments