PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WEBDEV 2024 → Problème AJAXExécuteAsynchrone
Problème AJAXExécuteAsynchrone
Started by Monsieur DOUCET, May, 20 2018 9:57 PM - 8 replies
Registered member
16 messages
Posted on May, 20 2018 - 9:57 PM
Hello à toutes et tous.
Pour mon projet, j'exécute un scripts sh qui dure environ 2 minutes.

Code retour traitement ajax du bouton :

nRes est un entier
nRes =AJAXExécuteAsynchrone(ajaxActualiseChamps,iperf_bouygues,bouygues_nav)


Code serveur "iperf_bouygue" :
//Verifier fti bien renseigné
SI SAI_fti ="" ALORS
error_log("Fti non renseigné","Test débit derrière ont","")
RENVOYER 1 //fti vide
FIN

//Tester la connexion internet
sIdnom est une chaîne
sIdnom =gsDoss_tmp+"error.log"
snom_down est une chaîne
snom_down =gsDoss_tmp+"iperf_download.txt"
snom_up est une chaîne
snom_up =gsDoss_tmp+"iperf_upload.txt"
sDebit_down est une chaîne
sDebit_up est une chaîne

//Verification si tempo encore existantes
SI fFichierExiste(snom_down) =Vrai ALORS
fSupprime(snom_down)
FIN
SI fFichierExiste(snom_up) =Vrai ALORS
fSupprime(snom_up)
FIN

SI fFichierExiste(sIdnom) =Vrai ALORS
fSupprime(sIdnom)
FIN
//Le script à lancer
sIdentifiant est une chaîne
sTexte est une chaîne

SELON ChaîneCommencePar(SAI_fti,"fti/")
CAS 0
sIdentifiant =SAI_fti
AUTRE CAS
sIdentifiant =ChaîneSupprime(SAI_fti,"fti/",SansCasse)
FIN

sTexte =LanceAppli("/bin/bash /diagbox/scripts_sh/iperf_bouygues_ont.sh"+" "+sIdentifiant)

//Actions suivants le resultat du php
nIDFichier est un entier
sIdlire est une chaîne

nIDFichier =fOuvre(sIdnom,foLectureEcriture)

SELON nIDFichier
CAS -1
error_log("Echec ouverture logs erreur tempo ","Test débit derrière ont","Pour vérifier s'il y a eu une erreur")
RENVOYER 2 //echec ouverture
AUTRE CAS
sIdlire =fLitLigne(nIDFichier)
SELON sIdlire
CAS "ok"
//Récupération valeurs débits
//Débit descendant
nId_down est un entier
sDown_lire est une chaîne

nId_down =fOuvre(snom_down)
SELON nId_down
CAS -1
error_log("Echec ouverture fichier débit download ","Test débit derrière ont","")
RENVOYER 2 //Echec test download
AUTRE CAS
sDown_lire =fLitLigne(nId_down)
SI sDown_lire ="" ALORS
fSupprime(snom_down)
error_log("Echec test débit download ","Test débit derrière ont","fichier test debit download vide")
RENVOYER 2 //Echec test download
SINON
sDebit_down =ExtraitChaîne(sDown_lire,3," ",DepuisFin)+" "+"Mbits/s"
fSupprime(snom_down)
FIN
FIN

//Debit upload
nId_up est un entier
sup_lire est une chaîne

nId_up =fOuvre(snom_up)
SELON nId_up
CAS -1
error_log("Echec ouverture fichier débit upload ","Test débit derrière ont","fichier test debit upload vide")
RENVOYER 2 //Echec test download
AUTRE CAS
sup_lire =fLitLigne(nId_up)
SI sup_lire ="" ALORS
fSupprime(snom_up)
error_log("Echec test débit upload","Test débit derrière ont","")
RENVOYER 2 //Echec test download
SINON
sDebit_up =ExtraitChaîne(sup_lire,3," ",DepuisFin)+" "+"Mbits/s"
fSupprime(snom_up)
FIN
FIN


//enregistrement dans la base de données
SELON connexion_local()
CAS 1
test_debit.date =DateVersChaîne(DateSys(),"JJ/MM/AAAA")
test_debit.heure =HeureVersChaîne(HeureSys(),"HH:MM:SS")
sCuid_test est une chaîne
sCuid_test =INILit("info tech","cuid","",gsIni_systeme)
SI sCuid_test ="" ALORS
test_debit.cuid =""
SINON
test_debit.cuid =sCuid_test
FIN
test_debit.debit_down =sDebit_down
test_debit.debit_up =sDebit_up
test_debit.ping =""
sNd_test est une chaîne
sNd_test =PAGE_p_testdebit.SAI_nd
SI sNd_test ="" ALORS
test_debit.nd =""
SINON
test_debit.nd =sNd_test
FIN
test_debit.serveur ="bouygues"
SI HAjoute(test_debit) =Faux ALORS
error_log("Echec historisation test dans la bdd locale ","Test débit derrière ont","")
FIN
RENVOYER 3
AUTRE CAS
error_log("Echec ouverture bdd locale ","Test débit derrière ont","")
RENVOYER 3
FIN

