Skip to content

Commit

Permalink
Merge pull request #22 from oneteme/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
usfalami authored Sep 22, 2023
2 parents 55f8283 + cc80905 commit 4e3cbf7
Show file tree
Hide file tree
Showing 12 changed files with 581 additions and 246 deletions.
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,12 @@
<dependency>
<groupId>io.github.oneteme.traceapi</groupId>
<artifactId>traceapi-core</artifactId>
<version>0.0.12</version>
<version>0.0.15-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.github.oneteme</groupId>
<artifactId>jquery</artifactId>
<version>1.0.1-SNAPSHOT</version>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
Expand Down
28 changes: 21 additions & 7 deletions src/main/java/org/usf/trace/api/server/ApiController.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import static org.usf.traceapi.core.RemoteTraceSender.MAIN_ENDPOINT;
import static org.usf.traceapi.core.RemoteTraceSender.TRACE_ENDPOINT;

import java.time.Instant;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
Expand All @@ -33,7 +34,7 @@
@RestController
@RequestMapping(value = TRACE_ENDPOINT, produces = APPLICATION_JSON_VALUE)
@RequiredArgsConstructor
public class ApiController {
public class ApiController {

private final RequestDao dao;
private final SessionQueueService queueService;
Expand All @@ -60,10 +61,17 @@ private ResponseEntity<Void> appendRequest(Session session){
}

@GetMapping(INCOMING_ENDPOINT)
public List<IncomingRequest> getIncomingRequestByIds(
public List<IncomingRequest> getIncomingRequestByCriteria(
@RequestParam(defaultValue = "true", name = "lazy") boolean lazy,
@RequestParam(required = false, name = "id") String[] id) { // without tree
return dao.getIncomingRequestById(lazy, id);
@RequestParam(required = false, name = "id") String[] id,
@RequestParam(required = false, name = "name") String[] name,
@RequestParam(required = false, name = "env") String[] env,
@RequestParam(required = false, name = "port") String[] port,
@RequestParam(required = false, name = "start") Instant start,
@RequestParam(required = false, name = "end") Instant end ){ // without tree
FilterCriteria fc = new FilterCriteria(id,null,name,env,port,null,start,end);
System.out.println(fc.toString());
return dao.getIncomingRequestByCriteria(lazy,fc);
}

@GetMapping("incoming/request/{id}")
Expand All @@ -72,10 +80,16 @@ public IncomingRequest getIncomingRequestById(@PathVariable String id) { // with
}

@GetMapping(MAIN_ENDPOINT)
public List<MainRequest> getMainRequestByIds(
public List<MainRequest> getMainRequestByCriteria(
@RequestParam(defaultValue = "true", name = "lazy") boolean lazy,
@RequestParam(required = false, name = "id") String[] id) { // without tree
return dao.getMainRequestById(lazy, id);
@RequestParam(required = false, name = "id") String[] id,
@RequestParam(required = false, name = "env") String[] env,
@RequestParam(required = false, name = "launchmode") String[] launchMode,
@RequestParam(required = false, name = "start") Instant start,
@RequestParam(required = false, name = "end") Instant end ) {

FilterCriteria fc = new FilterCriteria(null,id,null,env,null,launchMode,start,end);
return dao.getMainRequestByCriteria(lazy,fc);
}

@GetMapping("main/request/{id}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
import org.usf.jquery.core.RequestQuery;
import org.usf.jquery.core.RequestQueryBuilder;
import org.usf.jquery.web.RequestQueryParam;
import org.usf.jquery.web.RequestQueryParamResolver;

Expand All @@ -15,7 +16,7 @@ public class CommonRequestQueryResolver implements HandlerMethodArgumentResolver

@Override
public boolean supportsParameter(MethodParameter parameter) {
return RequestQuery.class.isAssignableFrom(parameter.getNestedParameterType())
return RequestQueryBuilder.class.isAssignableFrom(parameter.getNestedParameterType())
&& parameter.hasParameterAnnotation(RequestQueryParam.class);
}

Expand Down
114 changes: 114 additions & 0 deletions src/main/java/org/usf/trace/api/server/FilterCriteria.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
package org.usf.trace.api.server;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

import java.sql.Time;
import java.sql.Timestamp;
import java.time.Instant;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Objects;
import java.util.stream.Stream;

import static java.sql.Types.TIMESTAMP;
import static java.sql.Types.VARCHAR;

@Getter
@Setter
@AllArgsConstructor
public class FilterCriteria {

private final String[] idIncoming; //

private final String[] idMain;
private final String[] name;
private final String[] env;
private final String[] port;

private final String[] launchMode;
private final Instant start;
private final Instant end;


public String toSql(Filters idIncomingColname,
Filters idMainColname,
Filters nameColname,
Filters envColname,
Filters portColname,
Filters launchModeColName,
Filters startColName,
Filters endColName,
Collection<Object> args,
Collection<Integer> argTypes) {

var sql = " WHERE 1 = 1";
sql += toSql(idIncomingColname,args,argTypes,getIdIncoming());
sql += toSql(idMainColname,args,argTypes,getIdMain());
sql += toSql(nameColname,args,argTypes,getName());
sql += toSql(envColname,args,argTypes,getEnv());
sql += toSql(portColname,args,argTypes,getPort());
sql += toSql(launchModeColName,args,argTypes,getLaunchMode());
sql += startToSql(startColName,args,argTypes,getStart()) ;
sql += endToSql( endColName,args,argTypes,getEnd());
return sql;
}


String toSql(Filters colname, Collection<Object> args, Collection<Integer> argTypes, String... values){
if(values == null || values.length == 0){
return "";
}

String sql = "";
if(Stream.of(values).anyMatch(Objects::isNull)){
sql = colname + " IS NULL";
}
if(!sql.isEmpty()){
if(values.length == 1){
return " AND "+ sql;
}
return " AND (" + sql + " " + colname + "IN(" + Utils.nArg(values.length) + "))";//error
}
args.addAll(Arrays.asList(values));
argTypes.addAll(Collections.nCopies(values.length, colname.getType()));
return " AND "+ colname + " IN(" + Utils.nArg(values.length) + ")";
}

String startToSql(Filters start , Collection<Object> args, Collection<Integer> argTypes, Instant value){

if(value != null ){
args.add(Timestamp.from(value));
argTypes.add(TIMESTAMP);
return " AND "+ start +" >= ?";
}
return "";
}

String endToSql(Filters end , Collection<Object> args, Collection<Integer> argTypes, Instant value){

if(value != null ){
args.add(Timestamp.from(value));
argTypes.add(TIMESTAMP);
return " AND "+ end +" < ?";
}
return "";
}


@Override
public String toString() {
return "FilterCriteria{" +
"id=" + Arrays.toString(idIncoming) +
", host=" + Arrays.toString(name) +
", env=" + Arrays.toString(env) +
", port=" + Arrays.toString(port) +
", start='" + start + '\'' +
", end='" + end + '\'' +
'}';
}


}
27 changes: 27 additions & 0 deletions src/main/java/org/usf/trace/api/server/Filters.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.usf.trace.api.server;

import static java.sql.Types.*;



public enum Filters {
ID_IN_REQ(VARCHAR),
ID_MAIN_REQ(VARCHAR),
VA_APP_NME(VARCHAR),
VA_ENV(VARCHAR),
CD_PRT(INTEGER),
DH_DBT(TIMESTAMP),
DH_FIN(TIMESTAMP),
LNCH(VARCHAR);
private int columnType;

Filters(int columnType) {
this.columnType = columnType;
}



public int getType() {
return this.columnType;
}
}
84 changes: 42 additions & 42 deletions src/main/java/org/usf/trace/api/server/MetadataController.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import static java.util.Arrays.asList;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.usf.trace.api.server.config.TraceApiColumn.*;
import static org.usf.trace.api.server.config.TraceApiTable.INCOMING_REQUEST_TABLE;
import static org.usf.trace.api.server.config.TraceApiTable.REQUEST;

import java.util.List;

Expand All @@ -26,60 +26,60 @@ public class MetadataController {
@GetMapping("aggregate")
List<FieldMetadata> fetch() {
return asList(
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, COUNT, COUNT.reference(), "Nombre d'appels", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, ELAPSEDTIME, ELAPSEDTIME.reference(), "temps de réponse (s)", "s"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, AVG_ELAPSEDTIME, AVG_ELAPSEDTIME.reference(), "temps de réponse moyen(s)", "s"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, MAX_ELAPSEDTIME, MAX_ELAPSEDTIME.reference(), "temps de réponse max(s)", "s"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, MIN_ELAPSEDTIME, MIN_ELAPSEDTIME.reference(), "temps de réponse min(s)", "s"),
new SimpleFieldMetadata(REQUEST, COUNT, COUNT.reference(), "Nombre d'appels", "count"),
new SimpleFieldMetadata(REQUEST, ELAPSEDTIME, ELAPSEDTIME.reference(), "temps de réponse (s)", "s"),
new SimpleFieldMetadata(REQUEST, AVG_ELAPSEDTIME, AVG_ELAPSEDTIME.reference(), "temps de réponse moyen(s)", "s"),
new SimpleFieldMetadata(REQUEST, MAX_ELAPSEDTIME, MAX_ELAPSEDTIME.reference(), "temps de réponse max(s)", "s"),
new SimpleFieldMetadata(REQUEST, MIN_ELAPSEDTIME, MIN_ELAPSEDTIME.reference(), "temps de réponse min(s)", "s"),

new CombinedFieldMetadata("nombre d'appels OK / KO", asList(
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, COUNT_STATUS_ERROR, COUNT_STATUS_ERROR.reference(), "nombre d'appels en erreur", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, COUNT_STATUS_SUCCES, COUNT_STATUS_SUCCES.reference(), "nombre d'appels OK", "count"))),
new SimpleFieldMetadata(REQUEST, COUNT_ERROR, COUNT_ERROR.reference(), "nombre d'appels en erreur", "count"),
new SimpleFieldMetadata(REQUEST, COUNT_SUCCES, COUNT_SUCCES.reference(), "nombre d'appels OK", "count"))),

new CombinedFieldMetadata("nombre d'appels 2xx/4xx/5xx", asList(
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, COUNT_STATUS_ERROR_CLIENT, COUNT_STATUS_ERROR_CLIENT.reference(), "nombre d'appels en erreur client", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, COUNT_STATUS_ERROR_SERVER, COUNT_STATUS_ERROR_SERVER.reference(), "nombre d'appels en erreur serveur", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, COUNT_STATUS_SUCCES, COUNT_STATUS_SUCCES.reference(), "nombre d'appels OK", "c°"))),
new SimpleFieldMetadata(REQUEST, COUNT_ERROR_CLIENT, COUNT_ERROR_CLIENT.reference(), "nombre d'appels en erreur client", "count"),
new SimpleFieldMetadata(REQUEST, COUNT_ERROR_SERVER, COUNT_ERROR_SERVER.reference(), "nombre d'appels en erreur serveur", "count"),
new SimpleFieldMetadata(REQUEST, COUNT_SUCCES, COUNT_SUCCES.reference(), "nombre d'appels OK", "c°"))),

new CombinedFieldMetadata("nombre d'appels par temps de réponse", asList(
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, COUNT_ELAPSEDTIME_SLOWEST, COUNT_ELAPSEDTIME_SLOWEST.reference(), "temps de réponse les plus lents ", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, COUNT_ELAPSEDTIME_SLOW, COUNT_ELAPSEDTIME_SLOW.reference(), "temps de réponse lent", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, COUNT_ELAPSEDTIME_MEDIUM, COUNT_ELAPSEDTIME_MEDIUM.reference(), "temps de réponse moyen", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, COUNT_ELAPSEDTIME_FAST, COUNT_ELAPSEDTIME_FAST.reference(), "temps de réponse rapide", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, COUNT_ELAPSEDTIME_FASTEST, COUNT_ELAPSEDTIME_FASTEST.reference(), "temps de réponse les plus rapides", "count")))
new SimpleFieldMetadata(REQUEST, COUNT_SLOWEST, COUNT_SLOWEST.reference(), "temps de réponse les plus lents ", "count"),
new SimpleFieldMetadata(REQUEST, COUNT_SLOW, COUNT_SLOW.reference(), "temps de réponse lent", "count"),
new SimpleFieldMetadata(REQUEST, COUNT_MEDIUM, COUNT_MEDIUM.reference(), "temps de réponse moyen", "count"),
new SimpleFieldMetadata(REQUEST, COUNT_FAST, COUNT_FAST.reference(), "temps de réponse rapide", "count"),
new SimpleFieldMetadata(REQUEST, COUNT_FASTEST, COUNT_FASTEST.reference(), "temps de réponse les plus rapides", "count")))
);
}

