@cumulus/ingest 11.1.5 → 12.0.2
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.
- package/lock.d.ts +12 -1
- package/lock.d.ts.map +1 -1
- package/lock.js +18 -5
- package/lock.js.map +1 -1
- package/package.json +14 -14
- package/src/lock.ts +20 -5
- package/src/url-path-template.js +5 -19
- package/tsconfig.tsbuildinfo +1 -1
- package/url-path-template.d.ts.map +1 -1
- package/url-path-template.js +5 -17
- package/url-path-template.js.map +1 -1
package/lock.d.ts
CHANGED
|
@@ -20,8 +20,19 @@ export declare function checkOldLocks(bucket: string, locks?: Lock[]): Promise<n
|
|
|
20
20
|
**/
|
|
21
21
|
export declare function countLock(bucket: string, providerName: string): Promise<number>;
|
|
22
22
|
export declare function removeLock(bucket: string, providerName: string, filename: string): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
*
|
|
25
|
+
* @param {string} bucket
|
|
26
|
+
* @param {Object} provider
|
|
27
|
+
* @param {string} provider.id
|
|
28
|
+
* @param {number} provider.globalConnectionLimit
|
|
29
|
+
* @param {string} filename
|
|
30
|
+
* @param {number} counter
|
|
31
|
+
* @param {string} ACL
|
|
32
|
+
* @returns {Promise<boolean>}
|
|
33
|
+
*/
|
|
23
34
|
export declare function proceed(bucket: string, provider: {
|
|
24
35
|
id: string;
|
|
25
36
|
globalConnectionLimit?: number;
|
|
26
|
-
}, filename: string, counter
|
|
37
|
+
}, filename: string, counter: number | undefined, ACL: string): Promise<boolean>;
|
|
27
38
|
//# sourceMappingURL=lock.d.ts.map
|
package/lock.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["src/lock.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,IAAI;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,IAAI,CAAA;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,IAAI,EAAO,GACjB,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAOjB;
|
|
1
|
+
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["src/lock.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,IAAI;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,IAAI,CAAA;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,IAAI,EAAO,GACjB,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAiBD,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE;IACR,EAAE,EAAE,MAAM,CAAC;IACX,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC/B,EACD,QAAQ,EAAE,MAAM,EAChB,OAAO,oBAAI,EACX,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,OAAO,CAAC,CAwBlB"}
|
package/lock.js
CHANGED
|
@@ -71,18 +71,31 @@ async function countLock(bucket, providerName) {
|
|
|
71
71
|
return checkOldLocks(bucket, locks);
|
|
72
72
|
}
|
|
73
73
|
exports.countLock = countLock;
|
|
74
|
-
async function addLock(bucket, providerName, filename) {
|
|
74
|
+
async function addLock(bucket, providerName, filename, ACL) {
|
|
75
|
+
const key = `${lockPrefix}/${providerName}/${filename}`;
|
|
75
76
|
await (0, S3_1.s3PutObject)({
|
|
76
77
|
Bucket: bucket,
|
|
77
|
-
Key:
|
|
78
|
+
Key: key,
|
|
78
79
|
Body: '',
|
|
80
|
+
ACL,
|
|
79
81
|
});
|
|
80
82
|
}
|
|
81
83
|
async function removeLock(bucket, providerName, filename) {
|
|
82
84
|
await (0, S3_1.deleteS3Object)(bucket, `${lockPrefix}/${providerName}/${filename}`);
|
|
83
85
|
}
|
|
84
86
|
exports.removeLock = removeLock;
|
|
85
|
-
|
|
87
|
+
/**
|
|
88
|
+
*
|
|
89
|
+
* @param {string} bucket
|
|
90
|
+
* @param {Object} provider
|
|
91
|
+
* @param {string} provider.id
|
|
92
|
+
* @param {number} provider.globalConnectionLimit
|
|
93
|
+
* @param {string} filename
|
|
94
|
+
* @param {number} counter
|
|
95
|
+
* @param {string} ACL
|
|
96
|
+
* @returns {Promise<boolean>}
|
|
97
|
+
*/
|
|
98
|
+
async function proceed(bucket, provider, filename, counter = 0, ACL) {
|
|
86
99
|
if (provider.globalConnectionLimit === undefined) {
|
|
87
100
|
return true;
|
|
88
101
|
}
|
|
@@ -96,10 +109,10 @@ async function proceed(bucket, provider, filename, counter = 0) {
|
|
|
96
109
|
log.debug(`The "${provider.id}" provider's globalConnectionLimit of "${provider.globalConnectionLimit}" has been reached.`);
|
|
97
110
|
// wait for 5 second and try again
|
|
98
111
|
await (0, delay_1.default)(5000);
|
|
99
|
-
return proceed(bucket, provider, filename, counter + 1);
|
|
112
|
+
return proceed(bucket, provider, filename, counter + 1, ACL);
|
|
100
113
|
}
|
|
101
114
|
// add the lock
|
|
102
|
-
await addLock(bucket, provider.id, filename);
|
|
115
|
+
await addLock(bucket, provider.id, filename, ACL);
|
|
103
116
|
return true;
|
|
104
117
|
}
|
|
105
118
|
exports.proceed = proceed;
|
package/lock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.js","sourceRoot":"","sources":["src/lock.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,+CAIgC;AAChC,yDAA2C;AAE3C,MAAM,UAAU,GAAG,MAAM,CAAC;AAO1B;;;;;;;GAOG;AACI,KAAK,UAAU,aAAa,CACjC,MAAc,EACd,QAAgB,EAAE;IAElB,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAEpD,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAC/B,CAAC,IAAI,EAAE,EAAE;QACP,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,MAAM,IAAI,SAAS,CAAC,kCAAkC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC/E;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,cAAc,CAAC;IACtD,CAAC,CACF,CAAC;IAEF,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb,MAAM,IAAI,SAAS,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACtE;QACD,OAAO,IAAA,mBAAc,EAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC,CAAC;IAEJ,OAAO,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;AAC5C,CAAC;AAvBD,sCAuBC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,SAAS,CAC7B,MAAc,EACd,YAAoB;IAEpB,MAAM,KAAK,GAAG,MAAM,IAAA,oBAAe,EAAC;QAClC,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,GAAG,UAAU,IAAI,YAAY,EAAE;KACxC,CAAC,CAAC;IAEH,OAAO,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;AAVD,8BAUC;AAED,KAAK,UAAU,OAAO,CACpB,MAAc,EACd,YAAoB,EACpB,QAAgB;
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["src/lock.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cumulus/ingest",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "12.0.2",
|
|
4
4
|
"description": "Ingest utilities",
|
|
5
5
|
"engines": {
|
|
6
|
-
"node": ">=
|
|
6
|
+
"node": ">=14.19.1"
|
|
7
7
|
},
|
|
8
8
|
"scripts": {
|
|
9
9
|
"build": "rm -rf dist && mkdir dist && npm run prepare",
|
|
@@ -38,13 +38,13 @@
|
|
|
38
38
|
"author": "Cumulus Authors",
|
|
39
39
|
"license": "Apache-2.0",
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@cumulus/aws-client": "
|
|
42
|
-
"@cumulus/common": "
|
|
43
|
-
"@cumulus/db": "
|
|
44
|
-
"@cumulus/errors": "
|
|
45
|
-
"@cumulus/logger": "
|
|
46
|
-
"@cumulus/message": "
|
|
47
|
-
"@cumulus/sftp-client": "
|
|
41
|
+
"@cumulus/aws-client": "12.0.2",
|
|
42
|
+
"@cumulus/common": "12.0.2",
|
|
43
|
+
"@cumulus/db": "12.0.2",
|
|
44
|
+
"@cumulus/errors": "12.0.2",
|
|
45
|
+
"@cumulus/logger": "12.0.2",
|
|
46
|
+
"@cumulus/message": "12.0.2",
|
|
47
|
+
"@cumulus/sftp-client": "12.0.2",
|
|
48
48
|
"aws-sdk": "^2.585.0",
|
|
49
49
|
"cksum": "^1.3.0",
|
|
50
50
|
"delay": "^4.3.0",
|
|
@@ -61,10 +61,10 @@
|
|
|
61
61
|
"tough-cookie": "^4.0.0"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
|
-
"@cumulus/checksum": "
|
|
65
|
-
"@cumulus/cmrjs": "
|
|
66
|
-
"@cumulus/test-data": "
|
|
67
|
-
"@cumulus/types": "
|
|
64
|
+
"@cumulus/checksum": "12.0.2",
|
|
65
|
+
"@cumulus/cmrjs": "12.0.2",
|
|
66
|
+
"@cumulus/test-data": "12.0.2",
|
|
67
|
+
"@cumulus/types": "12.0.2"
|
|
68
68
|
},
|
|
69
|
-
"gitHead": "
|
|
69
|
+
"gitHead": "a35accbc4444be2e2b09bd30f3626a0a3780ef22"
|
|
70
70
|
}
|
package/src/lock.ts
CHANGED
|
@@ -68,12 +68,15 @@ export async function countLock(
|
|
|
68
68
|
async function addLock(
|
|
69
69
|
bucket: string,
|
|
70
70
|
providerName: string,
|
|
71
|
-
filename: string
|
|
71
|
+
filename: string,
|
|
72
|
+
ACL?: string
|
|
72
73
|
): Promise<void> {
|
|
74
|
+
const key = `${lockPrefix}/${providerName}/${filename}`;
|
|
73
75
|
await s3PutObject({
|
|
74
76
|
Bucket: bucket,
|
|
75
|
-
Key:
|
|
77
|
+
Key: key,
|
|
76
78
|
Body: '',
|
|
79
|
+
ACL,
|
|
77
80
|
});
|
|
78
81
|
}
|
|
79
82
|
|
|
@@ -88,6 +91,17 @@ export async function removeLock(
|
|
|
88
91
|
);
|
|
89
92
|
}
|
|
90
93
|
|
|
94
|
+
/**
|
|
95
|
+
*
|
|
96
|
+
* @param {string} bucket
|
|
97
|
+
* @param {Object} provider
|
|
98
|
+
* @param {string} provider.id
|
|
99
|
+
* @param {number} provider.globalConnectionLimit
|
|
100
|
+
* @param {string} filename
|
|
101
|
+
* @param {number} counter
|
|
102
|
+
* @param {string} ACL
|
|
103
|
+
* @returns {Promise<boolean>}
|
|
104
|
+
*/
|
|
91
105
|
export async function proceed(
|
|
92
106
|
bucket: string,
|
|
93
107
|
provider: {
|
|
@@ -95,7 +109,8 @@ export async function proceed(
|
|
|
95
109
|
globalConnectionLimit?: number
|
|
96
110
|
},
|
|
97
111
|
filename: string,
|
|
98
|
-
counter = 0
|
|
112
|
+
counter = 0,
|
|
113
|
+
ACL: string
|
|
99
114
|
): Promise<boolean> {
|
|
100
115
|
if (provider.globalConnectionLimit === undefined) {
|
|
101
116
|
return true;
|
|
@@ -114,10 +129,10 @@ export async function proceed(
|
|
|
114
129
|
log.debug(`The "${provider.id}" provider's globalConnectionLimit of "${provider.globalConnectionLimit}" has been reached.`);
|
|
115
130
|
// wait for 5 second and try again
|
|
116
131
|
await delay(5000);
|
|
117
|
-
return proceed(bucket, provider, filename, counter + 1);
|
|
132
|
+
return proceed(bucket, provider, filename, counter + 1, ACL);
|
|
118
133
|
}
|
|
119
134
|
|
|
120
135
|
// add the lock
|
|
121
|
-
await addLock(bucket, provider.id, filename);
|
|
136
|
+
await addLock(bucket, provider.id, filename, ACL);
|
|
122
137
|
return true;
|
|
123
138
|
}
|
package/src/url-path-template.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
const get = require('lodash/get');
|
|
2
2
|
const moment = require('moment');
|
|
3
|
-
const path = require('path');
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* evaluate the operation specified in template
|
|
@@ -30,9 +29,6 @@ function evaluateOperation(name, args) {
|
|
|
30
29
|
case 'substring': {
|
|
31
30
|
return String.prototype.substring.apply(String(valueStr), args.slice(1));
|
|
32
31
|
}
|
|
33
|
-
case 'extractPath': {
|
|
34
|
-
return path.dirname(valueStr);
|
|
35
|
-
}
|
|
36
32
|
default:
|
|
37
33
|
throw new Error(`Could not support operation ${name}`);
|
|
38
34
|
}
|
|
@@ -50,21 +46,17 @@ function templateReplacer(context, submatch) {
|
|
|
50
46
|
const expressionRegex = /([^(]+)\(([^)]+)\)/;
|
|
51
47
|
const matches = submatch.match(expressionRegex);
|
|
52
48
|
|
|
53
|
-
// submatch contains operation
|
|
49
|
+
// submatch contains operation
|
|
54
50
|
if (submatch.match(expressionRegex)) {
|
|
55
51
|
const name = matches[1];
|
|
56
52
|
const args = matches[2].split(/\s*,\s*/);
|
|
57
|
-
|
|
58
|
-
// e.g. extractPath(file.path) or extractPath('/a/b/c')
|
|
59
|
-
// assume args[0] is an object path if it starts with a key of context
|
|
60
|
-
const isObjectPath = Object.keys(context).includes(args[0].split('.')[0]);
|
|
61
|
-
const jsonPathValue = get(context, args[0], isObjectPath ? undefined : args[0]);
|
|
53
|
+
const jsonPathValue = get(context, args[0], null);
|
|
62
54
|
if (!jsonPathValue) throw new Error(`Could not resolve path ${args[0]}`);
|
|
63
55
|
args[0] = jsonPathValue;
|
|
64
56
|
return evaluateOperation(name, args);
|
|
65
57
|
}
|
|
66
58
|
|
|
67
|
-
const jsonPathValue = get(context, submatch);
|
|
59
|
+
const jsonPathValue = get(context, submatch, null);
|
|
68
60
|
if (!jsonPathValue) throw new Error(`Could not resolve path ${submatch}`);
|
|
69
61
|
return jsonPathValue;
|
|
70
62
|
}
|
|
@@ -78,17 +70,11 @@ function templateReplacer(context, submatch) {
|
|
|
78
70
|
* @returns {string} - the url path for the file
|
|
79
71
|
**/
|
|
80
72
|
function urlPathTemplate(pathTemplate, context) {
|
|
81
|
-
const templateRegex = /{([^
|
|
82
|
-
|
|
73
|
+
const templateRegex = /{([^}]+)}/g;
|
|
83
74
|
try {
|
|
84
75
|
// match: The matched substring, submatch: The parenthesized submatch string
|
|
85
|
-
|
|
76
|
+
return pathTemplate.replace(templateRegex, (match, submatch) =>
|
|
86
77
|
templateReplacer(context, submatch));
|
|
87
|
-
|
|
88
|
-
if (replacedPath.match(templateRegex)) {
|
|
89
|
-
return urlPathTemplate(replacedPath, context);
|
|
90
|
-
}
|
|
91
|
-
return replacedPath;
|
|
92
78
|
} catch (error) {
|
|
93
79
|
throw new Error(
|
|
94
80
|
`Could not resolve path template "${pathTemplate}" with error "${error.toString()}"`
|