Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/ISSUE_TEMPLATE/desarrollo-de-un-indicatorstrategy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
name: Desarrollo de un IndicatorStrategy
about: Desarrollo de una clase para el cálculo de un indicador
title: "[COD IndicatorStrategy]"
labels: ''
assignees: ''

---

La clase desarrollada debe implementar la interfaz IndicatorStrategy<T> para calcular un indicador a partir de unas métricas definidas.
11 changes: 11 additions & 0 deletions .github/ISSUE_TEMPLATE/desarrollo-de-un-nuevo-remoteenquirer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
name: Desarrollo de un nuevo RemoteEnquirer
about: Desarrollo de una clase para consultar las métricas necesarias para el cálculo
de un indicador
title: "[COD RemoteEnquirer]"
labels: ''
assignees: ''

---

Se solicita el desarrollo de una clase que implemente la interfaz RemoteEnquirer para consultar las métricas necesarias para el desarrollo del indicador asignado
10 changes: 10 additions & 0 deletions .github/ISSUE_TEMPLATE/verificación-de-un-indicatorstrategy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
name: Verificación de un IndicatorStrategy
about: Desarrollo de los tests para la verificación del IndicatorStrategy asignado
title: "[TEST IndicatorStrategy]"
labels: ''
assignees: ''

---

Se deben desarrollar los test unidad para la verificación automática del IndicatorStrategy asignado en el issue:
10 changes: 10 additions & 0 deletions .github/ISSUE_TEMPLATE/verificación-de-un-remoteenquirer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
name: Verificación de un RemoteEnquirer
about: Desarrollo de los tests para la verificación del RemoteEnquirer asignado
title: "[TEST RemoteEnquirer]"
labels: ''
assignees: ''

---

Se deben desarrollar los test unidad para la verificación automática del RemoteEnquirer asignado en el issue:
73 changes: 73 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,19 @@ plugins {
// Apply the java-library plugin for API and implementation separation.
id 'java-library'

<<<<<<< HEAD
//A�ado el plugin para eclipse
id 'eclipse'
//para poder publicar paquetes en github
id 'maven-publish'
=======
//Añado el plugin para eclipse
id 'eclipse'
//para poder publicar paquetes en github
id 'maven-publish'
//Plugin para análisis estático de código
//id "nebula.lint" version "17.7.0"
>>>>>>> TAR_IndicatorStrategy
}


