From: Shengjing Zhu <zhsj@debian.org>
Date: Wed, 16 Sep 2020 15:15:44 +0800
Subject: disable windows support in ctr metric

Forwarded: not-needed
---
 cmd/ctr/commands/tasks/metrics.go        | 79 +-------------------------------
 pkg/cri/sbserver/container_stats_list.go | 62 +------------------------
 2 files changed, 2 insertions(+), 139 deletions(-)

diff --git a/cmd/ctr/commands/tasks/metrics.go b/cmd/ctr/commands/tasks/metrics.go
index 8004186..98ec2de 100644
--- a/cmd/ctr/commands/tasks/metrics.go
+++ b/cmd/ctr/commands/tasks/metrics.go
@@ -23,11 +23,9 @@ import (
 	"os"
 	"text/tabwriter"
 
-	wstats "github.com/Microsoft/hcsshim/cmd/containerd-shim-runhcs-v1/stats"
 	v1 "github.com/containerd/cgroups/v3/cgroup1/stats"
 	v2 "github.com/containerd/cgroups/v3/cgroup2/stats"
 	"github.com/containerd/containerd/cmd/ctr/commands"
-	"github.com/containerd/containerd/protobuf/proto"
 	"github.com/containerd/typeurl/v2"
 	"github.com/urfave/cli"
 )
@@ -75,10 +73,8 @@ var metricsCommand = cli.Command{
 			data = &v1.Metrics{}
 		case typeurl.Is(metric.Data, (*v2.Metrics)(nil)):
 			data = &v2.Metrics{}
-		case typeurl.Is(metric.Data, (*wstats.Statistics)(nil)):
-			data = &wstats.Statistics{}
 		default:
-			return errors.New("cannot convert metric data to cgroups.Metrics or windows.Statistics")
+			return errors.New("cannot convert metric data to cgroups.Metrics")
 		}
 		if err := typeurl.UnmarshalTo(metric.Data, data); err != nil {
 			return err
@@ -94,10 +90,6 @@ var metricsCommand = cli.Command{
 				printCgroupMetricsTable(w, v)
 			case *v2.Metrics:
 				printCgroup2MetricsTable(w, v)
-			case *wstats.Statistics:
-				if err := printWindowsStats(w, v); err != nil {
-					return fmt.Errorf("cannot convert metrics data from windows.Statistics: %w", err)
-				}
 			}
 			return w.Flush()
 		case formatJSON:
@@ -151,72 +143,3 @@ func printCgroup2MetricsTable(w *tabwriter.Writer, data *v2.Metrics) {
 		fmt.Fprintf(w, "memory.swap_limit\t%v\t\n", data.Memory.SwapLimit)
 	}
 }
