Skip to content

Commit 7abff9a

Browse files
committed
show all schedulers now
1 parent d0ef52c commit 7abff9a

File tree

6 files changed

+87
-90
lines changed

6 files changed

+87
-90
lines changed

core/src/main/java/org/sterl/spring/persistent_tasks/scheduler/SchedulerService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,4 +170,8 @@ public List<TriggerEntity> rescheduleAbandonedTasks(OffsetDateTime timeout) {
170170
log.debug("({}) - {} trigger(s) are running on {} schedulers", running, runningKeys, schedulers);
171171
return triggerService.rescheduleAbandonedTasks(timeout);
172172
}
173+
174+
public List<SchedulerEntity> listAll() {
175+
return editSchedulerStatus.listAll();
176+
}
173177
}

core/src/main/java/org/sterl/spring/persistent_tasks/scheduler/api/SchedulerResource.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.sterl.spring.persistent_tasks.scheduler.api;
22

3-
import java.util.Collection;
43
import java.util.List;
54

65
import org.springframework.http.ResponseEntity;
@@ -21,13 +20,13 @@
2120
public class SchedulerResource {
2221

2322
private final SchedulerService anyService;
24-
private final Collection<SchedulerService> schedulerServices;
2523

2624
@GetMapping("/schedulers")
27-
public List<String> list() {
28-
return schedulerServices.stream().map(SchedulerService::getName).toList();
25+
public List<SchedulerEntity> listAll() {
26+
return anyService.listAll();
2927
}
3028

29+
3130
@GetMapping("/schedulers/{name}")
3231
public ResponseEntity<SchedulerEntity> get(@PathVariable("name") String name) {
3332
return ResponseEntity.of(anyService.findStatus(name));

core/src/main/java/org/sterl/spring/persistent_tasks/scheduler/component/EditSchedulerStatusComponent.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.lang.management.MemoryMXBean;
55
import java.lang.management.OperatingSystemMXBean;
66
import java.time.OffsetDateTime;
7+
import java.util.List;
78
import java.util.Optional;
89
import java.util.Set;
910

@@ -42,6 +43,10 @@ public SchedulerEntity get(String name) {
4243
.orElseGet(() -> new SchedulerEntity(name));
4344
}
4445

46+
public List<SchedulerEntity> listAll() {
47+
return schedulerRepository.listAll();
48+
}
49+
4550
public Optional<SchedulerEntity> find(String name) {
4651
return schedulerRepository.findById(name);
4752
}
Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.sterl.spring.persistent_tasks.scheduler.repository;
22

33
import java.time.OffsetDateTime;
4+
import java.util.List;
45
import java.util.Set;
56

67
import org.springframework.data.jpa.repository.JpaRepository;
@@ -12,15 +13,21 @@
1213
public interface TaskSchedulerRepository extends JpaRepository<SchedulerEntity, String>{
1314

1415
@Query("""
15-
DELETE FROM #{#entityName}
16-
WHERE lastPing < :timeout
17-
""")
16+
DELETE FROM #{#entityName}
17+
WHERE lastPing < :timeout
18+
""")
1819
@Modifying
1920
int deleteOldSchedulers(@Param("timeout") OffsetDateTime timeout);
2021

2122
@Query("""
22-
SELECT e.id FROM #{#entityName} e
23-
""")
23+
SELECT e.id FROM #{#entityName} e
24+
ORDER BY e.id
25+
""")
2426
Set<String> findSchedulerNames();
2527

28+
@Query("""
29+
SELECT e FROM #{#entityName} e
30+
ORDER BY e.id
31+
""")
32+
List<SchedulerEntity> listAll();
2633
}

ui/src/scheduler/scheduler.page.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import SchedulerStatusView from "@src/scheduler/views/scheduler.view";
2-
import { TaskStatusHistoryOverview } from "@src/server-api";
2+
import { SchedulerEntity, TaskStatusHistoryOverview } from "@src/server-api";
33
import { formatMs } from "@src/shared/date.util";
44
import { useServerObject } from "@src/shared/http-request";
55
import useAutoRefresh from "@src/shared/use-auto-refresh";
@@ -9,7 +9,7 @@ import { useEffect } from "react";
99
import { Card, Col, ListGroup, Row } from "react-bootstrap";
1010

1111
const SchedulersPage = () => {
12-
const schedulers = useServerObject<string[]>(
12+
const schedulers = useServerObject<SchedulerEntity[]>(
1313
"/spring-tasks-api/schedulers"
1414
);
1515
const tasks = useServerObject<string[]>("/spring-tasks-api/tasks");
@@ -29,9 +29,9 @@ const SchedulersPage = () => {
2929
</Col>
3030
</Row>
3131
<Row>
32-
{schedulers.data?.map((i) => (
33-
<Col key={i} xl="6" md="12" className="mb-2">
34-
<SchedulerStatusView name={i} />
32+
{schedulers.data?.map((s) => (
33+
<Col key={s.id} xl="6" md="12" className="mb-2">
34+
<SchedulerStatusView scheduler={s} />
3535
</Col>
3636
))}
3737

ui/src/scheduler/views/scheduler.view.tsx

Lines changed: 58 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,92 +1,74 @@
11
import { SchedulerEntity } from "@src/server-api";
2-
import { useServerObject } from "@src/shared/http-request";
3-
import ReloadButton from "@src/shared/view/reload-button.view";
4-
import useAutoRefresh from "@src/shared/use-auto-refresh";
52
import { DateTime } from "luxon";
63
import { Card, Col, Form, ProgressBar, Row } from "react-bootstrap";
74

85
interface Props {
9-
name: string;
6+
scheduler: SchedulerEntity;
107
}
11-
const SchedulerStatusView = ({ name }: Props) => {
12-
const status = useServerObject<SchedulerEntity>(
13-
`/spring-tasks-api/schedulers/${name}`
14-
);
15-
16-
useAutoRefresh(10000, status.doGet, [name]);
17-
8+
const SchedulerStatusView = ({ scheduler }: Props) => {
189
return (
1910
<Card>
2011
<Card.Header
2112
as="h5"
2213
className="d-flex justify-content-between align-items-center"
2314
>
24-
<span>{name}</span>
25-
<ReloadButton
26-
isLoading={status.isLoading}
27-
onClick={() => status.doGet()}
28-
/>
15+
<span>{scheduler.id}</span>
2916
</Card.Header>
30-
{status.data ? (
31-
<Card.Body>
32-
<Row>
33-
<Col>
34-
Last Ping:{" "}
35-
{durationSince(new Date(status.data.lastPing))}
36-
</Col>
37-
<Col>
38-
<Form.Label htmlFor={"slot-" + name}>
39-
{"Running " +
40-
status.data.runnungTasks +
41-
" of " +
42-
status.data.tasksSlotCount}
43-
</Form.Label>
44-
<ProgressBar
45-
id={"slot-" + name}
46-
animated={true}
47-
min={0}
48-
now={status.data.runnungTasks}
49-
max={status.data.tasksSlotCount}
50-
></ProgressBar>
51-
</Col>
52-
</Row>
53-
<Row>
54-
<Col>
55-
<Form.Label htmlFor={"cpu-" + name}>CPU</Form.Label>
56-
<ProgressBar
57-
id={"cpu-" + name}
58-
animated={true}
59-
min={0}
60-
now={status.data.systemLoadAverage}
61-
max={100}
62-
label={
63-
Math.round(
64-
status.data.systemLoadAverage * 10
65-
) /
66-
10 +
67-
"%"
68-
}
69-
></ProgressBar>
70-
</Col>
71-
<Col>
72-
<Form.Label htmlFor={"memory-" + name}>
73-
Memory{" "}
74-
{formatMemory(status.data.usedHeap) +
75-
" of " +
76-
formatMemory(status.data.maxHeap)}
77-
</Form.Label>
78-
<ProgressBar
79-
id={"memory-" + name}
80-
animated={true}
81-
min={0}
82-
now={status.data.usedHeap}
83-
max={status.data.maxHeap}
84-
label={formatMemory(status.data.usedHeap)}
85-
></ProgressBar>
86-
</Col>
87-
</Row>
88-
</Card.Body>
89-
) : undefined}
17+
<Card.Body>
18+
<Row>
19+
<Col>
20+
Last Ping: {durationSince(new Date(scheduler.lastPing))}
21+
</Col>
22+
<Col>
23+
<Form.Label htmlFor={"slot-" + name}>
24+
{"Running " +
25+
scheduler.runnungTasks +
26+
" of " +
27+
scheduler.tasksSlotCount}
28+
</Form.Label>
29+
<ProgressBar
30+
id={"slot-" + name}
31+
animated={true}
32+
min={0}
33+
now={scheduler.runnungTasks}
34+
max={scheduler.tasksSlotCount}
35+
></ProgressBar>
36+
</Col>
37+
</Row>
38+
<Row>
39+
<Col>
40+
<Form.Label htmlFor={"cpu-" + name}>CPU</Form.Label>
41+
<ProgressBar
42+
id={"cpu-" + name}
43+
animated={true}
44+
min={0}
45+
now={scheduler.systemLoadAverage}
46+
max={100}
47+
label={
48+
Math.round(scheduler.systemLoadAverage * 10) /
49+
10 +
50+
"%"
51+
}
52+
></ProgressBar>
53+
</Col>
54+
<Col>
55+
<Form.Label htmlFor={"memory-" + name}>
56+
Memory{" "}
57+
{formatMemory(scheduler.usedHeap) +
58+
" of " +
59+
formatMemory(scheduler.maxHeap)}
60+
</Form.Label>
61+
<ProgressBar
62+
id={"memory-" + name}
63+
animated={true}
64+
min={0}
65+
now={scheduler.usedHeap}
66+
max={scheduler.maxHeap}
67+
label={formatMemory(scheduler.usedHeap)}
68+
></ProgressBar>
69+
</Col>
70+
</Row>
71+
</Card.Body>
9072
</Card>
9173
);
9274
};

0 commit comments

Comments
 (0)