-
Notifications
You must be signed in to change notification settings - Fork 3
/
agave_de_v2.clj
152 lines (125 loc) · 4.51 KB
/
agave_de_v2.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
(ns mescal.agave-de-v2
(:use [slingshot.slingshot :only [try+]])
(:require [mescal.agave-de-v2.apps :as apps]
[mescal.agave-de-v2.app-listings :as app-listings]
[mescal.agave-de-v2.job-params :as params]
[mescal.agave-de-v2.jobs :as jobs]
[clojure.tools.logging :as log]))
(defn hpc-app-group
[]
(app-listings/hpc-app-group))
(defn- get-system-statuses
[agave]
(into {} (map (juxt :id :status) (.listSystems agave))))
(defn list-apps
([agave jobs-enabled? opts]
(app-listings/list-apps agave (get-system-statuses agave) jobs-enabled? opts))
([agave jobs-enabled? app-ids opts]
(app-listings/list-apps agave (get-system-statuses agave) jobs-enabled? app-ids opts)))
(defn empty-app-listing
[]
(assoc (app-listings/hpc-app-group)
:apps []
:total 0))
(defn list-apps-with-ontology
[agave jobs-enabled? term]
(app-listings/list-apps-with-ontology agave (get-system-statuses agave) jobs-enabled? term))
(defn- app-matches?
[search-term app]
(some (fn [s] (re-find (re-pattern (str "(?i)\\Q" search-term)) s))
((juxt :name :description) app)))
(defn- find-matching-apps
[agave jobs-enabled? search-term opts]
(filter (partial app-matches? search-term)
(:apps (list-apps agave jobs-enabled? opts))))
(defn search-apps
[agave jobs-enabled? search-term opts]
(let [matching-apps (find-matching-apps agave jobs-enabled? search-term opts)]
{:total (count matching-apps)
:apps matching-apps}))
(defn get-app
[agave app-id]
(apps/format-app agave (.getApp agave app-id)))
(defn get-app-details
[agave app-id]
(apps/format-app-details agave (.getApp agave app-id)))
(defn list-app-tasks
[agave app-id]
(apps/format-app-tasks (.getApp agave app-id)))
(defn get-app-tool-listing
[agave app-id]
{:tools [(apps/format-tool-for-app (.getApp agave app-id))]})
(defn get-app-input-ids
[agave app-id]
(mapv :id (:inputs (.getApp agave app-id))))
(defn list-app-permissions
[agave app-ids]
(map #(apps/format-app-permissions % (.listAppPermissions agave %)) app-ids))
(defn has-app-permission
[agave username app-id required-level]
(try+
(let [{:keys [write read execute]} (:permission (.getAppPermission agave app-id username))]
(case required-level
"own" write
"write" write
"read" read
"execute" execute
false))
(catch [:status 404] _
;; user has no app permissions
false)
(catch [:status 501] _
;; app is public
(= required-level "read"))))
(defn share-app-with-user
[agave username app-id level]
(.shareAppWithUser agave app-id username (apps/format-update-permission level)))
(defn prepare-job-submission
[agave submission]
(jobs/prepare-submission agave (.getApp agave (:app_id submission)) submission))
(defn send-job-submission
[agave submission]
(let [app-info (apps/load-app-info agave [:appId submission])]
(jobs/format-job-submisison-response agave submission (.submitJob agave submission))))
(defn- format-jobs
[agave jobs-enabled? jobs]
(let [app-info (apps/load-app-info agave (mapv :appId jobs))
statuses (get-system-statuses agave)]
(mapv (partial jobs/format-job agave jobs-enabled? statuses app-info) jobs)))
(defn list-jobs
([agave jobs-enabled?]
(format-jobs agave jobs-enabled? (.listJobs agave)))
([agave jobs-enabled? job-ids]
(format-jobs agave jobs-enabled? (.listJobs agave job-ids))))
(defn list-job
[agave jobs-enabled? job-id]
(let [job (.listJob agave job-id)
statuses (get-system-statuses agave)
app-info (apps/load-app-info agave [(:appId job)])]
(jobs/format-job agave jobs-enabled? statuses app-info job)))
(defn get-job-history
[agave job-id]
(jobs/format-job-history (.getJobHistory agave job-id)))
(defn get-job-params
[agave job-id]
(when-let [job (.listJob agave job-id)]
(params/format-params agave job (:appId job) (.getApp agave (:appId job)))))
(defn get-app-rerun-info
[agave job-id]
(when-let [job (.listJob agave job-id)]
(apps/format-app-rerun-info agave (.getApp agave (:appId job)) job)))
(defn translate-job-status
[status]
(jobs/translate-job-status status))
(defn regenerate-job-submission
[agave job-id]
(when-let [job (.listJob agave job-id)]
(jobs/regenerate-job-submission agave job)))
(defn get-default-output-name
[agave app-id output-id]
(some->> (.getApp agave app-id)
(:outputs)
(filter (comp (partial = output-id) :id))
(first)
(:value)
(:default)))