Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
3698191
Update Dockerfile
Feb 7, 2016
c4cc2fb
Create JSONParser.java
Feb 7, 2016
d372013
Create args.sh
Feb 7, 2016
90ae1b5
Update JSONParser.java
Feb 7, 2016
995fcd9
Create Dockerfile
Feb 7, 2016
f23139b
Update Dockerfile
Feb 7, 2016
35cfbb6
Update Dockerfile
Feb 7, 2016
8da8374
Update Dockerfile
Feb 7, 2016
6191a3b
Update Dockerfile
Feb 7, 2016
87be030
Update Dockerfile
Feb 7, 2016
bc9b16f
Update Dockerfile
Feb 7, 2016
041c8c2
Update Dockerfile
Feb 7, 2016
f104896
Create Dockerfile
Feb 7, 2016
f3a26ea
Update Dockerfile
Feb 7, 2016
b75af5e
Delete Dockerfile
Feb 7, 2016
9c0ac57
Update Dockerfile
Feb 7, 2016
17c880c
Update Dockerfile
Feb 7, 2016
cb63119
Update Dockerfile
Feb 7, 2016
0947b50
Update Dockerfile
Feb 7, 2016
dd6e99f
Update Dockerfile
Feb 7, 2016
43d2ba5
Create Dockerfile
Feb 7, 2016
7f023a9
Update Dockerfile
Feb 7, 2016
d4a5609
Update Dockerfile
Feb 7, 2016
9cc326e
Update Dockerfile
Feb 7, 2016
bf1c312
Update Dockerfile
Feb 7, 2016
8f11dc1
Update Dockerfile
Feb 7, 2016
37155a6
Update Dockerfile
Feb 7, 2016
1e4ffef
Update Dockerfile
Feb 7, 2016
eaae39f
Update Dockerfile
Feb 7, 2016
64ecd3e
Update Dockerfile
Feb 7, 2016
825474b
Update Dockerfile
Feb 7, 2016
d9ba978
Update Dockerfile
Feb 7, 2016
9ea68fc
Update Dockerfile
Feb 7, 2016
19b1aac
Update Dockerfile
Feb 7, 2016
df205bd
Update Dockerfile
Feb 7, 2016
eb888db
Update Dockerfile
Feb 7, 2016
8e45aee
Update Dockerfile
Feb 7, 2016
6f1ef14
Update Dockerfile
Feb 7, 2016
acdc5e4
Update Dockerfile
Feb 7, 2016
c3fcbaf
Delete Dockerfile
Feb 7, 2016
b628dfa
Update Dockerfile
Feb 7, 2016
dbd1c12
Delete Dockerfile
Feb 7, 2016
43635ab
Delete args.sh
Feb 9, 2016
b58c587
Update Dockerfile
Feb 9, 2016
f94e7d0
Update JSONParser.java
Feb 9, 2016
aef2d97
Delete JSONParser.java
Feb 9, 2016
cc41563
Create JSONParser.java
Feb 9, 2016
62bcf8a
Update Dockerfile
Feb 9, 2016
bb572a1
Update Dockerfile
Feb 9, 2016
6544098
Update Dockerfile
Feb 9, 2016
609097b
Create Readme.md
Feb 9, 2016
5f09582
Update Dockerfile
Feb 9, 2016
54f9d7e
Update JSONParser.java
Feb 9, 2016
7c2df22
Update Dockerfile
Feb 9, 2016
55bcbfb
Update Dockerfile
Feb 9, 2016
9752e25
Update JSONParser.java
Feb 9, 2016
3644109
Create Dockerfile
Feb 12, 2016
ad5bb39
Create Dockerfile
Feb 12, 2016
2670b15
Update Dockerfile
Feb 22, 2016
db05f7c
Update Dockerfile
Feb 29, 2016
61c59ba
Update Dockerfile
Feb 29, 2016
10ada96
Update Dockerfile
Feb 29, 2016
825abaa
Update Dockerfile
Feb 29, 2016
45b7cbd
Update Dockerfile
Mar 1, 2016
79d750a
Update Dockerfile
Mar 1, 2016
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
25 changes: 25 additions & 0 deletions docker/java/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# JRE 1.8u73 with BusyBox
# Docker address for this file is :
# https://raw.githubusercontent.com/matfeb/challenge-json/master/docker/java/Dockerfile
# for the moment...