@GetMapping("filter")
List<SimpleFieldMetadata> fetchFilters() {
return asList(

new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, MTH, MTH.reference(), "Methode", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, PROTOCOL, PROTOCOL.reference(), "Protocole", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, HOST, HOST.reference(), "Hôte", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, PORT, PORT.reference(), "Port", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, PATH, PATH.reference(), "Path", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, QUERY, QUERY.reference(), "Query", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, CONTENT_TYPE, CONTENT_TYPE.reference(), "Content-Type", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, AUTH, AUTH.reference(), "Schéma d'authentification", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, STATUS, STATUS.reference(), "Status", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, SIZE_IN, SIZE_IN.reference(), "Taille d'entrée", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, SIZE_OUT, SIZE_OUT.reference(), "Taille de sortie", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, START_DATETIME, START_DATETIME.reference(), "Date de début", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, FINISH_DATETIME, FINISH_DATETIME.reference(), "Date de fin", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, THREAD, THREAD.reference(), "Thread", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, API_NAME, API_NAME.reference(), "Nom d'Api", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, USER, USER.reference(), "Utilisateur", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, APP_NAME, APP_NAME.reference(), "Nom d'application", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, VERSION, VERSION.reference(), "Version", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, ADDRESS, ADDRESS.reference(), "Adresse", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, ENVIRONEMENT, ENVIRONEMENT.reference(), "Environement", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, OS, OS.reference(), "Sytèm d'exploitation", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, RE, RE.reference(), "Environement d'exécution", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, AS_DATE, AS_DATE.reference(), "Format date", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, BY_DAY, BY_DAY.reference(), "Format jour", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, BY_MONTH, BY_MONTH.reference(), "Format mois", "count"),
new SimpleFieldMetadata(INCOMING_REQUEST_TABLE, BY_YEAR, BY_YEAR.reference(), "Format Year", "count")
new SimpleFieldMetadata(REQUEST, METHOD, METHOD.reference(), "Methode", "count"),
new SimpleFieldMetadata(REQUEST, PROTOCOL, PROTOCOL.reference(), "Protocole", "count"),
new SimpleFieldMetadata(REQUEST, HOST, HOST.reference(), "Hôte", "count"),
new SimpleFieldMetadata(REQUEST, PORT, PORT.reference(), "Port", "count"),
new SimpleFieldMetadata(REQUEST, PATH, PATH.reference(), "Path", "count"),
new SimpleFieldMetadata(REQUEST, QUERY, QUERY.reference(), "Query", "count"),
new SimpleFieldMetadata(REQUEST, MEDIA, MEDIA.reference(), "Content-Type", "count"),
new SimpleFieldMetadata(REQUEST, AUTH, AUTH.reference(), "Schéma d'authentification", "count"),
new SimpleFieldMetadata(REQUEST, STATUS, STATUS.reference(), "Status", "count"),
new SimpleFieldMetadata(REQUEST, SIZE_IN, SIZE_IN.reference(), "Taille d'entrée", "count"),
new SimpleFieldMetadata(REQUEST, SIZE_OUT, SIZE_OUT.reference(), "Taille de sortie", "count"),
new SimpleFieldMetadata(REQUEST, START, START.reference(), "Date de début", "count"),
new SimpleFieldMetadata(REQUEST, END, END.reference(), "Date de fin", "count"),
new SimpleFieldMetadata(REQUEST, THREAD, THREAD.reference(), "Thread", "count"),
new SimpleFieldMetadata(REQUEST, API_NAME, API_NAME.reference(), "Nom d'Api", "count"),
new SimpleFieldMetadata(REQUEST, USER, USER.reference(), "Utilisateur", "count"),
new SimpleFieldMetadata(REQUEST, APP_NAME, APP_NAME.reference(), "Nom d'application", "count"),
new SimpleFieldMetadata(REQUEST, VERSION, VERSION.reference(), "Version", "count"),
new SimpleFieldMetadata(REQUEST, ADDRESS, ADDRESS.reference(), "Adresse", "count"),
new SimpleFieldMetadata(REQUEST, ENVIRONEMENT, ENVIRONEMENT.reference(), "Environement", "count"),
new SimpleFieldMetadata(REQUEST, OS, OS.reference(), "Sytèm d'exploitation", "count"),
new SimpleFieldMetadata(REQUEST, RE, RE.reference(), "Environement d'exécution", "count"),
new SimpleFieldMetadata(REQUEST, AS_DATE, AS_DATE.reference(), "Format date", "count"),
new SimpleFieldMetadata(REQUEST, BY_DAY, BY_DAY.reference(), "Format jour", "count"),
new SimpleFieldMetadata(REQUEST, BY_MONTH, BY_MONTH.reference(), "Format mois", "count"),
new SimpleFieldMetadata(REQUEST, BY_YEAR, BY_YEAR.reference(), "Format Year", "count")
);
}
}
Loading

0 comments on commit 4e3cbf7

Please sign in to comment.