Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(554)

Side by Side Diff: go/src/infra/monitoring/dispatcher/dispatcher.go

Issue 1125263004: dispatcher: fix test result parsing, build ranges for failure alerts, other fixes (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: added comments, some bounds/type assertion checks Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Dispatcher usage: 5 // Dispatcher usage:
6 // go run infra/monitoring/dispatcher 6 // go run infra/monitoring/dispatcher
7 // Expects gatekeeper.json to be in the current directory. 7 // Expects gatekeeper.json to be in the current directory.
8 // Runs a single check, prints out diagnosis and exits. 8 // Runs a single check, prints out diagnosis and exits.
9 // TODO(seanmccullough): Run continuously. 9 // TODO(seanmccullough): Run continuously. Also, consider renaming to 'patrol'
10 // or 'scanner' because that's really what this thing does.
10 11
11 package main 12 package main
12 13
13 import ( 14 import (
14 "encoding/json" 15 "encoding/json"
15 "flag" 16 "flag"
16 "fmt" 17 "fmt"
17 "io/ioutil" 18 "io/ioutil"
18 "os" 19 "os"
19 "time" 20 "time"
20 21
21 "github.com/Sirupsen/logrus" 22 "github.com/Sirupsen/logrus"
22 23
23 "infra/monitoring/analyzer" 24 "infra/monitoring/analyzer"
24 "infra/monitoring/messages" 25 "infra/monitoring/messages"
25 ) 26 )
26 27
27 var ( 28 var (
28 dataURL = flag.String("data_url", "", "Url where alerts are stored") 29 dataURL = flag.String("data_url", "", "Url where alerts are stored")
29 masterFilter = flag.String("master-filter", "", "Filter out maste rs that contain this string") 30 masterFilter = flag.String("master-filter", "", "Filter out maste rs that contain this string")
30 masterOnly = flag.String("master", "", "Only check this master" ) 31 masterOnly = flag.String("master", "", "Only check this master" )
31 mastersOnly = flag.Bool("masters-only", false, "Just check for m aster alerts, not builders") 32 mastersOnly = flag.Bool("masters-only", false, "Just check for m aster alerts, not builders")
32 gatekeeperJSON = flag.String("gatekeeper", "gatekeeper.json", "Loca tion of gatekeeper json file") 33 gatekeeperJSON = flag.String("gatekeeper", "gatekeeper.json", "Loca tion of gatekeeper json file")
33 gatekeeperTreesJSON = flag.String("gatekeeper-trees", "gatekeeper_trees. json", "Location of gatekeeper json file") 34 gatekeeperTreesJSON = flag.String("gatekeeper-trees", "gatekeeper_trees. json", "Location of gatekeeper json file")
35 treeOnly = flag.String("tree", "", "Only check this tree")
36 builderOnly = flag.String("builder", "", "Only check this builde r")
37 buildOnly = flag.Int64("build", 0, "Only check this build")
34 38
35 log = logrus.New() 39 log = logrus.New()
36 40
37 // gk is the gatekeeper config. 41 // gk is the gatekeeper config.
38 gk = &struct { 42 gk = &struct {
39 // Weird. Are there ever multiple configs per master key? 43 // Weird. Are there ever multiple configs per master key?
40 Masters map[string][]messages.MasterConfig `json:"masters"` 44 Masters map[string][]messages.MasterConfig `json:"masters"`
41 }{} 45 }{}
46 // gkt is the gatekeeper trees config.
47 gkt = map[string]messages.TreeMasterConfig{}
42 filteredFailures = uint64(0) 48 filteredFailures = uint64(0)
43 ) 49 )
44 50
45 func init() { 51 func init() {
46 flag.Usage = func() { 52 flag.Usage = func() {
47 fmt.Printf("Runs a single check, prints out diagnosis and exits. \n") 53 fmt.Printf("Runs a single check, prints out diagnosis and exits. \n")
48 flag.PrintDefaults() 54 flag.PrintDefaults()
49 } 55 }
50 } 56 }
51 57
(...skipping 26 matching lines...) Expand all
78 mURLs := []string{} 84 mURLs := []string{}
79 if *masterOnly != "" { 85 if *masterOnly != "" {
80 mURLs = append(mURLs, *masterOnly) 86 mURLs = append(mURLs, *masterOnly)
81 } 87 }
82 88
83 err := readJSONFile(*gatekeeperJSON, &gk) 89 err := readJSONFile(*gatekeeperJSON, &gk)
84 if err != nil { 90 if err != nil {
85 log.Fatalf("Error reading gatekeeper json: %v", err) 91 log.Fatalf("Error reading gatekeeper json: %v", err)
86 } 92 }
87 93
88 » // Use a direct reference to the client implementation so we can 94 » err = readJSONFile(*gatekeeperTreesJSON, &gkt)
89 » // report request processing stats. 95 » if err != nil {
90 » a := analyzer.New(nil, 10) 96 » » log.Fatalf("Error reading gatekeeper json: %v", err)
97 » }
98
99 » a := analyzer.New(nil, 2, 5)
100
101 » a.TreeOnly = *treeOnly
102 » a.MasterOnly = *masterOnly
103 » a.BuilderOnly = *builderOnly
104 » a.BuildOnly = *buildOnly
105
106 » if *treeOnly != "" {
107 » » if t, ok := gkt[*treeOnly]; ok {
108 » » » for _, url := range t.Masters {
109 » » » » mURLs = append(mURLs, fmt.Sprintf("%s/json", url ))
110 » » » }
111 » » } else {
112 » » » log.Fatalf("Unrecoginzed tree: %s", *treeOnly)
113 » » }
114 » }
91 115
92 bes, errs := a.Client.BuildExtracts(mURLs) 116 bes, errs := a.Client.BuildExtracts(mURLs)
93 log.Infof("Build Extracts read: %d", len(bes)) 117 log.Infof("Build Extracts read: %d", len(bes))
94 log.Infof("Errors: %d", len(errs)) 118 log.Infof("Errors: %d", len(errs))
95 for url, err := range errs { 119 for url, err := range errs {
96 log.Errorf("Error reading build extract from %s : %s", url, err) 120 log.Errorf("Error reading build extract from %s : %s", url, err)
97 } 121 }
98 122
99 alerts := &messages.Alerts{} 123 alerts := &messages.Alerts{}
100 124
(...skipping 17 matching lines...) Expand all
118 } 142 }
119 } 143 }
120 144
121 log.Infof("Filtered failures: %v", filteredFailures) 145 log.Infof("Filtered failures: %v", filteredFailures)
122 a.Client.DumpStats() 146 a.Client.DumpStats()
123 log.Infof("Elapsed time: %v", time.Since(start)) 147 log.Infof("Elapsed time: %v", time.Since(start))
124 if len(errs) > 0 { 148 if len(errs) > 0 {
125 os.Exit(1) 149 os.Exit(1)
126 } 150 }
127 } 151 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698