Opened 10 years ago

Closed 10 years ago

#176 closed enhancement (fixed)

Bypass ssh tunneling difficulties for AMQP messages

Reported by: sdipsl Owned by: sdipsl
Priority: major Milestone: libIGCM_v2.2 metrics
Component: AMQP message Version: 2.0
Keywords: Cc:

Description

Description des uses cases
https://forge.ipsl.jussieu.fr/prodiguer/wiki/docs/metric

Je n'ai pas réussi à faire la succession de tunnel ssh nécessaire aux communications AMQP, problèmes de firewall lors des rebonds.

Pour avancer, Jérôme propose de faire transiter les messages de la chaîne par mail en attendant que l'on ait fait le nécessaire auprès des centres.

Salut Sébastien,

Ci-dessous une proposition de code pour faire le tunnel mail

send_AMQP_msg__MAILTUNNEL ()
{
    local b64_encoded_msg=$1

    local buffer=/tmp/foobar
    local mail_recipient="jerome.raciazek@ipsl.jussieu.fr"
    local send_messages=0
    local mail_frequency=3600 # in seconds
    local last_mail_date__file=/tmp/toto # use to keep trace when was last mail sent (maybe to be replaced with global variable)

    # init
    if [ ! -f "$buffer" ]; then
        touch "$buffer"
    fi

    messages_count=$(wc -l $buffer") # retrieve how many pending messages

    if [ ! -f "$last_mail_date__file" ]; then
        # if we are here, it means no mail sent yet

        if [ $messages_count -gt 0 ]; then
            # send the first mail

            send_messages=1
        fi
    else
        seconds_since_last_mail=$(( $(date +%s) - $(stat -c %Y $last_mail_date__file) )) # compute last time the file was changed (in seconds)

        if [ $seconds_since_last_mail -gt $mail_frequency ]; then
            send_messages=1
        fi
    fi

    # send mail / add message in buffer
    if [ $send_messages -eq 1 ]; then
        cat $buffer | mail -s mail_recipient  # send buffer
        > $buffer                             # clear buffer
        touch $last_mail_date__file           # memorize last mail date
    else
        echo $b64_encoded_msg >> $buffer
    fi
}

Normalement, il faut juste remplacer l'appel au client-C (sendAMQPMsg) par la fonction (send_AMQP_msg__MAILTUNNEL).
L'argument est le message encodé dans les deux cas.

A noter que je n'ai pas testé,
et aussi que cette fonction ne peut pas être lancé en parallèle, parce qu'il y a des noms de fichiers en dur
(exemple, le fichier "/tmp/buffer" qui contient la liste de messages).

A+
Jerome

Change History (2)

comment:1 Changed 10 years ago by sdipsl

  • Owner set to sdipsl
  • Status changed from new to assigned

comment:2 Changed 10 years ago by sdipsl

  • Resolution set to fixed
  • Status changed from assigned to closed

Done see r983

Note: See TracTickets for help on using tickets.