Giter VIP home page Giter VIP logo

incimanager_e3b's Introduction

InciManager_e3b

Build Status Codacy Badge codecov Gitter

Módulo de gestión y carga de incidencias (equipo de prácticas @Arquisoft/course1718_e3b2).

Este proyecto ha sido desarrollado como práctica de la asignatura Arquitectura del Software perteneciente al tercer curso del Grado en Ingeniería Informática del Software impartido en la Escuela de Ingenieria Informática (EII) de la Universidad de Oviedo durante el curso 2017/2018. La práctica consiste en la implementación de un sistema informático de análisis de incidencias (Incidence System_e3b) cuya estructura ha sido dividida en los siguientes módulos:

Tabla de Contenidos

Como instalar el proyecto

Requisitos de instalación

  • Máquina virtual de Java: OpenJDK (versión: >= 1.6).
  • Sistema de control de versiones: GIT (versión: >= 2.16).
  • Herramienta de construcción de proyectos: Apache Maven (versión: >= 3.5).

Obtención del código fuente

Descarga la última versión del codigo fuente desde el repositorio oficial del proyecto:

git clone https://github.com/Arquisoft/InciManager_e3b.git

Instalación de las dependencias

Situarse en el directorio de descarga del código fuente y ejecutar:

mvn clean install

Reinstalación de las dependencias

En caso de ser necesario es posible purgar el repositorio local con las dependencias del proyecto ejecutando:

mvn dependency:purge-local-repository clean install -U

Como ejecutar el proyecto

incimanager_captura0 Captura de pantalla de la página de login (ver más sobre el diseño web en esta wiki):

Requisitos para ejecutar el proyecto

Configuración del servicio InciManager

Configurar los párametros necesarios en el fichero: resources/application.properties

### Service port (default: 8091):
server.port = 8091

### Comma-separated list of brokers to which the Kafka binder will connect 
### (default: localhost:9092):
spring.cloud.stream.kafka.binder.brokers=localhost:9092

###  Comma-separated list of ZooKeeper nodes to which the Kafka binder can connect 
### (default: localhost:2181):
spring.cloud.stream.kafka.binder.zkNodes=localhost:2181

### Kafka topic for incidences (default: incidences):
kafka.topic = incidences

### Data source configuration:
spring.datasource.url = jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=changeit
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.driverClassName=org.postgresql.Driver

Inicio del servicio Apache Kafka

Si no se dispone de una instancia de Apache Kafka en ejecución, es posible descargar una versión ya compilada para Java desde su página oficial y lanzar el servicio manualmente (la distribución binaria de Apache Kafka requiere a su vez iniciar su propia instancia de Apache Zookeeper).

Inicio de Apache Kafka en MS-Windows

Ejecutar el fichero: 'doc/examples/incimanager-kafka-server-start.bat'

REM Start Apache Zookeeper server:
start "ZooKeeper" /D ".\bin\windows\" "zookeeper-server-start.bat" "..\..\config\zookeeper.properties"
REM Wait 10 seconds:
timeout 10
REM Start Apache Kafka server:
start "Kafka" /D ".\bin\windows\" "kafka-server-start.bat" "..\..\config\server.properties"

Inicio de Apache Kafka en GNU/LiNUX

Ejecutar el fichero: 'doc/examples/incimanager-kafka-server-start.sh'

# Start Apache Zookeeper server:
nohup bash -c "bin/zookeeper-server-start.sh config/zookeeper.properties &"
# Wait 10 seconds:
sleep 10
# Start Apache Kafka server:
nohup bash -c "bin/kafka-server-start.sh config/server.properties &"

Inicio del servicio InciManager

Situarse en el directorio de instalación y ejecutar:

mvn spring-boot:run

Una vez iniciado el servicio ya es posible acceder a través del navegador en la dirección: http://localhost:8091

Como probar el proyecto

Ejecución de las pruebas unitarias

Para ejecutar toda la bateria de pruebas:

mvn test

Para ejecutar una única prueba:

mvn -Dtest=InciManagerApplicationTests#testAgentModel test

Datos usuarios de prueba

Name Password Location Email Ident Kind
Paco González 123456 [email protected] paco Person
Pepe Fernandez 123456 [email protected] pepe Person
Sensor_123 2018 123456 43.361368, -5.853591 [email protected] sensor_123 Sensor
Ministerio medioambiente 123456 43.359486, -5.846986 [email protected] medioambiente Entity
Space X sensor model A 123456 33.921209, -118.327940 [email protected] spacex Sensor

Ejemplo de incidencia en formato JSON

Disponible en el fichero: 'doc/examples/example-incidence.json'

