diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index c7ca570..5db3e12 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -89,6 +89,8 @@ jobs: LICENSE build/bin/linux_amd64/coretemp-exporter build/bin/windows_amd64/coretemp-exporter.exe + build/bin/linux_amd64/converter + build/bin/windows_amd64/converter.exe - name: Publish Application uses: actions/upload-artifact@v3 @@ -99,3 +101,5 @@ jobs: LICENSE build/bin/linux_amd64/coretemp-exporter build/bin/windows_amd64/coretemp-exporter.exe + build/bin/linux_amd64/converter + build/bin/windows_amd64/converter.exe diff --git a/.gitignore b/.gitignore index e10949b..28a0615 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,7 @@ /coretemp-exporter build/ *.ndjson +*.csv + +!internal/testdata/cputemps.csv +!internal/testdata/cputemps.ndjson diff --git a/Makefile b/Makefile index 53c9fd1..a790254 100644 --- a/Makefile +++ b/Makefile @@ -39,7 +39,7 @@ LINUX_NICHE_PLATFORMS = WINDOWS_PLATFORMS = windows_386 windows_amd64 MAIN_PLATFORMS = windows_amd64 linux_amd64 linux_arm64 ALL_PLATFORMS = $(LINUX_PLATFORMS) $(LINUX_NICHE_PLATFORMS) $(WINDOWS_PLATFORMS) $(foreach niche,$(NICHE_PLATFORMS),$(niche)_amd64 $(niche)_arm64) -ALL_APPS = coretemp-exporter +ALL_APPS = coretemp-exporter converter MAIN_BINARIES = $(foreach app,$(ALL_APPS),$(foreach platform,$(MAIN_PLATFORMS),build/bin/$(platform)/$(app)$(if $(findstring windows_,$(platform)),.exe,))) ALL_BINARIES = $(foreach app,$(ALL_APPS),$(foreach platform,$(ALL_PLATFORMS),build/bin/$(platform)/$(app)$(if $(findstring windows_,$(platform)),.exe,))) @@ -126,6 +126,6 @@ clean: rm -rf build/ convert: - $(GO) run cmd/converter/converter.go + $(GO) run cmd/converter/converter.go -input=cputemps.ndjson -output=cputemps.csv -mode=csv .PHONY: all run lint test clean diff --git a/cmd/converter/converter.go b/cmd/converter/converter.go index 574d348..b2817f3 100644 --- a/cmd/converter/converter.go +++ b/cmd/converter/converter.go @@ -16,6 +16,7 @@ package main import ( "flag" + "fmt" "log" "strings" @@ -23,15 +24,29 @@ import ( ) var ( - oldFilesFlag = flag.String("old", "cputemps.log,cputemps.ndjson", "Comma separated list of old files.") - newFileFlag = flag.String("new", "new.ndjson", "The new ndjson file") + inputFilesFlag = flag.String("input", "cputemps.log,cputemps.ndjson", "Comma separated list of old files.") + outputFileFlag = flag.String("output", "new.ndjson", "The new ndjson file") + modeFlag = flag.String("mode", "csv", "Conversion mode (update, csv)") ) func main() { - if err := internal.ConvertV1ToV2(&internal.ConvertArgs{ - OldFiles: strings.Split(*oldFilesFlag, ","), - NewFile: *newFileFlag, - }); err != nil { + flag.Parse() + var err error + switch *modeFlag { + case "csv": + err = internal.ConvertCSV(&internal.ConvertCSVArgs{ + InputFile: strings.Split(*inputFilesFlag, ","), + OutputFile: *outputFileFlag, + }) + case "update": + err = internal.ConvertV1ToV2(&internal.ConvertArgs{ + InputFiles: strings.Split(*inputFilesFlag, ","), + OutputFile: *outputFileFlag, + }) + default: + err = fmt.Errorf("mode '%s' is not supported", *modeFlag) + } + if err != nil { log.Fatal(err) } } diff --git a/install/compose/prometheus/prometheus.yaml b/install/compose/prometheus/prometheus.yaml index 5be2e4e..5820aee 100644 --- a/install/compose/prometheus/prometheus.yaml +++ b/install/compose/prometheus/prometheus.yaml @@ -64,3 +64,5 @@ scrape_configs: - targets: - host.docker.internal:8181 - coretemp-exporter:8181 + # List any machines you'd like to monitor here. + - quartz:8181 diff --git a/internal/convert_csv.go b/internal/convert_csv.go new file mode 100644 index 0000000..a3d2356 --- /dev/null +++ b/internal/convert_csv.go @@ -0,0 +1,103 @@ +// Copyright 2022 Jeremy Edwards +// +// 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 internal + +import ( + "bufio" + "encoding/csv" + "fmt" + "log" + "os" + "strconv" + + pb "github.com/jeremyje/coretemp-exporter/proto" + "google.golang.org/protobuf/encoding/protojson" +) + +type ConvertCSVArgs struct { + InputFile []string + OutputFile string +} + +func ConvertCSV(args *ConvertCSVArgs) error { + os.Remove(args.OutputFile) + fp, err := os.Create(args.OutputFile) + if err != nil { + return fmt.Errorf("cannot create output file '%s', %w", args.OutputFile, err) + } + + cw := csv.NewWriter(fp) + cw.Write([]string{ + "ts_year", "ts_month", "ts_day", "ts_hour", "ts_min", "ts_second", // Timestamp + "active_cores", "total_cores", "frequency", "avg_load", // Basic CPU metrics + "temperature"}) // CPU Temperature + defer cw.Flush() + return scanNdJson(args.InputFile, func(item *pb.MachineMetrics) error { + if len(item.GetDevice()) == 0 { + return nil + } + t := item.GetTimestamp().AsTime() + + cpuMetrics := item.GetDevice()[0] + activeCores := 0 + totalLoad := 0 + for _, coreLoad := range cpuMetrics.Cpu.GetLoad() { + if coreLoad > 0 { + activeCores++ + } + totalLoad += int(coreLoad) + } + numCores := len(cpuMetrics.Cpu.GetLoad()) + avgLoad := float64(totalLoad) / float64(numCores) + + return cw.Write([]string{ + strconv.Itoa(t.Year()), strconv.Itoa(int(t.Month())), strconv.Itoa(t.Day()), strconv.Itoa(t.Hour()), strconv.Itoa(t.Minute()), strconv.Itoa(t.Second()), + strconv.Itoa(activeCores), strconv.Itoa(numCores), fmt.Sprintf("%f", cpuMetrics.GetCpu().GetFrequencyMhz()), fmt.Sprintf("%f", avgLoad), + fmt.Sprintf("%f", cpuMetrics.GetTemperature()), + }) + }) +} + +func scanNdJson(inputFiles []string, consumerFunc func(line *pb.MachineMetrics) error) error { + for _, inputFile := range inputFiles { + fp, err := os.Open(inputFile) + if err != nil { + return fmt.Errorf("cannot open '%s', %w", inputFile, err) + } + defer fp.Close() + + ln := 0 + scanner := bufio.NewScanner(fp) + for scanner.Scan() { + ln++ + if ln%10000 == 0 { + log.Printf("Line: %s:%d", inputFile, ln) + } + line := scanner.Bytes() + if len(line) < 10 { + continue + } + mm := &pb.MachineMetrics{} + err := protojson.Unmarshal(line, mm) + if err != nil || mm == nil || len(mm.GetName()) == 0 { + return fmt.Errorf("cannot read line '%s:%d', %w", inputFile, ln, err) + } + if err := consumerFunc(mm); err != nil { + return err + } + } + } + return nil +} diff --git a/internal/convert_csv_test.go b/internal/convert_csv_test.go new file mode 100644 index 0000000..4e06e39 --- /dev/null +++ b/internal/convert_csv_test.go @@ -0,0 +1,55 @@ +// Copyright 2022 Jeremy Edwards +// +// 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 internal + +import ( + _ "embed" + "os" + "path/filepath" + "testing" + + "github.com/google/go-cmp/cmp" +) + +var ( + //go:embed testdata/cputemps.ndjson + cputempsNdjson []byte + //go:embed testdata/cputemps.csv + cputempsCsv []byte +) + +func TestConvertCSV(t *testing.T) { + dir := t.TempDir() + input := filepath.Join(dir, "input.ndjson") + output := filepath.Join(dir, "output.csv") + if err := os.WriteFile(input, cputempsNdjson, 0664); err != nil { + t.Fatalf("cannot write '%s', %s", input, err) + } + + if err := ConvertCSV(&ConvertCSVArgs{ + InputFile: []string{input}, + OutputFile: output, + }); err != nil { + t.Fatalf("cannot write csv '%s', %s", output, err) + } + + actual, err := os.ReadFile(output) + if err != nil { + t.Errorf("cannot read back '%s', %s", output, err) + } + if diff := cmp.Diff(string(actual), string(cputempsCsv)); diff != "" { + t.Errorf(diff) + } +} diff --git a/internal/converter.go b/internal/convert_update.go similarity index 96% rename from internal/converter.go rename to internal/convert_update.go index 81ace51..424ba29 100644 --- a/internal/converter.go +++ b/internal/convert_update.go @@ -29,8 +29,8 @@ import ( ) type ConvertArgs struct { - OldFiles []string - NewFile string + InputFiles []string + OutputFile string } // HardwareInfo includes CPU and motherboard information about the host machine. @@ -60,15 +60,15 @@ type HardwareInfo struct { } func ConvertV1ToV2(args *ConvertArgs) error { - os.Remove(args.NewFile) - fp, err := os.Create(args.NewFile) + os.Remove(args.OutputFile) + fp, err := os.Create(args.OutputFile) if err != nil { return err } defer fp.Close() ln := 0 - for _, filename := range args.OldFiles { + for _, filename := range args.InputFiles { log.Printf("OPEN %s", filename) in, err := os.Open(filename) if err != nil { diff --git a/internal/testdata/cputemps.csv b/internal/testdata/cputemps.csv new file mode 100644 index 0000000..98c89cf --- /dev/null +++ b/internal/testdata/cputemps.csv @@ -0,0 +1,101 @@ +ts_year,ts_month,ts_day,ts_hour,ts_min,ts_second,active_cores,total_cores,frequency,avg_load,temperature +2023,1,22,23,23,59,12,12,3700.041504,2.250000,68.250000 +2023,1,22,23,24,0,2,12,3600.040283,0.833333,68.875000 +2023,1,22,23,24,1,8,12,3720.041748,1.083333,70.125000 +2023,1,22,23,24,2,3,12,3700.041504,0.333333,69.625000 +2023,1,22,23,24,3,2,12,3700.041504,0.166667,68.750000 +2023,1,22,23,24,4,4,12,3600.040283,1.416667,68.625000 +2023,1,22,23,24,5,4,12,3660.041016,0.916667,68.500000 +2023,1,22,23,24,6,8,12,4500.050293,1.416667,68.500000 +2023,1,22,23,24,7,4,12,3700.041504,0.583333,68.875000 +2023,1,22,23,24,8,2,12,3640.041016,0.250000,68.250000 +2023,1,22,23,24,9,7,12,3700.041504,1.000000,69.125000 +2023,1,22,23,24,10,3,12,3640.041016,1.583333,70.125000 +2023,1,22,23,24,11,3,12,3700.041504,0.500000,69.500000 +2023,1,22,23,24,12,7,12,3740.041992,0.833333,68.625000 +2023,1,22,23,24,13,1,12,3700.041504,0.166667,68.125000 +2023,1,22,23,24,14,2,12,3600.040283,0.833333,68.000000 +2023,1,22,23,24,15,9,12,3680.041260,1.250000,67.750000 +2023,1,22,23,24,16,2,12,3600.040283,0.166667,66.875000 +2023,1,22,23,24,17,2,12,3700.041504,0.166667,66.250000 +2023,1,22,23,24,18,7,12,2880.032227,0.666667,65.375000 +2023,1,22,23,24,19,3,12,3700.041504,1.166667,66.125000 +2023,1,22,23,24,20,2,12,4550.051270,0.833333,66.000000 +2023,1,22,23,24,21,3,12,3720.041748,0.333333,66.000000 +2023,1,22,23,24,22,5,12,3700.041504,0.500000,65.375000 +2023,1,22,23,24,23,1,12,3740.041992,0.416667,65.125000 +2023,1,22,23,24,24,4,12,3600.040283,1.750000,65.625000 +2023,1,22,23,24,25,11,12,4525.050781,2.250000,69.125000 +2023,1,22,23,24,26,2,12,3620.040771,0.833333,69.500000 +2023,1,22,23,24,27,8,12,3600.040283,0.750000,69.125000 +2023,1,22,23,24,28,3,12,3640.041016,1.000000,69.000000 +2023,1,22,23,24,29,5,12,3600.040283,1.250000,69.375000 +2023,1,22,23,24,30,7,12,3680.041260,1.083333,68.375000 +2023,1,22,23,24,31,6,12,3600.040283,0.916667,68.125000 +2023,1,22,23,24,32,2,12,3680.041260,0.416667,68.375000 +2023,1,22,23,24,33,3,12,4550.051270,0.500000,68.000000 +2023,1,22,23,24,34,6,12,3660.041016,1.583333,69.000000 +2023,1,22,23,24,35,7,12,3700.041504,1.000000,68.625000 +2023,1,22,23,24,36,1,12,3680.041260,0.083333,67.750000 +2023,1,22,23,24,37,5,12,3680.041260,0.583333,68.375000 +2023,1,22,23,24,38,8,12,3600.040283,1.083333,69.375000 +2023,1,22,23,24,39,7,12,3660.041016,1.750000,69.625000 +2023,1,22,23,24,40,5,12,3680.041260,1.416667,69.000000 +2023,1,22,23,24,41,1,12,3600.040283,0.166667,68.750000 +2023,1,22,23,24,42,5,12,3660.041016,1.250000,69.125000 +2023,1,22,23,24,43,7,12,3700.041504,0.916667,69.625000 +2023,1,22,23,24,44,3,12,3680.041260,1.500000,69.500000 +2023,1,22,23,24,45,3,12,3660.041016,1.083333,69.875000 +2023,1,22,23,24,46,7,12,3640.041016,1.333333,69.625000 +2023,1,22,23,24,47,2,12,3600.040283,0.500000,69.625000 +2023,1,22,23,24,48,10,12,3740.041992,0.916667,68.875000 +2023,1,22,23,24,49,5,12,3600.040283,1.583333,68.625000 +2023,1,22,23,24,50,4,12,3660.041016,1.000000,68.000000 +2023,1,22,23,24,51,4,12,3680.041260,0.666667,68.375000 +2023,1,22,23,24,52,10,12,3700.041504,1.083333,68.375000 +2023,1,22,23,24,53,4,12,2880.032227,0.750000,67.500000 +2023,1,22,23,24,54,4,12,3600.040283,1.666667,67.375000 +2023,1,22,23,24,55,12,12,3680.041260,1.666667,66.875000 +2023,1,22,23,24,56,3,12,3600.040283,0.583333,66.750000 +2023,1,22,23,24,57,4,12,3700.041504,0.416667,66.500000 +2023,1,22,23,24,58,2,12,3700.041504,0.166667,65.875000 +2023,1,22,23,24,59,6,12,3700.041504,1.583333,66.250000 +2023,1,22,23,25,0,4,12,3660.041016,1.333333,66.500000 +2023,1,22,23,25,1,3,12,3700.041504,1.166667,67.343750 +2023,1,22,23,25,2,8,12,3680.041260,1.083333,67.875000 +2023,1,22,23,25,3,3,12,3700.041504,0.333333,67.375000 +2023,1,22,23,25,4,2,12,3600.040283,1.083333,67.500000 +2023,1,22,23,25,5,4,12,3700.041504,0.916667,66.625000 +2023,1,22,23,25,6,8,12,3600.040283,1.000000,66.875000 +2023,1,22,23,25,7,0,12,3740.041992,0.000000,66.000000 +2023,1,22,23,25,8,3,12,3700.041504,0.500000,65.625000 +2023,1,22,23,25,9,8,12,3680.041260,1.833333,67.125000 +2023,1,22,23,25,10,4,12,3680.041260,1.250000,67.750000 +2023,1,22,23,25,11,3,12,3700.041504,0.500000,67.125000 +2023,1,22,23,25,12,7,12,3700.041504,1.333333,67.250000 +2023,1,22,23,25,13,6,12,3600.040283,0.750000,66.822917 +2023,1,22,23,25,14,3,12,3720.041748,1.333333,67.375000 +2023,1,22,23,25,15,4,12,4525.050781,1.083333,67.250000 +2023,1,22,23,25,16,5,12,2880.032227,0.666667,67.375000 +2023,1,22,23,25,17,3,12,3720.041748,0.833333,67.000000 +2023,1,22,23,25,18,5,12,3720.041748,1.000000,67.500000 +2023,1,22,23,25,19,6,12,3700.041504,1.916667,68.250000 +2023,1,22,23,25,20,2,12,3640.041016,1.000000,68.875000 +2023,1,22,23,25,21,10,12,3660.041016,2.083333,71.250000 +2023,1,22,23,25,22,8,12,3700.041504,1.166667,70.875000 +2023,1,22,23,25,23,1,12,3700.041504,0.083333,69.625000 +2023,1,22,23,25,24,7,12,3700.041504,2.166667,69.875000 +2023,1,22,23,25,25,4,12,3680.041260,0.916667,68.625000 +2023,1,22,23,25,26,7,12,3700.041504,0.666667,67.875000 +2023,1,22,23,25,27,1,12,3700.041504,0.083333,66.750000 +2023,1,22,23,25,28,2,12,3700.041504,0.166667,66.750000 +2023,1,22,23,25,29,5,12,3640.041016,2.083333,68.250000 +2023,1,22,23,25,30,9,12,3680.041260,1.166667,68.375000 +2023,1,22,23,25,31,5,12,3700.041504,0.833333,67.500000 +2023,1,22,23,25,32,1,12,3700.041504,0.500000,67.125000 +2023,1,22,23,25,33,1,12,3700.041504,0.083333,66.000000 +2023,1,22,23,25,34,3,12,3680.041260,1.333333,68.125000 +2023,1,22,23,25,35,2,12,3700.041504,0.583333,67.770833 +2023,1,22,23,25,36,3,12,3680.041260,0.583333,67.250000 +2023,1,22,23,25,37,2,12,3700.041504,0.166667,66.375000 +2023,1,22,23,25,38,2,12,3600.040283,0.250000,65.500000 diff --git a/internal/testdata/cputemps.ndjson b/internal/testdata/cputemps.ndjson new file mode 100644 index 0000000..5be4fb9 --- /dev/null +++ b/internal/testdata/cputemps.ndjson @@ -0,0 +1,100 @@ +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.25,"cpu":{"load":[2,3,2,12,1,1,1,1,1,1,1,1],"temperature":[68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:23:59.933755500Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.875,"cpu":{"load":[0,2,0,8,0,0,0,0,0,0,0,0],"temperature":[68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:00.931849800Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":70.125,"cpu":{"load":[1,2,2,4,1,1,1,0,0,0,1,0],"temperature":[70.125,70.125,70.125,70.125,70.125,70.125,70.125,70.125,70.125,70.125,70.125,70.125],"numCores":12,"frequencyMhz":3720.041748046875,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:01.938945900Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69.625,"cpu":{"load":[0,1,1,2,0,0,0,0,0,0,0,0],"temperature":[69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:02.935788400Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.75,"cpu":{"load":[0,0,1,1,0,0,0,0,0,0,0,0],"temperature":[68.75,68.75,68.75,68.75,68.75,68.75,68.75,68.75,68.75,68.75,68.75,68.75],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:03.932893700Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.625,"cpu":{"load":[0,1,3,11,0,2,0,0,0,0,0,0],"temperature":[68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:04.931011300Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.5,"cpu":{"load":[0,1,5,4,0,0,0,0,0,1,0,0],"temperature":[68.5,68.5,68.5,68.5,68.5,68.5,68.5,68.5,68.5,68.5,68.5,68.5],"numCores":12,"frequencyMhz":3660.041015625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:05.942575100Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.5,"cpu":{"load":[4,1,5,3,1,1,1,1,0,0,0,0],"temperature":[68.5,68.5,68.5,68.5,68.5,68.5,68.5,68.5,68.5,68.5,68.5,68.5],"numCores":12,"frequencyMhz":4500.05029296875,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:06.933872700Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.875,"cpu":{"load":[4,0,0,1,0,0,0,0,1,1,0,0],"temperature":[68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:07.943842800Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.25,"cpu":{"load":[0,0,1,2,0,0,0,0,0,0,0,0],"temperature":[68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25],"numCores":12,"frequencyMhz":3640.041015625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:08.942708300Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69.125,"cpu":{"load":[1,0,2,2,2,2,2,0,1,0,0,0],"temperature":[69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:09.940976500Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":70.125,"cpu":{"load":[3,0,3,13,0,0,0,0,0,0,0,0],"temperature":[70.125,70.125,70.125,70.125,70.125,70.125,70.125,70.125,70.125,70.125,70.125,70.125],"numCores":12,"frequencyMhz":3640.041015625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:10.932131700Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69.5,"cpu":{"load":[0,0,1,4,0,1,0,0,0,0,0,0],"temperature":[69.5,69.5,69.5,69.5,69.5,69.5,69.5,69.5,69.5,69.5,69.5,69.5],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:11.939881700Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.625,"cpu":{"load":[0,0,4,1,1,1,1,0,1,1,0,0],"temperature":[68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625],"numCores":12,"frequencyMhz":3740.0419921875,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:12.931669800Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.125,"cpu":{"load":[0,0,2,0,0,0,0,0,0,0,0,0],"temperature":[68.125,68.125,68.125,68.125,68.125,68.125,68.125,68.125,68.125,68.125,68.125,68.125],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:13.945420400Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68,"cpu":{"load":[0,0,4,6,0,0,0,0,0,0,0,0],"temperature":[68,68,68,68,68,68,68,68,68,68,68,68],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:14.941617400Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.75,"cpu":{"load":[2,2,1,5,0,1,0,1,0,1,1,1],"temperature":[67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75],"numCores":12,"frequencyMhz":3680.041259765625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:15.935771600Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66.875,"cpu":{"load":[0,0,1,1,0,0,0,0,0,0,0,0],"temperature":[66.875,66.875,66.875,66.875,66.875,66.875,66.875,66.875,66.875,66.875,66.875,66.875],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:16.932746700Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66.25,"cpu":{"load":[0,0,0,1,0,0,0,0,0,0,0,1],"temperature":[66.25,66.25,66.25,66.25,66.25,66.25,66.25,66.25,66.25,66.25,66.25,66.25],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:17.941897800Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":65.375,"cpu":{"load":[2,0,1,0,1,0,0,1,1,1,1,0],"temperature":[65.375,65.375,65.375,65.375,65.375,65.375,65.375,65.375,65.375,65.375,65.375,65.375],"numCores":12,"frequencyMhz":2880.0322265625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:18.937467800Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66.125,"cpu":{"load":[0,1,4,9,0,0,0,0,0,0,0,0],"temperature":[66.125,66.125,66.125,66.125,66.125,66.125,66.125,66.125,66.125,66.125,66.125,66.125],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:19.933581800Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66,"cpu":{"load":[0,0,1,9,0,0,0,0,0,0,0,0],"temperature":[66,66,66,66,66,66,66,66,66,66,66,66],"numCores":12,"frequencyMhz":4550.05126953125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:20.943654900Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66,"cpu":{"load":[2,0,0,1,1,0,0,0,0,0,0,0],"temperature":[66,66,66,66,66,66,66,66,66,66,66,66],"numCores":12,"frequencyMhz":3720.041748046875,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:21.941757400Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":65.375,"cpu":{"load":[1,0,2,1,0,1,0,0,0,0,0,1],"temperature":[65.375,65.375,65.375,65.375,65.375,65.375,65.375,65.375,65.375,65.375,65.375,65.375],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:22.937571800Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":65.125,"cpu":{"load":[0,0,0,5,0,0,0,0,0,0,0,0],"temperature":[65.125,65.125,65.125,65.125,65.125,65.125,65.125,65.125,65.125,65.125,65.125,65.125],"numCores":12,"frequencyMhz":3740.0419921875,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:23.934118800Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":65.625,"cpu":{"load":[1,0,3,16,0,1,0,0,0,0,0,0],"temperature":[65.625,65.625,65.625,65.625,65.625,65.625,65.625,65.625,65.625,65.625,65.625,65.625],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:24.931911900Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69.125,"cpu":{"load":[7,4,3,5,1,1,1,0,1,1,1,2],"temperature":[69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125],"numCores":12,"frequencyMhz":4525.05078125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:25.945001300Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69.5,"cpu":{"load":[4,0,0,6,0,0,0,0,0,0,0,0],"temperature":[69.5,69.5,69.5,69.5,69.5,69.5,69.5,69.5,69.5,69.5,69.5,69.5],"numCores":12,"frequencyMhz":3620.040771484375,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:26.940575100Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69.125,"cpu":{"load":[0,0,1,2,0,0,1,1,1,1,1,1],"temperature":[69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:27.936498Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69,"cpu":{"load":[8,0,3,1,0,0,0,0,0,0,0,0],"temperature":[69,69,69,69,69,69,69,69,69,69,69,69],"numCores":12,"frequencyMhz":3640.041015625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:28.932721400Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69.375,"cpu":{"load":[4,3,0,6,0,1,0,0,1,0,0,0],"temperature":[69.375,69.375,69.375,69.375,69.375,69.375,69.375,69.375,69.375,69.375,69.375,69.375],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:29.943987300Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.375,"cpu":{"load":[1,0,2,6,0,0,1,1,1,0,0,1],"temperature":[68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375],"numCores":12,"frequencyMhz":3680.041259765625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:30.939424300Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.125,"cpu":{"load":[2,0,4,2,1,0,0,1,0,0,1,0],"temperature":[68.125,68.125,68.125,68.125,68.125,68.125,68.125,68.125,68.125,68.125,68.125,68.125],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:31.938596200Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.375,"cpu":{"load":[0,0,2,3,0,0,0,0,0,0,0,0],"temperature":[68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375],"numCores":12,"frequencyMhz":3680.041259765625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:32.934816900Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68,"cpu":{"load":[0,0,3,2,1,0,0,0,0,0,0,0],"temperature":[68,68,68,68,68,68,68,68,68,68,68,68],"numCores":12,"frequencyMhz":4550.05126953125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:33.936293300Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69,"cpu":{"load":[2,2,8,5,0,0,0,1,1,0,0,0],"temperature":[69,69,69,69,69,69,69,69,69,69,69,69],"numCores":12,"frequencyMhz":3660.041015625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:34.931663900Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.625,"cpu":{"load":[1,0,1,6,0,1,0,0,1,1,1,0],"temperature":[68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:35.930473900Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.75,"cpu":{"load":[1,0,0,0,0,0,0,0,0,0,0,0],"temperature":[67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75],"numCores":12,"frequencyMhz":3680.041259765625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:36.943783800Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.375,"cpu":{"load":[1,1,1,3,0,0,0,1,0,0,0,0],"temperature":[68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375],"numCores":12,"frequencyMhz":3680.041259765625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:37.941671400Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69.375,"cpu":{"load":[1,0,2,5,1,1,1,1,0,0,1,0],"temperature":[69.375,69.375,69.375,69.375,69.375,69.375,69.375,69.375,69.375,69.375,69.375,69.375],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:38.936042800Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69.625,"cpu":{"load":[1,1,13,3,0,1,0,1,0,1,0,0],"temperature":[69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625],"numCores":12,"frequencyMhz":3660.041015625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:39.929917500Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69,"cpu":{"load":[2,1,9,4,0,0,0,1,0,0,0,0],"temperature":[69,69,69,69,69,69,69,69,69,69,69,69],"numCores":12,"frequencyMhz":3680.041259765625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:40.934807900Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.75,"cpu":{"load":[0,0,2,0,0,0,0,0,0,0,0,0],"temperature":[68.75,68.75,68.75,68.75,68.75,68.75,68.75,68.75,68.75,68.75,68.75,68.75],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:41.933798Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69.125,"cpu":{"load":[3,1,8,2,0,1,0,0,0,0,0,0],"temperature":[69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125,69.125],"numCores":12,"frequencyMhz":3660.041015625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:42.929896900Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69.625,"cpu":{"load":[3,1,3,1,0,0,0,1,0,1,0,1],"temperature":[69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:43.943016900Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69.5,"cpu":{"load":[0,1,9,8,0,0,0,0,0,0,0,0],"temperature":[69.5,69.5,69.5,69.5,69.5,69.5,69.5,69.5,69.5,69.5,69.5,69.5],"numCores":12,"frequencyMhz":3680.041259765625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:44.938646400Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69.875,"cpu":{"load":[1,0,9,3,0,0,0,0,0,0,0,0],"temperature":[69.875,69.875,69.875,69.875,69.875,69.875,69.875,69.875,69.875,69.875,69.875,69.875],"numCores":12,"frequencyMhz":3660.041015625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:45.933955200Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69.625,"cpu":{"load":[4,1,5,3,1,1,1,0,0,0,0,0],"temperature":[69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625],"numCores":12,"frequencyMhz":3640.041015625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:46.930136700Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69.625,"cpu":{"load":[2,0,4,0,0,0,0,0,0,0,0,0],"temperature":[69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:47.942964100Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.875,"cpu":{"load":[1,0,2,1,1,0,1,1,1,1,1,1],"temperature":[68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875],"numCores":12,"frequencyMhz":3740.0419921875,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:48.940861900Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.625,"cpu":{"load":[1,1,15,1,0,0,1,0,0,0,0,0],"temperature":[68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:49.936638900Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68,"cpu":{"load":[1,1,6,4,0,0,0,0,0,0,0,0],"temperature":[68,68,68,68,68,68,68,68,68,68,68,68],"numCores":12,"frequencyMhz":3660.041015625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:50.932771Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.375,"cpu":{"load":[4,0,1,2,0,0,0,0,0,0,0,1],"temperature":[68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375],"numCores":12,"frequencyMhz":3680.041259765625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:51.942596700Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.375,"cpu":{"load":[2,1,2,2,1,0,1,1,1,1,1,0],"temperature":[68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:52.938500400Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.5,"cpu":{"load":[0,0,3,4,0,0,0,1,0,0,0,1],"temperature":[67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5],"numCores":12,"frequencyMhz":2880.0322265625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:53.933028300Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.375,"cpu":{"load":[0,1,12,6,0,1,0,0,0,0,0,0],"temperature":[67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:54.942775400Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66.875,"cpu":{"load":[3,3,2,4,1,1,1,1,1,1,1,1],"temperature":[66.875,66.875,66.875,66.875,66.875,66.875,66.875,66.875,66.875,66.875,66.875,66.875],"numCores":12,"frequencyMhz":3680.041259765625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:55.935719500Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66.75,"cpu":{"load":[0,0,4,2,0,1,0,0,0,0,0,0],"temperature":[66.75,66.75,66.75,66.75,66.75,66.75,66.75,66.75,66.75,66.75,66.75,66.75],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:56.932638400Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66.5,"cpu":{"load":[2,0,1,1,0,0,1,0,0,0,0,0],"temperature":[66.5,66.5,66.5,66.5,66.5,66.5,66.5,66.5,66.5,66.5,66.5,66.5],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:57.945796500Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":65.875,"cpu":{"load":[0,0,1,1,0,0,0,0,0,0,0,0],"temperature":[65.875,65.875,65.875,65.875,65.875,65.875,65.875,65.875,65.875,65.875,65.875,65.875],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:58.944863500Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66.25,"cpu":{"load":[0,0,8,7,0,0,1,1,1,1,0,0],"temperature":[66.25,66.25,66.25,66.25,66.25,66.25,66.25,66.25,66.25,66.25,66.25,66.25],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:24:59.930865300Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66.5,"cpu":{"load":[0,0,7,7,0,1,0,0,0,0,0,1],"temperature":[66.5,66.5,66.5,66.5,66.5,66.5,66.5,66.5,66.5,66.5,66.5,66.5],"numCores":12,"frequencyMhz":3660.041015625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:00.943901400Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.34375,"cpu":{"load":[1,0,2,11,0,0,0,0,0,0,0,0],"temperature":[67.375,67.25,67.25,67.25,67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:01.939545400Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.875,"cpu":{"load":[2,1,1,5,1,0,1,0,1,1,0,0],"temperature":[67.875,67.875,67.875,67.875,67.875,67.875,67.875,67.875,67.875,67.875,67.875,67.875],"numCores":12,"frequencyMhz":3680.041259765625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:02.935457200Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.375,"cpu":{"load":[0,1,0,2,0,0,0,0,0,1,0,0],"temperature":[67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:03.931051300Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.5,"cpu":{"load":[0,0,9,4,0,0,0,0,0,0,0,0],"temperature":[67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:04.943722500Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66.625,"cpu":{"load":[1,0,2,7,0,0,0,1,0,0,0,0],"temperature":[66.625,66.625,66.625,66.625,66.625,66.625,66.625,66.625,66.625,66.625,66.625,66.625],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:05.943087200Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66.875,"cpu":{"load":[0,1,3,2,0,0,1,1,2,0,1,1],"temperature":[66.875,66.875,66.875,66.875,66.875,66.875,66.875,66.875,66.875,66.875,66.875,66.875],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:06.938986600Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66,"cpu":{"load":[0,0,0,0,0,0,0,0,0,0,0,0],"temperature":[66,66,66,66,66,66,66,66,66,66,66,66],"numCores":12,"frequencyMhz":3740.0419921875,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:07.939175600Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":65.625,"cpu":{"load":[1,0,3,2,0,0,0,0,0,0,0,0],"temperature":[65.625,65.625,65.625,65.625,65.625,65.625,65.625,65.625,65.625,65.625,65.625,65.625],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:08.939717600Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.125,"cpu":{"load":[2,2,4,10,1,1,1,0,1,0,0,0],"temperature":[67.125,67.125,67.125,67.125,67.125,67.125,67.125,67.125,67.125,67.125,67.125,67.125],"numCores":12,"frequencyMhz":3680.041259765625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:09.933643400Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.75,"cpu":{"load":[5,0,1,8,0,0,0,1,0,0,0,0],"temperature":[67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75],"numCores":12,"frequencyMhz":3680.041259765625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:10.932551900Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.125,"cpu":{"load":[0,0,1,4,0,0,0,0,0,0,0,1],"temperature":[67.125,67.125,67.125,67.125,67.125,67.125,67.125,67.125,67.125,67.125,67.125,67.125],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:11.943837Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.25,"cpu":{"load":[4,0,3,5,1,0,0,1,1,1,0,0],"temperature":[67.25,67.25,67.25,67.25,67.25,67.25,67.25,67.25,67.25,67.25,67.25,67.25],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:12.939257400Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66.82291666666667,"cpu":{"load":[3,0,2,1,1,0,0,0,0,0,1,1],"temperature":[66.875,66.875,66.875,66.875,66.875,66.875,66.875,66.75,66.75,66.75,66.75,66.75],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:13.936904400Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.375,"cpu":{"load":[9,2,0,5,0,0,0,0,0,0,0,0],"temperature":[67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375],"numCores":12,"frequencyMhz":3720.041748046875,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:14.932614100Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.25,"cpu":{"load":[0,3,2,7,0,0,0,0,0,1,0,0],"temperature":[67.25,67.25,67.25,67.25,67.25,67.25,67.25,67.25,67.25,67.25,67.25,67.25],"numCores":12,"frequencyMhz":4525.05078125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:15.939981600Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.375,"cpu":{"load":[1,0,1,4,1,0,0,1,0,0,0,0],"temperature":[67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375,67.375],"numCores":12,"frequencyMhz":2880.0322265625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:16.936707100Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67,"cpu":{"load":[6,0,2,2,0,0,0,0,0,0,0,0],"temperature":[67,67,67,67,67,67,67,67,67,67,67,67],"numCores":12,"frequencyMhz":3720.041748046875,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:17.943612500Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.5,"cpu":{"load":[3,0,4,3,0,0,0,0,0,0,1,1],"temperature":[67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5],"numCores":12,"frequencyMhz":3720.041748046875,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:18.939260200Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.25,"cpu":{"load":[3,9,4,5,0,1,1,0,0,0,0,0],"temperature":[68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:19.934169500Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.875,"cpu":{"load":[5,0,0,7,0,0,0,0,0,0,0,0],"temperature":[68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875,68.875],"numCores":12,"frequencyMhz":3640.041015625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:20.931982700Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":71.25,"cpu":{"load":[1,5,2,8,1,1,0,2,0,1,3,1],"temperature":[71.25,71.25,71.25,71.25,71.25,71.25,71.25,71.25,71.25,71.25,71.25,71.25],"numCores":12,"frequencyMhz":3660.041015625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:21.942073900Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":70.875,"cpu":{"load":[4,0,4,1,1,0,1,1,1,1,0,0],"temperature":[70.875,70.875,70.875,70.875,70.875,70.875,70.875,70.875,70.875,70.875,70.875,70.875],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:22.935624800Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69.625,"cpu":{"load":[0,0,0,1,0,0,0,0,0,0,0,0],"temperature":[69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625,69.625],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:23.932715100Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":69.875,"cpu":{"load":[1,1,12,8,1,1,0,2,0,0,0,0],"temperature":[69.875,69.875,69.875,69.875,69.875,69.875,69.875,69.875,69.875,69.875,69.875,69.875],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:24.944993700Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.625,"cpu":{"load":[0,1,4,4,0,0,0,2,0,0,0,0],"temperature":[68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625,68.625],"numCores":12,"frequencyMhz":3680.041259765625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:25.942700600Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.875,"cpu":{"load":[0,0,1,2,1,0,1,1,0,1,0,1],"temperature":[67.875,67.875,67.875,67.875,67.875,67.875,67.875,67.875,67.875,67.875,67.875,67.875],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:26.940904100Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66.75,"cpu":{"load":[0,0,1,0,0,0,0,0,0,0,0,0],"temperature":[66.75,66.75,66.75,66.75,66.75,66.75,66.75,66.75,66.75,66.75,66.75,66.75],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:27.933816700Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66.75,"cpu":{"load":[1,0,0,1,0,0,0,0,0,0,0,0],"temperature":[66.75,66.75,66.75,66.75,66.75,66.75,66.75,66.75,66.75,66.75,66.75,66.75],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:28.932246900Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.25,"cpu":{"load":[5,1,8,10,1,0,0,0,0,0,0,0],"temperature":[68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25,68.25],"numCores":12,"frequencyMhz":3640.041015625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:29.943963700Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.375,"cpu":{"load":[1,0,4,2,1,0,1,1,0,1,2,1],"temperature":[68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375,68.375],"numCores":12,"frequencyMhz":3680.041259765625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:30.940565100Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.5,"cpu":{"load":[0,0,2,5,0,0,0,1,1,0,1,0],"temperature":[67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5,67.5],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:31.938890800Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.125,"cpu":{"load":[0,0,6,0,0,0,0,0,0,0,0,0],"temperature":[67.125,67.125,67.125,67.125,67.125,67.125,67.125,67.125,67.125,67.125,67.125,67.125],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:32.936912500Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66,"cpu":{"load":[0,0,0,1,0,0,0,0,0,0,0,0],"temperature":[66,66,66,66,66,66,66,66,66,66,66,66],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:33.932868400Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":68.125,"cpu":{"load":[1,0,8,7,0,0,0,0,0,0,0,0],"temperature":[68.125,68.125,68.125,68.125,68.125,68.125,68.125,68.125,68.125,68.125,68.125,68.125],"numCores":12,"frequencyMhz":3680.041259765625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:34.942000600Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.77083333333333,"cpu":{"load":[0,0,5,2,0,0,0,0,0,0,0,0],"temperature":[67.875,67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.75,67.875],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:35.935884300Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":67.25,"cpu":{"load":[0,0,2,4,0,0,0,0,0,0,1,0],"temperature":[67.25,67.25,67.25,67.25,67.25,67.25,67.25,67.25,67.25,67.25,67.25,67.25],"numCores":12,"frequencyMhz":3680.041259765625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:36.931969700Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":66.375,"cpu":{"load":[1,0,1,0,0,0,0,0,0,0,0,0],"temperature":[66.375,66.375,66.375,66.375,66.375,66.375,66.375,66.375,66.375,66.375,66.375,66.375],"numCores":12,"frequencyMhz":3700.04150390625,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:37.945442700Z"} +{"name":"demo","device":[{"name":"AMD Pentium 1200Y 12-Core (Sodium)","kind":"cpu","temperature":65.5,"cpu":{"load":[0,0,2,1,0,0,0,0,0,0,0,0],"temperature":[65.5,65.5,65.5,65.5,65.5,65.5,65.5,65.5,65.5,65.5,65.5,65.5],"numCores":12,"frequencyMhz":3600.040283203125,"fsbFrequencyMhz":100.0011215209961}}],"timestamp":"2023-01-22T23:25:38.943464200Z"} diff --git a/third_party/google_protobuf/include/google/api/expr/conformance/v1alpha1/conformance_service.proto b/third_party/google_protobuf/include/google/api/expr/conformance/v1alpha1/conformance_service.proto index 9161698..c1ad7aa 100644 --- a/third_party/google_protobuf/include/google/api/expr/conformance/v1alpha1/conformance_service.proto +++ b/third_party/google_protobuf/include/google/api/expr/conformance/v1alpha1/conformance_service.proto @@ -1,4 +1,4 @@ -// Copyright 2021 Google LLC +// Copyright 2022 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,11 +16,11 @@ syntax = "proto3"; package google.api.expr.conformance.v1alpha1; +import "google/api/client.proto"; import "google/api/expr/v1alpha1/checked.proto"; import "google/api/expr/v1alpha1/eval.proto"; import "google/api/expr/v1alpha1/syntax.proto"; import "google/rpc/status.proto"; -import "google/api/client.proto"; option cc_enable_arenas = true; option go_package = "google.golang.org/genproto/googleapis/api/expr/conformance/v1alpha1;confpb"; @@ -135,6 +135,23 @@ message EvalResponse { repeated google.rpc.Status issues = 2; } +// A specific position in source. +message SourcePosition { + // The source location name (e.g. file name). + string location = 1; + + // The UTF-8 code unit offset. + int32 offset = 2; + + // The 1-based index of the starting line in the source text + // where the issue occurs, or 0 if unknown. + int32 line = 3; + + // The 0-based index of the starting position within the line of source text + // where the issue occurs. Only meaningful if line is nonzero. + int32 column = 4; +} + // Warnings or errors in service execution are represented by // [google.rpc.Status][google.rpc.Status] messages, with the following message // in the details field. @@ -159,7 +176,7 @@ message IssueDetails { Severity severity = 1; // Position in the source, if known. - google.api.expr.v1alpha1.SourcePosition position = 2; + SourcePosition position = 2; // Expression ID from [Expr][], 0 if unknown. int64 id = 3; diff --git a/third_party/google_protobuf/include/google/rpc/code.proto b/third_party/google_protobuf/include/google/rpc/code.proto index 98ae0ac..7c810af 100644 --- a/third_party/google_protobuf/include/google/rpc/code.proto +++ b/third_party/google_protobuf/include/google/rpc/code.proto @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2022 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -30,7 +30,7 @@ option objc_class_prefix = "RPC"; // `OUT_OF_RANGE` over `FAILED_PRECONDITION` if both codes apply. // Similarly prefer `NOT_FOUND` or `ALREADY_EXISTS` over `FAILED_PRECONDITION`. enum Code { - // Not an error; returned on success + // Not an error; returned on success. // // HTTP Mapping: 200 OK OK = 0; @@ -69,7 +69,7 @@ enum Code { // Some requested entity (e.g., file or directory) was not found. // // Note to server developers: if a request is denied for an entire class - // of users, such as gradual feature rollout or undocumented whitelist, + // of users, such as gradual feature rollout or undocumented allowlist, // `NOT_FOUND` may be used. If a request is denied for some users within // a class of users, such as user-based access control, `PERMISSION_DENIED` // must be used. @@ -115,11 +115,11 @@ enum Code { // Service implementors can use the following guidelines to decide // between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`: // (a) Use `UNAVAILABLE` if the client can retry just the failing call. - // (b) Use `ABORTED` if the client should retry at a higher level - // (e.g., when a client-specified test-and-set fails, indicating the - // client should restart a read-modify-write sequence). + // (b) Use `ABORTED` if the client should retry at a higher level. For + // example, when a client-specified test-and-set fails, indicating the + // client should restart a read-modify-write sequence. // (c) Use `FAILED_PRECONDITION` if the client should not retry until - // the system state has been explicitly fixed. E.g., if an "rmdir" + // the system state has been explicitly fixed. For example, if an "rmdir" // fails because the directory is non-empty, `FAILED_PRECONDITION` // should be returned since the client should not retry unless // the files are deleted from the directory. diff --git a/third_party/google_protobuf/include/google/rpc/context/attribute_context.proto b/third_party/google_protobuf/include/google/rpc/context/attribute_context.proto index 30fe6f2..ef9242e 100644 --- a/third_party/google_protobuf/include/google/rpc/context/attribute_context.proto +++ b/third_party/google_protobuf/include/google/rpc/context/attribute_context.proto @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2022 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -61,7 +61,7 @@ message AttributeContext { // The identity of this peer. Similar to `Request.auth.principal`, but // relative to the peer instead of the request. For example, the - // idenity associated with a load balancer that forwared the request. + // identity associated with a load balancer that forwarded the request. string principal = 7; // The CLDR country/region code associated with the above IP address. @@ -170,7 +170,7 @@ message AttributeContext { // lowercased, because HTTP header keys are case-insensitive. map headers = 3; - // The HTTP URL path. + // The HTTP URL path, excluding the query parameters. string path = 4; // The HTTP request `Host` header value. @@ -223,7 +223,7 @@ message AttributeContext { // the response. google.protobuf.Timestamp time = 4; - // The length of time it takes the backend service to fully respond to a + // The amount of time it takes the backend service to fully respond to a // request. Measured from when the destination service starts to send the // request to the backend until when the destination service receives the // complete response from the backend. @@ -256,7 +256,8 @@ message AttributeContext { // The type of the resource. The syntax is platform-specific because // different platforms define their resources differently. // - // For Google APIs, the type format must be "{service}/{kind}". + // For Google APIs, the type format must be "{service}/{kind}", such as + // "pubsub.googleapis.com/Topic". string type = 3; // The labels or tags on the resource, such as AWS resource tags and diff --git a/third_party/google_protobuf/include/google/rpc/context/audit_context.proto b/third_party/google_protobuf/include/google/rpc/context/audit_context.proto new file mode 100644 index 0000000..7b8b705 --- /dev/null +++ b/third_party/google_protobuf/include/google/rpc/context/audit_context.proto @@ -0,0 +1,49 @@ +// Copyright 2022 Google LLC +// +// 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. + +syntax = "proto3"; + +package google.rpc.context; + +import "google/protobuf/struct.proto"; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/genproto/googleapis/rpc/context;context"; +option java_multiple_files = true; +option java_outer_classname = "AuditContextProto"; +option java_package = "com.google.rpc.context"; + +// `AuditContext` provides information that is needed for audit logging. +message AuditContext { + // Serialized audit log. + bytes audit_log = 1; + + // An API request message that is scrubbed based on the method annotation. + // This field should only be filled if audit_log field is present. + // Service Control will use this to assemble a complete log for Cloud Audit + // Logs and Google internal audit logs. + google.protobuf.Struct scrubbed_request = 2; + + // An API response message that is scrubbed based on the method annotation. + // This field should only be filled if audit_log field is present. + // Service Control will use this to assemble a complete log for Cloud Audit + // Logs and Google internal audit logs. + google.protobuf.Struct scrubbed_response = 3; + + // Number of scrubbed response items. + int32 scrubbed_response_item_count = 4; + + // Audit resource name which is scrubbed. + string target_resource = 5; +} diff --git a/third_party/google_protobuf/include/google/rpc/error_details.proto b/third_party/google_protobuf/include/google/rpc/error_details.proto index c4d6c4b..c489e83 100644 --- a/third_party/google_protobuf/include/google/rpc/error_details.proto +++ b/third_party/google_protobuf/include/google/rpc/error_details.proto @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2022 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,6 +24,57 @@ option java_outer_classname = "ErrorDetailsProto"; option java_package = "com.google.rpc"; option objc_class_prefix = "RPC"; +// Describes the cause of the error with structured details. +// +// Example of an error when contacting the "pubsub.googleapis.com" API when it +// is not enabled: +// +// { "reason": "API_DISABLED" +// "domain": "googleapis.com" +// "metadata": { +// "resource": "projects/123", +// "service": "pubsub.googleapis.com" +// } +// } +// +// This response indicates that the pubsub.googleapis.com API is not enabled. +// +// Example of an error that is returned when attempting to create a Spanner +// instance in a region that is out of stock: +// +// { "reason": "STOCKOUT" +// "domain": "spanner.googleapis.com", +// "metadata": { +// "availableRegions": "us-central1,us-east2" +// } +// } +message ErrorInfo { + // The reason of the error. This is a constant value that identifies the + // proximate cause of the error. Error reasons are unique within a particular + // domain of errors. This should be at most 63 characters and match a + // regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`, which represents + // UPPER_SNAKE_CASE. + string reason = 1; + + // The logical grouping to which the "reason" belongs. The error domain + // is typically the registered service name of the tool or product that + // generates the error. Example: "pubsub.googleapis.com". If the error is + // generated by some common infrastructure, the error domain must be a + // globally unique value that identifies the infrastructure. For Google API + // infrastructure, the error domain is "googleapis.com". + string domain = 2; + + // Additional structured details about this error. + // + // Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in + // length. When identifying the current value of an exceeded limit, the units + // should be contained in the key, not the value. For example, rather than + // {"instanceLimit": "100/request"}, should be returned as, + // {"instanceLimitPerRequest": "100"}, if the client exceeds the number of + // instances that can be created in a single (batch) request. + map metadata = 3; +} + // Describes when the clients can retry a failed request. Clients could ignore // the recommendation here or retry when this information is missing from error // responses. @@ -85,56 +136,6 @@ message QuotaFailure { repeated Violation violations = 1; } -// Describes the cause of the error with structured details. -// -// Example of an error when contacting the "pubsub.googleapis.com" API when it -// is not enabled: -// -// { "reason": "API_DISABLED" -// "domain": "googleapis.com" -// "metadata": { -// "resource": "projects/123", -// "service": "pubsub.googleapis.com" -// } -// } -// -// This response indicates that the pubsub.googleapis.com API is not enabled. -// -// Example of an error that is returned when attempting to create a Spanner -// instance in a region that is out of stock: -// -// { "reason": "STOCKOUT" -// "domain": "spanner.googleapis.com", -// "metadata": { -// "availableRegions": "us-central1,us-east2" -// } -// } -message ErrorInfo { - // The reason of the error. This is a constant value that identifies the - // proximate cause of the error. Error reasons are unique within a particular - // domain of errors. This should be at most 63 characters and match - // /[A-Z0-9_]+/. - string reason = 1; - - // The logical grouping to which the "reason" belongs. The error domain - // is typically the registered service name of the tool or product that - // generates the error. Example: "pubsub.googleapis.com". If the error is - // generated by some common infrastructure, the error domain must be a - // globally unique value that identifies the infrastructure. For Google API - // infrastructure, the error domain is "googleapis.com". - string domain = 2; - - // Additional structured details about this error. - // - // Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in - // length. When identifying the current value of an exceeded limit, the units - // should be contained in the key, not the value. For example, rather than - // {"instanceLimit": "100/request"}, should be returned as, - // {"instanceLimitPerRequest": "100"}, if the client exceeds the number of - // instances that can be created in a single (batch) request. - map metadata = 3; -} - // Describes what preconditions have failed. // // For example, if an RPC failed because it required the Terms of Service to be @@ -169,9 +170,43 @@ message PreconditionFailure { message BadRequest { // A message type used to describe a single bad request field. message FieldViolation { - // A path leading to a field in the request body. The value will be a + // A path that leads to a field in the request body. The value will be a // sequence of dot-separated identifiers that identify a protocol buffer - // field. E.g., "field_violations.field" would identify this field. + // field. + // + // Consider the following: + // + // message CreateContactRequest { + // message EmailAddress { + // enum Type { + // TYPE_UNSPECIFIED = 0; + // HOME = 1; + // WORK = 2; + // } + // + // optional string email = 1; + // repeated EmailType type = 2; + // } + // + // string full_name = 1; + // repeated EmailAddress email_addresses = 2; + // } + // + // In this example, in proto `field` could take one of the following values: + // + // * `full_name` for a violation in the `full_name` value + // * `email_addresses[1].email` for a violation in the `email` field of the + // first `email_addresses` message + // * `email_addresses[3].type[2]` for a violation in the second `type` + // value in the third `email_addresses` message. + // + // In JSON, the same values are represented as: + // + // * `fullName` for a violation in the `fullName` value + // * `emailAddresses[1].email` for a violation in the `email` field of the + // first `emailAddresses` message + // * `emailAddresses[3].type[2]` for a violation in the second `type` + // value in the third `emailAddresses` message. string field = 1; // A description of why the request element is bad. @@ -203,7 +238,8 @@ message ResourceInfo { // The name of the resource being accessed. For example, a shared calendar // name: "example.com_4fghdhgsrgh@group.calendar.google.com", if the current - // error is [google.rpc.Code.PERMISSION_DENIED][google.rpc.Code.PERMISSION_DENIED]. + // error is + // [google.rpc.Code.PERMISSION_DENIED][google.rpc.Code.PERMISSION_DENIED]. string resource_name = 2; // The owner of the resource (optional). @@ -240,7 +276,7 @@ message Help { // which can be attached to an RPC error. message LocalizedMessage { // The locale used following the specification defined at - // http://www.rfc-editor.org/rfc/bcp/bcp47.txt. + // https://www.rfc-editor.org/rfc/bcp/bcp47.txt. // Examples are: "en-US", "fr-CH", "es-MX" string locale = 1; diff --git a/third_party/google_protobuf/include/google/rpc/http.proto b/third_party/google_protobuf/include/google/rpc/http.proto new file mode 100644 index 0000000..299a71f --- /dev/null +++ b/third_party/google_protobuf/include/google/rpc/http.proto @@ -0,0 +1,64 @@ +// Copyright 2022 Google LLC +// +// 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. + +syntax = "proto3"; + +package google.rpc; + +option go_package = "google.golang.org/genproto/googleapis/rpc/http;http"; +option java_multiple_files = true; +option java_outer_classname = "HttpProto"; +option java_package = "com.google.rpc"; +option objc_class_prefix = "RPC"; + +// Represents an HTTP request. +message HttpRequest { + // The HTTP request method. + string method = 1; + + // The HTTP request URI. + string uri = 2; + + // The HTTP request headers. The ordering of the headers is significant. + // Multiple headers with the same key may present for the request. + repeated HttpHeader headers = 3; + + // The HTTP request body. If the body is not expected, it should be empty. + bytes body = 4; +} + +// Represents an HTTP response. +message HttpResponse { + // The HTTP status code, such as 200 or 404. + int32 status = 1; + + // The HTTP reason phrase, such as "OK" or "Not Found". + string reason = 2; + + // The HTTP response headers. The ordering of the headers is significant. + // Multiple headers with the same key may present for the response. + repeated HttpHeader headers = 3; + + // The HTTP response body. If the body is not expected, it should be empty. + bytes body = 4; +} + +// Represents an HTTP header. +message HttpHeader { + // The HTTP header key. It is case insensitive. + string key = 1; + + // The HTTP header value. + string value = 2; +} diff --git a/third_party/google_protobuf/include/google/rpc/status.proto b/third_party/google_protobuf/include/google/rpc/status.proto index 3b1f7a9..923e169 100644 --- a/third_party/google_protobuf/include/google/rpc/status.proto +++ b/third_party/google_protobuf/include/google/rpc/status.proto @@ -1,4 +1,4 @@ -// Copyright 2020 Google LLC +// Copyright 2022 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -33,12 +33,14 @@ option objc_class_prefix = "RPC"; // You can find out more about this error model and how to work with it in the // [API Design Guide](https://cloud.google.com/apis/design/errors). message Status { - // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. + // The status code, which should be an enum value of + // [google.rpc.Code][google.rpc.Code]. int32 code = 1; // A developer-facing error message, which should be in English. Any // user-facing error message should be localized and sent in the - // [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. + // [google.rpc.Status.details][google.rpc.Status.details] field, or localized + // by the client. string message = 2; // A list of messages that carry the error details. There is a common set of