AUTRE CAS
error_log("Echec test débit ","Test débit derrière ont",sIdlire)
RENVOYER 2 //Echec test débit
FIN
FIN


Code navigateur "bouygues_nav" :

Procedure bouygues_nav(Renvoiee,nRes)
SELON Renvoiee
CAS 1
POPUP_info.ZTR_SansNom1 ="fti obligatoire"
POPUP_info.IMG_Error..Visible =Vrai
POPUP_info.IMG_info..Visible =Faux
PopupAffiche(POPUP_info,popupCentre)
CAS 2
POPUP_info.ZTR_SansNom1 ="Echec test débit."+RC+"Pour plus d'informations, voir le log erreurs"
POPUP_info.IMG_Error..Visible =Vrai
POPUP_info.IMG_info..Visible =Faux
PopupAffiche(POPUP_info,popupCentre)
CAS 3
PageAffiche(PAGE_p_ont)
FIN


=====> dans le dernier code :
Quand c'est le cas 1 ou 2 ça fonctionne ( quand il y a une erreur )

Par contre pour le cas 3, on dirait que le code serveur ne va pas jusqu'au bout.
test_debit.date =DateVersChaîne(DateSys(),"JJ/MM/AAAA")
test_debit.heure =HeureVersChaîne(HeureSys(),"HH:MM:SS")
sCuid_test est une chaîne
sCuid_test =INILit("info tech","cuid","",gsIni_systeme)
SI sCuid_test ="" ALORS
test_debit.cuid =""
SINON
test_debit.cuid =sCuid_test
FIN
test_debit.debit_down =sDebit_down
test_debit.debit_up =sDebit_up
test_debit.ping =""
sNd_test est une chaîne
sNd_test =PAGE_p_testdebit.SAI_nd
SI sNd_test ="" ALORS
test_debit.nd =""
SINON
test_debit.nd =sNd_test
FIN
test_debit.serveur ="bouygues"
SI HAjoute(test_debit) =Faux ALORS
error_log("Echec historisation test dans la bdd locale ","Test débit derrière ont","")
FIN
RENVOYER 3


Pour être plus explicite, j'enregistre les résultats dans une base de données et renvoie la valeur 3 (dans le code serveur ajax).
Puis dans le code retour ajax du bouton, j'ouvre une page.

L'enregistrement dans la base de données se fait bien mais après plus rien, on dirait que le code s'arrete car je n'ai pas l'action suivante.

si quelqu'un a une idée :) ça fait deux semaines je suis dessus. :)
Merci d'avance
Registered member
945 messages
Popularité : +53 (63 votes)
Posted on May, 21 2018 - 1:07 AM
Bonjour,

Essaye de passer le champs de saisie de ta page en paramètre plutôt que de l'appeler directement à cette ligne la
sNd_test =PAGE_p_testdebit.SAI_nd


Jordan
Registered member
16 messages
Posted on May, 21 2018 - 4:30 PM
Hello.
Merci pour ta réponse.
J'ai essayé ce qui tu me proposes mais en vain.

Voici le contenu du script au cas où :

#!/bin/bash
#Effacer les fichier tempo si presents
if [ -f "/diagbox/web/tmp/dhclient.conf" ];then
echo "Le fichier de configuration existe !";
if sudo rm /diagbox/web/tmp/dhclient.conf; then
echo "fichier dhclient efface"
else
echo "Echec suppression tempo dhclient deja existant" >> /diagbox/web/tmp/error.log
exit
fi
fi

if [ -f "/diagbox/web/tmp/iperf_upload.txt" ];then
echo "Le fichier de iperf upload existe !";
if sudo rm /diagbox/web/tmp/iperf_upload.txt; then
echo "fichier iperf upload efface"
else
echo "Echec suppression tempo iperf upload deja existant" >> /diagbox/web/tmp/error.log
exit
fi
fi

if [ -f "/diagbox/web/tmp/iperf_download.txt" ];then
echo "Le fichier de iperf download existe !";
if sudo rm /diagbox/web/tmp/iperf_download.txt; then
echo "fichier iperf download efface"
else
echo "Echec suppression tempo iperf download deja existant" >> /diagbox/web/tmp/error.log
exit
fi
fi

