@openneuro/server 4.38.0-alpha.4 → 4.38.1
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openneuro/server",
|
|
3
|
-
"version": "4.38.
|
|
3
|
+
"version": "4.38.1",
|
|
4
4
|
"description": "Core service for the OpenNeuro platform.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "src/server.js",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"@elastic/elasticsearch": "8.13.1",
|
|
22
22
|
"@graphql-tools/schema": "^10.0.0",
|
|
23
23
|
"@keyv/redis": "^4.5.0",
|
|
24
|
-
"@openneuro/search": "^4.38.
|
|
24
|
+
"@openneuro/search": "^4.38.1",
|
|
25
25
|
"@sentry/node": "^8.25.0",
|
|
26
26
|
"@sentry/profiling-node": "^8.25.0",
|
|
27
27
|
"base64url": "^3.0.0",
|
|
@@ -88,5 +88,5 @@
|
|
|
88
88
|
"publishConfig": {
|
|
89
89
|
"access": "public"
|
|
90
90
|
},
|
|
91
|
-
"gitHead": "
|
|
91
|
+
"gitHead": "6d5949cde219e5019ec2043ca4e5ebdde6083fae"
|
|
92
92
|
}
|
|
@@ -169,3 +169,12 @@ export const checkAdmin = (userId, userInfo) =>
|
|
|
169
169
|
userId && userInfo.admin
|
|
170
170
|
? Promise.resolve(true)
|
|
171
171
|
: Promise.reject(states.ADMIN.errorMessage)
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Check if the user is a worker
|
|
175
|
+
* @param userInfo User context
|
|
176
|
+
*/
|
|
177
|
+
export const checkWorker = (userInfo) => {
|
|
178
|
+
if (userInfo?.worker) return true
|
|
179
|
+
else throw new Error("You must be a worker to make this request.")
|
|
180
|
+
}
|
|
@@ -46,6 +46,7 @@ import {
|
|
|
46
46
|
import { saveAdminNote } from "./datasetEvents"
|
|
47
47
|
import { createGitEvent } from "./gitEvents"
|
|
48
48
|
import { updateFileCheck } from "./fileCheck"
|
|
49
|
+
import { updateWorkerTask } from "./worker"
|
|
49
50
|
|
|
50
51
|
const Mutation = {
|
|
51
52
|
createDataset,
|
|
@@ -95,6 +96,7 @@ const Mutation = {
|
|
|
95
96
|
saveAdminNote,
|
|
96
97
|
createGitEvent,
|
|
97
98
|
updateFileCheck,
|
|
99
|
+
updateWorkerTask,
|
|
98
100
|
}
|
|
99
101
|
|
|
100
102
|
export default Mutation
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import WorkerTask from "../../models/worker-task"
|
|
2
|
+
import { checkWorker } from "../permissions"
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Update a worker task record
|
|
6
|
+
*
|
|
7
|
+
* This can be called for new tasks, or to update existing tasks.
|
|
8
|
+
*/
|
|
9
|
+
export const updateWorkerTask = async (obj, args, { userInfo }) => {
|
|
10
|
+
checkWorker(userInfo)
|
|
11
|
+
const { id, ...updateData } = args
|
|
12
|
+
|
|
13
|
+
// Don't allow null values to unset fields
|
|
14
|
+
const update = Object.fromEntries(
|
|
15
|
+
Object.entries(updateData).filter(([, value]) => value != null),
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
const task = await WorkerTask.findOneAndUpdate({ id }, { $set: update }, {
|
|
19
|
+
new: true,
|
|
20
|
+
upsert: true,
|
|
21
|
+
}).exec()
|
|
22
|
+
return task
|
|
23
|
+
}
|
package/src/graphql/schema.ts
CHANGED
|
@@ -213,6 +213,19 @@ export const typeDefs = `
|
|
|
213
213
|
annexFsck: [AnnexFsckInput!]!
|
|
214
214
|
remote: String
|
|
215
215
|
): FileCheck
|
|
216
|
+
# Update worker task queue status
|
|
217
|
+
updateWorkerTask(
|
|
218
|
+
id: ID!,
|
|
219
|
+
args: JSON,
|
|
220
|
+
kwargs: JSON,
|
|
221
|
+
taskName: String,
|
|
222
|
+
worker: String,
|
|
223
|
+
queuedAt: DateTime,
|
|
224
|
+
startedAt: DateTime,
|
|
225
|
+
finishedAt: DateTime,
|
|
226
|
+
error: String,
|
|
227
|
+
executionTime: Int,
|
|
228
|
+
): WorkerTask
|
|
216
229
|
}
|
|
217
230
|
|
|
218
231
|
# Anonymous dataset reviewer
|
|
@@ -941,6 +954,18 @@ export const typeDefs = `
|
|
|
941
954
|
input: [String]
|
|
942
955
|
}
|
|
943
956
|
|
|
957
|
+
type WorkerTask {
|
|
958
|
+
id: ID!
|
|
959
|
+
args: JSON
|
|
960
|
+
kwargs: JSON
|
|
961
|
+
taskName: String
|
|
962
|
+
worker: String
|
|
963
|
+
queuedAt: DateTime
|
|
964
|
+
startedAt: DateTime
|
|
965
|
+
finishedAt: DateTime
|
|
966
|
+
error: String
|
|
967
|
+
executionTime: Int
|
|
968
|
+
}
|
|
944
969
|
`
|
|
945
970
|
|
|
946
971
|
schemaComposer.addTypeDefs(typeDefs)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import mongoose from "mongoose"
|
|
2
|
+
import type { Document } from "mongoose"
|
|
3
|
+
const { Schema, model } = mongoose
|
|
4
|
+
|
|
5
|
+
export interface WorkerTaskDocument extends Document {
|
|
6
|
+
id: string
|
|
7
|
+
args?: Record<string, unknown>
|
|
8
|
+
kwargs?: Record<string, unknown>
|
|
9
|
+
taskName?: string
|
|
10
|
+
worker?: string
|
|
11
|
+
queuedAt?: Date
|
|
12
|
+
startedAt?: Date
|
|
13
|
+
finishedAt?: Date
|
|
14
|
+
error?: string
|
|
15
|
+
executionTime?: number
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const workerTaskSchema = new Schema({
|
|
19
|
+
id: { type: String, required: true, unique: true },
|
|
20
|
+
args: { type: Object },
|
|
21
|
+
kwargs: { type: Object },
|
|
22
|
+
taskName: { type: String },
|
|
23
|
+
worker: { type: String },
|
|
24
|
+
queuedAt: { type: Date },
|
|
25
|
+
startedAt: { type: Date },
|
|
26
|
+
finishedAt: { type: Date },
|
|
27
|
+
error: { type: String },
|
|
28
|
+
executionTime: { type: Number },
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
workerTaskSchema.index({ id: 1 })
|
|
32
|
+
|
|
33
|
+
const WorkerTaskModel = model<WorkerTaskDocument>(
|
|
34
|
+
"WorkerTask",
|
|
35
|
+
workerTaskSchema,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
export default WorkerTaskModel
|