package pages import ( "bytes" "path" "fmt" "html/template" "math" "time" ) var loadingPage = ` Ondemand - Loading

{{ .Name }} is loading...

Your instance is loading, and will be ready shortly.

Your instance will shutdown automatically after {{ .Timeout }} of inactivity.
` type LoadingData struct { Name string Timeout string } func GetLoadingPage(template_path string, name string, timeout time.Duration) string { var tpl *template.Template var err error if template_path != "" { tpl, err = template.New(path.Base(template_path)).ParseFiles(template_path) } else { tpl, err = template.New("loading").Parse(loadingPage) } if err != nil { return err.Error() } b := bytes.Buffer{} err = tpl.Execute(&b, LoadingData{ Name: name, Timeout: humanizeDuration(timeout), }) if err != nil { return err.Error() } return b.String() } // humanizeDuration humanizes time.Duration output to a meaningful value, // golang's default ``time.Duration`` output is badly formatted and unreadable. func humanizeDuration(duration time.Duration) string { if duration.Seconds() < 60.0 { return fmt.Sprintf("%d seconds", int64(duration.Seconds())) } if duration.Minutes() < 60.0 { remainingSeconds := math.Mod(duration.Seconds(), 60) if remainingSeconds > 0 { return fmt.Sprintf("%d minutes %d seconds", int64(duration.Minutes()), int64(remainingSeconds)) } return fmt.Sprintf("%d minutes", int64(duration.Minutes())) } if duration.Hours() < 24.0 { remainingMinutes := math.Mod(duration.Minutes(), 60) remainingSeconds := math.Mod(duration.Seconds(), 60) if remainingMinutes > 0 { if remainingSeconds > 0 { return fmt.Sprintf("%d hours %d minutes %d seconds", int64(duration.Hours()), int64(remainingMinutes), int64(remainingSeconds)) } return fmt.Sprintf("%d hours %d minutes", int64(duration.Hours()), int64(remainingMinutes)) } return fmt.Sprintf("%d hours", int64(duration.Hours())) } remainingHours := math.Mod(duration.Hours(), 24) remainingMinutes := math.Mod(duration.Minutes(), 60) remainingSeconds := math.Mod(duration.Seconds(), 60) return fmt.Sprintf("%d days %d hours %d minutes %d seconds", int64(duration.Hours()/24), int64(remainingHours), int64(remainingMinutes), int64(remainingSeconds)) }