{
  "username": "[email protected]",
  "password": "123456",
  "kind": "Person", 
  "incidenceName": "Incidencia de prueba",
  "description": "Descripción de la incidencia de prueba",
  "location": "43.3582617,-5.8531647",
  "labels": [ "prueba", "sensor" ],
  "others": [ "file:///image.png", "file:///video.mkv"],
  "fields": { "temperatura": "21", "humedad": "75" },
  "status": "ABIERTA",
  "comments": [ "Primer comentario", "Segundo Comentario" ],
  "expiration": "2018-03-25T00:00:00+01:00",
  "cacheable": "true"
}

Ejemplo de envio de incidencia utilizando el servicio REST

curl -i -X POST -H "Content-type: application/json;charset=UTF-8" http://localhost:8091/addIncidence -d @example-incidence.json

Como consultar las incidencias enviadas a través de Apache Kafka

La incidencias enviadas mediante Kafka pueden ser consultadas utilizando la consola del consumidor por defecto que viene incluido en la instalación de Apache Kafka:

REM Start Apache Kafka Consumer:
start "Kafka Consumer" /D ".\bin\windows\" "kafka-console-consumer.bat" "--bootstrap-server" "localhost:9092" "--topic" "incidences" "--from-beginning"

Como contribuir al proyecto

La información completa sobre como contribuir al proyecto: código de conducta, flujo de trabajo, etc, puede consultarse en el fichero CONTRIBUTING.md.

Creditos del proyecto

Contribuidores

Reconocimientos

Licencia del proyecto

El contenido completo de este proyecto esta licenciado bajo los terminos de la licencia: Unlicense. Los detalles completos de la licencia pueden consultarse en el fichero: LICENSE.

incimanager_e3b's People

Contributors

gemeto avatar kilianpg avatar labra avatar miguelms95 avatar tonymarin avatar uo244730 avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

incimanager_e3b's Issues

Autenticacion en test mockup

En la rama tests_mockup está pendiente de hacer la autencicación en el mockup spring mvc, para así testear navegando por las páginas privadas de incidence/list, etc...

No es grave, pero si complementario a los test selenium y toda la pesca.

H3: Enviar Incidencia mediante llamada al servicio web (REST)

Al llamar a /addIncidence En caso de que la combinación "nombre de usuario/password" sea incorrecta, las incidencias no serán procesadas y se informará del error. Si la combinación es correcta, se procesarán las incidencias y se enviará la incidencia procesada a Apache Kafka para su posterior análisis por parte del módulo 4 (InciDashboard).

En la request REST (clase "IncidenceREST") están los parámetros username y contraseña que hay que comprobar.

Paginar la lista de incidencias de un usuario

Añadir paginación a la vista de todas las incidencias de un usuario de manera que si ha creado muchas incidencias se muestren agrupadas en bloques.
Se permitira al usuario elegir el número de incidencias a mostrar por cada página. Se ofrecerá los siguentes valores de número de incidencias por página: 5, 10, 25, 50 y 100.

Permitir a un usuario filtrar sus incidencias

