• delle variabili in bash e in php

    From Leonardo Boselli@21:1/5 to All on Wed Mar 19 14:30:01 2025
    This message is in MIME format. The first part should be readable text,
    while the remaining parts are likely unreadable without MIME-aware tools.

    Qualche settimana fa avevo fatto un post che chiedava suggerimenti su come attivare al volo dei processi ecc ecc. Ruguardanto tutto ho deciso di
    adottare un diverso metodo, che non richiede processi separati in ascolto
    su porte diverse.
    Tuttavia mi sono scontrato in due "piccoli" problemi, probabilmente
    facilmente risolvibili in modo elegante, ma per ora ho trovato solo modi "macchinosi".
    Premessa: i dati vengono o inviati da processi esterni creando dei file
    che contengono all'interno il dato (o da solo o in un record CSV) oppure aggiornati periodicamante da un processo cron
    1. se ho uno script bash posso fare i test su variabili locali o varibili
    di ambiente. Come faccio a fare il test sul contenuto di un file, senza
    dovere fare prima un varlocale=`cat file` ?
    1bis. nel test di bash come metto una formula ?
    2. la presentazione viene fatta da uno script php, in certi casi però è necessario che questo script "solleciti" i dati aggiornati.
    il modo più semplice è fare una chiamata http al server remoto, che però fornsce un record json .
    Questo recold viene decodificato senza problemi con jq ma mi sono trovato
    di fronte a un grosso problema con php, o chiesto a esperti di quel
    sistema, ma non hannop saputo dare rispposte valide, e tutti gli esmpi
    fanno riferimento a record jso "piatti".
    Il record che mi arriva è del tipo {"nome":"as001","gate:1":{"last_time":1742374708,"action"=1,"res":[0.04,19]},"gate:2":{"last_time":1742374718,"action"=3,"res":[1.00,0.99]}}

    e a me servono gate:1.action e i due valori di res . ma in php non sono riuscito a trovare un modo di tirarli fuori, dovo aver dato $ob=jsondecode($record);
    (ma var_dump($record) me li fa vedere tutti, quindi la decodifica è giusta
    ...)

    -- Leonardo Boselli
    Firenze, Toscana, Europa
    http://i.trail.it

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?iso-8859-15?Q?Francesco_Potort=EC@21:1/5 to All on Thu Mar 20 00:20:01 2025
    1. se ho uno script bash posso fare i test su variabili locali o varibili
    di ambiente. Come faccio a fare il test sul contenuto di un file, senza >dovere fare prima un varlocale=`cat file` ?

    Con grep, per esempio, se ho capito la domanda.

    1bis. nel test di bash come metto una formula ?

    Che formula? se fai un esempio si può provare a rispondere.

    -- fp

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?utf-8?Q?Francesco_Potort=C3=AC?=@21:1/5 to All on Fri Mar 21 00:00:01 2025
    while [ NOW -lt $c ]
    do
    sleep 20
    aggiorna-status-variabili
    if [VAR-A -lt $a && VAR-B -lt $b ]
    then
    esegui-quello-che-deve-fare
    break
    else
    sleep 20
    aggiorna-status-variabili
    fi
    done

    ora NOW è il tempo ... come la infilo nel loop (ossia il loop attende che >si verifichino de condizioni su VAR-A e VAR-B, ma solo fino a un certo >orario.

    Qualcosa del tipo

    ((maxwait = 600))
    ((loopwait = 20))
    while true; do
    curtime=$(date +%s)
    ((deadline = curtime+maxwait))
    while sleep $((loopwait)); do
    curtime=$(date +%s)
    if condition_is_met || ((curtime > deadline))
    do_something
    break
    fi
    done
    done

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Leonardo Boselli@21:1/5 to Diego Zuccato on Thu Mar 20 23:30:01 2025
    This message is in MIME format. The first part should be readable text,
    while the remaining parts are likely unreadable without MIME-aware tools.

    On Thu, 20 Mar 2025, Diego Zuccato wrote:
    Il 19/03/2025 14:22, Leonardo Boselli ha scritto:
    Premessa: i dati vengono o inviati da processi esterni creando dei file che >> contengono all'interno il dato (o da solo o in un record CSV) oppure
    aggiornati periodicamante da un processo cron
    Hint: *standardizza* in un unico formato i dati da leggere. Cioè fai in modo che da ogni sorgente arrivino nello stesso formato. Crei dei filtri per ogni sorgente che convertono da quel che genera quella sorgente al formato che intendi usare dopo. E già hai ridotto notevolmente la complessità.

    sono tutti csv, con uno o più valori perché ogni lettura può fornire più valri, di fenomeni differenti.

     1. se ho uno script bash posso fare i test su variabili locali o varibili >> di ambiente. Come faccio a fare il test sul contenuto di un file, senza
    dovere fare prima un varlocale=`cat file` ?
    Che test devi fare sul contenuto? Per capire se è stato aggiornato può essere
    sufficiente analizzare i metadati, ma se devi proprio guardare il contenuto lo devi leggere e parsare.

    il problema è che in genere ogni script sarebbe un:

    while [ NOW -lt $c ]
    do
    sleep 20
    aggiorna-status-variabili
    if [VAR-A -lt $a && VAR-B -lt $b ]
    then
    esegui-quello-che-deve-fare
    break
    else
    sleep 20
    aggiorna-status-variabili
    fi
    done

    ora NOW è il tempo ... come la infilo nel loop (ossia il loop attende che
    si verifichino de condizioni su VAR-A e VAR-B, ma solo fino a un certo
    orario.

     1bis. nel test di bash come metto una formula ?
    Dipende dalla formula.

    vedi sopra ...

     2. la presentazione viene fatta da uno script php, in certi casi però è >> necessario che questo script "solleciti" i dati aggiornati.
    il modo più semplice è fare una chiamata http al server remoto, che però >> fornsce un record json .
    E già nobbuono. Se servono i dati aggiornati, non deve (generalmente) essere la presentazione a richiederli ma il filtro di ingresso.

    la presentazione sa QUANDO gli servono i dati aggiornati, e quindi
    sollecita l'aggiornamento solo quando gli servono veramente. misurare
    certi valori "disturba" il fenomeno misurato, per cui se li chiedi troppo spesso, il valore ha un errore dovuto al disturbo della misura.

    Quindi devi usare
    $ob['gate:1']['action']
    $ob['gate:1']['res'][0]
    $ob['gate:1']['res'][1]

    FUNZIONA !!!!!!

    a questo punto mi sa che lo script lo faccio direttamante in php

    Grazie per l'aiuto !

    --
    Leonardo Boselli
    Firenze, Toscana, Europa

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Marco Gaiarin@21:1/5 to All on Fri Mar 21 08:30:01 2025
    Mandi! Leonardo Boselli
    In chel di` si favelave...

    1. se ho uno script bash posso fare i test su variabili locali o varibili
    di ambiente. Come faccio a fare il test sul contenuto di un file, senza dovere fare prima un varlocale=`cat file` ?

    Questa la so.

    if [ -s "/nome/del/file.ext" ]; then
    echo "Il file esiste e non è vuoto"
    fi

    --

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Leonardo Boselli@21:1/5 to Marco Gaiarin on Fri Mar 21 11:50:01 2025
    On Thu, 20 Mar 2025, Marco Gaiarin wrote:
    Questa la so.

    eh no ... il file contiene una sequenza di caratteri [0-9.+-]
    rappresentazione decimale di un numero reale. il test deve essere fatto su questo numero, non sulla sua esistenza !

    --
    Leonardo Boselli
    Firenze, Toscana, Europa
    http://i.trail.it

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)