funktor 0.5.0 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +26 -11
- data/funktor-testapp/Gemfile.lock +2 -2
- data/funktor-testapp/app/services/job_flood.rb +1 -1
- data/funktor-testapp/app/workers/single_thread_audit_worker.rb +3 -0
- data/funktor-testapp/funktor_config/environment.yml +2 -2
- data/funktor-testapp/funktor_config/function_definitions/default_queue_handler.yml +3 -1
- data/funktor-testapp/funktor_config/function_definitions/incoming_job_handler.yml +3 -1
- data/funktor-testapp/funktor_config/function_definitions/job_activator.yml +1 -2
- data/funktor-testapp/funktor_config/function_definitions/low_concurrency_queue_handler.yml +13 -0
- data/funktor-testapp/funktor_config/funktor.yml +25 -25
- data/funktor-testapp/funktor_config/iam_permissions/{single_thread_queue.yml → low_concurrency_queue.yml} +1 -1
- data/funktor-testapp/funktor_config/resources/cloudwatch_dashboard.yml +22 -17
- data/funktor-testapp/funktor_config/resources/default_queue.yml +2 -2
- data/funktor-testapp/funktor_config/resources/incoming_job_queue.yml +2 -2
- data/funktor-testapp/funktor_config/resources/jobs_table.yml +16 -4
- data/funktor-testapp/funktor_config/resources/low_concurrency_queue.yml +22 -0
- data/funktor-testapp/funktor_init.yml +16 -8
- data/funktor-testapp/lambda_event_handlers/{single_thread_queue_handler.rb → low_concurrency_queue_handler.rb} +0 -0
- data/funktor-testapp/serverless.yml +4 -3
- data/funktor.gemspec +3 -1
- data/lib/funktor/activity_tracker.rb +6 -2
- data/lib/funktor/cli/templates/funktor_config/function_definitions/incoming_job_handler.yml +3 -1
- data/lib/funktor/cli/templates/funktor_config/function_definitions/job_activator.yml +1 -2
- data/lib/funktor/cli/templates/funktor_config/function_definitions/work_queue_handler.yml +3 -1
- data/lib/funktor/cli/templates/funktor_config/funktor.yml +6 -6
- data/lib/funktor/cli/templates/funktor_config/resources/cloudwatch_dashboard.yml +3 -2
- data/lib/funktor/cli/templates/funktor_config/resources/incoming_job_queue.yml +2 -2
- data/lib/funktor/cli/templates/funktor_config/resources/jobs_table.yml +16 -4
- data/lib/funktor/cli/templates/funktor_config/resources/work_queue.yml +2 -2
- data/lib/funktor/cli/templates/funktor_init.yml.tt +14 -8
- data/lib/funktor/cli/templates/serverless.yml +1 -0
- data/lib/funktor/incoming_job_handler.rb +11 -15
- data/lib/funktor/job.rb +50 -5
- data/lib/funktor/job_activator.rb +52 -26
- data/lib/funktor/shard_utils.rb +6 -0
- data/lib/funktor/testing.rb +1 -0
- data/lib/funktor/version.rb +1 -1
- data/lib/funktor/web/application.rb +139 -0
- data/lib/funktor/web/views/index.erb +3 -0
- data/lib/funktor/web/views/layout.erb +58 -0
- data/lib/funktor/web/views/processing.erb +29 -0
- data/lib/funktor/web/views/queued.erb +29 -0
- data/lib/funktor/web/views/retries.erb +35 -0
- data/lib/funktor/web/views/scheduled.erb +26 -0
- data/lib/funktor/web/views/stats.erb +9 -0
- data/lib/funktor/web/views/table_stats_with_buttons.erb +11 -0
- data/lib/funktor/web.rb +1 -0
- data/lib/funktor/work_queue_handler.rb +41 -0
- data/lib/funktor/worker/funktor_options.rb +3 -1
- data/lib/funktor/worker.rb +8 -11
- data/lib/funktor.rb +16 -16
- metadata +46 -6
- data/funktor-testapp/funktor_config/function_definitions/single_thread_queue_handler.yml +0 -11
- data/funktor-testapp/funktor_config/resources/single_thread_queue.yml +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d35f7173579d1ba71a003f80641e48fb27fa8e55227401d28d24d064207f805
|
4
|
+
data.tar.gz: df984a68f3753231077c9a3014690e5b22a25e31fdfa8ef4a78e6f3eb4ef3317
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13eb0dfc1050f99eb8358d34a8666a8fd90a45e931b22fff0dc932cb9e9df3e63534f4d7d660126fa977931d46f3e572232cdf2f0bdc17468a3893c99f2959ef
|
7
|
+
data.tar.gz: a0ce634530cb573099c989b64fc2fd33a85fd04480d1bffa6b3af6c3bebea01cc93fea9f2c4da5cbd62ff29180cac82f5b939aedbd30e25955b80ba7edf0ba37
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
funktor (0.
|
4
|
+
funktor (0.6.3)
|
5
5
|
activesupport
|
6
6
|
aws-sdk-dynamodb (~> 1.62)
|
7
7
|
aws-sdk-sqs (~> 1.37)
|
@@ -10,10 +10,10 @@ PATH
|
|
10
10
|
GEM
|
11
11
|
remote: https://rubygems.org/
|
12
12
|
specs:
|
13
|
-
activejob (6.1.4)
|
14
|
-
activesupport (= 6.1.4)
|
13
|
+
activejob (6.1.4.1)
|
14
|
+
activesupport (= 6.1.4.1)
|
15
15
|
globalid (>= 0.3.6)
|
16
|
-
activesupport (6.1.4)
|
16
|
+
activesupport (6.1.4.1)
|
17
17
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
18
18
|
i18n (>= 1.6, < 2)
|
19
19
|
minitest (>= 5.1)
|
@@ -22,8 +22,8 @@ GEM
|
|
22
22
|
addressable (2.8.0)
|
23
23
|
public_suffix (>= 2.0.2, < 5.0)
|
24
24
|
aws-eventstream (1.1.1)
|
25
|
-
aws-partitions (1.
|
26
|
-
aws-sdk-core (3.119.
|
25
|
+
aws-partitions (1.491.0)
|
26
|
+
aws-sdk-core (3.119.1)
|
27
27
|
aws-eventstream (~> 1, >= 1.0.2)
|
28
28
|
aws-partitions (~> 1, >= 1.239.0)
|
29
29
|
aws-sigv4 (~> 1.1)
|
@@ -42,8 +42,8 @@ GEM
|
|
42
42
|
crack (0.4.5)
|
43
43
|
rexml
|
44
44
|
diff-lcs (1.4.4)
|
45
|
-
docile (1.
|
46
|
-
globalid (0.5.
|
45
|
+
docile (1.4.0)
|
46
|
+
globalid (0.5.2)
|
47
47
|
activesupport (>= 5.0)
|
48
48
|
hashdiff (1.0.1)
|
49
49
|
i18n (1.8.10)
|
@@ -51,6 +51,8 @@ GEM
|
|
51
51
|
jmespath (1.4.0)
|
52
52
|
method_source (1.0.0)
|
53
53
|
minitest (5.14.4)
|
54
|
+
mustermann (1.1.1)
|
55
|
+
ruby2_keywords (~> 0.0.1)
|
54
56
|
pry (0.13.1)
|
55
57
|
coderay (~> 1.1)
|
56
58
|
method_source (~> 1.0)
|
@@ -58,6 +60,9 @@ GEM
|
|
58
60
|
byebug (~> 11.0)
|
59
61
|
pry (~> 0.13.0)
|
60
62
|
public_suffix (4.0.6)
|
63
|
+
rack (2.2.3)
|
64
|
+
rack-protection (2.1.0)
|
65
|
+
rack
|
61
66
|
rake (12.3.3)
|
62
67
|
rexml (3.2.5)
|
63
68
|
rspec (3.10.0)
|
@@ -73,17 +78,25 @@ GEM
|
|
73
78
|
diff-lcs (>= 1.2.0, < 2.0)
|
74
79
|
rspec-support (~> 3.10.0)
|
75
80
|
rspec-support (3.10.2)
|
81
|
+
ruby2_keywords (0.0.5)
|
76
82
|
simplecov (0.21.2)
|
77
83
|
docile (~> 1.1)
|
78
84
|
simplecov-html (~> 0.11)
|
79
85
|
simplecov_json_formatter (~> 0.1)
|
80
86
|
simplecov-html (0.12.3)
|
81
|
-
simplecov_json_formatter (0.1.
|
87
|
+
simplecov_json_formatter (0.1.3)
|
88
|
+
sinatra (2.1.0)
|
89
|
+
mustermann (~> 1.0)
|
90
|
+
rack (~> 2.2)
|
91
|
+
rack-protection (= 2.1.0)
|
92
|
+
tilt (~> 2.0)
|
82
93
|
thor (1.1.0)
|
94
|
+
tilt (2.0.10)
|
95
|
+
timecop (0.9.4)
|
83
96
|
tzinfo (2.0.4)
|
84
97
|
concurrent-ruby (~> 1.0)
|
85
|
-
webmock (3.
|
86
|
-
addressable (>= 2.
|
98
|
+
webmock (3.14.0)
|
99
|
+
addressable (>= 2.8.0)
|
87
100
|
crack (>= 0.3.2)
|
88
101
|
hashdiff (>= 0.4.0, < 2.0.0)
|
89
102
|
zeitwerk (2.4.2)
|
@@ -98,6 +111,8 @@ DEPENDENCIES
|
|
98
111
|
rake (~> 12.0)
|
99
112
|
rspec (~> 3.0)
|
100
113
|
simplecov
|
114
|
+
sinatra
|
115
|
+
timecop
|
101
116
|
webmock
|
102
117
|
|
103
118
|
BUNDLED WITH
|
@@ -1,14 +1,14 @@
|
|
1
1
|
GEM
|
2
2
|
remote: https://rubygems.org/
|
3
3
|
specs:
|
4
|
-
activesupport (6.1.4)
|
4
|
+
activesupport (6.1.4.1)
|
5
5
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
6
6
|
i18n (>= 1.6, < 2)
|
7
7
|
minitest (>= 5.1)
|
8
8
|
tzinfo (~> 2.0)
|
9
9
|
zeitwerk (~> 2.3)
|
10
10
|
aws-eventstream (1.1.1)
|
11
|
-
aws-partitions (1.
|
11
|
+
aws-partitions (1.488.0)
|
12
12
|
aws-sdk-core (3.119.0)
|
13
13
|
aws-eventstream (~> 1, >= 1.0.2)
|
14
14
|
aws-partitions (~> 1, >= 1.239.0)
|
@@ -23,7 +23,7 @@ class JobFlood
|
|
23
23
|
job_target_time = Time.now + (minute * 60) + rand(60)
|
24
24
|
job_sleep = rand(0.0..max_job_length_in_seconds.to_f)
|
25
25
|
puts job_target_time
|
26
|
-
AuditWorker.perform_at(job_target_time, {
|
26
|
+
[AuditWorker, AuditWorker, SingleThreadAuditWorker].sample.perform_at(job_target_time, {
|
27
27
|
mode: 'later',
|
28
28
|
message: 'msg: from random JobFlood - ' + SecureRandom.hex,
|
29
29
|
target_time: job_target_time,
|
@@ -7,8 +7,8 @@ FUNKTOR_INCOMING_JOB_QUEUE:
|
|
7
7
|
Ref: IncomingJobQueue
|
8
8
|
FUNKTOR_DEFAULT_QUEUE:
|
9
9
|
Ref: DefaultQueue
|
10
|
-
|
11
|
-
Ref:
|
10
|
+
FUNKTOR_LOW_CONCURRENCY_QUEUE:
|
11
|
+
Ref: LowConcurrencyQueue
|
12
12
|
FUNKTOR_ACTIVITY_TABLE:
|
13
13
|
Ref: ActivityTable
|
14
14
|
FUNKTOR_JOBS_TABLE:
|
@@ -1,10 +1,12 @@
|
|
1
1
|
handler: lambda_event_handlers/default_queue_handler.call
|
2
|
-
timeout: ${self:custom.funktor.DefaultQueueHandler.
|
2
|
+
timeout: ${self:custom.funktor.DefaultQueueHandler.functionTimeout, 900}
|
3
3
|
reservedConcurrency: ${self:custom.funktor.DefaultQueueHandler.reservedConcurrency, null}
|
4
4
|
provisionedConcurrency: ${self:custom.funktor.DefaultQueueHandler.provisionedConcurrency, null}
|
5
5
|
memorySize: ${self:custom.funktor.DefaultQueueHandler.memorySize, 256}
|
6
6
|
events:
|
7
7
|
- sqs:
|
8
|
+
batchSize: ${self:custom.funktor.DefaultQueueHandler.batchSize, 1}
|
9
|
+
maximumBatchingWindow: ${self:custom.funktor.DefaultQueueHandler.maximumBatchingWindow, 0}
|
8
10
|
arn:
|
9
11
|
Fn::GetAtt:
|
10
12
|
- DefaultQueue
|
@@ -1,10 +1,12 @@
|
|
1
1
|
handler: lambda_event_handlers/incoming_job_handler.call
|
2
|
-
timeout: ${self:custom.funktor.IncomingJobHandler.
|
2
|
+
timeout: ${self:custom.funktor.IncomingJobHandler.functionTimeout, 30}
|
3
3
|
reservedConcurrency: ${self:custom.funktor.IncomingJobHandler.reservedConcurrency, null}
|
4
4
|
provisionedConcurrency: ${self:custom.funktor.IncomingJobHandler.provisionedConcurrency, null}
|
5
5
|
memorySize: ${self:custom.funktor.IncomingJobHandler.memorySize, 256}
|
6
6
|
events:
|
7
7
|
- sqs:
|
8
|
+
batchSize: ${self:custom.funktor.IncomingJobHandler.batchSize, 1}
|
9
|
+
maximumBatchingWindow: ${self:custom.funktor.IncomingJobHandler.maximumBatchingWindow, 0}
|
8
10
|
arn:
|
9
11
|
Fn::GetAtt:
|
10
12
|
- IncomingJobQueue
|
@@ -1,8 +1,7 @@
|
|
1
1
|
handler: lambda_event_handlers/job_activator.call
|
2
|
-
timeout: ${self:custom.funktor.JobActivator.
|
2
|
+
timeout: ${self:custom.funktor.JobActivator.functionTimeout, 30}
|
3
3
|
reservedConcurrency: ${self:custom.funktor.JobActivator.reservedConcurrency, null}
|
4
4
|
provisionedConcurrency: ${self:custom.funktor.JobActivator.provisionedConcurrency, null}
|
5
5
|
memorySize: ${self:custom.funktor.JobActivator.memorySize, 256}
|
6
|
-
#reservedConcurrency: 1
|
7
6
|
events:
|
8
7
|
- schedule: rate(1 minute)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
handler: lambda_event_handlers/low_concurrency_queue_handler.call
|
2
|
+
timeout: ${self:custom.funktor.LowConcurrencyQueueHandler.functionTimeout, 900}
|
3
|
+
reservedConcurrency: ${self:custom.funktor.LowConcurrencyQueueHandler.reservedConcurrency, null}
|
4
|
+
provisionedConcurrency: ${self:custom.funktor.LowConcurrencyQueueHandler.provisionedConcurrency, null}
|
5
|
+
memorySize: ${self:custom.funktor.LowConcurrencyQueueHandler.memorySize, 256}
|
6
|
+
events:
|
7
|
+
- sqs:
|
8
|
+
batchSize: ${self:custom.funktor.LowConcurrencyQueueHandler.batchSize, 1}
|
9
|
+
maximumBatchingWindow: ${self:custom.funktor.LowConcurrencyQueueHandler.maximumBatchingWindow, 0}
|
10
|
+
arn:
|
11
|
+
Fn::GetAtt:
|
12
|
+
- LowConcurrencyQueue
|
13
|
+
- Arn
|
@@ -3,7 +3,7 @@ IncomingJobHandler:
|
|
3
3
|
# to a handler at one time, so you'll want this to be at least 10x the maximum time you
|
4
4
|
# expect to spend for one message. The incoming job handler usually will be pretty fast,
|
5
5
|
# but we default to a high number here to allow for the times when things go weird.
|
6
|
-
|
6
|
+
functionTimeout: 300
|
7
7
|
# reservedConcurrency represents the maximum number of concurrent executions.
|
8
8
|
# For the incoming job handler you probably don't want to limit it because you
|
9
9
|
# want to get things onto work queues as quickly as possible.
|
@@ -16,17 +16,17 @@ IncomingJobHandler:
|
|
16
16
|
# For the incoming jobs handler you probably don't need this to be too large,
|
17
17
|
# but if you're seeing large delays at this stage it might help to bump it up.
|
18
18
|
memorySize: 256
|
19
|
-
batchSize:
|
20
|
-
maximumBatchingWindow:
|
21
|
-
visibilityTimeout:
|
22
|
-
|
19
|
+
batchSize: 1
|
20
|
+
maximumBatchingWindow: 0
|
21
|
+
visibilityTimeout: 1800
|
22
|
+
maxReceiveCount: 20
|
23
23
|
|
24
24
|
JobActivator:
|
25
25
|
# timeout is how long the handler can possibly run. Up to 10 messages may be delivered
|
26
26
|
# to a handler at one time, so you'll want this to be at least 10x the maximum time you
|
27
27
|
# expect to spend for one message. The job activator usually will be pretty fast,
|
28
28
|
# but we default to a high number here to allow for the times when things go weird.
|
29
|
-
|
29
|
+
functionTimeout: 300
|
30
30
|
# reservedConcurrency represents the maximum number of concurrent executions.
|
31
31
|
# For the job activator you probably don't want to limit it because you
|
32
32
|
# want to get things onto work queues as quickly as possible when they're ready.
|
@@ -39,10 +39,10 @@ JobActivator:
|
|
39
39
|
# For the job activator you probably don't need this to be too large,
|
40
40
|
# but if you're seeing large delays at this stage it might help to bump it up.
|
41
41
|
memorySize: 256
|
42
|
-
batchSize:
|
43
|
-
maximumBatchingWindow:
|
44
|
-
visibilityTimeout:
|
45
|
-
|
42
|
+
batchSize: 1
|
43
|
+
maximumBatchingWindow: 0
|
44
|
+
visibilityTimeout: 1800
|
45
|
+
maxReceiveCount: 20
|
46
46
|
|
47
47
|
|
48
48
|
|
@@ -51,7 +51,7 @@ DefaultQueueHandler:
|
|
51
51
|
# to a handler at one time, so you'll want this to be at least 10x the maximum time you
|
52
52
|
# expect to spend for one message. The active job handler may be slow if your jobs are
|
53
53
|
# doing a lot of work, so we default to the maximum here.
|
54
|
-
|
54
|
+
functionTimeout: 300
|
55
55
|
# reservedConcurrency represents the maximum number of concurrent executions.
|
56
56
|
# For the active job handler you may want to limit it if you have resource limitations
|
57
57
|
# like database connections that you need to avoid exhausting.
|
@@ -65,21 +65,21 @@ DefaultQueueHandler:
|
|
65
65
|
# required to actually do your jobs. You can choose an even higher number to increase
|
66
66
|
# the available CPU to make the jobs run faster.
|
67
67
|
memorySize: 256
|
68
|
-
batchSize:
|
69
|
-
maximumBatchingWindow:
|
70
|
-
visibilityTimeout:
|
71
|
-
|
68
|
+
batchSize: 1
|
69
|
+
maximumBatchingWindow: 0
|
70
|
+
visibilityTimeout: 1800
|
71
|
+
maxReceiveCount: 20
|
72
72
|
|
73
|
-
|
73
|
+
LowConcurrencyQueueHandler:
|
74
74
|
# timeout is how long the handler can possibly run. Up to 10 messages may be delivered
|
75
75
|
# to a handler at one time, so you'll want this to be at least 10x the maximum time you
|
76
76
|
# expect to spend for one message. The active job handler may be slow if your jobs are
|
77
77
|
# doing a lot of work, so we default to the maximum here.
|
78
|
-
|
78
|
+
functionTimeout: 300
|
79
79
|
# reservedConcurrency represents the maximum number of concurrent executions.
|
80
80
|
# For the active job handler you may want to limit it if you have resource limitations
|
81
81
|
# like database connections that you need to avoid exhausting.
|
82
|
-
reservedConcurrency:
|
82
|
+
reservedConcurrency: 10
|
83
83
|
# provisionedConcurrency represents the number of lambda functions that will always
|
84
84
|
# be available. For the active job handler you probably don't need to set this
|
85
85
|
# unless your jobs are very bursty AND very time sensitive.
|
@@ -89,10 +89,10 @@ SingleThreadQueueHandler:
|
|
89
89
|
# required to actually do your jobs. You can choose an even higher number to increase
|
90
90
|
# the available CPU to make the jobs run faster.
|
91
91
|
memorySize: 256
|
92
|
-
batchSize:
|
93
|
-
maximumBatchingWindow:
|
94
|
-
visibilityTimeout:
|
95
|
-
|
92
|
+
batchSize: 1
|
93
|
+
maximumBatchingWindow: 0
|
94
|
+
visibilityTimeout: 1800
|
95
|
+
maxReceiveCount: 20
|
96
96
|
|
97
97
|
|
98
98
|
|
@@ -106,9 +106,9 @@ DashboardName: ${self:service}-${self:custom.stage}-dashboard
|
|
106
106
|
DefaultQueueName: ${self:service}-${self:custom.stage}-default
|
107
107
|
DefaultDeadJobQueueName: ${self:service}-${self:custom.stage}-default-dead
|
108
108
|
DefaultQueueHandlerName: ${self:service}-${self:custom.stage}-DefaultQueueHandler
|
109
|
-
|
110
|
-
|
111
|
-
|
109
|
+
LowConcurrencyQueueName: ${self:service}-${self:custom.stage}-low-concurrency
|
110
|
+
LowConcurrencyDeadJobQueueName: ${self:service}-${self:custom.stage}-low-concurrency-dead
|
111
|
+
LowConcurrencyQueueHandlerName: ${self:service}-${self:custom.stage}-LowConcurrencyQueueHandler
|
112
112
|
JobsTableName: ${self:service}-${self:custom.stage}-jobs
|
113
113
|
ActivityTableName: ${self:service}-${self:custom.stage}-activity
|
114
114
|
JobActivatorName: ${self:service}-${self:custom.stage}-JobActivator
|
@@ -34,6 +34,8 @@ Resources:
|
|
34
34
|
[ "funktor-testapp", "Duration", "WorkerClassName", "GreetingsWorker" ],
|
35
35
|
[ "...", { "stat": "p99" } ],
|
36
36
|
[ "funktor-testapp", "Duration", "WorkerClassName", "HelloWorker" ],
|
37
|
+
[ "...", { "stat": "p99" } ],
|
38
|
+
[ "funktor-testapp", "Duration", "WorkerClassName", "SingleThreadAuditWorker" ],
|
37
39
|
[ "...", { "stat": "p99" } ]
|
38
40
|
],
|
39
41
|
"view": "timeSeries",
|
@@ -58,6 +60,8 @@ Resources:
|
|
58
60
|
[ "funktor-testapp", "processed", "WorkerClassName", "GreetingsWorker" ],
|
59
61
|
[ ".", "failed", ".", "." ],
|
60
62
|
[ "funktor-testapp", "processed", "WorkerClassName", "HelloWorker" ],
|
63
|
+
[ ".", "failed", ".", "." ],
|
64
|
+
[ "funktor-testapp", "processed", "WorkerClassName", "SingleThreadAuditWorker" ],
|
61
65
|
[ ".", "failed", ".", "." ]
|
62
66
|
],
|
63
67
|
"view": "timeSeries",
|
@@ -79,7 +83,7 @@ Resources:
|
|
79
83
|
"metrics": [
|
80
84
|
[ "funktor-testapp", "Duration", "Queue", "default" ],
|
81
85
|
[ "...", { "stat": "p99" } ],
|
82
|
-
[ "funktor-testapp", "Duration", "Queue", "
|
86
|
+
[ "funktor-testapp", "Duration", "Queue", "low_concurrency" ],
|
83
87
|
[ "...", { "stat": "p99" } ]
|
84
88
|
],
|
85
89
|
"view": "timeSeries",
|
@@ -100,7 +104,7 @@ Resources:
|
|
100
104
|
"metrics": [
|
101
105
|
[ "funktor-testapp", "processed", "Queue", "default" ],
|
102
106
|
[ ".", "failed", ".", "." ],
|
103
|
-
[ "funktor-testapp", "processed", "Queue", "
|
107
|
+
[ "funktor-testapp", "processed", "Queue", "low_concurrency" ],
|
104
108
|
[ ".", "failed", ".", "." ]
|
105
109
|
],
|
106
110
|
"view": "timeSeries",
|
@@ -426,7 +430,7 @@ Resources:
|
|
426
430
|
"x": 0,
|
427
431
|
"type": "text",
|
428
432
|
"properties": {
|
429
|
-
"markdown": "\n#
|
433
|
+
"markdown": "\n# LowConcurrency Queue\n"
|
430
434
|
}
|
431
435
|
},
|
432
436
|
{
|
@@ -438,7 +442,7 @@ Resources:
|
|
438
442
|
"properties": {
|
439
443
|
"metrics": [
|
440
444
|
[ "AWS/SQS", "NumberOfMessagesReceived", "QueueName",
|
441
|
-
"${self:custom.funktor.
|
445
|
+
"${self:custom.funktor.LowConcurrencyQueueName}", { "label": "Messages Per Minute" } ]
|
442
446
|
],
|
443
447
|
"view": "singleValue",
|
444
448
|
"region": "us-east-1",
|
@@ -456,8 +460,8 @@ Resources:
|
|
456
460
|
"properties": {
|
457
461
|
"metrics": [
|
458
462
|
[ "AWS/Lambda", "Duration", "FunctionName",
|
459
|
-
"${self:custom.funktor.
|
460
|
-
"${self:custom.funktor.
|
463
|
+
"${self:custom.funktor.LowConcurrencyQueueHandlerName}", "Resource",
|
464
|
+
"${self:custom.funktor.LowConcurrencyQueueHandlerName}", { "label": "p10" } ],
|
461
465
|
[ "...", { "label": "p50", "stat": "p50" } ],
|
462
466
|
[ "...", { "label": "p99", "stat": "p99" } ],
|
463
467
|
[ "...", { "label": "Average", "stat": "Average" } ]
|
@@ -478,14 +482,14 @@ Resources:
|
|
478
482
|
"properties": {
|
479
483
|
"metrics": [
|
480
484
|
[ "AWS/SQS", "NumberOfMessagesReceived", "QueueName",
|
481
|
-
"${self:custom.funktor.
|
485
|
+
"${self:custom.funktor.LowConcurrencyQueueName}",
|
482
486
|
{ "label": "Received" } ],
|
483
487
|
[ ".", "NumberOfMessagesDeleted", ".", ".", { "label": "Handled" } ],
|
484
488
|
[ "AWS/Lambda", "Invocations", "FunctionName",
|
485
|
-
"${self:custom.funktor.
|
486
|
-
"${self:custom.funktor.
|
489
|
+
"${self:custom.funktor.LowConcurrencyQueueHandlerName}", "Resource",
|
490
|
+
"${self:custom.funktor.LowConcurrencyQueueHandlerName}", { "label": "Handler Invocations" } ],
|
487
491
|
[ "AWS/SQS", "ApproximateNumberOfMessagesVisible", "QueueName",
|
488
|
-
"${self:custom.funktor.
|
492
|
+
"${self:custom.funktor.LowConcurrencyQueueName}", { "label": "Pending?" } ],
|
489
493
|
[ ".", "ApproximateNumberOfMessagesNotVisible", ".", ".", { "label": "Backlog?" } ],
|
490
494
|
[ ".", "NumberOfMessagesSent", ".", ".", { "label": "Sent" } ],
|
491
495
|
[ ".", "ApproximateNumberOfMessagesDelayed", ".", ".", { "label": "Delayed" } ]
|
@@ -493,7 +497,7 @@ Resources:
|
|
493
497
|
"view": "timeSeries",
|
494
498
|
"stacked": false,
|
495
499
|
"region": "us-east-1",
|
496
|
-
"title": "
|
500
|
+
"title": "LowConcurrency Queue (Async jobs go here immediately, scheduled jobs land here in the minute before they're scheduled)",
|
497
501
|
"period": 60,
|
498
502
|
"stat": "Sum",
|
499
503
|
"liveData": true
|
@@ -508,12 +512,12 @@ Resources:
|
|
508
512
|
"properties": {
|
509
513
|
"period": 60,
|
510
514
|
"metrics": [
|
511
|
-
[ "AWS/Lambda", "Duration", "FunctionName", "${self:custom.funktor.
|
515
|
+
[ "AWS/Lambda", "Duration", "FunctionName", "${self:custom.funktor.LowConcurrencyQueueHandlerName}", { "stat": "Minimum" } ],
|
512
516
|
[ "...", { "stat": "Average" } ],
|
513
517
|
[ "...", { "stat": "Maximum" } ]
|
514
518
|
],
|
515
519
|
"region": "us-east-1",
|
516
|
-
"title": "
|
520
|
+
"title": "LowConcurrency Queue Handler Duration in Milliseconds",
|
517
521
|
"view": "timeSeries",
|
518
522
|
"stacked": false,
|
519
523
|
"liveData": true
|
@@ -529,12 +533,12 @@ Resources:
|
|
529
533
|
"period": 60,
|
530
534
|
"metrics": [
|
531
535
|
[ "AWS/Lambda", "Errors", "FunctionName",
|
532
|
-
"${self:custom.funktor.
|
536
|
+
"${self:custom.funktor.LowConcurrencyQueueHandlerName}", { "id": "errors", "stat": "Sum", "color": "#d13212" } ],
|
533
537
|
[ ".", "Invocations", ".", ".", { "id": "invocations", "stat": "Sum", "visible": false } ],
|
534
538
|
[ { "expression": "100 - 100 * errors / MAX([errors, invocations])", "label": "Success rate (%)", "id": "availability", "yAxis": "right", "region": "us-east-1" } ]
|
535
539
|
],
|
536
540
|
"region": "us-east-1",
|
537
|
-
"title": "
|
541
|
+
"title": "LowConcurrency Queue Handler Error count and success rate (%)",
|
538
542
|
"yAxis": {
|
539
543
|
"right": {
|
540
544
|
"max": 100
|
@@ -555,10 +559,10 @@ Resources:
|
|
555
559
|
"period": 60,
|
556
560
|
"metrics": [
|
557
561
|
[ "AWS/Lambda", "ConcurrentExecutions", "FunctionName",
|
558
|
-
"${self:custom.funktor.
|
562
|
+
"${self:custom.funktor.LowConcurrencyQueueHandlerName}", { "stat": "Maximum" } ]
|
559
563
|
],
|
560
564
|
"region": "us-east-1",
|
561
|
-
"title": "
|
565
|
+
"title": "LowConcurrency Queue Handler Concurrent executions",
|
562
566
|
"view": "timeSeries",
|
563
567
|
"stacked": false,
|
564
568
|
"liveData": true
|
@@ -765,6 +769,7 @@ Resources:
|
|
765
769
|
[ "...", "Query" ],
|
766
770
|
[ ".", "ThrottledRequests", ".", ".", ".", "PutItem", { "yAxis": "right", "visible": false } ],
|
767
771
|
[ ".", "SuccessfulRequestLatency", ".", ".", ".", "DeleteItem" ],
|
772
|
+
[ ".", "SuccessfulRequestLatency", ".", ".", ".", "UpdateItem" ],
|
768
773
|
[ ".", "ThrottledRequests", ".", ".", ".", ".", { "yAxis": "right", "visible": false } ]
|
769
774
|
],
|
770
775
|
"view": "timeSeries",
|