package containers

import (
	log "github.com/sirupsen/logrus"
	"os"
	"strconv"
	"time"
)

var hbStopChan = make(chan struct{})

func DoHeartbeat(hbFilePath string) {
	defer func() {
		if err := recover(); err != nil {
			log.Errorf("DoHeartbeat panic: %v", err)
		}
	}()

	doHeartbeat(hbFilePath)
	ticker := time.NewTicker(time.Second * 30)
	for {
		select {
		case <-ticker.C:
			doHeartbeat(hbFilePath)
		case <-hbStopChan:
			return
		}
	}
}

func doHeartbeat(hbFilePath string) {
	timeUnix := time.Now().Unix()
	timeStr := strconv.FormatInt(timeUnix, 10)
	if err := os.WriteFile(hbFilePath, []byte(timeStr), 0644); err != nil {
		log.Errorf("write heartbeat to file [%s] occurs error: %v", hbFilePath, err.Error())
	}
}

func StopHeartbeat() {
	close(hbStopChan)
}
