@crawlee/core 3.0.0-alpha.0 → 3.0.0-alpha.11

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 (159) hide show
  1. package/autoscaling/autoscaled_pool.d.ts +296 -0
  2. package/autoscaling/autoscaled_pool.d.ts.map +1 -0
  3. package/autoscaling/autoscaled_pool.js +673 -0
  4. package/autoscaling/autoscaled_pool.js.map +1 -0
  5. package/autoscaling/index.d.ts +4 -0
  6. package/autoscaling/index.d.ts.map +1 -0
  7. package/autoscaling/index.js +7 -0
  8. package/autoscaling/index.js.map +1 -0
  9. package/autoscaling/snapshotter.d.ts +193 -0
  10. package/autoscaling/snapshotter.d.ts.map +1 -0
  11. package/autoscaling/snapshotter.js +377 -0
  12. package/autoscaling/snapshotter.js.map +1 -0
  13. package/autoscaling/system_status.d.ts +181 -0
  14. package/autoscaling/system_status.d.ts.map +1 -0
  15. package/autoscaling/system_status.js +194 -0
  16. package/autoscaling/system_status.js.map +1 -0
  17. package/cache_container.d.ts +18 -0
  18. package/cache_container.d.ts.map +1 -0
  19. package/cache_container.js +42 -0
  20. package/cache_container.js.map +1 -0
  21. package/configuration.d.ts +150 -0
  22. package/configuration.d.ts.map +1 -0
  23. package/configuration.js +284 -0
  24. package/configuration.js.map +1 -0
  25. package/constants.d.ts +3 -0
  26. package/constants.d.ts.map +1 -0
  27. package/constants.js +6 -0
  28. package/constants.js.map +1 -0
  29. package/crawlers/crawler_commons.d.ts +25 -0
  30. package/crawlers/crawler_commons.d.ts.map +1 -0
  31. package/crawlers/crawler_commons.js +3 -0
  32. package/crawlers/crawler_commons.js.map +1 -0
  33. package/crawlers/crawler_extension.d.ts +11 -0
  34. package/crawlers/crawler_extension.d.ts.map +1 -0
  35. package/crawlers/crawler_extension.js +30 -0
  36. package/crawlers/crawler_extension.js.map +1 -0
  37. package/crawlers/crawler_utils.d.ts +25 -0
  38. package/crawlers/crawler_utils.d.ts.map +1 -0
  39. package/crawlers/crawler_utils.js +72 -0
  40. package/crawlers/crawler_utils.js.map +1 -0
  41. package/crawlers/index.d.ts +5 -0
  42. package/crawlers/index.d.ts.map +1 -0
  43. package/crawlers/index.js +8 -0
  44. package/crawlers/index.js.map +1 -0
  45. package/crawlers/statistics.d.ts +147 -0
  46. package/crawlers/statistics.d.ts.map +1 -0
  47. package/crawlers/statistics.js +360 -0
  48. package/crawlers/statistics.js.map +1 -0
  49. package/enqueue_links/enqueue_links.d.ts +151 -0
  50. package/enqueue_links/enqueue_links.d.ts.map +1 -0
  51. package/enqueue_links/enqueue_links.js +152 -0
  52. package/enqueue_links/enqueue_links.js.map +1 -0
  53. package/enqueue_links/index.d.ts +3 -0
  54. package/enqueue_links/index.d.ts.map +1 -0
  55. package/enqueue_links/index.js +6 -0
  56. package/enqueue_links/index.js.map +1 -0
  57. package/enqueue_links/shared.d.ts +60 -0
  58. package/enqueue_links/shared.d.ts.map +1 -0
  59. package/enqueue_links/shared.js +148 -0
  60. package/enqueue_links/shared.js.map +1 -0
  61. package/errors.d.ts +8 -0
  62. package/errors.d.ts.map +1 -0
  63. package/errors.js +12 -0
  64. package/errors.js.map +1 -0
  65. package/events/event_manager.d.ts +41 -0
  66. package/events/event_manager.d.ts.map +1 -0
  67. package/events/event_manager.js +103 -0
  68. package/events/event_manager.js.map +1 -0
  69. package/events/index.d.ts +3 -0
  70. package/events/index.d.ts.map +1 -0
  71. package/events/index.js +6 -0
  72. package/events/index.js.map +1 -0
  73. package/events/local_event_manager.d.ts +32 -0
  74. package/events/local_event_manager.d.ts.map +1 -0
  75. package/events/local_event_manager.js +114 -0
  76. package/events/local_event_manager.js.map +1 -0
  77. package/index.d.ts +14 -0
  78. package/index.d.ts.map +1 -0
  79. package/index.js +17 -0
  80. package/index.js.map +1 -0
  81. package/index.mjs +64 -0
  82. package/log.d.ts +3 -0
  83. package/log.d.ts.map +1 -0
  84. package/log.js +12 -0
  85. package/log.js.map +1 -0
  86. package/package.json +4 -8
  87. package/proxy_configuration.d.ts +181 -0
  88. package/proxy_configuration.d.ts.map +1 -0
  89. package/proxy_configuration.js +209 -0
  90. package/proxy_configuration.js.map +1 -0
  91. package/request.d.ts +174 -0
  92. package/request.d.ts.map +1 -0
  93. package/request.js +270 -0
  94. package/request.js.map +1 -0
  95. package/serialization.d.ts +33 -0
  96. package/serialization.d.ts.map +1 -0
  97. package/serialization.js +146 -0
  98. package/serialization.js.map +1 -0
  99. package/session_pool/errors.d.ts +8 -0
  100. package/session_pool/errors.d.ts.map +1 -0
  101. package/session_pool/errors.js +20 -0
  102. package/session_pool/errors.js.map +1 -0
  103. package/session_pool/events.d.ts +3 -0
  104. package/session_pool/events.d.ts.map +1 -0
  105. package/session_pool/events.js +6 -0
  106. package/session_pool/events.js.map +1 -0
  107. package/session_pool/index.d.ts +6 -0
  108. package/session_pool/index.d.ts.map +1 -0
  109. package/session_pool/index.js +9 -0
  110. package/session_pool/index.js.map +1 -0
  111. package/session_pool/session.d.ts +212 -0
  112. package/session_pool/session.d.ts.map +1 -0
  113. package/session_pool/session.js +360 -0
  114. package/session_pool/session.js.map +1 -0
  115. package/session_pool/session_pool.d.ts +222 -0
  116. package/session_pool/session_pool.d.ts.map +1 -0
  117. package/session_pool/session_pool.js +389 -0
  118. package/session_pool/session_pool.js.map +1 -0
  119. package/session_pool/session_utils.d.ts +9 -0
  120. package/session_pool/session_utils.d.ts.map +1 -0
  121. package/session_pool/session_utils.js +19 -0
  122. package/session_pool/session_utils.js.map +1 -0
  123. package/storages/dataset.d.ts +358 -0
  124. package/storages/dataset.d.ts.map +1 -0
  125. package/storages/dataset.js +415 -0
  126. package/storages/dataset.js.map +1 -0
  127. package/storages/index.d.ts +7 -0
  128. package/storages/index.d.ts.map +1 -0
  129. package/storages/index.js +11 -0
  130. package/storages/index.js.map +1 -0
  131. package/storages/key_value_store.d.ts +242 -0
  132. package/storages/key_value_store.d.ts.map +1 -0
  133. package/storages/key_value_store.js +320 -0
  134. package/storages/key_value_store.js.map +1 -0
  135. package/storages/request_list.d.ts +469 -0
  136. package/storages/request_list.d.ts.map +1 -0
  137. package/storages/request_list.js +724 -0
  138. package/storages/request_list.js.map +1 -0
  139. package/storages/request_queue.d.ts +315 -0
  140. package/storages/request_queue.d.ts.map +1 -0
  141. package/storages/request_queue.js +742 -0
  142. package/storages/request_queue.js.map +1 -0
  143. package/storages/storage.d.ts +260 -0
  144. package/storages/storage.d.ts.map +1 -0
  145. package/storages/storage.js +3 -0
  146. package/storages/storage.js.map +1 -0
  147. package/storages/storage_manager.d.ts +40 -0
  148. package/storages/storage_manager.d.ts.map +1 -0
  149. package/storages/storage_manager.js +119 -0
  150. package/storages/storage_manager.js.map +1 -0
  151. package/tsconfig.build.tsbuildinfo +1 -0
  152. package/typedefs.d.ts +12 -0
  153. package/typedefs.d.ts.map +1 -0
  154. package/typedefs.js +15 -0
  155. package/typedefs.js.map +1 -0
  156. package/validators.d.ts +21 -0
  157. package/validators.d.ts.map +1 -0
  158. package/validators.js +26 -0
  159. package/validators.js.map +1 -0
