agendash 3.1.0 → 6.0.0

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.
Files changed (70) hide show
  1. package/LICENSE.md +25 -0
  2. package/README.md +109 -200
  3. package/dist/AgendashController.d.ts +50 -0
  4. package/dist/AgendashController.js +176 -0
  5. package/dist/AgendashController.js.map +1 -0
  6. package/dist/csp.d.ts +1 -0
  7. package/dist/csp.js +15 -0
  8. package/dist/csp.js.map +1 -0
  9. package/dist/index.d.ts +12 -0
  10. package/dist/index.js +16 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/middlewares/express.d.ts +22 -0
  13. package/dist/middlewares/express.js +119 -0
  14. package/dist/middlewares/express.js.map +1 -0
  15. package/dist/middlewares/fastify.d.ts +18 -0
  16. package/dist/middlewares/fastify.js +129 -0
  17. package/dist/middlewares/fastify.js.map +1 -0
  18. package/dist/middlewares/hapi.d.ts +28 -0
  19. package/dist/middlewares/hapi.js +198 -0
  20. package/dist/middlewares/hapi.js.map +1 -0
  21. package/dist/middlewares/koa.d.ts +25 -0
  22. package/dist/middlewares/koa.js +139 -0
  23. package/dist/middlewares/koa.js.map +1 -0
  24. package/dist/types.d.ts +154 -0
  25. package/dist/types.js +2 -0
  26. package/dist/types.js.map +1 -0
  27. package/package.json +77 -62
  28. package/public/assets/index-CIdOb8D1.css +5 -0
  29. package/public/assets/index-Ct6Ovrls.js +17 -0
  30. package/public/index.html +11 -52
  31. package/public/site.webmanifest +8 -1
  32. package/Dockerfile +0 -23
  33. package/LICENSE +0 -21
  34. package/all-jobs.png +0 -0
  35. package/app.js +0 -23
  36. package/bin/agendash-standalone-fastify.js +0 -61
  37. package/bin/agendash-standalone-hapi.js +0 -60
  38. package/bin/agendash-standalone-koa.js +0 -56
  39. package/bin/agendash-standalone.js +0 -64
  40. package/create-job.png +0 -0
  41. package/entrypoint.sh +0 -5
  42. package/lib/controllers/agendash.js +0 -340
  43. package/lib/csp.js +0 -28
  44. package/lib/middlewares/README.md +0 -59
  45. package/lib/middlewares/express.js +0 -80
  46. package/lib/middlewares/fastify.js +0 -77
  47. package/lib/middlewares/hapi.js +0 -101
  48. package/lib/middlewares/koa.js +0 -77
  49. package/mobile-ui-sm.png +0 -0
  50. package/mobile-ui-xs.png +0 -0
  51. package/public/android-chrome-192x192.png +0 -0
  52. package/public/android-chrome-512x512.png +0 -0
  53. package/public/app/assets/ArgensdashV2Logo.svg +0 -18
  54. package/public/app/css/styles.css +0 -221
  55. package/public/app/js/confirmDelete.js +0 -40
  56. package/public/app/js/confirmDeleteMulti.js +0 -45
  57. package/public/app/js/confirmRequeue.js +0 -40
  58. package/public/app/js/confirmRequeueMulti.js +0 -45
  59. package/public/app/js/confirms.js +0 -8
  60. package/public/app/js/jobdetail.js +0 -48
  61. package/public/app/js/joblist.js +0 -239
  62. package/public/app/js/main.js +0 -275
  63. package/public/app/js/newJob.js +0 -89
  64. package/public/app/js/sidebar.js +0 -121
  65. package/public/app/js/topbar.js +0 -95
  66. package/public/apple-touch-icon.png +0 -0
  67. package/public/favicon-16x16.png +0 -0
  68. package/public/favicon-32x32.png +0 -0
  69. package/public/favicon.ico +0 -0
  70. package/search.png +0 -0
