Compare commits
155 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
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.routers.http-catchall.middlewares=redirect-to-https"
|
||||||
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=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:
|
tapas-tasks:
|
||||||
image: openjdk
|
image: openjdk
|
||||||
command: "java -jar /data/tapas-tasks-0.0.1-SNAPSHOT.jar"
|
command: "java -jar /data/tapas-tasks-0.0.1-SNAPSHOT.jar"
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
- tapas-db
|
||||||
volumes:
|
volumes:
|
||||||
- ./:/data/
|
- ./:/data/
|
||||||
|
environment:
|
||||||
|
roster.uri: http://roster:8082
|
||||||
|
spring.data.mongodb.uri: mongodb://root:password@tapas-db:27017
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.tapas-tasks.rule=Host(`tapas-tasks.${PUB_IP}.nip.io`)"
|
- "traefik.http.routers.tapas-tasks.rule=Host(`tapas-tasks.${PUB_IP}.nip.io`)"
|
||||||
@@ -41,27 +57,59 @@ services:
|
|||||||
- "traefik.http.routers.tapas-tasks.entryPoints=web,websecure"
|
- "traefik.http.routers.tapas-tasks.entryPoints=web,websecure"
|
||||||
- "traefik.http.routers.tapas-tasks.tls.certresolver=le"
|
- "traefik.http.routers.tapas-tasks.tls.certresolver=le"
|
||||||
|
|
||||||
assignment:
|
tapas-auction-house:
|
||||||
image: openjdk
|
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
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
- tapas-db
|
||||||
volumes:
|
volumes:
|
||||||
- ./:/data/
|
- ./:/data/
|
||||||
|
environment:
|
||||||
|
mqtt.broker.uri: tcp://broker.hivemq.com:1883
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.assignment.rule=Host(`assignment.${PUB_IP}.nip.io`)"
|
- "traefik.http.routers.tapas-auction-house.rule=Host(`tapas-auction-house.${PUB_IP}.nip.io`)"
|
||||||
- "traefik.http.routers.assignment.service=assignment"
|
- "traefik.http.routers.tapas-auction-house.service=tapas-auction-house"
|
||||||
- "traefik.http.services.assignment.loadbalancer.server.port=8082"
|
- "traefik.http.services.tapas-auction-house.loadbalancer.server.port=8086"
|
||||||
- "traefik.http.routers.assignment.tls=true"
|
- "traefik.http.routers.tapas-auction-house.tls=true"
|
||||||
- "traefik.http.routers.assignment.entryPoints=web,websecure"
|
- "traefik.http.routers.tapas-auction-house.entryPoints=web,websecure"
|
||||||
- "traefik.http.routers.assignment.tls.certresolver=le"
|
- "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
|
||||||
|
executor.robot.uri: http://executor-robot:8084
|
||||||
|
executor.computation.uri: http://executor-computation:8085
|
||||||
|
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:
|
executor-pool:
|
||||||
image: openjdk
|
image: openjdk
|
||||||
command: "java -jar /data/executor-pool-0.0.1-SNAPSHOT.jar"
|
command: "java -jar /data/executor-pool-0.0.1-SNAPSHOT.jar"
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
- tapas-db
|
||||||
volumes:
|
volumes:
|
||||||
- ./:/data/
|
- ./:/data/
|
||||||
|
environment:
|
||||||
|
mqtt.broker.uri: tcp://broker.hivemq.com:1883
|
||||||
|
spring.data.mongodb.uri: mongodb://root:password@tapas-db:27017
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.executor-pool.rule=Host(`executor-pool.${PUB_IP}.nip.io`)"
|
- "traefik.http.routers.executor-pool.rule=Host(`executor-pool.${PUB_IP}.nip.io`)"
|
||||||
@@ -71,38 +119,45 @@ services:
|
|||||||
- "traefik.http.routers.executor-pool.entryPoints=web,websecure"
|
- "traefik.http.routers.executor-pool.entryPoints=web,websecure"
|
||||||
- "traefik.http.routers.executor-pool.tls.certresolver=le"
|
- "traefik.http.routers.executor-pool.tls.certresolver=le"
|
||||||
|
|
||||||
executor1:
|
executor-computation:
|
||||||
image: openjdk
|
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
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
- executor-pool
|
- executor-pool
|
||||||
- assignment
|
- roster
|
||||||
|
- tapas-db
|
||||||
volumes:
|
volumes:
|
||||||
- ./:/data/
|
- ./:/data/
|
||||||
|
environment:
|
||||||
|
EXECUTOR_POOL_URI: http://executor-pool:8083
|
||||||
|
ROSTER_URI: http://roster:8082
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.executor1.rule=Host(`executor1.${PUB_IP}.nip.io`)"
|
- "traefik.http.routers.executor-computation.rule=Host(`executor-computation.${PUB_IP}.nip.io`)"
|
||||||
- "traefik.http.routers.executor1.service=executor1"
|
- "traefik.http.routers.executor-computation.service=executor-computation"
|
||||||
- "traefik.http.services.executor1.loadbalancer.server.port=8084"
|
- "traefik.http.services.executor-computation.loadbalancer.server.port=8084"
|
||||||
- "traefik.http.routers.executor1.tls=true"
|
- "traefik.http.routers.executor-computation.tls=true"
|
||||||
- "traefik.http.routers.executor1.entryPoints=web,websecure"
|
- "traefik.http.routers.executor-computation.entryPoints=web,websecure"
|
||||||
- "traefik.http.routers.executor1.tls.certresolver=le"
|
- "traefik.http.routers.executor-computation.tls.certresolver=le"
|
||||||
|
executor-robot:
|
||||||
executor2:
|
|
||||||
image: openjdk
|
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
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
- executor-pool
|
- executor-pool
|
||||||
- assignment
|
- roster
|
||||||
|
- tapas-db
|
||||||
volumes:
|
volumes:
|
||||||
- ./:/data/
|
- ./:/data/
|
||||||
|
environment:
|
||||||
|
EXECUTOR_POOL_URI: http://executor-pool:8083
|
||||||
|
ROSTER_URI: http://roster:8082
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.executor2.rule=Host(`executor2.${PUB_IP}.nip.io`)"
|
- "traefik.http.routers.executor-robot.rule=Host(`executor-robot.${PUB_IP}.nip.io`)"
|
||||||
- "traefik.http.routers.executor2.service=executor2"
|
- "traefik.http.routers.executor-robot.service=executor-robot"
|
||||||
- "traefik.http.services.executor2.loadbalancer.server.port=8085"
|
- "traefik.http.services.executor-robot.loadbalancer.server.port=8085"
|
||||||
- "traefik.http.routers.executor2.tls=true"
|
- "traefik.http.routers.executor-robot.tls=true"
|
||||||
- "traefik.http.routers.executor2.entryPoints=web,websecure"
|
- "traefik.http.routers.executor-robot.entryPoints=web,websecure"
|
||||||
- "traefik.http.routers.executor2.tls.certresolver=le"
|
- "traefik.http.routers.executor-robot.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": []
|
||||||
|
}
|
31
.github/workflows/build-and-deploy.yml
vendored
31
.github/workflows/build-and-deploy.yml
vendored
@@ -33,29 +33,36 @@ jobs:
|
|||||||
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
||||||
restore-keys: ${{ runner.os }}-m2
|
restore-keys: ${{ runner.os }}-m2
|
||||||
|
|
||||||
- name: Build with Maven
|
- name: Build common library
|
||||||
run: mvn -f assignment/pom.xml --batch-mode --update-snapshots verify
|
run: mvn -f common/pom.xml --batch-mode --update-snapshots install
|
||||||
- run: cp ./assignment/target/assignment-0.0.1-SNAPSHOT.jar ./target
|
|
||||||
|
|
||||||
- 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: mvn -f executor-pool/pom.xml --batch-mode --update-snapshots verify
|
||||||
- run: cp ./executor-pool/target/executor-pool-0.0.1-SNAPSHOT.jar ./target
|
- 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
|
run: mvn -f executor-base/pom.xml --batch-mode --update-snapshots install
|
||||||
|
|
||||||
- name: Build with Maven
|
- name: Build executor-computation service
|
||||||
run: mvn -f executor1/pom.xml --batch-mode --update-snapshots verify
|
run: mvn -f executor-computation/pom.xml --batch-mode --update-snapshots verify
|
||||||
- run: cp ./executor1/target/executor1-0.0.1-SNAPSHOT.jar ./target
|
- run: cp ./executor-computation/target/executor-computation-0.0.1-SNAPSHOT.jar ./target
|
||||||
|
|
||||||
- name: Build with Maven
|
- name: Build executor-robot service
|
||||||
run: mvn -f executor2/pom.xml --batch-mode --update-snapshots verify
|
run: mvn -f executor-robot/pom.xml --batch-mode --update-snapshots verify
|
||||||
- run: cp ./executor2/target/executor2-0.0.1-SNAPSHOT.jar ./target
|
- run: cp ./executor-robot/target/executor-robot-0.0.1-SNAPSHOT.jar ./target
|
||||||
|
|
||||||
- name: Build with Maven
|
- name: Build tapas-task service
|
||||||
run: mvn -f tapas-tasks/pom.xml --batch-mode --update-snapshots verify
|
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
|
- 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
|
- run: cp ./.deployment/docker-compose.yml ./target
|
||||||
- name: Archive artifacts
|
- name: Archive artifacts
|
||||||
uses: actions/upload-artifact@v1
|
uses: actions/upload-artifact@v1
|
||||||
|
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:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [main, dev]
|
branches: [main, dev]
|
||||||
paths:
|
paths:
|
||||||
- "executor-base/**"
|
- "executor-base/**"
|
||||||
- "executor2/**"
|
- "executor-computation/**"
|
||||||
|
- "common/**"
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [main, dev]
|
branches: [main, dev]
|
||||||
paths:
|
paths:
|
||||||
- "executor-base/**"
|
- "executor-base/**"
|
||||||
- "executor2/**"
|
- "executor-computation/**"
|
||||||
|
- "common/**"
|
||||||
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
jobs:
|
jobs:
|
||||||
@@ -36,10 +38,12 @@ jobs:
|
|||||||
path: ~/.m2
|
path: ~/.m2
|
||||||
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
||||||
restore-keys: ${{ runner.os }}-m2
|
restore-keys: ${{ runner.os }}-m2
|
||||||
|
- name: Build common
|
||||||
|
run: mvn -f common/pom.xml -B install
|
||||||
- name: Build executorBase
|
- name: Build executorBase
|
||||||
run: mvn -f executor-base/pom.xml -B install
|
run: mvn -f executor-base/pom.xml -B install
|
||||||
- name: Build and analyze
|
- name: Build and analyze
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
SONAR_TOKEN: ${{ secrets.SONAR_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:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [main, dev]
|
branches: [main, dev]
|
||||||
paths:
|
paths:
|
||||||
- "executor-base/**"
|
- "executor-base/**"
|
||||||
- "executor1/**"
|
- "executor-robot/**"
|
||||||
|
- "common/**"
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [main, dev]
|
branches: [main, dev]
|
||||||
paths:
|
paths:
|
||||||
- "executor-base/**"
|
- "executor-base/**"
|
||||||
- "executor1/**"
|
- "executor-robot/**"
|
||||||
|
- "common/**"
|
||||||
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
jobs:
|
jobs:
|
||||||
@@ -36,10 +38,12 @@ jobs:
|
|||||||
path: ~/.m2
|
path: ~/.m2
|
||||||
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
||||||
restore-keys: ${{ runner.os }}-m2
|
restore-keys: ${{ runner.os }}-m2
|
||||||
|
- name: Build executorBase
|
||||||
|
run: mvn -f common/pom.xml -B install
|
||||||
- name: Build executorBase
|
- name: Build executorBase
|
||||||
run: mvn -f executor-base/pom.xml -B install
|
run: mvn -f executor-base/pom.xml -B install
|
||||||
- name: Build and analyze
|
- name: Build and analyze
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
SONAR_TOKEN: ${{ secrets.SONAR_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
|
13
app/Dockerfile
Normal file
13
app/Dockerfile
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Dockerfile/Docker-Compose file based on an initial version authored by Alexander Lontke (ASSE, Fall Semester 2021)
|
||||||
|
|
||||||
|
FROM maven as build
|
||||||
|
|
||||||
|
COPY . /app
|
||||||
|
|
||||||
|
RUN mvn -f app/pom.xml --batch-mode --update-snapshots verify
|
||||||
|
|
||||||
|
FROM openjdk
|
||||||
|
|
||||||
|
COPY --from=build /app/target/app-0.1.0.jar ./app-0.1.0.jar
|
||||||
|
|
||||||
|
CMD java -jar app-0.1.0.jar
|
@@ -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,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,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,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,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>
|
@@ -1,4 +1,4 @@
|
|||||||
package ch.unisg.assignment.common.exception;
|
package ch.unisg.common.exception;
|
||||||
|
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
|
|
@@ -0,0 +1,7 @@
|
|||||||
|
package ch.unisg.common.exception;
|
||||||
|
|
||||||
|
public class InvalidExecutorURIException extends Exception {
|
||||||
|
public InvalidExecutorURIException() {
|
||||||
|
super("URI is invalid");
|
||||||
|
}
|
||||||
|
}
|
@@ -1,4 +1,4 @@
|
|||||||
package ch.unisg.assignment.common;
|
package ch.unisg.common.validation;
|
||||||
|
|
||||||
import javax.validation.ConstraintViolation;
|
import javax.validation.ConstraintViolation;
|
||||||
import javax.validation.ConstraintViolationException;
|
import javax.validation.ConstraintViolationException;
|
@@ -0,0 +1,13 @@
|
|||||||
|
package ch.unisg.common.valueobject;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import lombok.Value;
|
||||||
|
|
||||||
|
@Value
|
||||||
|
public class ExecutorURI {
|
||||||
|
private URI value;
|
||||||
|
|
||||||
|
public ExecutorURI(String uri) {
|
||||||
|
this.value = URI.create(uri);
|
||||||
|
}
|
||||||
|
}
|
653
diagram_1.bpmn
653
diagram_1.bpmn
@@ -1,653 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_0qxgodh" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.8.1" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.15.0">
|
|
||||||
<bpmn:collaboration id="Collaboration_0anvhsf">
|
|
||||||
<bpmn:participant id="Participant_0q8hukc" name="Create Task" processRef="Process_0g1u0dm" />
|
|
||||||
<bpmn:participant id="Participant_143daut" name="Executor Ideling" processRef="Process_0s8woey" />
|
|
||||||
<bpmn:participant id="Participant_1q0bjfl" name="Request more executors" processRef="Process_0p5wk5x" />
|
|
||||||
<bpmn:participant id="Participant_062djli" name="Executor Requests for work" processRef="Process_1iep78l" />
|
|
||||||
<bpmn:participant id="Participant_1ova0gb" name="Executor finish task" processRef="Process_102ufh8" />
|
|
||||||
<bpmn:messageFlow id="Flow_1xo6v1g" sourceRef="Activity_0u3tts0" targetRef="Activity_1q87dyp" />
|
|
||||||
</bpmn:collaboration>
|
|
||||||
<bpmn:process id="Process_0g1u0dm" isExecutable="false">
|
|
||||||
<bpmn:laneSet id="LaneSet_1lcmyw6">
|
|
||||||
<bpmn:lane id="Lane_1qeq039" name="Assignment Service">
|
|
||||||
<bpmn:flowNodeRef>Gateway_1vd3as7</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Activity_1jd11bs</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Gateway_1e4ckdq</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Activity_1dl4fvt</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Gateway_1e3rabp</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Event_1lm6x5y</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Event_1ysgenb</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Event_00rvb9o</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Activity_0u3tts0</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Activity_0vs4eam</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Activity_0mwpp9o</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Event_0v7hm2z</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Activity_0paecdb</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Activity_0srcl99</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Activity_0assw9c</bpmn:flowNodeRef>
|
|
||||||
</bpmn:lane>
|
|
||||||
<bpmn:lane id="Lane_12khd4k" name="Task Service">
|
|
||||||
<bpmn:flowNodeRef>Activity_0jai885</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>StartEvent_1</bpmn:flowNodeRef>
|
|
||||||
</bpmn:lane>
|
|
||||||
</bpmn:laneSet>
|
|
||||||
<bpmn:exclusiveGateway id="Gateway_1vd3as7">
|
|
||||||
<bpmn:incoming>Flow_1hc51tx</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_1sajzlx</bpmn:outgoing>
|
|
||||||
<bpmn:outgoing>Flow_1ijfkpz</bpmn:outgoing>
|
|
||||||
</bpmn:exclusiveGateway>
|
|
||||||
<bpmn:task id="Activity_1jd11bs" name="Check if more tasks of the same are in a queue">
|
|
||||||
<bpmn:incoming>Flow_1sajzlx</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_0cpd5ad</bpmn:outgoing>
|
|
||||||
</bpmn:task>
|
|
||||||
<bpmn:exclusiveGateway id="Gateway_1e4ckdq">
|
|
||||||
<bpmn:incoming>Flow_0cpd5ad</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_0kwvrmc</bpmn:outgoing>
|
|
||||||
<bpmn:outgoing>Flow_1w3uh2m</bpmn:outgoing>
|
|
||||||
</bpmn:exclusiveGateway>
|
|
||||||
<bpmn:task id="Activity_1dl4fvt" name="Add task to queue">
|
|
||||||
<bpmn:incoming>Flow_0kwvrmc</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_0vpcut0</bpmn:outgoing>
|
|
||||||
</bpmn:task>
|
|
||||||
<bpmn:exclusiveGateway id="Gateway_1e3rabp">
|
|
||||||
<bpmn:incoming>Flow_0vpcut0</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_179e0hl</bpmn:outgoing>
|
|
||||||
<bpmn:outgoing>Flow_12nh0g5</bpmn:outgoing>
|
|
||||||
</bpmn:exclusiveGateway>
|
|
||||||
<bpmn:endEvent id="Event_1lm6x5y">
|
|
||||||
<bpmn:incoming>Flow_179e0hl</bpmn:incoming>
|
|
||||||
</bpmn:endEvent>
|
|
||||||
<bpmn:endEvent id="Event_1ysgenb">
|
|
||||||
<bpmn:incoming>Flow_0366zqm</bpmn:incoming>
|
|
||||||
</bpmn:endEvent>
|
|
||||||
<bpmn:endEvent id="Event_00rvb9o">
|
|
||||||
<bpmn:incoming>Flow_1n8jm89</bpmn:incoming>
|
|
||||||
</bpmn:endEvent>
|
|
||||||
<bpmn:sendTask id="Activity_0u3tts0" name="Let executors know that there is work">
|
|
||||||
<bpmn:incoming>Flow_1w3uh2m</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_1n8jm89</bpmn:outgoing>
|
|
||||||
</bpmn:sendTask>
|
|
||||||
<bpmn:task id="Activity_0jai885" name="Create Task">
|
|
||||||
<bpmn:incoming>Flow_19dbo28</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_1rwgf2n</bpmn:outgoing>
|
|
||||||
</bpmn:task>
|
|
||||||
<bpmn:startEvent id="StartEvent_1">
|
|
||||||
<bpmn:outgoing>Flow_19dbo28</bpmn:outgoing>
|
|
||||||
</bpmn:startEvent>
|
|
||||||
<bpmn:task id="Activity_0vs4eam" name="Request auctionshouse completion">
|
|
||||||
<bpmn:incoming>Flow_1ijfkpz</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_1gvdy5x</bpmn:outgoing>
|
|
||||||
</bpmn:task>
|
|
||||||
<bpmn:task id="Activity_0mwpp9o" name="Some currently unknown Auctionhouse logic">
|
|
||||||
<bpmn:incoming>Flow_1gvdy5x</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_1yxp4e8</bpmn:outgoing>
|
|
||||||
</bpmn:task>
|
|
||||||
<bpmn:endEvent id="Event_0v7hm2z">
|
|
||||||
<bpmn:incoming>Flow_1yxp4e8</bpmn:incoming>
|
|
||||||
</bpmn:endEvent>
|
|
||||||
<bpmn:task id="Activity_0paecdb" name="Checks if task can be handled internaly">
|
|
||||||
<bpmn:incoming>Flow_1rwgf2n</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_1hc51tx</bpmn:outgoing>
|
|
||||||
</bpmn:task>
|
|
||||||
<bpmn:task id="Activity_0srcl99" name="(This can be checked here bc we are caching infos from the executor pool)" />
|
|
||||||
<bpmn:subProcess id="Activity_0assw9c" name="Request more executors">
|
|
||||||
<bpmn:incoming>Flow_12nh0g5</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_0366zqm</bpmn:outgoing>
|
|
||||||
</bpmn:subProcess>
|
|
||||||
<bpmn:sequenceFlow id="Flow_1hc51tx" sourceRef="Activity_0paecdb" targetRef="Gateway_1vd3as7" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_1sajzlx" name="Yes" sourceRef="Gateway_1vd3as7" targetRef="Activity_1jd11bs" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_0cpd5ad" sourceRef="Activity_1jd11bs" targetRef="Gateway_1e4ckdq" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_0kwvrmc" name="Yes" sourceRef="Gateway_1e4ckdq" targetRef="Activity_1dl4fvt" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_0vpcut0" name="Are more than X tasks in queue?" sourceRef="Activity_1dl4fvt" targetRef="Gateway_1e3rabp" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_179e0hl" name="No" sourceRef="Gateway_1e3rabp" targetRef="Event_1lm6x5y" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_12nh0g5" name="Yes" sourceRef="Gateway_1e3rabp" targetRef="Activity_0assw9c" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_0366zqm" sourceRef="Activity_0assw9c" targetRef="Event_1ysgenb" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_1w3uh2m" name="No" sourceRef="Gateway_1e4ckdq" targetRef="Activity_0u3tts0" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_1n8jm89" sourceRef="Activity_0u3tts0" targetRef="Event_00rvb9o" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_1rwgf2n" sourceRef="Activity_0jai885" targetRef="Activity_0paecdb" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_19dbo28" sourceRef="StartEvent_1" targetRef="Activity_0jai885" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_1gvdy5x" sourceRef="Activity_0vs4eam" targetRef="Activity_0mwpp9o" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_1ijfkpz" name="No" sourceRef="Gateway_1vd3as7" targetRef="Activity_0vs4eam" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_1yxp4e8" sourceRef="Activity_0mwpp9o" targetRef="Event_0v7hm2z" />
|
|
||||||
</bpmn:process>
|
|
||||||
<bpmn:process id="Process_0s8woey" isExecutable="false">
|
|
||||||
<bpmn:receiveTask id="Activity_1q87dyp" name="Gets information about work">
|
|
||||||
<bpmn:outgoing>Flow_119ldsr</bpmn:outgoing>
|
|
||||||
</bpmn:receiveTask>
|
|
||||||
<bpmn:endEvent id="Event_170rm9y">
|
|
||||||
<bpmn:incoming>Flow_1mm9swr</bpmn:incoming>
|
|
||||||
</bpmn:endEvent>
|
|
||||||
<bpmn:subProcess id="Activity_0h1d3g9" name="Executor Requests for work">
|
|
||||||
<bpmn:incoming>Flow_119ldsr</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_1mm9swr</bpmn:outgoing>
|
|
||||||
</bpmn:subProcess>
|
|
||||||
<bpmn:sequenceFlow id="Flow_119ldsr" sourceRef="Activity_1q87dyp" targetRef="Activity_0h1d3g9" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_1mm9swr" sourceRef="Activity_0h1d3g9" targetRef="Event_170rm9y" />
|
|
||||||
</bpmn:process>
|
|
||||||
<bpmn:process id="Process_0p5wk5x" isExecutable="false">
|
|
||||||
<bpmn:laneSet id="LaneSet_1r5f5iw">
|
|
||||||
<bpmn:lane id="Lane_06e7su5" name="Assignment Service">
|
|
||||||
<bpmn:flowNodeRef>Event_0v73rhy</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Activity_0n8uuvk</bpmn:flowNodeRef>
|
|
||||||
</bpmn:lane>
|
|
||||||
<bpmn:lane id="Lane_1lg2d2q" name="Execturo Pool">
|
|
||||||
<bpmn:flowNodeRef>Activity_06xjrrk</bpmn:flowNodeRef>
|
|
||||||
</bpmn:lane>
|
|
||||||
<bpmn:lane id="Lane_19i1lbs" name="Executor">
|
|
||||||
<bpmn:flowNodeRef>Activity_0uxkytf</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Event_01nh9j2</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Activity_1qgjnyh</bpmn:flowNodeRef>
|
|
||||||
</bpmn:lane>
|
|
||||||
</bpmn:laneSet>
|
|
||||||
<bpmn:startEvent id="Event_0v73rhy">
|
|
||||||
<bpmn:outgoing>Flow_17d0j42</bpmn:outgoing>
|
|
||||||
</bpmn:startEvent>
|
|
||||||
<bpmn:task id="Activity_0n8uuvk" name="Request more executors">
|
|
||||||
<bpmn:incoming>Flow_17d0j42</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_0opy5tp</bpmn:outgoing>
|
|
||||||
</bpmn:task>
|
|
||||||
<bpmn:task id="Activity_06xjrrk" name="Add/start new executors">
|
|
||||||
<bpmn:incoming>Flow_0opy5tp</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_0sudw7l</bpmn:outgoing>
|
|
||||||
</bpmn:task>
|
|
||||||
<bpmn:task id="Activity_0uxkytf" name="Exectuor starts">
|
|
||||||
<bpmn:incoming>Flow_0sudw7l</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_02uzxx3</bpmn:outgoing>
|
|
||||||
</bpmn:task>
|
|
||||||
<bpmn:endEvent id="Event_01nh9j2">
|
|
||||||
<bpmn:incoming>Flow_0rpv16j</bpmn:incoming>
|
|
||||||
</bpmn:endEvent>
|
|
||||||
<bpmn:subProcess id="Activity_1qgjnyh" name="Executor Requests for work">
|
|
||||||
<bpmn:incoming>Flow_02uzxx3</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_0rpv16j</bpmn:outgoing>
|
|
||||||
</bpmn:subProcess>
|
|
||||||
<bpmn:sequenceFlow id="Flow_17d0j42" sourceRef="Event_0v73rhy" targetRef="Activity_0n8uuvk" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_0opy5tp" sourceRef="Activity_0n8uuvk" targetRef="Activity_06xjrrk" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_02uzxx3" sourceRef="Activity_0uxkytf" targetRef="Activity_1qgjnyh" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_0sudw7l" sourceRef="Activity_06xjrrk" targetRef="Activity_0uxkytf" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_0rpv16j" sourceRef="Activity_1qgjnyh" targetRef="Event_01nh9j2" />
|
|
||||||
</bpmn:process>
|
|
||||||
<bpmn:process id="Process_1iep78l" isExecutable="false">
|
|
||||||
<bpmn:laneSet id="LaneSet_03zwzb7">
|
|
||||||
<bpmn:lane id="Lane_06xhlk6" name="Executor">
|
|
||||||
<bpmn:flowNodeRef>Event_1oz3tr5</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Activity_0xk9kck</bpmn:flowNodeRef>
|
|
||||||
</bpmn:lane>
|
|
||||||
<bpmn:lane id="Lane_02fg9xj" name="Assignment service">
|
|
||||||
<bpmn:flowNodeRef>Gateway_079742h</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Activity_0umieiz</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Event_062x6a9</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Activity_0b6bh6v</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Event_1achffx</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Activity_1mme68o</bpmn:flowNodeRef>
|
|
||||||
</bpmn:lane>
|
|
||||||
</bpmn:laneSet>
|
|
||||||
<bpmn:startEvent id="Event_1oz3tr5">
|
|
||||||
<bpmn:outgoing>Flow_0od6iot</bpmn:outgoing>
|
|
||||||
</bpmn:startEvent>
|
|
||||||
<bpmn:task id="Activity_0xk9kck" name="Ask for work">
|
|
||||||
<bpmn:incoming>Flow_0od6iot</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_0k07ofo</bpmn:outgoing>
|
|
||||||
</bpmn:task>
|
|
||||||
<bpmn:exclusiveGateway id="Gateway_079742h">
|
|
||||||
<bpmn:incoming>Flow_0k07ofo</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_1fwmda3</bpmn:outgoing>
|
|
||||||
<bpmn:outgoing>Flow_050yku1</bpmn:outgoing>
|
|
||||||
</bpmn:exclusiveGateway>
|
|
||||||
<bpmn:task id="Activity_0umieiz" name="Assign task to executor">
|
|
||||||
<bpmn:incoming>Flow_1fwmda3</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_15lkkxa</bpmn:outgoing>
|
|
||||||
</bpmn:task>
|
|
||||||
<bpmn:endEvent id="Event_062x6a9">
|
|
||||||
<bpmn:incoming>Flow_15lkkxa</bpmn:incoming>
|
|
||||||
</bpmn:endEvent>
|
|
||||||
<bpmn:task id="Activity_0b6bh6v" name="Some logic to reduce amount of executors if possible???">
|
|
||||||
<bpmn:incoming>Flow_050yku1</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_1lgcq8d</bpmn:outgoing>
|
|
||||||
</bpmn:task>
|
|
||||||
<bpmn:endEvent id="Event_1achffx">
|
|
||||||
<bpmn:incoming>Flow_0oqra8s</bpmn:incoming>
|
|
||||||
</bpmn:endEvent>
|
|
||||||
<bpmn:task id="Activity_1mme68o" name="Executor idle's">
|
|
||||||
<bpmn:incoming>Flow_1lgcq8d</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_0oqra8s</bpmn:outgoing>
|
|
||||||
</bpmn:task>
|
|
||||||
<bpmn:sequenceFlow id="Flow_0od6iot" sourceRef="Event_1oz3tr5" targetRef="Activity_0xk9kck" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_0k07ofo" name="Check if tasks are in queue" sourceRef="Activity_0xk9kck" targetRef="Gateway_079742h" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_1fwmda3" name="Yes" sourceRef="Gateway_079742h" targetRef="Activity_0umieiz" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_15lkkxa" sourceRef="Activity_0umieiz" targetRef="Event_062x6a9" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_050yku1" name="No" sourceRef="Gateway_079742h" targetRef="Activity_0b6bh6v" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_1lgcq8d" sourceRef="Activity_0b6bh6v" targetRef="Activity_1mme68o" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_0oqra8s" sourceRef="Activity_1mme68o" targetRef="Event_1achffx" />
|
|
||||||
</bpmn:process>
|
|
||||||
<bpmn:process id="Process_102ufh8" isExecutable="false">
|
|
||||||
<bpmn:laneSet id="LaneSet_15t2y8k">
|
|
||||||
<bpmn:lane id="Lane_0lvtv1p" name="Executor">
|
|
||||||
<bpmn:flowNodeRef>Event_1b2jt5y</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Activity_1ikvmpl</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Event_0y66dbe</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Activity_11lqrhg</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Activity_1oownmu</bpmn:flowNodeRef>
|
|
||||||
</bpmn:lane>
|
|
||||||
<bpmn:lane id="Lane_1jghhc4" name="Assignment service">
|
|
||||||
<bpmn:flowNodeRef>Activity_1ohwol1</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Event_0bbqq3x</bpmn:flowNodeRef>
|
|
||||||
</bpmn:lane>
|
|
||||||
<bpmn:lane id="Lane_0k7q1xv" name="task service">
|
|
||||||
<bpmn:flowNodeRef>Activity_1e9hb9h</bpmn:flowNodeRef>
|
|
||||||
<bpmn:flowNodeRef>Event_0l7ljcr</bpmn:flowNodeRef>
|
|
||||||
</bpmn:lane>
|
|
||||||
</bpmn:laneSet>
|
|
||||||
<bpmn:startEvent id="Event_1b2jt5y">
|
|
||||||
<bpmn:outgoing>Flow_046hsk4</bpmn:outgoing>
|
|
||||||
</bpmn:startEvent>
|
|
||||||
<bpmn:task id="Activity_1ikvmpl" name="Executor finish work">
|
|
||||||
<bpmn:incoming>Flow_046hsk4</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_0zoqmub</bpmn:outgoing>
|
|
||||||
</bpmn:task>
|
|
||||||
<bpmn:endEvent id="Event_0y66dbe">
|
|
||||||
<bpmn:incoming>Flow_0nyxv8e</bpmn:incoming>
|
|
||||||
</bpmn:endEvent>
|
|
||||||
<bpmn:sendTask id="Activity_11lqrhg" name="Send finish message">
|
|
||||||
<bpmn:incoming>Flow_0zoqmub</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_0ip5x3i</bpmn:outgoing>
|
|
||||||
<bpmn:outgoing>Flow_1bqiz65</bpmn:outgoing>
|
|
||||||
<bpmn:outgoing>Flow_142xsjm</bpmn:outgoing>
|
|
||||||
</bpmn:sendTask>
|
|
||||||
<bpmn:task id="Activity_1ohwol1" name="Update tasks status to finished">
|
|
||||||
<bpmn:incoming>Flow_1bqiz65</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_0znvsoe</bpmn:outgoing>
|
|
||||||
</bpmn:task>
|
|
||||||
<bpmn:task id="Activity_1e9hb9h" name="Update task status to finished">
|
|
||||||
<bpmn:incoming>Flow_142xsjm</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_0ue2i8v</bpmn:outgoing>
|
|
||||||
</bpmn:task>
|
|
||||||
<bpmn:endEvent id="Event_0l7ljcr">
|
|
||||||
<bpmn:incoming>Flow_0ue2i8v</bpmn:incoming>
|
|
||||||
</bpmn:endEvent>
|
|
||||||
<bpmn:endEvent id="Event_0bbqq3x">
|
|
||||||
<bpmn:incoming>Flow_0znvsoe</bpmn:incoming>
|
|
||||||
</bpmn:endEvent>
|
|
||||||
<bpmn:subProcess id="Activity_1oownmu" name="Executor Requests for work">
|
|
||||||
<bpmn:incoming>Flow_0ip5x3i</bpmn:incoming>
|
|
||||||
<bpmn:outgoing>Flow_0nyxv8e</bpmn:outgoing>
|
|
||||||
</bpmn:subProcess>
|
|
||||||
<bpmn:sequenceFlow id="Flow_046hsk4" sourceRef="Event_1b2jt5y" targetRef="Activity_1ikvmpl" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_0zoqmub" sourceRef="Activity_1ikvmpl" targetRef="Activity_11lqrhg" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_0ip5x3i" sourceRef="Activity_11lqrhg" targetRef="Activity_1oownmu" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_0nyxv8e" sourceRef="Activity_1oownmu" targetRef="Event_0y66dbe" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_1bqiz65" sourceRef="Activity_11lqrhg" targetRef="Activity_1ohwol1" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_142xsjm" sourceRef="Activity_11lqrhg" targetRef="Activity_1e9hb9h" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_0ue2i8v" sourceRef="Activity_1e9hb9h" targetRef="Event_0l7ljcr" />
|
|
||||||
<bpmn:sequenceFlow id="Flow_0znvsoe" sourceRef="Activity_1ohwol1" targetRef="Event_0bbqq3x" />
|
|
||||||
</bpmn:process>
|
|
||||||
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
|
|
||||||
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Collaboration_0anvhsf">
|
|
||||||
<bpmndi:BPMNShape id="Participant_0q8hukc_di" bpmnElement="Participant_0q8hukc" isHorizontal="true">
|
|
||||||
<dc:Bounds x="140" y="80" width="1728" height="590" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Lane_1qeq039_di" bpmnElement="Lane_1qeq039" isHorizontal="true">
|
|
||||||
<dc:Bounds x="170" y="200" width="1698" height="470" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Lane_12khd4k_di" bpmnElement="Lane_12khd4k" isHorizontal="true">
|
|
||||||
<dc:Bounds x="170" y="80" width="1698" height="120" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_1hc51tx_di" bpmnElement="Flow_1hc51tx">
|
|
||||||
<di:waypoint x="408" y="310" />
|
|
||||||
<di:waypoint x="495" y="310" />
|
|
||||||
<bpmndi:BPMNLabel>
|
|
||||||
<dc:Bounds x="405" y="576" width="83" height="27" />
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_1sajzlx_di" bpmnElement="Flow_1sajzlx">
|
|
||||||
<di:waypoint x="545" y="310" />
|
|
||||||
<di:waypoint x="680" y="310" />
|
|
||||||
<bpmndi:BPMNLabel>
|
|
||||||
<dc:Bounds x="604" y="292" width="18" height="14" />
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_0cpd5ad_di" bpmnElement="Flow_0cpd5ad">
|
|
||||||
<di:waypoint x="780" y="310" />
|
|
||||||
<di:waypoint x="915" y="310" />
|
|
||||||
<bpmndi:BPMNLabel>
|
|
||||||
<dc:Bounds x="839" y="592" width="18" height="14" />
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_0kwvrmc_di" bpmnElement="Flow_0kwvrmc">
|
|
||||||
<di:waypoint x="965" y="310" />
|
|
||||||
<di:waypoint x="1070" y="310" />
|
|
||||||
<bpmndi:BPMNLabel>
|
|
||||||
<dc:Bounds x="1009" y="292" width="18" height="14" />
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_0vpcut0_di" bpmnElement="Flow_0vpcut0">
|
|
||||||
<di:waypoint x="1170" y="310" />
|
|
||||||
<di:waypoint x="1345" y="310" />
|
|
||||||
<bpmndi:BPMNLabel>
|
|
||||||
<dc:Bounds x="1217" y="276" width="81" height="27" />
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_179e0hl_di" bpmnElement="Flow_179e0hl">
|
|
||||||
<di:waypoint x="1395" y="310" />
|
|
||||||
<di:waypoint x="1542" y="310" />
|
|
||||||
<bpmndi:BPMNLabel>
|
|
||||||
<dc:Bounds x="1462" y="292" width="15" height="14" />
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_12nh0g5_di" bpmnElement="Flow_12nh0g5">
|
|
||||||
<di:waypoint x="1370" y="335" />
|
|
||||||
<di:waypoint x="1370" y="420" />
|
|
||||||
<bpmndi:BPMNLabel>
|
|
||||||
<dc:Bounds x="1376" y="375" width="18" height="14" />
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_0366zqm_di" bpmnElement="Flow_0366zqm">
|
|
||||||
<di:waypoint x="1420" y="460" />
|
|
||||||
<di:waypoint x="1542" y="460" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_1w3uh2m_di" bpmnElement="Flow_1w3uh2m">
|
|
||||||
<di:waypoint x="940" y="335" />
|
|
||||||
<di:waypoint x="940" y="420" />
|
|
||||||
<bpmndi:BPMNLabel>
|
|
||||||
<dc:Bounds x="948" y="368" width="15" height="14" />
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_1n8jm89_di" bpmnElement="Flow_1n8jm89">
|
|
||||||
<di:waypoint x="990" y="460" />
|
|
||||||
<di:waypoint x="1102" y="460" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_1rwgf2n_di" bpmnElement="Flow_1rwgf2n">
|
|
||||||
<di:waypoint x="358" y="180" />
|
|
||||||
<di:waypoint x="358" y="270" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_19dbo28_di" bpmnElement="Flow_19dbo28">
|
|
||||||
<di:waypoint x="258" y="140" />
|
|
||||||
<di:waypoint x="308" y="140" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_1gvdy5x_di" bpmnElement="Flow_1gvdy5x">
|
|
||||||
<di:waypoint x="520" y="510" />
|
|
||||||
<di:waypoint x="520" y="560" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_1ijfkpz_di" bpmnElement="Flow_1ijfkpz">
|
|
||||||
<di:waypoint x="520" y="335" />
|
|
||||||
<di:waypoint x="520" y="430" />
|
|
||||||
<bpmndi:BPMNLabel>
|
|
||||||
<dc:Bounds x="532" y="368" width="15" height="14" />
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_1yxp4e8_di" bpmnElement="Flow_1yxp4e8">
|
|
||||||
<di:waypoint x="570" y="600" />
|
|
||||||
<di:waypoint x="662" y="600" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNShape id="Gateway_1vd3as7_di" bpmnElement="Gateway_1vd3as7" isMarkerVisible="true">
|
|
||||||
<dc:Bounds x="495" y="285" width="50" height="50" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_1jd11bs_di" bpmnElement="Activity_1jd11bs">
|
|
||||||
<dc:Bounds x="680" y="270" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Gateway_1e4ckdq_di" bpmnElement="Gateway_1e4ckdq" isMarkerVisible="true">
|
|
||||||
<dc:Bounds x="915" y="285" width="50" height="50" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_1dl4fvt_di" bpmnElement="Activity_1dl4fvt">
|
|
||||||
<dc:Bounds x="1070" y="270" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Gateway_1e3rabp_di" bpmnElement="Gateway_1e3rabp" isMarkerVisible="true">
|
|
||||||
<dc:Bounds x="1345" y="285" width="50" height="50" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Event_1lm6x5y_di" bpmnElement="Event_1lm6x5y">
|
|
||||||
<dc:Bounds x="1542" y="292" width="36" height="36" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Event_1ysgenb_di" bpmnElement="Event_1ysgenb">
|
|
||||||
<dc:Bounds x="1542" y="442" width="36" height="36" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Event_00rvb9o_di" bpmnElement="Event_00rvb9o">
|
|
||||||
<dc:Bounds x="1102" y="442" width="36" height="36" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_190bh4a_di" bpmnElement="Activity_0u3tts0">
|
|
||||||
<dc:Bounds x="890" y="420" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_0jai885_di" bpmnElement="Activity_0jai885">
|
|
||||||
<dc:Bounds x="308" y="100" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
|
|
||||||
<dc:Bounds x="222" y="122" width="36" height="36" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_0vs4eam_di" bpmnElement="Activity_0vs4eam">
|
|
||||||
<dc:Bounds x="470" y="430" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_0mwpp9o_di" bpmnElement="Activity_0mwpp9o">
|
|
||||||
<dc:Bounds x="470" y="560" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Event_0v7hm2z_di" bpmnElement="Event_0v7hm2z">
|
|
||||||
<dc:Bounds x="662" y="582" width="36" height="36" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_0paecdb_di" bpmnElement="Activity_0paecdb">
|
|
||||||
<dc:Bounds x="308" y="270" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_0srcl99_di" bpmnElement="Activity_0srcl99">
|
|
||||||
<dc:Bounds x="308" y="350" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_1iyu1x2_di" bpmnElement="Activity_0assw9c">
|
|
||||||
<dc:Bounds x="1320" y="420" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Participant_143daut_di" bpmnElement="Participant_143daut" isHorizontal="true">
|
|
||||||
<dc:Bounds x="820" y="710" width="1048" height="250" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_119ldsr_di" bpmnElement="Flow_119ldsr">
|
|
||||||
<di:waypoint x="990" y="820" />
|
|
||||||
<di:waypoint x="1110" y="820" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_1mm9swr_di" bpmnElement="Flow_1mm9swr">
|
|
||||||
<di:waypoint x="1210" y="820" />
|
|
||||||
<di:waypoint x="1312" y="820" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNShape id="Activity_0fc3d7o_di" bpmnElement="Activity_1q87dyp">
|
|
||||||
<dc:Bounds x="890" y="780" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Event_170rm9y_di" bpmnElement="Event_170rm9y">
|
|
||||||
<dc:Bounds x="1312" y="802" width="36" height="36" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_0t1gk0s_di" bpmnElement="Activity_0h1d3g9">
|
|
||||||
<dc:Bounds x="1110" y="780" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Participant_062djli_di" bpmnElement="Participant_062djli" isHorizontal="true">
|
|
||||||
<dc:Bounds x="820" y="1000" width="1048" height="470" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Lane_06xhlk6_di" bpmnElement="Lane_06xhlk6" isHorizontal="true">
|
|
||||||
<dc:Bounds x="850" y="1000" width="1018" height="125" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Lane_02fg9xj_di" bpmnElement="Lane_02fg9xj" isHorizontal="true">
|
|
||||||
<dc:Bounds x="850" y="1125" width="1018" height="345" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_0od6iot_di" bpmnElement="Flow_0od6iot">
|
|
||||||
<di:waypoint x="948" y="1060" />
|
|
||||||
<di:waypoint x="1060" y="1060" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_0k07ofo_di" bpmnElement="Flow_0k07ofo">
|
|
||||||
<di:waypoint x="1110" y="1100" />
|
|
||||||
<di:waypoint x="1110" y="1215" />
|
|
||||||
<bpmndi:BPMNLabel>
|
|
||||||
<dc:Bounds x="1116" y="1155" width="88" height="27" />
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_1fwmda3_di" bpmnElement="Flow_1fwmda3">
|
|
||||||
<di:waypoint x="1135" y="1240" />
|
|
||||||
<di:waypoint x="1250" y="1240" />
|
|
||||||
<bpmndi:BPMNLabel>
|
|
||||||
<dc:Bounds x="1184" y="1222" width="18" height="14" />
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_15lkkxa_di" bpmnElement="Flow_15lkkxa">
|
|
||||||
<di:waypoint x="1350" y="1240" />
|
|
||||||
<di:waypoint x="1472" y="1240" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_050yku1_di" bpmnElement="Flow_050yku1">
|
|
||||||
<di:waypoint x="1110" y="1265" />
|
|
||||||
<di:waypoint x="1110" y="1380" />
|
|
||||||
<di:waypoint x="1250" y="1380" />
|
|
||||||
<bpmndi:BPMNLabel>
|
|
||||||
<dc:Bounds x="1118" y="1320" width="15" height="14" />
|
|
||||||
</bpmndi:BPMNLabel>
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_1lgcq8d_di" bpmnElement="Flow_1lgcq8d">
|
|
||||||
<di:waypoint x="1350" y="1380" />
|
|
||||||
<di:waypoint x="1430" y="1380" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_0oqra8s_di" bpmnElement="Flow_0oqra8s">
|
|
||||||
<di:waypoint x="1530" y="1380" />
|
|
||||||
<di:waypoint x="1602" y="1380" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNShape id="Event_1oz3tr5_di" bpmnElement="Event_1oz3tr5">
|
|
||||||
<dc:Bounds x="912" y="1042" width="36" height="36" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_0xk9kck_di" bpmnElement="Activity_0xk9kck">
|
|
||||||
<dc:Bounds x="1060" y="1020" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Gateway_079742h_di" bpmnElement="Gateway_079742h" isMarkerVisible="true">
|
|
||||||
<dc:Bounds x="1085" y="1215" width="50" height="50" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_0umieiz_di" bpmnElement="Activity_0umieiz">
|
|
||||||
<dc:Bounds x="1250" y="1200" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Event_062x6a9_di" bpmnElement="Event_062x6a9">
|
|
||||||
<dc:Bounds x="1472" y="1222" width="36" height="36" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_0b6bh6v_di" bpmnElement="Activity_0b6bh6v">
|
|
||||||
<dc:Bounds x="1250" y="1340" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Event_1achffx_di" bpmnElement="Event_1achffx">
|
|
||||||
<dc:Bounds x="1602" y="1362" width="36" height="36" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_1mme68o_di" bpmnElement="Activity_1mme68o">
|
|
||||||
<dc:Bounds x="1430" y="1340" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Participant_0xytik6_di" bpmnElement="Participant_1q0bjfl" isHorizontal="true">
|
|
||||||
<dc:Bounds x="140" y="710" width="600" height="370" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Lane_06e7su5_di" bpmnElement="Lane_06e7su5" isHorizontal="true">
|
|
||||||
<dc:Bounds x="170" y="710" width="570" height="125" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Lane_1lg2d2q_di" bpmnElement="Lane_1lg2d2q" isHorizontal="true">
|
|
||||||
<dc:Bounds x="170" y="835" width="570" height="125" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Lane_19i1lbs_di" bpmnElement="Lane_19i1lbs" isHorizontal="true">
|
|
||||||
<dc:Bounds x="170" y="960" width="570" height="120" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_17d0j42_di" bpmnElement="Flow_17d0j42">
|
|
||||||
<di:waypoint x="268" y="770" />
|
|
||||||
<di:waypoint x="370" y="770" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_0opy5tp_di" bpmnElement="Flow_0opy5tp">
|
|
||||||
<di:waypoint x="420" y="810" />
|
|
||||||
<di:waypoint x="420" y="860" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_02uzxx3_di" bpmnElement="Flow_02uzxx3">
|
|
||||||
<di:waypoint x="470" y="1020" />
|
|
||||||
<di:waypoint x="520" y="1020" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_0sudw7l_di" bpmnElement="Flow_0sudw7l">
|
|
||||||
<di:waypoint x="420" y="940" />
|
|
||||||
<di:waypoint x="420" y="980" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_0rpv16j_di" bpmnElement="Flow_0rpv16j">
|
|
||||||
<di:waypoint x="620" y="1020" />
|
|
||||||
<di:waypoint x="682" y="1020" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNShape id="Event_0v73rhy_di" bpmnElement="Event_0v73rhy">
|
|
||||||
<dc:Bounds x="232" y="752" width="36" height="36" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_0n8uuvk_di" bpmnElement="Activity_0n8uuvk">
|
|
||||||
<dc:Bounds x="370" y="730" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_06xjrrk_di" bpmnElement="Activity_06xjrrk">
|
|
||||||
<dc:Bounds x="370" y="860" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_00bhvrm_di" bpmnElement="Activity_0uxkytf">
|
|
||||||
<dc:Bounds x="370" y="980" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Event_01nh9j2_di" bpmnElement="Event_01nh9j2">
|
|
||||||
<dc:Bounds x="682" y="1002" width="36" height="36" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_1r1i7hf_di" bpmnElement="Activity_1qgjnyh">
|
|
||||||
<dc:Bounds x="520" y="980" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Participant_1ova0gb_di" bpmnElement="Participant_1ova0gb" isHorizontal="true">
|
|
||||||
<dc:Bounds x="140" y="1530" width="820" height="370" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Lane_0lvtv1p_di" bpmnElement="Lane_0lvtv1p" isHorizontal="true">
|
|
||||||
<dc:Bounds x="170" y="1530" width="790" height="125" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Lane_1jghhc4_di" bpmnElement="Lane_1jghhc4" isHorizontal="true">
|
|
||||||
<dc:Bounds x="170" y="1655" width="790" height="125" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Lane_0k7q1xv_di" bpmnElement="Lane_0k7q1xv" isHorizontal="true">
|
|
||||||
<dc:Bounds x="170" y="1780" width="790" height="120" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_046hsk4_di" bpmnElement="Flow_046hsk4">
|
|
||||||
<di:waypoint x="268" y="1600" />
|
|
||||||
<di:waypoint x="320" y="1600" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_0zoqmub_di" bpmnElement="Flow_0zoqmub">
|
|
||||||
<di:waypoint x="420" y="1600" />
|
|
||||||
<di:waypoint x="530" y="1600" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_0ip5x3i_di" bpmnElement="Flow_0ip5x3i">
|
|
||||||
<di:waypoint x="630" y="1600" />
|
|
||||||
<di:waypoint x="720" y="1600" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_0nyxv8e_di" bpmnElement="Flow_0nyxv8e">
|
|
||||||
<di:waypoint x="820" y="1600" />
|
|
||||||
<di:waypoint x="902" y="1600" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_1bqiz65_di" bpmnElement="Flow_1bqiz65">
|
|
||||||
<di:waypoint x="580" y="1640" />
|
|
||||||
<di:waypoint x="580" y="1710" />
|
|
||||||
<di:waypoint x="430" y="1710" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_142xsjm_di" bpmnElement="Flow_142xsjm">
|
|
||||||
<di:waypoint x="580" y="1640" />
|
|
||||||
<di:waypoint x="580" y="1800" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_0ue2i8v_di" bpmnElement="Flow_0ue2i8v">
|
|
||||||
<di:waypoint x="630" y="1840" />
|
|
||||||
<di:waypoint x="682" y="1840" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_0znvsoe_di" bpmnElement="Flow_0znvsoe">
|
|
||||||
<di:waypoint x="330" y="1720" />
|
|
||||||
<di:waypoint x="268" y="1720" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
<bpmndi:BPMNShape id="Event_1b2jt5y_di" bpmnElement="Event_1b2jt5y">
|
|
||||||
<dc:Bounds x="232" y="1582" width="36" height="36" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_1ikvmpl_di" bpmnElement="Activity_1ikvmpl">
|
|
||||||
<dc:Bounds x="320" y="1560" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Event_0y66dbe_di" bpmnElement="Event_0y66dbe">
|
|
||||||
<dc:Bounds x="902" y="1582" width="36" height="36" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_0ujophe_di" bpmnElement="Activity_11lqrhg">
|
|
||||||
<dc:Bounds x="530" y="1560" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_1ohwol1_di" bpmnElement="Activity_1ohwol1">
|
|
||||||
<dc:Bounds x="330" y="1680" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_1e9hb9h_di" bpmnElement="Activity_1e9hb9h">
|
|
||||||
<dc:Bounds x="530" y="1800" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Event_0l7ljcr_di" bpmnElement="Event_0l7ljcr">
|
|
||||||
<dc:Bounds x="682" y="1822" width="36" height="36" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Event_0bbqq3x_di" bpmnElement="Event_0bbqq3x">
|
|
||||||
<dc:Bounds x="232" y="1702" width="36" height="36" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNShape id="Activity_1oownmu_di" bpmnElement="Activity_1oownmu">
|
|
||||||
<dc:Bounds x="720" y="1560" width="100" height="80" />
|
|
||||||
</bpmndi:BPMNShape>
|
|
||||||
<bpmndi:BPMNEdge id="Flow_1xo6v1g_di" bpmnElement="Flow_1xo6v1g">
|
|
||||||
<di:waypoint x="940" y="500" />
|
|
||||||
<di:waypoint x="940" y="780" />
|
|
||||||
</bpmndi:BPMNEdge>
|
|
||||||
</bpmndi:BPMNPlane>
|
|
||||||
</bpmndi:BPMNDiagram>
|
|
||||||
</bpmn:definitions>
|
|
@@ -0,0 +1,23 @@
|
|||||||
|
# 2. Seperate service for Executors and Executor Pool
|
||||||
|
|
||||||
|
Date: 2021-11-21
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
Accepted
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
The executor pool has a complete list of all executors and knows if they are available or not, executors can execute tasks that match their type. The executors can therefore be part of the executor pool service, or each executor is a standalone service, as well as the executor pool.
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
We will use a separate microservice for each executor and one service for the executor pool.
|
||||||
|
Having the executor pool and the executors as separate services would increase fault tolerance. If the executor pool goes down, the executors would stay online and execute their tasks without being affected by the executor pool’s outage. Likewise, if an executor goes down it does not impact other executors or the executor pool.
|
||||||
|
Different executors can have different execution times and a different load. This means the executors scale differently. Thus, we need a separate service for each executor.
|
||||||
|
Executors of different kinds will also scale differently than the executor pool and new executors of new types might be added at some point, further increasing the need for separate services to guarantee scalability and evolvability.
|
||||||
|
New executors will be added/removed during runtime. Therefore, we need a high extensibility.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
Executors will be added/removed quite frequently, making the deployment of the system easier and less risk-prone if each executor is a separate service, also separated from the executor pool, which just keeps track of the executors and their status. However, having these separate services, the complexity might increase, and the testability of the system will decrease.
|
@@ -1,21 +0,0 @@
|
|||||||
# 2. Seperate service for Executors
|
|
||||||
|
|
||||||
Date: 2021-10-18
|
|
||||||
|
|
||||||
## Status
|
|
||||||
|
|
||||||
Accepted
|
|
||||||
|
|
||||||
## Context
|
|
||||||
|
|
||||||
The users need to be able to add new executors to the executor pool. The functionality of the executor is currently unknown.
|
|
||||||
|
|
||||||
## Decision
|
|
||||||
|
|
||||||
We will use a separate microservice for each executor.
|
|
||||||
New executors will be added/removed during runtime. Therefore, we need a high extensibility.
|
|
||||||
Different executors can have different execution times and a different load. This means the executors scale differently.
|
|
||||||
|
|
||||||
## Consequences
|
|
||||||
|
|
||||||
Having executors as its own service we can deploy new executors independently and easily add new executors during runtime and guarantee high scalability as well as evolvability.
|
|
@@ -1,21 +0,0 @@
|
|||||||
# 3. Seperate service for assignment domain
|
|
||||||
|
|
||||||
Date: 2021-10-18
|
|
||||||
|
|
||||||
## Status
|
|
||||||
|
|
||||||
Accepted
|
|
||||||
|
|
||||||
## Context
|
|
||||||
|
|
||||||
The Assignment Service handles the assignment of a task to a corresponding and available executor. It keeps track of all the connections between tasks and executors.
|
|
||||||
|
|
||||||
## Decision
|
|
||||||
|
|
||||||
The assignment domain will be its own service.
|
|
||||||
The assignment service will be a central point in our application. It will have most of the business logic in it and will communicate with all the different services. Therefore, other services can be kind of “dumb” and only need to focus on their simple tasks.
|
|
||||||
The code of the assignment will change more often than the code of the other services, thus having the assignment service split from the other makes it more deployable.
|
|
||||||
|
|
||||||
## Consequences
|
|
||||||
|
|
||||||
Having this system as its own service we reduce the Fault tolerance because the assignment service can be the single point of failure. We can mitigate this risk by implementing (server) replication and/or having an event driven communication with persisting messages. Therefore, all other services can run independently, and the assignment service can recover from a crash.
|
|
@@ -0,0 +1,21 @@
|
|||||||
|
# 3. Separate service for the Roster
|
||||||
|
|
||||||
|
Date: 2021-11-21
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
Accepted
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
The roster acts as an orchestrator for the system. It communicates directly with the task list, the executors, the executor pool, and the auction house. It handles the assignment of a task to a corresponding and available executor, keeps track of all the connections between tasks and executors, and communicates the status of tasks and executors to other services.
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
The Roster domain will be its own service.
|
||||||
|
The Roster service will be a central point in our application. It will have most of the workflow logic in it and will communicate with all the different services. Therefore, other services can focus on their business logic and be largely ignorant of the overall workflow.
|
||||||
|
The code of the assignment will change more often than the code of the other services, thus having the assignment service split from the other makes it more deployable.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
Having this system as its own service will reduce the fault tolerance because the assignment service can be the single point of failure. We can mitigate this risk by implementing (server) replication and/or having an event driven communication with persisting messages. Therefore, all other services can run independently, and the assignment service can recover from a crash. Additionally, we need to ensure a high level of interoperability, since the roster has to communicate with all other parts of the system.
|
@@ -1,21 +0,0 @@
|
|||||||
# 4. Seperate service for executor pool
|
|
||||||
|
|
||||||
Date: 2021-10-18
|
|
||||||
|
|
||||||
## Status
|
|
||||||
|
|
||||||
Accepted
|
|
||||||
|
|
||||||
## Context
|
|
||||||
|
|
||||||
The Executor pool keeps track of the connected executors and their purpose and status.
|
|
||||||
|
|
||||||
## Decision
|
|
||||||
|
|
||||||
We will have a separate service for the executor pool.
|
|
||||||
There are no other domains which share the same or similar functionality.
|
|
||||||
The executor pool also scales differently than other services.
|
|
||||||
|
|
||||||
## Consequences
|
|
||||||
|
|
||||||
Having the executor pool as a separate service will help with the deployability of this service but will make the overall structure more complex and reduces testability.
|
|
@@ -0,0 +1,20 @@
|
|||||||
|
# 4. Separate service for the Task List
|
||||||
|
|
||||||
|
Date: 2021-11-21
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
Accepted
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
Tasks are created in the task list, and the status of each task (created, assigned, executing, executed) is tracked in the task list as well. The task list mainly communicates with the roster so that tasks can get assigned and the roster will give the task list feedback about the tasks’ status.
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
The task list will be its own service.
|
||||||
|
The task list needs to scale based on the number of active users and the intensity of their activity at any time while the scaling of other parts of the system can be constrained by other factors.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
Although having the task list as its own service might slightly increase the complexity of the system and decrease the testability, it also makes the system easier to deploy and protective of its data. However, to ensure that this data is always available and does not get lost, the task list needs to be able to recover all its data (the entire history of all tasks) in case it goes down.
|
@@ -4,7 +4,7 @@ Date: 2021-10-18
|
|||||||
|
|
||||||
## Status
|
## Status
|
||||||
|
|
||||||
Accepted
|
Superceded by [8. Switch to an event-driven microservices architecture](0008-switch-to-an-event-driven-microservices-architecture.md)
|
||||||
|
|
||||||
## Context
|
## Context
|
||||||
|
|
||||||
|
@@ -0,0 +1,22 @@
|
|||||||
|
# 7. Seperate service for Auction House
|
||||||
|
|
||||||
|
Date: 2021-11-21
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
Accepted
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
The auction house is the service that can connect to other groups’ auction houses. If there is a task whose task type does not match that of our executors, the auction house can start an auction where other groups can bid on doing the task for us. Moreover, it can also bid on other groups’ auctions.
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
The auction house will be its own service.
|
||||||
|
The auction house is the only part of our system that has external communication; therefore, it makes sense to have it as its own service, also to guarantee better deployability.
|
||||||
|
The auction house does not scale directly based on the number of tasks, but only the proportion which needs external executors. Moreover, there could be limits on the number of auctions that could be started. Therefore, the auction house scales differently to other services.
|
||||||
|
Moreover, having the auction house as its own service also improves the fault tolerance of our system.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
Since the auction house will be a standalone service, we have to make sure that if it goes down, it can recover its data in some way (which auctions it has launched, which auctions it has placed bids on or even won, etc.). Even though the testability and latency of our system might worsen by having a separate service for the auction house, we can implement different kinds of communication for internal and external communication in a much easier way.
|
@@ -0,0 +1,26 @@
|
|||||||
|
# 8. Switch to an event-driven microservices architecture
|
||||||
|
|
||||||
|
Date: 2021-11-21
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
Proposed
|
||||||
|
|
||||||
|
Supercedes [5. Event driven communication](0005-event-driven-communication.md)
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
Our Tapas App is currently implemented based on a microservice architecture, where the services communicate synchronously via request-response. Each service encapsulates a different bounded context with different functional and non-functional requirements. Internal communication could also be done using asynchronous or event-driven communication.
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
Pros:
|
||||||
|
Scalability: Different services within the Tapas app are not always able to scale at the same rate. For example, we could have thousands of users adding printing tasks at the same time, but maybe we only have one printer. In this scenario we might want to scale the task-list service up to handle the creation load, but scaling up the printing executor operates on a different time-scale (i.e. adding a printer takes time). Moreover, we could have a lot of new tasks coming in, most of which can be executed internally. In this case we want to be able to scale up the task list but might not need to scale up the auction house. Event-driven communication would decrease the coupling of services. Consequently, the scalability of individual services would be enhanced as they no longer depend on the scalability of other services. This improves the apps overall scalability. Since scalability is one of the systems top 3 -ility, this seems quite important.
|
||||||
|
Fault tolerance: Another of the systems top 3 -ilities is fault tolerance. We could have highly unstable IoT executors that fail often. This should not disrupt the system’s overall operation. The decoupling facilitated by event-driven, asynchronous, communication ensures that when individual services go down, the impact of other services is limited and once they go back up then can recover the systems state from persisted messages.
|
||||||
|
Cons:
|
||||||
|
Error handling, workflow control, and event timing:
|
||||||
|
The aforementioned topics outline the drawbacks of event- driven architecture. These drawbacks can be mitigated by using an orchestrator (like we currently do with the roster) to orchestrate assignment of tasks, auctioning off tasks and error handling when executors fail. More research needed.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
Consequences to be determined but would relate to the three concepts mentioned as cons.
|
@@ -0,0 +1,19 @@
|
|||||||
|
# 9. 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
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
## 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 redepolyed anyways. Another consequence is that versioning becomes more complicated.
|
20
doc/architecture/decisions/0010-executor-base-library.md
Normal file
20
doc/architecture/decisions/0010-executor-base-library.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# 10. executor base library
|
||||||
|
|
||||||
|
Date: 2021-11-21
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
Accepted
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
Since all executors use the same logic to communicate with other services, any change to this logic would have to be made for every executor. We will therefore use a shared library for executors, called executor-base. The library includes all the shared logic which every executor needs.
|
||||||
|
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. If other people 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 the connection implementations to the Tapas system.
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
It becomes easier to change the way that the executors communicate with the rest of the system. Moreover, changes are less risky as they only need to be implemented once. It also becomes easier for other teams within the organisation to create executors as they can use the executor-base to implement the shared logic. However, using a shared library will increase the complexity of the executors. Also there needs to be a clear way to use proper versioning. Lastly, by using this library we might be making assumptions for future executors that might not hold. For example, if we want to create more lightweight executors for IoT devices we might need to create a separate base package (if the current one becomes too fat), so that the executors can stay lightweight and don’t implement unused code.
|
@@ -0,0 +1,19 @@
|
|||||||
|
# 11. seperation 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 seperate 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.
|
337
doc/workflow.bpmn
Normal file
337
doc/workflow.bpmn
Normal file
@@ -0,0 +1,337 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_0grlf6g" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.8.1" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.15.0">
|
||||||
|
<bpmn:collaboration id="Collaboration_0p9il2x">
|
||||||
|
<bpmn:participant id="Participant_06nkquo" name="Task Service" processRef="Process_12mqbju" />
|
||||||
|
<bpmn:participant id="Participant_016oseg" name="Roster Service" processRef="Process_1s4t9qw" />
|
||||||
|
<bpmn:participant id="Participant_11sfrgz" name="Executor Pool" processRef="Process_0bur8vc" />
|
||||||
|
<bpmn:participant id="Participant_1x7nd70" name="executor" processRef="Process_1wq3sju" />
|
||||||
|
<bpmn:messageFlow id="Flow_14smr2g" sourceRef="Activity_13xp2vr" targetRef="Activity_0iljjpd" />
|
||||||
|
<bpmn:messageFlow id="Flow_1pr8430" name="Get All available executors" sourceRef="Activity_0iljjpd" targetRef="Activity_0qbi1wr" />
|
||||||
|
<bpmn:messageFlow id="Flow_0je874m" name="Return executorlist" sourceRef="Activity_0qbi1wr" targetRef="Activity_05ck4dv" />
|
||||||
|
<bpmn:messageFlow id="Flow_0z85582" name="notify executor about new tasks in event channel" sourceRef="Activity_0qh2a6b" targetRef="Activity_0feawyi" />
|
||||||
|
<bpmn:messageFlow id="Flow_02hwoew" sourceRef="Activity_1hdmlbq" targetRef="Activity_0x47yx9" />
|
||||||
|
<bpmn:messageFlow id="Flow_0jg4g6h" name="return task informations" sourceRef="Activity_0a4kzh7" targetRef="Activity_12tzfd7" />
|
||||||
|
<bpmn:messageFlow id="Flow_1ejujjc" name="Notify about status change" sourceRef="Activity_0a4kzh7" targetRef="Activity_0fiiuon" />
|
||||||
|
<bpmn:messageFlow id="Flow_1gknjes" name="Notify about task finish" sourceRef="Activity_1f06uud" targetRef="Activity_01iahon" />
|
||||||
|
<bpmn:messageFlow id="Flow_0fihv5s" name="return task results" sourceRef="Activity_12tzfd7" targetRef="Activity_1f06uud" />
|
||||||
|
<bpmn:messageFlow id="Flow_1qv7s55" name="Sends started message to executor pool" sourceRef="Activity_1r2yhx0" targetRef="Activity_14xojfa" />
|
||||||
|
<bpmn:messageFlow id="Flow_1l0z3bv" name="Return success message if added" sourceRef="Activity_14xojfa" targetRef="Activity_09ae5r2" />
|
||||||
|
</bpmn:collaboration>
|
||||||
|
<bpmn:process id="Process_12mqbju" isExecutable="true">
|
||||||
|
<bpmn:task id="Activity_0fiiuon" name="Change status to assigned" />
|
||||||
|
<bpmn:task id="Activity_01iahon" name="Update status and task" />
|
||||||
|
<bpmn:task id="Activity_13xp2vr" name="Task created" />
|
||||||
|
</bpmn:process>
|
||||||
|
<bpmn:process id="Process_1s4t9qw" isExecutable="false">
|
||||||
|
<bpmn:exclusiveGateway id="Gateway_0sqs3j7">
|
||||||
|
<bpmn:incoming>Flow_1rie16h</bpmn:incoming>
|
||||||
|
<bpmn:outgoing>Flow_159tlyd</bpmn:outgoing>
|
||||||
|
<bpmn:outgoing>Flow_01pbz6s</bpmn:outgoing>
|
||||||
|
</bpmn:exclusiveGateway>
|
||||||
|
<bpmn:task id="Activity_0qh2a6b" name="Add task to task queue">
|
||||||
|
<bpmn:incoming>Flow_159tlyd</bpmn:incoming>
|
||||||
|
</bpmn:task>
|
||||||
|
<bpmn:task id="Activity_005fqxd" name="Auction House">
|
||||||
|
<bpmn:incoming>Flow_01pbz6s</bpmn:incoming>
|
||||||
|
</bpmn:task>
|
||||||
|
<bpmn:task id="Activity_0x47yx9" name="Check if task available for this executor">
|
||||||
|
<bpmn:outgoing>Flow_1urp3d2</bpmn:outgoing>
|
||||||
|
</bpmn:task>
|
||||||
|
<bpmn:exclusiveGateway id="Gateway_1apm7h8">
|
||||||
|
<bpmn:incoming>Flow_1urp3d2</bpmn:incoming>
|
||||||
|
<bpmn:outgoing>Flow_1oy6e8u</bpmn:outgoing>
|
||||||
|
<bpmn:outgoing>Flow_1rxws1j</bpmn:outgoing>
|
||||||
|
</bpmn:exclusiveGateway>
|
||||||
|
<bpmn:task id="Activity_1v2mt3m" name="Return no task available">
|
||||||
|
<bpmn:incoming>Flow_1oy6e8u</bpmn:incoming>
|
||||||
|
</bpmn:task>
|
||||||
|
<bpmn:task id="Activity_0a4kzh7" name="Assign executor to task and add to roster">
|
||||||
|
<bpmn:incoming>Flow_1rxws1j</bpmn:incoming>
|
||||||
|
</bpmn:task>
|
||||||
|
<bpmn:task id="Activity_1f06uud" name="Remove assignment from roster" />
|
||||||
|
<bpmn:task id="Activity_0iljjpd" name="Receive Task" />
|
||||||
|
<bpmn:task id="Activity_05ck4dv" name="Check if executor is available">
|
||||||
|
<bpmn:outgoing>Flow_1rie16h</bpmn:outgoing>
|
||||||
|
</bpmn:task>
|
||||||
|
<bpmn:sequenceFlow id="Flow_1rie16h" sourceRef="Activity_05ck4dv" targetRef="Gateway_0sqs3j7" />
|
||||||
|
<bpmn:sequenceFlow id="Flow_159tlyd" name="Yes" sourceRef="Gateway_0sqs3j7" targetRef="Activity_0qh2a6b" />
|
||||||
|
<bpmn:sequenceFlow id="Flow_01pbz6s" name="No" sourceRef="Gateway_0sqs3j7" targetRef="Activity_005fqxd" />
|
||||||
|
<bpmn:sequenceFlow id="Flow_1urp3d2" sourceRef="Activity_0x47yx9" targetRef="Gateway_1apm7h8" />
|
||||||
|
<bpmn:sequenceFlow id="Flow_1oy6e8u" name="No" sourceRef="Gateway_1apm7h8" targetRef="Activity_1v2mt3m" />
|
||||||
|
<bpmn:sequenceFlow id="Flow_1rxws1j" sourceRef="Gateway_1apm7h8" targetRef="Activity_0a4kzh7" />
|
||||||
|
</bpmn:process>
|
||||||
|
<bpmn:process id="Process_0bur8vc" isExecutable="false">
|
||||||
|
<bpmn:task id="Activity_0qbi1wr" name="Retrieve executors by type" />
|
||||||
|
<bpmn:task id="Activity_14xojfa" name="Adds executor to pool" />
|
||||||
|
</bpmn:process>
|
||||||
|
<bpmn:process id="Process_1wq3sju" isExecutable="false">
|
||||||
|
<bpmn:task id="Activity_0feawyi" name="check if right tasktype and if idling">
|
||||||
|
<bpmn:outgoing>Flow_0nuuhk7</bpmn:outgoing>
|
||||||
|
</bpmn:task>
|
||||||
|
<bpmn:exclusiveGateway id="Gateway_0nyndyn">
|
||||||
|
<bpmn:incoming>Flow_0nuuhk7</bpmn:incoming>
|
||||||
|
<bpmn:outgoing>Flow_197gie6</bpmn:outgoing>
|
||||||
|
<bpmn:outgoing>Flow_0ruufha</bpmn:outgoing>
|
||||||
|
</bpmn:exclusiveGateway>
|
||||||
|
<bpmn:task id="Activity_1v0d9zm" name="Do nothing">
|
||||||
|
<bpmn:incoming>Flow_197gie6</bpmn:incoming>
|
||||||
|
</bpmn:task>
|
||||||
|
<bpmn:task id="Activity_12tzfd7" name="Execute task" />
|
||||||
|
<bpmn:task id="Activity_1hdmlbq" name="Apply for Assignment">
|
||||||
|
<bpmn:incoming>Flow_0ruufha</bpmn:incoming>
|
||||||
|
<bpmn:incoming>Flow_1duwugb</bpmn:incoming>
|
||||||
|
</bpmn:task>
|
||||||
|
<bpmn:task id="Activity_1r2yhx0" name="Executor Starts" />
|
||||||
|
<bpmn:task id="Activity_09ae5r2" name="Was startup successfull">
|
||||||
|
<bpmn:outgoing>Flow_19m4xhk</bpmn:outgoing>
|
||||||
|
</bpmn:task>
|
||||||
|
<bpmn:exclusiveGateway id="Gateway_1o0lihs">
|
||||||
|
<bpmn:incoming>Flow_19m4xhk</bpmn:incoming>
|
||||||
|
<bpmn:outgoing>Flow_0b4g73l</bpmn:outgoing>
|
||||||
|
<bpmn:outgoing>Flow_1duwugb</bpmn:outgoing>
|
||||||
|
</bpmn:exclusiveGateway>
|
||||||
|
<bpmn:task id="Activity_0n6hvhw" name="Shut down">
|
||||||
|
<bpmn:incoming>Flow_0b4g73l</bpmn:incoming>
|
||||||
|
</bpmn:task>
|
||||||
|
<bpmn:sequenceFlow id="Flow_0nuuhk7" sourceRef="Activity_0feawyi" targetRef="Gateway_0nyndyn" />
|
||||||
|
<bpmn:sequenceFlow id="Flow_197gie6" name="No" sourceRef="Gateway_0nyndyn" targetRef="Activity_1v0d9zm" />
|
||||||
|
<bpmn:sequenceFlow id="Flow_0ruufha" sourceRef="Gateway_0nyndyn" targetRef="Activity_1hdmlbq" />
|
||||||
|
<bpmn:sequenceFlow id="Flow_19m4xhk" sourceRef="Activity_09ae5r2" targetRef="Gateway_1o0lihs" />
|
||||||
|
<bpmn:sequenceFlow id="Flow_0b4g73l" name="No" sourceRef="Gateway_1o0lihs" targetRef="Activity_0n6hvhw" />
|
||||||
|
<bpmn:sequenceFlow id="Flow_1duwugb" name="Yes" sourceRef="Gateway_1o0lihs" targetRef="Activity_1hdmlbq" />
|
||||||
|
</bpmn:process>
|
||||||
|
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
|
||||||
|
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Collaboration_0p9il2x">
|
||||||
|
<bpmndi:BPMNShape id="Participant_016oseg_di" bpmnElement="Participant_016oseg" isHorizontal="true">
|
||||||
|
<dc:Bounds x="160" y="310" width="1950" height="260" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_1rie16h_di" bpmnElement="Flow_1rie16h">
|
||||||
|
<di:waypoint x="510" y="390" />
|
||||||
|
<di:waypoint x="805" y="390" />
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_159tlyd_di" bpmnElement="Flow_159tlyd">
|
||||||
|
<di:waypoint x="855" y="390" />
|
||||||
|
<di:waypoint x="950" y="390" />
|
||||||
|
<bpmndi:BPMNLabel>
|
||||||
|
<dc:Bounds x="894" y="372" width="18" height="14" />
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_01pbz6s_di" bpmnElement="Flow_01pbz6s">
|
||||||
|
<di:waypoint x="830" y="415" />
|
||||||
|
<di:waypoint x="830" y="500" />
|
||||||
|
<di:waypoint x="950" y="500" />
|
||||||
|
<bpmndi:BPMNLabel>
|
||||||
|
<dc:Bounds x="882" y="483" width="15" height="14" />
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_1urp3d2_di" bpmnElement="Flow_1urp3d2">
|
||||||
|
<di:waypoint x="1490" y="400" />
|
||||||
|
<di:waypoint x="1585" y="400" />
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_1oy6e8u_di" bpmnElement="Flow_1oy6e8u">
|
||||||
|
<di:waypoint x="1610" y="425" />
|
||||||
|
<di:waypoint x="1610" y="480" />
|
||||||
|
<bpmndi:BPMNLabel>
|
||||||
|
<dc:Bounds x="1618" y="443" width="15" height="14" />
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_1rxws1j_di" bpmnElement="Flow_1rxws1j">
|
||||||
|
<di:waypoint x="1635" y="400" />
|
||||||
|
<di:waypoint x="1750" y="400" />
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape id="Gateway_0sqs3j7_di" bpmnElement="Gateway_0sqs3j7" isMarkerVisible="true">
|
||||||
|
<dc:Bounds x="805" y="365" width="50" height="50" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_0qh2a6b_di" bpmnElement="Activity_0qh2a6b">
|
||||||
|
<dc:Bounds x="950" y="350" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_005fqxd_di" bpmnElement="Activity_005fqxd">
|
||||||
|
<dc:Bounds x="950" y="460" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_0x47yx9_di" bpmnElement="Activity_0x47yx9">
|
||||||
|
<dc:Bounds x="1390" y="360" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Gateway_1apm7h8_di" bpmnElement="Gateway_1apm7h8" isMarkerVisible="true">
|
||||||
|
<dc:Bounds x="1585" y="375" width="50" height="50" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_1v2mt3m_di" bpmnElement="Activity_1v2mt3m">
|
||||||
|
<dc:Bounds x="1560" y="480" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_0a4kzh7_di" bpmnElement="Activity_0a4kzh7">
|
||||||
|
<dc:Bounds x="1750" y="360" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_1f06uud_di" bpmnElement="Activity_1f06uud">
|
||||||
|
<dc:Bounds x="1970" y="360" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_0iljjpd_di" bpmnElement="Activity_0iljjpd">
|
||||||
|
<dc:Bounds x="230" y="350" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_05ck4dv_di" bpmnElement="Activity_05ck4dv">
|
||||||
|
<dc:Bounds x="410" y="350" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Participant_11sfrgz_di" bpmnElement="Participant_11sfrgz" isHorizontal="true">
|
||||||
|
<dc:Bounds x="160" y="640" width="860" height="250" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_0qbi1wr_di" bpmnElement="Activity_0qbi1wr">
|
||||||
|
<dc:Bounds x="230" y="730" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_14xojfa_di" bpmnElement="Activity_14xojfa">
|
||||||
|
<dc:Bounds x="550" y="710" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Participant_1x7nd70_di" bpmnElement="Participant_1x7nd70" isHorizontal="true">
|
||||||
|
<dc:Bounds x="160" y="930" width="1950" height="300" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_0nuuhk7_di" bpmnElement="Flow_0nuuhk7">
|
||||||
|
<di:waypoint x="1180" y="1040" />
|
||||||
|
<di:waypoint x="1265" y="1040" />
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_197gie6_di" bpmnElement="Flow_197gie6">
|
||||||
|
<di:waypoint x="1290" y="1065" />
|
||||||
|
<di:waypoint x="1290" y="1150" />
|
||||||
|
<di:waypoint x="1400" y="1150" />
|
||||||
|
<bpmndi:BPMNLabel>
|
||||||
|
<dc:Bounds x="1332" y="1133" width="15" height="14" />
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_0ruufha_di" bpmnElement="Flow_0ruufha">
|
||||||
|
<di:waypoint x="1315" y="1040" />
|
||||||
|
<di:waypoint x="1400" y="1040" />
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_19m4xhk_di" bpmnElement="Flow_19m4xhk">
|
||||||
|
<di:waypoint x="810" y="1010" />
|
||||||
|
<di:waypoint x="905" y="1010" />
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_0b4g73l_di" bpmnElement="Flow_0b4g73l">
|
||||||
|
<di:waypoint x="930" y="1035" />
|
||||||
|
<di:waypoint x="930" y="1110" />
|
||||||
|
<bpmndi:BPMNLabel>
|
||||||
|
<dc:Bounds x="938" y="1063" width="15" height="14" />
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_1duwugb_di" bpmnElement="Flow_1duwugb">
|
||||||
|
<di:waypoint x="930" y="985" />
|
||||||
|
<di:waypoint x="930" y="960" />
|
||||||
|
<di:waypoint x="1420" y="960" />
|
||||||
|
<di:waypoint x="1420" y="1000" />
|
||||||
|
<bpmndi:BPMNLabel>
|
||||||
|
<dc:Bounds x="961" y="942" width="18" height="14" />
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNShape id="Activity_0feawyi_di" bpmnElement="Activity_0feawyi">
|
||||||
|
<dc:Bounds x="1080" y="1000" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Gateway_0nyndyn_di" bpmnElement="Gateway_0nyndyn" isMarkerVisible="true">
|
||||||
|
<dc:Bounds x="1265" y="1015" width="50" height="50" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_1v0d9zm_di" bpmnElement="Activity_1v0d9zm">
|
||||||
|
<dc:Bounds x="1400" y="1110" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_12tzfd7_di" bpmnElement="Activity_12tzfd7">
|
||||||
|
<dc:Bounds x="1750" y="1000" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_1hdmlbq_di" bpmnElement="Activity_1hdmlbq">
|
||||||
|
<dc:Bounds x="1400" y="1000" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_1r2yhx0_di" bpmnElement="Activity_1r2yhx0">
|
||||||
|
<dc:Bounds x="340" y="1050" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_09ae5r2_di" bpmnElement="Activity_09ae5r2">
|
||||||
|
<dc:Bounds x="710" y="970" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Gateway_1o0lihs_di" bpmnElement="Gateway_1o0lihs" isMarkerVisible="true">
|
||||||
|
<dc:Bounds x="905" y="985" width="50" height="50" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_0n6hvhw_di" bpmnElement="Activity_0n6hvhw">
|
||||||
|
<dc:Bounds x="880" y="1110" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Participant_06nkquo_di" bpmnElement="Participant_06nkquo" isHorizontal="true">
|
||||||
|
<dc:Bounds x="160" y="80" width="1970" height="150" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_0fiiuon_di" bpmnElement="Activity_0fiiuon">
|
||||||
|
<dc:Bounds x="1750" y="120" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_01iahon_di" bpmnElement="Activity_01iahon">
|
||||||
|
<dc:Bounds x="1970" y="120" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_13xp2vr_di" bpmnElement="Activity_13xp2vr">
|
||||||
|
<dc:Bounds x="230" y="120" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_14smr2g_di" bpmnElement="Flow_14smr2g">
|
||||||
|
<di:waypoint x="280" y="200" />
|
||||||
|
<di:waypoint x="280" y="350" />
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_1pr8430_di" bpmnElement="Flow_1pr8430">
|
||||||
|
<di:waypoint x="280" y="430" />
|
||||||
|
<di:waypoint x="280" y="730" />
|
||||||
|
<bpmndi:BPMNLabel>
|
||||||
|
<dc:Bounds x="285" y="661" width="80" height="27" />
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_0je874m_di" bpmnElement="Flow_0je874m">
|
||||||
|
<di:waypoint x="330" y="770" />
|
||||||
|
<di:waypoint x="460" y="770" />
|
||||||
|
<di:waypoint x="460" y="430" />
|
||||||
|
<bpmndi:BPMNLabel>
|
||||||
|
<dc:Bounds x="379" y="736" width="56" height="27" />
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_0z85582_di" bpmnElement="Flow_0z85582">
|
||||||
|
<di:waypoint x="1050" y="390" />
|
||||||
|
<di:waypoint x="1130" y="390" />
|
||||||
|
<di:waypoint x="1130" y="1000" />
|
||||||
|
<bpmndi:BPMNLabel>
|
||||||
|
<dc:Bounds x="1040" y="726" width="81" height="40" />
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_02hwoew_di" bpmnElement="Flow_02hwoew">
|
||||||
|
<di:waypoint x="1450" y="1000" />
|
||||||
|
<di:waypoint x="1450" y="440" />
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_0jg4g6h_di" bpmnElement="Flow_0jg4g6h">
|
||||||
|
<di:waypoint x="1800" y="440" />
|
||||||
|
<di:waypoint x="1800" y="1000" />
|
||||||
|
<bpmndi:BPMNLabel>
|
||||||
|
<dc:Bounds x="1820" y="717" width="60" height="27" />
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_1ejujjc_di" bpmnElement="Flow_1ejujjc">
|
||||||
|
<di:waypoint x="1800" y="360" />
|
||||||
|
<di:waypoint x="1800" y="200" />
|
||||||
|
<bpmndi:BPMNLabel>
|
||||||
|
<dc:Bounds x="1815" y="256" width="69" height="27" />
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_0fihv5s_di" bpmnElement="Flow_0fihv5s">
|
||||||
|
<di:waypoint x="1850" y="1040" />
|
||||||
|
<di:waypoint x="2020" y="1040" />
|
||||||
|
<di:waypoint x="2020" y="440" />
|
||||||
|
<bpmndi:BPMNLabel>
|
||||||
|
<dc:Bounds x="2036" y="724" width="88" height="14" />
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_1gknjes_di" bpmnElement="Flow_1gknjes">
|
||||||
|
<di:waypoint x="2020" y="360" />
|
||||||
|
<di:waypoint x="2020" y="200" />
|
||||||
|
<bpmndi:BPMNLabel>
|
||||||
|
<dc:Bounds x="2029" y="262" width="82" height="27" />
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_1qv7s55_di" bpmnElement="Flow_1qv7s55">
|
||||||
|
<di:waypoint x="440" y="1090" />
|
||||||
|
<di:waypoint x="600" y="1090" />
|
||||||
|
<di:waypoint x="600" y="790" />
|
||||||
|
<bpmndi:BPMNLabel>
|
||||||
|
<dc:Bounds x="486" y="1030" width="68" height="40" />
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_1l0z3bv_di" bpmnElement="Flow_1l0z3bv">
|
||||||
|
<di:waypoint x="650" y="750" />
|
||||||
|
<di:waypoint x="760" y="750" />
|
||||||
|
<di:waypoint x="760" y="970" />
|
||||||
|
<bpmndi:BPMNLabel>
|
||||||
|
<dc:Bounds x="777" y="800" width="87" height="27" />
|
||||||
|
</bpmndi:BPMNLabel>
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
</bpmndi:BPMNPlane>
|
||||||
|
</bpmndi:BPMNDiagram>
|
||||||
|
</bpmn:definitions>
|
BIN
doc/workflow.png
Normal file
BIN
doc/workflow.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 817 KiB |
@@ -1,5 +1,20 @@
|
|||||||
version: "3.6"
|
version: "3.6"
|
||||||
services:
|
services:
|
||||||
|
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
|
||||||
|
hivemq:
|
||||||
|
image: hivemq/hivemq4
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "1883:1883"
|
||||||
tapas-tasks:
|
tapas-tasks:
|
||||||
container_name: tapas-tasks
|
container_name: tapas-tasks
|
||||||
build:
|
build:
|
||||||
@@ -9,54 +24,63 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "8081:8081"
|
- "8081:8081"
|
||||||
- "5005:5005"
|
- "5005:5005"
|
||||||
|
depends_on:
|
||||||
|
- tapas-db
|
||||||
|
# - hivemq
|
||||||
volumes:
|
volumes:
|
||||||
- ./tapas-tasks/src:/opt/app/src
|
- ./tapas-tasks/src:/opt/app/src
|
||||||
- ./tapas-tasks/target:/opt/app/target
|
- ./tapas-tasks/target:/opt/app/target
|
||||||
assignment:
|
roster:
|
||||||
container_name: assignment
|
container_name: roster
|
||||||
build:
|
build:
|
||||||
context: "./assignment"
|
context: "."
|
||||||
dockerfile: "Dockerfile"
|
dockerfile: "./roster/Dockerfile"
|
||||||
target: development
|
target: development
|
||||||
|
depends_on:
|
||||||
|
- tapas-db
|
||||||
|
# - hivemq
|
||||||
ports:
|
ports:
|
||||||
- "8082:8082"
|
- "8082:8082"
|
||||||
- "5006:5005"
|
- "5006:5005"
|
||||||
volumes:
|
volumes:
|
||||||
- ./assignment/src:/opt/app/src
|
- ./roster/src:/opt/app/src
|
||||||
- ./assignment/target:/opt/app/target
|
- ./roster/target:/opt/app/target
|
||||||
executor-pool:
|
executor-pool:
|
||||||
container_name: executor-pool
|
container_name: executor-pool
|
||||||
build:
|
build:
|
||||||
context: "./executor-pool"
|
context: "./executor-pool"
|
||||||
dockerfile: "Dockerfile"
|
dockerfile: "Dockerfile"
|
||||||
target: development
|
target: development
|
||||||
|
depends_on:
|
||||||
|
- tapas-db
|
||||||
|
# - hivemq
|
||||||
ports:
|
ports:
|
||||||
- "8083:8083"
|
- "8083:8083"
|
||||||
- "5007:5005"
|
- "5007:5005"
|
||||||
volumes:
|
volumes:
|
||||||
- ./executor-pool/src:/opt/app/src
|
- ./executor-pool/src:/opt/app/src
|
||||||
- ./executor-pool/target:/opt/app/target
|
- ./executor-pool/target:/opt/app/target
|
||||||
executor1:
|
executor-computation:
|
||||||
container_name: executor1
|
container_name: executor-computation
|
||||||
build:
|
build:
|
||||||
context: "./executor1"
|
context: "."
|
||||||
dockerfile: "Dockerfile"
|
dockerfile: "./executor-computation/Dockerfile"
|
||||||
target: development
|
|
||||||
ports:
|
|
||||||
- "8084:8084"
|
|
||||||
- "5008:5005"
|
|
||||||
volumes:
|
|
||||||
- ./executor1/src:/opt/app/src
|
|
||||||
- ./executor1/target:/opt/app/target
|
|
||||||
executor2:
|
|
||||||
container_name: executor2
|
|
||||||
build:
|
|
||||||
context: "./executor2"
|
|
||||||
dockerfile: "Dockerfile"
|
|
||||||
target: development
|
target: development
|
||||||
ports:
|
ports:
|
||||||
- "8085:8085"
|
- "8085:8085"
|
||||||
|
- "5008:5005"
|
||||||
|
volumes:
|
||||||
|
- ./executor-computation/src:/opt/app/src
|
||||||
|
- ./executor-computation/target:/opt/app/target
|
||||||
|
executor-robot:
|
||||||
|
container_name: executor-robot
|
||||||
|
build:
|
||||||
|
context: "."
|
||||||
|
dockerfile: "./executor-robot/Dockerfile"
|
||||||
|
target: development
|
||||||
|
ports:
|
||||||
|
- "8084:8084"
|
||||||
- "5009:5005"
|
- "5009:5005"
|
||||||
volumes:
|
volumes:
|
||||||
- ./executor2/src:/opt/app/src
|
- ./executor-robot/src:/opt/app/src
|
||||||
- ./executor2/target:/opt/app/target
|
- ./executor-robot/target:/opt/app/target
|
||||||
|
@@ -9,9 +9,9 @@
|
|||||||
<relativePath/> <!-- lookup parent from repository -->
|
<relativePath/> <!-- lookup parent from repository -->
|
||||||
</parent>
|
</parent>
|
||||||
<groupId>ch.unisg</groupId>
|
<groupId>ch.unisg</groupId>
|
||||||
<artifactId>executorBase</artifactId>
|
<artifactId>executor-base</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
<name>executorBase</name>
|
<name>executor-base</name>
|
||||||
<description>Demo project for Spring Boot</description>
|
<description>Demo project for Spring Boot</description>
|
||||||
<properties>
|
<properties>
|
||||||
<java.version>11</java.version>
|
<java.version>11</java.version>
|
||||||
@@ -60,6 +60,27 @@
|
|||||||
<artifactId>json</artifactId>
|
<artifactId>json</artifactId>
|
||||||
<version>20210307</version>
|
<version>20210307</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>ch.unisg</groupId>
|
||||||
|
<artifactId>common</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>de.codecentric</groupId>
|
||||||
|
<artifactId>chaos-monkey-spring-boot</artifactId>
|
||||||
|
<version>2.5.4</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-test</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
@@ -1,13 +0,0 @@
|
|||||||
package ch.unisg.executorBase;
|
|
||||||
|
|
||||||
import org.springframework.boot.SpringApplication;
|
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|
||||||
|
|
||||||
@SpringBootApplication
|
|
||||||
public class Executor1Application {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
SpringApplication.run(Executor1Application.class, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -1,4 +1,6 @@
|
|||||||
package ch.unisg.executorBase.executor.adapter.in.web;
|
package ch.unisg.executorbase.executor.adapter.in.web;
|
||||||
|
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
@@ -7,9 +9,9 @@ import org.springframework.web.bind.annotation.GetMapping;
|
|||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import ch.unisg.executorBase.executor.application.port.in.TaskAvailableCommand;
|
import ch.unisg.executorbase.executor.application.port.in.TaskAvailableCommand;
|
||||||
import ch.unisg.executorBase.executor.application.port.in.TaskAvailableUseCase;
|
import ch.unisg.executorbase.executor.application.port.in.TaskAvailableUseCase;
|
||||||
import ch.unisg.executorBase.executor.domain.ExecutorType;
|
import ch.unisg.executorbase.executor.domain.ExecutorType;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
public class TaskAvailableController {
|
public class TaskAvailableController {
|
||||||
@@ -19,9 +21,17 @@ public class TaskAvailableController {
|
|||||||
this.taskAvailableUseCase = taskAvailableUseCase;
|
this.taskAvailableUseCase = taskAvailableUseCase;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping(path = "/newtask/{taskType}")
|
Logger logger = Logger.getLogger(TaskAvailableController.class.getName());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controller for notification about new events.
|
||||||
|
* @return 200 OK
|
||||||
|
**/
|
||||||
|
@GetMapping(path = "/newtask/{taskType}", consumes = { "application/json" })
|
||||||
public ResponseEntity<String> retrieveTaskFromTaskList(@PathVariable("taskType") String taskType) {
|
public ResponseEntity<String> retrieveTaskFromTaskList(@PathVariable("taskType") String taskType) {
|
||||||
|
|
||||||
|
logger.info("New " + taskType + " available");
|
||||||
|
|
||||||
if (ExecutorType.contains(taskType.toUpperCase())) {
|
if (ExecutorType.contains(taskType.toUpperCase())) {
|
||||||
TaskAvailableCommand command = new TaskAvailableCommand(
|
TaskAvailableCommand command = new TaskAvailableCommand(
|
||||||
ExecutorType.valueOf(taskType.toUpperCase()));
|
ExecutorType.valueOf(taskType.toUpperCase()));
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
package ch.unisg.executorBase.executor.adapter.out.web;
|
package ch.unisg.executorbase.executor.adapter.out.web;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
@@ -10,21 +10,27 @@ import java.util.logging.Logger;
|
|||||||
|
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
import ch.unisg.executorBase.executor.application.port.out.ExecutionFinishedEventPort;
|
import ch.unisg.executorbase.executor.application.port.out.ExecutionFinishedEventPort;
|
||||||
import ch.unisg.executorBase.executor.domain.ExecutionFinishedEvent;
|
import ch.unisg.executorbase.executor.domain.ExecutionFinishedEvent;
|
||||||
|
|
||||||
public class ExecutionFinishedEventAdapter implements ExecutionFinishedEventPort {
|
public class ExecutionFinishedEventAdapter implements ExecutionFinishedEventPort {
|
||||||
|
|
||||||
String server = "http://127.0.0.1:8082";
|
String server = System.getenv("ROSTER_URI") == null ?
|
||||||
|
"http://localhost:8082" : System.getenv("ROSTER_URI");
|
||||||
|
|
||||||
|
|
||||||
Logger logger = Logger.getLogger(ExecutionFinishedEventAdapter.class.getName());
|
Logger logger = Logger.getLogger(ExecutionFinishedEventAdapter.class.getName());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Publishes the execution finished event
|
||||||
|
* @return void
|
||||||
|
**/
|
||||||
@Override
|
@Override
|
||||||
public void publishExecutionFinishedEvent(ExecutionFinishedEvent event) {
|
public void publishExecutionFinishedEvent(ExecutionFinishedEvent event) {
|
||||||
|
|
||||||
String body = new JSONObject()
|
String body = new JSONObject()
|
||||||
.put("taskID", event.getTaskID())
|
.put("taskID", event.getTaskID())
|
||||||
.put("result", event.getResult())
|
.put("outputData", event.getOutputData())
|
||||||
.put("status", event.getStatus())
|
.put("status", event.getStatus())
|
||||||
.toString();
|
.toString();
|
||||||
|
|
||||||
@@ -35,15 +41,17 @@ public class ExecutionFinishedEventAdapter implements ExecutionFinishedEventPort
|
|||||||
.POST(HttpRequest.BodyPublishers.ofString(body))
|
.POST(HttpRequest.BodyPublishers.ofString(body))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
client.send(request, HttpResponse.BodyHandlers.ofString());
|
client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||||
} catch (IOException | InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
||||||
// Restore interrupted state...
|
|
||||||
Thread.currentThread().interrupt();
|
Thread.currentThread().interrupt();
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println("Finish execution event sent with result:" + event.getResult());
|
logger.log(Level.INFO, "Finish execution event sent with result: {0}", event.getOutputData());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
package ch.unisg.executorBase.executor.adapter.out.web;
|
package ch.unisg.executorbase.executor.adapter.out.web;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
@@ -8,12 +8,14 @@ import java.net.http.HttpResponse;
|
|||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.context.annotation.Primary;
|
import org.springframework.context.annotation.Primary;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import ch.unisg.executorBase.executor.application.port.out.GetAssignmentPort;
|
import ch.unisg.common.valueobject.ExecutorURI;
|
||||||
import ch.unisg.executorBase.executor.domain.ExecutorType;
|
import ch.unisg.executorbase.executor.application.port.out.GetAssignmentPort;
|
||||||
import ch.unisg.executorBase.executor.domain.Task;
|
import ch.unisg.executorbase.executor.domain.ExecutorType;
|
||||||
|
import ch.unisg.executorbase.executor.domain.Task;
|
||||||
|
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
@@ -21,17 +23,22 @@ import org.json.JSONObject;
|
|||||||
@Primary
|
@Primary
|
||||||
public class GetAssignmentAdapter implements GetAssignmentPort {
|
public class GetAssignmentAdapter implements GetAssignmentPort {
|
||||||
|
|
||||||
String server = "http://127.0.0.1:8082";
|
String server = System.getenv("ROSTER_URI") == null ?
|
||||||
|
"http://localhost:8082" : System.getenv("ROSTER_URI");
|
||||||
|
|
||||||
Logger logger = Logger.getLogger(GetAssignmentAdapter.class.getName());
|
Logger logger = Logger.getLogger(GetAssignmentAdapter.class.getName());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requests a new task assignment
|
||||||
|
* @return the assigned task
|
||||||
|
* @see Task
|
||||||
|
**/
|
||||||
@Override
|
@Override
|
||||||
public Task getAssignment(ExecutorType executorType, String ip, int port) {
|
public Task getAssignment(ExecutorType executorType, ExecutorURI executorURI) {
|
||||||
|
|
||||||
String body = new JSONObject()
|
String body = new JSONObject()
|
||||||
.put("executorType", executorType)
|
.put("executorType", executorType)
|
||||||
.put("ip", ip)
|
.put("executorURI", executorURI.getValue())
|
||||||
.put("port", port)
|
|
||||||
.toString();
|
.toString();
|
||||||
|
|
||||||
HttpClient client = HttpClient.newHttpClient();
|
HttpClient client = HttpClient.newHttpClient();
|
||||||
@@ -42,17 +49,22 @@ public class GetAssignmentAdapter implements GetAssignmentPort {
|
|||||||
.build();
|
.build();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
logger.info("Sending getAssignment Request");
|
||||||
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||||
|
logger.log(Level.INFO, "getAssignment request result:\n {0}", response.body());
|
||||||
if (response.body().equals("")) {
|
if (response.body().equals("")) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
JSONObject responseBody = new JSONObject(response.body());
|
||||||
|
|
||||||
return new Task(new JSONObject(response.body()).getString("taskID"));
|
String inputData = responseBody.getString("inputData");
|
||||||
|
return new Task(responseBody.getString("taskID"), inputData);
|
||||||
|
|
||||||
} catch (IOException | InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
||||||
// Restore interrupted state...
|
|
||||||
Thread.currentThread().interrupt();
|
Thread.currentThread().interrupt();
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
package ch.unisg.executorBase.executor.adapter.out.web;
|
package ch.unisg.executorbase.executor.adapter.out.web;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
@@ -9,28 +9,34 @@ import java.util.logging.Level;
|
|||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.context.annotation.Primary;
|
import org.springframework.context.annotation.Primary;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import ch.unisg.executorBase.executor.application.port.out.NotifyExecutorPoolPort;
|
import ch.unisg.common.valueobject.ExecutorURI;
|
||||||
import ch.unisg.executorBase.executor.domain.ExecutorType;
|
import ch.unisg.executorbase.executor.application.port.out.NotifyExecutorPoolPort;
|
||||||
|
import ch.unisg.executorbase.executor.domain.ExecutorType;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@Primary
|
@Primary
|
||||||
public class NotifyExecutorPoolAdapter implements NotifyExecutorPoolPort {
|
public class NotifyExecutorPoolAdapter implements NotifyExecutorPoolPort {
|
||||||
|
|
||||||
String server = "http://127.0.0.1:8083";
|
String server = System.getenv("EXECUTOR_POOL_URI") == null ?
|
||||||
|
"http://localhost:8083" : System.getenv("EXECUTOR_POOL_URI");
|
||||||
|
|
||||||
Logger logger = Logger.getLogger(NotifyExecutorPoolAdapter.class.getName());
|
Logger logger = Logger.getLogger(NotifyExecutorPoolAdapter.class.getName());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notifies the executor-pool about the startup of this executor
|
||||||
|
* @return if the notification was successful
|
||||||
|
**/
|
||||||
@Override
|
@Override
|
||||||
public boolean notifyExecutorPool(String ip, int port, ExecutorType executorType) {
|
public boolean notifyExecutorPool(ExecutorURI executorURI, ExecutorType executorType) {
|
||||||
|
|
||||||
String body = new JSONObject()
|
String body = new JSONObject()
|
||||||
.put("executorTaskType", executorType)
|
.put("executorTaskType", executorType)
|
||||||
.put("executorIp", ip)
|
.put("executorUri", executorURI.getValue())
|
||||||
.put("executorPort", Integer.toString(port))
|
|
||||||
.toString();
|
.toString();
|
||||||
|
|
||||||
HttpClient client = HttpClient.newHttpClient();
|
HttpClient client = HttpClient.newHttpClient();
|
||||||
@@ -45,10 +51,11 @@ public class NotifyExecutorPoolAdapter implements NotifyExecutorPoolPort {
|
|||||||
if (response.statusCode() == HttpStatus.CREATED.value()) {
|
if (response.statusCode() == HttpStatus.CREATED.value()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} catch (IOException | InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
||||||
// Restore interrupted state...
|
|
||||||
Thread.currentThread().interrupt();
|
Thread.currentThread().interrupt();
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@@ -1,10 +1,9 @@
|
|||||||
package ch.unisg.executorBase.executor.application.port.in;
|
package ch.unisg.executorbase.executor.application.port.in;
|
||||||
|
|
||||||
import ch.unisg.executorBase.common.SelfValidating;
|
|
||||||
import ch.unisg.executorBase.executor.domain.ExecutorType;
|
|
||||||
|
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
import ch.unisg.common.validation.SelfValidating;
|
||||||
|
import ch.unisg.executorbase.executor.domain.ExecutorType;
|
||||||
import lombok.Value;
|
import lombok.Value;
|
||||||
|
|
||||||
@Value
|
@Value
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
package ch.unisg.executorBase.executor.application.port.in;
|
package ch.unisg.executorbase.executor.application.port.in;
|
||||||
|
|
||||||
public interface TaskAvailableUseCase {
|
public interface TaskAvailableUseCase {
|
||||||
void newTaskAvailable(TaskAvailableCommand command);
|
void newTaskAvailable(TaskAvailableCommand command);
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
package ch.unisg.executorBase.executor.application.port.out;
|
package ch.unisg.executorbase.executor.application.port.out;
|
||||||
|
|
||||||
import ch.unisg.executorBase.executor.domain.ExecutionFinishedEvent;
|
import ch.unisg.executorbase.executor.domain.ExecutionFinishedEvent;
|
||||||
|
|
||||||
public interface ExecutionFinishedEventPort {
|
public interface ExecutionFinishedEventPort {
|
||||||
void publishExecutionFinishedEvent(ExecutionFinishedEvent event);
|
void publishExecutionFinishedEvent(ExecutionFinishedEvent event);
|
||||||
|
@@ -1,8 +1,9 @@
|
|||||||
package ch.unisg.executorBase.executor.application.port.out;
|
package ch.unisg.executorbase.executor.application.port.out;
|
||||||
|
|
||||||
import ch.unisg.executorBase.executor.domain.ExecutorType;
|
import ch.unisg.common.valueobject.ExecutorURI;
|
||||||
import ch.unisg.executorBase.executor.domain.Task;
|
import ch.unisg.executorbase.executor.domain.ExecutorType;
|
||||||
|
import ch.unisg.executorbase.executor.domain.Task;
|
||||||
|
|
||||||
public interface GetAssignmentPort {
|
public interface GetAssignmentPort {
|
||||||
Task getAssignment(ExecutorType executorType, String ip, int port);
|
Task getAssignment(ExecutorType executorType, ExecutorURI executorURI);
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
package ch.unisg.executorBase.executor.application.port.out;
|
package ch.unisg.executorbase.executor.application.port.out;
|
||||||
|
|
||||||
import ch.unisg.executorBase.executor.domain.ExecutorType;
|
import ch.unisg.common.valueobject.ExecutorURI;
|
||||||
|
import ch.unisg.executorbase.executor.domain.ExecutorType;
|
||||||
|
|
||||||
public interface NotifyExecutorPoolPort {
|
public interface NotifyExecutorPoolPort {
|
||||||
boolean notifyExecutorPool(String ip, int port, ExecutorType executorType);
|
boolean notifyExecutorPool(ExecutorURI executorURI, ExecutorType executorType);
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
package ch.unisg.executorBase.executor.application.service;
|
package ch.unisg.executorbase.executor.application.service;
|
||||||
|
|
||||||
import ch.unisg.executorBase.executor.application.port.out.NotifyExecutorPoolPort;
|
import ch.unisg.common.valueobject.ExecutorURI;
|
||||||
import ch.unisg.executorBase.executor.domain.ExecutorType;
|
import ch.unisg.executorbase.executor.application.port.out.NotifyExecutorPoolPort;
|
||||||
|
import ch.unisg.executorbase.executor.domain.ExecutorType;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@@ -9,7 +10,7 @@ public class NotifyExecutorPoolService {
|
|||||||
|
|
||||||
private final NotifyExecutorPoolPort notifyExecutorPoolPort;
|
private final NotifyExecutorPoolPort notifyExecutorPoolPort;
|
||||||
|
|
||||||
public boolean notifyExecutorPool(String ip, int port, ExecutorType executorType) {
|
public boolean notifyExecutorPool(ExecutorURI executorURI, ExecutorType executorType) {
|
||||||
return notifyExecutorPoolPort.notifyExecutorPool(ip, port, executorType);
|
return notifyExecutorPoolPort.notifyExecutorPool(executorURI, executorType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
package ch.unisg.executorBase.executor.application.service;
|
package ch.unisg.executorbase.executor.application.service;
|
||||||
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import ch.unisg.executorBase.executor.application.port.in.TaskAvailableCommand;
|
import ch.unisg.executorbase.executor.application.port.in.TaskAvailableCommand;
|
||||||
import ch.unisg.executorBase.executor.application.port.in.TaskAvailableUseCase;
|
import ch.unisg.executorbase.executor.application.port.in.TaskAvailableUseCase;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
import javax.transaction.Transactional;
|
import javax.transaction.Transactional;
|
||||||
@@ -15,6 +15,6 @@ public class TaskAvailableService implements TaskAvailableUseCase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void newTaskAvailable(TaskAvailableCommand command) {
|
public void newTaskAvailable(TaskAvailableCommand command) {
|
||||||
// Placeholder so spring can create a bean
|
// Placeholder so spring can create a bean, implementation of this function is inside the executors
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
package ch.unisg.executorBase.executor.domain;
|
package ch.unisg.executorbase.executor.domain;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@@ -8,14 +8,14 @@ public class ExecutionFinishedEvent {
|
|||||||
private String taskID;
|
private String taskID;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private String result;
|
private String outputData;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private String status;
|
private String status;
|
||||||
|
|
||||||
public ExecutionFinishedEvent(String taskID, String result, String status) {
|
public ExecutionFinishedEvent(String taskID, String outputData, String status) {
|
||||||
this.taskID = taskID;
|
this.taskID = taskID;
|
||||||
this.result = result;
|
this.outputData = outputData;
|
||||||
this.status = status;
|
this.status = status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,75 +1,93 @@
|
|||||||
package ch.unisg.executorBase.executor.domain;
|
package ch.unisg.executorbase.executor.domain;
|
||||||
|
|
||||||
import ch.unisg.executorBase.executor.application.port.out.ExecutionFinishedEventPort;
|
import java.util.logging.Level;
|
||||||
import ch.unisg.executorBase.executor.application.port.out.GetAssignmentPort;
|
import java.util.logging.Logger;
|
||||||
import ch.unisg.executorBase.executor.application.port.out.NotifyExecutorPoolPort;
|
|
||||||
|
|
||||||
import ch.unisg.executorBase.executor.adapter.out.web.ExecutionFinishedEventAdapter;
|
import ch.unisg.common.valueobject.ExecutorURI;
|
||||||
import ch.unisg.executorBase.executor.adapter.out.web.GetAssignmentAdapter;
|
import ch.unisg.executorbase.executor.adapter.out.web.ExecutionFinishedEventAdapter;
|
||||||
import ch.unisg.executorBase.executor.adapter.out.web.NotifyExecutorPoolAdapter;
|
import ch.unisg.executorbase.executor.adapter.out.web.GetAssignmentAdapter;
|
||||||
import ch.unisg.executorBase.executor.application.service.NotifyExecutorPoolService;
|
import ch.unisg.executorbase.executor.adapter.out.web.NotifyExecutorPoolAdapter;
|
||||||
|
import ch.unisg.executorbase.executor.application.port.out.ExecutionFinishedEventPort;
|
||||||
|
import ch.unisg.executorbase.executor.application.port.out.GetAssignmentPort;
|
||||||
|
import ch.unisg.executorbase.executor.application.port.out.NotifyExecutorPoolPort;
|
||||||
|
import ch.unisg.executorbase.executor.application.service.NotifyExecutorPoolService;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
public abstract class ExecutorBase {
|
public abstract class ExecutorBase {
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private String ip;
|
private ExecutorURI executorURI;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private ExecutorType executorType;
|
private ExecutorType executorType;
|
||||||
|
|
||||||
@Getter
|
|
||||||
private int port;
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private ExecutorStatus status;
|
private ExecutorStatus status;
|
||||||
|
|
||||||
// TODO Violation of the Dependency Inversion Principle?, but we havn't really got a better solutions to send a http request / access a service from a domain model
|
// TODO Violation of the Dependency Inversion Principle?,
|
||||||
// TODO I guess we can somehow autowire this but I don't know why it's not working :D
|
// TODO do this with only services
|
||||||
private final NotifyExecutorPoolPort notifyExecutorPoolPort = new NotifyExecutorPoolAdapter();
|
private final NotifyExecutorPoolPort notifyExecutorPoolPort = new NotifyExecutorPoolAdapter();
|
||||||
private final NotifyExecutorPoolService notifyExecutorPoolService = new NotifyExecutorPoolService(notifyExecutorPoolPort);
|
private final NotifyExecutorPoolService notifyExecutorPoolService = new NotifyExecutorPoolService(notifyExecutorPoolPort);
|
||||||
private final GetAssignmentPort getAssignmentPort = new GetAssignmentAdapter();
|
private final GetAssignmentPort getAssignmentPort = new GetAssignmentAdapter();
|
||||||
private final ExecutionFinishedEventPort executionFinishedEventPort = new ExecutionFinishedEventAdapter();
|
private final ExecutionFinishedEventPort executionFinishedEventPort = new ExecutionFinishedEventAdapter();
|
||||||
|
|
||||||
public ExecutorBase(ExecutorType executorType) {
|
Logger logger = Logger.getLogger(ExecutorBase.class.getName());
|
||||||
System.out.println("Starting Executor");
|
|
||||||
// TODO set this automaticly
|
|
||||||
this.ip = "localhost";
|
|
||||||
this.port = 8084;
|
|
||||||
this.executorType = executorType;
|
|
||||||
|
|
||||||
|
protected ExecutorBase(ExecutorType executorType) {
|
||||||
|
logger.info("Starting Executor");
|
||||||
this.status = ExecutorStatus.STARTING_UP;
|
this.status = ExecutorStatus.STARTING_UP;
|
||||||
if(!notifyExecutorPoolService.notifyExecutorPool(this.ip, this.port, this.executorType)) {
|
this.executorType = executorType;
|
||||||
|
// TODO set this automaticly
|
||||||
|
this.executorURI = new ExecutorURI("http://localhost:8084");
|
||||||
|
// TODO do this in main
|
||||||
|
// Notify executor-pool about existence. If executor-pools response is successfull start with getting an assignment, else shut down executor.
|
||||||
|
if(!notifyExecutorPoolService.notifyExecutorPool(this.executorURI, this.executorType)) {
|
||||||
|
logger.log(Level.WARNING, "Executor could not connect to executor pool! Shuting down!");
|
||||||
System.exit(0);
|
System.exit(0);
|
||||||
} else {
|
} else {
|
||||||
|
logger.info("Executor conntected to executor pool");
|
||||||
this.status = ExecutorStatus.IDLING;
|
this.status = ExecutorStatus.IDLING;
|
||||||
getAssignment();
|
getAssignment();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Requests a new task from the task queue
|
||||||
|
* @return void
|
||||||
|
**/
|
||||||
public void getAssignment() {
|
public void getAssignment() {
|
||||||
Task newTask = getAssignmentPort.getAssignment(this.getExecutorType(), this.getIp(),
|
Task newTask = getAssignmentPort.getAssignment(this.getExecutorType(), this.getExecutorURI());
|
||||||
this.getPort());
|
|
||||||
if (newTask != null) {
|
if (newTask != null) {
|
||||||
|
logger.info("Executor got a new task");
|
||||||
this.executeTask(newTask);
|
this.executeTask(newTask);
|
||||||
} else {
|
} else {
|
||||||
|
logger.info("Executor got no new task");
|
||||||
this.status = ExecutorStatus.IDLING;
|
this.status = ExecutorStatus.IDLING;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start the execution of a task
|
||||||
|
* @return void
|
||||||
|
**/
|
||||||
private void executeTask(Task task) {
|
private void executeTask(Task task) {
|
||||||
System.out.println("Starting execution");
|
logger.info("Starting execution");
|
||||||
this.status = ExecutorStatus.EXECUTING;
|
this.status = ExecutorStatus.EXECUTING;
|
||||||
|
|
||||||
task.setResult(execution());
|
task.setOutputData(execution(task.getInputData()));
|
||||||
|
|
||||||
|
// TODO implement logic if execution was not successful
|
||||||
executionFinishedEventPort.publishExecutionFinishedEvent(
|
executionFinishedEventPort.publishExecutionFinishedEvent(
|
||||||
new ExecutionFinishedEvent(task.getTaskID(), task.getResult(), "SUCCESS"));
|
new ExecutionFinishedEvent(task.getTaskID(), task.getOutputData(), "SUCCESS"));
|
||||||
|
|
||||||
System.out.println("Finish execution");
|
logger.info("Finish execution");
|
||||||
getAssignment();
|
getAssignment();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract String execution();
|
/**
|
||||||
|
* Implementation of the actual execution method of an executor
|
||||||
|
* @return the execution result
|
||||||
|
**/
|
||||||
|
protected abstract String execution(String input);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
package ch.unisg.executorBase.executor.domain;
|
package ch.unisg.executorbase.executor.domain;
|
||||||
|
|
||||||
public enum ExecutorStatus {
|
public enum ExecutorStatus {
|
||||||
STARTING_UP,
|
STARTING_UP, // Executor is starting
|
||||||
EXECUTING,
|
EXECUTING, // Executor is currently executing a task
|
||||||
IDLING,
|
IDLING, // Executor has no tasks left and is waiting for new instructions
|
||||||
}
|
}
|
||||||
|
@@ -1,8 +1,12 @@
|
|||||||
package ch.unisg.executorBase.executor.domain;
|
package ch.unisg.executorbase.executor.domain;
|
||||||
|
|
||||||
public enum ExecutorType {
|
public enum ExecutorType {
|
||||||
ADDITION, ROBOT;
|
ADDITION, ROBOT;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the give executor type exists.
|
||||||
|
* @return Wheter the given executor type exists
|
||||||
|
**/
|
||||||
public static boolean contains(String test) {
|
public static boolean contains(String test) {
|
||||||
|
|
||||||
for (ExecutorType x : ExecutorType.values()) {
|
for (ExecutorType x : ExecutorType.values()) {
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
package ch.unisg.executorBase.executor.domain;
|
package ch.unisg.executorbase.executor.domain;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
@@ -10,10 +10,16 @@ public class Task {
|
|||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
private String result;
|
private String outputData;
|
||||||
|
|
||||||
public Task(String taskID) {
|
// TODO maybe create a value object for inputData so we can make sure it is in the right
|
||||||
|
// format.
|
||||||
|
@Getter
|
||||||
|
private String inputData;
|
||||||
|
|
||||||
|
public Task(String taskID, String inputData) {
|
||||||
this.taskID = taskID;
|
this.taskID = taskID;
|
||||||
|
this.inputData= inputData;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1 +1,15 @@
|
|||||||
server.port=8081
|
server.port=8081
|
||||||
|
roster.url=http://127.0.0.1:8082
|
||||||
|
executor.pool.url=http://127.0.0.1:8083
|
||||||
|
|
||||||
|
spring.profiles.active=chaos-monkey
|
||||||
|
chaos.monkey.enabled=false
|
||||||
|
management.endpoint.chaosmonkey.enabled=true
|
||||||
|
management.endpoint.chaosmonkeyjmx.enabled=true
|
||||||
|
# include specific endpoints
|
||||||
|
management.endpoints.web.exposure.include=health,info,chaosmonkey
|
||||||
|
chaos.monkey.watcher.controller=true
|
||||||
|
chaos.monkey.watcher.restController=true
|
||||||
|
chaos.monkey.watcher.service=true
|
||||||
|
chaos.monkey.watcher.repository=true
|
||||||
|
chaos.monkey.watcher.component=true
|
||||||
|
@@ -1,13 +0,0 @@
|
|||||||
package ch.unisg.executorBase;
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
|
||||||
|
|
||||||
@SpringBootTest
|
|
||||||
class executorBaseApplicationTests {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void contextLoads() {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user