FROM progrium/busybox
MAINTAINER Mathieu Febvay <mat.febvay@hotmail.fr> thanks to Ilkka Anttonen from http://sirile.github.io/

# Get and install JRE and JAR release
RUN \
opkg-install wget \
&& wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" -O /tmp/jre.tar.gz http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jre-8u73-linux-x64.tar.gz \
&& gunzip /tmp/jre.tar.gz \
&& cd /opt && tar xf /tmp/jre.tar \
&& rm /tmp/jre.tar
#\
#&& mkdir -p /usr/velov \
#&& cd /usr/velov \
#&& wget --no-check-certificate -O JSONParser.jar https://github.com/matfeb/challenge-json/releases/download/v1.3/JSONParser-1.3.jar \
#&& chmod +x JSONParser.jar

RUN \
ln -sf /lib/libpthread-2.18.so /lib/libpthread.so.0 \
&& ln -s /opt/jre1.8.0_73/bin/java /usr/bin/java

8 changes: 8 additions & 0 deletions docker/java/Readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
HowTo

In your command prompt/shell with docker installed just type :

docker build -t dsa/jre8:latest https://raw.githubusercontent.com/matfeb/challenge-json/master/docker/java/Dockerfile

to build image
To run as a container
33 changes: 0 additions & 33 deletions docker/java/install/Dockerfile

This file was deleted.

215 changes: 215 additions & 0 deletions docker/java/src/JSONParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,215 @@
c/**
* <h1>LyonTechHub</h1>
* <h2>DataScience Appliquée</h2>
* <h3>Parser JSON</h3>
* Récupère le fichier <strong>JSON</strong>, le traite et l'introduit en base de donnée.
* <pre>Créée le 16/01/2016</pre>
* <pre>Modifié le 09/02/2016</pre>
*
* <p>Utilisation de deux API :
* <ul>
* <li>JsonP 1.0.4</li>
* <li>JDBC PostGreSQL 9.4</li>
* </ul>
*</p>
*<p>Benchmark : 3600-3700 ms</p>
*
* @author Mathieu Febvay -> mat.febvay@hotmail.fr
* @version 1.2
*/

package fr.lyontechhub.datascienceappliquee.velov;

import java.io.IOException;
import java.io.InputStream;

import java.net.MalformedURLException;
import java.net.URL;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Timestamp;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonReader;

