(index) Fix broken metrics

This commit is contained in:
Viktor Lofgren 2023-11-10 15:29:28 +01:00
parent 858357a246
commit e9a01caa5c

View File

@ -31,6 +31,7 @@ import nu.marginalia.index.svc.searchset.SmallSearchSet;
import nu.marginalia.model.gson.GsonFactory; import nu.marginalia.model.gson.GsonFactory;
import nu.marginalia.model.idx.DocumentMetadata; import nu.marginalia.model.idx.DocumentMetadata;
import nu.marginalia.model.idx.WordMetadata; import nu.marginalia.model.idx.WordMetadata;
import nu.marginalia.service.module.ServiceConfiguration;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.slf4j.Marker; import org.slf4j.Marker;
@ -56,17 +57,17 @@ public class IndexQueryService extends IndexApiImplBase {
private static final Counter wmsa_query_timeouts = Counter.build() private static final Counter wmsa_query_timeouts = Counter.build()
.name("wmsa_query_timeouts") .name("wmsa_query_timeouts")
.help("Query timeout counter") .help("Query timeout counter")
.subsystem("index-"+System.getenv("WMSA_SERVICE_NODE")) .labelNames("node")
.register(); .register();
private static final Gauge wmsa_query_cost = Gauge.build() private static final Gauge wmsa_query_cost = Gauge.build()
.name("wmsa_query_cost") .name("wmsa_query_cost")
.help("Computational cost of query") .help("Computational cost of query")
.subsystem("index-"+System.getenv("WMSA_SERVICE_NODE")) .labelNames("node")
.register(); .register();
private static final Histogram wmsa_query_time = Histogram.build() private static final Histogram wmsa_query_time = Histogram.build()
.name("wmsa_query_time") .name("wmsa_query_time")
.linearBuckets(50., 50., 15) .linearBuckets(50., 50., 15)
.subsystem("index-"+System.getenv("WMSA_SERVICE_NODE")) .labelNames("node")
.help("Index-side query time") .help("Index-side query time")
.register(); .register();
@ -79,16 +80,19 @@ public class IndexQueryService extends IndexApiImplBase {
private final IndexMetadataService metadataService; private final IndexMetadataService metadataService;
private final SearchTermsService searchTermsSvc; private final SearchTermsService searchTermsSvc;
private final int nodeId;
@Inject @Inject
public IndexQueryService(IndexQueryExecutor queryExecutor, public IndexQueryService(IndexQueryExecutor queryExecutor,
ServiceConfiguration serviceConfiguration,
SearchIndex index, SearchIndex index,
IndexResultDecorator resultDecorator, IndexResultDecorator resultDecorator,
IndexSearchSetsService searchSetsService, IndexSearchSetsService searchSetsService,
IndexMetadataService metadataService, IndexMetadataService metadataService,
SearchTermsService searchTerms) SearchTermsService searchTerms)
{ {
this.nodeId = serviceConfiguration.node();
this.queryExecutor = queryExecutor; this.queryExecutor = queryExecutor;
this.index = index; this.index = index;
this.resultDecorator = resultDecorator; this.resultDecorator = resultDecorator;
@ -123,24 +127,32 @@ public class IndexQueryService extends IndexApiImplBase {
} }
public Object search(Request request, Response response) { public Object search(Request request, Response response) {
String json = request.body(); final String json = request.body();
SearchSpecification specsSet = gson.fromJson(json, SearchSpecification.class); final SearchSpecification specsSet = gson.fromJson(json, SearchSpecification.class);
if (!index.isAvailable()) { if (!index.isAvailable()) {
Spark.halt(503, "Index is not loaded"); Spark.halt(503, "Index is not loaded");
} }
final String nodeName = Integer.toString(nodeId);
try { try {
return wmsa_query_time.time(() -> { return wmsa_query_time
.labels(nodeName)
.time(() -> {
var params = new SearchParameters(specsSet, getSearchSet(specsSet)); var params = new SearchParameters(specsSet, getSearchSet(specsSet));
SearchResultSet results = executeSearch(params); SearchResultSet results = executeSearch(params);
logger.info(queryMarker, "Index Result Count: {}", results.size()); logger.info(queryMarker, "Index Result Count: {}", results.size());
wmsa_query_cost.set(params.getDataCost()); wmsa_query_cost
.labels(nodeName)
.set(params.getDataCost());
if (!params.hasTimeLeft()) { if (!params.hasTimeLeft()) {
wmsa_query_timeouts.inc(); wmsa_query_timeouts
.labels(nodeName)
.inc();
} }
return results; return results;