// Copyright 2022 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 procfsimport ()// Interrupt represents a single interrupt line.typeInterruptstruct {// Info is the type of interrupt. Info string// Devices is the name of the device that is located at that IRQ Devices string// Values is the number of interrupts per CPU. Values []string}// Interrupts models the content of /proc/interrupts. Key is the IRQ number.// - https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/s2-proc-interrupts// - https://raspberrypi.stackexchange.com/questions/105802/explanation-of-proc-interrupts-outputtypeInterruptsmap[string]Interrupt// Interrupts creates a new instance from a given Proc instance.func ( Proc) () (Interrupts, error) { , := util.ReadFileNoStat(.path("interrupts"))if != nil {returnnil, }returnparseInterrupts(bytes.NewReader())}func parseInterrupts( io.Reader) (Interrupts, error) {var ( = Interrupts{} = bufio.NewScanner() )if !.Scan() {returnnil, errors.New("interrupts empty") } := len(strings.Fields(.Text())) // one header per cpufor .Scan() { := strings.Fields(.Text())iflen() == 0 { // skip empty linescontinue }iflen() < 2 {returnnil, fmt.Errorf("%w: Not enough fields in interrupts (expected 2+ fields but got %d): %s", ErrFileParse, len(), ) } := [0][:len([0])-1] // remove trailing :iflen() == 2 { [] = Interrupt{Info: "",Devices: "",Values: []string{ [1], }, }continue } := Interrupt{Values: [1 : +1], }if , := strconv.Atoi(); == nil { // numeral interrupt .Info = [+1] .Devices = strings.Join([+2:], " ") } else { .Info = strings.Join([+1:], " ") } [] = }return , .Err()}
The pages are generated with Goldsv0.8.2. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.