@@ -5,12 +5,16 @@ TODAY:=$(shell date +"%Y-%m-%d")
5
5
YESTERDAY: =$(shell date --date "$(TODAY ) -1 day" +"% Y-% m-% d")
6
6
ONEWEEK: =$(shell date --date "$(TODAY ) -7 day" +"% Y-% m-% d")
7
7
THREEWEEK: =$(shell date --date "$(TODAY ) -21 day" +"% Y-% m-% d")
8
+ LAST_SATURDAY: =$(shell date -d "last Saturday" +"% Y-% m-% d")
9
+ LAST_SUNDAY: =$(shell date -d "$(LAST_SATURDAY ) -6 day" +"% Y-% m-% d")
10
+ TUESDAY: =$(shell date -d "$(LAST_SATURDAY ) +3 day" +"% Y-% m-% d")
8
11
9
12
MESSAGES: ="messages/$(TODAY ) .messages"
10
13
11
14
PYTHON: =env/bin/python
12
15
QUALTRICS =$(shell $(PYTHON ) -m delphi_utils get input_dir)
13
16
WEIGHTS =$(shell $(PYTHON ) -m delphi_utils get weights_in_dir)
17
+ WEEKLY_WEIGHTS =$(shell $(PYTHON ) -m delphi_utils get weekly_weights_in_dir)
14
18
CIDS =$(shell $(PYTHON ) -m delphi_utils get weights_out_dir)
15
19
CIDS_EXP =$(shell $(PYTHON ) -m delphi_utils get experimental_weights_out_dir)
16
20
INDIVIDUAL =$(shell $(PYTHON ) -m delphi_utils get individual_dir)
@@ -24,6 +28,7 @@ DELPHI_SURVEY_EMAIL_USER=$(shell $(PYTHON) -m delphi_utils get delphi_survey_ema
24
28
SFTP_OPTIONS =$(shell $(PYTHON ) -m delphi_utils get sftp_options)
25
29
26
30
MAX_WEIGHTED =ls -1 $(WEIGHTS ) | grep dap | tail -1 | sed 's/_.*//;s/-//g;'
31
+ MAX_WEEKLY_WEIGHTED =ls -1 $(WEEKLY_WEIGHTS ) | grep map | tail -1 | sed 's/_.*//;s/-//g;'
27
32
28
33
ANTIJOIN: ="antijoin.cids.sorted.txt"
29
34
ANTIJOIN_EXP: ="antijoin.experimental.cids.sorted.txt"
42
47
SFTP_POST:=sshpass -p $(DELPHI_SURVEY_SFTP_PASSWORD) sftp $(SFTP_OPTIONS) -b <(echo -e "$${BATCH}") -P 2222 $(DELPHI_SURVEY_SFTP_USER)
43
48
endif
44
49
50
+ ifneq ("$(wildcard params.json) ","")
51
+ ifeq ($(WEIGHTS ) ,$(WEEKLY_WEIGHTS ) )
52
+ $(error "'weights_in_dir' and 'weekly_weights_in_dir' must be different.")
53
+ endif
54
+ endif
55
+
45
56
default :
46
57
@echo No default implemented yet
47
58
48
59
scratch :
49
60
mkdir scratch
50
61
rm -rf scratch/*
51
62
52
- tidy : receiving
53
- rm -rf tidy/$(RECEIVING )
54
- rm -rf tidy/$(INDIVIDUAL )
55
- rm -f tidy/params.json
56
- mkdir -p tidy tidy/$(RECEIVING ) tidy/$(INDIVIDUAL )
57
- cp params.json tidy/
58
- mv $(RECEIVING ) /* .csv tidy/$(RECEIVING )
59
- mv $(INDIVIDUAL ) /* .csv* tidy/$(INDIVIDUAL )
60
- mv $(INDIVIDUAL_RACEETH ) /* .csv* tidy/$(INDIVIDUAL_RACEETH )
61
- tar -czf scratch/tidy-` date +" %Y-%m-%d-%H%M%S" ` .tgz --exclude=' tidy-*.tgz' tidy
62
- mv scratch/* .tgz tidy/
63
+ $(INDIVIDUAL ) $(INDIVIDUAL_RACEETH ) :
64
+ mkdir $@
65
+
66
+ tidy_% : receiving
67
+ rm -rf $@ /$(RECEIVING )
68
+ rm -rf $@ /$(INDIVIDUAL )
69
+ rm -rf $@ /$(INDIVIDUAL_RACEETH )
70
+ rm -f $@ /params.json
71
+ mkdir -p $@ $@ /$(RECEIVING ) $@ /$(INDIVIDUAL ) $@ /$(INDIVIDUAL_RACEETH )
72
+ cp params.json $@ /
73
+ # Check for _any_ matching files using https://stackoverflow.com/a/6364244/14401472
74
+ if compgen -G " $( RECEIVING) /*.csv" > /dev/null; then mv $( RECEIVING) /* .csv $@ /$( RECEIVING) ; fi
75
+ mv $(INDIVIDUAL ) /* .csv* $@ /$(INDIVIDUAL )
76
+ mv $(INDIVIDUAL_RACEETH ) /* .csv* $@ /$(INDIVIDUAL_RACEETH )
77
+ tar -czf scratch/$@ -` date +" %Y-%m-%d-%H%M%S" ` .tgz --exclude=' tidy*-*.tgz' --exclude=' *.done' $@
78
+ mv scratch/* .tgz $@ /
63
79
64
80
clean :
65
81
rm -f $(RECEIVING ) /* .csv $(INDIVIDUAL ) /* .csv $(INDIVIDUAL_RACEETH ) /* .csv $(CIDS ) /* .csv $(CIDS_EXP ) /* .csv
@@ -114,6 +130,17 @@ params.json: $(TODAY)
114
130
output cids,individual,covidalert,archive,community \
115
131
start_date $(YESTERDAY )
116
132
133
+ params.weekly-weights.json : $(TODAY )
134
+ PAT=` grep fb-survey params.json | awk ' BEGIN{FS="\""}{print $$2}' | sed ' s/ /_/g;s/^/-e /' ` ; \
135
+ $(PYTHON ) -m delphi_utils set \
136
+ debug false \
137
+ produce_individual_raceeth true \
138
+ end_date $(LAST_SATURDAY ) \
139
+ input <( find $( QUALTRICS) -maxdepth 1 -newer $< -type f -name " *.csv" | sort | grep $$ {PAT} | tr ' \n' ' ,' | sed ' s_$(QUALTRICS)/__g;s/,$$//' ) \
140
+ parallel true \
141
+ output individual \
142
+ start_date $(LAST_SUNDAY )
143
+
117
144
$(WEIGHTS ) : $(TODAY )
118
145
[ -f $( WEIGHTS) ] || mkdir -p $(WEIGHTS )
119
146
cd " $( WEIGHTS) " ; \
@@ -133,6 +160,40 @@ $(WEIGHTS): $(TODAY)
133
160
echo " WARNING: $$ {MSG}" >> $(MESSAGES ) ; \
134
161
fi
135
162
163
+ $(WEEKLY_WEIGHTS ) : $(TODAY )
164
+ # This runs every day as a dependency of `pipeline`. A pipeline run is triggered when new weekly weights files are available.
165
+ [ -f $(WEEKLY_WEIGHTS) ] || mkdir -p $(WEEKLY_WEIGHTS)
166
+ cd "$(WEEKLY_WEIGHTS)"; \
167
+ BATCH="cd fb-interchange/cmu_respondent_ww_weights\nls -1"; \
168
+ NEW=`LC_ALL=C comm -23 <(sshpass -p $(DELPHI_SURVEY_SFTP_PASSWORD) sftp $(SFTP_OPTIONS) -b <(echo -e "$${BATCH}") -P 2222 $(DELPHI_SURVEY_SFTP_USER) | grep "^202" | LC_ALL=C sort) <(ls -1 | LC_ALL=C sort)`; \
169
+ echo "New weekly weights files:"; \
170
+ echo $${NEW}; \
171
+ for f in $${NEW}; do \
172
+ BATCH="$${BATCH}\nget $$f"; \
173
+ done; \
174
+ sshpass -p $(DELPHI_SURVEY_SFTP_PASSWORD) sftp $(SFTP_OPTIONS) -b <(echo -e "$${BATCH}") -P 2222 $(DELPHI_SURVEY_SFTP_USER) || exit 90; \
175
+ cd -; \
176
+ touch -d $(YESTERDAY) $(WEEKLY_WEIGHTS); \
177
+ EXPECTED_WEEKLY_WEIGHTED=`date --date='$(LAST_SUNDAY)' +'%Y%m%d'`; \
178
+ MIN_NEW_WEEKLY_WEIGHTED=`grep map <<< $${NEW} | head -1 | sed 's/_.*//;s/-//g;'`; \
179
+ if [[ `wc -w <<< $${NEW}` -gt 0 ]] && [[ $$MIN_NEW_WEEKLY_WEIGHTED -ne $$EXPECTED_WEEKLY_WEIGHTED ]]; then \
180
+ MSG="Expected new weekly weights files to start on: $$EXPECTED_WEEKLY_WEIGHTED; Actual new files starts on: $$MIN_NEW_WEEKLY_WEIGHTED"; \
181
+ echo "WARNING: $${MSG}" >> $(MESSAGES); \
182
+ fi; \
183
+ MAX_WEEKLY_WEIGHTED=`$(MAX_WEEKLY_WEIGHTED)`; \
184
+ if [[ `date --date='$(TODAY)' +'%Y%m%d'` -gt `date --date='$(TUESDAY)' +'%Y%m%d'` ]] && [[ $$MAX_WEEKLY_WEIGHTED -lt $$EXPECTED_WEEKLY_WEIGHTED ]]; then \
185
+ MSG="Weekly weights are old; Expected most recent weekly weights file to start on: $$EXPECTED_WEEKLY_WEIGHTED; Actual most recent file starts on: $$MAX_WEEKLY_WEIGHTED"; \
186
+ echo "WARNING: $${MSG}" >> $(MESSAGES); \
187
+ fi; \
188
+ if [[ ! -f tidy_weekly/$(LAST_SUNDAY)-weekly-weights.done ]] && [[ $$MAX_WEEKLY_WEIGHTED -eq $$EXPECTED_WEEKLY_WEIGHTED ]]; then \
189
+ if [ -f params.json ]; then cp params.json params.daily.json; fi; \
190
+ $(MAKE) weekly-weights-pipeline; \
191
+ if [ -f params.daily.json ]; then \
192
+ cp params.daily.json params.json; \
193
+ rm -f params.daily.json; \
194
+ fi; \
195
+ fi
196
+
136
197
dev : delphiFacebook_1.0.tar.gz
137
198
R CMD INSTALL delphiFacebook_1.0.tar.gz
138
199
@@ -146,13 +207,18 @@ run-R: $(CIDS) $(CIDS_EXP)
146
207
grep " scheduled core" tmp ; \
147
208
[ " $$ ?" -eq 1 ]
148
209
149
- pipeline : scratch init-qualtrics params.json $(WEIGHTS ) run-R post-cids post-experimental-cids post-individual post-individual-raceeth post-done tidy
210
+ pipeline : scratch init-qualtrics params.json $(WEIGHTS ) run-R post-cids post-experimental-cids post-individual post-individual-raceeth post-done tidy_daily $( WEEKLY_WEIGHTS )
150
211
grep $(TODAY ) params.json
151
212
[ -f $( YESTERDAY) ] && rm $(YESTERDAY ) || true
152
213
touch $@
153
214
echo " SUCCESS: $( DRY_MESSAGE) pipeline complete" >> $(MESSAGES )
154
215
chmod o+w $(MESSAGES )
155
216
217
+ weekly-weights-pipeline : scratch init-qualtrics params.weekly-weights.json run-R post-individual post-individual-raceeth tidy_weekly
218
+ touch $@
219
+ echo " SUCCESS: $( DRY_MESSAGE) completed weekly weights pipeline" >> $(MESSAGES )
220
+ touch tidy_weekly/$(LAST_SUNDAY ) -weekly-weights.done
221
+
156
222
coverage :
157
223
Rscript -e ' covr::package_coverage("delphiFacebook")'
158
224
0 commit comments