@budibase/backend-core 2.13.46 → 2.13.48

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/dist/index.js CHANGED
@@ -2905,6 +2905,124 @@ var init_newid = __esm({
2905
2905
  }
2906
2906
  });
2907
2907
 
2908
+ // src/db/instrumentation.ts
2909
+ var import_dd_trace, DDInstrumentedDatabase;
2910
+ var init_instrumentation = __esm({
2911
+ "src/db/instrumentation.ts"() {
2912
+ "use strict";
2913
+ import_dd_trace = __toESM(require("dd-trace"));
2914
+ DDInstrumentedDatabase = class {
2915
+ constructor(db, resource) {
2916
+ this.db = db;
2917
+ this.resource = resource;
2918
+ }
2919
+ get name() {
2920
+ return this.db.name;
2921
+ }
2922
+ exists() {
2923
+ return import_dd_trace.default.trace("exists", { resource: this.resource }, (span) => {
2924
+ span?.addTags({ db_name: this.name });
2925
+ return this.db.exists();
2926
+ });
2927
+ }
2928
+ checkSetup() {
2929
+ return import_dd_trace.default.trace("checkSetup", { resource: this.resource }, (span) => {
2930
+ span?.addTags({ db_name: this.name });
2931
+ return this.db.checkSetup();
2932
+ });
2933
+ }
2934
+ get(id) {
2935
+ return import_dd_trace.default.trace("get", { resource: this.resource }, (span) => {
2936
+ span?.addTags({ db_name: this.name, doc_id: id });
2937
+ return this.db.get(id);
2938
+ });
2939
+ }
2940
+ getMultiple(ids, opts) {
2941
+ return import_dd_trace.default.trace("getMultiple", { resource: this.resource }, (span) => {
2942
+ span?.addTags({
2943
+ db_name: this.name,
2944
+ num_docs: ids.length,
2945
+ allow_missing: opts?.allowMissing
2946
+ });
2947
+ return this.db.getMultiple(ids, opts);
2948
+ });
2949
+ }
2950
+ remove(id, rev) {
2951
+ return import_dd_trace.default.trace("remove", { resource: this.resource }, (span) => {
2952
+ span?.addTags({ db_name: this.name, doc_id: id });
2953
+ return this.db.remove(id, rev);
2954
+ });
2955
+ }
2956
+ put(document, opts) {
2957
+ return import_dd_trace.default.trace("put", { resource: this.resource }, (span) => {
2958
+ span?.addTags({ db_name: this.name, doc_id: document._id });
2959
+ return this.db.put(document, opts);
2960
+ });
2961
+ }
2962
+ bulkDocs(documents) {
2963
+ return import_dd_trace.default.trace("bulkDocs", { resource: this.resource }, (span) => {
2964
+ span?.addTags({ db_name: this.name, num_docs: documents.length });
2965
+ return this.db.bulkDocs(documents);
2966
+ });
2967
+ }
2968
+ allDocs(params2) {
2969
+ return import_dd_trace.default.trace("allDocs", { resource: this.resource }, (span) => {
2970
+ span?.addTags({ db_name: this.name });
2971
+ return this.db.allDocs(params2);
2972
+ });
2973
+ }
2974
+ query(viewName, params2) {
2975
+ return import_dd_trace.default.trace("query", { resource: this.resource }, (span) => {
2976
+ span?.addTags({ db_name: this.name, view_name: viewName });
2977
+ return this.db.query(viewName, params2);
2978
+ });
2979
+ }
2980
+ destroy() {
2981
+ return import_dd_trace.default.trace("destroy", { resource: this.resource }, (span) => {
2982
+ span?.addTags({ db_name: this.name });
2983
+ return this.db.destroy();
2984
+ });
2985
+ }
2986
+ compact() {
2987
+ return import_dd_trace.default.trace("compact", { resource: this.resource }, (span) => {
2988
+ span?.addTags({ db_name: this.name });
2989
+ return this.db.compact();
2990
+ });
2991
+ }
2992
+ dump(stream2, opts) {
2993
+ return import_dd_trace.default.trace("dump", { resource: this.resource }, (span) => {
2994
+ span?.addTags({ db_name: this.name });
2995
+ return this.db.dump(stream2, opts);
2996
+ });
2997
+ }
2998
+ load(...args) {
2999
+ return import_dd_trace.default.trace("load", { resource: this.resource }, (span) => {
3000
+ span?.addTags({ db_name: this.name });
3001
+ return this.db.load(...args);
3002
+ });
3003
+ }
3004
+ createIndex(...args) {
3005
+ return import_dd_trace.default.trace("createIndex", { resource: this.resource }, (span) => {
3006
+ span?.addTags({ db_name: this.name });
3007
+ return this.db.createIndex(...args);
3008
+ });
3009
+ }
3010
+ deleteIndex(...args) {
3011
+ return import_dd_trace.default.trace("deleteIndex", { resource: this.resource }, (span) => {
3012
+ span?.addTags({ db_name: this.name });
3013
+ return this.db.deleteIndex(...args);
3014
+ });
3015
+ }
3016
+ getIndexes(...args) {
3017
+ return import_dd_trace.default.trace("getIndexes", { resource: this.resource }, (span) => {
3018
+ span?.addTags({ db_name: this.name });
3019
+ return this.db.getIndexes(...args);
3020
+ });
3021
+ }
3022
+ };
3023
+ }
3024
+ });
3025
+
2908
3026
  // src/db/couch/DatabaseImpl.ts
