1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.app.web.api.admin.crawlinginfo;
17
18 import java.util.List;
19 import java.util.stream.Collectors;
20
21 import org.apache.logging.log4j.LogManager;
22 import org.apache.logging.log4j.Logger;
23 import org.codelibs.fess.app.pager.CrawlingInfoPager;
24 import org.codelibs.fess.app.service.CrawlingInfoService;
25 import org.codelibs.fess.app.web.api.ApiResult;
26 import org.codelibs.fess.app.web.api.ApiResult.ApiLogResponse;
27 import org.codelibs.fess.app.web.api.ApiResult.ApiResponse;
28 import org.codelibs.fess.app.web.api.ApiResult.Status;
29 import org.codelibs.fess.app.web.api.admin.FessApiAdminAction;
30 import org.codelibs.fess.helper.ProcessHelper;
31 import org.codelibs.fess.opensearch.config.exentity.CrawlingInfo;
32 import org.lastaflute.web.Execute;
33 import org.lastaflute.web.response.JsonResponse;
34
35 import jakarta.annotation.Resource;
36
37
38
39
40
41 public class ApiAdminCrawlinginfoAction extends FessApiAdminAction {
42
43
44
45
46 public ApiAdminCrawlinginfoAction() {
47 super();
48 }
49
50 private static final Logger logger = LogManager.getLogger(ApiAdminCrawlinginfoAction.class);
51
52
53
54
55 @Resource
56 private CrawlingInfoService crawlingInfoService;
57
58
59 @Resource
60 protected ProcessHelper processHelper;
61
62
63
64
65
66
67
68
69
70
71
72
73
74 @Execute
75 public JsonResponse<ApiResult> logs(final SearchBody body) {
76 validateApi(body, messages -> {});
77 final CrawlingInfoPager pager = copyBeanToNewBean(body, CrawlingInfoPager.class);
78 final List<CrawlingInfo> list = crawlingInfoService.getCrawlingInfoList(pager);
79 return asJson(new ApiResult.ApiLogsResponse<EditBody>().logs(list.stream().map(this::createEditBody).collect(Collectors.toList()))
80 .total(pager.getAllRecordCount())
81 .status(ApiResult.Status.OK)
82 .result());
83 }
84
85
86
87
88
89
90
91
92 @Execute
93 public JsonResponse<ApiResult> get$log(final String id) {
94 return asJson(new ApiLogResponse().log(crawlingInfoService.getCrawlingInfo(id).map(this::createEditBody).orElseGet(() -> {
95 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id));
96 return null;
97 })).status(Status.OK).result());
98 }
99
100
101
102
103
104
105
106
107 @Execute
108 public JsonResponse<ApiResult> delete$log(final String id) {
109 crawlingInfoService.getCrawlingInfo(id).ifPresent(entity -> {
110 try {
111 crawlingInfoService.delete(entity);
112 saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
113 } catch (final Exception e) {
114 logger.warn("Failed to process a request.", e);
115 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToDeleteCrudTable(GLOBAL, buildThrowableMessage(e)));
116 }
117 }).orElse(() -> {
118 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id));
119 });
120 return asJson(new ApiResponse().status(Status.OK).result());
121 }
122
123
124
125
126
127
128
129 @Execute
130 public JsonResponse<ApiResult> delete$all() {
131 try {
132 crawlingInfoService.deleteOldSessions(processHelper.getRunningSessionIdSet());
133 saveInfo(messages -> messages.addSuccessCrawlingInfoDeleteAll(GLOBAL));
134 } catch (final Exception e) {
135 logger.warn("Failed to process a request.", e);
136 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToDeleteCrudTable(GLOBAL, buildThrowableMessage(e)));
137 }
138 return asJson(new ApiResponse().status(Status.OK).result());
139 }
140
141
142
143
144
145
146
147 protected EditBody createEditBody(final CrawlingInfo entity) {
148 final EditBody body = new EditBody();
149 copyBeanToBean(entity, body, copyOp -> {
150 copyOp.excludeNull();
151 });
152 return body;
153 }
154 }