Skip to content

SMTP-Mailer State Diagram


flowchart TB
    startup([Startup])
    loading_settings(Loading settings)
    start_service_probe(Start service probe<br>with service_state=UP)
    connecting_to_rabbitmq(Connecting to RabbitMQ)
    is_rabbitmq_connection_successful{Success?}
    pause_before_reconnect(Pause until<br>one second after<br>last connection attempt)
    set_to_ready(Set service_state=READY)
    set_to_up(Set service_state=UP)
    waiting_for_delivery(Waiting for delivery<br>from RabbitMQ)
    is_successful_delivery{Is successful?}
    is_valid_task{Is it a valid task?}
    reject_without_requeue[Reject to RabbitMQ<br>with requeue=false]
    is_reject_successful{Is rejection successful?}
    send_notification_mail[Send notification mail]
    is_mail_send_successful{Is successful?}
    is_failure_inherent_to_task{Is the failure<br>inherent to<br>the task?}
    reject_with_requeue[Reject to RabbitMQ<br>with requeue=true]
    is_mail_send_timed_out{Timeout?}
    acknowledge_delivery[Acknowledge delivery<br>to RabbitMQ]
    is_acknowledge_successful{Is acknowledge<br>successful?}

    startup --> loading_settings
    loading_settings --> start_service_probe
    start_service_probe --> connecting_to_rabbitmq
    connecting_to_rabbitmq --> is_rabbitmq_connection_successful
    is_rabbitmq_connection_successful -- No --> pause_before_reconnect
    pause_before_reconnect --> connecting_to_rabbitmq
    is_rabbitmq_connection_successful -- Yes --> set_to_ready
    set_to_ready --> waiting_for_delivery
    waiting_for_delivery -- Disconnected from RabbitMQ --> set_to_up
    set_to_up --> pause_before_reconnect
    waiting_for_delivery --> is_successful_delivery
    is_successful_delivery -- No --> set_to_up
    is_successful_delivery -- Yes --> is_valid_task
    is_valid_task -- No --> reject_without_requeue
    is_valid_task -- Yes --> send_notification_mail
    send_notification_mail --> is_mail_send_successful
    is_mail_send_successful -- Yes --> acknowledge_delivery
    acknowledge_delivery --> is_acknowledge_successful
    is_acknowledge_successful -- No --> set_to_up
    is_acknowledge_successful -- Yes --> waiting_for_delivery
    is_mail_send_successful -- No --> is_mail_send_timed_out
    is_mail_send_timed_out -- No --> is_failure_inherent_to_task
    is_mail_send_timed_out -- Yes --> reject_with_requeue
    reject_without_requeue --> is_reject_successful
    is_reject_successful -- No --> set_to_up
    is_reject_successful -- Yes --> waiting_for_delivery
    is_failure_inherent_to_task -- Yes --> reject_without_requeue
    is_failure_inherent_to_task -- No --> reject_with_requeue
    reject_with_requeue --> is_reject_successful

    subgraph init [Iniitialization]
        loading_settings
        start_service_probe
    end

    subgraph establish_rabbitmq_connection [Establish RabbitMQ Connection]
        connecting_to_rabbitmq
        is_rabbitmq_connection_successful
        pause_before_reconnect
        set_to_up
        set_to_ready
    end

    subgraph processing_tasks [Processing tasks]
        waiting_for_delivery
        is_successful_delivery
        is_valid_task
        send_notification_mail
        is_mail_send_successful
        acknowledge_delivery
        is_acknowledge_successful
    end

    subgraph task_failure_handling [Task failure handling]
        reject_without_requeue
        reject_with_requeue
        is_failure_inherent_to_task
        is_mail_send_timed_out
        is_reject_successful
    end