Skip to main content
summaryrefslogtreecommitdiffstats
blob: 244c015f43d3faa3dd9617fbd74717f40264e77c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/env bash

# cron job a committer can run,
# say, every 15 minutes, or similar. If a
# file appears in the promoteLocation, then execute it, and if all goes
# well, then remove (or move) that file.

# Note: if there are errors that occur during this cron job, they go to the
# "default user" for that crontab, which may be what's desired, but you can also
# set MAILTO in your crontab, cautiously, to send it where ever you'd like.

# Start with minimal path for consistency across machines
# plus, cron jobs do not inherit an environment
# care is needed not have anything in ${HOME}/bin that would effect the build
# unintentionally, but is required to make use of "source localBuildProperties.shsource" on
# local machines.
# Likely only a "release engineer" would be interested, such as to override "SIGNING" (setting it
# to false) for a test I-build on a remote machine.
export PATH=/usr/local/bin:/usr/bin:/bin:${HOME}/bin
# unset common variables (some defined for genie.releng) which we don't want (or, set ourselves)
unset JAVA_HOME
unset JAVA_ROOT
unset JAVA_JRE
unset CLASSPATH
unset JAVA_BINDIR
unset JRE_HOME

# 0002 is often the default for shell users, but it is not when ran from
# a cron job, so we set it explicitly, so releng group has write access to anything
# we create.
oldumask=`umask`
umask 0002
# Remember, don't echo except when testing, or mail will be sent each time it runs.
# echo "umask explicitly set to 0002, old value was $oldumask"

# To allow this cron job to work from hudson, or traditional crontab
if [[ -z "${WORKSPACE}" ]]
then
  export UTILITIES_HOME=/shared/eclipse
  # TODO: probably should not set WORKSPACE, since
  # doubt if it is used.
  export RUNNING_ON_HUDSON=false
else
  export UTILITIES_HOME=${WORKSPACE}/utilities/production
  export RUNNING_ON_HUDSON=true
fi


# cron jobs and hudson jobs must know about and use this same
# location to put its collections scripts. (i.e. implicit tight coupling)
testdataLocation=/shared/eclipse/testjobqueue
# endure exists
if [[ ! -e "${testdataLocation}" ]]
then
  mkdir -p "${testdataLocation}"
fi

# Note: if we ever need to handle spaces, or newlines in names (seems unlikely) this
# for loop won't quiet work, and will be more complicated (or, at least unintuitive).

# Remember, do no call "exit" from for loop for normal cases, else
# the whole script exits. Could use "continue" or "break" if needed.

allfiles=$( find $testdataLocation -name "testjobdata*.txt" )
for datafile in $allfiles
do

  # having an echo here will cause cron job to send mail for EACH job, even if all is fine.
  # so use only for testing.
  #echo $datafile

  if [[ -z "$datafile" ]]
  then
    # would be an odd error, but nothing to do (Remember, can not have an empty if/then/else clause! Syntax error.
    echo "WARNING: unexpectedly found datafile variable to be null or empty."
  else
    # found a file, confirm is file for safety
    if [[ -f $datafile ]]
    then

      # if found a file to execute, temporarily change its name to "RUNNING-$datafile
      # so a subsequent cron job won't find it (if it does not finish by the time of the next cron job).
      runningdatafile=$testdataLocation/RUNNING_$(basename $datafile)
      mv  $datafile $runningdatafile
      # notice these logs are concatenated on purpose, to give some "history", but
      # that means has to be "manually" removed every now and then.
      # improve as desired.
      # NOTE: if running on Hudson, we do not collect the logs, since they
      # will be part of Hudson's log.
      if [[ "${RUNNING_ON_HUDSON}" == "false" ]]
      then
        /bin/bash ${UTILITIES_HOME}/sdk/collect.sh < $runningdatafile 1>>$testdataLocation/collection-out.txt 2>>$testdataLocation/collection-err.txt
      else
        /bin/bash ${UTILITIES_HOME}/sdk/collect.sh < $runningdatafile
      fi
      # to test cron job, without doing anything, comment out above line, and uncomment folloiwng line.
      # then try various types of files file names, etc.
      # echo "DEBUG: normally would execute file here: $datafile" 1>>$testdataLocation/collection-out.txt 2>>$testdataLocation/datacollect-err.txt
      rccode=$?
      if [[ $rccode != 0 ]]
      then
        echo "ERROR: collection returned an error: $rccode"
        echo "       datafile: $datafile"
        mv $runningdatafile $testdataLocation/ERROR_$(basename $datafile)
        exit 1
      else
        # all is ok, we'll move the file to "RAN-" in case needed for later inspection,
        # if things go wrong. Perhaps eventually just remove them?
        mv $runningdatafile $testdataLocation/RAN_$(basename $datafile)
        # if testing scripts, only, sometimes handy to leave named to catch the next cronjob
        #mv $runningdatafile $testdataLocation/$(basename $datafile)
      fi
    else
      echo "ERROR: data file found, but was not an actual file?"
      echo "         datafile: $datafile"
      exit 1
    fi
  fi
done

Back to the top