@memberjunction/scheduling-engine 6.1.0-edge.1 → 6.1.0-edge.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/README.md +26 -0
- package/dist/drivers/ActionLogRetentionScheduledJobDriver.d.ts +106 -0
- package/dist/drivers/ActionLogRetentionScheduledJobDriver.d.ts.map +1 -0
- package/dist/drivers/ActionLogRetentionScheduledJobDriver.js +224 -0
- package/dist/drivers/ActionLogRetentionScheduledJobDriver.js.map +1 -0
- package/dist/drivers/AgentScheduledJobDriver.d.ts.map +1 -1
- package/dist/drivers/AgentScheduledJobDriver.js +16 -0
- package/dist/drivers/AgentScheduledJobDriver.js.map +1 -1
- package/dist/drivers/index.d.ts +1 -0
- package/dist/drivers/index.d.ts.map +1 -1
- package/dist/drivers/index.js +1 -0
- package/dist/drivers/index.js.map +1 -1
- package/package.json +17 -17
package/README.md
CHANGED
|
@@ -133,6 +133,32 @@ Abstract base class for all job drivers. Provides:
|
|
|
133
133
|
|--------|----------|-------------|
|
|
134
134
|
| `AgentScheduledJobDriver` | Agent | Executes AI agents with configurable conversations and payloads |
|
|
135
135
|
| `ActionScheduledJobDriver` | Action | Executes MJ Actions with static or SQL-based parameter values |
|
|
136
|
+
| `RecordProcessScheduledJobDriver` | Run Record Process | Runs a `MJ: Record Processes` definition over its scoped record set |
|
|
137
|
+
| `IntegrationSyncScheduledJobDriver` | Integration Sync | Runs an integration's sync on a schedule |
|
|
138
|
+
| `IntegrationDiscoveryScheduledJobDriver` | Integration Discovery | Discovers new integration entities on a schedule |
|
|
139
|
+
| `UserRoutineDispatcherDriver` | User Routine Dispatcher | Dispatches due user routines |
|
|
140
|
+
| `AgentRunSweepScheduledJobDriver` | Agent Run Sweep | Force-fails agent runs orphaned by a dead process |
|
|
141
|
+
| `ActionLogRetentionScheduledJobDriver` | Action Log Retention | Purges expired `MJ: Action Execution Logs` rows, bounded per run |
|
|
142
|
+
|
|
143
|
+
#### Action Log Retention
|
|
144
|
+
|
|
145
|
+
`Action.RetentionPeriod` (days; `NULL` = indefinite) is stamped onto each execution-log row **when the
|
|
146
|
+
run starts**, so retention is decided at write time — editing an action's retention changes what is
|
|
147
|
+
kept going forward rather than retroactively deleting history written under the previous policy.
|
|
148
|
+
|
|
149
|
+
This driver enforces it. It is opt-in like the sweep: shipping the job type activates nothing until
|
|
150
|
+
someone creates a `MJ: Scheduled Job` of it with a cron expression.
|
|
151
|
+
|
|
152
|
+
```json
|
|
153
|
+
{ "DefaultRetentionDays": 90, "MaxDeletesPerRun": 5000 }
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Both fields are optional. Omitting `DefaultRetentionDays` means rows with **no** retention are kept
|
|
157
|
+
indefinitely — `NULL` is what the schema calls indefinite, and a purge job that invented a lifetime
|
|
158
|
+
for it would destroy history with nothing left to notice by. `MaxDeletesPerRun` defaults to 5000 so a
|
|
159
|
+
first run against a long-neglected table cannot become an unbounded transaction; the run drains
|
|
160
|
+
oldest-first over successive runs and reports `ReachedCap: true` when it stopped at the ceiling rather
|
|
161
|
+
than because it was finished.
|
|
136
162
|
|
|
137
163
|
### CronExpressionHelper
|
|
138
164
|
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Driver for the bounded action-execution-log purge.
|
|
3
|
+
* @module @memberjunction/scheduling-engine
|
|
4
|
+
*/
|
|
5
|
+
import { BaseScheduledJob, ScheduledJobExecutionContext } from '../BaseScheduledJob.js';
|
|
6
|
+
import { UserInfo, ValidationResult } from '@memberjunction/core';
|
|
7
|
+
import { MJActionExecutionLogEntity, MJScheduledJobEntity } from '@memberjunction/core-entities';
|
|
8
|
+
import { NotificationContent, ScheduledJobConfiguration, ScheduledJobResult } from '@memberjunction/scheduling-base-types';
|
|
9
|
+
/** How many rows one run will delete before stopping, when the job does not say. */
|
|
10
|
+
export declare const DEFAULT_MAX_DELETES_PER_RUN = 5000;
|
|
11
|
+
/** Optional configuration (stored in `ScheduledJob.Configuration`). Every field is optional. */
|
|
12
|
+
export interface ActionLogRetentionJobConfiguration extends ScheduledJobConfiguration {
|
|
13
|
+
/**
|
|
14
|
+
* Lifetime, in days, for log rows that carry no retention of their own.
|
|
15
|
+
*
|
|
16
|
+
* Omitted means those rows are kept indefinitely. That is the deliberate default: a NULL
|
|
17
|
+
* retention is what the schema calls "indefinite", and a purge job that silently supplied a
|
|
18
|
+
* number would delete history nobody agreed to lose.
|
|
19
|
+
*/
|
|
20
|
+
DefaultRetentionDays?: number;
|
|
21
|
+
/** Ceiling on rows deleted per run. Defaults to {@link DEFAULT_MAX_DELETES_PER_RUN}. */
|
|
22
|
+
MaxDeletesPerRun?: number;
|
|
23
|
+
}
|
|
24
|
+
/** One retention bucket: every log row with this lifetime expires before {@link Cutoff}. */
|
|
25
|
+
export type RetentionBucket = {
|
|
26
|
+
RetentionDays: number;
|
|
27
|
+
Cutoff: Date;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Turns the distinct retention values present into the buckets a purge query needs.
|
|
31
|
+
*
|
|
32
|
+
* Bucketing rather than per-row date math is what keeps this a small number of indexable range
|
|
33
|
+
* queries instead of a scan: retention is stamped from the action, so the distinct set is roughly
|
|
34
|
+
* "one per configured action", not one per log row. Pure and exported so the arithmetic is testable
|
|
35
|
+
* without a clock or a database.
|
|
36
|
+
*
|
|
37
|
+
* @param now the reference instant, passed in rather than read, so a test can pin it.
|
|
38
|
+
*/
|
|
39
|
+
export declare function BuildRetentionBuckets(retentionDays: readonly number[], now: Date): RetentionBucket[];
|
|
40
|
+
/**
|
|
41
|
+
* Purges expired `MJ: Action Execution Logs` rows, bounded per run.
|
|
42
|
+
*
|
|
43
|
+
* **Retention is decided at write time, not here.** `StartActionLog` stamps each row's
|
|
44
|
+
* `RetentionPeriod` from its action's, so this job reads only the row's own value — which is what
|
|
45
|
+
* makes an edit to `Action.RetentionPeriod` a going-forward change rather than a retroactive
|
|
46
|
+
* deletion of history written under the previous policy. A row with NULL retention is kept forever
|
|
47
|
+
* unless the job is explicitly configured with `DefaultRetentionDays`.
|
|
48
|
+
*
|
|
49
|
+
* **Deletion goes through `BaseEntity.Delete()`, one row at a time.** A `DELETE` statement would be
|
|
50
|
+
* faster and is a sanctioned use of raw DML in principle — but only for an entity that has opted in
|
|
51
|
+
* via `AllowDirectSQLDelete`, and this one has not. Honouring the platform's own gate matters more
|
|
52
|
+
* here than throughput, because the job is bounded anyway: the cap exists so a first run against a
|
|
53
|
+
* long-neglected table cannot become an unbounded transaction, and raising it is a configuration
|
|
54
|
+
* change rather than a code change.
|
|
55
|
+
*
|
|
56
|
+
* Opt-in like every other maintenance driver: shipping the job type activates nothing until someone
|
|
57
|
+
* creates a `MJ: Scheduled Job` of this type with a cron expression.
|
|
58
|
+
*/
|
|
59
|
+
export declare class ActionLogRetentionScheduledJobDriver extends BaseScheduledJob {
|
|
60
|
+
Execute(context: ScheduledJobExecutionContext): Promise<ScheduledJobResult>;
|
|
61
|
+
/**
|
|
62
|
+
* The expired rows, oldest first, capped at `maxDeletes`.
|
|
63
|
+
*
|
|
64
|
+
* Oldest-first is not cosmetic: a capped run that took an arbitrary slice would leave the same
|
|
65
|
+
* ancient rows behind every night while deleting newer ones, so the backlog would never drain.
|
|
66
|
+
*/
|
|
67
|
+
protected findExpiredLogs(config: ActionLogRetentionJobConfiguration, maxDeletes: number, user: UserInfo): Promise<MJActionExecutionLogEntity[]>;
|
|
68
|
+
/**
|
|
69
|
+
* The WHERE clause selecting expired rows, or null when nothing can expire.
|
|
70
|
+
*
|
|
71
|
+
* Returning null rather than a clause that matches nothing is deliberate — it lets the caller
|
|
72
|
+
* skip the query entirely on an instance where no action has ever configured retention, which is
|
|
73
|
+
* the common case and should cost nothing nightly.
|
|
74
|
+
*/
|
|
75
|
+
protected buildExpiredFilter(config: ActionLogRetentionJobConfiguration, user: UserInfo): Promise<string | null>;
|
|
76
|
+
/**
|
|
77
|
+
* The retention lifetimes actually in use, read from the actions that stamped them.
|
|
78
|
+
*
|
|
79
|
+
* Read from `MJ: Actions` rather than by scanning the log for distinct values, because the log
|
|
80
|
+
* is the large table and the actions table is not — and the two agree by construction, since the
|
|
81
|
+
* stamp comes from here.
|
|
82
|
+
*/
|
|
83
|
+
protected distinctRetentionDays(user: UserInfo): Promise<number[]>;
|
|
84
|
+
/**
|
|
85
|
+
* Deletes the given rows, counting rather than aborting on a failure.
|
|
86
|
+
*
|
|
87
|
+
* One bad row — a FK an extension added, a permission gap — must not strand the rest of the
|
|
88
|
+
* purge behind it every night. The count is reported so the failure is visible.
|
|
89
|
+
*/
|
|
90
|
+
protected deleteBounded(rows: MJActionExecutionLogEntity[]): Promise<{
|
|
91
|
+
Deleted: number;
|
|
92
|
+
Failed: number;
|
|
93
|
+
}>;
|
|
94
|
+
ValidateConfiguration(schedule: MJScheduledJobEntity): ValidationResult;
|
|
95
|
+
FormatNotification(context: ScheduledJobExecutionContext, result: ScheduledJobResult): NotificationContent;
|
|
96
|
+
/**
|
|
97
|
+
* Tolerant parse — the purge needs no configuration, so empty/missing JSON yields defaults.
|
|
98
|
+
*
|
|
99
|
+
* Named apart from the base's `parseConfiguration`, which throws on an empty Configuration
|
|
100
|
+
* because most job types genuinely require one. This job's every setting is optional, and a job
|
|
101
|
+
* that refused to run because nobody filled in a box would be a retention policy that quietly
|
|
102
|
+
* never applies.
|
|
103
|
+
*/
|
|
104
|
+
private readConfiguration;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=ActionLogRetentionScheduledJobDriver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionLogRetentionScheduledJobDriver.d.ts","sourceRoot":"","sources":["../../src/drivers/ActionLogRetentionScheduledJobDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAIH,QAAQ,EAGR,gBAAgB,EACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACjG,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAE3H,oFAAoF;AACpF,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAEhD,gGAAgG;AAChG,MAAM,WAAW,kCAAmC,SAAQ,yBAAyB;IACjF;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,4FAA4F;AAC5F,MAAM,MAAM,eAAe,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,IAAI,CAAA;CAAE,CAAC;AAEtE;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,eAAe,EAAE,CAMpG;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBACa,oCAAqC,SAAQ,gBAAgB;IACzD,OAAO,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuBxF;;;;;OAKG;cACa,eAAe,CAC3B,MAAM,EAAE,kCAAkC,EAC1C,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,QAAQ,GACf,OAAO,CAAC,0BAA0B,EAAE,CAAC;IAyBxC;;;;;;OAMG;cACa,kBAAkB,CAAC,MAAM,EAAE,kCAAkC,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAkBtH;;;;;;OAMG;cACa,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAiBxE;;;;;OAKG;cACa,aAAa,CAAC,IAAI,EAAE,0BAA0B,EAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAiBxG,qBAAqB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,gBAAgB;IAoBvE,kBAAkB,CAAC,OAAO,EAAE,4BAA4B,EAAE,MAAM,EAAE,kBAAkB,GAAG,mBAAmB;IAwBjH;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;CAU5B"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Driver for the bounded action-execution-log purge.
|
|
3
|
+
* @module @memberjunction/scheduling-engine
|
|
4
|
+
*/
|
|
5
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
6
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
7
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
8
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
9
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
10
|
+
};
|
|
11
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
12
|
+
import { BaseScheduledJob } from '../BaseScheduledJob.js';
|
|
13
|
+
import { LogError, Metadata, RunView, ValidationErrorInfo, ValidationErrorType, ValidationResult, } from '@memberjunction/core';
|
|
14
|
+
/** How many rows one run will delete before stopping, when the job does not say. */
|
|
15
|
+
export const DEFAULT_MAX_DELETES_PER_RUN = 5000;
|
|
16
|
+
/**
|
|
17
|
+
* Turns the distinct retention values present into the buckets a purge query needs.
|
|
18
|
+
*
|
|
19
|
+
* Bucketing rather than per-row date math is what keeps this a small number of indexable range
|
|
20
|
+
* queries instead of a scan: retention is stamped from the action, so the distinct set is roughly
|
|
21
|
+
* "one per configured action", not one per log row. Pure and exported so the arithmetic is testable
|
|
22
|
+
* without a clock or a database.
|
|
23
|
+
*
|
|
24
|
+
* @param now the reference instant, passed in rather than read, so a test can pin it.
|
|
25
|
+
*/
|
|
26
|
+
export function BuildRetentionBuckets(retentionDays, now) {
|
|
27
|
+
const distinct = [...new Set(retentionDays.filter((d) => Number.isFinite(d) && d > 0))].sort((a, b) => a - b);
|
|
28
|
+
return distinct.map((RetentionDays) => ({
|
|
29
|
+
RetentionDays,
|
|
30
|
+
Cutoff: new Date(now.getTime() - RetentionDays * 24 * 60 * 60 * 1000),
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Purges expired `MJ: Action Execution Logs` rows, bounded per run.
|
|
35
|
+
*
|
|
36
|
+
* **Retention is decided at write time, not here.** `StartActionLog` stamps each row's
|
|
37
|
+
* `RetentionPeriod` from its action's, so this job reads only the row's own value — which is what
|
|
38
|
+
* makes an edit to `Action.RetentionPeriod` a going-forward change rather than a retroactive
|
|
39
|
+
* deletion of history written under the previous policy. A row with NULL retention is kept forever
|
|
40
|
+
* unless the job is explicitly configured with `DefaultRetentionDays`.
|
|
41
|
+
*
|
|
42
|
+
* **Deletion goes through `BaseEntity.Delete()`, one row at a time.** A `DELETE` statement would be
|
|
43
|
+
* faster and is a sanctioned use of raw DML in principle — but only for an entity that has opted in
|
|
44
|
+
* via `AllowDirectSQLDelete`, and this one has not. Honouring the platform's own gate matters more
|
|
45
|
+
* here than throughput, because the job is bounded anyway: the cap exists so a first run against a
|
|
46
|
+
* long-neglected table cannot become an unbounded transaction, and raising it is a configuration
|
|
47
|
+
* change rather than a code change.
|
|
48
|
+
*
|
|
49
|
+
* Opt-in like every other maintenance driver: shipping the job type activates nothing until someone
|
|
50
|
+
* creates a `MJ: Scheduled Job` of this type with a cron expression.
|
|
51
|
+
*/
|
|
52
|
+
let ActionLogRetentionScheduledJobDriver = class ActionLogRetentionScheduledJobDriver extends BaseScheduledJob {
|
|
53
|
+
async Execute(context) {
|
|
54
|
+
const config = this.readConfiguration(context.Schedule);
|
|
55
|
+
const maxDeletes = config.MaxDeletesPerRun ?? DEFAULT_MAX_DELETES_PER_RUN;
|
|
56
|
+
try {
|
|
57
|
+
const expired = await this.findExpiredLogs(config, maxDeletes, context.ContextUser);
|
|
58
|
+
const { Deleted, Failed } = await this.deleteBounded(expired);
|
|
59
|
+
return {
|
|
60
|
+
Success: true,
|
|
61
|
+
Details: {
|
|
62
|
+
Deleted,
|
|
63
|
+
Failed,
|
|
64
|
+
Examined: expired.length,
|
|
65
|
+
// Says plainly that the run stopped at its ceiling rather than because it was
|
|
66
|
+
// finished — otherwise "Deleted: 5000" reads as "all clean" when it is not.
|
|
67
|
+
ReachedCap: expired.length >= maxDeletes,
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
return { Success: false, ErrorMessage: `Action-log purge failed: ${e instanceof Error ? e.message : String(e)}` };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The expired rows, oldest first, capped at `maxDeletes`.
|
|
77
|
+
*
|
|
78
|
+
* Oldest-first is not cosmetic: a capped run that took an arbitrary slice would leave the same
|
|
79
|
+
* ancient rows behind every night while deleting newer ones, so the backlog would never drain.
|
|
80
|
+
*/
|
|
81
|
+
async findExpiredLogs(config, maxDeletes, user) {
|
|
82
|
+
const filter = await this.buildExpiredFilter(config, user);
|
|
83
|
+
if (!filter) {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
// A scheduled maintenance sweep is a server-global task, so the global default provider is
|
|
87
|
+
// the correct source here (not a per-request/per-tenant provider).
|
|
88
|
+
const rv = RunView.FromMetadataProvider(Metadata.Provider); // global-provider-ok: scheduled maintenance sweep is a server-global task, not per-request/per-tenant
|
|
89
|
+
const result = await rv.RunView({
|
|
90
|
+
EntityName: 'MJ: Action Execution Logs',
|
|
91
|
+
ExtraFilter: filter,
|
|
92
|
+
OrderBy: 'StartedAt ASC',
|
|
93
|
+
MaxRows: maxDeletes,
|
|
94
|
+
ResultType: 'entity_object',
|
|
95
|
+
}, user);
|
|
96
|
+
if (!result.Success) {
|
|
97
|
+
throw new Error(result.ErrorMessage ?? 'could not read the action execution log');
|
|
98
|
+
}
|
|
99
|
+
return result.Results ?? [];
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* The WHERE clause selecting expired rows, or null when nothing can expire.
|
|
103
|
+
*
|
|
104
|
+
* Returning null rather than a clause that matches nothing is deliberate — it lets the caller
|
|
105
|
+
* skip the query entirely on an instance where no action has ever configured retention, which is
|
|
106
|
+
* the common case and should cost nothing nightly.
|
|
107
|
+
*/
|
|
108
|
+
async buildExpiredFilter(config, user) {
|
|
109
|
+
const now = new Date();
|
|
110
|
+
const clauses = [];
|
|
111
|
+
const buckets = BuildRetentionBuckets(await this.distinctRetentionDays(user), now);
|
|
112
|
+
for (const bucket of buckets) {
|
|
113
|
+
clauses.push(`(RetentionPeriod = ${bucket.RetentionDays} AND StartedAt < '${bucket.Cutoff.toISOString()}')`);
|
|
114
|
+
}
|
|
115
|
+
const fallback = config.DefaultRetentionDays;
|
|
116
|
+
if (fallback != null && Number.isFinite(fallback) && fallback > 0) {
|
|
117
|
+
const cutoff = new Date(now.getTime() - fallback * 24 * 60 * 60 * 1000);
|
|
118
|
+
clauses.push(`(RetentionPeriod IS NULL AND StartedAt < '${cutoff.toISOString()}')`);
|
|
119
|
+
}
|
|
120
|
+
return clauses.length > 0 ? clauses.join(' OR ') : null;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* The retention lifetimes actually in use, read from the actions that stamped them.
|
|
124
|
+
*
|
|
125
|
+
* Read from `MJ: Actions` rather than by scanning the log for distinct values, because the log
|
|
126
|
+
* is the large table and the actions table is not — and the two agree by construction, since the
|
|
127
|
+
* stamp comes from here.
|
|
128
|
+
*/
|
|
129
|
+
async distinctRetentionDays(user) {
|
|
130
|
+
const rv = RunView.FromMetadataProvider(Metadata.Provider); // global-provider-ok: scheduled maintenance sweep is a server-global task, not per-request/per-tenant
|
|
131
|
+
const result = await rv.RunView({
|
|
132
|
+
EntityName: 'MJ: Actions',
|
|
133
|
+
ExtraFilter: 'RetentionPeriod IS NOT NULL',
|
|
134
|
+
Fields: ['RetentionPeriod'],
|
|
135
|
+
ResultType: 'simple',
|
|
136
|
+
}, user);
|
|
137
|
+
if (!result.Success) {
|
|
138
|
+
throw new Error(result.ErrorMessage ?? 'could not read action retention settings');
|
|
139
|
+
}
|
|
140
|
+
return (result.Results ?? []).map((r) => Number(r.RetentionPeriod)).filter((d) => Number.isFinite(d));
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Deletes the given rows, counting rather than aborting on a failure.
|
|
144
|
+
*
|
|
145
|
+
* One bad row — a FK an extension added, a permission gap — must not strand the rest of the
|
|
146
|
+
* purge behind it every night. The count is reported so the failure is visible.
|
|
147
|
+
*/
|
|
148
|
+
async deleteBounded(rows) {
|
|
149
|
+
let Deleted = 0;
|
|
150
|
+
let Failed = 0;
|
|
151
|
+
for (const row of rows) {
|
|
152
|
+
if (await row.Delete()) {
|
|
153
|
+
Deleted++;
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
Failed++;
|
|
157
|
+
LogError(`ActionLogRetention: could not delete action execution log ${row.ID}: ` +
|
|
158
|
+
`${row.LatestResult?.CompleteMessage ?? 'unknown error'}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return { Deleted, Failed };
|
|
162
|
+
}
|
|
163
|
+
ValidateConfiguration(schedule) {
|
|
164
|
+
const result = new ValidationResult();
|
|
165
|
+
const config = this.readConfiguration(schedule);
|
|
166
|
+
for (const [field, value] of [
|
|
167
|
+
['DefaultRetentionDays', config.DefaultRetentionDays],
|
|
168
|
+
['MaxDeletesPerRun', config.MaxDeletesPerRun],
|
|
169
|
+
]) {
|
|
170
|
+
if (value != null && (typeof value !== 'number' || !Number.isFinite(value) || value <= 0)) {
|
|
171
|
+
result.Errors.push(new ValidationErrorInfo(`Configuration.${field}`, `${field} must be a positive number when provided`, value, ValidationErrorType.Failure));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
result.Success = result.Errors.length === 0;
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
177
|
+
FormatNotification(context, result) {
|
|
178
|
+
const deleted = result.Details?.['Deleted'] ?? 0;
|
|
179
|
+
const failed = result.Details?.['Failed'] ?? 0;
|
|
180
|
+
const reachedCap = result.Details?.['ReachedCap'] ?? false;
|
|
181
|
+
if (!result.Success) {
|
|
182
|
+
return {
|
|
183
|
+
Subject: `Action-log purge failed: ${context.Schedule.Name}`,
|
|
184
|
+
Body: `The scheduled action-log purge "${context.Schedule.Name}" failed.\n\nError: ${result.ErrorMessage ?? 'unknown'}`,
|
|
185
|
+
Priority: 'High',
|
|
186
|
+
Metadata: { Deleted: deleted, Failed: failed },
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
const capNote = reachedCap
|
|
190
|
+
? '\n\nThe run stopped at its per-run ceiling, so expired rows remain — it will continue on the next run.'
|
|
191
|
+
: '';
|
|
192
|
+
return {
|
|
193
|
+
Subject: `Action-log purge: ${deleted} expired row(s) removed`,
|
|
194
|
+
Body: `The scheduled action-log purge "${context.Schedule.Name}" removed ${deleted} expired log row(s)`
|
|
195
|
+
+ `${failed > 0 ? `, and could not remove ${failed}` : ''}.${capNote}`,
|
|
196
|
+
Priority: failed > 0 ? 'High' : deleted > 0 ? 'Normal' : 'Low',
|
|
197
|
+
Metadata: { Deleted: deleted, Failed: failed, ReachedCap: reachedCap },
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Tolerant parse — the purge needs no configuration, so empty/missing JSON yields defaults.
|
|
202
|
+
*
|
|
203
|
+
* Named apart from the base's `parseConfiguration`, which throws on an empty Configuration
|
|
204
|
+
* because most job types genuinely require one. This job's every setting is optional, and a job
|
|
205
|
+
* that refused to run because nobody filled in a box would be a retention policy that quietly
|
|
206
|
+
* never applies.
|
|
207
|
+
*/
|
|
208
|
+
readConfiguration(schedule) {
|
|
209
|
+
if (!schedule.Configuration) {
|
|
210
|
+
return {};
|
|
211
|
+
}
|
|
212
|
+
try {
|
|
213
|
+
return JSON.parse(schedule.Configuration);
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
return {};
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
ActionLogRetentionScheduledJobDriver = __decorate([
|
|
221
|
+
RegisterClass(BaseScheduledJob, 'ActionLogRetentionScheduledJobDriver')
|
|
222
|
+
], ActionLogRetentionScheduledJobDriver);
|
|
223
|
+
export { ActionLogRetentionScheduledJobDriver };
|
|
224
|
+
//# sourceMappingURL=ActionLogRetentionScheduledJobDriver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionLogRetentionScheduledJobDriver.js","sourceRoot":"","sources":["../../src/drivers/ActionLogRetentionScheduledJobDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentScheduledJobDriver.d.ts","sourceRoot":"","sources":["../../src/drivers/AgentScheduledJobDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAmF,MAAM,sBAAsB,CAAC;AAGzI,OAAO,EACH,kBAAkB,EAClB,mBAAmB,EAEtB,MAAM,uCAAuC,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBACa,uBAAwB,SAAQ,gBAAgB;IAC5C,OAAO,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"AgentScheduledJobDriver.d.ts","sourceRoot":"","sources":["../../src/drivers/AgentScheduledJobDriver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAmF,MAAM,sBAAsB,CAAC;AAGzI,OAAO,EACH,kBAAkB,EAClB,mBAAmB,EAEtB,MAAM,uCAAuC,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBACa,uBAAwB,SAAQ,gBAAgB;IAC5C,OAAO,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAqEjF,qBAAqB,CAAC,QAAQ,EAAE,GAAG,GAAG,gBAAgB;IA4CtD,kBAAkB,CACrB,OAAO,EAAE,4BAA4B,EACrC,MAAM,EAAE,kBAAkB,GAC3B,mBAAmB;YA8BR,SAAS;CAW1B"}
|
|
@@ -39,6 +39,22 @@ let AgentScheduledJobDriver = class AgentScheduledJobDriver extends BaseSchedule
|
|
|
39
39
|
const config = this.parseConfiguration(context.Schedule);
|
|
40
40
|
// Load the agent entity
|
|
41
41
|
const agent = await this.loadAgent(config.AgentID, context.ContextUser);
|
|
42
|
+
// A workflow SUBMITS and detaches — it returns a handle as soon as its steps are scheduled,
|
|
43
|
+
// not a result. A scheduled job that ran one would record success the moment the graph was
|
|
44
|
+
// written, before any of the work happened: the job history would show a clean run every
|
|
45
|
+
// time regardless of whether the workflow later succeeded, failed or stalled. That is worse
|
|
46
|
+
// than not running it, because it looks like it worked.
|
|
47
|
+
//
|
|
48
|
+
// Refused here rather than at submission because this is where the caller's expectation
|
|
49
|
+
// lives: the job expects a completed unit of work, and nothing downstream of this point can
|
|
50
|
+
// supply one until an await path exists.
|
|
51
|
+
if ((agent.Type ?? '').trim().toLowerCase() === 'flow') {
|
|
52
|
+
const message = `'${agent.Name}' is a workflow and cannot be run on a schedule yet. A workflow returns ` +
|
|
53
|
+
`as soon as its steps are scheduled, so this job would report success before any of the ` +
|
|
54
|
+
`work had happened. Schedule the steps individually, or start the workflow by hand.`;
|
|
55
|
+
this.log(message);
|
|
56
|
+
return { Success: false, ErrorMessage: message, Details: { AgentID: config.AgentID } };
|
|
57
|
+
}
|
|
42
58
|
// Verbose-only: the engine's always-on "▶️ Starting / ✅ Completed" pair already frames this
|
|
43
59
|
// run. This per-agent detail is redundant noise on routine (often no-op) scheduled runs.
|
|
44
60
|
this.log(`Executing agent: ${agent.Name}`, true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentScheduledJobDriver.js","sourceRoot":"","sources":["../../src/drivers/AgentScheduledJobDriver.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"AgentScheduledJobDriver.js","sourceRoot":"","sources":["../../src/drivers/AgentScheduledJobDriver.ts"],"names":[],"mappings":"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"}
|
package/dist/drivers/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* @module @memberjunction/scheduling-engine
|
|
4
4
|
*/
|
|
5
5
|
export * from './AgentScheduledJobDriver.js';
|
|
6
|
+
export * from './ActionLogRetentionScheduledJobDriver.js';
|
|
6
7
|
export * from './ActionScheduledJobDriver.js';
|
|
7
8
|
export * from './IntegrationSyncScheduledJobDriver.js';
|
|
8
9
|
export * from './IntegrationDiscoveryScheduledJobDriver.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/drivers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/drivers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wCAAwC,CAAC;AACvD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC"}
|
package/dist/drivers/index.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* @module @memberjunction/scheduling-engine
|
|
4
4
|
*/
|
|
5
5
|
export * from './AgentScheduledJobDriver.js';
|
|
6
|
+
export * from './ActionLogRetentionScheduledJobDriver.js';
|
|
6
7
|
export * from './ActionScheduledJobDriver.js';
|
|
7
8
|
export * from './IntegrationSyncScheduledJobDriver.js';
|
|
8
9
|
export * from './IntegrationDiscoveryScheduledJobDriver.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/drivers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/drivers/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wCAAwC,CAAC;AACvD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/scheduling-engine",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "6.1.0-edge.
|
|
4
|
+
"version": "6.1.0-edge.2",
|
|
5
5
|
"description": "MemberJunction: Scheduling Engine - core engine for executing scheduled jobs with plugin architecture",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -11,22 +11,22 @@
|
|
|
11
11
|
"author": "MemberJunction.com",
|
|
12
12
|
"license": "ISC",
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@memberjunction/actions": "6.1.0-edge.
|
|
15
|
-
"@memberjunction/actions-base": "6.1.0-edge.
|
|
16
|
-
"@memberjunction/ai-agents": "6.1.0-edge.
|
|
17
|
-
"@memberjunction/ai-core-plus": "6.1.0-edge.
|
|
18
|
-
"@memberjunction/ai-prompts": "6.1.0-edge.
|
|
19
|
-
"@memberjunction/core": "6.1.0-edge.
|
|
20
|
-
"@memberjunction/core-entities": "6.1.0-edge.
|
|
21
|
-
"@memberjunction/global": "6.1.0-edge.
|
|
22
|
-
"@memberjunction/integration-engine": "6.1.0-edge.
|
|
23
|
-
"@memberjunction/notifications": "6.1.0-edge.
|
|
24
|
-
"@memberjunction/record-set-processor": "6.1.0-edge.
|
|
25
|
-
"@memberjunction/scheduling-base-types": "6.1.0-edge.
|
|
26
|
-
"@memberjunction/scheduling-engine-base": "6.1.0-edge.
|
|
27
|
-
"@memberjunction/sqlserver-dataprovider": "6.1.0-edge.
|
|
28
|
-
"@memberjunction/task-graph": "6.1.0-edge.
|
|
29
|
-
"@memberjunction/templates": "6.1.0-edge.
|
|
14
|
+
"@memberjunction/actions": "6.1.0-edge.2",
|
|
15
|
+
"@memberjunction/actions-base": "6.1.0-edge.2",
|
|
16
|
+
"@memberjunction/ai-agents": "6.1.0-edge.2",
|
|
17
|
+
"@memberjunction/ai-core-plus": "6.1.0-edge.2",
|
|
18
|
+
"@memberjunction/ai-prompts": "6.1.0-edge.2",
|
|
19
|
+
"@memberjunction/core": "6.1.0-edge.2",
|
|
20
|
+
"@memberjunction/core-entities": "6.1.0-edge.2",
|
|
21
|
+
"@memberjunction/global": "6.1.0-edge.2",
|
|
22
|
+
"@memberjunction/integration-engine": "6.1.0-edge.2",
|
|
23
|
+
"@memberjunction/notifications": "6.1.0-edge.2",
|
|
24
|
+
"@memberjunction/record-set-processor": "6.1.0-edge.2",
|
|
25
|
+
"@memberjunction/scheduling-base-types": "6.1.0-edge.2",
|
|
26
|
+
"@memberjunction/scheduling-engine-base": "6.1.0-edge.2",
|
|
27
|
+
"@memberjunction/sqlserver-dataprovider": "6.1.0-edge.2",
|
|
28
|
+
"@memberjunction/task-graph": "6.1.0-edge.2",
|
|
29
|
+
"@memberjunction/templates": "6.1.0-edge.2",
|
|
30
30
|
"cron-parser": "^4.9.0",
|
|
31
31
|
"rxjs": "^7.8.2",
|
|
32
32
|
"uuid": "^13.0.0"
|