envio 2.27.5 → 2.28.0-alpha.1
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/package.json +5 -5
- package/rescript.json +3 -0
- package/src/ErrorHandling.res +4 -5
- package/src/ErrorHandling.res.js +7 -7
- package/src/Hasura.res +139 -16
- package/src/Hasura.res.js +99 -18
- package/src/Internal.res +7 -11
- package/src/Internal.res.js +0 -11
- package/src/InternalConfig.res +20 -0
- package/src/InternalConfig.res.js +2 -0
- package/src/Js.shim.ts +11 -0
- package/src/LoadManager.res +13 -7
- package/src/LoadManager.res.js +14 -8
- package/src/Logging.res +1 -1
- package/src/Logging.res.js +2 -2
- package/src/Persistence.res +25 -33
- package/src/Persistence.res.js +18 -20
- package/src/PgStorage.res +158 -106
- package/src/PgStorage.res.js +143 -102
- package/src/Prometheus.res +2 -2
- package/src/Prometheus.res.js +2 -3
- package/src/Time.res +1 -1
- package/src/Time.res.js +1 -2
- package/src/Utils.res +7 -0
- package/src/Utils.res.js +11 -0
- package/src/bindings/Pino.res +1 -1
- package/src/bindings/Pino.res.js +2 -1
- package/src/db/EntityHistory.res +115 -50
- package/src/db/EntityHistory.res.js +43 -26
- package/src/db/InternalTable.gen.ts +43 -0
- package/src/db/InternalTable.res +392 -0
- package/src/db/InternalTable.res.js +295 -0
- package/src/sources/SourceManager.res +3 -3
- package/src/sources/SourceManager.res.js +3 -4
- package/src/vendored/Rest.res +11 -2
- package/src/vendored/Rest.res.js +44 -35
package/src/PgStorage.res.js
CHANGED
|
@@ -16,6 +16,7 @@ var Belt_Array = require("rescript/lib/js/belt_Array.js");
|
|
|
16
16
|
var Belt_Option = require("rescript/lib/js/belt_Option.js");
|
|
17
17
|
var Caml_option = require("rescript/lib/js/caml_option.js");
|
|
18
18
|
var Persistence = require("./Persistence.res.js");
|
|
19
|
+
var InternalTable = require("./db/InternalTable.res.js");
|
|
19
20
|
var Child_process = require("child_process");
|
|
20
21
|
var Caml_exceptions = require("rescript/lib/js/caml_exceptions.js");
|
|
21
22
|
var S$RescriptSchema = require("rescript-schema/src/S.res.js");
|
|
@@ -68,11 +69,18 @@ function makeCreateTableQuery(table, pgSchema) {
|
|
|
68
69
|
) + ");";
|
|
69
70
|
}
|
|
70
71
|
|
|
71
|
-
function makeInitializeTransaction(pgSchema, pgUser,
|
|
72
|
-
var
|
|
72
|
+
function makeInitializeTransaction(pgSchema, pgUser, chainConfigsOpt, entitiesOpt, enumsOpt, isEmptyPgSchemaOpt) {
|
|
73
|
+
var chainConfigs = chainConfigsOpt !== undefined ? chainConfigsOpt : [];
|
|
73
74
|
var entities = entitiesOpt !== undefined ? entitiesOpt : [];
|
|
74
75
|
var enums = enumsOpt !== undefined ? enumsOpt : [];
|
|
75
76
|
var isEmptyPgSchema = isEmptyPgSchemaOpt !== undefined ? isEmptyPgSchemaOpt : false;
|
|
77
|
+
var generalTables = [
|
|
78
|
+
InternalTable.EventSyncState.table,
|
|
79
|
+
InternalTable.Chains.table,
|
|
80
|
+
InternalTable.PersistedState.table,
|
|
81
|
+
InternalTable.EndOfBlockRangeScannedData.table,
|
|
82
|
+
InternalTable.RawEvents.table
|
|
83
|
+
];
|
|
76
84
|
var allTables = $$Array.copy(generalTables);
|
|
77
85
|
var allEntityTables = [];
|
|
78
86
|
entities.forEach(function (entity) {
|
|
@@ -107,12 +115,16 @@ function makeInitializeTransaction(pgSchema, pgUser, generalTablesOpt, entitiesO
|
|
|
107
115
|
contents: ""
|
|
108
116
|
};
|
|
109
117
|
entities.forEach(function (entity) {
|
|
110
|
-
functionsQuery.contents = functionsQuery.contents + "\n" + entity.entityHistory.
|
|
118
|
+
functionsQuery.contents = functionsQuery.contents + "\n" + entity.entityHistory.makeInsertFnQuery(pgSchema);
|
|
111
119
|
Table.getDerivedFromFields(entity.table).forEach(function (derivedFromField) {
|
|
112
120
|
var indexField = Utils.unwrapResultExn(Schema.getDerivedFromFieldName(derivedSchema, derivedFromField));
|
|
113
121
|
query.contents = query.contents + "\n" + makeCreateIndexQuery(derivedFromField.derivedFromEntity, [indexField], pgSchema);
|
|
114
122
|
});
|
|
115
123
|
});
|
|
124
|
+
var initialChainsValuesQuery = InternalTable.Chains.makeInitialValuesQuery(pgSchema, chainConfigs);
|
|
125
|
+
if (initialChainsValuesQuery !== undefined) {
|
|
126
|
+
query.contents = query.contents + "\n" + initialChainsValuesQuery;
|
|
127
|
+
}
|
|
116
128
|
functionsQuery.contents = functionsQuery.contents + "\n" + ("CREATE OR REPLACE FUNCTION " + getCacheRowCountFnName + "(table_name text) \nRETURNS integer AS $$\nDECLARE\n result integer;\nBEGIN\n EXECUTE format('SELECT COUNT(*) FROM \"" + pgSchema + "\".%I', table_name) INTO result;\n RETURN result;\nEND;\n$$ LANGUAGE plpgsql;");
|
|
117
129
|
return [query.contents].concat(functionsQuery.contents !== "" ? [functionsQuery.contents] : []);
|
|
118
130
|
}
|
|
@@ -129,6 +141,10 @@ function makeLoadByIdsQuery(pgSchema, tableName) {
|
|
|
129
141
|
return "SELECT * FROM \"" + pgSchema + "\".\"" + tableName + "\" WHERE id = ANY($1::text[]);";
|
|
130
142
|
}
|
|
131
143
|
|
|
144
|
+
function makeLoadAllQuery(pgSchema, tableName) {
|
|
145
|
+
return "SELECT * FROM \"" + pgSchema + "\".\"" + tableName + "\";";
|
|
146
|
+
}
|
|
147
|
+
|
|
132
148
|
function makeInsertUnnestSetQuery(pgSchema, table, itemSchema, isRawEvents) {
|
|
133
149
|
var match = Table.toSqlParams(table, itemSchema, pgSchema);
|
|
134
150
|
var quotedNonPrimaryFieldNames = match.quotedNonPrimaryFieldNames;
|
|
@@ -177,13 +193,9 @@ function makeInsertValuesSetQuery(pgSchema, table, itemSchema, itemsCount) {
|
|
|
177
193
|
) + ";";
|
|
178
194
|
}
|
|
179
195
|
|
|
180
|
-
var rawEventsTableName = "raw_events";
|
|
181
|
-
|
|
182
|
-
var eventSyncStateTableName = "event_sync_state";
|
|
183
|
-
|
|
184
196
|
function makeTableBatchSetQuery(pgSchema, table, itemSchema) {
|
|
185
197
|
var match = Table.toSqlParams(table, itemSchema, pgSchema);
|
|
186
|
-
var isRawEvents = table.tableName ===
|
|
198
|
+
var isRawEvents = table.tableName === InternalTable.RawEvents.table.tableName;
|
|
187
199
|
if (isRawEvents || !match.hasArrayField) {
|
|
188
200
|
return {
|
|
189
201
|
query: makeInsertUnnestSetQuery(pgSchema, table, itemSchema, isRawEvents),
|
|
@@ -277,7 +289,7 @@ async function setOrThrow(sql, items, table, itemSchema, pgSchema) {
|
|
|
277
289
|
throw {
|
|
278
290
|
RE_EXN_ID: Persistence.StorageError,
|
|
279
291
|
message: "Failed to insert items into table \"" + table.tableName + "\"",
|
|
280
|
-
reason:
|
|
292
|
+
reason: Utils.prettifyExn(exn),
|
|
281
293
|
Error: new Error()
|
|
282
294
|
};
|
|
283
295
|
}
|
|
@@ -285,13 +297,24 @@ async function setOrThrow(sql, items, table, itemSchema, pgSchema) {
|
|
|
285
297
|
|
|
286
298
|
function setEntityHistoryOrThrow(sql, entityHistory, rows, shouldCopyCurrentEntity, shouldRemoveInvalidUtf8Opt) {
|
|
287
299
|
var shouldRemoveInvalidUtf8 = shouldRemoveInvalidUtf8Opt !== undefined ? shouldRemoveInvalidUtf8Opt : false;
|
|
288
|
-
return
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
300
|
+
return Belt_Array.map(rows, (function (historyRow) {
|
|
301
|
+
var row = S$RescriptSchema.reverseConvertToJsonOrThrow(historyRow, entityHistory.schema);
|
|
302
|
+
if (shouldRemoveInvalidUtf8) {
|
|
303
|
+
removeInvalidUtf8InPlace([row]);
|
|
304
|
+
}
|
|
305
|
+
return $$Promise.$$catch(entityHistory.insertFn(sql, row, shouldCopyCurrentEntity !== undefined ? shouldCopyCurrentEntity : !Belt_Option.getWithDefault(historyRow.containsRollbackDiffChange, false)), (function (exn) {
|
|
306
|
+
var reason = Utils.prettifyExn(exn);
|
|
307
|
+
var detail = (reason?.detail || "");
|
|
308
|
+
throw {
|
|
309
|
+
RE_EXN_ID: Persistence.StorageError,
|
|
310
|
+
message: "Failed to insert history item into table \"" + entityHistory.table.tableName + "\"." + (
|
|
311
|
+
detail !== "" ? " Details: " + detail : ""
|
|
312
|
+
),
|
|
313
|
+
reason: reason,
|
|
314
|
+
Error: new Error()
|
|
315
|
+
};
|
|
316
|
+
}));
|
|
317
|
+
}));
|
|
295
318
|
}
|
|
296
319
|
|
|
297
320
|
function makeSchemaTableNamesQuery(pgSchema) {
|
|
@@ -370,29 +393,112 @@ function make(sql, pgHost, pgSchema, pgPort, pgUser, pgDatabase, pgPassword, onI
|
|
|
370
393
|
};
|
|
371
394
|
var cacheDirPath = Path.resolve("..", ".envio", "cache");
|
|
372
395
|
var isInitialized = async function () {
|
|
373
|
-
var envioTables = await sql.unsafe("SELECT table_schema FROM information_schema.tables WHERE table_schema = '" + pgSchema + "' AND table_name = '" +
|
|
396
|
+
var envioTables = await sql.unsafe("SELECT table_schema FROM information_schema.tables WHERE table_schema = '" + pgSchema + "' AND table_name = '" + InternalTable.EventSyncState.table.tableName + "' OR table_name = '" + InternalTable.Chains.table.tableName + "';");
|
|
374
397
|
return Utils.$$Array.notEmpty(envioTables);
|
|
375
398
|
};
|
|
376
|
-
var
|
|
399
|
+
var restoreEffectCache = async function (withUpload) {
|
|
400
|
+
if (withUpload) {
|
|
401
|
+
var nothingToUploadErrorMessage = "Nothing to upload.";
|
|
402
|
+
var match = await Promise.all([
|
|
403
|
+
$$Promise.$$catch(Fs.promises.readdir(cacheDirPath).then(function (e) {
|
|
404
|
+
return {
|
|
405
|
+
TAG: "Ok",
|
|
406
|
+
_0: e
|
|
407
|
+
};
|
|
408
|
+
}), (function (param) {
|
|
409
|
+
return Promise.resolve({
|
|
410
|
+
TAG: "Error",
|
|
411
|
+
_0: nothingToUploadErrorMessage
|
|
412
|
+
});
|
|
413
|
+
})),
|
|
414
|
+
getConnectedPsqlExec(pgUser, pgHost, pgDatabase, pgPort)
|
|
415
|
+
]);
|
|
416
|
+
var exit = 0;
|
|
417
|
+
var message;
|
|
418
|
+
var entries = match[0];
|
|
419
|
+
if (entries.TAG === "Ok") {
|
|
420
|
+
var psqlExec = match[1];
|
|
421
|
+
if (psqlExec.TAG === "Ok") {
|
|
422
|
+
var psqlExec$1 = psqlExec._0;
|
|
423
|
+
var cacheFiles = entries._0.filter(function (entry) {
|
|
424
|
+
return entry.endsWith(".tsv");
|
|
425
|
+
});
|
|
426
|
+
await Promise.all(cacheFiles.map(function (entry) {
|
|
427
|
+
var effectName = entry.slice(0, -4);
|
|
428
|
+
var table = Internal.makeCacheTable(effectName);
|
|
429
|
+
return sql.unsafe(makeCreateTableQuery(table, pgSchema)).then(function () {
|
|
430
|
+
var inputFile = Path.join(cacheDirPath, entry);
|
|
431
|
+
var command = psqlExec$1 + " -c 'COPY \"" + pgSchema + "\".\"" + table.tableName + "\" FROM STDIN WITH (FORMAT text, HEADER);' < " + inputFile;
|
|
432
|
+
return new Promise((function (resolve, reject) {
|
|
433
|
+
Child_process.exec(command, psqlExecOptions, (function (error, stdout, param) {
|
|
434
|
+
if (error === null) {
|
|
435
|
+
return resolve(stdout);
|
|
436
|
+
} else {
|
|
437
|
+
return reject(error);
|
|
438
|
+
}
|
|
439
|
+
}));
|
|
440
|
+
}));
|
|
441
|
+
});
|
|
442
|
+
}));
|
|
443
|
+
Logging.info("Successfully uploaded cache.");
|
|
444
|
+
} else {
|
|
445
|
+
message = match[1]._0;
|
|
446
|
+
exit = 1;
|
|
447
|
+
}
|
|
448
|
+
} else {
|
|
449
|
+
message = entries._0;
|
|
450
|
+
exit = 1;
|
|
451
|
+
}
|
|
452
|
+
if (exit === 1) {
|
|
453
|
+
if (message === nothingToUploadErrorMessage) {
|
|
454
|
+
Logging.info("No cache found to upload.");
|
|
455
|
+
} else {
|
|
456
|
+
Logging.error("Failed to upload cache, continuing without it. " + message);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
}
|
|
461
|
+
var cacheTableInfo = await sql.unsafe(makeSchemaCacheTableInfoQuery(pgSchema));
|
|
462
|
+
if (withUpload && Utils.$$Array.notEmpty(cacheTableInfo) && onNewTables !== undefined) {
|
|
463
|
+
await onNewTables(cacheTableInfo.map(function (info) {
|
|
464
|
+
return info.table_name;
|
|
465
|
+
}));
|
|
466
|
+
}
|
|
467
|
+
var cache = {};
|
|
468
|
+
cacheTableInfo.forEach(function (param) {
|
|
469
|
+
var effectName = param.table_name.slice(cacheTablePrefixLength);
|
|
470
|
+
cache[effectName] = {
|
|
471
|
+
effectName: effectName,
|
|
472
|
+
count: param.count
|
|
473
|
+
};
|
|
474
|
+
});
|
|
475
|
+
return cache;
|
|
476
|
+
};
|
|
477
|
+
var initialize = async function (chainConfigsOpt, entitiesOpt, enumsOpt) {
|
|
478
|
+
var chainConfigs = chainConfigsOpt !== undefined ? chainConfigsOpt : [];
|
|
377
479
|
var entities = entitiesOpt !== undefined ? entitiesOpt : [];
|
|
378
|
-
var generalTables = generalTablesOpt !== undefined ? generalTablesOpt : [];
|
|
379
480
|
var enums = enumsOpt !== undefined ? enumsOpt : [];
|
|
380
481
|
var schemaTableNames = await sql.unsafe(makeSchemaTableNamesQuery(pgSchema));
|
|
381
482
|
if (Utils.$$Array.notEmpty(schemaTableNames) && !schemaTableNames.some(function (table) {
|
|
382
|
-
return table.table_name ===
|
|
483
|
+
return table.table_name === InternalTable.EventSyncState.table.tableName;
|
|
383
484
|
})) {
|
|
384
485
|
Js_exn.raiseError("Cannot run Envio migrations on PostgreSQL schema \"" + pgSchema + "\" because it contains non-Envio tables. Running migrations would delete all data in this schema.\n\nTo resolve this:\n1. If you want to use this schema, first backup any important data, then drop it with: \"pnpm envio local db-migrate down\"\n2. Or specify a different schema name by setting the \"ENVIO_PG_PUBLIC_SCHEMA\" environment variable\n3. Or manually drop the schema in your database if you're certain the data is not needed.");
|
|
385
486
|
}
|
|
386
|
-
var queries = makeInitializeTransaction(pgSchema, pgUser,
|
|
487
|
+
var queries = makeInitializeTransaction(pgSchema, pgUser, chainConfigs, entities, enums, Utils.$$Array.isEmpty(schemaTableNames));
|
|
387
488
|
await sql.begin(function (sql) {
|
|
388
489
|
return queries.map(function (query) {
|
|
389
490
|
return sql.unsafe(query);
|
|
390
491
|
});
|
|
391
492
|
});
|
|
493
|
+
var cache = await restoreEffectCache(true);
|
|
392
494
|
if (onInitialize !== undefined) {
|
|
393
|
-
|
|
495
|
+
await onInitialize();
|
|
394
496
|
}
|
|
395
|
-
|
|
497
|
+
return {
|
|
498
|
+
cleanRun: true,
|
|
499
|
+
cache: cache,
|
|
500
|
+
chains: chainConfigs.map(InternalTable.Chains.initialFromConfig)
|
|
501
|
+
};
|
|
396
502
|
};
|
|
397
503
|
var loadByIdsOrThrow = async function (ids, table, rowsSchema) {
|
|
398
504
|
var rows;
|
|
@@ -523,93 +629,29 @@ function make(sql, pgHost, pgSchema, pgPort, pgUser, pgDatabase, pgPassword, onI
|
|
|
523
629
|
}
|
|
524
630
|
catch (raw_exn){
|
|
525
631
|
var exn$1 = Caml_js_exceptions.internalToOCamlException(raw_exn);
|
|
526
|
-
return Logging.errorWithExn(
|
|
632
|
+
return Logging.errorWithExn(Utils.prettifyExn(exn$1), "Failed to dump cache.");
|
|
527
633
|
}
|
|
528
634
|
};
|
|
529
|
-
var
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
return Promise.resolve({
|
|
540
|
-
TAG: "Error",
|
|
541
|
-
_0: nothingToUploadErrorMessage
|
|
542
|
-
});
|
|
543
|
-
})),
|
|
544
|
-
getConnectedPsqlExec(pgUser, pgHost, pgDatabase, pgPort)
|
|
545
|
-
]);
|
|
546
|
-
var exit = 0;
|
|
547
|
-
var message;
|
|
548
|
-
var entries = match[0];
|
|
549
|
-
if (entries.TAG === "Ok") {
|
|
550
|
-
var psqlExec = match[1];
|
|
551
|
-
if (psqlExec.TAG === "Ok") {
|
|
552
|
-
var psqlExec$1 = psqlExec._0;
|
|
553
|
-
var cacheFiles = entries._0.filter(function (entry) {
|
|
554
|
-
return entry.endsWith(".tsv");
|
|
555
|
-
});
|
|
556
|
-
await Promise.all(cacheFiles.map(function (entry) {
|
|
557
|
-
var effectName = entry.slice(0, -4);
|
|
558
|
-
var table = Internal.makeCacheTable(effectName);
|
|
559
|
-
return sql.unsafe(makeCreateTableQuery(table, pgSchema)).then(function () {
|
|
560
|
-
var inputFile = Path.join(cacheDirPath, entry);
|
|
561
|
-
var command = psqlExec$1 + " -c 'COPY \"" + pgSchema + "\".\"" + table.tableName + "\" FROM STDIN WITH (FORMAT text, HEADER);' < " + inputFile;
|
|
562
|
-
return new Promise((function (resolve, reject) {
|
|
563
|
-
Child_process.exec(command, psqlExecOptions, (function (error, stdout, param) {
|
|
564
|
-
if (error === null) {
|
|
565
|
-
return resolve(stdout);
|
|
566
|
-
} else {
|
|
567
|
-
return reject(error);
|
|
568
|
-
}
|
|
569
|
-
}));
|
|
570
|
-
}));
|
|
571
|
-
});
|
|
572
|
-
}));
|
|
573
|
-
Logging.info("Successfully uploaded cache.");
|
|
574
|
-
} else {
|
|
575
|
-
message = match[1]._0;
|
|
576
|
-
exit = 1;
|
|
577
|
-
}
|
|
578
|
-
} else {
|
|
579
|
-
message = entries._0;
|
|
580
|
-
exit = 1;
|
|
581
|
-
}
|
|
582
|
-
if (exit === 1) {
|
|
583
|
-
if (message === nothingToUploadErrorMessage) {
|
|
584
|
-
Logging.info("No cache found to upload.");
|
|
585
|
-
} else {
|
|
586
|
-
Logging.error("Failed to upload cache, continuing without it. " + message);
|
|
587
|
-
}
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
}
|
|
591
|
-
var cacheTableInfo = await sql.unsafe(makeSchemaCacheTableInfoQuery(pgSchema));
|
|
592
|
-
if (withUpload && Utils.$$Array.notEmpty(cacheTableInfo) && onNewTables !== undefined) {
|
|
593
|
-
await onNewTables(cacheTableInfo.map(function (info) {
|
|
594
|
-
return info.table_name;
|
|
595
|
-
}));
|
|
596
|
-
}
|
|
597
|
-
return cacheTableInfo.map(function (info) {
|
|
598
|
-
return {
|
|
599
|
-
effectName: info.table_name.slice(cacheTablePrefixLength),
|
|
600
|
-
count: info.count
|
|
601
|
-
};
|
|
602
|
-
});
|
|
635
|
+
var loadInitialState = async function () {
|
|
636
|
+
var match = await Promise.all([
|
|
637
|
+
restoreEffectCache(false),
|
|
638
|
+
sql.unsafe(makeLoadAllQuery(pgSchema, InternalTable.Chains.table.tableName))
|
|
639
|
+
]);
|
|
640
|
+
return {
|
|
641
|
+
cleanRun: false,
|
|
642
|
+
cache: match[0],
|
|
643
|
+
chains: match[1]
|
|
644
|
+
};
|
|
603
645
|
};
|
|
604
646
|
return {
|
|
605
647
|
isInitialized: isInitialized,
|
|
606
648
|
initialize: initialize,
|
|
649
|
+
loadInitialState: loadInitialState,
|
|
607
650
|
loadByIdsOrThrow: loadByIdsOrThrow,
|
|
608
651
|
loadByFieldOrThrow: loadByFieldOrThrow,
|
|
609
652
|
setOrThrow: setOrThrow$1,
|
|
610
653
|
setEffectCacheOrThrow: setEffectCacheOrThrow,
|
|
611
|
-
dumpEffectCache: dumpEffectCache
|
|
612
|
-
restoreEffectCache: restoreEffectCache
|
|
654
|
+
dumpEffectCache: dumpEffectCache
|
|
613
655
|
};
|
|
614
656
|
}
|
|
615
657
|
|
|
@@ -623,10 +665,9 @@ exports.makeInitializeTransaction = makeInitializeTransaction;
|
|
|
623
665
|
exports.makeLoadByIdQuery = makeLoadByIdQuery;
|
|
624
666
|
exports.makeLoadByFieldQuery = makeLoadByFieldQuery;
|
|
625
667
|
exports.makeLoadByIdsQuery = makeLoadByIdsQuery;
|
|
668
|
+
exports.makeLoadAllQuery = makeLoadAllQuery;
|
|
626
669
|
exports.makeInsertUnnestSetQuery = makeInsertUnnestSetQuery;
|
|
627
670
|
exports.makeInsertValuesSetQuery = makeInsertValuesSetQuery;
|
|
628
|
-
exports.rawEventsTableName = rawEventsTableName;
|
|
629
|
-
exports.eventSyncStateTableName = eventSyncStateTableName;
|
|
630
671
|
exports.maxItemsPerQuery = maxItemsPerQuery;
|
|
631
672
|
exports.makeTableBatchSetQuery = makeTableBatchSetQuery;
|
|
632
673
|
exports.chunkArray = chunkArray;
|
package/src/Prometheus.res
CHANGED
|
@@ -213,9 +213,9 @@ let incrementExecuteBatchDurationCounter = (~duration) => {
|
|
|
213
213
|
executeBatchDurationCounter->PromClient.Counter.incMany(duration)
|
|
214
214
|
}
|
|
215
215
|
|
|
216
|
-
let setSourceChainHeight = (~blockNumber, ~
|
|
216
|
+
let setSourceChainHeight = (~blockNumber, ~chainId) => {
|
|
217
217
|
sourceChainHeight
|
|
218
|
-
->PromClient.Gauge.labels({"chainId":
|
|
218
|
+
->PromClient.Gauge.labels({"chainId": chainId})
|
|
219
219
|
->PromClient.Gauge.set(blockNumber)
|
|
220
220
|
}
|
|
221
221
|
|
package/src/Prometheus.res.js
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
var Utils = require("./Utils.res.js");
|
|
5
5
|
var Hrtime = require("./bindings/Hrtime.res.js");
|
|
6
6
|
var Js_exn = require("rescript/lib/js/js_exn.js");
|
|
7
|
-
var ChainMap = require("./ChainMap.res.js");
|
|
8
7
|
var Belt_Array = require("rescript/lib/js/belt_Array.js");
|
|
9
8
|
var Belt_Result = require("rescript/lib/js/belt_Result.js");
|
|
10
9
|
var PromClient = require("prom-client");
|
|
@@ -315,9 +314,9 @@ function incrementExecuteBatchDurationCounter(duration) {
|
|
|
315
314
|
executeBatchDurationCounter.inc(duration);
|
|
316
315
|
}
|
|
317
316
|
|
|
318
|
-
function setSourceChainHeight(blockNumber,
|
|
317
|
+
function setSourceChainHeight(blockNumber, chainId) {
|
|
319
318
|
sourceChainHeight.labels({
|
|
320
|
-
chainId:
|
|
319
|
+
chainId: chainId
|
|
321
320
|
}).set(blockNumber);
|
|
322
321
|
}
|
|
323
322
|
|
package/src/Time.res
CHANGED
|
@@ -17,7 +17,7 @@ let rec retryAsyncWithExponentialBackOff = async (
|
|
|
17
17
|
let log = retryCount === 0 ? Logging.childTrace : Logging.childWarn
|
|
18
18
|
logger->log({
|
|
19
19
|
"msg": `Retrying query ${nextRetryCount->Belt.Int.toString}/${maxRetries->Belt.Int.toString} in ${backOffMillis->Belt.Int.toString}ms - waiting for correct result.`,
|
|
20
|
-
"err": exn->
|
|
20
|
+
"err": exn->Utils.prettifyExn,
|
|
21
21
|
})
|
|
22
22
|
await resolvePromiseAfterDelay(~delayMilliseconds=backOffMillis)
|
|
23
23
|
|
package/src/Time.res.js
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
|
|
4
4
|
var Utils = require("./Utils.res.js");
|
|
5
5
|
var Logging = require("./Logging.res.js");
|
|
6
|
-
var Internal = require("./Internal.res.js");
|
|
7
6
|
var ErrorHandling = require("./ErrorHandling.res.js");
|
|
8
7
|
var Caml_js_exceptions = require("rescript/lib/js/caml_js_exceptions.js");
|
|
9
8
|
|
|
@@ -26,7 +25,7 @@ async function retryAsyncWithExponentialBackOff(backOffMillisOpt, multiplicative
|
|
|
26
25
|
var log = retryCount === 0 ? Logging.childTrace : Logging.childWarn;
|
|
27
26
|
log(logger, {
|
|
28
27
|
msg: "Retrying query " + String(nextRetryCount) + "/" + String(maxRetries) + " in " + String(backOffMillis) + "ms - waiting for correct result.",
|
|
29
|
-
err:
|
|
28
|
+
err: Utils.prettifyExn(exn)
|
|
30
29
|
});
|
|
31
30
|
await Utils.delay(backOffMillis);
|
|
32
31
|
return await retryAsyncWithExponentialBackOff(Math.imul(backOffMillis, multiplicative), multiplicative, nextRetryCount, maxRetries, logger, f);
|
package/src/Utils.res
CHANGED
package/src/Utils.res.js
CHANGED
|
@@ -10,6 +10,7 @@ var Belt_Option = require("rescript/lib/js/belt_Option.js");
|
|
|
10
10
|
var Caml_option = require("rescript/lib/js/caml_option.js");
|
|
11
11
|
var Caml_splice_call = require("rescript/lib/js/caml_splice_call.js");
|
|
12
12
|
var S$RescriptSchema = require("rescript-schema/src/S.res.js");
|
|
13
|
+
var Caml_js_exceptions = require("rescript/lib/js/caml_js_exceptions.js");
|
|
13
14
|
|
|
14
15
|
function delay(milliseconds) {
|
|
15
16
|
return new Promise((function (resolve, param) {
|
|
@@ -530,6 +531,15 @@ var Hash = {
|
|
|
530
531
|
makeOrThrow: makeOrThrow
|
|
531
532
|
};
|
|
532
533
|
|
|
534
|
+
function prettifyExn(exn) {
|
|
535
|
+
var e = Caml_js_exceptions.internalToOCamlException(exn);
|
|
536
|
+
if (e.RE_EXN_ID === Js_exn.$$Error) {
|
|
537
|
+
return e._1;
|
|
538
|
+
} else {
|
|
539
|
+
return e;
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
|
|
533
543
|
exports.delay = delay;
|
|
534
544
|
exports.$$Object = $$Object;
|
|
535
545
|
exports.$$Error = $$Error;
|
|
@@ -548,4 +558,5 @@ exports.$$WeakMap = $$WeakMap;
|
|
|
548
558
|
exports.$$Map = $$Map;
|
|
549
559
|
exports.$$Proxy = $$Proxy;
|
|
550
560
|
exports.Hash = Hash;
|
|
561
|
+
exports.prettifyExn = prettifyExn;
|
|
551
562
|
/* variantTag Not a pure module */
|
package/src/bindings/Pino.res
CHANGED
package/src/bindings/Pino.res.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var Pino = require("pino");
|
|
5
|
+
var Utils = require("../Utils.res.js");
|
|
5
6
|
var Caml_obj = require("rescript/lib/js/caml_obj.js");
|
|
6
7
|
var Belt_Array = require("rescript/lib/js/belt_Array.js");
|
|
7
8
|
var Belt_Option = require("rescript/lib/js/belt_Option.js");
|
|
@@ -14,7 +15,7 @@ function createPinoMessage(message) {
|
|
|
14
15
|
function createPinoMessageWithError(message, err) {
|
|
15
16
|
return {
|
|
16
17
|
msg: message,
|
|
17
|
-
err: err
|
|
18
|
+
err: Utils.prettifyExn(err)
|
|
18
19
|
};
|
|
19
20
|
}
|
|
20
21
|
|