ltoinel / IoT-Development-Challenge

Fichier Swagger et script Gatling du concours de développement IoT CSD TMP
6 stars 10 forks source link

Durée de la synthése demandée: s, ms ou pause plus longue? #27

Open dpiraud opened 8 years ago

dpiraud commented 8 years ago

Dans le script gatling, après avoir envoyé un paquet de N rqt, il y a une instruction pause(1) qui permet de terminer la seconde courante pour pouvoir, ensuite, envoyé la durée de la synthèse demandée en secondes en "coupant" les ms. Ce fonctionnement semble KO: Je suppose que pause() est basé sur Thread.sleep() et Thread.sleep() ne garantit pas que la durée de la pause soit d'au moins le temps demandé: https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#sleep(long)

Avec le code tout en bas qui log le timestamp avant/après la pause, la pause est mesurée entre 489 et 1262 ms pour le script.... Donc on peut perdre 500ms de données avec pas de chance.

Pour moi, on peut _Augmenter "à la louche" la pause pour être assuré d'avoir au moins 1 seconde de pause. _Envoyer la durée de la simulation demandé directement en ms (Pour les synthèses intermédiaires et pour la synthèse globale). ==>Je penche pour la seconde proposition :)

... 
            .repeat(msgPackage){  

                exec(http(requestName(sensorIndex))
                    .post(url)
                    .body(StringBody(session=>generateJson(sensorIndex))).asJSON
                    .headers(header)
                    .check(status.is(200))
                    )   

            }
      .exec(
           session=>{
           println(" "+ sensorIndex + " ===> " + Calendar.getInstance().getTimeInMillis()) 
           session
           }
      )
      .pause(1)

            //get the parameters of the synthesis call
            .exec(session=>{
      println(" " + sensorIndex + " <=== " + Calendar.getInstance().getTimeInMillis())
...
IsBena commented 8 years ago

la pause fait partie du dsl gatling est justement est en seconde, justement pour pouvoir envoyer le GET à la synthèse en seconde, l'idée de l'envoyer en ms n'est pas mal car ça va raccourcir le temps d’exécution du script gatling par un temps égale à nombre de package secondes, mais sinon ça demande la précision: si on demande la synthèse à la milliseconde x est ce que les messages envoyé entre x et x+1 sont compté ?

dpiraud commented 8 years ago

De ce que je vois du script:

Le timestamp de début de paquet est enregistré avant la création du timstamp de la première requête Le timestamp de fin de paquet est enregistré après la création du timestamp de la dernière requête Au pire, timestamp de début = timestamp de la première rqt et timestamp de fin = timestamp de la première rqt... donc, pour moi, envoyer en ms sans faire de pause avec le code actuel est OK.

ghost commented 8 years ago

Je confirme l'analyse de dpiraud. Il faut soit soit virer le paramètre duration et passer un timestamp de fin ou bien passer la duration en ms.

Slyfer-Azuma commented 8 years ago

A mon avis, laisser que le check final, on a perdu pas mal de temps que pour voir certains aspects de timestamp et duration...ça se complique alors qu'il y a de bonnes façons de vérifier la validité des donnés émis.

IsBena commented 8 years ago

je crois qu'on va basculer vers un appel de la synthèse avec un "timestamp" et une "duration" en ms ! j'apporterai un ensemble de correction sur le script ce weekend ;)