-
-func printWindowsStats(w *tabwriter.Writer, windowsStats *wstats.Statistics) error {
-	if windowsStats.GetLinux() != nil {
-		var stats v1.Metrics
-
-		// It cannot be casted to v1.Metrics since windowsStats is still generated by gogo/protobuf.
-		linux := windowsStats.GetLinux()
-
-		// But Marshal/Unmarshal works because the underlying protobuf message is compatible.
-		data, err := linux.Marshal()
-		if err != nil {
-			return err
-		}
-		err = proto.Unmarshal(data, &stats)
-		if err != nil {
-			return err
-		}
-
-		printCgroupMetricsTable(w, &stats)
-	} else if windowsStats.GetWindows() != nil {
-		printWindowsContainerStatistics(w, windowsStats.GetWindows())
-	}
-	// Print VM stats if its isolated
-	if windowsStats.VM != nil {
-		printWindowsVMStatistics(w, windowsStats.VM)
-	}
-	return nil
-}
-
-func printWindowsContainerStatistics(w *tabwriter.Writer, stats *wstats.WindowsContainerStatistics) {
-	fmt.Fprintf(w, "METRIC\tVALUE\t\n")
-	fmt.Fprintf(w, "timestamp\t%s\t\n", stats.Timestamp)
-	fmt.Fprintf(w, "start_time\t%s\t\n", stats.ContainerStartTime)
-	fmt.Fprintf(w, "uptime_ns\t%d\t\n", stats.UptimeNS)
-	if stats.Processor != nil {
-		fmt.Fprintf(w, "cpu.total_runtime_ns\t%d\t\n", stats.Processor.TotalRuntimeNS)
-		fmt.Fprintf(w, "cpu.runtime_user_ns\t%d\t\n", stats.Processor.RuntimeUserNS)
-		fmt.Fprintf(w, "cpu.runtime_kernel_ns\t%d\t\n", stats.Processor.RuntimeKernelNS)
-	}
-	if stats.Memory != nil {
-		fmt.Fprintf(w, "memory.commit_bytes\t%d\t\n", stats.Memory.MemoryUsageCommitBytes)
-		fmt.Fprintf(w, "memory.commit_peak_bytes\t%d\t\n", stats.Memory.MemoryUsageCommitPeakBytes)
-		fmt.Fprintf(w, "memory.private_working_set_bytes\t%d\t\n", stats.Memory.MemoryUsagePrivateWorkingSetBytes)
-	}
-	if stats.Storage != nil {
-		fmt.Fprintf(w, "storage.read_count_normalized\t%d\t\n", stats.Storage.ReadCountNormalized)
-		fmt.Fprintf(w, "storage.read_size_bytes\t%d\t\n", stats.Storage.ReadSizeBytes)
-		fmt.Fprintf(w, "storage.write_count_normalized\t%d\t\n", stats.Storage.WriteCountNormalized)
-		fmt.Fprintf(w, "storage.write_size_bytes\t%d\t\n", stats.Storage.WriteSizeBytes)
-	}
-}
-
-func printWindowsVMStatistics(w *tabwriter.Writer, stats *wstats.VirtualMachineStatistics) {
-	fmt.Fprintf(w, "METRIC\tVALUE\t\n")
-	if stats.Processor != nil {
-		fmt.Fprintf(w, "vm.cpu.total_runtime_ns\t%d\t\n", stats.Processor.TotalRuntimeNS)
-	}
-	if stats.Memory != nil {
-		fmt.Fprintf(w, "vm.memory.working_set_bytes\t%d\t\n", stats.Memory.WorkingSetBytes)
-		fmt.Fprintf(w, "vm.memory.virtual_node_count\t%d\t\n", stats.Memory.VirtualNodeCount)
-		fmt.Fprintf(w, "vm.memory.available\t%d\t\n", stats.Memory.VmMemory.AvailableMemory)
-		fmt.Fprintf(w, "vm.memory.available_buffer\t%d\t\n", stats.Memory.VmMemory.AvailableMemoryBuffer)
-		fmt.Fprintf(w, "vm.memory.reserved\t%d\t\n", stats.Memory.VmMemory.ReservedMemory)
-		fmt.Fprintf(w, "vm.memory.assigned\t%d\t\n", stats.Memory.VmMemory.AssignedMemory)
-		fmt.Fprintf(w, "vm.memory.slp_active\t%t\t\n", stats.Memory.VmMemory.SlpActive)
-		fmt.Fprintf(w, "vm.memory.balancing_enabled\t%t\t\n", stats.Memory.VmMemory.BalancingEnabled)
-		fmt.Fprintf(w, "vm.memory.dm_operation_in_progress\t%t\t\n", stats.Memory.VmMemory.DmOperationInProgress)
-	}
-}
diff --git a/pkg/cri/sbserver/container_stats_list.go b/pkg/cri/sbserver/container_stats_list.go
index b9342f6..328752e 100644
--- a/pkg/cri/sbserver/container_stats_list.go
+++ b/pkg/cri/sbserver/container_stats_list.go
@@ -23,7 +23,6 @@ import (
 	"reflect"
 	"time"
 
-	wstats "github.com/Microsoft/hcsshim/cmd/containerd-shim-runhcs-v1/stats"
 	cg1 "github.com/containerd/cgroups/v3/cgroup1/stats"
 	cg2 "github.com/containerd/cgroups/v3/cgroup2/stats"
 	"github.com/containerd/log"
@@ -83,8 +82,6 @@ func (c *criService) getMetricsHandler(ctx context.Context, sandboxID string) (m
 	}
 
 	switch p.OS {
-	case "windows":
-		return c.windowsContainerMetrics, nil
 	case "linux":
 		return c.linuxContainerMetrics, nil
 	default:
@@ -270,61 +267,6 @@ func matchLabelSelector(selector, labels map[string]string) bool {
 	return true
 }
 
-func (c *criService) windowsContainerMetrics(
-	meta containerstore.Metadata,
-	stats *types.Metric,
-) (*runtime.ContainerStats, error) {
-	var cs runtime.ContainerStats
-	var usedBytes, inodesUsed uint64
-	sn, err := c.snapshotStore.Get(meta.ID)
-	// If snapshotstore doesn't have cached snapshot information
-	// set WritableLayer usage to zero
-	if err == nil {
-		usedBytes = sn.Size
-		inodesUsed = sn.Inodes
-	}
-	cs.WritableLayer = &runtime.FilesystemUsage{
-		Timestamp: sn.Timestamp,
-		FsId: &runtime.FilesystemIdentifier{
-			Mountpoint: c.imageFSPath,
-		},
-		UsedBytes:  &runtime.UInt64Value{Value: usedBytes},
-		InodesUsed: &runtime.UInt64Value{Value: inodesUsed},
-	}
-	cs.Attributes = &runtime.ContainerAttributes{
-		Id:          meta.ID,
-		Metadata:    meta.Config.GetMetadata(),
-		Labels:      meta.Config.GetLabels(),
-		Annotations: meta.Config.GetAnnotations(),
-	}
-
-	if stats != nil {
-		s, err := typeurl.UnmarshalAny(stats.Data)
-		if err != nil {
-			return nil, fmt.Errorf("failed to extract container metrics: %w", err)
-		}
-		wstats := s.(*wstats.Statistics).GetWindows()
-		if wstats == nil {
-			return nil, errors.New("windows stats is empty")
-		}
-		if wstats.Processor != nil {
-			cs.Cpu = &runtime.CpuUsage{
-				Timestamp:            wstats.Timestamp.UnixNano(),
-				UsageCoreNanoSeconds: &runtime.UInt64Value{Value: wstats.Processor.TotalRuntimeNS},
-			}
-		}
-		if wstats.Memory != nil {
-			cs.Memory = &runtime.MemoryUsage{
-				Timestamp: wstats.Timestamp.UnixNano(),
-				WorkingSetBytes: &runtime.UInt64Value{
-					Value: wstats.Memory.MemoryUsagePrivateWorkingSetBytes,
-				},
-			}
-		}
-	}
-	return &cs, nil
-}
-
 func (c *criService) linuxContainerMetrics(
 	meta containerstore.Metadata,
 	stats *types.Metric,
@@ -360,10 +302,8 @@ func (c *criService) linuxContainerMetrics(
 			data = &cg1.Metrics{}
 		case typeurl.Is(stats.Data, (*cg2.Metrics)(nil)):
 			data = &cg2.Metrics{}
-		case typeurl.Is(stats.Data, (*wstats.Statistics)(nil)):
-			data = &wstats.Statistics{}
 		default:
-			return nil, errors.New("cannot convert metric data to cgroups.Metrics or windows.Statistics")
+			return nil, errors.New("cannot convert metric data to cgroups.Metrics")
 		}
 
 		if err := typeurl.UnmarshalTo(stats.Data, data); err != nil {