@@ -1,40 +0,0 @@
1
- const confirmRequeue = Vue.component("confirm-requeue", {
2
- props: ["job"],
3
- methods: {
4
- RequeueOne(id) {
5
- const url = `api/jobs/requeue`;
6
- let body = { jobIds: [id] };
7
- return axios
8
- .post(url, body)
9
- .then((result) => result.data)
10
- .then((data) => {
11
- this.$emit("popup-message");
12
- this.$emit("refresh-data");
13
- })
14
- .catch(console.log);
15
- },
16
- },
17
- template: `
18
- <div class="modal fade" id="modalRequeueSure" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
19
- <!-- Modal -->
20
- <div class="modal-dialog" role="document">
21
- <div class="modal-content">
22
- <div class="modal-header">
23
- <h5 class="modal-title" id="exampleModalLabel">Confirm requeue job</h5>
24
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
25
- <span aria-hidden="true">&times;</span>
26
- </button>
27
- </div>
28
- <div class="modal-body">
29
- <p>ID: {{job.job._id}}</p>
30
- <p>Name: {{job.job.name}}</p>
31
- </div>
32
- <div class="modal-footer">
33
- <button type="button" class="btn btn-info" data-dismiss="modal" @click="RequeueOne(job.job._id)">Requeue Job</button>
34
- <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
35
- </div>
36
- </div>
37
- </div>
38
- </div>
39
- `,
40
- });
@@ -1,45 +0,0 @@
1
- const confirmRequeueMulti = Vue.component("confirm-multi-requeue", {
2
- props: ["jobs"],
3
- methods: {
4
- RequeueMulti(ids) {
5
- const url = `api/jobs/requeue`;
6
- let body = { jobIds: ids };
7
- return axios
8
- .post(url, body)
9
- .then((result) => result.data)
10
- .then((data) => {
11
- this.$emit("popup-message");
12
- this.$emit("refresh-data");
13
- this.$emit("ready-clean");
14
- })
15
- .catch(console.log);
16
- },
17
- },
18
- template: `
19
- <div class="modal fade" id="modalRequeueSureMulti" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
20
- <!-- Modal -->
21
- <h1>MULTI</h1>
22
- <div class="modal-dialog" role="document">
23
- <div class="modal-content">
24
- <div class="modal-header">
25
- <h5 class="modal-title" id="exampleModalLabel">Confirm requeue job</h5>
26
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
27
- <span aria-hidden="true">&times;</span>
28
- </button>
29
- </div>
30
- <div class="modal-body">
31
- <div class="row px-3" v-for="job in jobs">
32
- <div class="col">
33
- <p>Job Id: {{job}}</p>
34
- </div>
35
- </div>
36
- </div>
37
- <div class="modal-footer">
38
- <button type="button" class="btn btn-info" data-dismiss="modal" @click="RequeueMulti(jobs)">Requeue Job</button>
39
- <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
40
- </div>
41
- </div>
42
- </div>
43
- </div>
44
- `,
45
- });
@@ -1,8 +0,0 @@
1
- const popupmessage = Vue.component("popup-message", {
2
- props: ["job", "deletec", "requeuec", "createc"],
3
- template: `
4
- <div v-if="deletec" class="alert alert-success popupmessage">Job Deleted successfull</div>
5
- <div v-else-if="requeuec" class="alert alert-success popupmessage">Job Requeue successfull</div>
6
- <div v-else-if="createc" class="alert alert-success popupmessage">Job Created successfull</div>
7
- `,
8
- });
@@ -1,48 +0,0 @@
1
- const jobDetail = Vue.component("job-detail", {
2
- props: ["job"],
3
- filters: {
4
- formatJSON(jsonstr) {
5
- return JSON.stringify(jsonstr, null, 2);
6
- },
7
- },
8
- methods: {
9
- formatDate(date) {
10
- return moment(date).format("DD-MM-YYYY HH:mm:ss");
11
- },
12
- },
13
- template: `
14
- <div class="modal fade" id="modalData" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
15
- <!-- Modal -->
16
- <div class="modal-dialog" role="document">
17
- <div class="modal-content">
18
- <div class="modal-header">
19
- <h5 class="modal-title" id="exampleModalLabel">Job Data - {{job.job.name}}</h5>
20
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
21
- <span aria-hidden="true">&times;</span>
22
- </button>
23
- </div>
24
- <div class="modal-body">
25
- <div class="row my-3">
26
- <div class="col">
27
- <p><strong>Next run starts: </strong>{{ formatDate(job.job.nextRunAt) }}</p>
28
- <p><strong>Last run started: </strong>{{ formatDate(job.job.lastRunAt) }}</p>
29
- </div>
30
- </div>
31
- <p><strong>Metadata: </strong></p>
32
- <prism-editor class="json-editor" :lineNumbers="true" :readonly="true" :code="job.job.data | formatJSON" language="json"></prism-editor>
33
- <div v-if='job.failed' class="row mt-3">
34
- <div class="col pt-3 bg-danger text-light">
35
- <p><strong>Fail Count:</strong> {{job.job.failCount}}</p>
36
- <p><strong>Failed At:</strong> {{formatDate(job.job.failedAt)}}</p>
37
- <p><strong>Reason:</strong> {{job.job.failReason}}</p>
38
- </div>
39
- </div>
40
- </div>
41
- <div class="modal-footer">
42
- <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
43
- </div>
44
- </div>
45
- </div>
46
- </div>
47
- `,
48
- });
@@ -1,239 +0,0 @@
1
- const jobList = Vue.component("job-list", {
2
- data: () => ({
3
- multijobs: [],
4
- currentSort: "name",
5
- currentSortDir: "asc",
6
- }),
7
- props: ["jobs", "pagesize", "pagenumber", "sendClean", "loading"],
8
- computed: {
9
- sortedJobs: function () {
10
- return this.jobs.sort((a, b) => {
11
- let displayA, displayB;
12
- if (this.currentSort === "name") {
13
- displayA = a.job[this.currentSort]
14
- ? a.job[this.currentSort].toLowerCase()
15
- : "";
16
- displayB = a.job[this.currentSort]
17
- ? b.job[this.currentSort].toLowerCase()
18
- : "";
19
- } else {
20
- displayA = moment(a.job[this.currentSort]);
21
- displayB = moment(b.job[this.currentSort]);
22
- }
23
- let modifier = 1;
24
- if (this.currentSortDir === "desc") modifier = -1;
25
- if (displayA < displayB) return -1 * modifier;
26
- if (displayA > displayB) return 1 * modifier;
27
- return 0;
28
- });
29
- },
30
- },
31
- watch: {
32
- jobs() {
33
- // reset multijobs when jobs have changed
34
- this.multijobs = [];
35
- },
36
- },
37
- methods: {
38
- sort(s) {
39
- //if s == current sort, reverse
40
- if (s === this.currentSort) {
41
- this.currentSortDir = this.currentSortDir === "asc" ? "desc" : "asc";
42
- }
43
- this.currentSort = s;
44
- },
45
- sendQueued() {
46
- this.$emit("confirm-multi-requeue", this.multijobs);
47
- // this.multijobs = []
48
- },
49
- sendDelete() {
50
- this.$emit("confirm-multi-delete", this.multijobs);
51
- // this.multijobs = []
52
- },
53
- cleanMulti() {
54
- return console.log("received Clean Multi");
55
- },
56
- formatTitle(date) {
57
- if (!date) return;
58
- return moment(date).format();
59
- },
60
- formatDate(date) {
61
- if (!date) return;
62
- return moment(date).fromNow();
63
- },
64
- checkAllCheckboxes() {
65
- const checkboxes = document.querySelectorAll(".checkbox-triggerable");
66
- for (const checkbox of checkboxes) {
67
- checkbox.click();
68
- }
69
- },
70
- toggleList(job) {
71
- if (this.multijobs.includes(job.job._id)) {
72
- this.multijobs.splice(this.multijobs.indexOf(job.job._id), 1);
73
- } else {
74
- this.multijobs.push(job.job._id);
75
- }
76
- },
77
- },
78
- template: `
79
- <div v-on:sendClean="cleanMulti">
80
- <div >
81
- <div class="d-flex justify-content-end mb-2">
82
- <span class="mr-2">{{ multijobs.length }} jobs selected</span>
83
- <button :disabled="!multijobs.length" data-toggle="modal" data-target="#modalRequeueSureMulti" @click="sendQueued" class="btn btn-primary mr-2" data-placement="top" title="Requeue list of selecteds Jobs"> Multiple Requeue </button>
84
- <button :disabled="!multijobs.length" data-toggle="modal" data-target="#modalDeleteSureMulti" @click="sendDelete" class="btn btn-danger" data-placement="top" title="Delete list of selecteds Jobs"> Multiple Delete </button>
85
- </div>
86
- </div>
87
-
88
- <table class="table table-striped d-none d-xl-table">
89
- <thead class="thead-dark">
90
- <tr>
91
- <th @click="checkAllCheckboxes()" scope="col"> Multi </th>
92
- <th @click="sort('status')" scope="col"> Status </th>
93
- <th @click="sort('name')" scope="col"> Name <i v-if="currentSort === 'name' && currentSortDir === 'asc'" class="material-icons sortable" title="Sort Z to A">arrow_drop_down</i>
94
- <i v-else-if="currentSort === 'name' && currentSortDir === 'desc'" class="material-icons sortable" title="Sort A to Z">arrow_drop_up</i>
95
- <i v-else class="material-icons sortableinactive" title="Sort A to Z">arrow_drop_down</i>
96
- </th>
97
- <th @click="sort('lastRunAt')" scope="col"> Last run started <i v-if="currentSort === 'lastRunAt' && currentSortDir === 'asc'" class="material-icons sortable" title="Sort Z to A">arrow_drop_up</i>
98
- <i v-else-if="currentSort === 'lastRunAt' && currentSortDir === 'desc'" class="material-icons sortable" title="Sort A to Z">arrow_drop_down</i>
99
- <i v-else class="material-icons sortableinactive" title="Sort A to Z">arrow_drop_down</i>
100
- </th>
101
- <th @click="sort('nextRunAt')" scope="col"> Next run starts
102
- <i v-if="currentSort === 'nextRunAt' && currentSortDir === 'asc'" class="material-icons sortable" title="Sort Z to A">arrow_drop_up</i>
103
- <i v-else-if="currentSort === 'nextRunAt' && currentSortDir === 'desc'" class="material-icons sortable" title="Sort A to Z">arrow_drop_down</i>
104
- <i v-else class="material-icons sortableinactive" title="Sort A to Z">arrow_drop_down</i>
105
-
106
- </th>
107
- <th @click="sort('lastFinishedAt')" scope="col"> Last finished
108
- <i v-if="currentSort === 'lastFinishedAt' && currentSortDir === 'asc'" class="material-icons sortable" title="Sort Z to A">arrow_drop_up</i>
109
- <i v-else-if="currentSort === 'lastFinishedAt' && currentSortDir === 'desc'" class="material-icons sortable" title="Sort A to Z">arrow_drop_down</i>
110
- <i v-else class="material-icons sortableinactive" title="Sort A to Z">arrow_drop_down</i>
111
- </th>
112
- <th scope="col"> Locked </th>
113
- <th scope="col"> Actions </th>
114
- </tr>
115
- </thead>
116
- <tbody v-if="loading">
117
- <tr>
118
- <td colspan='10' scope="row">
119
- <div class="col-12 my-5 ml-auto text-center">
120
- <div class="text-center my-5 py-5">
121
- <div class="spinner-border" role="status">
122
- </div>
123
- <div>
124
- <span class="">Loading Jobs...</span>
125
- </div>
126
- </div>
127
- </div>
128
- </td>
129
- </tr>
130
- </tbody>
131
-
132
- <tbody v-else>
133
- <tr v-for="job in sortedJobs">
134
- <td width="10" class="mult-select">
135
- <input v-model="multijobs" :id='job.job._id' class="checkbox-triggerable" type="checkbox" :value="job.job._id"></input>
136
- </td>
137
- <td th scope="row" class="job-name">
138
- <i v-if="job.repeating" class="oi oi-timer pill-own bg-info"><span>{{job.job.repeatInterval}}</span></i>
139
- <i v-if="job.scheduled" class="pill-own bg-info pill-withoutIcon"><span>Scheduled</span></i>
140
- <i v-if="job.completed" class="pill-own bg-success pill-withoutIcon"><span>Completed</span></i>
141
- <i v-if="job.queued" class="pill-own bg-primary pill-withoutIcon"><span>Queued</span></i>
142
- <i v-if="job.failed" class="pill-own bg-danger pill-withoutIcon"><span>Failed</span></i>
143
- <i v-if="job.running" class="pill-own bg-warning pill-withoutIcon"><span>Running</span></i>
144
- </td>
145
- <td class="job-name" @click="toggleList(job)"> {{job.job.name}} </td>
146
- <td class="job-lastRunAt" :title="formatTitle(job.job.lastRunAt)" @click="toggleList(job)"> {{ formatDate(job.job.lastRunAt) }} </td>
147
- <td class="job-nextRunAt" :title="formatTitle(job.job.nextRunAt)" @click="toggleList(job)"> {{ formatDate(job.job.nextRunAt) }} </td>
148
- <td class="job-finishedAt" :title="formatTitle(job.job.lastFinishedAt)" @click="toggleList(job)"> {{ formatDate(job.job.lastFinishedAt) }} </td>
149
- <td class="job-lockedAt" :title="formatTitle(job.job.lockedAt)" @click="toggleList(job)"> {{ formatDate(job.job.lockedAt) }} </td>
150
- <td class="job-actions">
151
- <i class="material-icons md-dark md-custom action-btn viewData text-primary" data-toggle="modal" data-target="#modalRequeueSure" @click="$emit('confirm-requeue', job)" data-placement="left" title="Requeue">update</i>
152
- <i class="material-icons md-dark md-custom action-btn viewData text-success" data-toggle="modal" data-target="#modalData" @click="$emit('show-job-detail', job)" data-placement="top" title="Job Data">visibility</i>
153
- <i class="material-icons md-dark md-custom action-btn viewData text-danger" data-toggle="modal" data-target="#modalDeleteSure" @click="$emit('confirm-delete', job)" data-placement="top" title="Delete permanently">delete_forever</i>
154
- </td>
155
- </tr>
156
- </tbody>
157
- </table>
158
-
159
-
160
- <div class="d-xl-none">
161
- <div class="row">
162
- <div v-for="job in sortedJobs" class="col col-xs-6 order-1 p-1">
163
- <div class="card bg-light" >
164
- <div class="card-header card-responsive-title-container">
165
- <div class="card-responsive-name" @click="toggleList(job)">
166
- {{job.job.name}}
167
- </div>
168
- <div class="d-flex align-items-center">
169
- <div class="card-responsive-status-title mr-2" style="font-size: 18px; display: flex; align-items: center">
170
- <input v-model="multijobs" :id='job.job._id' type="checkbox" :value="job.job._id" class="card-responsive-checkbox"></input>
171
- </div>
172
- <i class="material-icons md-dark md-custom action-btn viewData text-primary material-icons-size mr-1" data-toggle="modal" data-target="#modalRequeueSure" @click="$emit('confirm-requeue', job)" data-placement="left" title="Requeue">update</i>
173
- <i class="material-icons md-dark md-custom action-btn viewData text-success material-icons-size mr-1" data-toggle="modal" data-target="#modalData" @click="$emit('show-job-detail', job)" data-placement="top" title="Job Data">visibility</i>
174
- <i class="material-icons md-dark md-custom action-btn viewData text-danger material-icons-size" data-toggle="modal" data-target="#modalDeleteSure" @click="$emit('confirm-delete', job)" data-placement="top" title="Delete permanently">delete_forever</i>
175
- </div>
176
- </div>
177
- <div class="card-body">
178
- <div class="d-flex justify-content-center mb-2">
179
- <i v-if="job.repeating" class="oi oi-timer pill-own mr-2 bg-info pill-own-card"><span class="pill-own-card-info">{{job.job.repeatInterval}}</span></i>
180
- <i v-if="job.scheduled" class="pill-own mr-2 bg-info pill-withoutIcon pill-own-card"><span class="pill-own-card-info">Scheduled</span></i>
181
- <i v-if="job.completed" class="pill-own mr-2 bg-success pill-withoutIcon pill-own-card"><span class="pill-own-card-info">Completed</span></i>
182
- <i v-if="job.queued" class="pill-own mr-2 bg-primary pill-withoutIcon pill-own-card"><span class="pill-own-card-info">Queued</span></i>
183
- <i v-if="job.failed" class="pill-own mr-2 bg-danger pill-withoutIcon pill-own-card"><span class="pill-own-card-info">Failed</span></i>
184
- <i v-if="job.running" class="pill-own mr-2 bg-warning pill-withoutIcon pill-own-card"><span class="pill-own-card-info">Running</span></i>
185
- </div>
186
- <div class="row">
187
- <div class="col col-md-6 text-center">
188
- <div class="card-responsive-status-title">
189
- Last run started
190
- </div>
191
- <div class="mb-3" :title="formatTitle(job.job.lastRunAt)">
192
- {{ formatDate(job.job.lastRunAt) }}
193
- </div>
194
- <div class="card-responsive-status-title">
195
- Last finished
196
- </div>
197
- <div :title="formatTitle(job.job.lastFinishedAt)">
198
- {{ formatDate(job.job.lastFinishedAt) }}
199
- </div>
200
- </div>
201
- <div class="col col-md-6 text-center">
202
- <div class="card-responsive-status-title">
203
- Next run starts
204
- </div>
205
- <div class="mb-3" :title="formatTitle(job.job.nextRunAt)">
206
- {{ formatDate(job.job.nextRunAt) }}
207
- </div>
208
- <div class="card-responsive-status-title">
209
- Locked
210
- </div>
211
- <div :title="formatTitle(job.job.lockedAt)">
212
- {{ formatDate(job.job.lockedAt) || "-" }}
213
- </div>
214
- </div>
215
- </div>
216
- <div></div>
217
- </div>
218
- </div>
219
- </div>
220
- </div>
221
- </div>
222
-
223
-
224
- <div class="row">
225
- <div class="col d-flex justify-content-center">
226
- <nav aria-label="Page navigation example">
227
- <ul class="pagination">
228
- <li class="page-item" :class="pagenumber === 1 ? 'disabled': ''"><a class="page-link" @click="$emit('pagechange', 'prev')">Previous</a></li>
229
- <!-- <li class="page-item" :class="pagenumber === 1 ? 'disabled': ''"><a class="page-link" @click="$emit('pagechange', 'prev')">{{pagenumber -1}}</a></li>
230
- <li class="page-item active"><a class="page-link">{{pagenumber}}</a></li>
231
- <li class="page-item"><a style="cursor:pointer;" class="page-link" @click="$emit('pagechange', 'next')">{{pagenumber +1}}</a></li> -->
232
- <li class="page-item"><a style="cursor:pointer;" class="page-link" @click="$emit('pagechange', 'next')">Next</a></li>
233
- </ul>
234
- </nav>
235
- </div>
236
- </div>
237
- </div>
238
- `,
239
- });
@@ -1,275 +0,0 @@
1
- const app = Vue.component("app", {
2
- data: () => ({
3
- jobs: [],
4
- overview: [],
5
- refresh: 60,
6
- showDetail: false,
7
- pagenumber: 1,
8
- showConfirm: false,
9
- showConfirmMulti: false,
10
- showConfirmRequeue: false,
11
- showConfirmRequeueMulti: false,
12
- showNewJob: false,
13
- jobData: {},
14
- deletec: false,
15
- requeuec: false,
16
- pagesize: 15,
17
- sendClean: false,
18
- createc: false,
19
- property: "",
20
- search: "",
21
- object: "",
22
- newLimit: null,
23
- skip: 0,
24
- name: "",
25
- state: "",
26
- nameprop: "",
27
- loading: false,
28
- hideSlide: true,
29
- }),
30
- methods: {
31
- openNav() {
32
- document.getElementById("mySidebar").style.width = "100%";
33
- document.getElementById("main").style.marginLeft = "100%";
34
- this.hideSlide = false;
35
- },
36
- closeNav() {
37
- document.getElementById("mySidebar").style.width = "0";
38
- document.getElementById("main").style.marginLeft = "0";
39
- this.hideSlide = true;
40
- },
41
- showJobDetail(data) {
42
- this.jobData = data;
43
- this.showDetail = true;
44
- },
45
- readyClean() {
46
- this.sendClean = true;
47
- },
48
- confirmDelete(data) {
49
- this.jobData = data;
50
- this.showConfirm = true;
51
- },
52
- confirmDeleteMulti(data) {
53
- this.jobData = data;
54
- this.showConfirmMulti = true;
55
- },
56
- confirmRequeue(data) {
57
- this.jobData = data;
58
- this.showConfirmRequeue = true;
59
- },
60
- confirmRequeueMulti(data) {
61
- this.jobData = data;
62
- this.showConfirmRequeueMulti = true;
63
- },
64
- newJob(data) {
65
- this.jobData = data;
66
- this.showNewJob = true;
67
- },
68
- searchForm(name, search, property, limit, skip, refresh, state, object) {
69
- (this.pagesize = limit ? limit : this.pagesize),
70
- (this.name = name),
71
- (this.search = search),
72
- (this.property = property),
73
- (this.skip = skip),
74
- (this.refresh = refresh),
75
- (this.state = state),
76
- (this.object = object ? object : this.object),
77
- this.fetchData(
78
- this.name,
79
- this.search,
80
- this.property,
81
- this.pagesize,
82
- this.skip,
83
- this.refresh,
84
- this.state,
85
- this.object
86
- );
87
- },
88
- refreshData() {
89
- this.fetchData(
90
- this.name,
91
- this.search,
92
- this.property,
93
- this.pagesize,
94
- this.skip,
95
- this.refresh,
96
- this.state,
97
- this.object
98
- );
99
- },
100
- pagechange(action) {
101
- if (action === "next") {
102
- this.pagenumber++;
103
- }
104
- if (action === "prev") {
105
- this.pagenumber--;
106
- }
107
- this.skip = (this.pagenumber - 1) * this.pagesize;
108
- this.fetchData(
109
- this.name,
110
- this.search,
111
- this.property,
112
- this.pagesize,
113
- this.skip,
114
- this.refresh,
115
- this.state,
116
- this.object
117
- );
118
- },
119
- fetchData(
120
- name = "",
121
- search = "",
122
- property = "",
123
- limit = 15,
124
- skip = 0,
125
- refresh = 60,
126
- state = "",
127
- object
128
- ) {
129
- this.loading = true;
130
- this.pagesize = this.pagesize === 0 ? parseInt(limit) : this.pagesize;
131
- this.refresh = parseFloat(refresh);
132
- const url = `api?limit=${limit}&job=${name}&skip=${skip}&property=${property}${
133
- object ? "&isObjectId=true" : ""
134
- }${state ? `&state=${state}` : ""}&q=${search}`;
135
- return axios
136
- .get(url)
137
- .then((result) => result.data)
138
- .then(
139
- (data) => {
140
- this.jobs = data.jobs;
141
- this.search = search;
142
- this.property = property;
143
- this.object = object;
144
- this.overview = data.overview;
145
- this.loading = false;
146
- },
147
- () => {
148
- this.loading = false;
149
- this.jobs = [];
150
- }
151
- )
152
- .catch(console.log);
153
- },
154
-
155
- popupmessage(data) {
156
- if (data === "delete") {
157
- this.deletec = true;
158
- setTimeout(() => {
159
- this.deletec = false;
160
- }, 2000);
161
- }
162
- if (data === "multidelete") {
163
- this.deletec = true;
164
- setTimeout(() => {
165
- this.deletec = false;
166
- }, 2000);
167
- }
168
- if (data === "requeue") {
169
- this.requeuec = true;
170
- setTimeout(() => {
171
- this.requeuec = false;
172
- }, 2000);
173
- }
174
- if (data === "multirequeue") {
175
- this.requeuec = true;
176
- setTimeout(() => {
177
- this.requeuec = false;
178
- }, 2000);
179
- }
180
- if (data === "create") {
181
- this.createc = true;
182
- setTimeout(() => {
183
- this.createc = false;
184
- }, 2000);
185
- }
186
- },
187
- },
188
- created() {
189
- return this.fetchData();
190
- },
191
- template: `
192
-
193
- <div class="container-fluid">
194
- <div class="">
195
- <div class="navbar navbar-dark fixed-top bg-dark flex-md-nowrap p-0 shadow">
196
- <div class="d-flex">
197
- <div>
198
- <a class="navbar-brand col-sm-10 col-md-10 mr-0 tittle"> Agendash</a>
199
- </div>
200
- <div class='d-md-none w-50'>
201
- <div id="mySidebar" class="sidebar-collapse" @click="closeNav()">
202
- <a href="javascript:void(0)" class="closebtn" @click="closeNav()">&times;</a>
203
- <div v-if="hideSlide === false" class="bg-light overflow-auto">
204
- <sidebar
205
- v-on:search-sidebar="searchForm"
206
- v-on:new-job="newJob"
207
- :overview="overview"
208
- :pagesize="pagesize"
209
- :loading="loading"
210
- >
211
- </sidebar>
212
- </div>
213
- </div>
214
- <div class="slidebar-container-button" id="main">
215
- <button class="openbtn" @click="openNav()">&#9776;</button>
216
- </div>
217
- </div>
218
- </div>
219
- </div>
220
- </div>
221
- <div class="row pt-5">
222
- <div v-if="hideSlide === true" class="col-md-2 d-none d-md-block bg-light overflow-auto">
223
- <sidebar
224
- v-on:search-sidebar="searchForm"
225
- v-on:new-job="newJob"
226
- :overview="overview"
227
- :pagesize="pagesize"
228
- :loading="loading"
229
- >
230
- </sidebar>
231
- </div>
232
- <main role="main" class="col-md-10 ml-sm-auto col-lg-10 px-4">
233
- <div class="col-12">
234
- <topbar v-on:search-form="searchForm"
235
- :name='name'
236
- :state='state'
237
- :search='search'
238
- :property='property'
239
- >
240
- </topbar>
241
- </div>
242
- <div class="col-12 ">
243
- <job-list
244
- v-on:confirm-delete="confirmDelete"
245
- v-on:confirm-multi-delete="confirmDeleteMulti"
246
- v-on:confirm-requeue="confirmRequeue"
247
- v-on:confirm-multi-requeue="confirmRequeueMulti"
248
- v-on:show-job-detail="showJobDetail"
249
- v-on:pagechange="pagechange"
250
- :pagesize="pagesize"
251
- :pagenumber='pagenumber'
252
- :skip="skip"
253
- :jobs="jobs"
254
- :sendClean='sendClean'
255
- :loading='loading'
256
- >
257
- </job-list>
258
- </div>
259
- </main>
260
- </div>
261
- <div class="row bg-dark py-3">
262
- <div class="col-6 m-auto text-light text-center">
263
- <small>UI written by <a class="text-light" href="https://www.softwareontheroad.com/about" target="_BLANK">Sam Quinn</a>. Backend by Agenda team.</small>
264
- </div>
265
- </div>
266
- <job-detail v-if="showDetail" v-bind:job="jobData"></job-detail>
267
- <confirm-delete v-if="showConfirm" v-on:popup-message="popupmessage('delete')" v-on:refresh-data="refreshData" v-bind:job="jobData"></confirm-delete>
268
- <confirm-multi-delete v-if="showConfirmMulti" v-on:ready-clean="readyClean" v-on:popup-message="popupmessage('multidelete')" v-on:refresh-data="refreshData" v-bind:jobs="jobData"></confirm-multi-delete>
269
- <confirm-requeue v-if="showConfirmRequeue" v-on:popup-message="popupmessage('requeue')" v-on:refresh-data="refreshData" v-bind:job="jobData"></confirm-requeue>
270
- <confirm-multi-requeue v-if="showConfirmRequeueMulti" v-on:ready-clean="readyClean" v-on:popup-message="popupmessage('multirequeue')" v-on:refresh-data="refreshData" v-bind:jobs="jobData"></confirm-multi-requeue>
271
- <popup-message :deletec="deletec" :requeuec="requeuec" :createc="createc"></popup-message>
272
- <new-job v-if="showNewJob" v-on:popup-message="popupmessage('create')" v-on:refresh-data="fetchData"></new-job>
273
- </div>
274
- `,
275
- });