package main import ( "fmt" "git.gammaspectra.live/P2Pool/consensus/v3/p2pool/sidechain" "git.gammaspectra.live/P2Pool/consensus/v3/types" cmdutils "git.gammaspectra.live/P2Pool/observer-cmd-utils/utils" "math" "strconv" "strings" "time" ) func EffortColor(effort float64) string { effortColor := FormatColorRed if effort < 200 { effortColor = FormatColorYellow } if effort < 100 { effortColor = FormatColorGreen } return effortColor } func TimeElapsed(timestamp uint64) string { diff := time.Since(time.Unix(int64(timestamp), 0).UTC()) days := int64(diff.Hours() / 24) hours := int64(diff.Hours()) % 24 minutes := int64(diff.Minutes()) % 60 seconds := int64(diff.Seconds()) % 60 var result []string if days > 0 { result = append(result, strconv.FormatInt(days, 10)+"d") } if hours > 0 { result = append(result, strconv.FormatInt(hours, 10)+"h") } if minutes > 0 { result = append(result, strconv.FormatInt(minutes, 10)+"m") } if seconds > 0 { result = append(result, strconv.FormatInt(seconds, 10)+"s") } if timestamp == 0 { return "never" } else if len(result) == 0 { return "just now" } else { return strings.Join(result, " ") + " ago" } } func GetShareLink(host string, sideHeight uint64, mainId types.Hash) string { uHeight := (sideHeight << 16) | (uint64(mainId[0]) << 8) | uint64(mainId[1]) return fmt.Sprintf("%s/s/%s", host, cmdutils.EncodeBinaryNumber(uHeight)) } func GetPayoutLink[T uint64 | uint32 | int](host string, sideHeight uint64, index T, consensus *sidechain.Consensus) string { payoutIndex := (sideHeight << uint64(math.Ceil(math.Log2(float64(consensus.ChainWindowSize*4))))) | uint64(index) return fmt.Sprintf("%s/p/%s", host, cmdutils.EncodeBinaryNumber(payoutIndex)) }