scheduler

Time-based job runner for Gingee apps (declarative schedules in `app.json`). Server gate: `gingee.json` → `scheduler.enabled` (default false). Multi-node: set scheduler.coordination.driver: "redis" and configure sibling scheduler.redis (same shape as queue.redis / cache.redis) so only one node runs each occurrence (tick locks) or only the elected leader runs jobs (strategy leader). Without coordination, enable the scheduler on at most one node for script/url targets (or use queue targets with redis queue). App config: `app.json` → `schedules` array. Each job needs a unique `name`, a `cron` expression, and a `target` of type script, url, or queue. Permissions: App must be granted scheduler to register any jobs. URL targets also require httpclient; queue targets also require queue. Defaults: overlap = skip, misfire = skip, timezone from job or server default (UTC). This module is engine-internal (not for sandboxed app require in v1).
Description:
  • Time-based job runner for Gingee apps (declarative schedules in `app.json`). Server gate: `gingee.json` → `scheduler.enabled` (default false). Multi-node: set scheduler.coordination.driver: "redis" and configure sibling scheduler.redis (same shape as queue.redis / cache.redis) so only one node runs each occurrence (tick locks) or only the elected leader runs jobs (strategy leader). Without coordination, enable the scheduler on at most one node for script/url targets (or use queue targets with redis queue). App config: `app.json` → `schedules` array. Each job needs a unique `name`, a `cron` expression, and a `target` of type script, url, or queue. Permissions: App must be granted scheduler to register any jobs. URL targets also require httpclient; queue targets also require queue. Defaults: overlap = skip, misfire = skip, timezone from job or server default (UTC). This module is engine-internal (not for sandboxed app require in v1).

Members

(inner, constant) appJobs :Map.<string, Map.<string, object>>

Description:
  • appName → Map(jobName → jobRuntime)
appName → Map(jobName → jobRuntime)
Type:
  • Map.<string, Map.<string, object>>

(inner) coordinator :object|null

Type:
  • object | null

(inner) globalConfigRef :object|null

Type:
  • object | null

(inner) serverConfig :Object

Type:
  • Object

(inner) serverLogger :object|null

Type:
  • object | null

Methods

(inner) getAdminStatus() → {object}

Description:
  • Admin/status snapshot for Glade.
Returns:
Type
object

(inner) initServer(config, logger, globalConfig)

Description:
  • Initialize server-level scheduler settings.
Parameters:
Name Type Description
config object | null | undefined from gingee.json → scheduler
logger object
globalConfig object full server config (for box/privileged apps)

(inner) listJobs(optsopt) → {Array.<object>}

Description:
  • List registered jobs (tests / Glade admin UI).
Parameters:
Name Type Attributes Description
opts object <optional>
Properties
Name Type Attributes Description
appName string <optional>
filter by app (substring match if filterPartial)
filterPartial boolean <optional>
Returns:
Type
Array.<object>

(async, inner) registerApp(app)

Description:
  • Register schedules for one app from app.config.schedules. No-op if server scheduler is disabled or app has no schedules.
Parameters:
Name Type Description
app object

(async, inner) reinitApp(appName, app)

Description:
  • Re-read app schedules after reload.
Parameters:
Name Type Description
appName string
app object

(async, inner) runNow(appName, jobName) → {Promise.<object>}

Description:
  • Force-run a registered job (tests / Glade "Run now"). Bypasses multi-node coordination so an operator can always trigger a run.
Parameters:
Name Type Description
appName string
jobName string
Returns:
result status snapshot
Type
Promise.<object>

(inner) shutdown()

Description:
  • Stop all scheduled jobs (server shutdown).

(inner) unregisterApp(appName)

Description:
  • Stop and remove all jobs for an app.
Parameters:
Name Type Description
appName string