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  }