package main import ( "fmt" "log" "code.cloudfoundry.org/garden" "code.cloudfoundry.org/garden/client" "code.cloudfoundry.org/garden/client/connection" ) func main() { var diskLimit uint64 gardenClient := client.New(connection.New("tcp", "10.244.0.2:7777")) diskLimit = 200000000 containerSpec := garden.ContainerSpec{ Image: garden.ImageRef{ URI: "docker:///ubuntu#16.04", }, Limits: garden.Limits{ Disk: garden.DiskLimits{ ByteSoft: diskLimit, ByteHard: diskLimit, Scope: garden.DiskLimitScopeTotal, }, }, } container, err := gardenClient.Create(containerSpec) if err != nil { log.Fatal(err) } bulkMetricsBefore, err := gardenClient.BulkMetrics([]string{container.Handle()}) if err != nil { log.Fatal(err) } fmt.Printf("Total bytes limit : %d (hard) %d (soft)\n", diskLimit, diskLimit) fmt.Printf("Total bytes used : %d\n", bulkMetricsBefore[container.Handle()].Metrics.DiskStat.TotalBytesUsed) fmt.Printf("Total bytes remaining : %d\n", diskLimit-bulkMetricsBefore[container.Handle()].Metrics.DiskStat.TotalBytesUsed) fmt.Printf("Exclusive bytes used : %d\n", bulkMetricsBefore[container.Handle()].Metrics.DiskStat.ExclusiveBytesUsed) fmt.Printf("Exclusive bytes remaining : %d\n", diskLimit-bulkMetricsBefore[container.Handle()].Metrics.DiskStat.ExclusiveBytesUsed) fmt.Printf("\n\n=== dd ing a 5mb file in the container ===\n") process, err := container.Run(garden.ProcessSpec{ Path: "/bin/sh", Args: []string{"-c", "dd if=/dev/zero of=file.txt count=1 bs=5000000"}, }, garden.ProcessIO{}) if err != nil { log.Fatal(err) } exitCode, err := process.Wait() if err != nil { log.Fatal(err) } fmt.Printf("=== Process exited with code: %d ===\n\n", exitCode) bulkMetricsAfter, err := gardenClient.BulkMetrics([]string{container.Handle()}) if err != nil { log.Fatal(err) } fmt.Printf("Total bytes limit : %d (hard) %d (soft)\n", diskLimit, diskLimit) fmt.Printf("Total bytes used : %d\n", bulkMetricsAfter[container.Handle()].Metrics.DiskStat.TotalBytesUsed) fmt.Printf("Total bytes remaining : %d\n", diskLimit-bulkMetricsAfter[container.Handle()].Metrics.DiskStat.TotalBytesUsed) fmt.Printf("Exclusive bytes used : %d\n", bulkMetricsAfter[container.Handle()].Metrics.DiskStat.ExclusiveBytesUsed) fmt.Printf("Exclusive bytes remaining : %d\n", diskLimit-bulkMetricsAfter[container.Handle()].Metrics.DiskStat.ExclusiveBytesUsed) fmt.Printf("\nTotal bytes used incremented by : %d\n", bulkMetricsAfter[container.Handle()].Metrics.DiskStat.TotalBytesUsed-bulkMetricsBefore[container.Handle()].Metrics.DiskStat.TotalBytesUsed) fmt.Printf("Exclusive bytes used incremented by : %d\n", bulkMetricsAfter[container.Handle()].Metrics.DiskStat.ExclusiveBytesUsed-bulkMetricsBefore[container.Handle()].Metrics.DiskStat.ExclusiveBytesUsed) }