@oneuptime/common 9.4.0 → 9.4.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.
Files changed (31) hide show
  1. package/Models/DatabaseModels/StatusPageDomain.ts +2 -0
  2. package/Server/Infrastructure/Postgres/SchemaMigrations/1768825402472-MigrationName.ts +317 -0
  3. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -6
  4. package/Server/Services/DatabaseService.ts +23 -1
  5. package/Server/Services/DomainService.ts +26 -15
  6. package/Server/Services/MonitorProbeService.ts +96 -1
  7. package/Types/Domain.ts +23 -0
  8. package/build/dist/Models/DatabaseModels/StatusPageDomain.js +2 -0
  9. package/build/dist/Models/DatabaseModels/StatusPageDomain.js.map +1 -1
  10. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768825402472-MigrationName.js +116 -0
  11. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768825402472-MigrationName.js.map +1 -0
  12. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -6
  13. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  14. package/build/dist/Server/Services/DatabaseService.js +12 -0
  15. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  16. package/build/dist/Server/Services/DomainService.js +19 -8
  17. package/build/dist/Server/Services/DomainService.js.map +1 -1
  18. package/build/dist/Server/Services/MonitorProbeService.js +77 -0
  19. package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
  20. package/build/dist/Types/Domain.js +23 -1
  21. package/build/dist/Types/Domain.js.map +1 -1
  22. package/package.json +1 -1
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1768647802022-RemoveAlertPhoneNumberFromUser.ts +0 -22
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1768649699509-MigrationName.ts +0 -787
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1768682071562-MigrationName.ts +0 -29
  26. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768647802022-RemoveAlertPhoneNumberFromUser.js +0 -34
  27. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768647802022-RemoveAlertPhoneNumberFromUser.js.map +0 -1
  28. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768649699509-MigrationName.js +0 -270
  29. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768649699509-MigrationName.js.map +0 -1
  30. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768682071562-MigrationName.js +0 -16
  31. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768682071562-MigrationName.js.map +0 -1
@@ -1,3 +1,4 @@
1
+ import ObjectID from "../../Types/ObjectID";
1
2
  import DatabaseService from "./DatabaseService";
2
3
  import OneUptimeDate from "../../Types/Date";
3
4
  import BadDataException from "../../Types/Exception/BadDataException";
@@ -54,6 +55,82 @@ export class Service extends DatabaseService {
54
55
  }
55
56
  }
56
57
  }
