resource-manager
Orientation scope
Source-only clone at
/Users/levander/coding/facekom-v2-clones/resource-manager, single commit36a1cb2on branchmaster. ~50 first-party files; small enough that nearly every source file was read line-by-line. See architecture-overview and sibling repos underrepos/.
1. Purpose & role in FaceKom
The Resource Manager is a capacity-protection / admission-control service: it places incoming jobs into a FIFO queue and only “activates” them (assigns a processing slot) when capacity is available, protecting downstream FaceKom services from overload (README.md:1-3: “a service designed to protect the system’s capacity by placing incoming jobs into a queue”).
It exposes no HTTP API. Its entire public surface is a set of RabbitMQ RPC endpoints, one set per configured resource (e.g. identification). Clients ask “do you have capacity?”, “enqueue this job”, “what’s my status?”, “free my slot”, etc. (README.md:96-327, server.js:99-109).
package.json:2-6— nameresource_manager,"description": "Resource Manager","author": "FaceKom","main": "server.js".- The default configured resource is
identification(config/dev.json:20-35), strongly implying this guards the identification flow’s concurrency in FaceKom.
"Resource" terminology
A resource = a named capacity pool (queue + slot set). Each resource has its own RabbitMQ queues, its own in-memory FIFO + slot handler, and its own DB rows. Resources are declared in config under
resourceList(config/dev.json:20-35,server/service/ResourceService.js:10-13).
2. Tech stack & runtime
| Aspect | Value | Source |
|---|---|---|
| Language | JavaScript (CommonJS, require) | all server/**/*.js; eslint.config.mjs:18 sets sourceType: 'script' |
| Runtime | Node.js >=20.18.0 (engines) | package.json:16-18 |
| CI Node | Node 22, Ubuntu jammy | .travis.yml:5-7 |
| Package manager | Yarn 1.22.22 (classic; yarn.lock 202 KB present) | .travis.yml:25, test/scripts/travis.sh:6 |
| Messaging lib | @techteamer/mq ^7.2.0 (RabbitMQ RPC + ConnectionPool) | package.json:39 |
| ORM / DB | Sequelize ^6.37.5 + pg ^8.7.3 → PostgreSQL | package.json:47-49; config/dev.json:4 postgres://... |
| CLI libs | commander ^13.1.0, @inquirer/prompts ^7.2.0 | package.json:38,40 |
| Config | getconfig ^4.5.0, dotenv, dot-object, ms | package.json:41-46 |
| JWT | jsonwebtoken ^9.0.2 (queue tickets) | package.json:44 |
| Logging | log4js ^6.6.0 | package.json:45 |
| Lint | ESLint 9 flat config, eslint-config-standard base | eslint.config.mjs, package.json:24 |
| Test | Jest ^29.7.0, jest-environment-node | package.json:33-34 |
No TypeScript despite the dependency
typescriptand@typescript-eslint/parserare devDependencies and the ESLint flat config usestsParser(eslint.config.mjs:2,15), but all runtime code is plain CommonJS.js. There is notsconfig.jsonand no compile step. The TS parser is purely for linting.
3. Build & run
Entrypoints
main/ service:server.js(package.json:6). Bootstraps process settings + listeners, DB connection, RabbitMQ, services, queues, slot handlers, then emitssystem.start(server.js:134-148).bin/helper scripts — see §5.- There is no
buildstep and nostartscript inpackage.json. The service is started directly withnode server.js(see Supervisor confs below).
package.json “scripts” (verbatim — package.json:7-11)
| Script | Command | What it does |
|---|---|---|
test | jest --config ./test/jest.config.js --runInBand | Runs the Jest unit suite serially (--runInBand). Config at test/jest.config.js. |
lint | eslint . && echo 'npm run lint: OK' | Lints the whole repo; prints OK on success. |
lint:fix | eslint . --fix | Lints and auto-fixes. |
No
startscriptDo not expect
npm start/yarn start. Start the service withnode server.js. Supervisor is the production process manager.
Start command(s) (Supervisor)
Two near-identical supervisor configs run command=node server.js under %(ENV_DOCKER_USER)s, with exitcodes=0,2 and autorestart=true:
supervisor_resource_manager_dev.conf—environment=RUNTIME_ENV=devsupervisor_resource_manager_docker.conf—environment=RUNTIME_ENV=docker
Both log to /var/log/resource_manager.log, stopsignal=TERM, stopwaitsecs=5 (supervisor_resource_manager_dev.conf:1-23, supervisor_resource_manager_docker.conf:1-23).
No Dockerfile in this repo
Verified by full file listing: there is no
Dockerfileand nodocker-compose.ymlpresent. There is aconfig/docker.jsonand asupervisor_resource_manager_docker.conf, so containerization is expected to be provided externally (a parent/build repo), with this service slotted in. (/Users/levander/coding/facekom-v2-clones/resource-managerdir listing.)
Config selection (getconfig)
getconfig chooses config/<NODE_ENV>.json (or RUNTIME_ENV). Present env files: config/dev.json, config/docker.json. CI copies config/dev.json → config/travisci.json (.travis.yml:24). config.js:56-59 special-cases NODE_ENV === 'travisci' to force amqp://localhost:5672.
4. Top-level structure
| Path | Role | Verified |
|---|---|---|
server.js | Service entrypoint / bootstrap orchestration | read server.js |
config.js | getconfig loader + helpers (get/has/getSecureConfig/TTL→ms) | read config.js |
config/ | Env JSON configs: dev.json, docker.json | read both |
bin/db/, bin/queue/ | First-party CLI helper scripts (see §5) | read all 4 |
server/bootstrap/ | Process settings, signal listeners, DB + RabbitMQ connection setup | read all 4 |
server/classes/ | Core data structures: Queue.js (FIFO), ResourceHandler.js (slots) | read both |
server/service/ | ResourceService, SyncService, TokenService | read all 3 |
server/queue/rpc_server/ | 8 RPC server handlers (the public API) | read all 8 |
server/queue/rpc_client/ | QueueHandlerRpcClient (used by the CLI) | read |
server/constants/ | jobStatus.js (STATUS enum) | read |
server/db/ | Sequelize instance, models, queue model, migrationHelpers.js | read sequelize/models/model |
server/service_container.js | Global singleton container + ServiceBus event emitter | read |
server/logger.js | log4js logger setup | read |
server/child_process_promise.js | Promisified exec/execFile | read |
db/migrate/, db/beforeMigrate/ | Sequelize migration dirs — empty (only .gitkeep) | listed |
test/ | Jest config, scripts, test/unit/** suite | read config + sampled |
maintenance/, security/ | Dated dependency-update & yarn audit logs | read 2026-05-04.md of each |
.sequelizerc, .sequelizercBefore, .sequelize-config.js | Sequelize CLI wiring (migrate vs beforeMigrate paths) | read all 3 |
eslint.config.mjs, sonar-project.properties, .travis.yml, build.ignore, changelog.md | Tooling/CI/build-exclusion/changelog | read all |
.gitignorevsbuild.ignore
.gitignoreis 219 bytes / 21 lines and ignores.idea/*,.vscode/*,node_modules/*,/npm-debug.log*,/yarn-error.log,/logs/*(except.gitkeep),config/local.json,yarn-offline-cache, archive artifacts (*.tar,*.gz,*.7z,*.rar,*.zip), and/test/coverage/*(except.gitkeep) (.gitignore:1-21).build.ignore(not.dockerignore) lists what to strip from production runtime:config/dev.json,test/,*travis*,*eslint*,*_dev.conf,.git/(build.ignore:1-13).
5. First-party bin/ scripts (each read)
All paths under bin/ (NOT node_modules/**/bin). Each is #!/usr/bin/env node.
bin/db/sync (bin/db/sync:1-96)
Commander CLI to synchronize the DB schema via Sequelize. Options: -f/--force (drops/recreates — prompts confirmation unless --noninteractive), -m/--migrate (runs beforeMigrate → sequelize.sync → migrate), -u/--manualCredentials (prompts username/password → SEQUELIZEUSER/SEQUELIZEPASS). Without --migrate it only sequelize.sync(options). Exits 0 on success, 2 on error. This script is invoked by the boot sequence (server/bootstrap/connection/db.js:21).
bin/db/truncate (bin/db/truncate:1-94)
Commander CLI to truncate all tables (cascade: true) inside a transaction, after a confirmation prompt. Supports -u/--manualCredentials. excludedModels is empty (bin/db/truncate:19), so it truncates everything. Has a MySQL SET FOREIGN_KEY_CHECKS = 0 branch (dead for the Postgres deployment).
bin/db/lint.js (bin/db/lint.js:1-14)
Not a DB tool — a no-op stub that only console.logs an ESLint workaround note (“No files matching the pattern ./bin/db”). Exists so ESLint doesn’t choke on the bin/db directory pattern.
bin/queue/queue-query.js (bin/queue/queue-query.js:1-192)
Operator CLI (“A simple CLI to query Queue and Slot”) that connects to RabbitMQ and drives QueueHandlerRpcClient against the running service’s rm-queue-handler RPC. Subcommands:
config [-q <queueName>]— list active queues, or print one queue’s configuration viagetQueueConfiguration(:31-62).slot-list <queueName> [-c <count>]— list jobs currently occupying slots (oldest first) + slot/queue stats viagetSlotJobList(:64-94).slot-clear <queueName> [-c <count>]— release N (or all) slot jobs after confirmation, viaclearSlot(:96-123).job-delete <queueName> <jobId...>— delete one or more jobs from queue+slot viadeleteJob(:125-145).
<queueName> choices are restricted to resourceService.getActiveResourceNameList() (:19,68,99,128).
CLI requires a running service
queue-query.jsis an RPC client, not a direct DB/in-memory tool. It callsrm-queue-handler(:158), which only exists whenserver.jsis running (server.js:89). It will hang/timeout if the service is down.
6. Key modules / services / entities
Boot sequence (server.js:134-148)
process-settings(TZ=UTC, optional self-signed TLS) →process-listeners(true)(signal/exit handlers).bootstrap/connection/db('true')— authenticate Sequelize; ifdb.syncOnStart, run beforeMigrate →./bin/db/sync→ migrate (server/bootstrap/connection/db.js:15-31).bootstrap/connection/rabbitmq('default')— build@techteamer/mqConnectionPoolfromconfig.queue.setupService()— instantiateResourceService,SyncService,TokenServiceintoserviceContainer.service.setupJobQueue()— oneQueue(FIFO) per active resource (server.js:23-35).setupResourceHandler()— oneResourceHandlerper resource (server.js:37-54).setupQueue()— register all RPC servers per resource + the globalrm-queue-handler; connect the pool (server.js:56-117).initManager()—resourceHandler.init()per resource (load from DB, restore slots, start timers) (server.js:119-132).- Emit
system.start. On any failure:logger.error+process.exit(2).
server/classes/Queue.js — FifoQueue (Queue.js:1-343)
In-memory FIFO with a backing Map (queueMap id→job) and an order array (queue). Key methods: enqueue(data) (creates UUID job, status WAIT, TTL expiry), dequeue() (pops next WAIT, marks expired ones EXPIRED, activates valid → ACTIVATED), get(id, refresh) (refreshes TTL for waiting jobs, expires stale), remove(id, status) (sets status, drops from order, keeps in map), delete(id) (full removal), garbageCollector() (deletes anything not WAIT/ACTIVATED), getSnapshot() (structuredClone for DB sync), getPosition(id) (waiting-ahead count). IDs via crypto.randomUUID() (:308-311).
server/classes/ResourceHandler.js — slot manager (ResourceHandler.js:1-323)
Owns the slot (a Map<jobId, expiry>) with capacity size (default 1000; from handlerOptions.size). Core: addJob(data) (enqueue then occupySlot), occupySlot() (if free capacity, dequeue → set slot expiry → status ACTIVATED), freeSlot(id, status) (remove from slot, set final status), removeJob(id, status), hasFreeCapacity() (slot.size < size), getStatistic()/getSlotUsage(). Two timers started in run():
- occupy/stall loop every 2000 ms (hardcoded):
_removeStalledJob()(slot TTL exceeded → statusSTALLED) thenoccupySlot()(:237-243). - storage manager every
storageManagerInterval(default 10000): ifsyncenabled,SyncService.syncToDb; alwaysgarbageCollector()(:231-235,248-258).
init() → load() (if sync, restore ACTIVATED/WAIT jobs from DB) then re-populate slots from ACTIVATED jobs, then run() (:209-220).
Slot occupy interval is hardcoded to 2000 ms
setInterval(... , 2000)atResourceHandler.js:243.managerInterval/storageManagerIntervalonly controls the sync+GC loop, not the slot-activation tick. Also notehandlerOptions.managerInterval(config) vsslotOpts.storageManagerInterval(constructor key) — see gotcha §10.
server/service/ResourceService.js (ResourceService.js:1-47)
Config-reader for resources: getRegisteredResourceNameList(), getActiveResourceNameList() (filters active === true), getConfig(name), assertResource(name) (throws if not registered/active).
server/service/SyncService.js (SyncService.js:1-88)
Persists the in-memory queue to Postgres. syncToDb(queueName, snapshot) — in a transaction, bulkCreate with updateOnDuplicate: ['data','status','expiry'] in windows of 100, then destroy rows whose ids are no longer in memory (Op.notIn). loadFromDb(queueName) — first deletes rows not in (ACTIVATED,WAIT), then returns those two statuses ordered by createdAt ASC. Window size default 100 (:5).
_splitIntoWindowignores itschunkSizearg
SyncService._splitIntoWindow(array, chunkSize)is called asthis._splitIntoWindow(...)with one arg and internally usesthis.window(100), notchunkSize(SyncService.js:21,79-85). Effective batch size is always 100.
server/service/TokenService.js (TokenService.js:1-73)
Signs/verifies queue tickets (JWT { jobId }) using jwt.secretKey + jwt.options. verify() returns structured { error: { title: 'EXPIRED_TOKEN' | 'INVALID_TOKEN', message } } for expired/invalid tokens rather than throwing.
server/constants/jobStatus.js (jobStatus.js:5-15)
Frozen STATUS enum: WAIT, ACTIVATED, EXPIRED, DELETED, FINISHED, FAILED, STALLED, TIMEOUT, ABANDONED.
RPC servers — the public API (server/queue/rpc_server/*, wired in server.js:99-109)
Per active resource <name>, all extend @techteamer/mq RPCServer with prefetchCount: 20:
| RPC server | Queue name | Behaviour | Source |
|---|---|---|---|
ResourceCapacityRpcServer | rm-has-free-capacity-<name> | { hasCapacity } via hasFreeCapacity() | ResourceCapacityRpcServer.js |
EnterQueueRpcServer | rm-enter-queue-<name> | Dedups (ALREADY_IN_QUEUE/ALREADY_IN_SLOT) then addJob; returns jobId/data/status/slotNumber; adds queueTicket JWT when jwtFormat & status WAIT | EnterQueueRpcServer.js |
ResourceQueueStatusRpcServer | rm-get-status-<name> | Resolve jobId from jobId or verified queueTicket; return status + waitingAheadCount + slotNumber; NOT_FOUND if missing | ResourceQueueStatusRpcServer.js |
LeaveQueueRpcServer | rm-leave-queue-<name> | jobId from ticket/id; removeJob → REMOVED/FAILED/NOT_FOUND | LeaveQueueRpcServer.js |
FreeSlotRpcServer | rm-free-slot-<name> | Requires jobId + valid status (must be in STATUS); freeSlot → { success } | FreeSlotRpcServer.js |
RequeueRpcServer | rm-requeue-<name> | Remove from queue (if WAIT) or free slot (if ACTIVATED) using reason, then re-addJob; re-issues ticket | RequeueRpcServer.js |
StatisticRpcServer | rm-statistic-<name> | Returns getStatistic() (queueCount, slotCount, slotUsage) | StatisticRpcServer.js |
QueueHandlerRpcServer | rm-queue-handler (single, global) | Actions: getQueueConfiguration, clearSlot, getSlotJobList, deleteJob — used by queue-query CLI | QueueHandlerRpcServer.js |
QueueHandlerRpcClient exposes those 4 actions with a 30 s default timeout (QueueHandlerRpcClient.js:1-22). Full request/response contracts are documented in README.md:96-327.
Entity / DB model — queue table (server/db/model/queue.js:3-42)
Sequelize model queue: queueName (STRING, NOT NULL), id (UUID, PK), expiry (DATE, nullable), status (STRING, NOT NULL, validated against STATUS), data (JSON, NOT NULL). Unique composite index on ['id','queueName']. Registered via server/db/models.js → { Queue }.
7. Configuration
Loader — config.js (config.js:1-203)
- Uses
getconfig; adds a customTypes.filereader (config.js:13-21) and rich SyntaxError reporting for malformed JSON (config.js:24-54, exits2). convertTTLsToMs(config.js:71-84): recursively converts any stringttlfield to ms viams(). So config"5s"/"5m"become numbers at load (matchesREADME.md:62).- Appends
.<RESOURCE_MANAGER_BUILD_NUMBER>toconfig.versionfrom.envif present (config.js:62-69). - Helpers:
config.get(path, default),config.has(path),config.traceConfig(),config.getSecureConfig()(maskssecurity.sensitiveConfigFieldsasSECRET, supportsa.*.bwildcards —config.js:164-192). - DB CA cert: if
db.options.dialectOptions.ssl.cais a path under/workspace/, reads the file (config.js:194-201).
Config schema (from config/dev.json + README.md)
version(string).db:{ url, syncOnStart }(or{ database, username, password, options }—.sequelize-config.js,server/db/sequelize.js:27-33).queue.default:{ url: amqps://..., options: { rejectUnauthorized, cert, key, ca }, rpcTimeoutMs, rpcQueueMaxSize }. Per-resource overrides allowed underqueue.<resourceName>; queues withoptional: truedon’t crash the process on disconnect (rabbitmq.js:69-78).resourceList.<name>:{ active, jwtFormat, queueOptions: { name, ttl }, handlerOptions: { size, ttl, sync, managerInterval } }(config/dev.json:20-35,README.md:28-71).jwt:{ secretKey, options: { algorithm: HS512, expiresIn } }(config/dev.json:36-42).
Hardcoded secrets / TLS in committed config
config/dev.json:37ships a real-lookingjwt.secretKeyUUID andrejectUnauthorized: false(config/dev.json:11).config/docker.json:22hassecretKey: "TODO"and an emptyresourceList: {}(so a vanilla docker config starts with no active resources / no RPC endpoints). TLS cert paths point at/workspace/vuer_mq_cert/...— see architecture-overview for the shared MQ cert convention.
Env vars (referenced in code)
NODE_ENV/RUNTIME_ENV— getconfig env selection;'travisci'triggers local AMQP override (config.js:56).SEQUELIZEUSER/SEQUELIZEPASS— override DB creds (.sequelize-config.js:14-22,bin/db/sync:53-54).RESOURCE_MANAGER_BUILD_NUMBER(from.env) — appended to version (config.js:64).TZforced toEtc/UTC;NODE_TLS_REJECT_UNAUTHORIZED='0'whensettings.allowSelfSignedCerts(process-settings.js:4-8).APP_HOME,DOCKER_USER— supervisor env (supervisor_resource_manager_*.conf).
No AJV / JSON-schema validation
Config is not validated by AJV or a JSON schema. The only structural validation is the Sequelize model
statusvalidator (server/db/model/queue.js:20-26) and runtime guards inside RPC servers. (Searched: noajv/schema files in the tree.)
8. Tests
- Framework: Jest 29,
jest-environment-node(package.json:33-34). - Config:
test/jest.config.js—rootDir= repo root, ignoresnode_modules/web/yarn-offline-cache, coveragelcovonlyintotest/coverage/,coverageProvider: 'v8',testTimeout: 30000(test/jest.config.js:1-15). - Location:
test/unit/**— service/class tests (config.test.js,Queue.test.js,ResourceHandler.test.js,ResourceService.test.js,SyncService.test.js,TokenService.test.js,service_container.test.js) andtest/unit/queue/*for all 8 RPC servers. Tests mockservice_container(e.g.EnterQueueRpcServer.test.js:1-20). - Run:
yarn test(→jest --config ./test/jest.config.js --runInBand,package.json:8). - CI:
test/scripts/travis.sh—yarn install --frozen-lockfile,yarn audit(fails only on critical, exit ≥16),yarn test,git diff --exit-code(no uncommitted changes), and an executable-bit guard restricting+xfiles tobin/,test/scripts/, etc. (test/scripts/travis.sh:1-27). Followed by SonarCloud scan (.travis.yml:30-32,sonar-project.properties).
No integration/e2e tests in this clone
Only
test/unit/**exists here.changelog.mdmentions “integration test fixes”, andeslint.config.mjsreferencesweb/,client/,customization/, Puppeteer globals — none of which are present in this repo, suggesting a shared eslint config template across FaceKom repos.
9. Dependencies on other FaceKom services
Evidenced in code/config:
- RabbitMQ (mandatory) via
@techteamer/mqConnectionPool. Default connectionamqps://localhost:5671with mutual TLS using/workspace/vuer_mq_cert/{client,ca}certs (config/dev.json:7-18,rabbitmq.js:62-84). If a non-optional connection closes, the process exits 2 (rabbitmq.js:71-78). This is the shared FaceKom MQ broker — see architecture-overview.- Server (this service provides): per-resource queues
rm-has-free-capacity-*,rm-enter-queue-*,rm-get-status-*,rm-leave-queue-*,rm-free-slot-*,rm-requeue-*,rm-statistic-*, and globalrm-queue-handler(server.js:89,100-106). - Client (this service consumes): only its own
rm-queue-handler(from thequeue-queryCLI,bin/queue/queue-query.js:158). No outbound RPC calls to other services were found.
- Server (this service provides): per-resource queues
- PostgreSQL (mandatory) via Sequelize for queue persistence (table
queue). Connection fromdb.url/db.database(config/dev.json:4,server/db/sequelize.js:27-33). Pool max 100 (sequelize.js:18). - No Redis, no direct HTTP calls to other services found in the tree.
Consumers are external
The RPC contracts in
README.mdare meant to be called by other FaceKom services (e.g. the identification flow asking for capacity / queue tickets). Those callers live in other repos — see architecture-overview / siblingrepos/docs. Not verifiable from this repo alone.
10. Verified gotchas (callouts)
Config key name mismatch:
managerIntervalvsstorageManagerIntervalConfig supplies
handlerOptions.managerInterval(config/dev.json:32,README.md:68), butResourceHandlerreadsthis.slotOpts.storageManagerInterval(ResourceHandler.js:37) and falls back to 10000 ms when undefined. With the shipped config, the storage-manager/sync interval is effectively the 10000 ms default regardless of themanagerInterval: 10000value (they coincidentally match indev.json). The CLI’sparseConfigeven prints it as “Storage Manager Interval” while readingmanagerInterval(bin/queue/queue-query.js:180). Treat these two names as a latent bug.
Slot activation latency is fixed at 2 s
Jobs are only promoted to slots by the 2000 ms
occupySlottimer (ResourceHandler.js:237-243) and synchronously insideaddJob(ResourceHandler.js:80-97).managerIntervaldoes not speed this up.
db.syncOnStartruns migrations +sequelize.syncon every boot
server/bootstrap/connection/db.js:15-31(driven byconfig.db.syncOnStart: truein both env files) runsbeforeMigrate→./bin/db/sync(which callssequelize.sync) →migrateat startup. Migration dirs are empty here, butsequelize.syncwill alter schema to match models. Be cautious pointing this at a shared/prod DB.
Non-optional RabbitMQ or DB failure kills the process
RabbitMQ connection close →
process.exit(2)(rabbitmq.js:76); any boot-step throw →process.exit(2)(server.js:144-147). Supervisor (autorestart=true,exitcodes=0,2) restarts it. Expect crash-loops if MQ/DB are unreachable.
getJob'srefreshparam is effectively ignored
ResourceHandler.getJob(id, refresh)callsthis.queue.get(id)without forwardingrefresh(ResourceHandler.js:130-142), soQueue.getalways uses its defaultrefresh = trueand refreshes the WAIT job’s TTL even when callers (e.g.QueueHandlerRpcServer.deleteJobpassingfalse,QueueHandlerRpcServer.js:76) intend not to.
Empty docker
resourceListStarting with
config/docker.jsonas-is yieldsresourceList: {}→ zero active resources → no per-resource RPC servers registered (onlyrm-queue-handler). A real deployment must supply its own resource config (config/docker.json:20).
Unverified / gaps
server/db/migrationHelpers.js— listed but not read line-by-line (migration dirs are empty, so it is currently unused at runtime). Structurally surveyed only.test/unit/**bodies — confirmed framework, layout, and mocking pattern by readingtest/jest.config.jsand samplingEnterQueueRpcServer.test.js:1-40; the other ~16 test files were inventoried by filename but not read in full.maintenance/2026-04-07.md,security/2026-04-07.md— not read (read only the2026-05-04.mdpair as representative); these are dated dependency/audit logs, not runtime code.yarn.lock(202 KB) — not read; transitive dependency internals intentionally out of scope.- External RPC consumers / orchestration / Dockerfile — live outside this repo; cannot be verified here. No Dockerfile exists in this clone.
- Git-LFS binaries — none present in this repo (no model weights/pointer files found in the file listing).
Sources
Files read in full unless noted:
package.json,README.md,server.js,config.js,changelog.mdeslint.config.mjs,.travis.yml,build.ignore,sonar-project.properties,.gitignore.sequelizerc,.sequelizercBefore,.sequelize-config.jssupervisor_resource_manager_dev.conf,supervisor_resource_manager_docker.confconfig/dev.json,config/docker.jsonbin/db/sync,bin/db/truncate,bin/db/lint.js,bin/queue/queue-query.jsserver/bootstrap/process-settings.js,server/bootstrap/process-listeners.js,server/bootstrap/connection/db.js,server/bootstrap/connection/rabbitmq.jsserver/service_container.js,server/logger.js,server/child_process_promise.jsserver/classes/Queue.js,server/classes/ResourceHandler.jsserver/service/ResourceService.js,server/service/SyncService.js,server/service/TokenService.jsserver/constants/jobStatus.jsserver/queue/rpc_server/{EnterQueue,QueueHandler,ResourceCapacity,FreeSlot,LeaveQueue,Requeue,ResourceQueueStatus,Statistic}RpcServer.jsserver/queue/rpc_client/QueueHandlerRpcClient.jsserver/db/model/queue.js,server/db/models.js,server/db/sequelize.jstest/jest.config.js,test/scripts/travis.sh,test/unit/queue/EnterQueueRpcServer.test.js(first 40 lines)maintenance/2026-05-04.md,security/2026-05-04.md- Directory listings of repo root,
bin/,db/migrate,db/beforeMigrate,test/coverage git -C ... log/branch(commit36a1cb2, branchmaster)