OLD | NEW |
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 package analyzer | 5 package analyzer |
6 | 6 |
7 import ( | 7 import ( |
8 "errors" | 8 "errors" |
9 "fmt" | 9 "fmt" |
10 "net/url" | 10 "net/url" |
11 "path/filepath" | 11 "path/filepath" |
12 "sort" | 12 "sort" |
13 "strings" | 13 "strings" |
14 "sync" | 14 "sync" |
15 "time" | 15 "time" |
16 | 16 |
17 » "github.com/Sirupsen/logrus" | 17 » "infra/libs/logging" |
18 | 18 |
19 "infra/monitoring/client" | 19 "infra/monitoring/client" |
20 "infra/monitoring/messages" | 20 "infra/monitoring/messages" |
21 ) | 21 ) |
22 | 22 |
23 const ( | 23 const ( |
24 // StepCompletedRun is a synthetic step name used to indicate the build
run is complete. | 24 // StepCompletedRun is a synthetic step name used to indicate the build
run is complete. |
25 StepCompletedRun = "completed run" | 25 StepCompletedRun = "completed run" |
26 treeCloserPri = 0 | 26 treeCloserPri = 0 |
27 staleMasterSev = 0 | 27 staleMasterSev = 0 |
28 staleBuilderSev = 0 | 28 staleBuilderSev = 0 |
29 hungBuilderSev = 1 | 29 hungBuilderSev = 1 |
30 idleBuilderSev = 1 | 30 idleBuilderSev = 1 |
31 offlineBuilderSev = 1 | 31 offlineBuilderSev = 1 |
32 resOK = float64(1) | 32 resOK = float64(1) |
33 resInfraFailure = float64(4) | 33 resInfraFailure = float64(4) |
34 ) | 34 ) |
35 | 35 |
36 var ( | 36 var ( |
37 » log = logrus.New() | 37 » log = logging.DefaultLogger |
38 ) | 38 ) |
39 | 39 |
40 var ( | 40 var ( |
41 errNoBuildSteps = errors.New("No build steps") | 41 errNoBuildSteps = errors.New("No build steps") |
42 errNoRecentBuilds = errors.New("No recent builds") | 42 errNoRecentBuilds = errors.New("No recent builds") |
43 errNoCompletedBuilds = errors.New("No completed builds") | 43 errNoCompletedBuilds = errors.New("No completed builds") |
44 ) | 44 ) |
45 | 45 |
46 // StepAnalyzer reasons about a stepFailure and produces a set of reasons for th
e | 46 // StepAnalyzer reasons about a stepFailure and produces a set of reasons for th
e |
47 // failure. It also indicates whether or not it recognizes the stepFailure. | 47 // failure. It also indicates whether or not it recognizes the stepFailure. |
(...skipping 692 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
740 for _, r := range reasons { | 740 for _, r := range reasons { |
741 bf.Reasons = append(bf.Reasons, messages.Reason{ | 741 bf.Reasons = append(bf.Reasons, messages.Reason{ |
742 TestName: r, | 742 TestName: r, |
743 Step: f.step.Name, | 743 Step: f.step.Name, |
744 URL: f.URL(), | 744 URL: f.URL(), |
745 }) | 745 }) |
746 } | 746 } |
747 | 747 |
748 alr.Key = alertKey(f.masterName, f.builderName, f.step.N
ame) | 748 alr.Key = alertKey(f.masterName, f.builderName, f.step.N
ame) |
749 if len(bf.Reasons) == 0 { | 749 if len(bf.Reasons) == 0 { |
750 » » » » log.Warnf("No reasons for step failure: %s", alr
.Key) | 750 » » » » log.Warningf("No reasons for step failure: %s",
alr.Key) |
751 bf.Reasons = append(bf.Reasons, messages.Reason{ | 751 bf.Reasons = append(bf.Reasons, messages.Reason{ |
752 Step: f.step.Name, | 752 Step: f.step.Name, |
753 URL: f.URL(), | 753 URL: f.URL(), |
754 }) | 754 }) |
755 } | 755 } |
756 | 756 |
757 alr.Extension = bf | 757 alr.Extension = bf |
758 | 758 |
759 rs <- res{ | 759 rs <- res{ |
760 f: f, | 760 f: f, |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
819 // even though they're specified in gatekeeper.json | 819 // even though they're specified in gatekeeper.json |
820 for _, s := range mc.ExcludedSteps { | 820 for _, s := range mc.ExcludedSteps { |
821 if step == s { | 821 if step == s { |
822 return true | 822 return true |
823 } | 823 } |
824 } | 824 } |
825 | 825 |
826 bc, ok := mc.Builders[builder] | 826 bc, ok := mc.Builders[builder] |
827 if !ok { | 827 if !ok { |
828 if bc, ok = mc.Builders["*"]; !ok { | 828 if bc, ok = mc.Builders["*"]; !ok { |
829 » » » log.Warnf("Unknown %s builder %s", master, builder) | 829 » » » log.Warningf("Unknown %s builder %s", master, builder) |
830 return true | 830 return true |
831 } | 831 } |
832 } | 832 } |
833 | 833 |
834 for _, esName := range bc.ExcludedSteps { | 834 for _, esName := range bc.ExcludedSteps { |
835 if esName == step || esName == "*" { | 835 if esName == step || esName == "*" { |
836 return true | 836 return true |
837 } | 837 } |
838 } | 838 } |
839 | 839 |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
903 masterName string | 903 masterName string |
904 builderName string | 904 builderName string |
905 build messages.Build | 905 build messages.Build |
906 step messages.Step | 906 step messages.Step |
907 } | 907 } |
908 | 908 |
909 // URL returns a url to builder step failure page. | 909 // URL returns a url to builder step failure page. |
910 func (f stepFailure) URL() string { | 910 func (f stepFailure) URL() string { |
911 return client.StepURL(f.masterName, f.builderName, f.step.Name, f.build.
Number) | 911 return client.StepURL(f.masterName, f.builderName, f.step.Name, f.build.
Number) |
912 } | 912 } |
OLD | NEW |