@@ -0,0 +1,296 @@
1
+ import { Log } from '@apify/log';
2
+ import { Configuration } from '../configuration';
3
+ import { SnapshotterOptions } from './snapshotter';
4
+ import { SystemInfo, SystemStatusOptions } from './system_status';
5
+ export interface AutoscaledPoolOptions {
6
+ /**
7
+ * A function that performs an asynchronous resource-intensive task.
8
+ * The function must either be labeled `async` or return a promise.
9
+ */
10
+ runTaskFunction?: () => Promise<unknown>;
11
+ /**
12
+ * A function that indicates whether `runTaskFunction` should be called.
13
+ * This function is called every time there is free capacity for a new task and it should
14
+ * indicate whether it should start a new task or not by resolving to either `true` or `false`.
15
+ * Besides its obvious use, it is also useful for task throttling to save resources.
16
+ */
17
+ isTaskReadyFunction?: () => Promise<boolean>;
18
+ /**
19
+ * A function that is called only when there are no tasks to be processed.
20
+ * If it resolves to `true` then the pool's run finishes. Being called only
21
+ * when there are no tasks being processed means that as long as `isTaskReadyFunction()`
22
+ * keeps resolving to `true`, `isFinishedFunction()` will never be called.
23
+ * To abort a run, use the {@link AutoscaledPool.abort} method.
24
+ */
25
+ isFinishedFunction?: () => Promise<boolean>;
26
+ /**
27
+ * The minimum number of tasks running in parallel.
28
+ *
29
+ * *WARNING:* If you set this value too high with respect to the available system memory and CPU, your code might run extremely slow or crash.
30
+ * If you're not sure, just keep the default value and the concurrency will scale up automatically.
31
+ * @default 1
32
+ */
33
+ minConcurrency?: number;
34
+ /**
35
+ * The maximum number of tasks running in parallel.
36
+ * @default 1000
37
+ */
38
+ maxConcurrency?: number;
39
+ /**
40
+ * The desired number of tasks that should be running parallel on the start of the pool,
41
+ * if there is a large enough supply of them.
42
+ * By default, it is `minConcurrency`.
43
+ */
44
+ desiredConcurrency?: number;
45
+ /**
46
+ * Minimum level of desired concurrency to reach before more scaling up is allowed.
47
+ * @default 0.95
48
+ */
49
+ desiredConcurrencyRatio?: number;
50
+ /**
51
+ * Defines the fractional amount of desired concurrency to be added with each scaling up.
52
+ * The minimum scaling step is one.
53
+ * @default 0.05
54
+ */
55
+ scaleUpStepRatio?: number;
56
+ /**
57
+ * Defines the amount of desired concurrency to be subtracted with each scaling down.
58
+ * The minimum scaling step is one.
59
+ * @default 0.05
60
+ */
61
+ scaleDownStepRatio?: number;
62
+ /**
63
+ * Indicates how often the pool should call the `runTaskFunction()` to start a new task, in seconds.
64
+ * This has no effect on starting new tasks immediately after a task completes.
65
+ * @default 0.5
66
+ */
67
+ maybeRunIntervalSecs?: number;
68
+ /**
69
+ * Specifies a period in which the instance logs its state, in seconds.
70
+ * Set to `null` to disable periodic logging.
71
+ * @default 60
72
+ */
73
+ loggingIntervalSecs?: number | null;
74
+ /**
75
+ * Defines in seconds how often the pool should attempt to adjust the desired concurrency
76
+ * based on the latest system status. Setting it lower than 1 might have a severe impact on performance.
77
+ * We suggest using a value from 5 to 20.
78
+ * @default 10
79
+ */
80
+ autoscaleIntervalSecs?: number;
81
+ /**
82
+ * Timeout in which the `runTaskFunction` needs to finish, given in seconds.
83
+ * @default 0
84
+ */
85
+ taskTimeoutSecs?: number;
86
+ /**
87
+ * Options to be passed down to the {@link Snapshotter} constructor. This is useful for fine-tuning
88
+ * the snapshot intervals and history.
89
+ */
90
+ snapshotterOptions?: SnapshotterOptions;
91
+ /**
92
+ * Options to be passed down to the {@link SystemStatus} constructor. This is useful for fine-tuning
93
+ * the system status reports. If a custom snapshotter is set in the options, it will be used
94
+ * by the pool.
95
+ */
96
+ systemStatusOptions?: SystemStatusOptions;
97
+ /**
98
+ * The maximum number of tasks per minute the pool can run.
99
+ * By default, this is set to `Infinity`, but you can pass any positive, non-zero integer.
100
+ */
101
+ maxTasksPerMinute?: number;
102
+ log?: Log;
103
+ }
104
+ /**
105
+ * Manages a pool of asynchronous resource-intensive tasks that are executed in parallel.
106
+ * The pool only starts new tasks if there is enough free CPU and memory available
107
+ * and the Javascript event loop is not blocked.
108
+ *
109
+ * The information about the CPU and memory usage is obtained by the {@link Snapshotter} class,
110
+ * which makes regular snapshots of system resources that may be either local
111
+ * or from the Apify cloud infrastructure in case the process is running on the Apify platform.
112
+ * Meaningful data gathered from these snapshots is provided to `AutoscaledPool` by the {@link SystemStatus} class.
113
+ *
114
+ * Before running the pool, you need to implement the following three functions:
115
+ * {@link AutoscaledPoolOptions.runTaskFunction},
116
+ * {@link AutoscaledPoolOptions.isTaskReadyFunction} and
117
+ * {@link AutoscaledPoolOptions.isFinishedFunction}.
118
+ *
119
+ * The auto-scaled pool is started by calling the {@link AutoscaledPool.run} function.
120
+ * The pool periodically queries the {@link AutoscaledPoolOptions.isTaskReadyFunction} function
121
+ * for more tasks, managing optimal concurrency, until the function resolves to `false`. The pool then queries
122
+ * the {@link AutoscaledPoolOptions.isFinishedFunction}. If it resolves to `true`, the run finishes after all running tasks complete.
123
+ * If it resolves to `false`, it assumes there will be more tasks available later and keeps periodically querying for tasks.
124
+ * If any of the tasks throws then the {@link AutoscaledPool.run} function rejects the promise with an error.
125
+ *
126
+ * The pool evaluates whether it should start a new task every time one of the tasks finishes
127
+ * and also in the interval set by the `options.maybeRunIntervalSecs` parameter.
128
+ *
129
+ * **Example usage:**
130
+ *
131
+ * ```javascript
132
+ * const pool = new AutoscaledPool({
133
+ * maxConcurrency: 50,
134
+ * runTaskFunction: async () => {
135
+ * // Run some resource-intensive asynchronous operation here.
136
+ * },
137
+ * isTaskReadyFunction: async () => {
138
+ * // Tell the pool whether more tasks are ready to be processed.
139
+ * // Return true or false
140
+ * },
141
+ * isFinishedFunction: async () => {
142
+ * // Tell the pool whether it should finish
143
+ * // or wait for more tasks to become available.
144
+ * // Return true or false
145
+ * }
146
+ * });
147
+ *
148
+ * await pool.run();
149
+ * ```
150
+ * @category Scaling
151
+ */
152
+ export declare class AutoscaledPool {
153
+ private readonly config;
154
+ private readonly log;
155
+ private readonly desiredConcurrencyRatio;
156
+ private readonly scaleUpStepRatio;
157
+ private readonly scaleDownStepRatio;
158
+ private readonly maybeRunIntervalMillis;
159
+ private readonly loggingIntervalMillis;
160
+ private readonly autoscaleIntervalMillis;
161
+ private readonly taskTimeoutMillis;
162
+ private readonly runTaskFunction;
163
+ private readonly isFinishedFunction;
164
+ private readonly isTaskReadyFunction;
165
+ private readonly maxTasksPerMinute;
166
+ private _minConcurrency;
167
+ private _maxConcurrency;
168
+ private _desiredConcurrency;
169
+ private _currentConcurrency;
170
+ private isStopped;
171
+ private lastLoggingTime;
172
+ private resolve;
173
+ private reject;
174
+ private snapshotter;
175
+ private systemStatus;
176
+ private poolPromise;
177
+ private autoscaleInterval;
178
+ private maybeRunInterval;
179
+ private queryingIsTaskReady;
180
+ private queryingIsFinished;
181
+ private tasksDonePerSecondInterval?;
182
+ private _tasksPerMinute;
183
+ constructor(options: AutoscaledPoolOptions, config?: Configuration);
184
+ /**
185
+ * Gets the minimum number of tasks running in parallel.
186
+ */
187
+ get minConcurrency(): number;
188
+ /**
189
+ * Sets the minimum number of tasks running in parallel.
190
+ *
191
+ * *WARNING:* If you set this value too high with respect to the available system memory and CPU, your code might run extremely slow or crash.
192
+ * If you're not sure, just keep the default value and the concurrency will scale up automatically.
193
+ */
194
+ set minConcurrency(value: number);
195
+ /**
196
+ * Gets the maximum number of tasks running in parallel.
197
+ */
198
+ get maxConcurrency(): number;
199
+ /**
200
+ * Sets the maximum number of tasks running in parallel.
201
+ */
202
+ set maxConcurrency(value: number);
203
+ /**
204
+ * Gets the desired concurrency for the pool,
205
+ * which is an estimated number of parallel tasks that the system can currently support.
206
+ */
207
+ get desiredConcurrency(): number;
208
+ /**
209
+ * Sets the desired concurrency for the pool, i.e. the number of tasks that should be running
210
+ * in parallel if there's large enough supply of tasks.
211
+ */
212
+ set desiredConcurrency(value: number);
213
+ /**
214
+ * Gets the the number of parallel tasks currently running in the pool.
215
+ */
216
+ get currentConcurrency(): number;
217
+ /**
218
+ * Runs the auto-scaled pool. Returns a promise that gets resolved or rejected once
219
+ * all the tasks are finished or one of them fails.
220
+ */
221
+ run(): Promise<void>;
222
+ /**
223
+ * Aborts the run of the auto-scaled pool and destroys it. The promise returned from
224
+ * the {@link AutoscaledPool.run} function will immediately resolve, no more new tasks
225
+ * will be spawned and all running tasks will be left in their current state.
226
+ *
227
+ * Due to the nature of the tasks, auto-scaled pool cannot reliably guarantee abortion
228
+ * of all the running tasks, therefore, no abortion is attempted and some of the tasks
229
+ * may finish, while others may not. Essentially, auto-scaled pool doesn't care about
230
+ * their state after the invocation of `.abort()`, but that does not mean that some
231
+ * parts of their asynchronous chains of commands will not execute.
232
+ */
233
+ abort(): Promise<void>;
234
+ /**
235
+ * Prevents the auto-scaled pool from starting new tasks, but allows the running ones to finish
236
+ * (unlike abort, which terminates them). Used together with {@link AutoscaledPool.resume}
237
+ *
238
+ * The function's promise will resolve once all running tasks have completed and the pool
239
+ * is effectively idle. If the `timeoutSecs` argument is provided, the promise will reject
240
+ * with a timeout error after the `timeoutSecs` seconds.
241
+ *
242
+ * The promise returned from the {@link AutoscaledPool.run} function will not resolve
243
+ * when `.pause()` is invoked (unlike abort, which resolves it).
244
+ */
245
+ pause(timeoutSecs?: number): Promise<void>;
246
+ /**
247
+ * Resumes the operation of the autoscaled-pool by allowing more tasks to be run.
248
+ * Used together with {@link AutoscaledPool.pause}
249
+ *
250
+ * Tasks will automatically start running again in `options.maybeRunIntervalSecs`.
251
+ */
252
+ resume(): void;
253
+ /**
254
+ * Starts a new task
255
+ * if the number of running tasks (current concurrency) is lower than desired concurrency
256
+ * and the system is not currently overloaded
257
+ * and this.isTaskReadyFunction() returns true.
258
+ *
259
+ * It doesn't allow multiple concurrent runs of this method.
260
+ */
261
+ protected _maybeRunTask(intervalCallback?: () => void): Promise<void>;
262
+ /**
263
+ * Gets called every autoScaleIntervalSecs and evaluates the current system status.
264
+ * If the system IS NOT overloaded and the settings allow it, it scales up.
265
+ * If the system IS overloaded and the settings allow it, it scales down.
266
+ */
267
+ protected _autoscale(intervalCallback: () => void): void;
268
+ /**
269
+ * Scales the pool up by increasing
270
+ * the desired concurrency by the scaleUpStepRatio.
271
+ *
272
+ * @param systemStatus for logging
273
+ */
274
+ protected _scaleUp(systemStatus: SystemInfo): void;
275
+ /**
276
+ * Scales the pool down by decreasing
277
+ * the desired concurrency by the scaleDownStepRatio.
278
+ *
279
+ * @param systemStatus for logging
280
+ */
281
+ protected _scaleDown(systemStatus: SystemInfo): void;
282
+ /**
283
+ * If there are no running tasks and this.isFinishedFunction() returns true then closes
284
+ * the pool and resolves the pool's promise returned by the run() method.
285
+ *
286
+ * It doesn't allow multiple concurrent runs of this method.
287
+ */
288
+ protected _maybeFinish(): Promise<void>;
289
+ /**
290
+ * Cleans up resources.
291
+ */
292
+ protected _destroy(): Promise<void>;
293
+ protected _incrementTasksDonePerSecond(intervalCallback: () => void): void;
294
+ protected get _isOverMaxRequestLimit(): boolean;
295
+ }
296
+ //# sourceMappingURL=autoscaled_pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoscaled_pool.d.ts","sourceRoot":"","sources":["../../src/autoscaling/autoscaled_pool.ts"],"names":[],"mappings":"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"}