| // SPDX-License-Identifier: BSD-3-Clause |
| package disk |
| |
| import ( |
| "context" |
| "encoding/json" |
| |
| "github.com/shirou/gopsutil/v4/internal/common" |
| ) |
| |
| var invoke common.Invoker = common.Invoke{} |
| |
| type Warnings = common.Warnings |
| |
| type UsageStat struct { |
| Path string `json:"path"` |
| Fstype string `json:"fstype"` |
| Total uint64 `json:"total"` |
| Free uint64 `json:"free"` |
| Used uint64 `json:"used"` |
| UsedPercent float64 `json:"usedPercent"` |
| InodesTotal uint64 `json:"inodesTotal"` |
| InodesUsed uint64 `json:"inodesUsed"` |
| InodesFree uint64 `json:"inodesFree"` |
| InodesUsedPercent float64 `json:"inodesUsedPercent"` |
| } |
| |
| type PartitionStat struct { |
| Device string `json:"device"` |
| Mountpoint string `json:"mountpoint"` |
| Fstype string `json:"fstype"` |
| Opts []string `json:"opts"` |
| } |
| |
| type IOCountersStat struct { |
| ReadCount uint64 `json:"readCount"` |
| MergedReadCount uint64 `json:"mergedReadCount"` |
| WriteCount uint64 `json:"writeCount"` |
| MergedWriteCount uint64 `json:"mergedWriteCount"` |
| ReadBytes uint64 `json:"readBytes"` |
| WriteBytes uint64 `json:"writeBytes"` |
| ReadTime uint64 `json:"readTime"` |
| WriteTime uint64 `json:"writeTime"` |
| IopsInProgress uint64 `json:"iopsInProgress"` |
| IoTime uint64 `json:"ioTime"` |
| WeightedIO uint64 `json:"weightedIO"` |
| Name string `json:"name"` |
| SerialNumber string `json:"serialNumber"` |
| Label string `json:"label"` |
| } |
| |
| func (d UsageStat) String() string { |
| s, _ := json.Marshal(d) |
| return string(s) |
| } |
| |
| func (d PartitionStat) String() string { |
| s, _ := json.Marshal(d) |
| return string(s) |
| } |
| |
| func (d IOCountersStat) String() string { |
| s, _ := json.Marshal(d) |
| return string(s) |
| } |
| |
| // Usage returns a file system usage. path is a filesystem path such |
| // as "/", not device file path like "/dev/vda1". If you want to use |
| // a return value of disk.Partitions, use "Mountpoint" not "Device". |
| func Usage(path string) (*UsageStat, error) { |
| return UsageWithContext(context.Background(), path) |
| } |
| |
| // Partitions returns disk partitions. If all is false, returns |
| // physical devices only (e.g. hard disks, cd-rom drives, USB keys) |
| // and ignore all others (e.g. memory partitions such as /dev/shm) |
| // |
| // 'all' argument is ignored for BSD, see: https://github.com/giampaolo/psutil/issues/906 |
| func Partitions(all bool) ([]PartitionStat, error) { |
| return PartitionsWithContext(context.Background(), all) |
| } |
| |
| func IOCounters(names ...string) (map[string]IOCountersStat, error) { |
| return IOCountersWithContext(context.Background(), names...) |
| } |
| |
| // SerialNumber returns Serial Number of given device or empty string |
| // on error. Name of device is expected, eg. /dev/sda |
| func SerialNumber(name string) (string, error) { |
| return SerialNumberWithContext(context.Background(), name) |
| } |
| |
| // Label returns label of given device or empty string on error. |
| // Name of device is expected, eg. /dev/sda |
| // Supports label based on devicemapper name |
| // See https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-block-dm |
| func Label(name string) (string, error) { |
| return LabelWithContext(context.Background(), name) |
| } |