M1的Mac有个让人比较关注的点,就是它的ssd硬盘的写入量相比于以前有个很大的提高。写入量的提高可能会导致磁盘提前报废,之前也在网络上引起了很大的讨论。
我这台Mac买来的时候,因为是官翻机的缘故。当时已经有3个T的写入量了。开始的时候我几乎天天观察,每天坚持写入量。但是一连十几天都没什么大的变化。后面也就没怎么看了。最近再看,发现写入量已经达到16.5T了,这个变化有个大,毕竟也就买回来不到4个月。
为了能够不再被蒙在鼓里,我决定写个脚本,每天上传SSD硬盘的信息到notion中,这样就不会稀里糊涂的看到硬盘写入量飙升,详细代码如下:
package main
import (
"bytes"
"fmt"
"io/ioutil"
"log"
"net/http"
"os/exec"
"strings"
"time"
)
func main() {
fmt.Println("Hello World")
out, err := RunCommand("/opt/homebrew/Cellar/smartmontools/7.2/bin/smartctl", "-a", "/dev/disk0")
if err != nil {
fmt.Println(err)
}
fmt.Println(out)
out = strings.ReplaceAll(out, "\x00", "")
outs := strings.Split(out, "\n")
var written string
var read string
for _, str := range outs {
if strings.HasPrefix(str, "Data Units Written") {
fmt.Println(str)
writtens := strings.Split(str, "[")
fmt.Println(writtens[1])
written = strings.Replace(writtens[1], "]", "", 1)
}
if strings.HasPrefix(str, "Data Units Read") {
fmt.Println(str)
reads := strings.Split(str, "[")
fmt.Println(reads[1])
read = strings.Replace(reads[1], "]", "", 1)
}
}
AddNotionTable(written, read)
}
func RunCommand(name string, arg ...string) (string, error) {
cmd := exec.Command(name, arg...)
log.Println(cmd.String())
// 命令的错误输出和标准输出都连接到同一个管道
stdout, err := cmd.StdoutPipe()
cmd.Stderr = cmd.Stdout
var out string = ""
if err != nil {
return out, err
}
if err = cmd.Start(); err != nil {
return out, err
}
// 从管道中实时获取输出并打印到终端
for {
tmp := make([]byte, 1024)
_, err := stdout.Read(tmp)
// fmt.Print(string(tmp))
out += string(tmp)
if err != nil {
break
}
}
if err = cmd.Wait(); err != nil {
return out, err
}
return out, nil
}
func AddNotionTable(written string, read string) {
url := "https://api.notion.com/v1/pages"
requestJson := `
{
"parent": {
"type": "database_id",
// 获取自己的database_id
"database_id": ""
},
"properties": {
"date": {
"type": "title",
"title": [
{
"type": "text",
"text": {
"content": "${date}"
}
}
]
},
"written": {
"type": "rich_text",
"rich_text": [{
"type": "text",
"text": {
"content": "${written}"
}
}]
},
"read": {
"type": "rich_text",
"rich_text": [{
"type": "text",
"text": {
"content": "${read}"
}
}]
}
}
}
`
requestJson = strings.Replace(requestJson, "${date}", time.Now().Format("2006-01-02"), 1)
requestJson = strings.Replace(requestJson, "${written}", written, 1)
requestJson = strings.Replace(requestJson, "${read}", read, 1)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer([]byte(requestJson)))
// 获取自己的notion密钥
req.Header.Set("Authorization", "Bearer ")
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Notion-Version", "2021-08-16")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println(err)
}
defer resp.Body.Close()
fmt.Println("status", resp.Status)
// fmt.Println("response:", resp.Header)
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println("response Body:", string(body))
}
最终的效果如下图