funktor 0.5.0 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +26 -11
  3. data/funktor-testapp/Gemfile.lock +2 -2
  4. data/funktor-testapp/app/services/job_flood.rb +1 -1
  5. data/funktor-testapp/app/workers/single_thread_audit_worker.rb +3 -0
  6. data/funktor-testapp/funktor_config/environment.yml +2 -2
  7. data/funktor-testapp/funktor_config/function_definitions/default_queue_handler.yml +3 -1
  8. data/funktor-testapp/funktor_config/function_definitions/incoming_job_handler.yml +3 -1
  9. data/funktor-testapp/funktor_config/function_definitions/job_activator.yml +1 -2
  10. data/funktor-testapp/funktor_config/function_definitions/low_concurrency_queue_handler.yml +13 -0
  11. data/funktor-testapp/funktor_config/funktor.yml +25 -25
  12. data/funktor-testapp/funktor_config/iam_permissions/{single_thread_queue.yml → low_concurrency_queue.yml} +1 -1
  13. data/funktor-testapp/funktor_config/resources/cloudwatch_dashboard.yml +22 -17
  14. data/funktor-testapp/funktor_config/resources/default_queue.yml +2 -2
  15. data/funktor-testapp/funktor_config/resources/incoming_job_queue.yml +2 -2
  16. data/funktor-testapp/funktor_config/resources/jobs_table.yml +16 -4
  17. data/funktor-testapp/funktor_config/resources/low_concurrency_queue.yml +22 -0
  18. data/funktor-testapp/funktor_init.yml +16 -8
  19. data/funktor-testapp/lambda_event_handlers/{single_thread_queue_handler.rb → low_concurrency_queue_handler.rb} +0 -0
  20. data/funktor-testapp/serverless.yml +4 -3
  21. data/funktor.gemspec +3 -1
  22. data/lib/funktor/activity_tracker.rb +6 -2
  23. data/lib/funktor/cli/templates/funktor_config/function_definitions/incoming_job_handler.yml +3 -1
  24. data/lib/funktor/cli/templates/funktor_config/function_definitions/job_activator.yml +1 -2
  25. data/lib/funktor/cli/templates/funktor_config/function_definitions/work_queue_handler.yml +3 -1
  26. data/lib/funktor/cli/templates/funktor_config/funktor.yml +6 -6
  27. data/lib/funktor/cli/templates/funktor_config/resources/cloudwatch_dashboard.yml +3 -2
  28. data/lib/funktor/cli/templates/funktor_config/resources/incoming_job_queue.yml +2 -2
  29. data/lib/funktor/cli/templates/funktor_config/resources/jobs_table.yml +16 -4
  30. data/lib/funktor/cli/templates/funktor_config/resources/work_queue.yml +2 -2
  31. data/lib/funktor/cli/templates/funktor_init.yml.tt +14 -8
  32. data/lib/funktor/cli/templates/serverless.yml +1 -0
  33. data/lib/funktor/incoming_job_handler.rb +11 -15
  34. data/lib/funktor/job.rb +50 -5
  35. data/lib/funktor/job_activator.rb +52 -26
  36. data/lib/funktor/shard_utils.rb +6 -0
  37. data/lib/funktor/testing.rb +1 -0
  38. data/lib/funktor/version.rb +1 -1
  39. data/lib/funktor/web/application.rb +139 -0
  40. data/lib/funktor/web/views/index.erb +3 -0
  41. data/lib/funktor/web/views/layout.erb +58 -0
  42. data/lib/funktor/web/views/processing.erb +29 -0
  43. data/lib/funktor/web/views/queued.erb +29 -0
  44. data/lib/funktor/web/views/retries.erb +35 -0
  45. data/lib/funktor/web/views/scheduled.erb +26 -0
  46. data/lib/funktor/web/views/stats.erb +9 -0
  47. data/lib/funktor/web/views/table_stats_with_buttons.erb +11 -0
  48. data/lib/funktor/web.rb +1 -0
  49. data/lib/funktor/work_queue_handler.rb +41 -0
  50. data/lib/funktor/worker/funktor_options.rb +3 -1
  51. data/lib/funktor/worker.rb +8 -11
  52. data/lib/funktor.rb +16 -16
  53. metadata +46 -6
  54. data/funktor-testapp/funktor_config/function_definitions/single_thread_queue_handler.yml +0 -11
  55. 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: 6216b831ca8e28aa8d17cb86295d740bf63e95df6ce36ec966f435b6df7f427c
4
- data.tar.gz: 7ade52e2f087fce2b5f61461bcbec625f7a72a82557500e3c2efb98606deadb7
3
+ metadata.gz: 9d35f7173579d1ba71a003f80641e48fb27fa8e55227401d28d24d064207f805
4
+ data.tar.gz: df984a68f3753231077c9a3014690e5b22a25e31fdfa8ef4a78e6f3eb4ef3317
5
5
  SHA512:
