134 lines
4.2 KiB
Java
134 lines
4.2 KiB
Java
package eu.dnetlib.scholix.api;
|
|
|
|
import eu.dnetlib.common.app.AbstractDnetApp;
|
|
import io.micrometer.core.aop.TimedAspect;
|
|
import io.micrometer.core.instrument.DistributionSummary;
|
|
import io.micrometer.core.instrument.Meter;
|
|
import io.micrometer.core.instrument.MeterRegistry;
|
|
import io.micrometer.core.instrument.Timer;
|
|
import io.micrometer.core.instrument.config.MeterFilter;
|
|
import io.micrometer.core.instrument.distribution.DistributionStatisticConfig;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.boot.SpringApplication;
|
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|
import org.springframework.cache.annotation.EnableCaching;
|
|
import org.springframework.context.annotation.Bean;
|
|
import org.springframework.context.annotation.ComponentScan;
|
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
|
import springfox.documentation.builders.ApiInfoBuilder;
|
|
import springfox.documentation.builders.RequestHandlerSelectors;
|
|
import springfox.documentation.service.ApiInfo;
|
|
import springfox.documentation.spi.DocumentationType;
|
|
import springfox.documentation.spring.web.plugins.Docket;
|
|
import springfox.documentation.swagger2.annotations.EnableSwagger2;
|
|
|
|
import java.time.Duration;
|
|
|
|
@SpringBootApplication
|
|
@EnableSwagger2
|
|
@EnableCaching
|
|
@EnableScheduling
|
|
@ComponentScan(basePackages = "eu.dnetlib")
|
|
public class MainApplication extends AbstractDnetApp {
|
|
|
|
@Value("${dhp.swagger.api.host}")
|
|
private String swaggetHost;
|
|
|
|
@Value("${dhp.swagger.api.basePath}")
|
|
private String swaggerPath;
|
|
|
|
final String descriptionAPI = " <p style=\"text-align:center;\"><img src=\"/logo.png\" alt=\"ScholeXplorer\"> </p>" +
|
|
"The Scholix Swagger API allows clients to run REST queries over the Scholexplorer index in order to fetch links matching given criteria. In the current version, clients can search for:" +
|
|
"<ul><li>Links whose source object has a given PID or PID type</li>" +
|
|
"<li>Links whose source object has been published by a given data source (\"data source as publisher\")</li>" +
|
|
"<li>Links that were collected from a given data source (\"data source as provider\").</li></ul>";
|
|
|
|
public static void main(final String[] args) {
|
|
SpringApplication.run(MainApplication.class, args);
|
|
}
|
|
|
|
|
|
@Bean
|
|
public TimedAspect timedAspect(MeterRegistry meterRegistry) {
|
|
|
|
double scale = 1000000;
|
|
MeterFilter mf = new MeterFilter() {
|
|
@Override
|
|
public DistributionStatisticConfig configure(Meter.Id id, DistributionStatisticConfig config) {
|
|
if (id.getName().startsWith("scholix")) {
|
|
|
|
return DistributionStatisticConfig.builder()
|
|
.percentiles(0.20, 0.50, 0.75,0.95)
|
|
.percentilesHistogram(false)
|
|
.serviceLevelObjectives(5.0*scale, 10.0*scale, 250*scale, 500*scale, 750*scale ,1000.0*scale,2500.0*scale,5000.0*scale,7500.0*scale,10000.0*scale )
|
|
|
|
// .minimumExpectedValue(0.008)
|
|
//// .maximumExpectedValue(1000000.0)
|
|
.build()
|
|
.merge(config);
|
|
}
|
|
return config;
|
|
}
|
|
};
|
|
|
|
|
|
meterRegistry.config().meterFilter(mf);
|
|
|
|
|
|
|
|
return new TimedAspect(meterRegistry);
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
protected void configSwagger(final Docket docket) {
|
|
docket
|
|
.host(swaggetHost)
|
|
.pathMapping(swaggerPath)
|
|
.groupName("Scholexplorer V1")
|
|
.select()
|
|
.apis(RequestHandlerSelectors.any())
|
|
.paths(p -> p.startsWith("/v1"))
|
|
.build()
|
|
.apiInfo(new ApiInfoBuilder()
|
|
.title("Scholexplorer API V1.0")
|
|
.description(descriptionAPI)
|
|
.version("1.0")
|
|
.contact(ApiInfo.DEFAULT_CONTACT)
|
|
.license("Apache 2.0")
|
|
.licenseUrl("http://www.apache.org/licenses/LICENSE-2.0")
|
|
.build());
|
|
}
|
|
|
|
|
|
|
|
@Bean (name = "SpringDOcketv2")
|
|
public Docket v2Docket() {
|
|
|
|
|
|
final Docket docket = new Docket(DocumentationType.SWAGGER_2);
|
|
|
|
docket
|
|
.host(swaggetHost)
|
|
.pathMapping(swaggerPath)
|
|
.groupName("Scholexplorer V2")
|
|
.select()
|
|
.apis(RequestHandlerSelectors.any())
|
|
.paths(p -> p.startsWith("/v2"))
|
|
.build()
|
|
.apiInfo(new ApiInfoBuilder()
|
|
.title("Scholexplorer API V2.0")
|
|
.description(descriptionAPI)
|
|
.version("2.0")
|
|
.contact(ApiInfo.DEFAULT_CONTACT)
|
|
.license("Apache 2.0")
|
|
.licenseUrl("http://www.apache.org/licenses/LICENSE-2.0")
|
|
.build());
|
|
|
|
return docket;
|
|
}
|
|
|
|
}
|