github.com/Cloud-Foundations/Dominator@v0.3.4/lib/objectserver/filesystem/html.go (about) 1 package filesystem 2 3 import ( 4 "fmt" 5 "io" 6 7 "github.com/Cloud-Foundations/Dominator/lib/format" 8 ) 9 10 func (objSrv *ObjectServer) writeHtml(writer io.Writer) { 11 objSrv.lockWatcher.WriteHtml(writer, "ObjectServer: ") 12 free, capacity, err := objSrv.getSpaceMetrics() 13 if err != nil { 14 fmt.Fprintln(writer, err) 15 return 16 } 17 utilisation := float64(capacity-free) * 100 / float64(capacity) 18 objSrv.rwLock.RLock() 19 duplicatedBytes := objSrv.duplicatedBytes 20 numObjects := uint64(len(objSrv.objects)) 21 numDuplicated := objSrv.numDuplicated 22 numReferenced := objSrv.numReferenced 23 numUnreferenced := objSrv.numUnreferenced 24 referencedBytes := objSrv.referencedBytes 25 totalBytes := objSrv.totalBytes 26 unreferencedBytes := objSrv.unreferencedBytes 27 objSrv.rwLock.RUnlock() 28 referencedUtilisation := float64(referencedBytes) * 100 / float64(capacity) 29 totalUtilisation := float64(totalBytes) * 100 / float64(capacity) 30 unreferencedObjectsPercent := 0.0 31 unreferencedUtilisation := float64(unreferencedBytes) * 100 / 32 float64(capacity) 33 if numObjects > 0 { 34 unreferencedObjectsPercent = 35 100.0 * float64(numUnreferenced) / float64(numObjects) 36 } 37 unreferencedBytesPercent := 0.0 38 if totalBytes > 0 { 39 unreferencedBytesPercent = 40 100.0 * float64(unreferencedBytes) / float64(totalBytes) 41 } 42 fmt.Fprintf(writer, 43 "Number of objects: %d, consuming %s (%.1f%% of FS which is %.1f%% full)<br>\n", 44 numObjects, format.FormatBytes(totalBytes), totalUtilisation, 45 utilisation) 46 if numDuplicated > 0 { 47 fmt.Fprintf(writer, 48 "Number of referenced objects: %d (%d duplicates, %.3g*), consuming %s (%.1f%% of FS, %s dups, %.3g*)<br>\n", 49 numReferenced, numDuplicated, 50 float64(numDuplicated)/float64(numReferenced), 51 format.FormatBytes(referencedBytes), 52 referencedUtilisation, 53 format.FormatBytes(duplicatedBytes), 54 float64(duplicatedBytes)/float64(referencedBytes)) 55 } 56 fmt.Fprintf(writer, 57 "Number of unreferenced objects: %d (%.1f%%), consuming %s (%.1f%%, %.1f%% of FS)<br>\n", 58 numUnreferenced, unreferencedObjectsPercent, 59 format.FormatBytes(unreferencedBytes), unreferencedBytesPercent, 60 unreferencedUtilisation) 61 if numReferenced+numUnreferenced != numObjects { 62 fmt.Fprintf(writer, 63 "<font color=\"red\">Object accounting error: ref+unref:%d != total: %d</font><br>\n", 64 numReferenced+numUnreferenced, numObjects) 65 } 66 if referencedBytes+unreferencedBytes != totalBytes { 67 fmt.Fprintf(writer, 68 "<font color=\"red\">Storage accounting error: ref+unref:%s != total: %s</font><br>\n", 69 format.FormatBytes(referencedBytes+unreferencedBytes), 70 format.FormatBytes(totalBytes)) 71 } 72 }