Compare commits
216 Commits
Author | SHA1 | Date | |
---|---|---|---|
b9d87e8516 | |||
|
cf1ac181cc | ||
|
f05a6e9fa3 | ||
|
c0ca49d4f2 | ||
|
0f642482b2 | ||
9b0507fce6 | |||
02b3e429fc | |||
818a3f3829 | |||
546133bc46 | |||
8b48e7edaf | |||
6bb206ccdb | |||
8658efc09e | |||
|
edc2279434 | ||
|
4bbe71729c | ||
|
53cbb86710 | ||
|
97990cbe29 | ||
|
fff7c5e816 | ||
|
70cf269dde | ||
|
e519baf0f9 | ||
|
e124e126aa | ||
e0a8aa5a14 | |||
2279ebb89c | |||
d319d4a90c | |||
88623f6327 | |||
|
5803380263 | ||
|
8faabb4d44 | ||
1153b75322 | |||
56788d7150 | |||
0eb21d2083 | |||
0022ebaf88 | |||
|
9a8596341f | ||
|
cab63d6b76 | ||
6c17b20c55 | |||
27ccc54458 | |||
f66b7ab587 | |||
dd93be535c | |||
|
48d5c6fe90 | ||
|
3e141e5318 | ||
69b5949f71 | |||
45edd76c8b | |||
467d7aa015 | |||
|
b1b94336b2 | ||
0460f1c793 | |||
7e34a5a7b1 | |||
99e60f656c | |||
|
13b02aa115 | ||
4593e5bddb | |||
7a66f37556 | |||
|
bcb8130f78 | ||
|
aaffb0371e | ||
|
c87a732e2a | ||
32bf461026 | |||
560f1ff34b | |||
|
ec26b84dc9 | ||
|
0b89e88905 | ||
|
906b44a9c7 | ||
|
9f42fcfcc4 | ||
|
96e323a705 | ||
|
de2f6cf0c4 | ||
67a952003d | |||
c386294cd4 | |||
|
4b85b640ae | ||
|
84c284677e | ||
|
18399ecf15 | ||
|
3f7f19a3c6 | ||
|
09e139cdf8 | ||
|
c446a854ee | ||
|
49977ae8a2 | ||
|
2f36e01c57 | ||
|
bd78aba16d | ||
|
d732ab47d7 | ||
|
767dcfa82a | ||
|
1661db5d47 | ||
|
e9169c8419 | ||
|
6278bea13b | ||
|
f187283bd5 | ||
|
f1e0aacee3 | ||
|
1c9b924eab | ||
453cd37217 | |||
|
21ce1d3567 | ||
|
8e76a2e1c9 | ||
|
c0412f6eba | ||
|
3c8171af8e | ||
|
e03fc296ee | ||
|
d1fe47db6f | ||
|
e1cd5774f1 | ||
8bfc231a7e | |||
|
0288082cd5 | ||
|
af74eaaeeb | ||
|
3442702197 | ||
|
b82285e3cc | ||
|
5d9865b26d | ||
|
459383b733 | ||
|
8ab87cda82 | ||
62993ea985 | |||
3cb1d9bf20 | |||
|
f99aa7536e | ||
|
801a520255 | ||
|
d083edc2f3 | ||
6c118a82c0 | |||
3c35f84913 | |||
|
43036b4312 | ||
|
0f5adff167 | ||
df0e91fb23 | |||
d70ea75fb7 | |||
|
c1f27d51f7 | ||
|
54f959ac23 | ||
|
ae9e3acbd2 | ||
|
2aeaf86e59 | ||
|
5968184b08 | ||
|
af820f23d9 | ||
|
a923fb1adc | ||
bc5c654154 | |||
|
b027a83aad | ||
|
1bd387413e | ||
|
53d815b93d | ||
|
3141f97f41 | ||
|
ad27697bc7 | ||
|
332f035622 | ||
|
3b205d80a5 | ||
|
e3768280ac | ||
|
f6c0495c04 | ||
|
c126c34972 | ||
|
ef044f1cf1 | ||
6fe4b4dfbe | |||
|
ee818c8149 | ||
9d75a87dd6 | |||
|
47956d1ac6 | ||
6b8f5bf013 | |||
|
1e917ec3e8 | ||
|
9d8e6cf216 | ||
|
96b0e82113 | ||
|
01b5056671 | ||
|
1d2c7103e4 | ||
|
292d30d1bd | ||
add257fd5e | |||
b6488fa36f | |||
|
778535a437 | ||
084270bbb8 | |||
|
1bc6ec6813 | ||
98c38b4fcf | |||
1d13b8e746 | |||
861cf82f67 | |||
|
7a0488df74 | ||
44cc0929bd | |||
|
5a2cc7a131 | ||
|
e869fb9699 | ||
|
33ab37c661 | ||
|
8fba9136b2 | ||
|
df53236853 | ||
bce3619638 | |||
247768b5d6 | |||
4c5da8eed6 | |||
1c4da28480 | |||
|
5400798e9c | ||
|
75feb5c4ae | ||
|
071dee6d21 | ||
b65df5f7be | |||
613c1482d7 | |||
|
f845440568 | ||
afb534b0e1 | |||
333f6aab21 | |||
|
1b7395ba0d | ||
|
1d9459d8f3 | ||
|
b37141f5ce | ||
|
1ab8fba661 | ||
|
396f24e007 | ||
|
ccb800b6af | ||
|
e3d68b88d9 | ||
|
41b0e25a5e | ||
|
491b529105 | ||
|
4bc441f047 | ||
|
2999fb294c | ||
|
55c094fc56 | ||
|
2f42da485d | ||
|
343d33270a | ||
|
c48a402e55 | ||
|
f652a9ecaf | ||
|
430055a6ff | ||
|
3f4f2f4a1b | ||
|
b4efa1ee54 | ||
|
f97188cdad | ||
|
32ecd6a5d4 | ||
|
fdb7d2bf64 | ||
18fdf819f1 | |||
|
74a51cfcf6 | ||
59795d0234 | |||
f8de36ba5c | |||
|
ec8ff4b3ba | ||
|
8cfdd5ff09 | ||
f2fb945064 | |||
6855ef6f2a | |||
ee06c0b80e | |||
6f87b18248 | |||
31234a10d1 | |||
80be41d486 | |||
2905850943 | |||
5c445a2f66 | |||
7c4fa20c2a | |||
6c15664377 | |||
615fb0cec0 | |||
5de7942272 | |||
|
e0e54f9350 | ||
|
a96c8b2d23 | ||
5606de7c26 | |||
|
dacb5605d7 | ||
06172b34cd | |||
|
7af2b6df66 | ||
|
3184ab3389 | ||
6752454838 | |||
|
5c82dd84b4 | ||
|
06b418da8e | ||
d08a6d0b67 | |||
|
061a76288d | ||
|
52ff8e5cc0 | ||
|
34fb3c682f |
|
@ -26,12 +26,28 @@ services:
|
|||
- "traefik.http.routers.http-catchall.middlewares=redirect-to-https"
|
||||
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
|
||||
|
||||
tapas-db:
|
||||
image: mongo
|
||||
restart: unless-stopped
|
||||
container_name: tapas_mongodb
|
||||
environment:
|
||||
MONGO_INITDB_ROOT_USERNAME: root
|
||||
MONGO_INITDB_ROOT_PASSWORD: password
|
||||
ports:
|
||||
- "27017:27017"
|
||||
command: mongod --quiet --logpath /dev/null
|
||||
|
||||
tapas-tasks:
|
||||
image: openjdk
|
||||
command: "java -jar /data/tapas-tasks-0.0.1-SNAPSHOT.jar"
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- tapas-db
|
||||
volumes:
|
||||
- ./:/data/
|
||||
environment:
|
||||
roster.uri: http://roster:8082
|
||||
spring.data.mongodb.uri: mongodb://root:password@tapas-db:27017
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.tapas-tasks.rule=Host(`tapas-tasks.${PUB_IP}.nip.io`)"
|
||||
|
@ -41,27 +57,62 @@ services:
|
|||
- "traefik.http.routers.tapas-tasks.entryPoints=web,websecure"
|
||||
- "traefik.http.routers.tapas-tasks.tls.certresolver=le"
|
||||
|
||||
assignment:
|
||||
tapas-auction-house:
|
||||
image: openjdk
|
||||
command: "java -jar /data/assignment-0.0.1-SNAPSHOT.jar"
|
||||
command: "java -jar /data/tapas-auction-house-0.0.1-SNAPSHOT.jar"
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- tapas-db
|
||||
volumes:
|
||||
- ./:/data/
|
||||
environment:
|
||||
mqtt.broker.uri: tcp://broker.hivemq.com:1883
|
||||
discovery.endpoint.uri: https://tapas-auction-house.86-119-34-242.nip.io
|
||||
auction.house.uri: https://tapas-auction-house.86-119-35-40.nip.io
|
||||
tasks.list.uri: https://tapas-tasks.86-119-35-40.nip.io
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.assignment.rule=Host(`assignment.${PUB_IP}.nip.io`)"
|
||||
- "traefik.http.routers.assignment.service=assignment"
|
||||
- "traefik.http.services.assignment.loadbalancer.server.port=8082"
|
||||
- "traefik.http.routers.assignment.tls=true"
|
||||
- "traefik.http.routers.assignment.entryPoints=web,websecure"
|
||||
- "traefik.http.routers.assignment.tls.certresolver=le"
|
||||
- "traefik.http.routers.tapas-auction-house.rule=Host(`tapas-auction-house.${PUB_IP}.nip.io`)"
|
||||
- "traefik.http.routers.tapas-auction-house.service=tapas-auction-house"
|
||||
- "traefik.http.services.tapas-auction-house.loadbalancer.server.port=8086"
|
||||
- "traefik.http.routers.tapas-auction-house.tls=true"
|
||||
- "traefik.http.routers.tapas-auction-house.entryPoints=web,websecure"
|
||||
- "traefik.http.routers.tapas-auction-house.tls.certresolver=le"
|
||||
|
||||
roster:
|
||||
image: openjdk
|
||||
command: "java -jar /data/roster-0.0.1-SNAPSHOT.jar"
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- tapas-db
|
||||
volumes:
|
||||
- ./:/data/
|
||||
environment:
|
||||
task.list.uri: http://tapas-tasks:8081
|
||||
auction.house.uri: http://tapas-auction-house:8086
|
||||
executor.pool.uri: http://executor-pool:8083
|
||||
mqtt.broker.uri: tcp://broker.hivemq.com:1883
|
||||
spring.data.mongodb.uri: mongodb://root:password@tapas-db:27017
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.roster.rule=Host(`roster.${PUB_IP}.nip.io`)"
|
||||
- "traefik.http.routers.roster.service=roster"
|
||||
- "traefik.http.services.roster.loadbalancer.server.port=8082"
|
||||
- "traefik.http.routers.roster.tls=true"
|
||||
- "traefik.http.routers.roster.entryPoints=web,websecure"
|
||||
- "traefik.http.routers.roster.tls.certresolver=le"
|
||||
|
||||
executor-pool:
|
||||
image: openjdk
|
||||
command: "java -jar /data/executor-pool-0.0.1-SNAPSHOT.jar"
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- tapas-db
|
||||
volumes:
|
||||
- ./:/data/
|
||||
environment:
|
||||
mqtt.broker.uri: tcp://broker.hivemq.com:1883
|
||||
spring.data.mongodb.uri: mongodb://root:password@tapas-db:27017
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.executor-pool.rule=Host(`executor-pool.${PUB_IP}.nip.io`)"
|
||||
|
@ -71,38 +122,72 @@ services:
|
|||
- "traefik.http.routers.executor-pool.entryPoints=web,websecure"
|
||||
- "traefik.http.routers.executor-pool.tls.certresolver=le"
|
||||
|
||||
executor1:
|
||||
executor-computation:
|
||||
image: openjdk
|
||||
command: "java -jar /data/executor1-0.0.1-SNAPSHOT.jar"
|
||||
command: "java -jar /data/executor-computation-0.0.1-SNAPSHOT.jar"
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- executor-pool
|
||||
- assignment
|
||||
- roster
|
||||
- tapas-db
|
||||
volumes:
|
||||
- ./:/data/
|
||||
environment:
|
||||
executor.type: COMPUTATION
|
||||
executor.uri: http://executor-computation:8085
|
||||
executor.pool.uri: http://executor-pool:8083
|
||||
roster.uri: http://roster:8082
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.executor1.rule=Host(`executor1.${PUB_IP}.nip.io`)"
|
||||
- "traefik.http.routers.executor1.service=executor1"
|
||||
- "traefik.http.services.executor1.loadbalancer.server.port=8084"
|
||||
- "traefik.http.routers.executor1.tls=true"
|
||||
- "traefik.http.routers.executor1.entryPoints=web,websecure"
|
||||
- "traefik.http.routers.executor1.tls.certresolver=le"
|
||||
|
||||
executor2:
|
||||
- "traefik.http.routers.executor-computation.rule=Host(`executor-computation.${PUB_IP}.nip.io`)"
|
||||
- "traefik.http.routers.executor-computation.service=executor-computation"
|
||||
- "traefik.http.services.executor-computation.loadbalancer.server.port=8085"
|
||||
- "traefik.http.routers.executor-computation.tls=true"
|
||||
- "traefik.http.routers.executor-computation.entryPoints=web,websecure"
|
||||
- "traefik.http.routers.executor-computation.tls.certresolver=le"
|
||||
executor-robot:
|
||||
image: openjdk
|
||||
command: "java -jar /data/executor2-0.0.1-SNAPSHOT.jar"
|
||||
command: "java -jar /data/executor-robot-0.0.1-SNAPSHOT.jar"
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- executor-pool
|
||||
- assignment
|
||||
- roster
|
||||
- tapas-db
|
||||
volumes:
|
||||
- ./:/data/
|
||||
environment:
|
||||
executor.type: SMALLROBOT
|
||||
executor.uri: http://executor-robot:8084
|
||||
executor.pool.uri: http://executor-pool:8083
|
||||
roster.uri: http://roster:8082
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.executor2.rule=Host(`executor2.${PUB_IP}.nip.io`)"
|
||||
- "traefik.http.routers.executor2.service=executor2"
|
||||
- "traefik.http.services.executor2.loadbalancer.server.port=8085"
|
||||
- "traefik.http.routers.executor2.tls=true"
|
||||
- "traefik.http.routers.executor2.entryPoints=web,websecure"
|
||||
- "traefik.http.routers.executor2.tls.certresolver=le"
|
||||
- "traefik.http.routers.executor-robot.rule=Host(`executor-robot.${PUB_IP}.nip.io`)"
|
||||
- "traefik.http.routers.executor-robot.service=executor-robot"
|
||||
- "traefik.http.services.executor-robot.loadbalancer.server.port=8084"
|
||||
- "traefik.http.routers.executor-robot.tls=true"
|
||||
- "traefik.http.routers.executor-robot.entryPoints=web,websecure"
|
||||
- "traefik.http.routers.executor-robot.tls.certresolver=le"
|
||||
executor-humidity:
|
||||
image: openjdk
|
||||
command: "java -jar /data/executor-humidity-0.0.1-SNAPSHOT.jar"
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- executor-pool
|
||||
- roster
|
||||
- tapas-db
|
||||
volumes:
|
||||
- ./:/data/
|
||||
environment:
|
||||
executor.type: HUMIDITY
|
||||
executor.uri: http://executor-humidity:8087
|
||||
executor.pool.uri: http://executor-pool:8083
|
||||
roster.uri: http://roster:8082
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.executor-computation.rule=Host(`executor-humidity.${PUB_IP}.nip.io`)"
|
||||
- "traefik.http.routers.executor-computation.service=executor-computation"
|
||||
- "traefik.http.services.executor-computation.loadbalancer.server.port=8087"
|
||||
- "traefik.http.routers.executor-computation.tls=true"
|
||||
- "traefik.http.routers.executor-computation.entryPoints=web,websecure"
|
||||
- "traefik.http.routers.executor-computation.tls.certresolver=le"
|
||||
|
|
266
.experiments/executor-computation/chaostoolkit.log
Normal file
266
.experiments/executor-computation/chaostoolkit.log
Normal file
|
@ -0,0 +1,266 @@
|
|||
[36m[2021-11-28 16:28:04 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-28 16:28:04 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-28 16:28:04 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[32m[2021-11-28 16:28:05 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-28 16:28:05 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-28 16:28:05 INFO] [run:319][39m Running experiment: What is the impact of an expired certificate on our application chain?
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-28 16:28:05 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-28 16:28:05 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-28 16:28:05 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-28 16:28:05 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-28 16:28:05 INFO] [activity:188][39m Action: enable_chaosmonkey
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [python:33][39m Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [activity:260][39m Activity failed
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 174, in _new_conn
|
||||
conn = connection.create_connection(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 96, in create_connection
|
||||
raise err
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 86, in create_connection
|
||||
sock.connect(sa)
|
||||
ConnectionRefusedError: [Errno 61] Connection refused
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 699, in urlopen
|
||||
httplib_response = self._make_request(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 394, in _make_request
|
||||
conn.request(method, url, **httplib_request_kw)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 239, in request
|
||||
super(HTTPConnection, self).request(method, url, body=body, headers=headers)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1279, in request
|
||||
self._send_request(method, url, body, headers, encode_chunked)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1325, in _send_request
|
||||
self.endheaders(body, encode_chunked=encode_chunked)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1274, in endheaders
|
||||
self._send_output(message_body, encode_chunked=encode_chunked)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1034, in _send_output
|
||||
self.send(msg)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 974, in send
|
||||
self.connect()
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 205, in connect
|
||||
conn = self._new_conn()
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn
|
||||
raise NewConnectionError(
|
||||
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x10438d220>: Failed to establish a new connection: [Errno 61] Connection refused
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
|
||||
resp = conn.urlopen(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 755, in urlopen
|
||||
retries = retries.increment(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/retry.py", line 574, in increment
|
||||
raise MaxRetryError(_pool, url, error or ResponseError(cause))
|
||||
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8085): Max retries exceeded with url: /actuator/chaosmonkey/enable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10438d220>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
|
||||
return func(**arguments)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 24, in enable_chaosmonkey
|
||||
response = api.call_api(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
|
||||
return requests.request(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
|
||||
return session.request(method=method, url=url, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
|
||||
resp = self.send(prep, **send_kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
|
||||
r = adapter.send(request, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
|
||||
raise ConnectionError(e, request=request)
|
||||
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8085): Max retries exceeded with url: /actuator/chaosmonkey/enable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10438d220>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/activity.py", line 253, in run_activity
|
||||
result = run_python_activity(activity, configuration, secrets)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 58, in run_python_activity
|
||||
raise ActivityFailed(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
|
||||
return func(**arguments)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 24, in enable_chaosmonkey
|
||||
response = api.call_api(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
|
||||
return requests.request(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
|
||||
return session.request(method=method, url=url, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
|
||||
resp = self.send(prep, **send_kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
|
||||
r = adapter.send(request, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
|
||||
raise ConnectionError(e, request=request)
|
||||
chaoslib.exceptions.ActivityFailed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8085): Max retries exceeded with url: /actuator/chaosmonkey/enable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10438d220>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
[31m[2021-11-28 16:28:05 ERROR] [activity:213][39m => failed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8085): Max retries exceeded with url: /actuator/chaosmonkey/enable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10438d220>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-28 16:28:05 INFO] [activity:188][39m Action: configure_assaults
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [python:33][39m Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [activity:260][39m Activity failed
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 174, in _new_conn
|
||||
conn = connection.create_connection(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 96, in create_connection
|
||||
raise err
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 86, in create_connection
|
||||
sock.connect(sa)
|
||||
ConnectionRefusedError: [Errno 61] Connection refused
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 699, in urlopen
|
||||
httplib_response = self._make_request(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 394, in _make_request
|
||||
conn.request(method, url, **httplib_request_kw)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 239, in request
|
||||
super(HTTPConnection, self).request(method, url, body=body, headers=headers)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1279, in request
|
||||
self._send_request(method, url, body, headers, encode_chunked)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1325, in _send_request
|
||||
self.endheaders(body, encode_chunked=encode_chunked)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1274, in endheaders
|
||||
self._send_output(message_body, encode_chunked=encode_chunked)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1034, in _send_output
|
||||
self.send(msg)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 974, in send
|
||||
self.connect()
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 205, in connect
|
||||
conn = self._new_conn()
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn
|
||||
raise NewConnectionError(
|
||||
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x10438de50>: Failed to establish a new connection: [Errno 61] Connection refused
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
|
||||
resp = conn.urlopen(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 755, in urlopen
|
||||
retries = retries.increment(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/retry.py", line 574, in increment
|
||||
raise MaxRetryError(_pool, url, error or ResponseError(cause))
|
||||
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8085): Max retries exceeded with url: /actuator/chaosmonkey/assaults (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10438de50>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
|
||||
return func(**arguments)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 83, in change_assaults_configuration
|
||||
response = api.call_api(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
|
||||
return requests.request(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
|
||||
return session.request(method=method, url=url, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
|
||||
resp = self.send(prep, **send_kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
|
||||
r = adapter.send(request, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
|
||||
raise ConnectionError(e, request=request)
|
||||
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8085): Max retries exceeded with url: /actuator/chaosmonkey/assaults (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10438de50>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/activity.py", line 253, in run_activity
|
||||
result = run_python_activity(activity, configuration, secrets)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 58, in run_python_activity
|
||||
raise ActivityFailed(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
|
||||
return func(**arguments)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 83, in change_assaults_configuration
|
||||
response = api.call_api(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
|
||||
return requests.request(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
|
||||
return session.request(method=method, url=url, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
|
||||
resp = self.send(prep, **send_kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
|
||||
r = adapter.send(request, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
|
||||
raise ConnectionError(e, request=request)
|
||||
chaoslib.exceptions.ActivityFailed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8085): Max retries exceeded with url: /actuator/chaosmonkey/assaults (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10438de50>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
[31m[2021-11-28 16:28:05 ERROR] [activity:213][39m => failed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8085): Max retries exceeded with url: /actuator/chaosmonkey/assaults (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10438de50>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-28 16:28:05 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-28 16:28:05 INFO] [rollback:27][39m No declared rollbacks, let's move on.
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-28 16:28:05 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-28 16:28:05 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-28 16:54:22 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-28 16:54:22 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-28 16:54:22 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[32m[2021-11-28 16:54:23 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-28 16:54:23 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-28 16:54:23 INFO] [run:319][39m Running experiment: What is the impact of an expired certificate on our application chain?
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-28 16:54:23 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-28 16:54:23 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-28 16:54:23 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-28 16:54:23 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-28 16:54:23 INFO] [activity:188][39m Action: enable_chaosmonkey
|
||||
[36m[2021-11-28 16:54:23 DEBUG] [python:33][39m Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-28 16:54:24 DEBUG] [activity:205][39m => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-28T15:54:24.502699Z"}'
|
||||
[36m[2021-11-28 16:54:24 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-28 16:54:24 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-28 16:54:24 INFO] [activity:188][39m Action: configure_assaults
|
||||
[36m[2021-11-28 16:54:24 DEBUG] [python:33][39m Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-28 16:54:25 DEBUG] [activity:205][39m => succeeded with 'Assault config has changed'
|
||||
[36m[2021-11-28 16:54:25 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-28 16:54:25 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-28 16:54:25 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-28 16:54:25 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-28 16:54:25 INFO] [rollback:27][39m No declared rollbacks, let's move on.
|
||||
[36m[2021-11-28 16:54:25 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-28 16:54:25 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-28 16:54:25 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-28 16:54:25 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-28 16:54:25 DEBUG] [caching:42][39m Clearing activities cache
|
24
.experiments/executor-computation/disable.json
Normal file
24
.experiments/executor-computation/disable.json
Normal file
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"title": "Disable chaos monkey",
|
||||
"description": "Disable",
|
||||
"tags": [],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [],
|
||||
"rollbacks": [
|
||||
{
|
||||
"name": "disable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8085/actuator"
|
||||
},
|
||||
"func": "disable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
]
|
||||
}
|
54
.experiments/executor-computation/exception.json
Normal file
54
.experiments/executor-computation/exception.json
Normal file
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"title": "Testing exceptions",
|
||||
"description": "Testing exceptions!",
|
||||
"tags": [],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [
|
||||
{
|
||||
"name": "enable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8085/actuator"
|
||||
},
|
||||
"func": "enable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
{
|
||||
"name": "configure_assaults",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8085/actuator",
|
||||
"assaults_configuration": {
|
||||
"level": 5,
|
||||
"latencyRangeStart": 2000,
|
||||
"latencyRangeEnd": 15000,
|
||||
"latencyActive": false,
|
||||
"killApplicationActive": false,
|
||||
"restartApplicationActive": false,
|
||||
"exceptionsActive": true,
|
||||
"exception": {
|
||||
"type": "java.lang.RuntimeException",
|
||||
"arguments": [
|
||||
{
|
||||
"className": "java.lang.String",
|
||||
"value": "Exception assault has been carried out"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"func": "change_assaults_configuration",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
],
|
||||
"rollbacks": []
|
||||
}
|
113
.experiments/executor-computation/journal.json
Normal file
113
.experiments/executor-computation/journal.json
Normal file
|
@ -0,0 +1,113 @@
|
|||
{
|
||||
"chaoslib-version": "1.23.0",
|
||||
"platform": "macOS-12.0-arm64-arm-64bit",
|
||||
"node": "Marcels-MBP-M1",
|
||||
"experiment": {
|
||||
"title": "What is the impact of an expired certificate on our application chain?",
|
||||
"description": "If a certificate expires, we should gracefully deal with the issue.",
|
||||
"tags": [
|
||||
"tls"
|
||||
],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [
|
||||
{
|
||||
"name": "enable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8085/actuator"
|
||||
},
|
||||
"func": "enable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
{
|
||||
"name": "configure_assaults",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8085/actuator",
|
||||
"assaults_configuration": {
|
||||
"level": 5,
|
||||
"latencyRangeStart": 2000,
|
||||
"latencyRangeEnd": 15000,
|
||||
"latencyActive": true,
|
||||
"exceptionsActive": false,
|
||||
"killApplicationActive": false,
|
||||
"restartApplicationActive": false
|
||||
}
|
||||
},
|
||||
"func": "change_assaults_configuration",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
],
|
||||
"rollbacks": [],
|
||||
"dry": null
|
||||
},
|
||||
"start": "2021-11-28T15:54:23.134945",
|
||||
"status": "completed",
|
||||
"deviated": false,
|
||||
"steady_states": {
|
||||
"before": null,
|
||||
"after": null,
|
||||
"during": []
|
||||
},
|
||||
"run": [
|
||||
{
|
||||
"activity": {
|
||||
"name": "enable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8085/actuator"
|
||||
},
|
||||
"func": "enable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
"output": "{\"status\":\"Chaos Monkey is enabled\",\"enabledAt\":\"2021-11-28T15:54:24.502699Z\"}",
|
||||
"status": "succeeded",
|
||||
"start": "2021-11-28T15:54:23.135657",
|
||||
"end": "2021-11-28T15:54:24.853870",
|
||||
"duration": 1.718213
|
||||
},
|
||||
{
|
||||
"activity": {
|
||||
"name": "configure_assaults",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8085/actuator",
|
||||
"assaults_configuration": {
|
||||
"level": 5,
|
||||
"latencyRangeStart": 2000,
|
||||
"latencyRangeEnd": 15000,
|
||||
"latencyActive": true,
|
||||
"exceptionsActive": false,
|
||||
"killApplicationActive": false,
|
||||
"restartApplicationActive": false
|
||||
}
|
||||
},
|
||||
"func": "change_assaults_configuration",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
"output": "Assault config has changed",
|
||||
"status": "succeeded",
|
||||
"start": "2021-11-28T15:54:24.854282",
|
||||
"end": "2021-11-28T15:54:25.705360",
|
||||
"duration": 0.851078
|
||||
}
|
||||
],
|
||||
"rollbacks": [],
|
||||
"end": "2021-11-28T15:54:25.706100",
|
||||
"duration": 2.609093189239502
|
||||
}
|
45
.experiments/executor-computation/kill-restart.json
Normal file
45
.experiments/executor-computation/kill-restart.json
Normal file
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"title": "Testing kill & restart",
|
||||
"description": "Testing behavoir when killing and restarting the application",
|
||||
"tags": [],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [
|
||||
{
|
||||
"name": "enable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8085/actuator"
|
||||
},
|
||||
"func": "enable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
{
|
||||
"name": "configure_assaults",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8085/actuator",
|
||||
"assaults_configuration": {
|
||||
"level": 5,
|
||||
"latencyRangeStart": 2000,
|
||||
"latencyRangeEnd": 5000,
|
||||
"latencyActive": false,
|
||||
"exceptionsActive": false,
|
||||
"killApplicationActive": true,
|
||||
"restartApplicationActive": true
|
||||
}
|
||||
},
|
||||
"func": "change_assaults_configuration",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
],
|
||||
"rollbacks": []
|
||||
}
|
45
.experiments/executor-computation/latency.json
Normal file
45
.experiments/executor-computation/latency.json
Normal file
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"title": "Testing latency",
|
||||
"description": "Testing latency!",
|
||||
"tags": [],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [
|
||||
{
|
||||
"name": "enable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8085/actuator"
|
||||
},
|
||||
"func": "enable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
{
|
||||
"name": "configure_assaults",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8085/actuator",
|
||||
"assaults_configuration": {
|
||||
"level": 5,
|
||||
"latencyRangeStart": 2000,
|
||||
"latencyRangeEnd": 15000,
|
||||
"latencyActive": true,
|
||||
"exceptionsActive": false,
|
||||
"killApplicationActive": false,
|
||||
"restartApplicationActive": false
|
||||
}
|
||||
},
|
||||
"func": "change_assaults_configuration",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
],
|
||||
"rollbacks": []
|
||||
}
|
49
.experiments/executor-computation/memory.json
Normal file
49
.experiments/executor-computation/memory.json
Normal file
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"title": "Testing memory",
|
||||
"description": "Testing memory!",
|
||||
"tags": [],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [
|
||||
{
|
||||
"name": "enable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8085/actuator"
|
||||
},
|
||||
"func": "enable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
{
|
||||
"name": "configure_assaults",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8085/actuator",
|
||||
"assaults_configuration": {
|
||||
"level": 5,
|
||||
"latencyActive": false,
|
||||
"killApplicationActive": false,
|
||||
"restartApplicationActive": false,
|
||||
"exceptionsActive": false,
|
||||
"memoryActive": true,
|
||||
"memoryMillisecondsHoldFilledMemory": 90000,
|
||||
"memoryMillisecondsWaitNextIncrease": 100,
|
||||
"memoryFillIncrementFraction": 0.9,
|
||||
"memoryFillTargetFraction": 0.95,
|
||||
"runtimeAssaultCronExpression": "*/1 * * * * ?"
|
||||
}
|
||||
},
|
||||
"func": "change_assaults_configuration",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
],
|
||||
"rollbacks": []
|
||||
}
|
14
.experiments/readme.md
Normal file
14
.experiments/readme.md
Normal file
|
@ -0,0 +1,14 @@
|
|||
# Create python env
|
||||
|
||||
python3 -m venv ~/.venvs/chaostk
|
||||
|
||||
# Activate python env
|
||||
source ~/.venvs/chaostk/bin/activate
|
||||
|
||||
# Run tests
|
||||
chaos run latency.json
|
||||
chaos run kill-restart.json
|
||||
|
||||
# Disable tests
|
||||
|
||||
chaos run disable.json
|
135
.experiments/roster/chaostoolkit.log
Normal file
135
.experiments/roster/chaostoolkit.log
Normal file
|
@ -0,0 +1,135 @@
|
|||
[36m[2021-11-28 14:43:28 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-28 14:43:28 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-28 14:43:28 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[32m[2021-11-28 14:43:42 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-28 14:43:42 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-28 14:43:42 INFO] [run:319][39m Running experiment: What is the impact of an expired certificate on our application chain?
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-28 14:43:42 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-28 14:43:42 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-28 14:43:42 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-28 14:43:42 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-28 14:43:42 INFO] [activity:188][39m Action: enable_chaosmonkey
|
||||
[36m[2021-11-28 14:43:42 DEBUG] [python:33][39m Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-28 14:43:43 DEBUG] [activity:260][39m Activity failed
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
|
||||
return func(**arguments)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 36, in enable_chaosmonkey
|
||||
raise FailedActivity(f"Enable ChaosMonkey failed: {response.text}")
|
||||
chaoslib.exceptions.ActivityFailed: Enable ChaosMonkey failed: {"timestamp":"2021-11-28T13:43:43.069+00:00","status":404,"error":"Not Found","message":"No message available","path":"/actuator/chaosmonkey/enable"}
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/activity.py", line 253, in run_activity
|
||||
result = run_python_activity(activity, configuration, secrets)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 58, in run_python_activity
|
||||
raise ActivityFailed(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
|
||||
return func(**arguments)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 36, in enable_chaosmonkey
|
||||
raise FailedActivity(f"Enable ChaosMonkey failed: {response.text}")
|
||||
chaoslib.exceptions.ActivityFailed: chaoslib.exceptions.ActivityFailed: Enable ChaosMonkey failed: {"timestamp":"2021-11-28T13:43:43.069+00:00","status":404,"error":"Not Found","message":"No message available","path":"/actuator/chaosmonkey/enable"}
|
||||
[31m[2021-11-28 14:43:43 ERROR] [activity:213][39m => failed: chaoslib.exceptions.ActivityFailed: Enable ChaosMonkey failed: {"timestamp":"2021-11-28T13:43:43.069+00:00","status":404,"error":"Not Found","message":"No message available","path":"/actuator/chaosmonkey/enable"}
|
||||
[36m[2021-11-28 14:43:43 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-28 14:43:43 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-28 14:43:43 INFO] [activity:188][39m Action: configure_assaults
|
||||
[36m[2021-11-28 14:43:43 DEBUG] [python:33][39m Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-28 14:43:43 DEBUG] [activity:260][39m Activity failed
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
|
||||
return func(**arguments)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 96, in change_assaults_configuration
|
||||
raise FailedActivity(
|
||||
chaoslib.exceptions.ActivityFailed: Change ChaosMonkey Assaults Configuration failed: {"timestamp":"2021-11-28T13:43:43.203+00:00","status":404,"error":"Not Found","message":"No message available","path":"/actuator/chaosmonkey/assaults"}
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/activity.py", line 253, in run_activity
|
||||
result = run_python_activity(activity, configuration, secrets)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 58, in run_python_activity
|
||||
raise ActivityFailed(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
|
||||
return func(**arguments)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 96, in change_assaults_configuration
|
||||
raise FailedActivity(
|
||||
chaoslib.exceptions.ActivityFailed: chaoslib.exceptions.ActivityFailed: Change ChaosMonkey Assaults Configuration failed: {"timestamp":"2021-11-28T13:43:43.203+00:00","status":404,"error":"Not Found","message":"No message available","path":"/actuator/chaosmonkey/assaults"}
|
||||
[31m[2021-11-28 14:43:43 ERROR] [activity:213][39m => failed: chaoslib.exceptions.ActivityFailed: Change ChaosMonkey Assaults Configuration failed: {"timestamp":"2021-11-28T13:43:43.203+00:00","status":404,"error":"Not Found","message":"No message available","path":"/actuator/chaosmonkey/assaults"}
|
||||
[36m[2021-11-28 14:43:43 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-28 14:43:43 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-28 14:43:43 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-28 14:43:43 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-28 14:43:43 INFO] [rollback:27][39m No declared rollbacks, let's move on.
|
||||
[36m[2021-11-28 14:43:43 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-28 14:43:43 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-28 14:43:43 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-28 14:43:43 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-28 14:43:43 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[32m[2021-11-28 16:24:55 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-28 16:24:55 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-28 16:24:55 INFO] [run:319][39m Running experiment: What is the impact of an expired certificate on our application chain?
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-28 16:24:55 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-28 16:24:55 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-28 16:24:55 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-28 16:24:55 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-28 16:24:55 INFO] [activity:188][39m Action: enable_chaosmonkey
|
||||
[36m[2021-11-28 16:24:55 DEBUG] [python:33][39m Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-28 16:24:56 DEBUG] [activity:205][39m => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-28T15:24:56.52458Z"}'
|
||||
[36m[2021-11-28 16:24:56 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-28 16:24:56 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-28 16:24:56 INFO] [activity:188][39m Action: configure_assaults
|
||||
[36m[2021-11-28 16:24:56 DEBUG] [python:33][39m Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-28 16:24:57 DEBUG] [activity:205][39m => succeeded with 'Assault config has changed'
|
||||
[36m[2021-11-28 16:24:57 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-28 16:24:57 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-28 16:24:57 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-28 16:24:57 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-28 16:24:57 INFO] [rollback:27][39m No declared rollbacks, let's move on.
|
||||
[36m[2021-11-28 16:24:57 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-28 16:24:57 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-28 16:24:57 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-28 16:24:57 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-28 16:24:57 DEBUG] [caching:42][39m Clearing activities cache
|
24
.experiments/roster/disable.json
Normal file
24
.experiments/roster/disable.json
Normal file
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"title": "Disable chaos monkey",
|
||||
"description": "Disable",
|
||||
"tags": [],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [],
|
||||
"rollbacks": [
|
||||
{
|
||||
"name": "disable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8082/actuator"
|
||||
},
|
||||
"func": "disable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
]
|
||||
}
|
54
.experiments/roster/exception.json
Normal file
54
.experiments/roster/exception.json
Normal file
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"title": "Testing exceptions",
|
||||
"description": "Testing exceptions!",
|
||||
"tags": [],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [
|
||||
{
|
||||
"name": "enable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8082/actuator"
|
||||
},
|
||||
"func": "enable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
{
|
||||
"name": "configure_assaults",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8082/actuator",
|
||||
"assaults_configuration": {
|
||||
"level": 5,
|
||||
"latencyRangeStart": 2000,
|
||||
"latencyRangeEnd": 15000,
|
||||
"latencyActive": false,
|
||||
"killApplicationActive": false,
|
||||
"restartApplicationActive": false,
|
||||
"exceptionsActive": true,
|
||||
"exception": {
|
||||
"type": "java.lang.RuntimeException",
|
||||
"arguments": [
|
||||
{
|
||||
"className": "java.lang.String",
|
||||
"value": "Exception assault has been carried out"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"func": "change_assaults_configuration",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
],
|
||||
"rollbacks": []
|
||||
}
|
113
.experiments/roster/journal.json
Normal file
113
.experiments/roster/journal.json
Normal file
|
@ -0,0 +1,113 @@
|
|||
{
|
||||
"chaoslib-version": "1.23.0",
|
||||
"platform": "macOS-12.0-arm64-arm-64bit",
|
||||
"node": "Marcels-MBP-M1",
|
||||
"experiment": {
|
||||
"title": "What is the impact of an expired certificate on our application chain?",
|
||||
"description": "If a certificate expires, we should gracefully deal with the issue.",
|
||||
"tags": [
|
||||
"tls"
|
||||
],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [
|
||||
{
|
||||
"name": "enable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8082/actuator"
|
||||
},
|
||||
"func": "enable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
{
|
||||
"name": "configure_assaults",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8082/actuator",
|
||||
"assaults_configuration": {
|
||||
"level": 5,
|
||||
"latencyRangeStart": 2000,
|
||||
"latencyRangeEnd": 15000,
|
||||
"latencyActive": true,
|
||||
"exceptionsActive": false,
|
||||
"killApplicationActive": false,
|
||||
"restartApplicationActive": false
|
||||
}
|
||||
},
|
||||
"func": "change_assaults_configuration",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
],
|
||||
"rollbacks": [],
|
||||
"dry": null
|
||||
},
|
||||
"start": "2021-11-28T15:24:55.984078",
|
||||
"status": "completed",
|
||||
"deviated": false,
|
||||
"steady_states": {
|
||||
"before": null,
|
||||
"after": null,
|
||||
"during": []
|
||||
},
|
||||
"run": [
|
||||
{
|
||||
"activity": {
|
||||
"name": "enable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8082/actuator"
|
||||
},
|
||||
"func": "enable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
"output": "{\"status\":\"Chaos Monkey is enabled\",\"enabledAt\":\"2021-11-28T15:24:56.52458Z\"}",
|
||||
"status": "succeeded",
|
||||
"start": "2021-11-28T15:24:55.984855",
|
||||
"end": "2021-11-28T15:24:56.785205",
|
||||
"duration": 0.80035
|
||||
},
|
||||
{
|
||||
"activity": {
|
||||
"name": "configure_assaults",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8082/actuator",
|
||||
"assaults_configuration": {
|
||||
"level": 5,
|
||||
"latencyRangeStart": 2000,
|
||||
"latencyRangeEnd": 15000,
|
||||
"latencyActive": true,
|
||||
"exceptionsActive": false,
|
||||
"killApplicationActive": false,
|
||||
"restartApplicationActive": false
|
||||
}
|
||||
},
|
||||
"func": "change_assaults_configuration",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
"output": "Assault config has changed",
|
||||
"status": "succeeded",
|
||||
"start": "2021-11-28T15:24:56.785494",
|
||||
"end": "2021-11-28T15:24:57.394090",
|
||||
"duration": 0.608596
|
||||
}
|
||||
],
|
||||
"rollbacks": [],
|
||||
"end": "2021-11-28T15:24:57.394597",
|
||||
"duration": 1.4326798915863037
|
||||
}
|
45
.experiments/roster/kill-restart.json
Normal file
45
.experiments/roster/kill-restart.json
Normal file
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"title": "Testing kill & restart",
|
||||
"description": "Testing behavoir when killing and restarting the application",
|
||||
"tags": [],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [
|
||||
{
|
||||
"name": "enable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8082/actuator"
|
||||
},
|
||||
"func": "enable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
{
|
||||
"name": "configure_assaults",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8082/actuator",
|
||||
"assaults_configuration": {
|
||||
"level": 5,
|
||||
"latencyRangeStart": 2000,
|
||||
"latencyRangeEnd": 5000,
|
||||
"latencyActive": false,
|
||||
"exceptionsActive": false,
|
||||
"killApplicationActive": true,
|
||||
"restartApplicationActive": true
|
||||
}
|
||||
},
|
||||
"func": "change_assaults_configuration",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
],
|
||||
"rollbacks": []
|
||||
}
|
45
.experiments/roster/latency.json
Normal file
45
.experiments/roster/latency.json
Normal file
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"title": "Testing latency",
|
||||
"description": "Testing latency!",
|
||||
"tags": [],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [
|
||||
{
|
||||
"name": "enable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8082/actuator"
|
||||
},
|
||||
"func": "enable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
{
|
||||
"name": "configure_assaults",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8082/actuator",
|
||||
"assaults_configuration": {
|
||||
"level": 5,
|
||||
"latencyRangeStart": 2000,
|
||||
"latencyRangeEnd": 15000,
|
||||
"latencyActive": true,
|
||||
"exceptionsActive": false,
|
||||
"killApplicationActive": false,
|
||||
"restartApplicationActive": false
|
||||
}
|
||||
},
|
||||
"func": "change_assaults_configuration",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
],
|
||||
"rollbacks": []
|
||||
}
|
49
.experiments/roster/memory.json
Normal file
49
.experiments/roster/memory.json
Normal file
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"title": "Testing memory",
|
||||
"description": "Testing memory!",
|
||||
"tags": [],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [
|
||||
{
|
||||
"name": "enable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8082/actuator"
|
||||
},
|
||||
"func": "enable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
{
|
||||
"name": "configure_assaults",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8082/actuator",
|
||||
"assaults_configuration": {
|
||||
"level": 5,
|
||||
"latencyActive": false,
|
||||
"killApplicationActive": false,
|
||||
"restartApplicationActive": false,
|
||||
"exceptionsActive": false,
|
||||
"memoryActive": true,
|
||||
"memoryMillisecondsHoldFilledMemory": 90000,
|
||||
"memoryMillisecondsWaitNextIncrease": 100,
|
||||
"memoryFillIncrementFraction": 0.9,
|
||||
"memoryFillTargetFraction": 0.95,
|
||||
"runtimeAssaultCronExpression": "*/1 * * * * ?"
|
||||
}
|
||||
},
|
||||
"func": "change_assaults_configuration",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
],
|
||||
"rollbacks": []
|
||||
}
|
936
.experiments/tapas-tasks/chaostoolkit.log
Normal file
936
.experiments/tapas-tasks/chaostoolkit.log
Normal file
|
@ -0,0 +1,936 @@
|
|||
[36m[2021-11-27 11:35:02 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-27 11:35:02 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-27 11:35:02 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-27 11:35:02 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-27 11:35:02 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:35:02 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:35:02 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:35:02 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[32m[2021-11-27 11:35:02 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-27 11:35:02 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:35:02 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:35:02 DEBUG] [secret:104][39m Done loading secrets
|
||||
[36m[2021-11-27 11:35:02 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[31m[2021-11-27 11:35:02 ERROR] [cli:251][39m hypothesis requires a title
|
||||
[36m[2021-11-27 11:35:02 DEBUG] [cli:252][39m hypothesis requires a title
|
||||
[36m[2021-11-27 11:35:57 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-27 11:35:57 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-27 11:35:57 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-27 11:35:58 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-27 11:35:58 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:35:58 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:35:58 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:35:58 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[32m[2021-11-27 11:35:58 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-27 11:35:58 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[31m[2021-11-27 11:35:58 ERROR] [cli:251][39m experiment requires a description
|
||||
[36m[2021-11-27 11:35:58 DEBUG] [cli:252][39m experiment requires a description
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[32m[2021-11-27 11:36:18 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:36:18 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:36:18 INFO] [run:319][39m Running experiment: Testing kill & restart
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-27 11:36:18 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-27 11:36:18 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-27 11:36:18 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-27 11:36:18 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:36:18 INFO] [activity:188][39m Action: enable_chaosmonkey
|
||||
[36m[2021-11-27 11:36:18 DEBUG] [python:33][39m Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:36:19 DEBUG] [activity:205][39m => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-27T10:36:19.060458Z"}'
|
||||
[36m[2021-11-27 11:36:19 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:36:19 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:36:19 INFO] [activity:188][39m Action: configure_assaults
|
||||
[36m[2021-11-27 11:36:19 DEBUG] [python:33][39m Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:36:19 DEBUG] [activity:205][39m => succeeded with 'Assault config has changed'
|
||||
[36m[2021-11-27 11:36:19 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:36:19 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-27 11:36:19 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-27 11:36:19 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:36:19 INFO] [rollback:30][39m Rollback: disable_chaosmonkey
|
||||
[36m[2021-11-27 11:36:19 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:36:19 INFO] [activity:188][39m Action: disable_chaosmonkey
|
||||
[36m[2021-11-27 11:36:19 DEBUG] [python:33][39m Activity 'disable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:36:19 DEBUG] [activity:260][39m Activity failed
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 174, in _new_conn
|
||||
conn = connection.create_connection(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 96, in create_connection
|
||||
raise err
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 86, in create_connection
|
||||
sock.connect(sa)
|
||||
ConnectionRefusedError: [Errno 61] Connection refused
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 699, in urlopen
|
||||
httplib_response = self._make_request(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 394, in _make_request
|
||||
conn.request(method, url, **httplib_request_kw)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 239, in request
|
||||
super(HTTPConnection, self).request(method, url, body=body, headers=headers)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1279, in request
|
||||
self._send_request(method, url, body, headers, encode_chunked)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1325, in _send_request
|
||||
self.endheaders(body, encode_chunked=encode_chunked)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1274, in endheaders
|
||||
self._send_output(message_body, encode_chunked=encode_chunked)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1034, in _send_output
|
||||
self.send(msg)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 974, in send
|
||||
self.connect()
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 205, in connect
|
||||
conn = self._new_conn()
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn
|
||||
raise NewConnectionError(
|
||||
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x106688100>: Failed to establish a new connection: [Errno 61] Connection refused
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
|
||||
resp = conn.urlopen(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 755, in urlopen
|
||||
retries = retries.increment(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/retry.py", line 574, in increment
|
||||
raise MaxRetryError(_pool, url, error or ResponseError(cause))
|
||||
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x106688100>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
|
||||
return func(**arguments)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 53, in disable_chaosmonkey
|
||||
response = api.call_api(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
|
||||
return requests.request(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
|
||||
return session.request(method=method, url=url, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
|
||||
resp = self.send(prep, **send_kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
|
||||
r = adapter.send(request, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
|
||||
raise ConnectionError(e, request=request)
|
||||
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x106688100>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/activity.py", line 253, in run_activity
|
||||
result = run_python_activity(activity, configuration, secrets)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 58, in run_python_activity
|
||||
raise ActivityFailed(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
|
||||
return func(**arguments)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 53, in disable_chaosmonkey
|
||||
response = api.call_api(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
|
||||
return requests.request(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
|
||||
return session.request(method=method, url=url, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
|
||||
resp = self.send(prep, **send_kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
|
||||
r = adapter.send(request, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
|
||||
raise ConnectionError(e, request=request)
|
||||
chaoslib.exceptions.ActivityFailed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x106688100>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
[31m[2021-11-27 11:36:19 ERROR] [activity:213][39m => failed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x106688100>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
[36m[2021-11-27 11:36:19 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:36:19 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:36:19 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-27 11:36:19 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-27 11:36:19 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-27 11:36:19 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[32m[2021-11-27 11:36:54 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:36:54 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:36:54 INFO] [run:319][39m Running experiment: Testing kill & restart
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-27 11:36:54 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-27 11:36:54 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-27 11:36:54 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-27 11:36:54 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:36:54 INFO] [activity:188][39m Action: enable_chaosmonkey
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [python:33][39m Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [activity:205][39m => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-27T10:36:54.668324Z"}'
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:36:54 INFO] [activity:188][39m Action: configure_assaults
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [python:33][39m Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [activity:205][39m => succeeded with 'Assault config has changed'
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-27 11:36:54 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:36:54 INFO] [rollback:30][39m Rollback: disable_chaosmonkey
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:36:54 INFO] [activity:188][39m Action: disable_chaosmonkey
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [python:33][39m Activity 'disable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [activity:260][39m Activity failed
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 174, in _new_conn
|
||||
conn = connection.create_connection(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 96, in create_connection
|
||||
raise err
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 86, in create_connection
|
||||
sock.connect(sa)
|
||||
ConnectionRefusedError: [Errno 61] Connection refused
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 699, in urlopen
|
||||
httplib_response = self._make_request(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 394, in _make_request
|
||||
conn.request(method, url, **httplib_request_kw)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 239, in request
|
||||
super(HTTPConnection, self).request(method, url, body=body, headers=headers)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1279, in request
|
||||
self._send_request(method, url, body, headers, encode_chunked)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1325, in _send_request
|
||||
self.endheaders(body, encode_chunked=encode_chunked)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1274, in endheaders
|
||||
self._send_output(message_body, encode_chunked=encode_chunked)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1034, in _send_output
|
||||
self.send(msg)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 974, in send
|
||||
self.connect()
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 205, in connect
|
||||
conn = self._new_conn()
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn
|
||||
raise NewConnectionError(
|
||||
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x104be0100>: Failed to establish a new connection: [Errno 61] Connection refused
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
|
||||
resp = conn.urlopen(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 755, in urlopen
|
||||
retries = retries.increment(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/retry.py", line 574, in increment
|
||||
raise MaxRetryError(_pool, url, error or ResponseError(cause))
|
||||
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x104be0100>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
|
||||
return func(**arguments)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 53, in disable_chaosmonkey
|
||||
response = api.call_api(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
|
||||
return requests.request(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
|
||||
return session.request(method=method, url=url, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
|
||||
resp = self.send(prep, **send_kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
|
||||
r = adapter.send(request, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
|
||||
raise ConnectionError(e, request=request)
|
||||
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x104be0100>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/activity.py", line 253, in run_activity
|
||||
result = run_python_activity(activity, configuration, secrets)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 58, in run_python_activity
|
||||
raise ActivityFailed(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
|
||||
return func(**arguments)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 53, in disable_chaosmonkey
|
||||
response = api.call_api(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
|
||||
return requests.request(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
|
||||
return session.request(method=method, url=url, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
|
||||
resp = self.send(prep, **send_kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
|
||||
r = adapter.send(request, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
|
||||
raise ConnectionError(e, request=request)
|
||||
chaoslib.exceptions.ActivityFailed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x104be0100>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
[31m[2021-11-27 11:36:54 ERROR] [activity:213][39m => failed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x104be0100>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:36:54 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-27 11:36:54 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:36:59 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-27 11:36:59 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-27 11:36:59 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[32m[2021-11-27 11:37:00 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:37:00 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:37:00 INFO] [run:319][39m Running experiment: Testing kill & restart
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-27 11:37:00 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-27 11:37:00 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-27 11:37:00 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-27 11:37:00 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:37:00 INFO] [activity:188][39m Action: enable_chaosmonkey
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [python:33][39m Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [activity:205][39m => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-27T10:37:00.591716Z"}'
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:37:00 INFO] [activity:188][39m Action: configure_assaults
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [python:33][39m Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [activity:205][39m => succeeded with 'Assault config has changed'
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-27 11:37:00 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:37:00 INFO] [rollback:30][39m Rollback: disable_chaosmonkey
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:37:00 INFO] [activity:188][39m Action: disable_chaosmonkey
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [python:33][39m Activity 'disable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [activity:205][39m => succeeded with '{"status":"Chaos Monkey is disabled","disabledAt":"2021-11-27T10:37:00.650024Z"}'
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:37:00 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-27 11:37:00 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:38:39 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-27 11:38:39 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-27 11:38:39 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[32m[2021-11-27 11:38:40 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:38:40 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:38:40 INFO] [run:319][39m Running experiment: Testing kill & restart
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-27 11:38:40 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-27 11:38:40 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-27 11:38:40 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-27 11:38:40 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:38:40 INFO] [activity:188][39m Action: enable_chaosmonkey
|
||||
[36m[2021-11-27 11:38:40 DEBUG] [python:33][39m Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:38:41 DEBUG] [activity:205][39m => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-27T10:38:40.795245Z"}'
|
||||
[36m[2021-11-27 11:38:41 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:38:41 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:38:41 INFO] [activity:188][39m Action: configure_assaults
|
||||
[36m[2021-11-27 11:38:41 DEBUG] [python:33][39m Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:38:41 DEBUG] [activity:205][39m => succeeded with 'Assault config has changed'
|
||||
[36m[2021-11-27 11:38:41 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:38:41 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-27 11:38:41 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-27 11:38:41 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:38:41 INFO] [rollback:30][39m Rollback: disable_chaosmonkey
|
||||
[36m[2021-11-27 11:38:41 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:38:41 INFO] [activity:188][39m Action: disable_chaosmonkey
|
||||
[36m[2021-11-27 11:38:41 DEBUG] [python:33][39m Activity 'disable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:38:41 DEBUG] [activity:205][39m => succeeded with '{"status":"Chaos Monkey is disabled","disabledAt":"2021-11-27T10:38:41.923689Z"}'
|
||||
[36m[2021-11-27 11:38:41 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:38:41 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:38:41 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-27 11:38:41 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-27 11:38:41 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-27 11:38:41 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:42:14 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-27 11:42:14 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-27 11:42:14 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[32m[2021-11-27 11:42:15 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:42:15 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:42:15 INFO] [run:319][39m Running experiment: Testing kill & restart
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-27 11:42:15 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-27 11:42:15 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-27 11:42:15 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-27 11:42:15 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:42:15 INFO] [activity:188][39m Action: enable_chaosmonkey
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [python:33][39m Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [activity:205][39m => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-27T10:42:15.310527Z"}'
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:42:15 INFO] [activity:188][39m Action: configure_assaults
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [python:33][39m Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [activity:205][39m => succeeded with 'Assault config has changed'
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-27 11:42:15 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:42:15 INFO] [rollback:27][39m No declared rollbacks, let's move on.
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:42:15 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-27 11:42:15 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:43:22 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-27 11:43:22 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-27 11:43:22 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[32m[2021-11-27 11:43:23 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:43:23 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:43:23 INFO] [run:319][39m Running experiment: What is the impact of an expired certificate on our application chain?
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-27 11:43:23 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-27 11:43:23 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-27 11:43:23 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-27 11:43:23 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:43:23 INFO] [activity:188][39m Action: enable_chaosmonkey
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [python:33][39m Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [activity:205][39m => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-27T10:43:23.565576Z"}'
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:43:23 INFO] [activity:188][39m Action: configure_assaults
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [python:33][39m Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [activity:205][39m => succeeded with 'Assault config has changed'
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-27 11:43:23 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:43:23 INFO] [rollback:27][39m No declared rollbacks, let's move on.
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:43:23 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-27 11:43:23 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[32m[2021-11-27 11:43:50 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:43:50 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:43:50 INFO] [run:319][39m Running experiment: What is the impact of an expired certificate on our application chain?
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-27 11:43:50 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-27 11:43:50 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-27 11:43:50 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-27 11:43:50 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:43:50 INFO] [activity:188][39m Action: enable_chaosmonkey
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [python:33][39m Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [activity:205][39m => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-27T10:43:50.888054Z"}'
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:43:50 INFO] [activity:188][39m Action: configure_assaults
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [python:33][39m Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [activity:205][39m => succeeded with 'Assault config has changed'
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-27 11:43:50 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:43:50 INFO] [rollback:27][39m No declared rollbacks, let's move on.
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:43:50 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-27 11:43:50 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:47:20 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-27 11:47:20 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-27 11:47:20 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [caching:35][39m Cached 0 activities
|
||||
[32m[2021-11-27 11:47:21 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:47:21 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [caching:35][39m Cached 0 activities
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:47:21 INFO] [run:319][39m Running experiment: Disable chaos monkey
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-27 11:47:21 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-27 11:47:21 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-27 11:47:21 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-27 11:47:21 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-27 11:47:21 INFO] [activity:113][39m No declared activities, let's move on.
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-27 11:47:21 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:47:21 INFO] [rollback:30][39m Rollback: disable_chaosmonkey
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:47:21 INFO] [activity:188][39m Action: disable_chaosmonkey
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [python:33][39m Activity 'disable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [activity:260][39m Activity failed
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 174, in _new_conn
|
||||
conn = connection.create_connection(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 96, in create_connection
|
||||
raise err
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 86, in create_connection
|
||||
sock.connect(sa)
|
||||
ConnectionRefusedError: [Errno 61] Connection refused
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 699, in urlopen
|
||||
httplib_response = self._make_request(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 394, in _make_request
|
||||
conn.request(method, url, **httplib_request_kw)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 239, in request
|
||||
super(HTTPConnection, self).request(method, url, body=body, headers=headers)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1279, in request
|
||||
self._send_request(method, url, body, headers, encode_chunked)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1325, in _send_request
|
||||
self.endheaders(body, encode_chunked=encode_chunked)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1274, in endheaders
|
||||
self._send_output(message_body, encode_chunked=encode_chunked)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1034, in _send_output
|
||||
self.send(msg)
|
||||
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 974, in send
|
||||
self.connect()
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 205, in connect
|
||||
conn = self._new_conn()
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn
|
||||
raise NewConnectionError(
|
||||
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x1024bf220>: Failed to establish a new connection: [Errno 61] Connection refused
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
|
||||
resp = conn.urlopen(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 755, in urlopen
|
||||
retries = retries.increment(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/retry.py", line 574, in increment
|
||||
raise MaxRetryError(_pool, url, error or ResponseError(cause))
|
||||
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x1024bf220>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
|
||||
return func(**arguments)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 53, in disable_chaosmonkey
|
||||
response = api.call_api(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
|
||||
return requests.request(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
|
||||
return session.request(method=method, url=url, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
|
||||
resp = self.send(prep, **send_kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
|
||||
r = adapter.send(request, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
|
||||
raise ConnectionError(e, request=request)
|
||||
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x1024bf220>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
|
||||
During handling of the above exception, another exception occurred:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/activity.py", line 253, in run_activity
|
||||
result = run_python_activity(activity, configuration, secrets)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 58, in run_python_activity
|
||||
raise ActivityFailed(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
|
||||
return func(**arguments)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 53, in disable_chaosmonkey
|
||||
response = api.call_api(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
|
||||
return requests.request(
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
|
||||
return session.request(method=method, url=url, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
|
||||
resp = self.send(prep, **send_kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
|
||||
r = adapter.send(request, **kwargs)
|
||||
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
|
||||
raise ConnectionError(e, request=request)
|
||||
chaoslib.exceptions.ActivityFailed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x1024bf220>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
[31m[2021-11-27 11:47:21 ERROR] [activity:213][39m => failed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x1024bf220>: Failed to establish a new connection: [Errno 61] Connection refused'))
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:47:21 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-27 11:47:21 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:47:29 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-27 11:47:29 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-27 11:47:29 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [caching:35][39m Cached 0 activities
|
||||
[32m[2021-11-27 11:47:30 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:47:30 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [caching:35][39m Cached 0 activities
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:47:30 INFO] [run:319][39m Running experiment: Disable chaos monkey
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-27 11:47:30 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-27 11:47:30 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-27 11:47:30 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-27 11:47:30 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-27 11:47:30 INFO] [activity:113][39m No declared activities, let's move on.
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-27 11:47:30 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:47:30 INFO] [rollback:30][39m Rollback: disable_chaosmonkey
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:47:30 INFO] [activity:188][39m Action: disable_chaosmonkey
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [python:33][39m Activity 'disable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [activity:205][39m => succeeded with '{"status":"Chaos Monkey is disabled","disabledAt":"2021-11-27T10:47:30.172107Z"}'
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:47:30 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-27 11:47:30 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[32m[2021-11-27 11:49:33 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:49:33 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:49:33 INFO] [run:319][39m Running experiment: What is the impact of an expired certificate on our application chain?
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-27 11:49:33 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-27 11:49:33 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-27 11:49:33 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-27 11:49:33 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:49:33 INFO] [activity:188][39m Action: enable_chaosmonkey
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [python:33][39m Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [activity:205][39m => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-27T10:49:33.912573Z"}'
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:49:33 INFO] [activity:188][39m Action: configure_assaults
|
||||
[36m[2021-11-27 11:49:33 DEBUG] [python:33][39m Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:49:34 DEBUG] [activity:205][39m => succeeded with 'Assault config has changed'
|
||||
[36m[2021-11-27 11:49:34 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:49:34 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-27 11:49:34 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-27 11:49:34 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:49:34 INFO] [rollback:27][39m No declared rollbacks, let's move on.
|
||||
[36m[2021-11-27 11:49:34 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:49:34 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-27 11:49:34 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-27 11:49:34 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-27 11:49:34 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:50:00 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-27 11:50:00 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-27 11:50:00 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [caching:35][39m Cached 0 activities
|
||||
[32m[2021-11-27 11:50:01 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:50:01 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [caching:35][39m Cached 0 activities
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-27 11:50:01 INFO] [run:319][39m Running experiment: Disable chaos monkey
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-27 11:50:01 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-27 11:50:01 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-27 11:50:01 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-27 11:50:01 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-27 11:50:01 INFO] [activity:113][39m No declared activities, let's move on.
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-27 11:50:01 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:50:01 INFO] [rollback:30][39m Rollback: disable_chaosmonkey
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-27 11:50:01 INFO] [activity:188][39m Action: disable_chaosmonkey
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [python:33][39m Activity 'disable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [activity:205][39m => succeeded with '{"status":"Chaos Monkey is disabled","disabledAt":"2021-11-27T10:50:01.207712Z"}'
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-27 11:50:01 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-27 11:50:01 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[32m[2021-11-28 18:00:15 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-28 18:00:15 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-28 18:00:15 INFO] [run:319][39m Running experiment: Testing latency
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-28 18:00:15 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-28 18:00:15 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-28 18:00:15 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-28 18:00:15 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-28 18:00:15 INFO] [activity:188][39m Action: enable_chaosmonkey
|
||||
[36m[2021-11-28 18:00:15 DEBUG] [python:33][39m Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-28 18:00:17 DEBUG] [activity:205][39m => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-28T17:00:16.734825Z"}'
|
||||
[36m[2021-11-28 18:00:17 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-28 18:00:17 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-28 18:00:17 INFO] [activity:188][39m Action: configure_assaults
|
||||
[36m[2021-11-28 18:00:17 DEBUG] [python:33][39m Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-28 18:00:19 DEBUG] [activity:205][39m => succeeded with 'Assault config has changed'
|
||||
[36m[2021-11-28 18:00:19 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-28 18:00:19 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-28 18:00:19 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-28 18:00:19 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-28 18:00:19 INFO] [rollback:27][39m No declared rollbacks, let's move on.
|
||||
[36m[2021-11-28 18:00:19 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-28 18:00:19 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-28 18:00:19 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-28 18:00:19 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-28 18:00:19 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-28 18:07:50 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-28 18:07:50 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-28 18:07:50 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-28 18:07:50 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-28 18:07:50 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-28 18:07:50 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-28 18:07:50 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-28 18:07:50 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[32m[2021-11-28 18:07:50 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-28 18:07:50 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-28 18:07:50 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-28 18:07:50 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-28 18:07:50 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-28 18:07:50 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-28 18:07:50 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-28 18:07:50 DEBUG] [caching:35][39m Cached 2 activities
|
||||
[36m[2021-11-28 18:07:50 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-28 18:07:50 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-28 18:07:51 INFO] [run:319][39m Running experiment: Testing latency
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-28 18:07:51 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-28 18:07:51 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-28 18:07:51 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-28 18:07:51 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-28 18:07:51 INFO] [activity:188][39m Action: enable_chaosmonkey
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [python:33][39m Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [activity:205][39m => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-28T17:07:51.182021Z"}'
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-28 18:07:51 INFO] [activity:188][39m Action: configure_assaults
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [python:33][39m Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [activity:205][39m => succeeded with 'Assault config has changed'
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-28 18:07:51 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-28 18:07:51 INFO] [rollback:27][39m No declared rollbacks, let's move on.
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-28 18:07:51 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-28 18:07:51 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-28 18:09:39 DEBUG] [cli:103][39m ###############################################################################
|
||||
[36m[2021-11-28 18:09:39 DEBUG] [cli:104][39m Running command 'run'
|
||||
[36m[2021-11-28 18:09:39 DEBUG] [cli:108][39m Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [settings:30][39m The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [__init__:389][39m No controls to apply on 'loader'
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [caching:35][39m Cached 0 activities
|
||||
[32m[2021-11-28 18:09:40 INFO] [experiment:58][39m Validating the experiment's syntax
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-28 18:09:40 INFO] [experiment:109][39m Experiment looks valid
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [caching:42][39m Clearing activities cache
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [caching:24][39m Building activity cache...
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [caching:35][39m Cached 0 activities
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [configuration:54][39m Loading configuration...
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [secret:78][39m Loading secrets...
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [secret:104][39m Done loading secrets
|
||||
[32m[2021-11-28 18:09:40 INFO] [run:319][39m Running experiment: Disable chaos monkey
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [__init__:49][39m Initializing controls
|
||||
[32m[2021-11-28 18:09:40 INFO] [run:336][39m Steady-state strategy: default
|
||||
[32m[2021-11-28 18:09:40 INFO] [run:340][39m Rollbacks strategy: default
|
||||
[32m[2021-11-28 18:09:40 INFO] [run:345][39m No steady state hypothesis defined. That's ok, just exploring.
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[32m[2021-11-28 18:09:40 INFO] [run:599][39m Playing your experiment's method now...
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-28 18:09:40 INFO] [activity:113][39m No declared activities, let's move on.
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [__init__:389][39m No controls to apply on 'method'
|
||||
[32m[2021-11-28 18:09:40 INFO] [run:885][39m Let's rollback...
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-28 18:09:40 INFO] [rollback:30][39m Rollback: disable_chaosmonkey
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[32m[2021-11-28 18:09:40 INFO] [activity:188][39m Action: disable_chaosmonkey
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [python:33][39m Activity 'disable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [activity:205][39m => succeeded with '{"status":"Chaos Monkey is disabled","disabledAt":"2021-11-28T17:09:40.443253Z"}'
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [__init__:389][39m No controls to apply on 'activity'
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [__init__:389][39m No controls to apply on 'rollback'
|
||||
[32m[2021-11-28 18:09:40 INFO] [run:450][39m Experiment ended with status: completed
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [__init__:389][39m No controls to apply on 'experiment'
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [__init__:82][39m Cleaning up controls
|
||||
[36m[2021-11-28 18:09:40 DEBUG] [caching:42][39m Clearing activities cache
|
24
.experiments/tapas-tasks/disable.json
Normal file
24
.experiments/tapas-tasks/disable.json
Normal file
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"title": "Disable chaos monkey",
|
||||
"description": "Disable",
|
||||
"tags": [],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [],
|
||||
"rollbacks": [
|
||||
{
|
||||
"name": "disable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8081/actuator"
|
||||
},
|
||||
"func": "disable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
]
|
||||
}
|
54
.experiments/tapas-tasks/exception.json
Normal file
54
.experiments/tapas-tasks/exception.json
Normal file
|
@ -0,0 +1,54 @@
|
|||
{
|
||||
"title": "Testing exceptions",
|
||||
"description": "Testing exceptions!",
|
||||
"tags": [],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [
|
||||
{
|
||||
"name": "enable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8081/actuator"
|
||||
},
|
||||
"func": "enable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
{
|
||||
"name": "configure_assaults",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8081/actuator",
|
||||
"assaults_configuration": {
|
||||
"level": 5,
|
||||
"latencyRangeStart": 2000,
|
||||
"latencyRangeEnd": 15000,
|
||||
"latencyActive": false,
|
||||
"killApplicationActive": false,
|
||||
"restartApplicationActive": false,
|
||||
"exceptionsActive": true,
|
||||
"exception": {
|
||||
"type": "java.lang.RuntimeException",
|
||||
"arguments": [
|
||||
{
|
||||
"className": "java.lang.String",
|
||||
"value": "Exception assault has been carried out"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"func": "change_assaults_configuration",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
],
|
||||
"rollbacks": []
|
||||
}
|
62
.experiments/tapas-tasks/journal.json
Normal file
62
.experiments/tapas-tasks/journal.json
Normal file
|
@ -0,0 +1,62 @@
|
|||
{
|
||||
"chaoslib-version": "1.23.0",
|
||||
"platform": "macOS-12.0-arm64-arm-64bit",
|
||||
"node": "Marcels-MBP-M1",
|
||||
"experiment": {
|
||||
"title": "Disable chaos monkey",
|
||||
"description": "Disable",
|
||||
"tags": [],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [],
|
||||
"rollbacks": [
|
||||
{
|
||||
"name": "disable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8081/actuator"
|
||||
},
|
||||
"func": "disable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
],
|
||||
"dry": null
|
||||
},
|
||||
"start": "2021-11-28T17:09:40.224824",
|
||||
"status": "completed",
|
||||
"deviated": false,
|
||||
"steady_states": {
|
||||
"before": null,
|
||||
"after": null,
|
||||
"during": []
|
||||
},
|
||||
"run": [],
|
||||
"rollbacks": [
|
||||
{
|
||||
"activity": {
|
||||
"name": "disable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8081/actuator"
|
||||
},
|
||||
"func": "disable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
"output": "{\"status\":\"Chaos Monkey is disabled\",\"disabledAt\":\"2021-11-28T17:09:40.443253Z\"}",
|
||||
"status": "succeeded",
|
||||
"start": "2021-11-28T17:09:40.226419",
|
||||
"end": "2021-11-28T17:09:40.531586",
|
||||
"duration": 0.305167
|
||||
}
|
||||
],
|
||||
"end": "2021-11-28T17:09:40.531671",
|
||||
"duration": 0.33724117279052734
|
||||
}
|
45
.experiments/tapas-tasks/kill-restart.json
Normal file
45
.experiments/tapas-tasks/kill-restart.json
Normal file
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"title": "Testing kill & restart",
|
||||
"description": "Testing behavoir when killing and restarting the application",
|
||||
"tags": [],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [
|
||||
{
|
||||
"name": "enable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8081/actuator"
|
||||
},
|
||||
"func": "enable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
{
|
||||
"name": "configure_assaults",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8081/actuator",
|
||||
"assaults_configuration": {
|
||||
"level": 5,
|
||||
"latencyRangeStart": 2000,
|
||||
"latencyRangeEnd": 5000,
|
||||
"latencyActive": false,
|
||||
"exceptionsActive": false,
|
||||
"killApplicationActive": true,
|
||||
"restartApplicationActive": true
|
||||
}
|
||||
},
|
||||
"func": "change_assaults_configuration",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
],
|
||||
"rollbacks": []
|
||||
}
|
45
.experiments/tapas-tasks/latency.json
Normal file
45
.experiments/tapas-tasks/latency.json
Normal file
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"title": "Testing latency",
|
||||
"description": "Testing latency!",
|
||||
"tags": [],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [
|
||||
{
|
||||
"name": "enable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8081/actuator"
|
||||
},
|
||||
"func": "enable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
{
|
||||
"name": "configure_assaults",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8081/actuator",
|
||||
"assaults_configuration": {
|
||||
"level": 5,
|
||||
"latencyRangeStart": 2000,
|
||||
"latencyRangeEnd": 15000,
|
||||
"latencyActive": true,
|
||||
"exceptionsActive": false,
|
||||
"killApplicationActive": false,
|
||||
"restartApplicationActive": false
|
||||
}
|
||||
},
|
||||
"func": "change_assaults_configuration",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
],
|
||||
"rollbacks": []
|
||||
}
|
49
.experiments/tapas-tasks/memory.json
Normal file
49
.experiments/tapas-tasks/memory.json
Normal file
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"title": "Testing memory",
|
||||
"description": "Testing memory!",
|
||||
"tags": [],
|
||||
"steady-state-hypothesis": {
|
||||
"title": "Hypothesis",
|
||||
"probes": []
|
||||
},
|
||||
"method": [
|
||||
{
|
||||
"name": "enable_chaosmonkey",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8081/actuator"
|
||||
},
|
||||
"func": "enable_chaosmonkey",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
},
|
||||
{
|
||||
"name": "configure_assaults",
|
||||
"provider": {
|
||||
"arguments": {
|
||||
"base_url": "http://localhost:8081/actuator",
|
||||
"assaults_configuration": {
|
||||
"level": 5,
|
||||
"latencyActive": false,
|
||||
"killApplicationActive": false,
|
||||
"restartApplicationActive": false,
|
||||
"exceptionsActive": false,
|
||||
"memoryActive": true,
|
||||
"memoryMillisecondsHoldFilledMemory": 90000,
|
||||
"memoryMillisecondsWaitNextIncrease": 100,
|
||||
"memoryFillIncrementFraction": 0.9,
|
||||
"memoryFillTargetFraction": 0.95,
|
||||
"runtimeAssaultCronExpression": "*/1 * * * * ?"
|
||||
}
|
||||
},
|
||||
"func": "change_assaults_configuration",
|
||||
"module": "chaosspring.actions",
|
||||
"type": "python"
|
||||
},
|
||||
"type": "action"
|
||||
}
|
||||
],
|
||||
"rollbacks": []
|
||||
}
|
38
.github/workflows/build-and-deploy.yml
vendored
38
.github/workflows/build-and-deploy.yml
vendored
|
@ -33,29 +33,40 @@ jobs:
|
|||
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
||||
restore-keys: ${{ runner.os }}-m2
|
||||
|
||||
- name: Build with Maven
|
||||
run: mvn -f assignment/pom.xml --batch-mode --update-snapshots verify
|
||||
- run: cp ./assignment/target/assignment-0.0.1-SNAPSHOT.jar ./target
|
||||
- name: Build common library
|
||||
run: mvn -f common/pom.xml --batch-mode --update-snapshots install
|
||||
|
||||
- name: Build with Maven
|
||||
- name: Build roster service
|
||||
run: mvn -f roster/pom.xml --batch-mode --update-snapshots verify
|
||||
- run: cp ./roster/target/roster-0.0.1-SNAPSHOT.jar ./target
|
||||
|
||||
- name: Build executor-pool service
|
||||
run: mvn -f executor-pool/pom.xml --batch-mode --update-snapshots verify
|
||||
- run: cp ./executor-pool/target/executor-pool-0.0.1-SNAPSHOT.jar ./target
|
||||
|
||||
- name: Build with Maven
|
||||
- name: Build executor-base library
|
||||
run: mvn -f executor-base/pom.xml --batch-mode --update-snapshots install
|
||||
|
||||
- name: Build with Maven
|
||||
run: mvn -f executor1/pom.xml --batch-mode --update-snapshots verify
|
||||
- run: cp ./executor1/target/executor1-0.0.1-SNAPSHOT.jar ./target
|
||||
- name: Build executor-computation service
|
||||
run: mvn -f executor-computation/pom.xml --batch-mode --update-snapshots verify
|
||||
- run: cp ./executor-computation/target/executor-computation-0.0.1-SNAPSHOT.jar ./target
|
||||
|
||||
- name: Build with Maven
|
||||
run: mvn -f executor2/pom.xml --batch-mode --update-snapshots verify
|
||||
- run: cp ./executor2/target/executor2-0.0.1-SNAPSHOT.jar ./target
|
||||
- name: Build executor-robot service
|
||||
run: mvn -f executor-robot/pom.xml --batch-mode --update-snapshots verify
|
||||
- run: cp ./executor-robot/target/executor-robot-0.0.1-SNAPSHOT.jar ./target
|
||||
|
||||
- name: Build with Maven
|
||||
- name: Build executor-humidity service
|
||||
run: mvn -f executor-humidity/pom.xml --batch-mode --update-snapshots verify
|
||||
- run: cp ./executor-humidity/target/executor-humidity-0.0.1-SNAPSHOT.jar ./target
|
||||
|
||||
- name: Build tapas-task service
|
||||
run: mvn -f tapas-tasks/pom.xml --batch-mode --update-snapshots verify
|
||||
- run: cp ./tapas-tasks/target/tapas-tasks-0.0.1-SNAPSHOT.jar ./target
|
||||
|
||||
- name: Build tapas-auction-house service
|
||||
run: mvn -f tapas-auction-house/pom.xml --batch-mode --update-snapshots verify
|
||||
- run: cp ./tapas-auction-house/target/tapas-auction-house-0.0.1-SNAPSHOT.jar ./target
|
||||
|
||||
- run: cp ./.deployment/docker-compose.yml ./target
|
||||
- name: Archive artifacts
|
||||
uses: actions/upload-artifact@v1
|
||||
|
@ -96,5 +107,6 @@ jobs:
|
|||
cd /home/${{ secrets.SSH_USER }}/
|
||||
touch acme.json
|
||||
sudo chmod 0600 acme.json
|
||||
sudo docker-compose down --remove-orphans
|
||||
sudo echo "PUB_IP=$(wget -qO- http://ipecho.net/plain | xargs echo)" | sed -e 's/\./-/g' > .env
|
||||
sudo docker-compose up -d --build --force-recreate
|
||||
sudo docker-compose up -d
|
||||
|
|
41
.github/workflows/ci.assignment.yml
vendored
41
.github/workflows/ci.assignment.yml
vendored
|
@ -1,41 +0,0 @@
|
|||
name: CI Assignment
|
||||
on:
|
||||
push:
|
||||
branches: [main, dev]
|
||||
paths:
|
||||
- "assignment/**"
|
||||
pull_request:
|
||||
branches: [main, dev]
|
||||
paths:
|
||||
- "assignment/**"
|
||||
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
build:
|
||||
name: Build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 11
|
||||
- name: Cache SonarCloud packages
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ~/.sonar/cache
|
||||
key: ${{ runner.os }}-sonar
|
||||
restore-keys: ${{ runner.os }}-sonar
|
||||
- name: Cache Maven packages
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ~/.m2
|
||||
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
||||
restore-keys: ${{ runner.os }}-m2
|
||||
- name: Build and analyze
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
run: mvn -f assignment/pom.xml -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=scs-asse-fs21-group1_tapas-assignment
|
|
@ -1,15 +1,17 @@
|
|||
name: CI Executor 2
|
||||
name: CI executor-computation
|
||||
on:
|
||||
push:
|
||||
branches: [main, dev]
|
||||
paths:
|
||||
- "executor-base/**"
|
||||
- "executor2/**"
|
||||
- "executor-computation/**"
|
||||
- "common/**"
|
||||
pull_request:
|
||||
branches: [main, dev]
|
||||
paths:
|
||||
- "executor-base/**"
|
||||
- "executor2/**"
|
||||
- "executor-computation/**"
|
||||
- "common/**"
|
||||
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
|
@ -36,10 +38,12 @@ jobs:
|
|||
path: ~/.m2
|
||||
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
||||
restore-keys: ${{ runner.os }}-m2
|
||||
- name: Build common
|
||||
run: mvn -f common/pom.xml -B install
|
||||
- name: Build executorBase
|
||||
run: mvn -f executor-base/pom.xml -B install
|
||||
- name: Build and analyze
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
run: mvn -f executor2/pom.xml -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=scs-asse-fs21-group1_tapas-executor2
|
||||
run: mvn -f executor-computation/pom.xml -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=scs-asse-fs21-group1_tapas-executor2
|
|
@ -1,15 +1,17 @@
|
|||
name: CI Executor 1
|
||||
name: CI executor-robot
|
||||
on:
|
||||
push:
|
||||
branches: [main, dev]
|
||||
paths:
|
||||
- "executor-base/**"
|
||||
- "executor1/**"
|
||||
- "executor-robot/**"
|
||||
- "common/**"
|
||||
pull_request:
|
||||
branches: [main, dev]
|
||||
paths:
|
||||
- "executor-base/**"
|
||||
- "executor1/**"
|
||||
- "executor-robot/**"
|
||||
- "common/**"
|
||||
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
|
@ -36,10 +38,12 @@ jobs:
|
|||
path: ~/.m2
|
||||
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
||||
restore-keys: ${{ runner.os }}-m2
|
||||
- name: Build executorBase
|
||||
run: mvn -f common/pom.xml -B install
|
||||
- name: Build executorBase
|
||||
run: mvn -f executor-base/pom.xml -B install
|
||||
- name: Build and analyze
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
run: mvn -f executor1/pom.xml -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=scs-asse-fs21-group1_tapas-executor1
|
||||
run: mvn -f executor-robot/pom.xml -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=scs-asse-fs21-group1_tapas-executor1
|
45
.github/workflows/ci.roster.yml
vendored
Normal file
45
.github/workflows/ci.roster.yml
vendored
Normal file
|
@ -0,0 +1,45 @@
|
|||
name: CI Roster
|
||||
on:
|
||||
push:
|
||||
branches: [main, dev]
|
||||
paths:
|
||||
- "roster/**"
|
||||
- "common/**"
|
||||
pull_request:
|
||||
branches: [main, dev]
|
||||
paths:
|
||||
- "roster/**"
|
||||
- "common/**"
|
||||
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
build:
|
||||
name: Build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 11
|
||||
- name: Cache SonarCloud packages
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ~/.sonar/cache
|
||||
key: ${{ runner.os }}-sonar
|
||||
restore-keys: ${{ runner.os }}-sonar
|
||||
- name: Cache Maven packages
|
||||
uses: actions/cache@v1
|
||||
with:
|
||||
path: ~/.m2
|
||||
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
||||
restore-keys: ${{ runner.os }}-m2
|
||||
- name: Build common package
|
||||
run: mvn -f common/pom.xml -B install
|
||||
- name: Build and analyze
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
run: mvn -f roster/pom.xml -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.projectKey=scs-asse-fs21-group1_tapas-assignment
|
145
README.md
145
README.md
|
@ -1,125 +1,63 @@
|
|||
# TAPAS
|
||||
|
||||
This is the main GitHub project for your implementation of the TAPAS application.
|
||||
|
||||
## Run application in developent
|
||||
|
||||
We use Docker & docker-compose in development to easly start all the microservices and other needed application (db's, message-broker's) at once. All microservices have hot-reloads enabled by default!
|
||||
|
||||
#### Start
|
||||
|
||||
```
|
||||
docker-compose up
|
||||
```
|
||||
|
||||
#### Rebuild container
|
||||
|
||||
```
|
||||
docker-compose up --build
|
||||
```
|
||||
|
||||
#### Start detached
|
||||
|
||||
```
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
#### Stop detached
|
||||
|
||||
```
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
## Available Services
|
||||
|
||||
Ports and debug ports of each service are listed below:
|
||||
|
||||
| Name | Port | Debug Port |
|
||||
| ------------------ | ---- | ---------- |
|
||||
| Tasklist | 8081 | 5005 |
|
||||
| Assignment Service | 8082 | 5006 |
|
||||
| Executor Pool | 8083 | 5007 |
|
||||
| Executor 1 | 8084 | 5008 |
|
||||
| Executor 2 | 8085 | 5009 |
|
||||
This is the main GitHub project for the implementation of the TAPAS application from Group 1.
|
||||
|
||||
## Project Structure
|
||||
|
||||
This project is structured as follows:
|
||||
|
||||
- [tapas-tasks](tapas-tasks): standalone project for the Tapas-Tasks micro-service (Spring Boot project)
|
||||
- [tapas-tasks/src](tapas-tasks/src): source code of the project (following the Hexagonal Architecture)
|
||||
- [tapas-tasks/pom.xml](tapas-tasks\pom.xml): Maven pom-file
|
||||
- [app](app): folder as placeholder for a second micro-service (Spring Boot project)
|
||||
- [docker-compose.yml](docker-compose.yml): Docker Compose configuration file for all services
|
||||
- [.github/workflows/build-and-deploy.yml](.github/workflows/build-and-deploy.yml): GitHub actions script (CI/CD workflow)
|
||||
- [.deployment/docker-compose.yml](.deployment/docker-compose.yml): Docker Compose configuration file for all services (deployment)
|
||||
- [.experiments](.experiments): Experiment files for chaos monkey tests
|
||||
- [.github/workflows](.github/workflows): GitHub actions scripts (CI/CD workflow)
|
||||
- [common](common): common library for shared elements across the whole application
|
||||
- [common/src](common/src): source code of the library
|
||||
- [common/pom.xml](common/pom.xml): Maven pom-file
|
||||
- [doc/architecture/decisions](doc/architecture/decisions): ADRs
|
||||
- [doc/workflow.png](doc/workflow.png): Workflow diagram
|
||||
- [executor-base](executor-base): library for the executors. Includes the logic for executors to connect to the system
|
||||
- [executor-base/src](executor-base/src): source code of the library
|
||||
- [executor-base/pom.xml](executor-base/pom.xml): Maven pom-file
|
||||
- [executor-computation](executor-computation): standalone project for the computation executor micro-service (Spring Boot project)
|
||||
- [executor-computation/src](executor-computation/src): source code of the project
|
||||
- [executor-computation/pom.xml](executor-computation/pom.xml): Maven pom-file
|
||||
- [executor-humidity](executor-humidity): standalone project for the humidity executor micro-service (Spring Boot project)
|
||||
- [executor-humidity/src](executor-humidity/src): source code of the project
|
||||
- [executor-humidity/pom.xml](executor-humidity/pom.xml): Maven pom-file
|
||||
- [executor-pool](executor-pool): standalone project for the executor-pool micro-service (Spring Boot project)
|
||||
- [executor-pool/src](executor-pool/src): source code of the project (following the Hexagonal Architecture)
|
||||
- [executor-pool/pom.xml](executor-pool/pom.xml): Maven pom-file
|
||||
- [executor-robot](executor-robot): standalone project for the robot executor micro-service (Spring Boot project)
|
||||
|
||||
## How to Add a New Service with Spring Boot
|
||||
- [executor-robot/src](executor-robot/src): source code of the project
|
||||
- [executor-robot/pom.xml](executor-robot/pom.xml): Maven pom-file
|
||||
|
||||
### Create a new Spring Boot project
|
||||
- [mocks](mocks): some auction-house mock files to test localy
|
||||
|
||||
- Recommended: use [Spring Initialzr](https://start.spring.io/) (Maven, Spring Boot 2.5.5, Jar, Java 11, dependencies as needed)
|
||||
- Set the Spring application properties for your service (e.g., port of the web server) in `src/resources/application.properties`
|
||||
- [roster](roster): standalone project for the Roster micro-service (Spring Boot project)
|
||||
|
||||
### Update the Docker Compose file
|
||||
- [roster/src](roster/src): source code of the project (following the Hexagonal Architecture)
|
||||
- [roster/pom.xml](roster/pom.xml): Maven pom-file
|
||||
|
||||
Your TAPAS application is a multi-container Docker application ran with [Docker Compose](https://docs.docker.com/compose/).
|
||||
To add your newly created service to the Docker Compose configuration file, you need to create a new service
|
||||
definition in [docker-compose.yml](docker-compose.yml):
|
||||
- [tapas-auction-house](tapas-auction-house): standalone project for the Tapas-Aution-House micro-service (Spring Boot project)
|
||||
|
||||
- copy and edit the `tapas-tasks` service definition from [lines 29-42](https://github.com/scs-asse/tapas/blob/424a5f5aa2d6524acfe95d93000571884ed9d66f/docker-compose.yml#L29-L42)
|
||||
- change `command` (see [line 31](https://github.com/scs-asse/tapas/blob/main/docker-compose.yml#L31))
|
||||
to use the name of the JAR file generated by Maven for your service
|
||||
- note: if you change the version of your service, you need to update this line to reflect the change
|
||||
- update the Traefik label names to reflect the name of your new service (see [lines 37-42](https://github.com/scs-asse/tapas/blob/424a5f5aa2d6524acfe95d93000571884ed9d66f/docker-compose.yml#L37-L42))
|
||||
- e.g., change `traefik.http.routers.tapas-tasks.rule` to `traefik.http.routers.<new-service-name>.rule`
|
||||
- update the Traefik `rule` (see [line 37](https://github.com/scs-asse/tapas/blob/424a5f5aa2d6524acfe95d93000571884ed9d66f/docker-compose.yml#L37)) with the name of your new service: `` Host(`<new-service-name>.${PUB_IP}.nip.io`) ``
|
||||
- update the Traefik `port` (see [line 39](https://github.com/scs-asse/tapas/blob/424a5f5aa2d6524acfe95d93000571884ed9d66f/docker-compose.yml#L39)) with the port configured for your new service
|
||||
- [tapas-auction-house/src](tapas-auction-house/src): source code of the project (following the Hexagonal Architecture)
|
||||
- [tapas-auction-house/pom.xml](tapas-auction-house/pom.xml): Maven pom-file
|
||||
|
||||
### Update the GitHub Actions Workflow
|
||||
- [tapas-tasks](tapas-tasks): standalone project for the Tapas-Tasks micro-service (Spring Boot project)
|
||||
|
||||
This project uses GitHub Actions to build and deploy your TAPAS application whenever a new commit is
|
||||
pushed on the `main` branch. You can add your new service to the GitHub Actions workflow defined in
|
||||
[.github/workflows/build-and-deploy.yml](.github/workflows/build-and-deploy.yml):
|
||||
- [tapas-tasks/src](tapas-tasks/src): source code of the project (following the Hexagonal Architecture)
|
||||
- [tapas-tasks/pom.xml](tapas-tasks/pom.xml): Maven pom-file
|
||||
|
||||
- copy and edit the definition for `tapas-tasks` from [line 28-30](https://github.com/scs-asse/tapas/blob/424a5f5aa2d6524acfe95d93000571884ed9d66f/.github/workflows/build-and-deploy.yml#L28-L30)
|
||||
- update the `mvn` command used to build your service to point to the `pom.xml` file of your new service (see [line 29](https://github.com/scs-asse/tapas/blob/424a5f5aa2d6524acfe95d93000571884ed9d66f/.github/workflows/build-and-deploy.yml#L29))
|
||||
- update the `cp` command to point to the JAR file of your new service directive (see [line 30](https://github.com/scs-asse/tapas/blob/424a5f5aa2d6524acfe95d93000571884ed9d66f/.github/workflows/build-and-deploy.yml#L30))
|
||||
- note you will need to update the complete file path (folder structure and JAR name)
|
||||
|
||||
### How to Run Your Service Locally
|
||||
|
||||
You can run and test your micro-service on your local machine just like a regular Maven project:
|
||||
|
||||
- Run from IntelliJ:
|
||||
- Reload _pom.xml_ if necessary
|
||||
- Run the micro-service's main class from IntelliJ for all required projects
|
||||
- Use Maven to run from the command line:
|
||||
|
||||
```shell
|
||||
mvn spring-boot:run
|
||||
```
|
||||
|
||||
## How to Deploy on your VM
|
||||
|
||||
1. Start your Ubuntu VM on Switch.
|
||||
- VM shuts down automatically at 2 AM
|
||||
- Group admins can do this via https://engines.switch.ch/horizon
|
||||
2. Push new code to the _main_ branch
|
||||
- Check the status of the workflow on the _Actions_ page of the GitHub project
|
||||
- We recommend to test your project locally before pushing the code to GitHub. The GitHub Organizations
|
||||
used in the course are on a free tier plan, which comes with [various limits](https://github.com/pricing).
|
||||
3. Open in your browser `https://app.<server-ip>.nip.io`
|
||||
|
||||
For the server IP address (see below), you should use dashes instead of dots, e.g.: `127.0.0.1` becomes `127-0-0-1`.
|
||||
- [docker-compose.yml](docker-compose.yml): Docker Compose configuration file for local development
|
||||
|
||||
## VM Configurations
|
||||
|
||||
Specs (we can upgrade if needed):
|
||||
|
||||
- 1 CPU
|
||||
- 2 GB RAM
|
||||
- 20 GB HD
|
||||
- Ubuntu 20.04
|
||||
- 1 CPU
|
||||
- 2 GB RAM
|
||||
- 20 GB HD
|
||||
- Ubuntu 20.04
|
||||
|
||||
| Name | Server IP |
|
||||
| ------------------ | ------------- |
|
||||
|
@ -128,8 +66,3 @@ Specs (we can upgrade if needed):
|
|||
| SCS-ASSE-VM-Group3 | 86.119.34.242 |
|
||||
| SCS-ASSE-VM-Group4 | 86.119.35.199 |
|
||||
| SCS-ASSE-VM-Group5 | 86.119.35.72 |
|
||||
|
||||
## Architecture Decision Records
|
||||
|
||||
We recommend you to use [adr-tools](https://github.com/npryce/adr-tools) to manage your ADRs here in
|
||||
this GitHub project in a dedicated folder. The tool works best on a Mac OS or Linux machine.
|
||||
|
|
BIN
TAPAS-Final/Editorial Notes.pdf
Normal file
BIN
TAPAS-Final/Editorial Notes.pdf
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
TAPAS-Final/Exercises/Exercise 8: Testing/Testing Report.pdf
Normal file
BIN
TAPAS-Final/Exercises/Exercise 8: Testing/Testing Report.pdf
Normal file
Binary file not shown.
Binary file not shown.
BIN
TAPAS-Final/Final Team Reflections.pdf
Normal file
BIN
TAPAS-Final/Final Team Reflections.pdf
Normal file
Binary file not shown.
BIN
TAPAS-Final/Tapas_Presentation_Group1.pdf
Normal file
BIN
TAPAS-Final/Tapas_Presentation_Group1.pdf
Normal file
Binary file not shown.
BIN
TAPAS-Final/doc/System Overview.jpeg
Normal file
BIN
TAPAS-Final/doc/System Overview.jpeg
Normal file
Binary file not shown.
After Width: | Height: | Size: 408 KiB |
|
@ -0,0 +1,25 @@
|
|||
# 1. microservice architecture
|
||||
|
||||
Date: 2021-12-02
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
The system is made up of five distinct bounded contexts, namely the Task Domain, the Roster Domain, the Executor Pool Domain, the Executor Domain, and the Auction Domain. The way that these bounded contexts function together to fulfil the system requirements can be based on many different architectures.
|
||||
|
||||
## Decision
|
||||
|
||||
The system will follow the Microservice architecture.
|
||||
|
||||
The Microservices architecture suits our system's driving architectural characteristics particularly well. Scalability and fault tolerance are two of the systems top 3 driving characteristics and elasticity and evolvability are two of the systems other driving characteristics. These are all characteristics that the Microservices architecture excels at. Furthermore, none of our system's driving characteristics is hindered by the Microservices architecture (none of them have below 3 stars out of 5).
|
||||
|
||||
We do not expect to have a single monolithic database, so this is not a concern.
|
||||
|
||||
## Consequences
|
||||
|
||||
There is a considerable amount of communication between bounded contexts. This could cause responsiveness and performance issues due to added latency. This could therefore mean we would need to use asynchronous REST calls or publish-subscribe communication to mitigate these issues as much of the communication does not have to be synchronous.
|
||||
|
||||
Using a distributed architecture makes managing transactions more complex. This means that we could need to use sagas to manage distributed transactions. So far the only workflow that would require transactions between domains would be the deletion of tasks.
|
|
@ -0,0 +1,24 @@
|
|||
# 5. Event driven communication
|
||||
|
||||
Date: 2021-10-18
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
The TAPAS system will be implemented following the Microservices architecture. Each service encapsulates a different bounded context with different functional and non-functional requirements. The TAPAS system could either be implemented as Synchronous Microservices or Event-Driven Microservices.
|
||||
|
||||
## Decision
|
||||
The TAPAS system could either be implemented as Event-Driven Microservices.
|
||||
|
||||
Event-driven asynchronous communication suits the TAPAS system better than synchronous communication. This will facilitate looser coupling between services.
|
||||
|
||||
Scalability, one of the system's top 3 driving architectural characteristics, will be positively impacted as individual services can be scaled up and down as needed.
|
||||
|
||||
Responsiveness (another of the system's driving architectural characteristics) will also improve as services do not need to wait for other services to respond before responding themselves.
|
||||
|
||||
## Consequences
|
||||
|
||||
Asynchronous communication makes error handling more complex. At this moment in time we do not see this coming a problem. However, if the error handling becomes overly complex, then we might need to implement the workflow event pattern in order to combat this increased complexity.
|
|
@ -0,0 +1,26 @@
|
|||
# 3. Separate service for the Roster
|
||||
|
||||
Date: 2021-11-21
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
The Task domain includes the creation and deletion of tasks from the system. It also stores all tasks and keeps track of a task's status. The Roster domain keeps track of internal task execution. It receives tasks from the Task domain. If the task can be executed internally then it queues it and keeps track of it until it has been executed by an internal executor. If it cannot be executed internally then it sends the task on to the Auction domain. These two domains could be implemented as a consolidated service or as two separate services.
|
||||
|
||||
## Decision
|
||||
|
||||
We will create two separate services; a Task List service and a Roster service.
|
||||
|
||||
Firstly, having two separate services will improve the system's fault tolerance. If the Task List goes down then the Roster can keep on managing the internal execution of tasks. Similarly, if the Roster goes down then the Task List can keep on being receiving input from users. Since we use asynchronous messaging for internal communication, the services can process new events when they come back up. The creation and execution of tasks is the heartbeat of the TAPAS system. Therefore, making it more fault tolerant is critical.
|
||||
|
||||
|
||||
Secondly, we don't expect the Task List to change as frequently as the Roster. The Task List usually just needs to change when there are large new features that will impact more than just the Task domain. These large changes will be not very frequent. Conversely, we expect the Roster to change more frequently due to changes in the assignment algorithm, communication with executors, or error handling.
|
||||
|
||||
## Consequences
|
||||
|
||||
Before deleting a task from the Task List we first need to delete it from the Roster (and make sure it is not being executed). Having these as two separate services makes this transaction more complicated to manage.
|
||||
|
||||
Moreover, the services have to talk a lot to each other and having them seperated will add latency between them.
|
|
@ -0,0 +1,27 @@
|
|||
# 4. Separate service for each Executor
|
||||
|
||||
Date: 2021-11-21
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
Executors must receive tasks of different types and execute them. The executors could either all be implemented within one service or as multiple services, one for each type of executor.
|
||||
|
||||
## Decision
|
||||
|
||||
We will have a separate service for each type of executor.
|
||||
|
||||
Firstly, execution time differs significantly between task types. Therefore, having seperate services will allow the executors to scale differently based on their tasks' specific needs.
|
||||
|
||||
Secondly, the systems functioning should not be disrupted in case an Executor fails. Having each type of executor in a separate service will increase fault tolerance in this regard.
|
||||
|
||||
Lastly, evolvability is one of the systems most important non-functional requirement and providers of executors need to be able to easily add executors to the executor pool. These factors are also positively impacted by having seperate services.
|
||||
|
||||
There should not be any shared data between the executors. Additionally, there should be no flow of information between them. Thus, there should be no issues due to workflow and data concerns due to this decision.
|
||||
|
||||
## Consequences
|
||||
|
||||
Executors share a lot of functionality when it comes to connecting to the rest of the system. Therefore, this decision means that we will either have to duplicate the code that implements the common functionality, or we have to have a way to share the code (e.g. through a common library)
|
|
@ -0,0 +1,26 @@
|
|||
# 5. Separate service for the Executor Pool
|
||||
|
||||
Date: 2021-11-21
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
The Executor Pool has to keep track of which Executors are online and what task types they can execute. The Roster keeps track of tasks that need to be executed and assigns Executors to tasks. The Executor Pool functionality could be implemented in a separate service or as a part of the Roster.
|
||||
|
||||
## Decision
|
||||
|
||||
The executor pool will be implemented as a separate service.
|
||||
|
||||
Most importantly, the Executor Pool and the Roster need to scale differently. The Roster needs to scale depending on the number of tasks in the system while the Executor Pool needs to scale based on the number of Executors in the system. As the number of tasks is likely to far exceed the number of Executors, the two services should scale differently.
|
||||
|
||||
|
||||
Another reason why the two should be separate services is that they have quite different responsibilities and reasons to change. On one hand, the Executor Pool manages the Executors, and therefore it will change if we want to add functionality that impacts how Executors log onto the system and how we keep track of them. For example, if we want to check if an executor fulfills some requirements before logging on. On the other hand, the Roster manages the internal execution of tasks.
|
||||
|
||||
Lastly, separating the two will improve the fault tolerance of the system. If the Executor Pool goes down then the Roster will keep being able to delegate tasks to internal executors, although the Roster will not be notified about added/removed executors while the Executor Pool is down. This should however not be a problem if the Executor Pool is only down for a short amount of time. Similarly, the Executor Pool can continue to keep track of added and removed executors while the Roster is down.
|
||||
|
||||
## Consequences
|
||||
|
||||
Having the services separate will add latency between an executor being added to the Executor Pool and the Roster being notified about it. However, it is only really critical that the Roster is notified about new Executors that execute a new Task Type, which should happen relatively rarely. Therefore, a small increase in latency to this workflow should not have a large effect on the overall operation of the system.
|
|
@ -0,0 +1,29 @@
|
|||
# 7. Separate service for Auction House
|
||||
|
||||
Date: 2021-11-21
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
The Auction House has to launch auctions and manage auctions for tasks that we cannot execute internally. Moreover, it has to subscribe to other Auction Houses and bid on their auctions. The Roster keeps track of tasks that need to be executed and assigns Executors to tasks. Additionally, the Roster passes tasks that cannot be executed internally onto the Auction House. The Auction House functionality can either be implemented as a separate service or as a part of the Roster.
|
||||
|
||||
## Decision
|
||||
|
||||
The Auction House will be implemented as a separate service.
|
||||
|
||||
Most importantly, the Auction House and the Roster need to scale differently. The Roster needs to scale depending on the number of tasks in the system as all tasks go through the Roster initially. We predict that the majority of tasks will be executed internally. The Auction House also needs to scale depending on the number of external auctions. Moreover, the Auction House has different throughput as the Auction House has to communicate synchronously with a number of external clients.
|
||||
|
||||
Furthermore, separating the Auction House from the Roster will allow us to isolate the Roster from external communication. This improves the security of the TAPAS system as the Roster is more critical to the functioning of the system than the Auction House. Opening the Roster up to external communication could for example expose it to denial of service attacks.
|
||||
|
||||
Similarly, having two services separate will improve fault tolerance as either can fail without taking down the other. This is more important for the Roster as it can keep the main workflow of executing tasks going if the Auction House goes down.
|
||||
|
||||
## Consequences
|
||||
|
||||
Latency is added to the communication between the two domains. However, this should not have a major impact on the overall functioning of the system.
|
||||
|
||||
Data needs to be duplicated since both services need to keep track of the executors available in our system.
|
||||
|
||||
Deleting of tasks becomes an even more complex transaction as now we also need to check the Auction House to see if the task is being auctioned before deleting (we don't want to delete a task that another group will then go on to execute). This transaction now involves three services (the Task List, the Roster, and the Auction House). We will most likely need to implement a saga pattern to manage this transaction properly.
|
|
@ -0,0 +1,23 @@
|
|||
# 7. Common library for shared code
|
||||
|
||||
Date: 2021-11-21
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
The numerous services that make up the Tapas app all have common, non-domain specific, functionality that can be shared via a common library, or be replicated in each service.
|
||||
|
||||
## Decision
|
||||
|
||||
We will use a common code library for shared code which does not change frequently, but if it would be changed, would need to be changed everywhere.
|
||||
|
||||
This improves maintainability as you only have to change the code in one place. This does not only save time, but also reduces the likelihood of forgetting to replace it in one service which could introduce bugs.
|
||||
|
||||
## Consequences
|
||||
|
||||
Changes in the common code will most likely require multiple services to be redeployed. However, those services would most likely have to have been changed individually and redeployed anyways.
|
||||
|
||||
Another consequence is that versioning becomes more complicated.
|
|
@ -0,0 +1,29 @@
|
|||
# 8. Executor base library
|
||||
|
||||
Date: 2021-11-21
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
According to the project requirements, Executors can be developed by other teams within the organisation. Executors all use the same logic to communicate with other services. This means that their code base is near identical except for the code that implements their specific task execution. The code that implements the executor's shared logic can either be implemented by a shared library, or replicated across all executors.
|
||||
|
||||
## Decision
|
||||
|
||||
We will implement a shared library for common Executor functionality.
|
||||
|
||||
All executors use the same logic to communicate with other services, any change to this logic would have to be made for every executor. Having this shared logic in a separate library makes it easy to change the common logic at one place. The code sharing happens at compile time, which reduces the chance of runtime errors, compared to other code sharing approaches.
|
||||
|
||||
Additionally, if other teams need to create executors, they can just reference the executor-base library and implement the actual execution part. Therefore, they don’t need to worry about the connection implementations to the TAPAS system.
|
||||
|
||||
## Consequences
|
||||
|
||||
Using a shared library will increase the complexity of the executors.
|
||||
|
||||
Changes in the common code will most likely require multiple services to be redeployed. However, those services would most likely have to have been changed individually and redeployed anyways.
|
||||
|
||||
Another consequence is that versioning becomes more complicated.
|
||||
|
||||
Lastly, we have to make sure that we don't become over reliant on everyone using this library to communicate with the TAPAS system. Future IoT Executors might want to use a more lightweight way to communicate, so we will have to be aware of this.
|
|
@ -0,0 +1,21 @@
|
|||
# 9. Separation of common and executor-base library
|
||||
|
||||
Date: 2021-11-21
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
We have two code sharing libraries, the executor-base and the common library. The executor-base implements shared logic that all executors need, but other services don't. The common library has much more wide-reaching implementations, such as the implementation of the SelfValidating class. These could form a single common library, or two separate common libraries.
|
||||
|
||||
## Decision
|
||||
|
||||
There will be a separate library for common and executor-base.
|
||||
|
||||
The libraries share different type of code, and have different reasons to change. It would not make sense to have the shared code from executors in every other service which needs access to other shared code. Services that use the code in the common library should not need to be dependent in any way on the executor-base.
|
||||
|
||||
## Consequences
|
||||
|
||||
Changes impact fewer services. However, this decision will increase the number of service dependencies and therefore increase complexity in managing those dependencies.
|
|
@ -0,0 +1,23 @@
|
|||
# 10. Single ownership for services
|
||||
|
||||
Date: 2021-10-18
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
There are generally three options for persisting data. Single ownership, joint ownership, or common ownership.
|
||||
|
||||
## Decision
|
||||
|
||||
We will go for single ownership for all our databases. That is, each domain/service that will persist data will have its own database of which that service will be the sole owner. Any service that wants to write data to or read data from a database other than its own will have to go through the database's owner.
|
||||
|
||||
Having single ownership preserves the bounded contexts and allows each service to be its own architectural quantum. This allows the services to stay decoupled and therefore can allow us to also decouple the scope of the architectural characteristics of each bounded context. We can for example more easily scale each service up and down as we can also scale the databases (size, performance) for each service.
|
||||
|
||||
## Consequences
|
||||
|
||||
Having a distributed architecture and asynchronous communication along with single ownership will force us to rely on eventual consistency.
|
||||
|
||||
Moreover, this decision could negatively impact performance as we add latency to data access across bounded contexts.
|
21
TAPAS-Final/doc/architecture/decisions/0011-data-access.md
Normal file
21
TAPAS-Final/doc/architecture/decisions/0011-data-access.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
# 11. Data access
|
||||
|
||||
Date: 2021-10-18
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
Services can generally access data that they do not own via the Interservice Communication Pattern, the Column Schema Replication Pattern, the Replicated Caching Pattern, or the Data Domain Pattern
|
||||
|
||||
## Decision
|
||||
|
||||
Data access will follow the Interservice Communication Pattern.
|
||||
|
||||
All the information needed to process any given event in our system is almost always included in the event itself or already cached in the service from a previous event (e.g. the Executor registry being cached in the Roster and Auction House via new/removed executor events). Therefore, there are very few occasions where access to data from other services is needed. Since the Interservice Communication Pattern is the simplest, we will go for that.
|
||||
|
||||
## Consequences
|
||||
|
||||
There will be performance and fault tolerance issues when we need to access data from other services, but since does not often occur it will not have a significant effect on the system overall.
|
|
@ -0,0 +1,27 @@
|
|||
# 12. Separate service for Crawler
|
||||
|
||||
Date: 2021-10-18
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
The Auction House Discovery Crawler (for simplicity referred to as the Crawler) continuously crawls external auction houses that we already know about to try and discover new auction houses. It maintains the information we have about other auction houses and notifies our Action House when it has discovered new information. The Crawler can either be a part of the Auction House service or be a standalone service.
|
||||
|
||||
## Decision
|
||||
|
||||
The Crawler will be implemented as a standalone service.
|
||||
|
||||
The most important reason for this is that it has different responsibilities to the Auction House. The Crawler has to continuously crawl for new information while the Auction House only needs to launch auctions for internal tasks and bid on external auctions.
|
||||
|
||||
Additionally, the services might have to scale differently depending on how rapidly we want to crawl new auction house information.
|
||||
|
||||
## Consequences
|
||||
|
||||
We will have to duplicate some code and data as the auction house information will be duplicated across both services (although the business logic for updating the information based on the timestamp will solely reside in the Crawler).
|
||||
|
||||
There will be an added latency to the communication between the two domains. However, since this information should not be overly time sensitive (a few ms should not matter), this should not impact overall system performance.
|
||||
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
# 13. Use Hypermedia APIs when possible
|
||||
|
||||
Date: 2021-10-18
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
When Executors need to communicate with external devices they can either hard code the API requests or it can discover them at run time via Semantic Hypermedia.
|
||||
|
||||
## Decision
|
||||
|
||||
We will discover the requests at run-time via the Semantic Hypermedia APIs.
|
||||
|
||||
This will decouples the Executors that offer physical services from the Web-enabled devices they use. This will make these Executors more resilient to change in the devices they use and therefore less likely to experience problems over time as the device APIs change.
|
||||
|
||||
## Consequences
|
||||
|
||||
The implementation of the run-time discovery is more complex, at least until the team has gained more experience in this domain.
|
|
@ -0,0 +1,27 @@
|
|||
# 13. Use Choreography For Task Execution Workflow
|
||||
|
||||
Date: 2021-12-10
|
||||
|
||||
## Status
|
||||
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
|
||||
The Task Execution Workflow (workflow that takes a task from created to executed) is the main workflow in the whole TAPAS system. It can either be orchestrated, or choreographed. If it is choreographed then it should follow one of the following patterns: Front Controller Pattern, Stateless, or Stamp coupling.
|
||||
|
||||
## Decision
|
||||
|
||||
The Task Execution Workflow will be choreographed and will follow the Front Controller Pattern, storing the workflow state in the Task List.
|
||||
|
||||
The reason for why it should be choreographed is that this will optimise the for responsiveness, scalability, and fault tolerance. There are all driving architectural characteristics for our system.
|
||||
|
||||
Moreover, the workflow should utilise the Front Controller Pattern as this pattern fits the architecture naturally. The tasks in the Task List already have a Status property. This property can be used to keep track of the state of the task within the execution workflow. Moreover, since updating this state is already a part of the architecture, the system will not suffer greatly from the normal drawback of using this pattern (additional state property, increased communication overhead).
|
||||
|
||||
Using this pattern will make querying the state trivial since we just need to look up the status of the task in the Task List. Moreover, it makes the Task List a pseudo-orchestrator within our choreography which will reduce the complexity for error handling, as much of it can be added to the Task List. Lastly, since the Task List is accessible by the users that created the task, they can then make ultimate decisions for error handling. For example, when no executor has been found for a task (neither internal nor external) then the end user could either delete the task or ask for it to be re-run through the roster and auction house at a later date.
|
||||
|
||||
## Consequences
|
||||
|
||||
Making the Task Execution Workflow choreographed will make error handling more complex. For now it seems manageable, but if the complexity becomes to great we could implement the Workflow Event Pattern in order to mitigate the increased complexity.
|
||||
|
||||
Recoverability and state management might also suffer, but a good implementation of the Front Controller Pattern should mitigate more of the negatives for those aspects.
|
1033
TAPAS-Final/doc/workflow.bpmn
Normal file
1033
TAPAS-Final/doc/workflow.bpmn
Normal file
File diff suppressed because it is too large
Load Diff
BIN
TAPAS-Final/doc/workflow.png
Normal file
BIN
TAPAS-Final/doc/workflow.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.0 MiB |
|
@ -1,18 +0,0 @@
|
|||
FROM openjdk:11 AS development
|
||||
|
||||
WORKDIR /opt/app
|
||||
|
||||
# ENV SPRING_DATASOURCE_URL=jdbc:mysql://backend-db:3306/db
|
||||
|
||||
COPY .mvn/ .mvn
|
||||
COPY mvnw pom.xml mvnw.cmd ./
|
||||
|
||||
RUN apt-get clean && apt-get update && apt-get install dos2unix
|
||||
RUN dos2unix mvnw
|
||||
|
||||
RUN ./mvnw dependency:go-offline
|
||||
|
||||
COPY src /opt/app/src
|
||||
COPY *target /opt/app/target
|
||||
|
||||
CMD ["./mvnw", "spring-boot:run", "-Dspring-boot.run.jvmArguments=\"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005\"", "-Dspring.devtools.restart.enabled=true"]
|
|
@ -1,13 +0,0 @@
|
|||
package ch.unisg.assignment;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class AssignmentApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(AssignmentApplication.class, args);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.adapter.in.web;
|
||||
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import ch.unisg.assignment.assignment.application.port.in.ApplyForTaskCommand;
|
||||
import ch.unisg.assignment.assignment.application.port.in.ApplyForTaskUseCase;
|
||||
import ch.unisg.assignment.assignment.domain.ExecutorInfo;
|
||||
import ch.unisg.assignment.assignment.domain.Task;
|
||||
|
||||
@RestController
|
||||
public class ApplyForTaskController {
|
||||
private final ApplyForTaskUseCase applyForTaskUseCase;
|
||||
|
||||
public ApplyForTaskController(ApplyForTaskUseCase applyForTaskUseCase) {
|
||||
this.applyForTaskUseCase = applyForTaskUseCase;
|
||||
}
|
||||
|
||||
@PostMapping(path = "/task/apply", consumes = {"application/json"})
|
||||
public Task applyForTask(@RequestBody ExecutorInfo executorInfo) {
|
||||
|
||||
ApplyForTaskCommand command = new ApplyForTaskCommand(executorInfo.getExecutorType(),
|
||||
executorInfo.getIp(), executorInfo.getPort());
|
||||
|
||||
return applyForTaskUseCase.applyForTask(command);
|
||||
|
||||
}
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.adapter.in.web;
|
||||
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import ch.unisg.assignment.assignment.application.port.in.NewTaskCommand;
|
||||
import ch.unisg.assignment.assignment.application.port.in.NewTaskUseCase;
|
||||
import ch.unisg.assignment.assignment.domain.Task;
|
||||
|
||||
@RestController
|
||||
public class NewTaskController {
|
||||
private final NewTaskUseCase newTaskUseCase;
|
||||
|
||||
public NewTaskController(NewTaskUseCase newTaskUseCase) {
|
||||
this.newTaskUseCase = newTaskUseCase;
|
||||
}
|
||||
|
||||
@PostMapping(path = "/task", consumes = {"application/json"})
|
||||
public ResponseEntity<Void> newTaskController(@RequestBody Task task) {
|
||||
|
||||
NewTaskCommand command = new NewTaskCommand(task.getTaskID(), task.getTaskType());
|
||||
|
||||
boolean success = newTaskUseCase.addNewTaskToQueue(command);
|
||||
|
||||
if (success) {
|
||||
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||
}
|
||||
return new ResponseEntity<>(HttpStatus.CONFLICT);
|
||||
|
||||
}
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.adapter.in.web;
|
||||
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.ControllerAdvice;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
|
||||
import ch.unisg.assignment.common.exception.ErrorResponse;
|
||||
import ch.unisg.assignment.common.exception.InvalidIP4Exception;
|
||||
import ch.unisg.assignment.common.exception.PortOutOfRangeException;
|
||||
|
||||
@ControllerAdvice
|
||||
public class WebControllerExceptionHandler {
|
||||
|
||||
@ExceptionHandler(PortOutOfRangeException.class)
|
||||
public ResponseEntity<ErrorResponse> handleException(PortOutOfRangeException e){
|
||||
|
||||
ErrorResponse error = new ErrorResponse(HttpStatus.BAD_REQUEST, e.getLocalizedMessage());
|
||||
return new ResponseEntity<>(error, error.getHttpStatus());
|
||||
|
||||
}
|
||||
|
||||
@ExceptionHandler(InvalidIP4Exception.class)
|
||||
public ResponseEntity<ErrorResponse> handleException(InvalidIP4Exception e){
|
||||
|
||||
ErrorResponse error = new ErrorResponse(HttpStatus.BAD_REQUEST, e.getLocalizedMessage());
|
||||
return new ResponseEntity<>(error, error.getHttpStatus());
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,55 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.adapter.out.web;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import ch.unisg.assignment.assignment.application.port.out.GetAllExecutorInExecutorPoolByTypePort;
|
||||
import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType;
|
||||
|
||||
@Component
|
||||
@Primary
|
||||
public class GetAllExecutorInExecutorPoolByTypeAdapter implements GetAllExecutorInExecutorPoolByTypePort {
|
||||
|
||||
@Override
|
||||
public boolean doesExecutorTypeExist(ExecutorType type) {
|
||||
String server = "http://127.0.0.1:8083";
|
||||
|
||||
Logger logger = Logger.getLogger(PublishNewTaskEventAdapter.class.getName());
|
||||
|
||||
|
||||
HttpClient client = HttpClient.newHttpClient();
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create(server + "/executor-pool/GetAllExecutorInExecutorPoolByType/" + type.getValue()))
|
||||
.header("Content-Type", "application/json")
|
||||
.GET()
|
||||
.build();
|
||||
|
||||
|
||||
try {
|
||||
HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
if (response.statusCode() == HttpStatus.OK.value()) {
|
||||
JSONArray jsonArray = new JSONArray(response.body().toString());
|
||||
if (jsonArray.length() > 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} catch (IOException | InterruptedException e) {
|
||||
logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
||||
// Restore interrupted state...
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.adapter.out.web;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import ch.unisg.assignment.assignment.application.port.out.NewTaskEventPort;
|
||||
import ch.unisg.assignment.assignment.domain.event.NewTaskEvent;
|
||||
|
||||
@Component
|
||||
@Primary
|
||||
public class PublishNewTaskEventAdapter implements NewTaskEventPort {
|
||||
|
||||
String server = "http://127.0.0.1:8084";
|
||||
String server2 = "http://127.0.0.1:8085";
|
||||
|
||||
Logger logger = Logger.getLogger(PublishNewTaskEventAdapter.class.getName());
|
||||
|
||||
@Override
|
||||
public void publishNewTaskEvent(NewTaskEvent event) {
|
||||
|
||||
HttpClient client = HttpClient.newHttpClient();
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create(server + "/newtask/" + event.taskType.getValue()))
|
||||
.GET()
|
||||
.build();
|
||||
|
||||
|
||||
try {
|
||||
client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
} catch (IOException | InterruptedException e) {
|
||||
logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
||||
// Restore interrupted state...
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
|
||||
HttpClient client2 = HttpClient.newHttpClient();
|
||||
HttpRequest request2 = HttpRequest.newBuilder()
|
||||
.uri(URI.create(server2 + "/newtask/" + event.taskType.getValue()))
|
||||
.GET()
|
||||
.build();
|
||||
|
||||
|
||||
try {
|
||||
client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
} catch (IOException | InterruptedException e) {
|
||||
logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
||||
// Restore interrupted state...
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,50 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.adapter.out.web;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import ch.unisg.assignment.assignment.application.port.out.TaskAssignedEventPort;
|
||||
import ch.unisg.assignment.assignment.domain.event.TaskAssignedEvent;
|
||||
|
||||
@Component
|
||||
@Primary
|
||||
public class PublishTaskAssignedEventAdapter implements TaskAssignedEventPort {
|
||||
|
||||
String server = "http://127.0.0.1:8081";
|
||||
|
||||
Logger logger = Logger.getLogger(PublishTaskAssignedEventAdapter.class.getName());
|
||||
|
||||
@Override
|
||||
public void publishTaskAssignedEvent(TaskAssignedEvent event) {
|
||||
|
||||
String body = new JSONObject()
|
||||
.put("taskId", event.taskID)
|
||||
.toString();
|
||||
|
||||
HttpClient client = HttpClient.newHttpClient();
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create(server + "/tasks/assignTask"))
|
||||
.header("Content-Type", "application/json")
|
||||
.POST(HttpRequest.BodyPublishers.ofString(body))
|
||||
.build();
|
||||
|
||||
|
||||
try {
|
||||
client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
} catch (IOException | InterruptedException e) {
|
||||
logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
||||
// Restore interrupted state...
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,53 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.adapter.out.web;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import ch.unisg.assignment.assignment.application.port.out.TaskCompletedEventPort;
|
||||
import ch.unisg.assignment.assignment.domain.event.TaskCompletedEvent;
|
||||
|
||||
@Component
|
||||
@Primary
|
||||
public class PublishTaskCompletedEventAdapter implements TaskCompletedEventPort {
|
||||
|
||||
String server = "http://127.0.0.1:8081";
|
||||
|
||||
Logger logger = Logger.getLogger(PublishTaskCompletedEventAdapter.class.getName());
|
||||
|
||||
@Override
|
||||
public void publishTaskCompleted(TaskCompletedEvent event) {
|
||||
|
||||
String body = new JSONObject()
|
||||
.put("taskId", event.taskID)
|
||||
.put("status", event.status)
|
||||
.put("taskResult", event.result)
|
||||
.toString();
|
||||
|
||||
HttpClient client = HttpClient.newHttpClient();
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create(server + "/tasks/completeTask"))
|
||||
.header("Content-Type", "application/json")
|
||||
.POST(HttpRequest.BodyPublishers.ofString(body))
|
||||
.build();
|
||||
|
||||
|
||||
try {
|
||||
client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
} catch (IOException | InterruptedException e) {
|
||||
logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
||||
// Restore interrupted state...
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.application.port.in;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType;
|
||||
import ch.unisg.assignment.assignment.domain.valueobject.IP4Adress;
|
||||
import ch.unisg.assignment.assignment.domain.valueobject.Port;
|
||||
import ch.unisg.assignment.common.SelfValidating;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Value;
|
||||
|
||||
@Value
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
public class ApplyForTaskCommand extends SelfValidating<ApplyForTaskCommand>{
|
||||
|
||||
@NotNull
|
||||
private final ExecutorType taskType;
|
||||
|
||||
@NotNull
|
||||
private final IP4Adress executorIP;
|
||||
|
||||
|
||||
@NotNull
|
||||
private final Port executorPort;
|
||||
|
||||
public ApplyForTaskCommand(ExecutorType taskType, IP4Adress executorIP, Port executorPort) {
|
||||
this.taskType = taskType;
|
||||
this.executorIP = executorIP;
|
||||
this.executorPort = executorPort;
|
||||
this.validateSelf();
|
||||
}
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.application.port.in;
|
||||
|
||||
import ch.unisg.assignment.assignment.domain.Task;
|
||||
|
||||
public interface ApplyForTaskUseCase {
|
||||
Task applyForTask(ApplyForTaskCommand applyForTaskCommand);
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.application.port.in;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType;
|
||||
import ch.unisg.assignment.common.SelfValidating;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Value;
|
||||
|
||||
@Value
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
public class NewTaskCommand extends SelfValidating<NewTaskCommand> {
|
||||
|
||||
@NotNull
|
||||
private final String taskID;
|
||||
|
||||
@NotNull
|
||||
private final ExecutorType taskType;
|
||||
|
||||
public NewTaskCommand(String taskID, ExecutorType taskType) {
|
||||
this.taskID = taskID;
|
||||
this.taskType = taskType;
|
||||
this.validateSelf();
|
||||
}
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.application.port.out;
|
||||
|
||||
import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType;
|
||||
|
||||
public interface GetAllExecutorInExecutorPoolByTypePort {
|
||||
boolean doesExecutorTypeExist(ExecutorType type);
|
||||
}
|
||||
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.application.port.out;
|
||||
|
||||
import ch.unisg.assignment.assignment.domain.event.NewTaskEvent;
|
||||
|
||||
public interface NewTaskEventPort {
|
||||
void publishNewTaskEvent(NewTaskEvent event);
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.application.port.out;
|
||||
|
||||
import ch.unisg.assignment.assignment.domain.event.TaskAssignedEvent;
|
||||
|
||||
public interface TaskAssignedEventPort {
|
||||
void publishTaskAssignedEvent(TaskAssignedEvent taskAssignedEvent);
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.application.port.out;
|
||||
|
||||
import ch.unisg.assignment.assignment.domain.event.TaskCompletedEvent;
|
||||
|
||||
public interface TaskCompletedEventPort {
|
||||
void publishTaskCompleted(TaskCompletedEvent event);
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.application.service;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import ch.unisg.assignment.assignment.application.port.in.ApplyForTaskCommand;
|
||||
import ch.unisg.assignment.assignment.application.port.in.ApplyForTaskUseCase;
|
||||
import ch.unisg.assignment.assignment.application.port.out.TaskAssignedEventPort;
|
||||
import ch.unisg.assignment.assignment.domain.Roster;
|
||||
import ch.unisg.assignment.assignment.domain.Task;
|
||||
import ch.unisg.assignment.assignment.domain.event.TaskAssignedEvent;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@Component
|
||||
@Transactional
|
||||
public class ApplyForTaskService implements ApplyForTaskUseCase {
|
||||
|
||||
private final TaskAssignedEventPort taskAssignedEventPort;
|
||||
|
||||
@Override
|
||||
public Task applyForTask(ApplyForTaskCommand command) {
|
||||
Task task = Roster.getInstance().assignTaskToExecutor(command.getTaskType(),
|
||||
command.getExecutorIP(), command.getExecutorPort());
|
||||
|
||||
if (task != null) {
|
||||
taskAssignedEventPort.publishTaskAssignedEvent(new TaskAssignedEvent(task.getTaskID()));
|
||||
}
|
||||
|
||||
return task;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.application.service;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import ch.unisg.assignment.assignment.application.port.in.NewTaskCommand;
|
||||
import ch.unisg.assignment.assignment.application.port.in.NewTaskUseCase;
|
||||
import ch.unisg.assignment.assignment.application.port.out.GetAllExecutorInExecutorPoolByTypePort;
|
||||
import ch.unisg.assignment.assignment.application.port.out.NewTaskEventPort;
|
||||
import ch.unisg.assignment.assignment.domain.Roster;
|
||||
import ch.unisg.assignment.assignment.domain.Task;
|
||||
import ch.unisg.assignment.assignment.domain.event.NewTaskEvent;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@Component
|
||||
@Transactional
|
||||
public class NewTaskService implements NewTaskUseCase {
|
||||
|
||||
private final NewTaskEventPort newTaskEventPort;
|
||||
private final GetAllExecutorInExecutorPoolByTypePort getAllExecutorInExecutorPoolByTypePort;
|
||||
|
||||
@Override
|
||||
public boolean addNewTaskToQueue(NewTaskCommand command) {
|
||||
|
||||
// TODO Get availableTaskTypes from executor pool
|
||||
if (!getAllExecutorInExecutorPoolByTypePort.doesExecutorTypeExist(command.getTaskType())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Task task = new Task(command.getTaskID(), command.getTaskType());
|
||||
|
||||
Roster.getInstance().addTaskToQueue(task);
|
||||
|
||||
// TODO this event should be in the roster function xyz
|
||||
NewTaskEvent newTaskEvent = new NewTaskEvent(task.getTaskType());
|
||||
newTaskEventPort.publishNewTaskEvent(newTaskEvent);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.application.service;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import ch.unisg.assignment.assignment.application.port.in.TaskCompletedCommand;
|
||||
import ch.unisg.assignment.assignment.application.port.in.TaskCompletedUseCase;
|
||||
import ch.unisg.assignment.assignment.application.port.out.TaskCompletedEventPort;
|
||||
import ch.unisg.assignment.assignment.domain.Roster;
|
||||
import ch.unisg.assignment.assignment.domain.event.TaskCompletedEvent;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@Component
|
||||
@Transactional
|
||||
public class TaskCompletedService implements TaskCompletedUseCase {
|
||||
|
||||
private final TaskCompletedEventPort taskCompletedEventPort;
|
||||
|
||||
@Override
|
||||
public void taskCompleted(TaskCompletedCommand command) {
|
||||
|
||||
Roster.getInstance().taskCompleted(command.getTaskID());
|
||||
|
||||
taskCompletedEventPort.publishTaskCompleted(new TaskCompletedEvent(command.getTaskID(),
|
||||
command.getTaskStatus(), command.getTaskResult()));
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.domain;
|
||||
|
||||
import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType;
|
||||
import ch.unisg.assignment.assignment.domain.valueobject.IP4Adress;
|
||||
import ch.unisg.assignment.assignment.domain.valueobject.Port;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
public class ExecutorInfo {
|
||||
@Getter
|
||||
@Setter
|
||||
private IP4Adress ip;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private Port port;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private ExecutorType executorType;
|
||||
}
|
|
@ -1,53 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.domain;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
|
||||
import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType;
|
||||
import ch.unisg.assignment.assignment.domain.valueobject.IP4Adress;
|
||||
import ch.unisg.assignment.assignment.domain.valueobject.Port;
|
||||
|
||||
public class Roster {
|
||||
|
||||
private static final Roster roster = new Roster();
|
||||
|
||||
private HashMap<String, ArrayList<Task>> queues = new HashMap<>();
|
||||
|
||||
private HashMap<String, RosterItem> rosterMap = new HashMap<>();
|
||||
|
||||
public static Roster getInstance() {
|
||||
return roster;
|
||||
}
|
||||
|
||||
private Roster() {}
|
||||
|
||||
public void addTaskToQueue(Task task) {
|
||||
if (queues.containsKey(task.getTaskType().getValue())) {
|
||||
queues.get(task.getTaskType().getValue()).add(task);
|
||||
} else {
|
||||
queues.put(task.getTaskType().getValue(), new ArrayList<>(Arrays.asList(task)));
|
||||
}
|
||||
}
|
||||
|
||||
public Task assignTaskToExecutor(ExecutorType taskType, IP4Adress executorIP, Port executorPort) {
|
||||
if (!queues.containsKey(taskType.getValue())) {
|
||||
return null;
|
||||
}
|
||||
if (queues.get(taskType.getValue()).isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Task task = queues.get(taskType.getValue()).remove(0);
|
||||
|
||||
rosterMap.put(task.getTaskID(), new RosterItem(task.getTaskID(),
|
||||
task.getTaskType().getValue(), executorIP, executorPort));
|
||||
|
||||
return task;
|
||||
}
|
||||
|
||||
public void taskCompleted(String taskID) {
|
||||
rosterMap.remove(taskID);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.domain;
|
||||
|
||||
import ch.unisg.assignment.assignment.domain.valueobject.IP4Adress;
|
||||
import ch.unisg.assignment.assignment.domain.valueobject.Port;
|
||||
import lombok.Getter;
|
||||
|
||||
public class RosterItem {
|
||||
|
||||
@Getter
|
||||
private String taskID;
|
||||
|
||||
@Getter
|
||||
private String taskType;
|
||||
|
||||
@Getter
|
||||
private IP4Adress executorIP;
|
||||
|
||||
@Getter
|
||||
private Port executorPort;
|
||||
|
||||
|
||||
public RosterItem(String taskID, String taskType, IP4Adress executorIP, Port executorPort) {
|
||||
this.taskID = taskID;
|
||||
this.taskType = taskType;
|
||||
this.executorIP = executorIP;
|
||||
this.executorPort = executorPort;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.domain;
|
||||
|
||||
import ch.unisg.assignment.assignment.domain.valueobject.ExecutorType;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
public class Task {
|
||||
|
||||
@Getter
|
||||
private String taskID;
|
||||
|
||||
@Getter
|
||||
private ExecutorType taskType;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private String result;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private String status;
|
||||
|
||||
public Task(String taskID, String taskType) {
|
||||
this.taskID = taskID;
|
||||
this.taskType = new ExecutorType(taskType);
|
||||
}
|
||||
|
||||
public Task(String taskID, ExecutorType taskType) {
|
||||
this.taskID = taskID;
|
||||
this.taskType = taskType;
|
||||
}
|
||||
|
||||
public Task() {}
|
||||
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.domain.valueobject;
|
||||
|
||||
import ch.unisg.assignment.common.exception.InvalidIP4Exception;
|
||||
import lombok.Value;
|
||||
|
||||
@Value
|
||||
public class IP4Adress {
|
||||
private String value;
|
||||
|
||||
public IP4Adress(String ip4) throws InvalidIP4Exception {
|
||||
if (ip4.equalsIgnoreCase("localhost") ||
|
||||
ip4.matches("^((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)(\\.(?!$)|$)){4}$")) {
|
||||
this.value = ip4;
|
||||
} else {
|
||||
throw new InvalidIP4Exception();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
package ch.unisg.assignment.assignment.domain.valueobject;
|
||||
|
||||
import ch.unisg.assignment.common.exception.PortOutOfRangeException;
|
||||
import lombok.Value;
|
||||
|
||||
@Value
|
||||
public class Port {
|
||||
private int value;
|
||||
|
||||
public Port(int port) throws PortOutOfRangeException {
|
||||
if (1024 <= port && port <= 65535) {
|
||||
this.value = port;
|
||||
} else {
|
||||
throw new PortOutOfRangeException();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
package ch.unisg.assignment.common.exception;
|
||||
|
||||
public class InvalidIP4Exception extends Exception {
|
||||
public InvalidIP4Exception() {
|
||||
super("IP4 is invalid");
|
||||
}
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
package ch.unisg.assignment.common.exception;
|
||||
|
||||
public class PortOutOfRangeException extends Exception {
|
||||
public PortOutOfRangeException() {
|
||||
super("Port is out of available range (1024-65535)");
|
||||
}
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
server.port=8082
|
0
assignment/mvnw → common/mvnw
vendored
0
assignment/mvnw → common/mvnw
vendored
0
assignment/mvnw.cmd → common/mvnw.cmd
vendored
0
assignment/mvnw.cmd → common/mvnw.cmd
vendored
72
common/pom.xml
Normal file
72
common/pom.xml
Normal file
|
@ -0,0 +1,72 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>2.5.5</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
|
||||
<groupId>ch.unisg</groupId>
|
||||
<artifactId>common</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
|
||||
<name>common</name>
|
||||
<!-- FIXME change it to the project's website -->
|
||||
<url>http://www.example.com</url>
|
||||
|
||||
<properties>
|
||||
<java.version>11</java.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-devtools</artifactId>
|
||||
<scope>runtime</scope>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-validation</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>javax.validation</groupId>
|
||||
<artifactId>validation-api</artifactId>
|
||||
<version>1.1.0.Final</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>javax.transaction</groupId>
|
||||
<artifactId>javax.transaction-api</artifactId>
|
||||
<version>1.2</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.json</groupId>
|
||||
<artifactId>json</artifactId>
|
||||
<version>20210307</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
</project>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user