-
Notifications
You must be signed in to change notification settings - Fork 1
/
AdminJobsPage.js
128 lines (108 loc) · 3.91 KB
/
AdminJobsPage.js
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
import React from "react";
import BasicLayout from "main/layouts/BasicLayout/BasicLayout";
import JobsTable from "main/components/Jobs/JobsTable";
import { useBackend } from "main/utils/useBackend";
import Accordion from 'react-bootstrap/Accordion';
import TestJobForm from "main/components/Jobs/TestJobForm";
import JobComingSoon from "main/components/Jobs/JobComingSoon";
import { useBackendMutation } from "main/utils/useBackend";
import UpdateCoursesJobForm from "main/components/Jobs/UpdateCoursesJobForm";
import UpdateCoursesByQuarterJobForm from "main/components/Jobs/UpdateCoursesByQuarterJobForm";
const AdminJobsPage = () => {
const refreshJobsIntervalMilliseconds = 5000;
// test job
const objectToAxiosParamsTestJob = (data) => ({
url: `/api/jobs/launch/testjob?fail=${data.fail}&sleepMs=${data.sleepMs}`,
method: "POST"
});
// Stryker disable all
const testJobMutation = useBackendMutation(
objectToAxiosParamsTestJob,
{},
["/api/jobs/all"]
);
// Stryker enable all
const submitTestJob = async (data) => {
console.log("submitTestJob, data=", data);
testJobMutation.mutate(data);
}
// ***** update courses job *******
const objectToAxiosParamsUpdateCoursesJob = (data) => ({
url: `/api/jobs/launch/updateCourses?quarterYYYYQ=${data.quarter}&subjectArea=${data.subject}`,
method: "POST"
});
const objectToAxiosParamsUpdateCoursesByQuarterJob = (data) => ({
url: `/api/jobs/launch/updateQuarterCourses?quarterYYYYQ=${data.quarter}`,
method: "POST"
});
// Stryker disable all
const updateCoursesJobMutation = useBackendMutation(
objectToAxiosParamsUpdateCoursesJob,
{},
["/api/jobs/all"]
);
const updateCoursesByQuarterJobMutation = useBackendMutation(
objectToAxiosParamsUpdateCoursesByQuarterJob,
{},
["/api/jobs/all"]
);
// Stryker enable all
const submitUpdateCoursesJob = async (data) => {
console.log("submitUpdateCoursesJob, data=", data);
updateCoursesJobMutation.mutate(data);
}
const submitUpdateCoursesByQuarterJob = async (data) => {
console.log("submitCoursesByQuarterJob, data=", data);
updateCoursesByQuarterJobMutation.mutate(data);
}
// Stryker disable all
const { data: jobs, error: _error, status: _status } =
useBackend(
["/api/jobs/all"],
{
method: "GET",
url: "/api/jobs/all",
},
[],
{ refetchInterval: refreshJobsIntervalMilliseconds }
);
// Stryker enable all
const jobLaunchers = [
{
name: "Test Job",
form: <TestJobForm submitAction={submitTestJob} />
},
{
name: "Update Courses Database",
form: <UpdateCoursesJobForm callback={submitUpdateCoursesJob} />
},
{
name: "Update Courses Database by quarter",
form: <UpdateCoursesByQuarterJobForm callback={submitUpdateCoursesByQuarterJob} />
},
{
name: "Update Grade Info",
form: <JobComingSoon />
},
]
return (
<BasicLayout>
<h2 className="p-3">Launch Jobs</h2>
<Accordion>
{
jobLaunchers.map((jobLauncher, index) => (
<Accordion.Item eventKey={index} key={index}>
<Accordion.Header>{jobLauncher.name}</Accordion.Header>
<Accordion.Body>
{jobLauncher.form}
</Accordion.Body>
</Accordion.Item>
))
}
</Accordion>
<h2 className="p-3">Job Status</h2>
<JobsTable jobs={jobs} />
</BasicLayout>
);
};
export default AdminJobsPage;