2909
3027
  function buildNano(couchInfo) {
2910
3028
  return (0, import_nano.default)({
@@ -2918,10 +3036,8 @@ function buildNano(couchInfo) {
2918
3036
  });
2919
3037
  }
2920
3038
  function DatabaseWithConnection(dbName, connection, opts) {
2921
- if (!connection) {
2922
- throw new Error("Must provide connection details");
2923
- }
2924
- return new DatabaseImpl(dbName, opts, connection);
3039
+ const db = new DatabaseImpl(dbName, opts, connection);
3040
+ return new DDInstrumentedDatabase(db, "couchdb");
2925
3041
  }
2926
3042
  var import_nano, DatabaseImpl;
2927
3043
  var init_DatabaseImpl = __esm({
@@ -2933,6 +3049,7 @@ var init_DatabaseImpl = __esm({
2933
3049
  init_utils2();
2934
3050
  init_pouchDB();
2935
3051
  init_newid();
3052
+ init_instrumentation();
2936
3053
  DatabaseImpl = class _DatabaseImpl {
2937
3054
  constructor(dbName, opts, connection) {
2938
3055
  this.couchInfo = getCouchInfo();
@@ -3149,7 +3266,7 @@ var init_couch = __esm({
3149
3266
 
3150
3267
  // src/db/db.ts
3151
3268
  function getDB(dbName, opts) {
3152
- return new DatabaseImpl(dbName, opts);
3269
+ return new DDInstrumentedDatabase(new DatabaseImpl(dbName, opts), "couchdb");
3153
3270
  }
3154
3271
  async function doWithDB(dbName, cb, opts) {
3155
3272
  const db = getDB(dbName, opts);
@@ -3170,6 +3287,7 @@ var init_db3 = __esm({
3170
3287
  "src/db/db.ts"() {
3171
3288
  "use strict";
3172
3289
  init_couch();
3290
+ init_instrumentation();
3173
3291
  }
3174
3292
  });
3175
3293
 
@@ -3406,6 +3524,13 @@ function isScim() {
3406
3524
  const scimCall = context?.isScim;
3407
3525
  return !!scimCall;
3408
3526
  }
3527
+ function getCurrentContext() {
3528
+ try {
3529
+ return Context.get();
3530
+ } catch (e) {
3531
+ return void 0;
3532
+ }
3533
+ }
3409
3534
  var TEST_APP_ID, getProdAppId;
3410
3535
  var init_mainContext = __esm({
3411
3536
  "src/context/mainContext.ts"() {
@@ -3444,6 +3569,7 @@ __export(context_exports, {
3444
3569
  getAuditLogDBName: () => getAuditLogDBName,
3445
3570
  getAuditLogsDB: () => getAuditLogsDB,
3446
3571
  getAutomationId: () => getAutomationId,
3572
+ getCurrentContext: () => getCurrentContext,
3447
3573
  getDevAppDB: () => getDevAppDB,
3448
3574
  getEnvironmentVariables: () => getEnvironmentVariables,
3449
3575
  getGlobalDB: () => getGlobalDB,
@@ -3604,17 +3730,52 @@ function cleanup() {
3604
3730
  }
3605
3731
  intervals = [];
3606
3732
  }
3607
- var intervals;
3733
+ var intervals, ExecutionTimeoutError, ExecutionTimeTracker;
3608
3734
  var init_timers = __esm({
3609
3735
  "src/timers/timers.ts"() {
3610
3736
  "use strict";
3611
3737
  intervals = [];
3738
+ ExecutionTimeoutError = class extends Error {
3739
+ constructor() {
3740
+ super(...arguments);
3741
+ this.name = "ExecutionTimeoutError";
3742
+ }
3743
+ };
3744
+ ExecutionTimeTracker = class _ExecutionTimeTracker {
3745
+ constructor(limitMs) {
3746
+ this.limitMs = limitMs;
3747
+ this.totalTimeMs = 0;
3748
+ }
3749
+ static withLimit(limitMs) {
3750
+ return new _ExecutionTimeTracker(limitMs);
3751
+ }
3752
+ track(f) {
3753
+ this.checkLimit();
3754
+ const start2 = process.hrtime.bigint();
3755
+ try {
3756
+ return f();
3757
+ } finally {
3758
+ const end2 = process.hrtime.bigint();
3759
+ this.totalTimeMs += Number(end2 - start2) / 1e6;
3760
+ this.checkLimit();
3761
+ }
3762
+ }
3763
+ checkLimit() {
3764
+ if (this.totalTimeMs > this.limitMs) {
3765
+ throw new ExecutionTimeoutError(
3766
+ `Execution time limit of ${this.limitMs}ms exceeded: ${this.totalTimeMs}ms`
3767
+ );
3768
+ }
3769
+ }
3770
+ };
3612
3771
  }
3613
3772
  });
3614
3773
 
3615
3774
  // src/timers/index.ts
3616
3775
  var timers_exports = {};
3617
3776
  __export(timers_exports, {
3777
+ ExecutionTimeTracker: () => ExecutionTimeTracker,
3778
+ ExecutionTimeoutError: () => ExecutionTimeoutError,
3618
3779
  cleanup: () => cleanup,
3619
3780
  clear: () => clear,
3620
3781
  set: () => set
@@ -6130,7 +6291,7 @@ var init_system2 = __esm({
6130
6291
  });
6131
6292
 
6132
6293
  // src/logging/pino/logger.ts
6133
- var import_pino, import_pino_pretty, pinoInstance, isPlainObject2, isError2, isMessage2, getLogParams3, logger;
6294
+ var import_pino, import_pino_pretty, import_dd_trace2, import_ext, pinoInstance, isPlainObject2, isError2, isMessage2, getLogParams3, logger;
6134
6295
  var init_logger = __esm({
6135
6296
  "src/logging/pino/logger.ts"() {
6136
6297
  "use strict";
@@ -6139,6 +6300,8 @@ var init_logger = __esm({
6139
6300
  init_environment2();
6140
6301
  init_context2();
6141
6302
  init_correlation2();
6303
+ import_dd_trace2 = __toESM(require("dd-trace"));
6304
+ import_ext = require("dd-trace/ext");
6142
6305
  init_system2();
6143
6306
  if (!environment_default.DISABLE_PINO_LOGGER) {
6144
6307
  let isPlainObject = function(obj) {
@@ -6172,6 +6335,10 @@ var init_logger = __esm({
6172
6335
  identityType: identity?.type,
6173
6336
  correlationId: getId()
6174
6337
  };
6338
+ const span = import_dd_trace2.default.scope().active();
6339
+ if (span) {
6340
+ import_dd_trace2.default.inject(span.context(), import_ext.formats.LOG, contextObject);
6341
+ }
6175
6342
  const mergingObject = {
6176
6343
  err: error,
6177
6344
  pid: process.pid,
@@ -7070,6 +7237,9 @@ var Duration = class _Duration {
7070
7237
  static fromDays(duration) {
7071
7238
  return _Duration.from("days" /* DAYS */, duration);
7072
7239
  }
7240
+ static fromMilliseconds(duration) {
7241
+ return _Duration.from("milliseconds" /* MILLISECONDS */, duration);
7242
+ }
7073
7243
  };
7074
7244
 
7075
7245
  // src/redis/redlockImpl.ts