 9bdcbe0447
			
		
	
	9bdcbe0447
	
	
	
		
			
			Major integrations and fixes: - Added BACKBEAT SDK integration for P2P operation timing - Implemented beat-aware status tracking for distributed operations - Added Docker secrets support for secure license management - Resolved KACHING license validation via HTTPS/TLS - Updated docker-compose configuration for clean stack deployment - Disabled rollback policies to prevent deployment failures - Added license credential storage (CHORUS-DEV-MULTI-001) Technical improvements: - BACKBEAT P2P operation tracking with phase management - Enhanced configuration system with file-based secrets - Improved error handling for license validation - Clean separation of KACHING and CHORUS deployment stacks 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			127 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright (c) 2012 VMware, Inc.
 | |
| 
 | |
| package gosigar
 | |
| 
 | |
| import (
 | |
| 	"bufio"
 | |
| 	"bytes"
 | |
| 	"fmt"
 | |
| 	"strconv"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| // Go version of apr_strfsize
 | |
| func FormatSize(size uint64) string {
 | |
| 	ord := []string{"K", "M", "G", "T", "P", "E"}
 | |
| 	o := 0
 | |
| 	buf := new(bytes.Buffer)
 | |
| 	w := bufio.NewWriter(buf)
 | |
| 
 | |
| 	if size < 973 {
 | |
| 		fmt.Fprintf(w, "%3d ", size)
 | |
| 		w.Flush()
 | |
| 		return buf.String()
 | |
| 	}
 | |
| 
 | |
| 	for {
 | |
| 		remain := size & 1023
 | |
| 		size >>= 10
 | |
| 
 | |
| 		if size >= 973 {
 | |
| 			o++
 | |
| 			continue
 | |
| 		}
 | |
| 
 | |
| 		if size < 9 || (size == 9 && remain < 973) {
 | |
| 			remain = ((remain * 5) + 256) / 512
 | |
| 			if remain >= 10 {
 | |
| 				size++
 | |
| 				remain = 0
 | |
| 			}
 | |
| 
 | |
| 			fmt.Fprintf(w, "%d.%d%s", size, remain, ord[o])
 | |
| 			break
 | |
| 		}
 | |
| 
 | |
| 		if remain >= 512 {
 | |
| 			size++
 | |
| 		}
 | |
| 
 | |
| 		fmt.Fprintf(w, "%3d%s", size, ord[o])
 | |
| 		break
 | |
| 	}
 | |
| 
 | |
| 	w.Flush()
 | |
| 	return buf.String()
 | |
| }
 | |
| 
 | |
| func FormatPercent(percent float64) string {
 | |
| 	return strconv.FormatFloat(percent, 'f', -1, 64) + "%"
 | |
| }
 | |
| 
 | |
| func (self *FileSystemUsage) UsePercent() float64 {
 | |
| 	b_used := (self.Total - self.Free) / 1024
 | |
| 	b_avail := self.Avail / 1024
 | |
| 	utotal := b_used + b_avail
 | |
| 	used := b_used
 | |
| 
 | |
| 	if utotal != 0 {
 | |
| 		u100 := used * 100
 | |
| 		pct := u100 / utotal
 | |
| 		if u100%utotal != 0 {
 | |
| 			pct += 1
 | |
| 		}
 | |
| 		return (float64(pct) / float64(100)) * 100.0
 | |
| 	}
 | |
| 
 | |
| 	return 0.0
 | |
| }
 | |
| 
 | |
| func (self *Uptime) Format() string {
 | |
| 	buf := new(bytes.Buffer)
 | |
| 	w := bufio.NewWriter(buf)
 | |
| 	uptime := uint64(self.Length)
 | |
| 
 | |
| 	days := uptime / (60 * 60 * 24)
 | |
| 
 | |
| 	if days != 0 {
 | |
| 		s := ""
 | |
| 		if days > 1 {
 | |
| 			s = "s"
 | |
| 		}
 | |
| 		fmt.Fprintf(w, "%d day%s, ", days, s)
 | |
| 	}
 | |
| 
 | |
| 	minutes := uptime / 60
 | |
| 	hours := minutes / 60
 | |
| 	hours %= 24
 | |
| 	minutes %= 60
 | |
| 
 | |
| 	fmt.Fprintf(w, "%2d:%02d", hours, minutes)
 | |
| 
 | |
| 	w.Flush()
 | |
| 	return buf.String()
 | |
| }
 | |
| 
 | |
| func (self *ProcTime) FormatStartTime() string {
 | |
| 	if self.StartTime == 0 {
 | |
| 		return "00:00"
 | |
| 	}
 | |
| 	start := time.Unix(int64(self.StartTime)/1000, 0)
 | |
| 	format := "Jan02"
 | |
| 	if time.Since(start).Seconds() < (60 * 60 * 24) {
 | |
| 		format = "15:04"
 | |
| 	}
 | |
| 	return start.Format(format)
 | |
| }
 | |
| 
 | |
| func (self *ProcTime) FormatTotal() string {
 | |
| 	t := self.Total / 1000
 | |
| 	ss := t % 60
 | |
| 	t /= 60
 | |
| 	mm := t % 60
 | |
| 	t /= 60
 | |
| 	hh := t % 24
 | |
| 	return fmt.Sprintf("%02d:%02d:%02d", hh, mm, ss)
 | |
| }
 |