58
+ /**
59
+ * Atomically claims monitor probes for a specific probe instance.
60
+ * Uses PostgreSQL's FOR UPDATE SKIP LOCKED to prevent multiple probe instances
61
+ * from picking up the same monitors simultaneously.
62
+ *
63
+ * @param data - Object containing probeId, limit, and nextPingAt
64
+ * @returns Array of claimed MonitorProbe IDs
65
+ */
66
+ async claimMonitorProbesForProbing(data) {
67
+ const currentDate = OneUptimeDate.getCurrentDate();
68
+ /*
69
+ * Use a transaction with FOR UPDATE SKIP LOCKED to atomically claim monitors
70
+ * This prevents multiple probe instances from picking up the same monitors
71
+ */
72
+ const claimedIds = await this.executeTransaction(async (transactionalEntityManager) => {
73
+ /*
74
+ * First, select and lock the monitor probes that need to be processed
75
+ * FOR UPDATE SKIP LOCKED ensures that:
76
+ * 1. Rows are locked for this transaction
77
+ * 2. Rows already locked by other transactions are skipped
78
+ */
79
+ const selectQuery = `
80
+ SELECT mp."_id"
81
+ FROM "MonitorProbe" mp
82
+ INNER JOIN "Monitor" m ON mp."monitorId" = m."_id"
83
+ INNER JOIN "Project" p ON mp."projectId" = p."_id"
84
+ WHERE mp."probeId" = $1
85
+ AND mp."isEnabled" = true
86
+ AND mp."deletedAt" IS NULL
87
+ AND (mp."nextPingAt" IS NULL OR mp."nextPingAt" <= $2)
88
+ AND m."disableActiveMonitoring" = false
89
+ AND m."disableActiveMonitoringBecauseOfManualIncident" = false
90
+ AND m."disableActiveMonitoringBecauseOfScheduledMaintenanceEvent" = false
91
+ AND m."deletedAt" IS NULL
92
+ AND p."deletedAt" IS NULL
93
+ AND (p."paymentProviderSubscriptionStatus" IS NULL
94
+ OR p."paymentProviderSubscriptionStatus" IN ('active', 'trialing'))
95
+ AND (p."paymentProviderMeteredSubscriptionStatus" IS NULL
96
+ OR p."paymentProviderMeteredSubscriptionStatus" IN ('active', 'trialing'))
97
+ ORDER BY mp."nextPingAt" ASC NULLS FIRST
98
+ LIMIT $3
99
+ FOR UPDATE OF mp SKIP LOCKED
100
+ `;
101
+ const selectedRows = await transactionalEntityManager.query(selectQuery, [
102
+ data.probeId.toString(),
103
+ currentDate,
104
+ data.limit,
105
+ ]);
106
+ if (selectedRows.length === 0) {
107
+ return [];
108
+ }
109
+ const ids = selectedRows.map((row) => {
110
+ return row._id;
111
+ });
112
+ /*
113
+ * Update the claimed monitors to set nextPingAt to 1 minute from now
114
+ * This is a temporary value; the actual nextPingAt will be calculated
115
+ * based on the monitor's interval after the probe fetches the full details
116
+ */
117
+ const tempNextPingAt = OneUptimeDate.addRemoveMinutes(currentDate, 1);
118
+ const updateQuery = `
119
+ UPDATE "MonitorProbe"
120
+ SET "lastPingAt" = $1, "nextPingAt" = $2
121
+ WHERE "_id" = ANY($3::uuid[])
122
+ `;
123
+ await transactionalEntityManager.query(updateQuery, [
124
+ currentDate,
125
+ tempNextPingAt,
126
+ ids,
127
+ ]);
128
+ return ids.map((id) => {
129
+ return new ObjectID(id);
130
+ });
131
+ });
132
+ return claimedIds;
133
+ }
57
134
  async onBeforeCreate(createBy) {
58
135
  var _a, _b;
59
136
  if ((createBy.data.monitorId || createBy.data.monitor) &&
@@ -1 +1 @@
1
- {"version":3,"file":"MonitorProbeService.js","sourceRoot":"","sources":["../../../../Server/Services/MonitorProbeService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MonitorProbeService.js","sourceRoot":"","sources":["../../../../Server/Services/MonitorProbeService.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,18 @@ import DatabaseProperty from "./Database/DatabaseProperty";
2
2
  import BadDataException from "./Exception/BadDataException";
3
3
  import { ObjectType } from "./JSON";
4
4
  import Zod from "../Utils/Schema/Zod";
5
- export default class Domain extends DatabaseProperty {
5
+ class Domain extends DatabaseProperty {
6
+ /**
7
+ * Checks if a domain is a test/reserved domain that can skip DNS verification.
8
+ * Test domains include .example.com, .example.org, .example.net, and .test TLDs.
9
+ * These are reserved by IANA for documentation and testing purposes.
10
+ */
11
+ static isTestDomain(domain) {
12
+ const domainLower = domain.toLowerCase().trim();
13
+ return Domain.TEST_DOMAIN_SUFFIXES.some((suffix) => {
14
+ return domainLower.endsWith(suffix);
15
+ });
16
+ }
6
17
  get domain() {
7
18
  return this._domain;
8
19
  }
@@ -84,4 +95,15 @@ export default class Domain extends DatabaseProperty {
84
95
  });
85
96
  }
86
97
  }
98
+ /*
99
+ * Reserved TLDs for testing and documentation (per IANA)
100
+ * These domains can never have real DNS records, so they're safe for testing
101
+ */
102
+ Domain.TEST_DOMAIN_SUFFIXES = [
103
+ ".example.com",
104
+ ".example.org",
105
+ ".example.net",
106
+ ".test",
107
+ ];
108
+ export default Domain;
87
109
  //# sourceMappingURL=Domain.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Domain.js","sourceRoot":"","sources":["../../../Types/Domain.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,gBAAgB,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAc,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,GAAkB,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,gBAAgB;IAElD,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACD,IAAW,MAAM,CAAC,CAAS;QACzB,MAAM,OAAO,GAAY,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,gBAAgB,CAAC,SAAS,GAAG,CAAC,GAAG,0BAA0B,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACnB,CAAC;IAEM,MAAM,CAAC,aAAa,CAAC,MAAc;QACxC;;;;;;;WAOG;QAEH,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;QAED;;;;;;WAMG;QACH,MAAM,WAAW,GACf,sEAAsE,CAAC;QAEzE,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,YAAmB,MAAc;QAC/B,KAAK,EAAE,CAAC;QAxCF,YAAO,GAAW,EAAE,CAAC;QAyC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEe,QAAQ;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAES,MAAM,CAAU,UAAU,CAClC,KAAoC;QAEpC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;YAED,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,MAAM;QACpB,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,MAAM;YACxB,KAAK,EAAG,IAAe,CAAC,QAAQ,EAAE;SACnC,CAAC;IACJ,CAAC;IAEM,MAAM,CAAU,QAAQ,CAAC,IAAgB;QAC9C,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;YACxC,OAAO,IAAI,MAAM,CAAE,IAAI,CAAC,OAAO,CAAY,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,CAAC;IAES,MAAM,CAAU,YAAY,CAAC,MAAc;QACnD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,MAAM,CAAU,SAAS;QAC9B,OAAO,GAAG,CAAC,MAAM,CAAC;YAChB,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;YACrC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC;gBAC1B,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,aAAa;aACvB,CAAC;SACH,CAAC,CAAC,OAAO,CAAC;YACT,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,eAAe;YAC5B,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE;SAC5D,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"Domain.js","sourceRoot":"","sources":["../../../Types/Domain.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneuptime/common",
3
- "version": "9.4.0",
3
+ "version": "9.4.2",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,22 +0,0 @@
1
- import { MigrationInterface, QueryRunner } from "typeorm";
2
- import CaptureSpan from "../../../Utils/Telemetry/CaptureSpan";
3
-
4
- export class RemoveAlertPhoneNumberFromUser1768647802022
5
- implements MigrationInterface
6
- {
7
- public name = "RemoveAlertPhoneNumberFromUser1768647802022";
8
-
9
- @CaptureSpan()
10
- public async up(queryRunner: QueryRunner): Promise<void> {
11
- await queryRunner.query(
12
- `ALTER TABLE "User" DROP COLUMN IF EXISTS "alertPhoneNumber"`,
13
- );
14
- }
15
-
16
- @CaptureSpan()
17
- public async down(queryRunner: QueryRunner): Promise<void> {
18
- await queryRunner.query(
19
- `ALTER TABLE "User" ADD "alertPhoneNumber" character varying(30)`,
20
- );
21
- }
22
- }