/
pyo
/
updater
Обзор
Документация
Войти
/
pyo
/
updater
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
develop
pkg/util/fs.go
132 строки
4 KB
nschugorev
remove flock
25 июн 2025, 18:27
25 июн 2025, 18:27
97bb563
Код
Авторство
О чём код?
package util import ( "os" "path/filepath" "strconv" "time" "github.com/prometheus/client_golang/prometheus" "github.com/spf13/afero" "gitverse.ru/pyo/updater/pkg/metrics" ) var ( MetricLabelOperationFSCreate = "create" MetricLabelOperationFSMkdir = "mkdir" MetricLabelOperationFSMkdirAll = "mkdir_all" MetricLabelOperationFSOpen = "open" MetricLabelOperationFSOpenFile = "open_file" MetricLabelOperationFSRemove = "remove" MetricLabelOperationFSRemoveAll = "remove_all" MetricLabelOperationFSRename = "rename" MetricLabelOperationFSState = "state" MetricLabelOperationFSName = "name" MetricLabelOperationFSChmod = "chmod" MetricLabelOperationFSChown = "chown" MetricLabelOperationFSChtimes = "chtimes" ) type FileSystemWithMetrics struct { Next afero.Fs FSName string } func (fs FileSystemWithMetrics) stop(start time.Time, operation string, err *error) { end := time.Now() metrics.MetricProcessDuration.With(prometheus.Labels{ metrics.MetricLabelTrigger: fs.FSName, metrics.MetricLabelOperation: operation, metrics.MetricLabelIsErrorResult: strconv.FormatBool(err != nil), }).Observe(float64(end.Sub(start).Nanoseconds())) metrics.MetricFileOperation.With(prometheus.Labels{ metrics.MetricLabelTrigger: fs.FSName, metrics.MetricLabelOperation: operation, metrics.MetricLabelIsErrorResult: strconv.FormatBool(err != nil), }).Inc() } func (fs FileSystemWithMetrics) Create(name string) (file afero.File, err error) { defer fs.stop(time.Now(), MetricLabelOperationFSCreate, &err) file, err = fs.Next.Create(name) return } func (fs FileSystemWithMetrics) Mkdir(name string, perm os.FileMode) (err error) { defer fs.stop(time.Now(), MetricLabelOperationFSMkdir, &err) err = fs.Next.Mkdir(name, perm) return } func (fs FileSystemWithMetrics) MkdirAll(path string, perm os.FileMode) (err error) { defer fs.stop(time.Now(), MetricLabelOperationFSMkdirAll, &err) err = fs.Next.MkdirAll(path, perm) return } func (fs FileSystemWithMetrics) Open(name string) (f afero.File, err error) { defer fs.stop(time.Now(), MetricLabelOperationFSOpen, &err) f, err = fs.Next.Open(name) return } func (fs FileSystemWithMetrics) OpenFile(name string, flag int, perm os.FileMode) (f afero.File, err error) { defer fs.stop(time.Now(), MetricLabelOperationFSOpenFile, &err) f, err = fs.Next.OpenFile(name, flag, perm) return } func (fs FileSystemWithMetrics) Remove(name string) (err error) { defer fs.stop(time.Now(), MetricLabelOperationFSRemove, &err) err = fs.Next.Remove(name) return } func (fs FileSystemWithMetrics) RemoveAll(path string) (err error) { defer fs.stop(time.Now(), MetricLabelOperationFSRemoveAll, &err) err = fs.Next.RemoveAll(path) return } func (fs FileSystemWithMetrics) Rename(oldname, newname string) (err error) { defer fs.stop(time.Now(), MetricLabelOperationFSRename, &err) err = fs.Next.Rename(oldname, newname) return } func (fs FileSystemWithMetrics) Stat(name string) (fInfo os.FileInfo, err error) { defer fs.stop(time.Now(), MetricLabelOperationFSState, &err) fInfo, err = fs.Next.Stat(name) return } func (fs FileSystemWithMetrics) Name() (name string) { defer fs.stop(time.Now(), MetricLabelOperationFSName, nil) return fs.Next.Name() } func (fs FileSystemWithMetrics) Chmod(name string, mode os.FileMode) (err error) { defer fs.stop(time.Now(), MetricLabelOperationFSChmod, &err) err = fs.Next.Chmod(name, mode) return } func (fs FileSystemWithMetrics) Chown(name string, uid, gid int) (err error) { defer fs.stop(time.Now(), MetricLabelOperationFSChown, &err) err = fs.Next.Chown(name, uid, gid) return } func (fs FileSystemWithMetrics) Chtimes(name string, atime time.Time, mtime time.Time) (err error) { defer fs.stop(time.Now(), MetricLabelOperationFSChtimes, &err) err = fs.Next.Chtimes(name, atime, mtime) return } func CreateComponentPath(dir, name string) string { return filepath.Join(dir, name+strconv.FormatInt(time.Now().UnixNano(), 10)+".zip") }