public class JSONParser
{
/**
*
* @param args[0] doit être l'adresse de la base de données avec le numéro de port ex: 0.0.0.0:5432 ou localhost:5432
* @param args[1] doit être le nom de la base de données
* @param args[2] doit être le nom de la table où insérer les données
* @param args[3] doit être le nom d'utilisateur pour se connecter à la base de données
* @param args[4] doit être le mot de passe pour se connecter à la base de données
*/

// Lancement de l'application
public static void main(String[] args)
{

if (args.length == 5)
{
long startingTime = 0;
long endingTime = 0;
int i;

Connection postGreSQLConnection = null;
PreparedStatement preparedInsertStatement = null;
String insertQuery = "INSERT INTO " + args[2]
+ " (number, name, address, address2, commune, nmarrond, bonus, pole, lat, lng, bike_stands,"
+ "status, available_bike_stands, available_bikes, availabilitycode, availability, banking, the_geom, gid, last_update, last_update_fme, creation) "
+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,point(?,?),?,?,?,?);";
DateTimeFormatter formatDate = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

try
{
System.out.print("Connection à la base de données...");

// On se connecte à la base de données
postGreSQLConnection = DriverManager.getConnection(
"jdbc:postgresql://" + args[0] + "/" + args[1],
args[3],
args[4]
);

// Amélioration des performances
postGreSQLConnection.setAutoCommit(false);

System.out.println("OK");

System.out.print("Préparation de la requête...");

// On prépare la requête d'insertion des données
preparedInsertStatement = postGreSQLConnection.prepareStatement(insertQuery);

System.out.println("OK");

// Départ du benchmark
startingTime = System.nanoTime();

// On défini l'URL du fichier à récupérer
URL dataUrl = new URL("https://download.data.grandlyon.com/ws/rdata/jcd_jcdecaux.jcdvelov/all.json");

// On récupère ce fichier en ouvrant un flux/
InputStream is = dataUrl.openStream();

// On va lire ce flux avec le parser JSON
JsonReader jsRdr = Json.createReader(is);

// On crée un objet JSON
JsonObject jsObj = jsRdr.readObject();

// On va récupérer la clé qui nous intéresse qui est un tableau de clé/valeur
JsonArray jsArray = jsObj.getJsonArray("values");

// On initialise le nombre d'insertions à 0
i = 0;

// Pour chaque tableau on crée un objet JSON
for (JsonObject result : jsArray.getValuesAs(JsonObject.class))
{
LocalDateTime now = LocalDateTime.now(ZoneId.of("Europe/Paris"));
String dateTime = now.format(formatDate);

preparedInsertStatement.setInt(1, Integer.parseInt(result.getString("number")));
preparedInsertStatement.setString(2, (result.getString("name")));
preparedInsertStatement.setString(3, (result.getString("address")));
preparedInsertStatement.setString(4, (result.getString("address2")));
preparedInsertStatement.setString(5, (result.getString("commune")));
if (result.getString("nmarrond").contains("None"))
{
preparedInsertStatement.setInt(6, -1);
}
else
{
preparedInsertStatement.setInt(6, Integer.parseInt(result.getString("nmarrond")));
}
preparedInsertStatement.setString(7, (result.getString("bonus")));
preparedInsertStatement.setString(8, (result.getString("pole")));
preparedInsertStatement.setFloat(9, Float.parseFloat((result.getString("lat"))));
preparedInsertStatement.setFloat(10, Float.parseFloat((result.getString("lng"))));
preparedInsertStatement.setInt(11, Integer.parseInt(result.getString("bike_stands")));
preparedInsertStatement.setString(12, (result.getString("status")));
preparedInsertStatement.setInt(13, Integer.parseInt(result.getString("available_bike_stands")));
preparedInsertStatement.setInt(14, Integer.parseInt(result.getString("available_bikes")));
preparedInsertStatement.setInt(15, Integer.parseInt(result.getString("availabilitycode")));
preparedInsertStatement.setString(16, (result.getString("availability")));
preparedInsertStatement.setBoolean(17, Boolean.parseBoolean(result.getString("banking")));
preparedInsertStatement.setFloat(18, Float.parseFloat((result.getString("lat"))));
preparedInsertStatement.setFloat(19, Float.parseFloat((result.getString("lng"))));
preparedInsertStatement.setInt(20, Integer.parseInt(result.getString("gid")));
preparedInsertStatement.setTimestamp(21, Timestamp.valueOf(result.getString("last_update")));
preparedInsertStatement.setTimestamp(22, Timestamp.valueOf(result.getString("last_update_fme")));
preparedInsertStatement.setTimestamp(23, Timestamp.valueOf(dateTime));

preparedInsertStatement.addBatch();
i++;

}// for

preparedInsertStatement.executeBatch();
postGreSQLConnection.commit();

// On ferme le flux
is.close();

System.out.println("Insertion de " + i + " lignes dans la base de données");

// Fin du benchmark et calcul du temps d'execution
endingTime = System.nanoTime();
System.out.println("Temps d'execution: " + (endingTime-startingTime)/1000000 + " ms");
}// try

// Exception pour l'URL
catch (MalformedURLException e)
{
System.out.println("Erreur dans l'URL : " + e.getMessage());
}
// Exception pour le flux
catch (IOException e)
{
System.out.println("Erreur lors de l'ouveture du flux entrant : " + e.getMessage());
}
// Exception pour la base de données
catch (SQLException e)
{
System.out.println("Erreur lors de la connection à la base de données : " + e.getMessage());
while (e.getNextException()!=null)
{
System.out.println("Next : " + e.getNextException().getMessage());
}
}

try
{
// On ferme la requête
preparedInsertStatement.close();
// On ferme la connection
postGreSQLConnection.close();
System.exit(0);
}
catch (SQLException e)
{
System.out.println("Erreur lors de la fermeture des connections : " + e.getMessage());
}

}// if

else
{
System.out.println("Le nombre d'arguments n'est pas valide");
System.out.println("La syntaxe est la suivante :");
System.out.println("JSONParser.jar <@db> <dbName> <tableName> <dbUser> <dbPassword>");
System.exit(0);
}
}// void main
}// class
1 change: 1 addition & 0 deletions docker/node.js/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Blablabla
1 change: 1 addition & 0 deletions docker/python/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Blabla