Se debe facilitar al usuario la opción de filtrar la lista de sus incidencias por uno o varios criterios:
-fecha (ver las incidencias anteriores a una fecha, las de una fecha concreta, las posteriores a una fecha ...)
-estado de la incidencia (ver solo las cerradas, ver solo las abiertas, ...)
-descripción (mostrar incidencias que contengan una determinada cadena en la descripción)
-etiquetas (mostrar las incidencias con una determinada etiqueta /s

BUG: org.apache.kafka.clients.NetworkClient : Error while fetching metadata with correlation id 0 : {springCloudBusOutput=LEADER_NOT_AVAILABLE}

El arranque de Kafka dentro de un contenedor Docker entra en bucle mostrando el siguiente error en consola:

[...]
incimanager_e3b [ec208da3462d] |2018-05-10 17:01:12.771  INFO 1 --- [           main] o.a.kafka.common.utils.AppInfoParser     : Kafka version : 0.9.0.1
incimanager_e3b [ec208da3462d] |2018-05-10 17:01:12.772  INFO 1 --- [           main] o.a.kafka.common.utils.AppInfoParser     : Kafka commitId : 23c69d62a0cabf06
incimanager_e3b [ec208da3462d] |2018-05-10 17:01:13.014  WARN 1 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : Error while fetching metadata with correlation id 0 : {springCloudBusOutput=LEADER_NOT_AVAILABLE}
incimanager_e3b [ec208da3462d] |2018-05-10 17:01:13.103  WARN 1 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : Error while fetching metadata with correlation id 1 : {springCloudBusOutput=LEADER_NOT_AVAILABLE}
incimanager_e3b [ec208da3462d] |2018-05-10 17:01:13.215  WARN 1 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : Error while fetching metadata with correlation id 2 : {springCloudBusOutput=LEADER_NOT_AVAILABLE}
incimanager_e3b [ec208da3462d] |2018-05-10 17:01:13.325  WARN 1 --- [ad | producer-1] org.apache.kafka.clients.NetworkClient   : Error while fetching metadata with correlation id 3 : {springCloudBusOutput=LEADER_NOT_AVAILABLE}
[...]

Integración continua

Hay que añadir integración continua con travis, como en el repositorio anterior y añadir el botón en readme.

Segregar pruebas unitarias de las pruebas de integración

Las pruebas unitarias ejecutadas en la fase mvn test (Maven Surefire Plugin) están pensadas para ejecutarse de forma autónoma sin necesidad de depender de servicios externos como PostgreSQL, Apache Zookeeper, Apache Kafka u el resto de módulos. Por ese motivo deben hacer uso de los mockups o fixtures necesarios como por ejemplo la utilización de bases de datos en memoria sin necesidad de lanzar dichos servicios.

A su vez las pruebas de integración (entre las que se incluyen las de aceptación y rendimiento), ejecutadas en la fase mvn verify (Maven Failsafe Plugin) han sido configuradas para lanzar automáticamente la ejecución de los contenedores (mvn pre-integration-test) y una vez ejecutas exitosamente o no las pruebas, detener también automáticamente los contenedores implicados (mvn post-integration-test).

Dado que la fase de construcción del contenedor (mvn docker:build) precisa que se ejecute previamente la fase de empaquetado (mvn package) y esta a su vez depende de que se ejecuten correctamente las pruebas unitarias (mvn test), dichas pruebas no pueden depender de un contenedor que aun no se ha construido (dependencia cruzada).

Hasta que se solucione este problema, se han desactivado temporalmente la ejecución por defecto de todas las pruebas.

Referencias:

Ver también: Issue: #20, Arquisoft/Inci_e3b_modules#5

Incorporar ficheros en la incidencia

Ofrecer al usuario la posibilidad de adjuntar 1 o varios ficheros adjuntos cuando introduce una incidencia en el sistema.
Algo similar a las entregas en el campus virtual, que permita al usuario enviar ficheros.

Permitir a un usuario ordenar sus incidencias

En la vista de todas sus incidencias se ha de permitir que el usuario las ordene de forma ascendente o descendente por los siguientes campos: fecha, estado, nombre de la incidencia, etiquetas.
La ordenación por defecto sera por fecha de más recientes a más antiguas.

Añadir Codacy

Añadir botón de códacy en readme como en proyecto anterior.

Cambiar base de datos a Postgres

En el pom añadir la dependencia hsqldb y eliminar la de hibernate (h2):

<dependency>
			<groupId>org.hsqldb</groupId>
			<artifactId>hsqldb</artifactId>
			<version> 2.4.0</version>
			<scope>runtime</scope>
		</dependency>

Añadir chat gitter

Añadir chat de desarrollo Gitter para este repositorio, y botón en readme, como en el caso anterior.

BUG: El formato JSON enviado a Apache Kafka no se ajusta a las especificaciones

El contenido del JSON enviado mediante Apache Kafka no se corresponde con el formato definido para la incidencia de muestra.

El formato de salida para las incidencias generadas mediante la página web incluye información extendida del agente que no es necesaria (id, location, ident, etc):

[...]

incimanager_e3b [a0211fe7ce5f] |2018-05-27 09:21:27.919  INFO 1 --- [ad | producer-4] e.u.a.e.i.kafka.producers.KafkaProducer  : Success on sending message "{"agent":{"id":1,"username":"Paco González","password":"123456","location":"","email":"[email protected]","ident":"paco","kind":"Person"},"incidenceName":"nombre","description":"descripcion","location":"localizacion","labels":["etiqueta1"],"fields":{},"status":"ABIERTA","cacheable":true,"others":["otros"]}" to topic incidences

[...]

A su vez, el formato de salida de las incidencias procesadas por el servico REST no incluye el parámetro kind entre las credenciales del agente:

[...]

incimanager_e3b [a0211fe7ce5f] |2018-05-27 09:46:23.470  INFO 1 --- [ad | producer-4] e.u.a.e.i.kafka.producers.KafkaProducer  : Success on sending message "{"username":"[email protected]","password":"123456","incidenceName":"Incidencia de prueba","description":"Descripción de la incidencia de prueba","location":"43.3582617,-5.8531647","labels":["prueba","sensor"],"status":"ABIERTA","expiration":"Mar 24, 2018 11:00:00 PM","cacheable":true}" to topic incidences

[...]

Ver también: Issue Arquisoft/InciDashboard_e3b#27

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.