6
- metadata.gz: 6a9b429d66bbf60a0bd64a040616eb7743b861466646550f98151dc99320ed882233e131a82d21badcacfc2f7916b05c5b6c52168bb8899c8c81823289b24ab3
7
- data.tar.gz: c594578835a62eda89537a42c55021badcdb1a5e240abb1a493d36dea7e3aed5e4a3cf7126afd2aef75bcae17c7619c0e404268488308c6f5e1974d2e2ffc322
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.5.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.487.0)
26
- aws-sdk-core (3.119.0)
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.3.5)
46
- globalid (0.5.1)
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.2)
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.12.2)
86
- addressable (>= 2.3.6)
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.483.0)
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,
@@ -0,0 +1,3 @@
1
+ class SingleThreadAuditWorker < AuditWorker
2
+ funktor_options queue: :low_concurrency
3
+ end
@@ -7,8 +7,8 @@ FUNKTOR_INCOMING_JOB_QUEUE:
7
7
  Ref: IncomingJobQueue
8
8
  FUNKTOR_DEFAULT_QUEUE:
9
9
  Ref: DefaultQueue
10
- FUNKTOR_SINGLE_THREAD_QUEUE:
11
- Ref: SingleThreadQueue
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.timeout, 900}
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.timeout, 30}
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.timeout, 30}
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
- timeout: 300
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: 10
20
- maximumBatchingWindow: 1
21
- visibilityTimeout: 900
22
- logRetentionInDays: 30
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
- timeout: 300
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: 10
43
- maximumBatchingWindow: 1
44
- visibilityTimeout: 900
45
- logRetentionInDays: 30
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
- timeout: 300
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: 10
69
- maximumBatchingWindow: 1
70
- visibilityTimeout: 900
71
- logRetentionInDays: 30
68
+ batchSize: 1
69
+ maximumBatchingWindow: 0
70
+ visibilityTimeout: 1800
71
+ maxReceiveCount: 20
72
72
 
73
- SingleThreadQueueHandler:
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
- timeout: 300
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: 1
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: 10
93
- maximumBatchingWindow: 1
94
- visibilityTimeout: 900
95
- logRetentionInDays: 30
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
- SingleThreadQueueName: ${self:service}-${self:custom.stage}-single-thread
110
- SingleThreadDeadJobQueueName: ${self:service}-${self:custom.stage}-single-thread-dead
111
- SingleThreadQueueHandlerName: ${self:service}-${self:custom.stage}-SingleThreadQueueHandler
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
@@ -5,4 +5,4 @@ Action:
5
5
  - sqs:SendMessage
6
6
  - sqs:GetQueueAttributes
7
7
  Resource:
8
- - "Fn::GetAtt": [ SingleThreadQueue, Arn ]
8
+ - "Fn::GetAtt": [ LowConcurrencyQueue, Arn ]
@@ -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", "singleThread" ],
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", "singleThread" ],
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# SingleThread Queue\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.SingleThreadQueueName}", { "label": "Messages Per Minute" } ]
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.SingleThreadQueueHandlerName}", "Resource",
460
- "${self:custom.funktor.SingleThreadQueueHandlerName}", { "label": "p10" } ],
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.SingleThreadQueueName}",
485
+ "${self:custom.funktor.LowConcurrencyQueueName}",
482
486
  { "label": "Received" } ],
483
487
  [ ".", "NumberOfMessagesDeleted", ".", ".", { "label": "Handled" } ],
484
488
  [ "AWS/Lambda", "Invocations", "FunctionName",
485
- "${self:custom.funktor.SingleThreadQueueHandlerName}", "Resource",
486
- "${self:custom.funktor.SingleThreadQueueHandlerName}", { "label": "Handler Invocations" } ],
489
+ "${self:custom.funktor.LowConcurrencyQueueHandlerName}", "Resource",
490
+ "${self:custom.funktor.LowConcurrencyQueueHandlerName}", { "label": "Handler Invocations" } ],
487
491
  [ "AWS/SQS", "ApproximateNumberOfMessagesVisible", "QueueName",
488
- "${self:custom.funktor.SingleThreadQueueName}", { "label": "Pending?" } ],
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": "SingleThread Queue (Async jobs go here immediately, scheduled jobs land here in the minute before they're scheduled)",
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.SingleThreadQueueHandlerName}", { "stat": "Minimum" } ],
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": "SingleThread Queue Handler Duration in Milliseconds",
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.SingleThreadQueueHandlerName}", { "id": "errors", "stat": "Sum", "color": "#d13212" } ],
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": "SingleThread Queue Handler Error count and success rate (%)",
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.SingleThreadQueueHandlerName}", { "stat": "Maximum" } ]
562
+ "${self:custom.funktor.LowConcurrencyQueueHandlerName}", { "stat": "Maximum" } ]
559
563
  ],
560
564
  "region": "us-east-1",
561
- "title": "SingleThread Queue Handler Concurrent executions",
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",