@@ -11,27 +11,27 @@ import (
11
11
12
12
// Jim is a chaos monkey
13
13
type Jim struct {
14
- disconnectChance float64
15
- acceptChance float64
16
- linkSpeedAffect float64
17
- linkSpeedMin float64
18
- linkSpeedMax float64
19
- rejectSenderChance float64
20
- rejectRecipientChance float64
21
- rejectAuthChance float64
14
+ DisconnectChance float64
15
+ AcceptChance float64
16
+ LinkSpeedAffect float64
17
+ LinkSpeedMin float64
18
+ LinkSpeedMax float64
19
+ RejectSenderChance float64
20
+ RejectRecipientChance float64
21
+ RejectAuthChance float64
22
22
logf func (message string , args ... interface {})
23
23
}
24
24
25
25
// RegisterFlags implements ChaosMonkey.RegisterFlags
26
26
func (j * Jim ) RegisterFlags () {
27
- flag .Float64Var (& j .disconnectChance , "jim-disconnect" , 0.005 , "Chance of disconnect" )
28
- flag .Float64Var (& j .acceptChance , "jim-accept" , 0.99 , "Chance of accept" )
29
- flag .Float64Var (& j .linkSpeedAffect , "jim-linkspeed-affect" , 0.1 , "Chance of affecting link speed" )
30
- flag .Float64Var (& j .linkSpeedMin , "jim-linkspeed-min" , 1024 , "Minimum link speed (in bytes per second)" )
31
- flag .Float64Var (& j .linkSpeedMax , "jim-linkspeed-max" , 10240 , "Maximum link speed (in bytes per second)" )
32
- flag .Float64Var (& j .rejectSenderChance , "jim-reject-sender" , 0.05 , "Chance of rejecting a sender (MAIL FROM)" )
33
- flag .Float64Var (& j .rejectRecipientChance , "jim-reject-recipient" , 0.05 , "Chance of rejecting a recipient (RCPT TO)" )
34
- flag .Float64Var (& j .rejectAuthChance , "jim-reject-auth" , 0.05 , "Chance of rejecting authentication (AUTH)" )
27
+ flag .Float64Var (& j .DisconnectChance , "jim-disconnect" , 0.005 , "Chance of disconnect" )
28
+ flag .Float64Var (& j .AcceptChance , "jim-accept" , 0.99 , "Chance of accept" )
29
+ flag .Float64Var (& j .LinkSpeedAffect , "jim-linkspeed-affect" , 0.1 , "Chance of affecting link speed" )
30
+ flag .Float64Var (& j .LinkSpeedMin , "jim-linkspeed-min" , 1024 , "Minimum link speed (in bytes per second)" )
31
+ flag .Float64Var (& j .LinkSpeedMax , "jim-linkspeed-max" , 10240 , "Maximum link speed (in bytes per second)" )
32
+ flag .Float64Var (& j .RejectSenderChance , "jim-reject-sender" , 0.05 , "Chance of rejecting a sender (MAIL FROM)" )
33
+ flag .Float64Var (& j .RejectRecipientChance , "jim-reject-recipient" , 0.05 , "Chance of rejecting a recipient (RCPT TO)" )
34
+ flag .Float64Var (& j .RejectAuthChance , "jim-reject-auth" , 0.05 , "Chance of rejecting authentication (AUTH)" )
35
35
}
36
36
37
37
// Configure implements ChaosMonkey.Configure
@@ -40,9 +40,15 @@ func (j *Jim) Configure(logf func(string, ...interface{})) {
40
40
rand .Seed (time .Now ().Unix ())
41
41
}
42
42
43
+ // ConfigureFrom lets us configure a new Jim from an old one without
44
+ // having to expose logf (and any other future private vars)
45
+ func (j * Jim ) ConfigureFrom (j2 * Jim ) {
46
+ j .Configure (j2 .logf )
47
+ }
48
+
43
49
// Accept implements ChaosMonkey.Accept
44
50
func (j * Jim ) Accept (conn net.Conn ) bool {
45
- if rand .Float64 () > j .acceptChance {
51
+ if rand .Float64 () > j .AcceptChance {
46
52
j .logf ("Jim: Rejecting connection\n " )
47
53
return false
48
54
}
@@ -53,9 +59,9 @@ func (j *Jim) Accept(conn net.Conn) bool {
53
59
// LinkSpeed implements ChaosMonkey.LinkSpeed
54
60
func (j * Jim ) LinkSpeed () * linkio.Throughput {
55
61
rand .Seed (time .Now ().Unix ())
56
- if rand .Float64 () < j .linkSpeedAffect {
57
- lsDiff := j .linkSpeedMax - j .linkSpeedMin
58
- lsAffect := j .linkSpeedMin + (lsDiff * rand .Float64 ())
62
+ if rand .Float64 () < j .LinkSpeedAffect {
63
+ lsDiff := j .LinkSpeedMax - j .LinkSpeedMin
64
+ lsAffect := j .LinkSpeedMin + (lsDiff * rand .Float64 ())
59
65
f := linkio .Throughput (lsAffect ) * linkio .BytePerSecond
60
66
j .logf ("Jim: Restricting throughput to %s\n " , f )
61
67
return & f
@@ -66,7 +72,7 @@ func (j *Jim) LinkSpeed() *linkio.Throughput {
66
72
67
73
// ValidRCPT implements ChaosMonkey.ValidRCPT
68
74
func (j * Jim ) ValidRCPT (rcpt string ) bool {
69
- if rand .Float64 () < j .rejectRecipientChance {
75
+ if rand .Float64 () < j .RejectRecipientChance {
70
76
j .logf ("Jim: Rejecting recipient %s\n " , rcpt )
71
77
return false
72
78
}
@@ -76,7 +82,7 @@ func (j *Jim) ValidRCPT(rcpt string) bool {
76
82
77
83
// ValidMAIL implements ChaosMonkey.ValidMAIL
78
84
func (j * Jim ) ValidMAIL (mail string ) bool {
79
- if rand .Float64 () < j .rejectSenderChance {
85
+ if rand .Float64 () < j .RejectSenderChance {
80
86
j .logf ("Jim: Rejecting sender %s\n " , mail )
81
87
return false
82
88
}
@@ -86,7 +92,7 @@ func (j *Jim) ValidMAIL(mail string) bool {
86
92
87
93
// ValidAUTH implements ChaosMonkey.ValidAUTH
88
94
func (j * Jim ) ValidAUTH (mechanism string , args ... string ) bool {
89
- if rand .Float64 () < j .rejectAuthChance {
95
+ if rand .Float64 () < j .RejectAuthChance {
90
96
j .logf ("Jim: Rejecting authentication %s: %s\n " , mechanism , args )
91
97
return false
92
98
}
@@ -96,7 +102,7 @@ func (j *Jim) ValidAUTH(mechanism string, args ...string) bool {
96
102
97
103
// Disconnect implements ChaosMonkey.Disconnect
98
104
func (j * Jim ) Disconnect () bool {
99
- if rand .Float64 () < j .disconnectChance {
105
+ if rand .Float64 () < j .DisconnectChance {
100
106
j .logf ("Jim: Being nasty, kicking them off\n " )
101
107
return true
102
108
}
0 commit comments