github.com/jvandenbroek/directory_stat_exporter@v0.2.0/dirstatFileAge.go (about)

     1  package main
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"path/filepath"
     7  	"time"
     8  )
     9  
    10  func getModTime(file string) int64 {
    11  	info, err := os.Stat(file)
    12  	if err != nil {
    13  		return time.Now().Unix()
    14  	}
    15  	return info.ModTime().Unix()
    16  }
    17  
    18  func getOldestFileModTimestamp(dir string, recursive bool) int64 {
    19  	if recursive {
    20  		return getOldestAgeInDirRecursively(dir)
    21  	} else {
    22  		return getOldestAgeInDir(dir)
    23  	}
    24  }
    25  
    26  func getOldestAgeInDirRecursively(dir string) int64 {
    27  	var oldestTs int64 = time.Now().Unix()
    28  	_ = filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
    29  		if info != nil && !info.IsDir() {
    30  			ts := getModTime(path)
    31  			if ts < oldestTs {
    32  				oldestTs = ts
    33  			}
    34  		}
    35  		return nil
    36  	})
    37  	return oldestTs
    38  }
    39  
    40  func getOldestAgeInDir(dir string) int64 {
    41  	var files, _ = ioutil.ReadDir(dir)
    42  	var oldestTs int64 = time.Now().Unix()
    43  	for _, file := range files {
    44  		if !file.IsDir() {
    45  			ts := getModTime(dir + string(os.PathSeparator) + file.Name())
    46  			if ts < oldestTs {
    47  				oldestTs = ts
    48  			}
    49  		}
    50  	}
    51  	return oldestTs
    52  }