// Copyright 2020 The Prometheus Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package procfs

import (
	
	
	
	
	
)

// NetStat contains statistics for all the counters from one file.
type NetStat struct {
	Stats    map[string][]uint64
	Filename string
}

// NetStat retrieves stats from `/proc/net/stat/`.
func ( FS) () ([]NetStat, error) {
	,  := filepath.Glob(.proc.Path("net/stat/*"))
	if  != nil {
		return nil, 
	}

	var  []NetStat

	for ,  := range  {
		,  := parseNetstat()
		if  != nil {
			return nil, 
		}
		.Filename = filepath.Base()

		 = append(, )
	}
	return , nil
}

// parseNetstat parses the metrics from `/proc/net/stat/` file
// and returns a NetStat structure.
func parseNetstat( string) (NetStat, error) {
	 := NetStat{
		Stats: make(map[string][]uint64),
	}
	,  := os.Open()
	if  != nil {
		return , 
	}
	defer .Close()

	 := bufio.NewScanner()
	.Scan()

	// First string is always a header for stats
	var  []string
	 = append(, strings.Fields(.Text())...)

	// Other strings represent per-CPU counters
	for .Scan() {
		for ,  := range strings.Fields(.Text()) {
			,  := strconv.ParseUint(, 16, 64)
			if  != nil {
				return NetStat{}, 
			}
			.Stats[[]] = append(.Stats[[]], )
		}
	}

	return , nil
}