if [ -f "/diagbox/web/tmp/error.log" ];then
echo "Le fichier log erreur existe !";
if sudo rm /diagbox/web/tmp/error.log; then
echo "fichier log erreur efface"
else
echo "Echec suppressionfichier log deja existant" >> /diagbox/web/tmp/error.log
exit
fi
fi


#fti conversion
USERNAME=$1
AUTHSTRING=00:00:00:00:00:00:00:00:00:00:00:66:74:69:2f
for (( i=0; i<${#USERNAME}; i++ )); do
  HEXCHAR=$(echo -n ${USERNAME:$i:1} | od -An -txC | xargs)
  AUTHSTRING=${AUTHSTRING}:${HEXCHAR}
done
echo ${AUTHSTRING} 

#Fichier dhclient
#Ecriture
echo 'option rfc3118-authentication code 90 = string;' >> /diagbox/web/tmp/dhclient.conf
echo "interface \"orange\" {" >> /diagbox/web/tmp/dhclient.conf
echo "send vendor-class-identifier \"sagem\";" >> /diagbox/web/tmp/dhclient.conf
echo "send user-class \"+FSVDSL_livebox.Internet.softathome.Livebox3\";" >> /diagbox/web/tmp/dhclient.conf
echo "send rfc3118-authentication ${AUTHSTRING} ;" >> /diagbox/web/tmp/dhclient.conf
echo 'request subnet-mask, routers,' >> /diagbox/web/tmp/dhclient.conf
echo 'domain-name, broadcast-address, dhcp-lease-time,' >> /diagbox/web/tmp/dhclient.conf
echo 'dhcp-renewal-time, dhcp-rebinding-time,' >> /diagbox/web/tmp/dhclient.conf
echo 'rfc3118-authentication;' >> /diagbox/web/tmp/dhclient.conf
echo 'supersede domain-name-servers 8.8.8.8, 8.8.4.4;' >> /diagbox/web/tmp/dhclient.conf
echo '}' >> /diagbox/web/tmp/dhclient.conf


#Deplacement
if sudo cp /diagbox/web/tmp/dhclient.conf /etc/dhcp/dhclient.conf; then
echo 'fichier dhclient modifie';
else
echo "Echec déplacement fichier dhclient" >> /diagbox/web/tmp/error.log
exit
fi

#iptables
if sudo cp /etc/iptables.ipv4.nat.backup_rescue_dhcp /etc/iptables.ipv4.nat; then
echo 'fichier iptables modifié';
else
echo "Echec déplacement fichier iptables" >> /diagbox/web/tmp/error.log
exit
fi
sudo iptables-restore < /etc/iptables.ipv4.nat

#Modification interfaces eth0
if sudo ifdown eth0; then
echo 'arret eth0';
else
echo "Echec arret ethO" >> /diagbox/web/tmp/error.log
exit
fi

if sudo cp /etc/network/interfaces_RESCUE_DHCP /etc/network/interfaces; then
echo 'configuration interfaces modifié';
else
echo "Echec modification configuration ethO" >> /diagbox/web/tmp/error.log
exit
fi

if sudo ifup -a; then
echo 'activation interfaces';
else
echo "Echec activation interfaces" >> /diagbox/web/tmp/error.log
exit
fi

for i in 0 1 2 3 4 5 6 7; do
## on définit pour chaque file une priorité
    if sudo vconfig set_egress_map orange $i $i >/dev/null; then
echo "definition priorité ok"
else
echo "definition priorité ko"
fi
done
if sudo vconfig set_egress_map orange 1 0 >/dev/null; then
echo " priorité 1 ok"
else
echo " priorité 1 ko"
fi
if sudo vconfig set_egress_map orange 0 6 >/dev/null; then
echo " priorité 2 ok"
else
echo " priorité 2 ko"
fi
  
sudo iptables -t mangle -A POSTROUTING -o orange -j CLASSIFY --set-class 0000:0001  
sudo iptables -t mangle -A POSTROUTING -o orange -p igmp -j CLASSIFY --set-class 0000:0006
sudo iptables -t mangle -A POSTROUTING -o orange -p icmp -j CLASSIFY --set-class 0000:0006 
sudo iptables -t mangle -A POSTROUTING -o orange -m dscp --dscp 0x2e -j CLASSIFY --set-class 0000:0005
sudo iptables -t mangle -A POSTROUTING -o orange -p udp --dport 67 -j CLASSIFY --set-class 0000:0006

sleep 10
#Test 8 pings
sudo ping 8.8.8.8 -c2 -q
if [ $? != 1 ]; then
echo "connexion derrière ont opérationnel" 
#test débit
#test débit
for port in 520{2..9}; do
  iperf3 -c bouygues.iperf.fr -4 -O 10 -t 20 -p $port | \
  awk -v msgPort="Port $port =>" '
    {
    if ($2 == "error")
        print msgPort, $0          >> "/diagbox/web/tmp/erreursIperf_upload.txt"
    else if ($NF ~ "sender|receiver")
        print msgPort, $7, $8, $NF >> "/diagbox/web/tmp/iperf_upload.txt"
    }'
  [[ ${PIPESTATUS[0]} == 0 ]] && break
done
#Download
for port in 520{2..9}; do
  iperf3 -c bouygues.iperf.fr -4 -O 5 -R -p $port | \
  awk -v msgPort="Port $port =>" '
    {
    if ($2 == "error")
        print msgPort, $0          >> "/diagbox/web/tmp/erreursIperf_download.txt"
    else if ($NF ~ "sender|receiver")
        print msgPort, $7, $8, $NF >> "/diagbox/web/tmp/iperf_download.txt"
    }'
  [[ ${PIPESTATUS[0]} == 0 ]] && break
done

#Remise en etat DHCP non rescue
#dhclient
if sudo cp /etc/dhcp/dhclient.conf.backup_orig /etc/dhcp/dhclient.conf; then
echo 'fichier dhclient modifie';
else
echo "Echec remise dhclient original" >> /diagbox/web/tmp/error.log
exit
fi

#iptables
if sudo cp /etc/iptables.ipv4.nat.backup_diagbox /etc/iptables.ipv4.nat; then
echo 'fichier iptables modifié';
else
echo "Echec remise fichier iptables origine" >> /diagbox/web/tmp/error.log
exit
fi
sudo iptables-restore < /etc/iptables.ipv4.nat

#Modification interfaces eth0
if sudo ifdown eth0; then
echo 'arret eth0';
else
echo "Echec arret ethO" >> /diagbox/web/tmp/error.log
exit
fi

if sudo ifdown orange; then
echo 'arret orange';
else
echo "Echec arret orange" >> /diagbox/web/tmp/error.log
exit
fi

if sudo cp /etc/network/interfaces_DHCP /etc/network/interfaces; then
echo 'configuration interfaces modifié';
else
echo "Echec modification configuration ethO" >> /diagbox/web/tmp/error.log
exit
fi

if sudo ifup eth0; then
echo 'activation eth0';
else
echo "Echec activation ethO" >> /diagbox/web/tmp/error.log
exit
fi

#Effacer les fichiers tempo
if sudo rm /diagbox/web/tmp/dhclient.conf; then
echo "Fichier tempo dhclient efface"
else
echo "Echec effacement fichier tempo dhclient "
fi

sudo iptables -t mangle -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t mangle -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -t mangle -A FORWARD -i wlan0 -o eth0 -j ACCEPT

#fini
echo "ok" >> /diagbox/web/tmp/error.log
else
echo "Echec ping" >> /diagbox/web/tmp/error.log
exit
fi
Posted on May, 23 2018 - 3:22 PM
Le 21/05/2018 à 14:30, Monsieur DOUCET a écrit :
Hello.
Merci pour ta réponse.
J'ai essayé ce qui tu me proposes mais en vain.

Voici le contenu du script au cas où :

[code:text]


j'espere juste que ta connexion ajax au serveur ne passe pas par celle
que tu testes, vu la connexion est coupée ;) ( ifdown eth0).
Registered member
16 messages
Posted on May, 23 2018 - 11:01 PM
Hello
Merci pour ta réponse :).
Il y a deux connexions :
-wifi type hotspot de la tablette ou pc vers la carte(asus tinkerboard)
-rj45 la carte a l'ont. (pour bypasser la box et etre en direcr).
Pensant que le wifi prime( vu qu'il ne tombe pas :).
Mais je vais explorer ta piste demain,
Registered member
945 messages
Popularité : +53 (63 votes)
Posted on May, 24 2018 - 1:05 AM
En combien de temps s'exécute ton script ?
Registered member
16 messages
Posted on May, 27 2018 - 1:02 AM
Hello
Il met un peu moins de 3 min, cest trop ?
Registered member
945 messages
Popularité : +53 (63 votes)
Posted on May, 27 2018 - 1:10 PM
Bonjour,

il s'agit peut-etre d'un timeout au niveau du serveur,

Essaye de lancer un script qui s'execute en moins d'une minute,

Ton serveur d'application est configurer comment au niveau des time-out ?

jordan
Registered member
16 messages
Posted on May, 27 2018 - 10:47 PM
Hello
Les scripts ne durant pas longtemps(en dessous d'1minute 30) passent bien.
J'ai modifie le timeout de nginx je l'ai mis a 6minutes pour etre large.
Toujours pareil.
Ce qui est bizarre c'est que le code enrefistre dans ma base de donnees et cette action, c'est l'avant derniere.