//  这里会生成一个可执行文件 run , 也是micadvistor 容器启动后运行的第一个可执行文件。
package main

import (
	"fmt"
	"os"
	"os/exec"
	"strconv"
	"time"
)

//Interval 检测时间间隔
var Interval time.Duration

func main() {
	tmp := os.Getenv("Interval")
	Interval = 60 * time.Second
	tmp1, err := strconv.ParseInt(tmp, 10, 64)
	//fmt.Println(tmp1)
	if err != nil {
		LogErr(err, "run.go:21  strconv.ParseInt error!")
		return
	}
	Interval = time.Duration(tmp1) * time.Second

	cmd := exec.Command("/home/work/uploadCadviosrData/cadvisor")
	if err = cmd.Start(); err != nil {
		fmt.Println(err)
		LogErr(err, "run.go:32  exec  cadvisor error!")
		return
	}

	LogRun("run.go  start cadvisor successful")

	go func() {
		t := time.NewTicker(Interval)
		for {
			<-t.C
			LogRun("run.go  start new goroutine  uploadCadvisorData")
			cmd = exec.Command("/home/work/uploadCadviosrData/uploadCadvisorData") //undefined: exec.CommandContext   这里需要使用context控制程序的结束时间
			if err := cmd.Start(); err != nil {
				fmt.Println(err)
				LogErr(err, "run.go  cmd.start  uploadCadvisorData error!")
				return
			}
			if err := cmd.Wait(); err != nil {
				LogErr(err, "run.go  cmd.wait   uploadCadvisorData error!")

			}

		}
	}()

	for {
		time.Sleep(time.Second * 240)
		if isAlive() {
			clean()
		} else {
			LogErr(nil, "run.go:57  check uploadCadvisroData fail")
			os.Exit(1)
		}
	}

}
func isAlive() bool {
	f, _ := os.OpenFile("test.txt", os.O_CREATE|os.O_APPEND|os.O_RDONLY, 0660)
	defer f.Close()
	readBuf := make([]byte, 32)
	var pos int64
	n, _ := f.ReadAt(readBuf, pos)
	if n == 0 {
		return false
	}
	return true
}

func clean() {
	f, _ := os.OpenFile("test.txt", os.O_TRUNC, 0660)
	defer f.Close()
}