oozieoozie-coordinatoroozie-workflow

Oozie coordinator get day of the week


I am trying to create a condition in my Oozie workflow, where an action should be executed only on mondays (at the end of the workflow).

So far I added a decision node in the workflow, and the current date as parameter in the coordinator, and I need to test the day of the week.

coordinator.xml

<coordinator-app name="${project}_coord" frequency="${coord_frequency}" start="${coord_start_date}" end="${coord_end_date}" timezone="UTC" xmlns="uri:oozie:coordinator:0.1">
<controls>
    <concurrency>1</concurrency>
    <execution>LAST_ONLY</execution>
</controls>
<action>
    <workflow>
        <app-path>${wf_application_path}</app-path>
        <configuration>
            <property>
                <name>currentDate</name>
                <value>${coord:formatTime(coord:dateOffset(coord:nominalTime(), 0, ‘DAY’), “yyyyMMdd”)}</value>
            </property>
        </configuration>
    </workflow>
</action>

workflow.xml

<decision name = "send_on_monday">
    <switch>
        <case to = "send_file">
            ${currentDay} eq "MON"  <-------- test on day of the week
        </case>
        <default to = "sendSuccessEmail" />
    </switch>
</decision>

<action name="send_file">
    <ssh xmlns="uri:oozie:ssh-action:0.1">
        <host>${remoteNode}</host>
        <command>/pythonvenv</command>
        <args>${fsProjectDir}/send_file.py</args>
    </ssh>
    <ok to="sendSuccessEmail"/>
    <error to="sendTechnicalFailureEmail"/>
</action>

I didn't find information on how to get the day of the week with EL functions. Any help is appreciated.


Solution

  • I found a solution by using wf:actionData in a decision node :

    workflow.sh

    <action name="getDayOfWeek">
        <ssh xmlns="uri:oozie:ssh-action:0.1">
            <host>${remoteNode}</host>
            <command>${fsProjectDir}/scripts/dayOfWeek.sh</command>
            <capture-output/>
        </ssh>
        <ok to="send_on_monday"/>
        <error to="sendTechnicalFailureEmail"/>
    </action>
    
    <decision name="send_on_monday">
        <switch>
            <case to = "send_file">
                ${wf:actionData('getDayOfWeek')['day'] eq 'Mon'}
            </case>
            <default to = "sendSuccessEmail" />
        </switch>
    </decision>
    

    dayOfWeek.sh

    #!/bin/sh
    DOW=$(date +"%a")
    echo day=$DOW