MarginaliaSearch/code/services-application/search-service/java/nu/marginalia/search/SearchService.java

85 lines
3.3 KiB
Java
Raw Normal View History

2023-03-04 12:19:01 +00:00
package nu.marginalia.search;
2022-05-19 15:45:26 +00:00
import com.google.inject.Inject;
import io.jooby.Context;
import io.jooby.Jooby;
import io.prometheus.client.Counter;
import io.prometheus.client.Histogram;
2023-03-04 12:19:01 +00:00
import nu.marginalia.search.svc.*;
import nu.marginalia.service.discovery.property.ServicePartition;
import nu.marginalia.service.server.BaseServiceParams;
import nu.marginalia.service.server.JoobyService;
2022-05-19 15:45:26 +00:00
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
2022-05-19 15:45:26 +00:00
public class SearchService extends JoobyService {
2022-05-19 15:45:26 +00:00
private final SearchSiteSubscriptionService siteSubscriptionService;
2023-03-04 12:19:01 +00:00
private static final Logger logger = LoggerFactory.getLogger(SearchService.class);
private static final Histogram wmsa_search_service_request_time = Histogram.build()
.name("wmsa_search_service_request_time")
2024-01-02 16:13:14 +00:00
.linearBuckets(0.05, 0.05, 15)
.labelNames("matchedPath", "method")
.help("Search service request time (seconds)")
.register();
private static final Counter wmsa_search_service_error_count = Counter.build()
.name("wmsa_search_service_error_count")
.labelNames("matchedPath", "method")
.help("Search service error count")
.register();
2022-05-19 15:45:26 +00:00
@Inject
public SearchService(BaseServiceParams params,
SearchFrontPageService frontPageService,
2023-03-04 12:19:01 +00:00
SearchAddToCrawlQueueService addToCrawlQueueService,
SearchSiteSubscriptionService siteSubscriptionService,
SearchSiteInfoService siteInfoService,
SearchCrosstalkService crosstalkService,
SearchBrowseService searchBrowseService,
SearchQueryService searchQueryService)
throws Exception {
super(params,
ServicePartition.any(),
List.of(), // No GRPC services
List.of(new SearchFrontPageService_(frontPageService),
new SearchQueryService_(searchQueryService),
new SearchSiteInfoService_(siteInfoService),
new SearchCrosstalkService_(crosstalkService),
new SearchAddToCrawlQueueService_(addToCrawlQueueService),
new SearchBrowseService_(searchBrowseService)
));
2022-05-19 15:45:26 +00:00
this.siteSubscriptionService = siteSubscriptionService;
}
@Override
public void startJooby(Jooby jooby) {
super.startJooby(jooby);
final String startTimeAttribute = "start-time";
jooby.get("/export-opml", siteSubscriptionService::exportOpml);
jooby.before((Context ctx) -> {
ctx.setAttribute(startTimeAttribute, System.nanoTime());
});
jooby.after((Context ctx, Object result, Throwable failure) -> {
if (failure != null) {
wmsa_search_service_error_count.labels(ctx.getRoute().getPattern(), ctx.getMethod()).inc();
}
else {
Long startTime = ctx.getAttribute(startTimeAttribute);
if (startTime != null) {
wmsa_search_service_request_time.labels(ctx.getRoute().getPattern(), ctx.getMethod())
.observe((System.nanoTime() - startTime) / 1e9);
}
}
});
2022-05-19 15:45:26 +00:00
}
2022-05-19 15:45:26 +00:00
}