Expand Down Expand Up @@ -51,21 +58,32 @@ publishing {
version = '0.2'
//group = 'us.mitfs.samples'
tasks.withType(JavaCompile) {
<<<<<<< HEAD
//A�adir la opci�n Xlint
=======
//Añadir la opción Xlint
>>>>>>> TAR_IndicatorStrategy
options.deprecation = true
// options.encoding = 'ISO-8859-1'
options.encoding = 'UTF-8'
}

tasks.withType(Javadoc){

<<<<<<< HEAD
description = "Genera la documentaci�n"
//indicar que la codificaci�n es ISO
options.encoding = 'ISO-8859-1'
options.charSet = 'ISO-8859-1'
=======
description = "Genera la documentación"
//indicar que la codificación es ISO

// options.encoding = 'ISO-8859-1'
// options.charSet = 'ISO-8859-1'
options.encoding = 'UTF-8'
options.charSet = 'UTF-8'
>>>>>>> TAR_IndicatorStrategy
options.author = true
options.version = true
options.use = true
Expand Down Expand Up @@ -94,18 +112,32 @@ repositories {
dependencies {
// This dependency is exported to consumers, that is to say found on their compile classpath.
api 'org.apache.commons:commons-math3:3.6.1'
<<<<<<< HEAD
//A�ado la dependencia de la librer�a github que vamos a usar

// https://mvnrepository.com/artifact/org.kohsuke/github-api
//JAVADOC: https://github-api.kohsuke.org/apidocs/index.html
api 'org.kohsuke:github-api:1.301'
//Para la persistencia de informes usaremos la api apachepoi
// https://mvnrepository.com/artifact/org.apache.poi/poi
//JAVADOC: https://poi.apache.org/apidocs/5.0/
implementation 'org.apache.poi:poi:5.2.1'
//Para leer la configuraci�n como ficheros con datos en formato json
=======
//Añado la dependencia de la librería github que vamos a usar

// https://mvnrepository.com/artifact/org.kohsuke/github-api
//JAVADOC: https://github-api.kohsuke.org/apidocs/index.html
api 'org.kohsuke:github-api:1.301'

//Para la persistencia de informes usaremos la api apachepoi
// https://mvnrepository.com/artifact/org.apache.poi/poi
//JAVADOC: https://poi.apache.org/apidocs/5.0/
// implementation 'org.apache.poi:poi:5.2.5'
// https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml
implementation group: 'org.apache.poi', name: 'poi-ooxml', version: '5.2.5'
//Para leer la configuración como ficheros con datos en formato json
>>>>>>> TAR_IndicatorStrategy
// https://mvnrepository.com/artifact/javax.json/javax.json-api
//JAVADOC: https://javadoc.io/doc/org.glassfish/javax.json/latest/overview-summary.html
implementation group: 'javax.json', name: 'javax.json-api', version: '1.1.4'
Expand All @@ -117,17 +149,27 @@ dependencies {

// This dependency is used internally, and not exposed to consumers on their own compile classpath.
implementation 'com.google.guava:guava:30.1.1-jre'
<<<<<<< HEAD
//A�ado para usar mockito
=======
//Añado para usar mockito
>>>>>>> TAR_IndicatorStrategy
//JAVADOC: https://javadoc.io/doc/org.mockito/mockito-core/4.3.1/overview-summary.html
testImplementation 'org.mockito:mockito-core:4.3.1'
// https://mvnrepository.com/artifact/org.mockito/mockito-junit-jupiter
//JAVADOC: https://javadoc.io/doc/org.mockito/mockito-junit-jupiter/latest/index.html
testImplementation 'org.mockito:mockito-junit-jupiter:4.3.1'

<<<<<<< HEAD
testImplementation(platform('org.junit:junit-bom:5.8.2'))
//JAVADOC: https://www.javadoc.io/doc/org.junit.jupiter/junit-jupiter-api/latest/index.html
testImplementation('org.junit.jupiter:junit-jupiter')
=======
testImplementation(platform('org.junit:junit-bom:5.8.2'))
//JAVADOC: https://www.javadoc.io/doc/org.junit.jupiter/junit-jupiter-api/latest/index.html
testImplementation('org.junit.jupiter:junit-jupiter')
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
>>>>>>> TAR_IndicatorStrategy

}

Expand All @@ -139,6 +181,37 @@ test {
}


<<<<<<< HEAD
//Para publicar paquetes en github
//group = 'A4I'
publishing {
repositories {
maven {
name = "GitHubPackages"
url = uri("https://maven.pkg.github.com/mit-fs/audit4improve-api")
credentials {
//las propiedades gpr.user y gpr.key est�n configuradas en gradle.properties en el raiz del proyecto, y se a�ade a .gitignore para que no se suban
//O bien configuro las variables de entorno GITHUB_LOGIN y GITHUB_PACKAGES
username = project.findProperty("gpr.user") ?: System.getenv("GITHUB_LOGIN")
password = project.findProperty("gpr.key") ?: System.getenv("GITHUB_PACKAGES")
}
}
}
publications {
gpr(MavenPublication) {
//Del tutorial https://docs.gradle.org/current/userguide/publishing_maven.html#publishing_maven

groupId = 'us.mitfs.samples'
artifactId = 'a4i'
version = '0.0'

from components.java
}

}
}
=======

>>>>>>> TAR_IndicatorStrategy


Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package us.muit.fs.a4i.control.strategies;

import us.muit.fs.a4i.control.IndicatorStrategy;
import us.muit.fs.a4i.exceptions.NotAvailableMetricException;
import us.muit.fs.a4i.exceptions.ReportItemException;
import us.muit.fs.a4i.model.entities.IndicatorI.IndicatorState;
import us.muit.fs.a4i.model.entities.ReportItem;
import us.muit.fs.a4i.model.entities.ReportItemI;

import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import java.util.stream.Collectors;
import java.util.Collection;

/**
* Estrategia para calcular el indicador de tráfico de acceso a repositorios de GitHub.
*/
public class TARIndicatorStrategy implements IndicatorStrategy<Double> {
private static final Logger log = Logger.getLogger(TARIndicatorStrategy.class.getName());

private static final List<String> REQUIRED = List.of(
"uniqueVisitors", "uniqueClones"
);

@Override
public ReportItemI<Double> calcIndicator(List<ReportItemI<Double>> metrics)
throws NotAvailableMetricException {
log.info("Calculando indicador de tráfico GitHub con métricas: " + metrics);
Map<String, Double> m = metrics.stream()
.collect(Collectors.toMap(ReportItemI::getName, ReportItemI::getValue));

for (String req : REQUIRED) {
if (!m.containsKey(req)) {
throw new NotAvailableMetricException("Falta métrica " + req);
}
}

double visitors = m.get("uniqueVisitors");
double clones = m.get("uniqueClones");

if (visitors <= 0) {
throw new NotAvailableMetricException("Número de visitantes debe ser mayor que cero.");
}

double conversionRate = clones / visitors;

IndicatorState state = classify(visitors);

try {
return new ReportItem.ReportItemBuilder<Double>("GithubTraffic", conversionRate)
.metrics((Collection) metrics)
.indicator(state)
.build();
} catch (ReportItemException e) {
throw new NotAvailableMetricException("Error construyendo ReportItem: " + e.getMessage());
}
}

@Override
public List<String> requiredMetrics() {
return REQUIRED;
}

private IndicatorState classify(double visitors) {
if (visitors < 10) return IndicatorState.CRITICAL;
if (visitors < 50) return IndicatorState.WARNING;
return IndicatorState.OK;
}
}
Loading
Loading