Skip to content
Merged
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
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -220,4 +220,6 @@ release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
.mvn/wrapper/maven-wrapper.jar
.mvn/wrapper/maven-wrapper.jar

data/*
61 changes: 53 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,42 @@
# PRC-CERIF [![Build Status](https://github.com/CSUC/PRC-CSV2XML/actions/workflows/main.yml/badge.svg)](https://github.com/CSUC/PRC-CSV2XML/actions/workflows/main.yml)

## Resources
* [Release Notes](../../releases)
* [Wiki](../../wiki/Home)
## Descripció
Aquesta aplicació converteix dades de recerca en format CSV a XML seguint l'estàndard CERIF (Common European Research Information Format). L'aplicació està dissenyada per processar dades de recerca de la Universitat Politècnica de Catalunya (UPC) i generar fitxers XML compatibles amb el sistema euroCRIS.

## Build
## Característiques
- Conversió de dades de recerca a format CERIF XML
- Suport per a investigadors, departaments, grups de recerca, projectes i publicacions
- Processament de dades utilitzant Apache Spark
- Generació d'identificadors únics (UUID) per a cada entitat
- Suport per a múltiples idiomes en els metadades

```
## Requisits
- Java 8 o superior
- Apache Spark
- Maven 3.x

## Instal·lació

### Des de font
```bash
git clone https://github.com/CSUC/PRC-CSV2XML.git
cd PRC-CSV2XML
sh build.sh
```

## Command line
https://spark.apache.org/docs/latest/submitting-applications.html
### Des de Docker
```bash
docker pull csuc/prc-cerif:latest
```
spark-submit --master "local[*]" --class org.csuc.cli.Cerif --packages info.picocli:picocli:4.7.6,com.crealytics:spark-excel_2.12:3.5.1_0.20.4,com.typesafe:config:1.4.3 --jars euroCRIS-cerif-definitions-1.6.2.jar prc-cerif-${version}.jar args

## Ús

### Línia de comandes
```bash
spark-submit --master "local[*]" --class org.csuc.cli.Cerif --packages info.picocli:picocli:4.7.6,com.crealytics:spark-excel_2.12:3.5.1_0.20.4,com.typesafe:config:1.4.3 --jars euroCRIS-cerif-definitions-${version}.jar prc-cerif-${version}.jar args
```

### Opcions
```
Usage: prc-cerif [-fhV] -i=<PATH> [-o=<PATH>] -r=<STRING>
-f, --formatted formatted output file (default: false)
Expand All @@ -24,3 +46,26 @@ Usage: prc-cerif [-fhV] -i=<PATH> [-o=<PATH>] -r=<STRING>
-r, --ruct=<STRING> ruct code (https://www.educacion.gob.es/ruct/home)
-V, --version Print version information and exit.
```

### Docker
```bash
docker run -v /path/to/data:/opt/spark/work-dir csuc/prc-cerif:latest -i input.xlsx -r RUCT_CODE -o output.xml
```

## Estructura del projecte
- `euroCRIS-cerif-definitions`: Definicions XSD i classes generades per al format CERIF
- `transformation`: Codi font de l'aplicació principal
- `src/main/java/org/csuc/cli`: Classes de línia de comandes
- `src/main/java/org/csuc/marshal`: Classes per a la conversió de dades
- `src/main/java/org/csuc/typesafe`: Configuracions i semàntica
- `src/main/resources`: Fitxers de configuració

## Recursos
* [Release Notes](../../releases)
* [Wiki](../../wiki/Home)

## Llicència
Aquest projecte està llicenciat sota la llicència MIT - veure el fitxer [LICENSE](LICENSE) per més detalls.

## Contacte
Albert Martínez <albert.martinez@csuc.cat>
48 changes: 42 additions & 6 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,13 +1,49 @@
FROM apache/spark:latest
# Stage 1: Compilació
FROM maven:3.8-openjdk-8-slim AS builder

ENV VERSION="2.4.19"

LABEL maintainer="Albert Martínez <albert.martinez@csuc.cat>"
LABEL version="$VERSION"
LABEL description="PRC-CSV2XML: Conversor de CSV/Excel a XML CERIF"

# Configurar repositori Maven central
RUN mkdir -p /root/.m2 && \
echo '<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"><mirrors><mirror><id>central</id><name>Maven Central</name><url>https://repo.maven.apache.org/maven2</url><mirrorOf>central</mirrorOf></mirror></mirrors></settings>' > /root/.m2/settings.xml

# Copiar el codi font
WORKDIR /app
COPY . .

# Compilar el projecte
RUN mvn clean install -DskipTests

# Stage 2: Execució
FROM bitnami/spark:3.5.1

ENV VERSION="2.4.19"

LABEL maintainer="Albert Martínez <albert.martinez@csuc.cat>"
LABEL version="$VERSION"
LABEL description="PRC-CSV2XML: Conversor de CSV/Excel a XML CERIF"

# Crear directoris necessaris
USER root
RUN mkdir -p /app /data

ADD https://github.com/CSUC/PRC-CSV2XML/releases/download/2.4.19/euroCRIS-cerif-definitions-1.6.2.jar /opt/spark/work-dir/euroCRIS-cerif-definitions.jar
ADD https://github.com/CSUC/PRC-CSV2XML/releases/download/2.4.19/prc-cerif-2.4.19.jar /opt/spark/work-dir/prc-cerif.jar
COPY run.sh /opt/spark/work-dir
# Copiar els JARs compilats
COPY --from=builder /app/transformation/target/prc-cerif-$VERSION.jar /app/prc-cerif.jar
COPY --from=builder /app/euroCRIS-cerif-definitions/target/euroCRIS-cerif-definitions-$VERSION.jar /app/euroCRIS-cerif-definitions.jar

ENV PATH "${SPARK_HOME}/bin:${PATH}"
# Configurar el directori de treball
WORKDIR /app

CMD ["/bin/bash"]
# Comanda per defecte
ENTRYPOINT ["spark-submit", \
"--master", "local[*]", \
"--driver-memory", "4g", \
"--executor-memory", "4g", \
"--packages", "info.picocli:picocli:4.7.6,com.crealytics:spark-excel_2.12:3.5.1_0.20.4,com.typesafe:config:1.4.3,commons-io:commons-io:2.15.0,commons-codec:commons-codec:1.16.0,org.apache.commons:commons-lang3:3.13.0,org.apache.commons:commons-text:1.10.0,org.slf4j:slf4j-api:2.0.11,org.apache.commons:commons-compress:1.25.0", \
"--jars", "/app/euroCRIS-cerif-definitions.jar", \
"--class", "org.csuc.cli.Cerif", \
"/app/prc-cerif.jar"]
137 changes: 110 additions & 27 deletions docker/README.md
Original file line number Diff line number Diff line change
@@ -1,35 +1,118 @@
# Docker
# PRC-CSV2XML Docker

## Run
Aquest directori conté la configuració Docker per executar el convertidor de CSV/Excel a XML CERIF.

manage volumes
```
export SOURCE_FOLDER={source}
export TARGET_FOLDER={target}
```
```
docker-compose -f docker/docker-compose.yml run -d prc-cerif
```
## Requisits

## Build
```
docker-compose -f docker/docker-compose.yml build
```
- Docker
- Docker Compose
- Mínim 4GB de RAM disponible

## Usage
## Estructura

```
docker exec -it {container_id} bash
docker/
├── Dockerfile # Configuració multi-stage per compilar i executar
├── docker-compose.yml # Configuració del servei
└── data/ # Directori per als fitxers d'entrada/sortida
```

```
sh run.sh --help

Usage: prc-cerif [-fhV] -i=<PATH> [-o=<PATH>] -r=<STRING>
-f, --formatted formatted output file (default: false)
-h, --help Show this help message and exit.
-i, --input=<PATH> data file
-o, --output=<PATH> output file (default: /tmp/`ruct`.xml)
-r, --ruct=<STRING> ruct code (https://www.educacion.gob.es/ruct/home)
-V, --version Print version information and exit.
```
## Configuració

El Dockerfile utilitza un procés multi-stage:
1. Stage de compilació: Utilitza Maven per compilar el projecte
2. Stage d'execució: Utilitza Spark per executar l'aplicació

El docker-compose.yml configura:
- Memòria: 4GB per driver i executor
- Volums: Mapeig del directori `data` per fitxers d'entrada/sortida
- Healthcheck: Verifica que Spark estigui executant-se
- Restart: Automàtic en cas d'error

## Ús

1. Preparar els fitxers:
```bash
# Crear el directori data si no existeix
mkdir -p docker/data

# Copiar el fitxer d'entrada
cp ruta/al/fitxer.csv docker/data/entrada.csv
```

2. Construir la imatge:
```bash
sudo docker compose -f docker/docker-compose.yml build
```

3. Executar el convertidor:
```bash
# Forma bàsica
sudo docker compose -f docker/docker-compose.yml run --rm prc-cerif \
--input /data/entrada.csv \
--output /data/sortida.xml \
--ruct RUCT_CODE

# Amb sortida formatada
sudo docker compose -f docker/docker-compose.yml run --rm prc-cerif \
--input /data/entrada.csv \
--output /data/sortida.xml \
--ruct RUCT_CODE \
--formatted

# Especificant un fitxer Excel
sudo docker compose -f docker/docker-compose.yml run --rm prc-cerif \
--input /data/entrada.xlsx \
--output /data/sortida.xml \
--ruct RUCT_CODE
```

4. El fitxer XML generat es trobarà a `docker/data/sortida.xml`

## Opcions disponibles

- `--input`: Ruta al fitxer d'entrada (CSV/Excel)
- `--output`: Ruta al fitxer de sortida (XML)
- `--ruct`: Codi RUCT de la institució
- `--formatted`: Genera un fitxer XML formatat (més llegible)
- `--help`: Mostra l'ajuda

## Solució de problemes

1. Error de memòria:
- Augmentar la memòria a `docker-compose.yml`:
```yaml
environment:
- SPARK_OPTS=--driver-java-options=-Xmx8g
- JAVA_OPTS=-Xmx8g
```

2. Error de dependències:
- Verificar la connexió a Internet
- Netejar la cache de Docker:
```bash
sudo docker system prune -a
```

3. Error d'accés als fitxers:
- Verificar els permisos del directori `data`
- Assegurar que el fitxer d'entrada existeix
- Comprovar que el format del fitxer és correcte (CSV o Excel)

4. Error de codi RUCT:
- Verificar que el codi RUCT és vàlid
- Consultar la llista de codis RUCT a: https://www.educacion.gob.es/ruct/home

## Notes

- La imatge utilitza Spark 3.5.1
- Les dependències es compilen durant la construcció de la imatge
- Els fitxers d'entrada/sortida es gestionen a través del directori `data`
- La versió actual és 2.4.19
- Els fitxers JAR s'instal·len amb noms genèrics:
- `prc-cerif.jar` (versió ${VERSION})
- `euroCRIS-cerif-definitions.jar` (versió ${VERSION})

## Contacte

Albert Martínez <albert.martinez@csuc.cat>
19 changes: 13 additions & 6 deletions docker/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
version: '3.8'
services:
prc-cerif:
build:
context: .
dockerfile: Dockerfile
image: 'prc/prc-cerif:2.4.19'
context: ..
dockerfile: docker/Dockerfile
image: prc-cerif:latest
container_name: prc-cerif
hostname: prc-cerif
environment:
- SPARK_OPTS=--driver-java-options=-Xmx4g
- JAVA_OPTS=-Xmx4g
volumes:
- ${SOURCE_FOLDER}:${TARGET_FOLDER}:rw
- ../data:/data
healthcheck:
test: ["CMD", "ps", "aux", "|", "grep", "spark"]
interval: 30s
timeout: 10s
retries: 3
restart: unless-stopped
5 changes: 0 additions & 5 deletions docker/run.sh

This file was deleted.

Loading